1 This is gccint.info, produced by makeinfo version 5.2 from gccint.texi. 2 3 Copyright (C) 1988-2013 Free Software Foundation, Inc. 4 5 Permission is granted to copy, distribute and/or modify this document 6 under the terms of the GNU Free Documentation License, Version 1.3 or 7 any later version published by the Free Software Foundation; with the 8 Invariant Sections being "Funding Free Software", the Front-Cover Texts 9 being (a) (see below), and with the Back-Cover Texts being (b) (see 10 below). A copy of the license is included in the section entitled "GNU 11 Free 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. 20 Copies published by the Free Software Foundation raise funds for GNU 21 development. 22 INFO-DIR-SECTION Software development 23 START-INFO-DIR-ENTRY 24 * gccint: (gccint). Internals of the GNU Compiler Collection. 25 END-INFO-DIR-ENTRY 26 27 This file documents the internals of the GNU compilers. 28 29 Copyright (C) 1988-2013 Free Software Foundation, Inc. 30 31 Permission is granted to copy, distribute and/or modify this document 32 under the terms of the GNU Free Documentation License, Version 1.3 or 33 any later version published by the Free Software Foundation; with the 34 Invariant Sections being "Funding Free Software", the Front-Cover Texts 35 being (a) (see below), and with the Back-Cover Texts being (b) (see 36 below). A copy of the license is included in the section entitled "GNU 37 Free 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. 46 Copies published by the Free Software Foundation raise funds for GNU 47 development. 48 49 50 File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 51 52 Introduction 53 ************ 54 55 This manual documents the internals of the GNU compilers, including how 56 to port them to new targets and some information about how to write 57 front ends for new languages. It corresponds to the compilers (GCC) 58 version 4.8.3. The use of the GNU compilers is documented in a separate 59 manual. *Note Introduction: (gcc)Top. 60 61 This manual is mainly a reference manual rather than a tutorial. It 62 discusses how to contribute to GCC (*note Contributing::), the 63 characteristics 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 66 GCC front ends are written (*note Languages::). It then describes the 67 GCC source tree structure and build system, some of the interfaces to 68 GCC front ends, and how support for a target system is implemented in 69 GCC. 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 * Funding:: How to help assure funding for free software. 102 * GNU Project:: The GNU Project and GNU/Linux. 103 104 * Copying:: GNU General Public License says 105 how you can copy and share GCC. 106 * GNU Free Documentation License:: How you can copy and share this manual. 107 * Contributors:: People who have contributed to GCC. 108 109 * Option Index:: Index to command line options. 110 * Concept Index:: Index of concepts and symbol names. 111 112 113 File: gccint.info, Node: Contributing, Next: Portability, Up: Top 114 115 1 Contributing to GCC Development 116 ********************************* 117 118 If you would like to help pretest GCC releases to assure they work well, 119 current development sources are available by SVN (see 120 <http://gcc.gnu.org/svn.html>). Source and binary snapshots are also 121 available for FTP; see <http://gcc.gnu.org/snapshots.html>. 122 123 If you would like to work on improvements to GCC, please read the 124 advice at these URLs: 125 126 <http://gcc.gnu.org/contribute.html> 127 <http://gcc.gnu.org/contributewhy.html> 128 129 for information on how to make useful contributions and avoid 130 duplication of effort. Suggested projects are listed at 131 <http://gcc.gnu.org/projects/>. 132 133 134 File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 135 136 2 GCC and Portability 137 ********************* 138 139 GCC itself aims to be portable to any machine where 'int' is at least a 140 32-bit type. It aims to target machines with a flat (non-segmented) 141 byte addressed data address space (the code address space can be 142 separate). Target ABIs may have 8, 16, 32 or 64-bit 'int' type. 'char' 143 can be wider than 8 bits. 144 145 GCC gets most of the information about the target machine from a 146 machine description which gives an algebraic formula for each of the 147 machine's instructions. This is a very clean way to describe the 148 target. But when the compiler needs information that is difficult to 149 express in this fashion, ad-hoc parameters have been defined for machine 150 descriptions. The purpose of portability is to reduce the total work 151 needed on the compiler; it was not of interest for its own sake. 152 153 GCC does not contain machine dependent code, but it does contain code 154 that depends on machine parameters such as endianness (whether the most 155 significant byte has the highest or lowest address of the bytes in a 156 word) and the availability of autoincrement addressing. In the 157 RTL-generation pass, it is often necessary to have multiple strategies 158 for generating code for a particular kind of syntax tree, strategies 159 that are usable for different combinations of parameters. Often, not 160 all possible cases have been addressed, but only the common ones or only 161 the ones that have been encountered. As a result, a new target may 162 require additional strategies. You will know if this happens because 163 the compiler will call 'abort'. Fortunately, the new strategies can be 164 added in a machine-independent fashion, and will affect only the target 165 machines that need them. 166 167 168 File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 169 170 3 Interfacing to GCC Output 171 *************************** 172 173 GCC is normally configured to use the same function calling convention 174 normally in use on the target system. This is done with the 175 machine-description macros described (*note Target Macros::). 176 177 However, returning of structure and union values is done differently on 178 some target machines. As a result, functions compiled with PCC 179 returning such types cannot be called from code compiled with GCC, and 180 vice versa. This does not cause trouble often because few Unix library 181 routines return structures or unions. 182 183 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long 184 in the same registers used for 'int' or 'double' return values. (GCC 185 typically allocates variables of such types in registers also.) 186 Structures and unions of other sizes are returned by storing them into 187 an address passed by the caller (usually in a register). The target 188 hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 189 190 By contrast, PCC on most target machines returns structures and unions 191 of any size by copying the data into an area of static storage, and then 192 returning the address of that storage as if it were a pointer value. 193 The caller must copy the data from that memory area to the place where 194 the value is wanted. This is slower than the method used by GCC, and 195 fails to be reentrant. 196 197 On some target machines, such as RISC machines and the 80386, the 198 standard system convention is to pass to the subroutine the address of 199 where to return the value. On these machines, GCC has been configured 200 to be compatible with the standard compiler, when this method is used. 201 It may not be compatible for structures of 1, 2, 4 or 8 bytes. 202 203 GCC uses the system's standard convention for passing arguments. On 204 some machines, the first few arguments are passed in registers; in 205 others, all are passed on the stack. It would be possible to use 206 registers for argument passing on any machine, and this would probably 207 result in a significant speedup. But the result would be complete 208 incompatibility with code that follows the standard convention. So this 209 change is practical only if you are switching to GCC as the sole C 210 compiler for the system. We may implement register argument passing on 211 certain machines once we have a complete GNU system so that we can 212 compile the libraries with GCC. 213 214 On some machines (particularly the SPARC), certain types of arguments 215 are passed "by invisible reference". This means that the value is 216 stored in memory, and the address of the memory location is passed to 217 the subroutine. 218 219 If you use 'longjmp', beware of automatic variables. ISO C says that 220 automatic variables that are not declared 'volatile' have undefined 221 values after a 'longjmp'. And this is all GCC promises to do, because 222 it is very difficult to restore register variables correctly, and one of 223 GCC's features is that it can put variables in registers without your 224 asking it to. 225 226 227 File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 228 229 4 The GCC low-level runtime library 230 *********************************** 231 232 GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1' 233 on some platforms. GCC generates calls to routines in this library 234 automatically, whenever it needs to perform some operation that is too 235 complicated to emit inline code for. 236 237 Most of the routines in 'libgcc' handle arithmetic operations that the 238 target processor cannot perform directly. This includes integer 239 multiply and divide on some machines, and all floating-point and 240 fixed-point operations on other machines. 'libgcc' also includes 241 routines for exception handling, and a handful of miscellaneous 242 operations. 243 244 Some of these routines can be defined in mostly machine-independent C. 245 Others must be hand-written in assembly language for each processor that 246 needs them. 247 248 GCC will also generate calls to C library routines, such as 'memcpy' 249 and 'memset', in some cases. The set of routines that GCC may possibly 250 use is documented in *note (gcc)Other Builtins::. 251 252 These routines take arguments and return values of a specific machine 253 mode, not a specific C type. *Note Machine Modes::, for an explanation 254 of this concept. For illustrative purposes, in this chapter the 255 floating point type 'float' is assumed to correspond to 'SFmode'; 256 'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'. 257 Similarly, the integer types 'int' and 'unsigned int' correspond to 258 'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and 259 'unsigned long long' to 'TImode'. 260 261 * Menu: 262 263 * Integer library routines:: 264 * Soft float library routines:: 265 * Decimal float library routines:: 266 * Fixed-point fractional library routines:: 267 * Exception handling routines:: 268 * Miscellaneous routines:: 269 270 271 File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 272 273 4.1 Routines for integer arithmetic 274 =================================== 275 276 The integer arithmetic routines are used on platforms that don't provide 277 hardware support for arithmetic operations on some modes. 278 279 4.1.1 Arithmetic functions 280 -------------------------- 281 282 -- Runtime Function: int __ashlsi3 (int A, int B) 283 -- Runtime Function: long __ashldi3 (long A, int B) 284 -- Runtime Function: long long __ashlti3 (long long A, int B) 285 These functions return the result of shifting A left by B bits. 286 287 -- Runtime Function: int __ashrsi3 (int A, int B) 288 -- Runtime Function: long __ashrdi3 (long A, int B) 289 -- Runtime Function: long long __ashrti3 (long long A, int B) 290 These functions return the result of arithmetically shifting A 291 right by B bits. 292 293 -- Runtime Function: int __divsi3 (int A, int B) 294 -- Runtime Function: long __divdi3 (long A, long B) 295 -- Runtime Function: long long __divti3 (long long A, long long B) 296 These functions return the quotient of the signed division of A and 297 B. 298 299 -- Runtime Function: int __lshrsi3 (int A, int B) 300 -- Runtime Function: long __lshrdi3 (long A, int B) 301 -- Runtime Function: long long __lshrti3 (long long A, int B) 302 These functions return the result of logically shifting A right by 303 B bits. 304 305 -- Runtime Function: int __modsi3 (int A, int B) 306 -- Runtime Function: long __moddi3 (long A, long B) 307 -- Runtime Function: long long __modti3 (long long A, long long B) 308 These functions return the remainder of the signed division of A 309 and B. 310 311 -- Runtime Function: int __mulsi3 (int A, int B) 312 -- Runtime Function: long __muldi3 (long A, long B) 313 -- Runtime Function: long long __multi3 (long long A, long long B) 314 These functions return the product of A and B. 315 316 -- Runtime Function: long __negdi2 (long A) 317 -- Runtime Function: long long __negti2 (long long A) 318 These functions return the negation of A. 319 320 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 321 int B) 322 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned 323 long B) 324 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 325 A, unsigned long long B) 326 These functions return the quotient of the unsigned division of A 327 and B. 328 329 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, 330 unsigned long B, unsigned long *C) 331 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long 332 long A, unsigned long long B, unsigned long long *C) 333 These functions calculate both the quotient and remainder of the 334 unsigned division of A and B. The return value is the quotient, 335 and the remainder is placed in variable pointed to by C. 336 337 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 338 int B) 339 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned 340 long B) 341 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 342 A, unsigned long long B) 343 These functions return the remainder of the unsigned division of A 344 and B. 345 346 4.1.2 Comparison functions 347 -------------------------- 348 349 The following functions implement integral comparisons. These functions 350 implement a low-level compare, upon which the higher level comparison 351 operators (such as less than and greater than or equal to) can be 352 constructed. The returned values lie in the range zero to two, to allow 353 the high-level operators to be implemented by testing the returned 354 result using either signed or unsigned comparison. 355 356 -- Runtime Function: int __cmpdi2 (long A, long B) 357 -- Runtime Function: int __cmpti2 (long long A, long long B) 358 These functions perform a signed comparison of A and B. If A is 359 less than B, they return 0; if A is greater than B, they return 2; 360 and if A and B are equal they return 1. 361 362 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 363 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long 364 long B) 365 These functions perform an unsigned comparison of A and B. If A is 366 less than B, they return 0; if A is greater than B, they return 2; 367 and if A and B are equal they return 1. 368 369 4.1.3 Trapping arithmetic functions 370 ----------------------------------- 371 372 The following functions implement trapping arithmetic. These functions 373 call the libc function 'abort' upon signed arithmetic overflow. 374 375 -- Runtime Function: int __absvsi2 (int A) 376 -- Runtime Function: long __absvdi2 (long A) 377 These functions return the absolute value of A. 378 379 -- Runtime Function: int __addvsi3 (int A, int B) 380 -- Runtime Function: long __addvdi3 (long A, long B) 381 These functions return the sum of A and B; that is 'A + B'. 382 383 -- Runtime Function: int __mulvsi3 (int A, int B) 384 -- Runtime Function: long __mulvdi3 (long A, long B) 385 The functions return the product of A and B; that is 'A * B'. 386 387 -- Runtime Function: int __negvsi2 (int A) 388 -- Runtime Function: long __negvdi2 (long A) 389 These functions return the negation of A; that is '-A'. 390 391 -- Runtime Function: int __subvsi3 (int A, int B) 392 -- Runtime Function: long __subvdi3 (long A, long B) 393 These functions return the difference between B and A; that is 'A - 394 B'. 395 396 4.1.4 Bit operations 397 -------------------- 398 399 -- Runtime Function: int __clzsi2 (int A) 400 -- Runtime Function: int __clzdi2 (long A) 401 -- Runtime Function: int __clzti2 (long long A) 402 These functions return the number of leading 0-bits in A, starting 403 at the most significant bit position. If A is zero, the result is 404 undefined. 405 406 -- Runtime Function: int __ctzsi2 (int A) 407 -- Runtime Function: int __ctzdi2 (long A) 408 -- Runtime Function: int __ctzti2 (long long A) 409 These functions return the number of trailing 0-bits in A, starting 410 at the least significant bit position. If A is zero, the result is 411 undefined. 412 413 -- Runtime Function: int __ffsdi2 (long A) 414 -- Runtime Function: int __ffsti2 (long long A) 415 These functions return the index of the least significant 1-bit in 416 A, or the value zero if A is zero. The least significant bit is 417 index one. 418 419 -- Runtime Function: int __paritysi2 (int A) 420 -- Runtime Function: int __paritydi2 (long A) 421 -- Runtime Function: int __parityti2 (long long A) 422 These functions return the value zero if the number of bits set in 423 A is even, and the value one otherwise. 424 425 -- Runtime Function: int __popcountsi2 (int A) 426 -- Runtime Function: int __popcountdi2 (long A) 427 -- Runtime Function: int __popcountti2 (long long A) 428 These functions return the number of bits set in A. 429 430 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 431 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 432 These functions return the A byteswapped. 433 434 435 File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 436 437 4.2 Routines for floating point emulation 438 ========================================= 439 440 The software floating point library is used on machines which do not 441 have hardware support for floating point. It is also used whenever 442 '-msoft-float' is used to disable generation of floating point 443 instructions. (Not all targets support this switch.) 444 445 For compatibility with other compilers, the floating point emulation 446 routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note 447 Library Calls::). In this section, the default names are used. 448 449 Presently the library does not support 'XFmode', which is used for 450 'long double' on some architectures. 451 452 4.2.1 Arithmetic functions 453 -------------------------- 454 455 -- Runtime Function: float __addsf3 (float A, float B) 456 -- Runtime Function: double __adddf3 (double A, double B) 457 -- Runtime Function: long double __addtf3 (long double A, long double 458 B) 459 -- Runtime Function: long double __addxf3 (long double A, long double 460 B) 461 These functions return the sum of A and B. 462 463 -- Runtime Function: float __subsf3 (float A, float B) 464 -- Runtime Function: double __subdf3 (double A, double B) 465 -- Runtime Function: long double __subtf3 (long double A, long double 466 B) 467 -- Runtime Function: long double __subxf3 (long double A, long double 468 B) 469 These functions return the difference between B and A; that is, 470 A - B. 471 472 -- Runtime Function: float __mulsf3 (float A, float B) 473 -- Runtime Function: double __muldf3 (double A, double B) 474 -- Runtime Function: long double __multf3 (long double A, long double 475 B) 476 -- Runtime Function: long double __mulxf3 (long double A, long double 477 B) 478 These functions return the product of A and B. 479 480 -- Runtime Function: float __divsf3 (float A, float B) 481 -- Runtime Function: double __divdf3 (double A, double B) 482 -- Runtime Function: long double __divtf3 (long double A, long double 483 B) 484 -- Runtime Function: long double __divxf3 (long double A, long double 485 B) 486 These functions return the quotient of A and B; that is, A / B. 487 488 -- Runtime Function: float __negsf2 (float A) 489 -- Runtime Function: double __negdf2 (double A) 490 -- Runtime Function: long double __negtf2 (long double A) 491 -- Runtime Function: long double __negxf2 (long double A) 492 These functions return the negation of A. They simply flip the 493 sign bit, so they can produce negative zero and negative NaN. 494 495 4.2.2 Conversion functions 496 -------------------------- 497 498 -- Runtime Function: double __extendsfdf2 (float A) 499 -- Runtime Function: long double __extendsftf2 (float A) 500 -- Runtime Function: long double __extendsfxf2 (float A) 501 -- Runtime Function: long double __extenddftf2 (double A) 502 -- Runtime Function: long double __extenddfxf2 (double A) 503 These functions extend A to the wider mode of their return type. 504 505 -- Runtime Function: double __truncxfdf2 (long double A) 506 -- Runtime Function: double __trunctfdf2 (long double A) 507 -- Runtime Function: float __truncxfsf2 (long double A) 508 -- Runtime Function: float __trunctfsf2 (long double A) 509 -- Runtime Function: float __truncdfsf2 (double A) 510 These functions truncate A to the narrower mode of their return 511 type, rounding toward zero. 512 513 -- Runtime Function: int __fixsfsi (float A) 514 -- Runtime Function: int __fixdfsi (double A) 515 -- Runtime Function: int __fixtfsi (long double A) 516 -- Runtime Function: int __fixxfsi (long double A) 517 These functions convert A to a signed integer, rounding toward 518 zero. 519 520 -- Runtime Function: long __fixsfdi (float A) 521 -- Runtime Function: long __fixdfdi (double A) 522 -- Runtime Function: long __fixtfdi (long double A) 523 -- Runtime Function: long __fixxfdi (long double A) 524 These functions convert A to a signed long, rounding toward zero. 525 526 -- Runtime Function: long long __fixsfti (float A) 527 -- Runtime Function: long long __fixdfti (double A) 528 -- Runtime Function: long long __fixtfti (long double A) 529 -- Runtime Function: long long __fixxfti (long double A) 530 These functions convert A to a signed long long, rounding toward 531 zero. 532 533 -- Runtime Function: unsigned int __fixunssfsi (float A) 534 -- Runtime Function: unsigned int __fixunsdfsi (double A) 535 -- Runtime Function: unsigned int __fixunstfsi (long double A) 536 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 537 These functions convert A to an unsigned integer, rounding toward 538 zero. Negative values all become zero. 539 540 -- Runtime Function: unsigned long __fixunssfdi (float A) 541 -- Runtime Function: unsigned long __fixunsdfdi (double A) 542 -- Runtime Function: unsigned long __fixunstfdi (long double A) 543 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 544 These functions convert A to an unsigned long, rounding toward 545 zero. Negative values all become zero. 546 547 -- Runtime Function: unsigned long long __fixunssfti (float A) 548 -- Runtime Function: unsigned long long __fixunsdfti (double A) 549 -- Runtime Function: unsigned long long __fixunstfti (long double A) 550 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 551 These functions convert A to an unsigned long long, rounding toward 552 zero. Negative values all become zero. 553 554 -- Runtime Function: float __floatsisf (int I) 555 -- Runtime Function: double __floatsidf (int I) 556 -- Runtime Function: long double __floatsitf (int I) 557 -- Runtime Function: long double __floatsixf (int I) 558 These functions convert I, a signed integer, to floating point. 559 560 -- Runtime Function: float __floatdisf (long I) 561 -- Runtime Function: double __floatdidf (long I) 562 -- Runtime Function: long double __floatditf (long I) 563 -- Runtime Function: long double __floatdixf (long I) 564 These functions convert I, a signed long, to floating point. 565 566 -- Runtime Function: float __floattisf (long long I) 567 -- Runtime Function: double __floattidf (long long I) 568 -- Runtime Function: long double __floattitf (long long I) 569 -- Runtime Function: long double __floattixf (long long I) 570 These functions convert I, a signed long long, to floating point. 571 572 -- Runtime Function: float __floatunsisf (unsigned int I) 573 -- Runtime Function: double __floatunsidf (unsigned int I) 574 -- Runtime Function: long double __floatunsitf (unsigned int I) 575 -- Runtime Function: long double __floatunsixf (unsigned int I) 576 These functions convert I, an unsigned integer, to floating point. 577 578 -- Runtime Function: float __floatundisf (unsigned long I) 579 -- Runtime Function: double __floatundidf (unsigned long I) 580 -- Runtime Function: long double __floatunditf (unsigned long I) 581 -- Runtime Function: long double __floatundixf (unsigned long I) 582 These functions convert I, an unsigned long, to floating point. 583 584 -- Runtime Function: float __floatuntisf (unsigned long long I) 585 -- Runtime Function: double __floatuntidf (unsigned long long I) 586 -- Runtime Function: long double __floatuntitf (unsigned long long I) 587 -- Runtime Function: long double __floatuntixf (unsigned long long I) 588 These functions convert I, an unsigned long long, to floating 589 point. 590 591 4.2.3 Comparison functions 592 -------------------------- 593 594 There are two sets of basic comparison functions. 595 596 -- Runtime Function: int __cmpsf2 (float A, float B) 597 -- Runtime Function: int __cmpdf2 (double A, double B) 598 -- Runtime Function: int __cmptf2 (long double A, long double B) 599 These functions calculate a <=> b. That is, if A is less than B, 600 they return -1; if A is greater than B, they return 1; and if A and 601 B are equal they return 0. If either argument is NaN they return 602 1, but you should not rely on this; if NaN is a possibility, use 603 one of the higher-level comparison functions. 604 605 -- Runtime Function: int __unordsf2 (float A, float B) 606 -- Runtime Function: int __unorddf2 (double A, double B) 607 -- Runtime Function: int __unordtf2 (long double A, long double B) 608 These functions return a nonzero value if either argument is NaN, 609 otherwise 0. 610 611 There is also a complete group of higher level functions which 612 correspond directly to comparison operators. They implement the ISO C 613 semantics for floating-point comparisons, taking NaN into account. Pay 614 careful attention to the return values defined for each set. Under the 615 hood, all of these routines are implemented as 616 617 if (__unordXf2 (a, b)) 618 return E; 619 return __cmpXf2 (a, b); 620 621 where E is a constant chosen to give the proper behavior for NaN. Thus, 622 the meaning of the return value is different for each set. Do not rely 623 on this implementation; only the semantics documented below are 624 guaranteed. 625 626 -- Runtime Function: int __eqsf2 (float A, float B) 627 -- Runtime Function: int __eqdf2 (double A, double B) 628 -- Runtime Function: int __eqtf2 (long double A, long double B) 629 These functions return zero if neither argument is NaN, and A and B 630 are equal. 631 632 -- Runtime Function: int __nesf2 (float A, float B) 633 -- Runtime Function: int __nedf2 (double A, double B) 634 -- Runtime Function: int __netf2 (long double A, long double B) 635 These functions return a nonzero value if either argument is NaN, 636 or if A and B are unequal. 637 638 -- Runtime Function: int __gesf2 (float A, float B) 639 -- Runtime Function: int __gedf2 (double A, double B) 640 -- Runtime Function: int __getf2 (long double A, long double B) 641 These functions return a value greater than or equal to zero if 642 neither argument is NaN, and A is greater than or equal to B. 643 644 -- Runtime Function: int __ltsf2 (float A, float B) 645 -- Runtime Function: int __ltdf2 (double A, double B) 646 -- Runtime Function: int __lttf2 (long double A, long double B) 647 These functions return a value less than zero if neither argument 648 is NaN, and A is strictly less than B. 649 650 -- Runtime Function: int __lesf2 (float A, float B) 651 -- Runtime Function: int __ledf2 (double A, double B) 652 -- Runtime Function: int __letf2 (long double A, long double B) 653 These functions return a value less than or equal to zero if 654 neither argument is NaN, and A is less than or equal to B. 655 656 -- Runtime Function: int __gtsf2 (float A, float B) 657 -- Runtime Function: int __gtdf2 (double A, double B) 658 -- Runtime Function: int __gttf2 (long double A, long double B) 659 These functions return a value greater than zero if neither 660 argument is NaN, and A is strictly greater than B. 661 662 4.2.4 Other floating-point functions 663 ------------------------------------ 664 665 -- Runtime Function: float __powisf2 (float A, int B) 666 -- Runtime Function: double __powidf2 (double A, int B) 667 -- Runtime Function: long double __powitf2 (long double A, int B) 668 -- Runtime Function: long double __powixf2 (long double A, int B) 669 These functions convert raise A to the power B. 670 671 -- Runtime Function: complex float __mulsc3 (float A, float B, float C, 672 float D) 673 -- Runtime Function: complex double __muldc3 (double A, double B, 674 double C, double D) 675 -- Runtime Function: complex long double __multc3 (long double A, long 676 double B, long double C, long double D) 677 -- Runtime Function: complex long double __mulxc3 (long double A, long 678 double B, long double C, long double D) 679 These functions return the product of A + iB and C + iD, following 680 the rules of C99 Annex G. 681 682 -- Runtime Function: complex float __divsc3 (float A, float B, float C, 683 float D) 684 -- Runtime Function: complex double __divdc3 (double A, double B, 685 double C, double D) 686 -- Runtime Function: complex long double __divtc3 (long double A, long 687 double B, long double C, long double D) 688 -- Runtime Function: complex long double __divxc3 (long double A, long 689 double B, long double C, long double D) 690 These functions return the quotient of A + iB and C + iD (i.e., (A 691 + iB) / (C + iD)), following the rules of C99 Annex G. 692 693 694 File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 695 696 4.3 Routines for decimal floating point emulation 697 ================================================= 698 699 The software decimal floating point library implements IEEE 754-2008 700 decimal floating point arithmetic and is only activated on selected 701 targets. 702 703 The software decimal floating point library supports either DPD 704 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 705 selected at configure time. 706 707 4.3.1 Arithmetic functions 708 -------------------------- 709 710 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 711 B) 712 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 713 B) 714 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 715 B) 716 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 717 B) 718 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 719 _Decimal128 B) 720 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 721 _Decimal128 B) 722 These functions return the sum of A and B. 723 724 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 725 B) 726 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 727 B) 728 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 729 B) 730 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 731 B) 732 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 733 _Decimal128 B) 734 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 735 _Decimal128 B) 736 These functions return the difference between B and A; that is, 737 A - B. 738 739 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 740 B) 741 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 742 B) 743 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 744 B) 745 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 746 B) 747 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 748 _Decimal128 B) 749 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 750 _Decimal128 B) 751 These functions return the product of A and B. 752 753 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 754 B) 755 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 756 B) 757 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 758 B) 759 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 760 B) 761 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 762 _Decimal128 B) 763 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 764 _Decimal128 B) 765 These functions return the quotient of A and B; that is, A / B. 766 767 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 768 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 769 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 770 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 771 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 772 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 773 These functions return the negation of A. They simply flip the 774 sign bit, so they can produce negative zero and negative NaN. 775 776 4.3.2 Conversion functions 777 -------------------------- 778 779 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 780 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 781 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 782 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 783 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 784 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 785 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 786 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 787 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 788 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 789 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 790 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 791 These functions convert the value A from one decimal floating type 792 to another. 793 794 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 795 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 796 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 797 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 798 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 799 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 800 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 801 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 802 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 803 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 804 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 805 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 806 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 807 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 808 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 809 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 810 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 811 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 812 These functions convert the value of A from a binary floating type 813 to a decimal floating type of a different size. 814 815 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 816 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 817 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 818 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 819 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 820 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 821 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 822 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 823 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 824 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 825 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 826 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 827 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 828 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 829 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 830 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 831 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 832 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 833 These functions convert the value of A from a decimal floating type 834 to a binary floating type of a different size. 835 836 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 837 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 838 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 839 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 840 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 841 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 842 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 843 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 844 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 845 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 846 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 847 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 848 These functions convert the value of A between decimal and binary 849 floating types of the same size. 850 851 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 852 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 853 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 854 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 855 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 856 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 857 These functions convert A to a signed integer. 858 859 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 860 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 861 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 862 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 863 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 864 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 865 These functions convert A to a signed long. 866 867 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 868 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 869 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 870 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 871 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 872 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 873 These functions convert A to an unsigned integer. Negative values 874 all become zero. 875 876 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 877 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 878 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 879 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 880 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 881 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 882 These functions convert A to an unsigned long. Negative values all 883 become zero. 884 885 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 886 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 887 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 888 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 889 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 890 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 891 These functions convert I, a signed integer, to decimal floating 892 point. 893 894 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 895 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 896 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 897 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 898 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 899 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 900 These functions convert I, a signed long, to decimal floating 901 point. 902 903 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 904 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 905 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 906 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 907 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 908 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 909 These functions convert I, an unsigned integer, to decimal floating 910 point. 911 912 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 913 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 914 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 915 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 916 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 917 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 918 These functions convert I, an unsigned long, to decimal floating 919 point. 920 921 4.3.3 Comparison functions 922 -------------------------- 923 924 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 925 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 926 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 927 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 928 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 929 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 930 These functions return a nonzero value if either argument is NaN, 931 otherwise 0. 932 933 There is also a complete group of higher level functions which 934 correspond directly to comparison operators. They implement the ISO C 935 semantics for floating-point comparisons, taking NaN into account. Pay 936 careful attention to the return values defined for each set. Under the 937 hood, all of these routines are implemented as 938 939 if (__bid_unordXd2 (a, b)) 940 return E; 941 return __bid_cmpXd2 (a, b); 942 943 where E is a constant chosen to give the proper behavior for NaN. Thus, 944 the meaning of the return value is different for each set. Do not rely 945 on this implementation; only the semantics documented below are 946 guaranteed. 947 948 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 949 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 950 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 951 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 952 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 953 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 954 These functions return zero if neither argument is NaN, and A and B 955 are equal. 956 957 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 958 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 959 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 960 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 961 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 962 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 963 These functions return a nonzero value if either argument is NaN, 964 or if A and B are unequal. 965 966 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 967 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 968 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 969 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 970 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 971 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 972 These functions return a value greater than or equal to zero if 973 neither argument is NaN, and A is greater than or equal to B. 974 975 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 976 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 977 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 978 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 979 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 980 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 981 These functions return a value less than zero if neither argument 982 is NaN, and A is strictly less than B. 983 984 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 985 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 986 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 987 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 988 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 989 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 990 These functions return a value less than or equal to zero if 991 neither argument is NaN, and A is less than or equal to B. 992 993 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 994 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 995 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 996 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 997 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 998 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 999 These functions return a value greater than zero if neither 1000 argument is NaN, and A is strictly greater than B. 1001 1002 1003 File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1004 1005 4.4 Routines for fixed-point fractional emulation 1006 ================================================= 1007 1008 The software fixed-point library implements fixed-point fractional 1009 arithmetic, and is only activated on selected targets. 1010 1011 For ease of comprehension 'fract' is an alias for the '_Fract' type, 1012 'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'. 1013 1014 For illustrative purposes, in this section the fixed-point fractional 1015 type 'short fract' is assumed to correspond to machine mode 'QQmode'; 1016 'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode'; 1017 'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode'; 1018 'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and 1019 'unsigned long long fract' to 'UDQmode'. Similarly the fixed-point 1020 accumulator type 'short accum' corresponds to 'HAmode'; 1021 'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode'; 1022 'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode'; 1023 'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and 1024 'unsigned long long accum' to 'UTAmode'. 1025 1026 4.4.1 Arithmetic functions 1027 -------------------------- 1028 1029 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1030 B) 1031 -- Runtime Function: fract __addhq3 (fract A, fract B) 1032 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1033 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1034 long fract B) 1035 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1036 fract A, unsigned short fract B) 1037 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1038 unsigned fract B) 1039 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract 1040 A, unsigned long fract B) 1041 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1042 long fract A, unsigned long long fract B) 1043 -- Runtime Function: short accum __addha3 (short accum A, short accum 1044 B) 1045 -- Runtime Function: accum __addsa3 (accum A, accum B) 1046 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1047 -- Runtime Function: long long accum __addta3 (long long accum A, long 1048 long accum B) 1049 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1050 accum A, unsigned short accum B) 1051 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1052 unsigned accum B) 1053 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum 1054 A, unsigned long accum B) 1055 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1056 long accum A, unsigned long long accum B) 1057 These functions return the sum of A and B. 1058 1059 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract 1060 B) 1061 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1062 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1063 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1064 long long fract B) 1065 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum 1066 B) 1067 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1068 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1069 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1070 long long accum B) 1071 These functions return the sum of A and B with signed saturation. 1072 1073 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1074 fract A, unsigned short fract B) 1075 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1076 unsigned fract B) 1077 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1078 fract A, unsigned long fract B) 1079 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1080 long long fract A, unsigned long long fract B) 1081 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1082 accum A, unsigned short accum B) 1083 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1084 unsigned accum B) 1085 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1086 accum A, unsigned long accum B) 1087 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1088 long long accum A, unsigned long long accum B) 1089 These functions return the sum of A and B with unsigned saturation. 1090 1091 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1092 B) 1093 -- Runtime Function: fract __subhq3 (fract A, fract B) 1094 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1095 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1096 long fract B) 1097 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1098 fract A, unsigned short fract B) 1099 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1100 unsigned fract B) 1101 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract 1102 A, unsigned long fract B) 1103 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1104 long fract A, unsigned long long fract B) 1105 -- Runtime Function: short accum __subha3 (short accum A, short accum 1106 B) 1107 -- Runtime Function: accum __subsa3 (accum A, accum B) 1108 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1109 -- Runtime Function: long long accum __subta3 (long long accum A, long 1110 long accum B) 1111 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1112 accum A, unsigned short accum B) 1113 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1114 unsigned accum B) 1115 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum 1116 A, unsigned long accum B) 1117 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1118 long accum A, unsigned long long accum B) 1119 These functions return the difference of A and B; that is, 'A - B'. 1120 1121 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract 1122 B) 1123 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1124 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1125 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1126 long long fract B) 1127 -- Runtime Function: short accum __sssubha3 (short accum A, short accum 1128 B) 1129 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1130 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1131 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1132 long long accum B) 1133 These functions return the difference of A and B with signed 1134 saturation; that is, 'A - B'. 1135 1136 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1137 fract A, unsigned short fract B) 1138 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1139 unsigned fract B) 1140 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1141 fract A, unsigned long fract B) 1142 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1143 long long fract A, unsigned long long fract B) 1144 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1145 accum A, unsigned short accum B) 1146 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1147 unsigned accum B) 1148 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1149 accum A, unsigned long accum B) 1150 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1151 long long accum A, unsigned long long accum B) 1152 These functions return the difference of A and B with unsigned 1153 saturation; that is, 'A - B'. 1154 1155 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1156 B) 1157 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1158 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1159 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1160 long fract B) 1161 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1162 fract A, unsigned short fract B) 1163 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1164 unsigned fract B) 1165 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract 1166 A, unsigned long fract B) 1167 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1168 long fract A, unsigned long long fract B) 1169 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1170 B) 1171 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1172 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1173 -- Runtime Function: long long accum __multa3 (long long accum A, long 1174 long accum B) 1175 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1176 accum A, unsigned short accum B) 1177 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1178 unsigned accum B) 1179 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum 1180 A, unsigned long accum B) 1181 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1182 long accum A, unsigned long long accum B) 1183 These functions return the product of A and B. 1184 1185 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract 1186 B) 1187 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1188 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1189 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1190 long long fract B) 1191 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum 1192 B) 1193 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1194 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1195 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1196 long long accum B) 1197 These functions return the product of A and B with signed 1198 saturation. 1199 1200 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1201 fract A, unsigned short fract B) 1202 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1203 unsigned fract B) 1204 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1205 fract A, unsigned long fract B) 1206 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1207 long long fract A, unsigned long long fract B) 1208 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1209 accum A, unsigned short accum B) 1210 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1211 unsigned accum B) 1212 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1213 accum A, unsigned long accum B) 1214 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1215 long long accum A, unsigned long long accum B) 1216 These functions return the product of A and B with unsigned 1217 saturation. 1218 1219 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1220 B) 1221 -- Runtime Function: fract __divhq3 (fract A, fract B) 1222 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1223 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1224 long fract B) 1225 -- Runtime Function: short accum __divha3 (short accum A, short accum 1226 B) 1227 -- Runtime Function: accum __divsa3 (accum A, accum B) 1228 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1229 -- Runtime Function: long long accum __divta3 (long long accum A, long 1230 long accum B) 1231 These functions return the quotient of the signed division of A and 1232 B. 1233 1234 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1235 fract A, unsigned short fract B) 1236 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1237 unsigned fract B) 1238 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1239 fract A, unsigned long fract B) 1240 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long 1241 long fract A, unsigned long long fract B) 1242 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1243 accum A, unsigned short accum B) 1244 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1245 unsigned accum B) 1246 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1247 accum A, unsigned long accum B) 1248 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long 1249 long accum A, unsigned long long accum B) 1250 These functions return the quotient of the unsigned division of A 1251 and B. 1252 1253 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract 1254 B) 1255 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1256 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1257 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1258 long long fract B) 1259 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum 1260 B) 1261 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1262 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1263 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1264 long long accum B) 1265 These functions return the quotient of the signed division of A and 1266 B with signed saturation. 1267 1268 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1269 fract A, unsigned short fract B) 1270 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1271 unsigned fract B) 1272 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1273 fract A, unsigned long fract B) 1274 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1275 long long fract A, unsigned long long fract B) 1276 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1277 accum A, unsigned short accum B) 1278 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1279 unsigned accum B) 1280 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1281 accum A, unsigned long accum B) 1282 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1283 long long accum A, unsigned long long accum B) 1284 These functions return the quotient of the unsigned division of A 1285 and B with unsigned saturation. 1286 1287 -- Runtime Function: short fract __negqq2 (short fract A) 1288 -- Runtime Function: fract __neghq2 (fract A) 1289 -- Runtime Function: long fract __negsq2 (long fract A) 1290 -- Runtime Function: long long fract __negdq2 (long long fract A) 1291 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1292 fract A) 1293 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1294 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract 1295 A) 1296 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1297 long fract A) 1298 -- Runtime Function: short accum __negha2 (short accum A) 1299 -- Runtime Function: accum __negsa2 (accum A) 1300 -- Runtime Function: long accum __negda2 (long accum A) 1301 -- Runtime Function: long long accum __negta2 (long long accum A) 1302 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1303 accum A) 1304 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1305 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum 1306 A) 1307 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1308 long accum A) 1309 These functions return the negation of A. 1310 1311 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1312 -- Runtime Function: fract __ssneghq2 (fract A) 1313 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1314 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1315 -- Runtime Function: short accum __ssnegha2 (short accum A) 1316 -- Runtime Function: accum __ssnegsa2 (accum A) 1317 -- Runtime Function: long accum __ssnegda2 (long accum A) 1318 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1319 These functions return the negation of A with signed saturation. 1320 1321 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1322 fract A) 1323 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1324 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1325 fract A) 1326 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1327 long long fract A) 1328 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1329 accum A) 1330 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1331 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1332 accum A) 1333 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1334 long long accum A) 1335 These functions return the negation of A with unsigned saturation. 1336 1337 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1338 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1339 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1340 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1341 B) 1342 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1343 fract A, int B) 1344 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1345 B) 1346 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1347 fract A, int B) 1348 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long 1349 long fract A, int B) 1350 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1351 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1352 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1353 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1354 B) 1355 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1356 accum A, int B) 1357 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1358 B) 1359 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1360 accum A, int B) 1361 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long 1362 long accum A, int B) 1363 These functions return the result of shifting A left by B bits. 1364 1365 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1366 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1367 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1368 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1369 B) 1370 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1371 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1372 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1373 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1374 B) 1375 These functions return the result of arithmetically shifting A 1376 right by B bits. 1377 1378 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1379 fract A, int B) 1380 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1381 B) 1382 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1383 fract A, int B) 1384 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long 1385 long fract A, int B) 1386 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1387 accum A, int B) 1388 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1389 B) 1390 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1391 accum A, int B) 1392 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long 1393 long accum A, int B) 1394 These functions return the result of logically shifting A right by 1395 B bits. 1396 1397 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1398 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1399 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1400 int B) 1401 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1402 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1403 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1404 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1405 int B) 1406 These functions return the result of shifting A left by B bits with 1407 signed saturation. 1408 1409 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1410 fract A, int B) 1411 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int 1412 B) 1413 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1414 fract A, int B) 1415 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1416 long long fract A, int B) 1417 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1418 accum A, int B) 1419 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int 1420 B) 1421 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1422 accum A, int B) 1423 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1424 long long accum A, int B) 1425 These functions return the result of shifting A left by B bits with 1426 unsigned saturation. 1427 1428 4.4.2 Comparison functions 1429 -------------------------- 1430 1431 The following functions implement fixed-point comparisons. These 1432 functions implement a low-level compare, upon which the higher level 1433 comparison operators (such as less than and greater than or equal to) 1434 can be constructed. The returned values lie in the range zero to two, 1435 to allow the high-level operators to be implemented by testing the 1436 returned result using either signed or unsigned comparison. 1437 1438 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1439 -- Runtime Function: int __cmphq2 (fract A, fract B) 1440 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1441 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1442 B) 1443 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1444 short fract B) 1445 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1446 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1447 long fract B) 1448 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1449 unsigned long long fract B) 1450 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1451 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1452 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1453 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1454 B) 1455 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1456 short accum B) 1457 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1458 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1459 long accum B) 1460 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1461 unsigned long long accum B) 1462 These functions perform a signed or unsigned comparison of A and B 1463 (depending on the selected machine mode). If A is less than B, 1464 they return 0; if A is greater than B, they return 2; and if A and 1465 B are equal they return 1. 1466 1467 4.4.3 Conversion functions 1468 -------------------------- 1469 1470 -- Runtime Function: fract __fractqqhq2 (short fract A) 1471 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1472 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1473 -- Runtime Function: short accum __fractqqha (short fract A) 1474 -- Runtime Function: accum __fractqqsa (short fract A) 1475 -- Runtime Function: long accum __fractqqda (short fract A) 1476 -- Runtime Function: long long accum __fractqqta (short fract A) 1477 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1478 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1479 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1480 -- Runtime Function: unsigned long long fract __fractqqudq (short fract 1481 A) 1482 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1483 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1484 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1485 -- Runtime Function: unsigned long long accum __fractqquta (short fract 1486 A) 1487 -- Runtime Function: signed char __fractqqqi (short fract A) 1488 -- Runtime Function: short __fractqqhi (short fract A) 1489 -- Runtime Function: int __fractqqsi (short fract A) 1490 -- Runtime Function: long __fractqqdi (short fract A) 1491 -- Runtime Function: long long __fractqqti (short fract A) 1492 -- Runtime Function: float __fractqqsf (short fract A) 1493 -- Runtime Function: double __fractqqdf (short fract A) 1494 -- Runtime Function: short fract __fracthqqq2 (fract A) 1495 -- Runtime Function: long fract __fracthqsq2 (fract A) 1496 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1497 -- Runtime Function: short accum __fracthqha (fract A) 1498 -- Runtime Function: accum __fracthqsa (fract A) 1499 -- Runtime Function: long accum __fracthqda (fract A) 1500 -- Runtime Function: long long accum __fracthqta (fract A) 1501 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1502 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1503 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1504 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1505 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1506 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1507 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1508 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1509 -- Runtime Function: signed char __fracthqqi (fract A) 1510 -- Runtime Function: short __fracthqhi (fract A) 1511 -- Runtime Function: int __fracthqsi (fract A) 1512 -- Runtime Function: long __fracthqdi (fract A) 1513 -- Runtime Function: long long __fracthqti (fract A) 1514 -- Runtime Function: float __fracthqsf (fract A) 1515 -- Runtime Function: double __fracthqdf (fract A) 1516 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1517 -- Runtime Function: fract __fractsqhq2 (long fract A) 1518 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1519 -- Runtime Function: short accum __fractsqha (long fract A) 1520 -- Runtime Function: accum __fractsqsa (long fract A) 1521 -- Runtime Function: long accum __fractsqda (long fract A) 1522 -- Runtime Function: long long accum __fractsqta (long fract A) 1523 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1524 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1525 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1526 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1527 A) 1528 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1529 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1530 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1531 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1532 A) 1533 -- Runtime Function: signed char __fractsqqi (long fract A) 1534 -- Runtime Function: short __fractsqhi (long fract A) 1535 -- Runtime Function: int __fractsqsi (long fract A) 1536 -- Runtime Function: long __fractsqdi (long fract A) 1537 -- Runtime Function: long long __fractsqti (long fract A) 1538 -- Runtime Function: float __fractsqsf (long fract A) 1539 -- Runtime Function: double __fractsqdf (long fract A) 1540 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1541 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1542 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1543 -- Runtime Function: short accum __fractdqha (long long fract A) 1544 -- Runtime Function: accum __fractdqsa (long long fract A) 1545 -- Runtime Function: long accum __fractdqda (long long fract A) 1546 -- Runtime Function: long long accum __fractdqta (long long fract A) 1547 -- Runtime Function: unsigned short fract __fractdquqq (long long fract 1548 A) 1549 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1550 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1551 A) 1552 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1553 fract A) 1554 -- Runtime Function: unsigned short accum __fractdquha (long long fract 1555 A) 1556 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1557 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1558 A) 1559 -- Runtime Function: unsigned long long accum __fractdquta (long long 1560 fract A) 1561 -- Runtime Function: signed char __fractdqqi (long long fract A) 1562 -- Runtime Function: short __fractdqhi (long long fract A) 1563 -- Runtime Function: int __fractdqsi (long long fract A) 1564 -- Runtime Function: long __fractdqdi (long long fract A) 1565 -- Runtime Function: long long __fractdqti (long long fract A) 1566 -- Runtime Function: float __fractdqsf (long long fract A) 1567 -- Runtime Function: double __fractdqdf (long long fract A) 1568 -- Runtime Function: short fract __fracthaqq (short accum A) 1569 -- Runtime Function: fract __fracthahq (short accum A) 1570 -- Runtime Function: long fract __fracthasq (short accum A) 1571 -- Runtime Function: long long fract __fracthadq (short accum A) 1572 -- Runtime Function: accum __fracthasa2 (short accum A) 1573 -- Runtime Function: long accum __fracthada2 (short accum A) 1574 -- Runtime Function: long long accum __fracthata2 (short accum A) 1575 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1576 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1577 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1578 -- Runtime Function: unsigned long long fract __fracthaudq (short accum 1579 A) 1580 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1581 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1582 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1583 -- Runtime Function: unsigned long long accum __fracthauta (short accum 1584 A) 1585 -- Runtime Function: signed char __fracthaqi (short accum A) 1586 -- Runtime Function: short __fracthahi (short accum A) 1587 -- Runtime Function: int __fracthasi (short accum A) 1588 -- Runtime Function: long __fracthadi (short accum A) 1589 -- Runtime Function: long long __fracthati (short accum A) 1590 -- Runtime Function: float __fracthasf (short accum A) 1591 -- Runtime Function: double __fracthadf (short accum A) 1592 -- Runtime Function: short fract __fractsaqq (accum A) 1593 -- Runtime Function: fract __fractsahq (accum A) 1594 -- Runtime Function: long fract __fractsasq (accum A) 1595 -- Runtime Function: long long fract __fractsadq (accum A) 1596 -- Runtime Function: short accum __fractsaha2 (accum A) 1597 -- Runtime Function: long accum __fractsada2 (accum A) 1598 -- Runtime Function: long long accum __fractsata2 (accum A) 1599 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1600 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1601 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1602 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1603 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1604 -- Runtime Function: unsigned accum __fractsausa (accum A) 1605 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1606 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1607 -- Runtime Function: signed char __fractsaqi (accum A) 1608 -- Runtime Function: short __fractsahi (accum A) 1609 -- Runtime Function: int __fractsasi (accum A) 1610 -- Runtime Function: long __fractsadi (accum A) 1611 -- Runtime Function: long long __fractsati (accum A) 1612 -- Runtime Function: float __fractsasf (accum A) 1613 -- Runtime Function: double __fractsadf (accum A) 1614 -- Runtime Function: short fract __fractdaqq (long accum A) 1615 -- Runtime Function: fract __fractdahq (long accum A) 1616 -- Runtime Function: long fract __fractdasq (long accum A) 1617 -- Runtime Function: long long fract __fractdadq (long accum A) 1618 -- Runtime Function: short accum __fractdaha2 (long accum A) 1619 -- Runtime Function: accum __fractdasa2 (long accum A) 1620 -- Runtime Function: long long accum __fractdata2 (long accum A) 1621 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1622 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1623 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1624 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1625 A) 1626 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1627 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1628 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1629 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1630 A) 1631 -- Runtime Function: signed char __fractdaqi (long accum A) 1632 -- Runtime Function: short __fractdahi (long accum A) 1633 -- Runtime Function: int __fractdasi (long accum A) 1634 -- Runtime Function: long __fractdadi (long accum A) 1635 -- Runtime Function: long long __fractdati (long accum A) 1636 -- Runtime Function: float __fractdasf (long accum A) 1637 -- Runtime Function: double __fractdadf (long accum A) 1638 -- Runtime Function: short fract __fracttaqq (long long accum A) 1639 -- Runtime Function: fract __fracttahq (long long accum A) 1640 -- Runtime Function: long fract __fracttasq (long long accum A) 1641 -- Runtime Function: long long fract __fracttadq (long long accum A) 1642 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1643 -- Runtime Function: accum __fracttasa2 (long long accum A) 1644 -- Runtime Function: long accum __fracttada2 (long long accum A) 1645 -- Runtime Function: unsigned short fract __fracttauqq (long long accum 1646 A) 1647 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1648 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1649 A) 1650 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1651 accum A) 1652 -- Runtime Function: unsigned short accum __fracttauha (long long accum 1653 A) 1654 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1655 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1656 A) 1657 -- Runtime Function: unsigned long long accum __fracttauta (long long 1658 accum A) 1659 -- Runtime Function: signed char __fracttaqi (long long accum A) 1660 -- Runtime Function: short __fracttahi (long long accum A) 1661 -- Runtime Function: int __fracttasi (long long accum A) 1662 -- Runtime Function: long __fracttadi (long long accum A) 1663 -- Runtime Function: long long __fracttati (long long accum A) 1664 -- Runtime Function: float __fracttasf (long long accum A) 1665 -- Runtime Function: double __fracttadf (long long accum A) 1666 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1667 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1668 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1669 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract 1670 A) 1671 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1672 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1673 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1674 -- Runtime Function: long long accum __fractuqqta (unsigned short fract 1675 A) 1676 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1677 fract A) 1678 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short 1679 fract A) 1680 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1681 short fract A) 1682 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short 1683 fract A) 1684 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract 1685 A) 1686 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1687 fract A) 1688 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1689 short fract A) 1690 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1691 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1692 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1693 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1694 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1695 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1696 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1697 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1698 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1699 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1700 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1701 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1702 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1703 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1704 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1705 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1706 fract A) 1707 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract 1708 A) 1709 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1710 fract A) 1711 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract 1712 A) 1713 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1714 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1715 A) 1716 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1717 fract A) 1718 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1719 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1720 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1721 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1722 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1723 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1724 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1725 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1726 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1727 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1728 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1729 A) 1730 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1731 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1732 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1733 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1734 A) 1735 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long 1736 fract A) 1737 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract 1738 A) 1739 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1740 long fract A) 1741 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1742 fract A) 1743 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1744 A) 1745 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1746 fract A) 1747 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1748 long fract A) 1749 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1750 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1751 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1752 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1753 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1754 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1755 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1756 -- Runtime Function: short fract __fractudqqq (unsigned long long fract 1757 A) 1758 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1759 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1760 A) 1761 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1762 fract A) 1763 -- Runtime Function: short accum __fractudqha (unsigned long long fract 1764 A) 1765 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1766 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1767 A) 1768 -- Runtime Function: long long accum __fractudqta (unsigned long long 1769 fract A) 1770 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long 1771 long fract A) 1772 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1773 fract A) 1774 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1775 long fract A) 1776 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1777 long fract A) 1778 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1779 fract A) 1780 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1781 long fract A) 1782 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1783 long long fract A) 1784 -- Runtime Function: signed char __fractudqqi (unsigned long long fract 1785 A) 1786 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1787 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1788 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1789 -- Runtime Function: long long __fractudqti (unsigned long long fract 1790 A) 1791 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1792 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1793 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1794 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1795 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1796 -- Runtime Function: long long fract __fractuhadq (unsigned short accum 1797 A) 1798 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1799 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1800 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1801 -- Runtime Function: long long accum __fractuhata (unsigned short accum 1802 A) 1803 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short 1804 accum A) 1805 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum 1806 A) 1807 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1808 accum A) 1809 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1810 short accum A) 1811 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1812 accum A) 1813 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short 1814 accum A) 1815 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1816 short accum A) 1817 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1818 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1819 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1820 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1821 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1822 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1823 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1824 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1825 -- Runtime Function: fract __fractusahq (unsigned accum A) 1826 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1827 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1828 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1829 -- Runtime Function: accum __fractusasa (unsigned accum A) 1830 -- Runtime Function: long accum __fractusada (unsigned accum A) 1831 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1832 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum 1833 A) 1834 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1835 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1836 A) 1837 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1838 accum A) 1839 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1840 accum A) 1841 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum 1842 A) 1843 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1844 accum A) 1845 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1846 -- Runtime Function: short __fractusahi (unsigned accum A) 1847 -- Runtime Function: int __fractusasi (unsigned accum A) 1848 -- Runtime Function: long __fractusadi (unsigned accum A) 1849 -- Runtime Function: long long __fractusati (unsigned accum A) 1850 -- Runtime Function: float __fractusasf (unsigned accum A) 1851 -- Runtime Function: double __fractusadf (unsigned accum A) 1852 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1853 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1854 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1855 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1856 A) 1857 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1858 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1859 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1860 -- Runtime Function: long long accum __fractudata (unsigned long accum 1861 A) 1862 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1863 accum A) 1864 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1865 A) 1866 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1867 accum A) 1868 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1869 long accum A) 1870 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long 1871 accum A) 1872 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum 1873 A) 1874 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1875 long accum A) 1876 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1877 -- Runtime Function: short __fractudahi (unsigned long accum A) 1878 -- Runtime Function: int __fractudasi (unsigned long accum A) 1879 -- Runtime Function: long __fractudadi (unsigned long accum A) 1880 -- Runtime Function: long long __fractudati (unsigned long accum A) 1881 -- Runtime Function: float __fractudasf (unsigned long accum A) 1882 -- Runtime Function: double __fractudadf (unsigned long accum A) 1883 -- Runtime Function: short fract __fractutaqq (unsigned long long accum 1884 A) 1885 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1886 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1887 A) 1888 -- Runtime Function: long long fract __fractutadq (unsigned long long 1889 accum A) 1890 -- Runtime Function: short accum __fractutaha (unsigned long long accum 1891 A) 1892 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1893 -- Runtime Function: long accum __fractutada (unsigned long long accum 1894 A) 1895 -- Runtime Function: long long accum __fractutata (unsigned long long 1896 accum A) 1897 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1898 long accum A) 1899 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1900 accum A) 1901 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1902 long accum A) 1903 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1904 long long accum A) 1905 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long 1906 long accum A) 1907 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1908 accum A) 1909 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1910 long accum A) 1911 -- Runtime Function: signed char __fractutaqi (unsigned long long accum 1912 A) 1913 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1914 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1915 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1916 -- Runtime Function: long long __fractutati (unsigned long long accum 1917 A) 1918 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1919 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1920 -- Runtime Function: short fract __fractqiqq (signed char A) 1921 -- Runtime Function: fract __fractqihq (signed char A) 1922 -- Runtime Function: long fract __fractqisq (signed char A) 1923 -- Runtime Function: long long fract __fractqidq (signed char A) 1924 -- Runtime Function: short accum __fractqiha (signed char A) 1925 -- Runtime Function: accum __fractqisa (signed char A) 1926 -- Runtime Function: long accum __fractqida (signed char A) 1927 -- Runtime Function: long long accum __fractqita (signed char A) 1928 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1929 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1930 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1931 -- Runtime Function: unsigned long long fract __fractqiudq (signed char 1932 A) 1933 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1934 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1935 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1936 -- Runtime Function: unsigned long long accum __fractqiuta (signed char 1937 A) 1938 -- Runtime Function: short fract __fracthiqq (short A) 1939 -- Runtime Function: fract __fracthihq (short A) 1940 -- Runtime Function: long fract __fracthisq (short A) 1941 -- Runtime Function: long long fract __fracthidq (short A) 1942 -- Runtime Function: short accum __fracthiha (short A) 1943 -- Runtime Function: accum __fracthisa (short A) 1944 -- Runtime Function: long accum __fracthida (short A) 1945 -- Runtime Function: long long accum __fracthita (short A) 1946 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1947 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1948 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1949 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1950 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1951 -- Runtime Function: unsigned accum __fracthiusa (short A) 1952 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1953 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1954 -- Runtime Function: short fract __fractsiqq (int A) 1955 -- Runtime Function: fract __fractsihq (int A) 1956 -- Runtime Function: long fract __fractsisq (int A) 1957 -- Runtime Function: long long fract __fractsidq (int A) 1958 -- Runtime Function: short accum __fractsiha (int A) 1959 -- Runtime Function: accum __fractsisa (int A) 1960 -- Runtime Function: long accum __fractsida (int A) 1961 -- Runtime Function: long long accum __fractsita (int A) 1962 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1963 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1964 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1965 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1966 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1967 -- Runtime Function: unsigned accum __fractsiusa (int A) 1968 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1969 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1970 -- Runtime Function: short fract __fractdiqq (long A) 1971 -- Runtime Function: fract __fractdihq (long A) 1972 -- Runtime Function: long fract __fractdisq (long A) 1973 -- Runtime Function: long long fract __fractdidq (long A) 1974 -- Runtime Function: short accum __fractdiha (long A) 1975 -- Runtime Function: accum __fractdisa (long A) 1976 -- Runtime Function: long accum __fractdida (long A) 1977 -- Runtime Function: long long accum __fractdita (long A) 1978 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1979 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1980 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1981 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1982 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1983 -- Runtime Function: unsigned accum __fractdiusa (long A) 1984 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1985 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1986 -- Runtime Function: short fract __fracttiqq (long long A) 1987 -- Runtime Function: fract __fracttihq (long long A) 1988 -- Runtime Function: long fract __fracttisq (long long A) 1989 -- Runtime Function: long long fract __fracttidq (long long A) 1990 -- Runtime Function: short accum __fracttiha (long long A) 1991 -- Runtime Function: accum __fracttisa (long long A) 1992 -- Runtime Function: long accum __fracttida (long long A) 1993 -- Runtime Function: long long accum __fracttita (long long A) 1994 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 1995 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 1996 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 1997 -- Runtime Function: unsigned long long fract __fracttiudq (long long 1998 A) 1999 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2000 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2001 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2002 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2003 A) 2004 -- Runtime Function: short fract __fractsfqq (float A) 2005 -- Runtime Function: fract __fractsfhq (float A) 2006 -- Runtime Function: long fract __fractsfsq (float A) 2007 -- Runtime Function: long long fract __fractsfdq (float A) 2008 -- Runtime Function: short accum __fractsfha (float A) 2009 -- Runtime Function: accum __fractsfsa (float A) 2010 -- Runtime Function: long accum __fractsfda (float A) 2011 -- Runtime Function: long long accum __fractsfta (float A) 2012 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2013 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2014 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2015 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2016 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2017 -- Runtime Function: unsigned accum __fractsfusa (float A) 2018 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2019 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2020 -- Runtime Function: short fract __fractdfqq (double A) 2021 -- Runtime Function: fract __fractdfhq (double A) 2022 -- Runtime Function: long fract __fractdfsq (double A) 2023 -- Runtime Function: long long fract __fractdfdq (double A) 2024 -- Runtime Function: short accum __fractdfha (double A) 2025 -- Runtime Function: accum __fractdfsa (double A) 2026 -- Runtime Function: long accum __fractdfda (double A) 2027 -- Runtime Function: long long accum __fractdfta (double A) 2028 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2029 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2030 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2031 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2032 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2033 -- Runtime Function: unsigned accum __fractdfusa (double A) 2034 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2035 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2036 These functions convert from fractional and signed non-fractionals 2037 to fractionals and signed non-fractionals, without saturation. 2038 2039 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2040 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2041 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2042 -- Runtime Function: short accum __satfractqqha (short fract A) 2043 -- Runtime Function: accum __satfractqqsa (short fract A) 2044 -- Runtime Function: long accum __satfractqqda (short fract A) 2045 -- Runtime Function: long long accum __satfractqqta (short fract A) 2046 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2047 A) 2048 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2049 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2050 A) 2051 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2052 fract A) 2053 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2054 A) 2055 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2056 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2057 A) 2058 -- Runtime Function: unsigned long long accum __satfractqquta (short 2059 fract A) 2060 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2061 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2062 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2063 -- Runtime Function: short accum __satfracthqha (fract A) 2064 -- Runtime Function: accum __satfracthqsa (fract A) 2065 -- Runtime Function: long accum __satfracthqda (fract A) 2066 -- Runtime Function: long long accum __satfracthqta (fract A) 2067 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2068 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2069 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2070 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2071 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2072 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2073 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2074 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2075 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2076 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2077 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2078 -- Runtime Function: short accum __satfractsqha (long fract A) 2079 -- Runtime Function: accum __satfractsqsa (long fract A) 2080 -- Runtime Function: long accum __satfractsqda (long fract A) 2081 -- Runtime Function: long long accum __satfractsqta (long fract A) 2082 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2083 A) 2084 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2085 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2086 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2087 fract A) 2088 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2089 A) 2090 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2091 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2092 -- Runtime Function: unsigned long long accum __satfractsquta (long 2093 fract A) 2094 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2095 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2096 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2097 -- Runtime Function: short accum __satfractdqha (long long fract A) 2098 -- Runtime Function: accum __satfractdqsa (long long fract A) 2099 -- Runtime Function: long accum __satfractdqda (long long fract A) 2100 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2101 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2102 fract A) 2103 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2104 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2105 fract A) 2106 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2107 long fract A) 2108 -- Runtime Function: unsigned short accum __satfractdquha (long long 2109 fract A) 2110 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2111 -- Runtime Function: unsigned long accum __satfractdquda (long long 2112 fract A) 2113 -- Runtime Function: unsigned long long accum __satfractdquta (long 2114 long fract A) 2115 -- Runtime Function: short fract __satfracthaqq (short accum A) 2116 -- Runtime Function: fract __satfracthahq (short accum A) 2117 -- Runtime Function: long fract __satfracthasq (short accum A) 2118 -- Runtime Function: long long fract __satfracthadq (short accum A) 2119 -- Runtime Function: accum __satfracthasa2 (short accum A) 2120 -- Runtime Function: long accum __satfracthada2 (short accum A) 2121 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2122 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2123 A) 2124 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2125 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2126 A) 2127 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2128 accum A) 2129 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2130 A) 2131 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2132 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2133 A) 2134 -- Runtime Function: unsigned long long accum __satfracthauta (short 2135 accum A) 2136 -- Runtime Function: short fract __satfractsaqq (accum A) 2137 -- Runtime Function: fract __satfractsahq (accum A) 2138 -- Runtime Function: long fract __satfractsasq (accum A) 2139 -- Runtime Function: long long fract __satfractsadq (accum A) 2140 -- Runtime Function: short accum __satfractsaha2 (accum A) 2141 -- Runtime Function: long accum __satfractsada2 (accum A) 2142 -- Runtime Function: long long accum __satfractsata2 (accum A) 2143 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2144 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2145 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2146 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2147 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2148 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2149 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2150 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2151 -- Runtime Function: short fract __satfractdaqq (long accum A) 2152 -- Runtime Function: fract __satfractdahq (long accum A) 2153 -- Runtime Function: long fract __satfractdasq (long accum A) 2154 -- Runtime Function: long long fract __satfractdadq (long accum A) 2155 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2156 -- Runtime Function: accum __satfractdasa2 (long accum A) 2157 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2158 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2159 A) 2160 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2161 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2162 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2163 accum A) 2164 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2165 A) 2166 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2167 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2168 -- Runtime Function: unsigned long long accum __satfractdauta (long 2169 accum A) 2170 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2171 -- Runtime Function: fract __satfracttahq (long long accum A) 2172 -- Runtime Function: long fract __satfracttasq (long long accum A) 2173 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2174 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2175 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2176 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2177 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2178 accum A) 2179 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2180 -- Runtime Function: unsigned long fract __satfracttausq (long long 2181 accum A) 2182 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2183 long accum A) 2184 -- Runtime Function: unsigned short accum __satfracttauha (long long 2185 accum A) 2186 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2187 -- Runtime Function: unsigned long accum __satfracttauda (long long 2188 accum A) 2189 -- Runtime Function: unsigned long long accum __satfracttauta (long 2190 long accum A) 2191 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2192 A) 2193 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2194 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2195 A) 2196 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2197 fract A) 2198 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2199 A) 2200 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2201 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2202 A) 2203 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2204 fract A) 2205 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2206 fract A) 2207 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2208 short fract A) 2209 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2210 (unsigned short fract A) 2211 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2212 short fract A) 2213 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2214 fract A) 2215 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2216 short fract A) 2217 -- Runtime Function: unsigned long long accum __satfractuqquta 2218 (unsigned short fract A) 2219 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2220 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2221 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2222 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2223 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2224 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2225 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2226 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2227 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2228 fract A) 2229 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2230 fract A) 2231 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2232 (unsigned fract A) 2233 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2234 fract A) 2235 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2236 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2237 fract A) 2238 -- Runtime Function: unsigned long long accum __satfractuhquta 2239 (unsigned fract A) 2240 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2241 A) 2242 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2243 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2244 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2245 fract A) 2246 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2247 A) 2248 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2249 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2250 -- Runtime Function: long long accum __satfractusqta (unsigned long 2251 fract A) 2252 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2253 long fract A) 2254 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2255 fract A) 2256 -- Runtime Function: unsigned long long fract __satfractusqudq2 2257 (unsigned long fract A) 2258 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2259 long fract A) 2260 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2261 fract A) 2262 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2263 long fract A) 2264 -- Runtime Function: unsigned long long accum __satfractusquta 2265 (unsigned long fract A) 2266 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2267 fract A) 2268 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2269 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2270 fract A) 2271 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2272 long fract A) 2273 -- Runtime Function: short accum __satfractudqha (unsigned long long 2274 fract A) 2275 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2276 -- Runtime Function: long accum __satfractudqda (unsigned long long 2277 fract A) 2278 -- Runtime Function: long long accum __satfractudqta (unsigned long 2279 long fract A) 2280 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2281 long long fract A) 2282 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2283 long fract A) 2284 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2285 long long fract A) 2286 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2287 long long fract A) 2288 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2289 long fract A) 2290 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2291 long long fract A) 2292 -- Runtime Function: unsigned long long accum __satfractudquta 2293 (unsigned long long fract A) 2294 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2295 A) 2296 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2297 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2298 A) 2299 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2300 accum A) 2301 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2302 A) 2303 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2304 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2305 A) 2306 -- Runtime Function: long long accum __satfractuhata (unsigned short 2307 accum A) 2308 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2309 short accum A) 2310 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2311 accum A) 2312 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2313 short accum A) 2314 -- Runtime Function: unsigned long long fract __satfractuhaudq 2315 (unsigned short accum A) 2316 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2317 accum A) 2318 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2319 short accum A) 2320 -- Runtime Function: unsigned long long accum __satfractuhauta2 2321 (unsigned short accum A) 2322 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2323 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2324 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2325 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2326 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2327 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2328 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2329 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2330 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2331 accum A) 2332 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2333 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2334 accum A) 2335 -- Runtime Function: unsigned long long fract __satfractusaudq 2336 (unsigned accum A) 2337 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2338 accum A) 2339 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2340 accum A) 2341 -- Runtime Function: unsigned long long accum __satfractusauta2 2342 (unsigned accum A) 2343 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2344 A) 2345 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2346 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2347 -- Runtime Function: long long fract __satfractudadq (unsigned long 2348 accum A) 2349 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2350 A) 2351 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2352 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2353 -- Runtime Function: long long accum __satfractudata (unsigned long 2354 accum A) 2355 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2356 long accum A) 2357 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2358 accum A) 2359 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2360 long accum A) 2361 -- Runtime Function: unsigned long long fract __satfractudaudq 2362 (unsigned long accum A) 2363 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2364 long accum A) 2365 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2366 accum A) 2367 -- Runtime Function: unsigned long long accum __satfractudauta2 2368 (unsigned long accum A) 2369 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2370 accum A) 2371 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2372 -- Runtime Function: long fract __satfractutasq (unsigned long long 2373 accum A) 2374 -- Runtime Function: long long fract __satfractutadq (unsigned long 2375 long accum A) 2376 -- Runtime Function: short accum __satfractutaha (unsigned long long 2377 accum A) 2378 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2379 -- Runtime Function: long accum __satfractutada (unsigned long long 2380 accum A) 2381 -- Runtime Function: long long accum __satfractutata (unsigned long 2382 long accum A) 2383 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2384 long long accum A) 2385 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2386 long accum A) 2387 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2388 long long accum A) 2389 -- Runtime Function: unsigned long long fract __satfractutaudq 2390 (unsigned long long accum A) 2391 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2392 long long accum A) 2393 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2394 long accum A) 2395 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2396 long long accum A) 2397 -- Runtime Function: short fract __satfractqiqq (signed char A) 2398 -- Runtime Function: fract __satfractqihq (signed char A) 2399 -- Runtime Function: long fract __satfractqisq (signed char A) 2400 -- Runtime Function: long long fract __satfractqidq (signed char A) 2401 -- Runtime Function: short accum __satfractqiha (signed char A) 2402 -- Runtime Function: accum __satfractqisa (signed char A) 2403 -- Runtime Function: long accum __satfractqida (signed char A) 2404 -- Runtime Function: long long accum __satfractqita (signed char A) 2405 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2406 A) 2407 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2408 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2409 A) 2410 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2411 char A) 2412 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2413 A) 2414 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2415 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2416 A) 2417 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2418 char A) 2419 -- Runtime Function: short fract __satfracthiqq (short A) 2420 -- Runtime Function: fract __satfracthihq (short A) 2421 -- Runtime Function: long fract __satfracthisq (short A) 2422 -- Runtime Function: long long fract __satfracthidq (short A) 2423 -- Runtime Function: short accum __satfracthiha (short A) 2424 -- Runtime Function: accum __satfracthisa (short A) 2425 -- Runtime Function: long accum __satfracthida (short A) 2426 -- Runtime Function: long long accum __satfracthita (short A) 2427 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2428 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2429 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2430 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2431 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2432 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2433 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2434 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2435 -- Runtime Function: short fract __satfractsiqq (int A) 2436 -- Runtime Function: fract __satfractsihq (int A) 2437 -- Runtime Function: long fract __satfractsisq (int A) 2438 -- Runtime Function: long long fract __satfractsidq (int A) 2439 -- Runtime Function: short accum __satfractsiha (int A) 2440 -- Runtime Function: accum __satfractsisa (int A) 2441 -- Runtime Function: long accum __satfractsida (int A) 2442 -- Runtime Function: long long accum __satfractsita (int A) 2443 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2444 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2445 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2446 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2447 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2448 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2449 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2450 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2451 -- Runtime Function: short fract __satfractdiqq (long A) 2452 -- Runtime Function: fract __satfractdihq (long A) 2453 -- Runtime Function: long fract __satfractdisq (long A) 2454 -- Runtime Function: long long fract __satfractdidq (long A) 2455 -- Runtime Function: short accum __satfractdiha (long A) 2456 -- Runtime Function: accum __satfractdisa (long A) 2457 -- Runtime Function: long accum __satfractdida (long A) 2458 -- Runtime Function: long long accum __satfractdita (long A) 2459 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2460 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2461 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2462 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2463 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2464 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2465 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2466 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2467 -- Runtime Function: short fract __satfracttiqq (long long A) 2468 -- Runtime Function: fract __satfracttihq (long long A) 2469 -- Runtime Function: long fract __satfracttisq (long long A) 2470 -- Runtime Function: long long fract __satfracttidq (long long A) 2471 -- Runtime Function: short accum __satfracttiha (long long A) 2472 -- Runtime Function: accum __satfracttisa (long long A) 2473 -- Runtime Function: long accum __satfracttida (long long A) 2474 -- Runtime Function: long long accum __satfracttita (long long A) 2475 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2476 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2477 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2478 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2479 long A) 2480 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2481 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2482 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2483 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2484 long A) 2485 -- Runtime Function: short fract __satfractsfqq (float A) 2486 -- Runtime Function: fract __satfractsfhq (float A) 2487 -- Runtime Function: long fract __satfractsfsq (float A) 2488 -- Runtime Function: long long fract __satfractsfdq (float A) 2489 -- Runtime Function: short accum __satfractsfha (float A) 2490 -- Runtime Function: accum __satfractsfsa (float A) 2491 -- Runtime Function: long accum __satfractsfda (float A) 2492 -- Runtime Function: long long accum __satfractsfta (float A) 2493 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2494 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2495 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2496 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2497 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2498 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2499 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2500 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2501 -- Runtime Function: short fract __satfractdfqq (double A) 2502 -- Runtime Function: fract __satfractdfhq (double A) 2503 -- Runtime Function: long fract __satfractdfsq (double A) 2504 -- Runtime Function: long long fract __satfractdfdq (double A) 2505 -- Runtime Function: short accum __satfractdfha (double A) 2506 -- Runtime Function: accum __satfractdfsa (double A) 2507 -- Runtime Function: long accum __satfractdfda (double A) 2508 -- Runtime Function: long long accum __satfractdfta (double A) 2509 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2510 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2511 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2512 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2513 A) 2514 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2515 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2516 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2517 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2518 A) 2519 The functions convert from fractional and signed non-fractionals to 2520 fractionals, with saturation. 2521 2522 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2523 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2524 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2525 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2526 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2527 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2528 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2529 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2530 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2531 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2532 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2533 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2534 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2535 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2536 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2537 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2538 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2539 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2540 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2541 -- Runtime Function: unsigned long long __fractunsdqti (long long fract 2542 A) 2543 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2544 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2545 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2546 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2547 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2548 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2549 -- Runtime Function: unsigned short __fractunssahi (accum A) 2550 -- Runtime Function: unsigned int __fractunssasi (accum A) 2551 -- Runtime Function: unsigned long __fractunssadi (accum A) 2552 -- Runtime Function: unsigned long long __fractunssati (accum A) 2553 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2554 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2555 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2556 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2557 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2558 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2559 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2560 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2561 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2562 -- Runtime Function: unsigned long long __fractunstati (long long accum 2563 A) 2564 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2565 fract A) 2566 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2567 fract A) 2568 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract 2569 A) 2570 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2571 fract A) 2572 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short 2573 fract A) 2574 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2575 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2576 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2577 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2578 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract 2579 A) 2580 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract 2581 A) 2582 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2583 fract A) 2584 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2585 A) 2586 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract 2587 A) 2588 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2589 fract A) 2590 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2591 fract A) 2592 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long 2593 fract A) 2594 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2595 fract A) 2596 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2597 fract A) 2598 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2599 long fract A) 2600 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2601 accum A) 2602 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2603 accum A) 2604 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum 2605 A) 2606 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2607 accum A) 2608 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short 2609 accum A) 2610 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2611 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2612 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2613 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2614 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum 2615 A) 2616 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum 2617 A) 2618 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2619 accum A) 2620 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2621 A) 2622 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum 2623 A) 2624 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2625 accum A) 2626 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2627 accum A) 2628 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long 2629 accum A) 2630 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2631 accum A) 2632 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2633 accum A) 2634 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2635 long accum A) 2636 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2637 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2638 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2639 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2640 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2641 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2642 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2643 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2644 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2645 char A) 2646 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2647 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char 2648 A) 2649 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned 2650 char A) 2651 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2652 char A) 2653 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2654 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char 2655 A) 2656 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned 2657 char A) 2658 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2659 -- Runtime Function: fract __fractunshihq (unsigned short A) 2660 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2661 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2662 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2663 -- Runtime Function: accum __fractunshisa (unsigned short A) 2664 -- Runtime Function: long accum __fractunshida (unsigned short A) 2665 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2666 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2667 short A) 2668 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2669 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2670 short A) 2671 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned 2672 short A) 2673 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2674 short A) 2675 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2676 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2677 short A) 2678 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned 2679 short A) 2680 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2681 -- Runtime Function: fract __fractunssihq (unsigned int A) 2682 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2683 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2684 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2685 -- Runtime Function: accum __fractunssisa (unsigned int A) 2686 -- Runtime Function: long accum __fractunssida (unsigned int A) 2687 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2688 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int 2689 A) 2690 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2691 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2692 A) 2693 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned 2694 int A) 2695 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int 2696 A) 2697 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2698 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2699 A) 2700 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned 2701 int A) 2702 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2703 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2704 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2705 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2706 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2707 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2708 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2709 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2710 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2711 long A) 2712 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2713 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long 2714 A) 2715 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned 2716 long A) 2717 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2718 long A) 2719 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2720 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long 2721 A) 2722 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned 2723 long A) 2724 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2725 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2726 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2727 -- Runtime Function: long long fract __fractunstidq (unsigned long long 2728 A) 2729 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2730 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2731 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2732 -- Runtime Function: long long accum __fractunstita (unsigned long long 2733 A) 2734 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2735 long long A) 2736 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long 2737 A) 2738 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long 2739 long A) 2740 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned 2741 long long A) 2742 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2743 long long A) 2744 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long 2745 A) 2746 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long 2747 long A) 2748 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned 2749 long long A) 2750 These functions convert from fractionals to unsigned 2751 non-fractionals; and from unsigned non-fractionals to fractionals, 2752 without saturation. 2753 2754 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2755 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2756 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2757 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2758 A) 2759 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2760 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2761 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2762 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2763 A) 2764 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2765 char A) 2766 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2767 A) 2768 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2769 char A) 2770 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2771 (unsigned char A) 2772 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2773 char A) 2774 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2775 A) 2776 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2777 char A) 2778 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2779 (unsigned char A) 2780 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2781 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2782 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2783 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2784 A) 2785 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2786 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2787 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2788 -- Runtime Function: long long accum __satfractunshita (unsigned short 2789 A) 2790 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2791 short A) 2792 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2793 A) 2794 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2795 short A) 2796 -- Runtime Function: unsigned long long fract __satfractunshiudq 2797 (unsigned short A) 2798 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2799 short A) 2800 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2801 A) 2802 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2803 short A) 2804 -- Runtime Function: unsigned long long accum __satfractunshiuta 2805 (unsigned short A) 2806 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2807 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2808 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2809 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2810 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2811 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2812 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2813 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2814 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2815 int A) 2816 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2817 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2818 int A) 2819 -- Runtime Function: unsigned long long fract __satfractunssiudq 2820 (unsigned int A) 2821 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2822 int A) 2823 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2824 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2825 int A) 2826 -- Runtime Function: unsigned long long accum __satfractunssiuta 2827 (unsigned int A) 2828 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2829 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2830 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2831 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2832 A) 2833 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2834 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2835 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2836 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2837 A) 2838 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2839 long A) 2840 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2841 A) 2842 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2843 long A) 2844 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2845 (unsigned long A) 2846 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2847 long A) 2848 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2849 A) 2850 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2851 long A) 2852 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2853 (unsigned long A) 2854 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2855 A) 2856 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2857 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2858 A) 2859 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2860 long A) 2861 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2862 A) 2863 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2864 -- Runtime Function: long accum __satfractunstida (unsigned long long 2865 A) 2866 -- Runtime Function: long long accum __satfractunstita (unsigned long 2867 long A) 2868 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2869 long long A) 2870 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2871 long A) 2872 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2873 long long A) 2874 -- Runtime Function: unsigned long long fract __satfractunstiudq 2875 (unsigned long long A) 2876 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2877 long long A) 2878 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2879 long A) 2880 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2881 long long A) 2882 -- Runtime Function: unsigned long long accum __satfractunstiuta 2883 (unsigned long long A) 2884 These functions convert from unsigned non-fractionals to 2885 fractionals, with saturation. 2886 2887 2888 File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2889 2890 4.5 Language-independent routines for exception handling 2891 ======================================================== 2892 2893 document me! 2894 2895 _Unwind_DeleteException 2896 _Unwind_Find_FDE 2897 _Unwind_ForcedUnwind 2898 _Unwind_GetGR 2899 _Unwind_GetIP 2900 _Unwind_GetLanguageSpecificData 2901 _Unwind_GetRegionStart 2902 _Unwind_GetTextRelBase 2903 _Unwind_GetDataRelBase 2904 _Unwind_RaiseException 2905 _Unwind_Resume 2906 _Unwind_SetGR 2907 _Unwind_SetIP 2908 _Unwind_FindEnclosingFunction 2909 _Unwind_SjLj_Register 2910 _Unwind_SjLj_Unregister 2911 _Unwind_SjLj_RaiseException 2912 _Unwind_SjLj_ForcedUnwind 2913 _Unwind_SjLj_Resume 2914 __deregister_frame 2915 __deregister_frame_info 2916 __deregister_frame_info_bases 2917 __register_frame 2918 __register_frame_info 2919 __register_frame_info_bases 2920 __register_frame_info_table 2921 __register_frame_info_table_bases 2922 __register_frame_table 2923 2924 2925 File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2926 2927 4.6 Miscellaneous runtime library routines 2928 ========================================== 2929 2930 4.6.1 Cache control functions 2931 ----------------------------- 2932 2933 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2934 This function clears the instruction cache between BEG and END. 2935 2936 4.6.2 Split stack functions and variables 2937 ----------------------------------------- 2938 2939 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void 2940 *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void 2941 **INITIAL_SP) 2942 When using '-fsplit-stack', this call may be used to iterate over 2943 the stack segments. It may be called like this: 2944 void *next_segment = NULL; 2945 void *next_sp = NULL; 2946 void *initial_sp = NULL; 2947 void *stack; 2948 size_t stack_size; 2949 while ((stack = __splitstack_find (next_segment, next_sp, 2950 &stack_size, &next_segment, 2951 &next_sp, &initial_sp)) 2952 != NULL) 2953 { 2954 /* Stack segment starts at stack and is 2955 stack_size bytes long. */ 2956 } 2957 2958 There is no way to iterate over the stack segments of a different 2959 thread. However, what is permitted is for one thread to call this 2960 with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, 2961 NEXT_SP, and INITIAL_SP to a different thread, and then to suspend 2962 one way or another. A different thread may run the subsequent 2963 '__splitstack_find' iterations. Of course, this will only work if 2964 the first thread is suspended while the second thread is calling 2965 '__splitstack_find'. If not, the second thread could be looking at 2966 the stack while it is changing, and anything could happen. 2967 2968 -- Variable: __morestack_segments 2969 -- Variable: __morestack_current_segment 2970 -- Variable: __morestack_initial_sp 2971 Internal variables used by the '-fsplit-stack' implementation. 2972 2973 2974 File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2975 2976 5 Language Front Ends in GCC 2977 **************************** 2978 2979 The interface to front ends for languages in GCC, and in particular the 2980 'tree' structure (*note GENERIC::), was initially designed for C, and 2981 many aspects of it are still somewhat biased towards C and C-like 2982 languages. It is, however, reasonably well suited to other procedural 2983 languages, and front ends for many such languages have been written for 2984 GCC. 2985 2986 Writing a compiler as a front end for GCC, rather than compiling 2987 directly to assembler or generating C code which is then compiled by 2988 GCC, has several advantages: 2989 2990 * GCC front ends benefit from the support for many different target 2991 machines already present in GCC. 2992 * GCC front ends benefit from all the optimizations in GCC. Some of 2993 these, such as alias analysis, may work better when GCC is 2994 compiling directly from source code then when it is compiling from 2995 generated C code. 2996 * Better debugging information is generated when compiling directly 2997 from source code than when going via intermediate generated C code. 2998 2999 Because of the advantages of writing a compiler as a GCC front end, GCC 3000 front ends have also been created for languages very different from 3001 those for which GCC was designed, such as the declarative 3002 logic/functional language Mercury. For these reasons, it may also be 3003 useful to implement compilers created for specialized purposes (for 3004 example, as part of a research project) as GCC front ends. 3005 3006 3007 File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 3008 3009 6 Source Tree Structure and Build System 3010 **************************************** 3011 3012 This chapter describes the structure of the GCC source tree, and how GCC 3013 is built. The user documentation for building and installing GCC is in 3014 a separate manual (<http://gcc.gnu.org/install/>), with which it is 3015 presumed that you are familiar. 3016 3017 * Menu: 3018 3019 * Configure Terms:: Configuration terminology and history. 3020 * Top Level:: The top level source directory. 3021 * gcc Directory:: The 'gcc' subdirectory. 3022 3023 3024 File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 3025 3026 6.1 Configure Terms and History 3027 =============================== 3028 3029 The configure and build process has a long and colorful history, and can 3030 be confusing to anyone who doesn't know why things are the way they are. 3031 While there are other documents which describe the configuration process 3032 in detail, here are a few things that everyone working on GCC should 3033 know. 3034 3035 There are three system names that the build knows about: the machine 3036 you are building on ("build"), the machine that you are building for 3037 ("host"), and the machine that GCC will produce code for ("target"). 3038 When you configure GCC, you specify these with '--build=', '--host=', 3039 and '--target='. 3040 3041 Specifying the host without specifying the build should be avoided, as 3042 'configure' may (and once did) assume that the host you specify is also 3043 the build, which may not be true. 3044 3045 If build, host, and target are all the same, this is called a "native". 3046 If build and host are the same but target is different, this is called a 3047 "cross". If build, host, and target are all different this is called a 3048 "canadian" (for obscure reasons dealing with Canada's political party 3049 and the background of the person working on the build at that time). If 3050 host and target are the same, but build is different, you are using a 3051 cross-compiler to build a native for a different system. Some people 3052 call this a "host-x-host", "crossed native", or "cross-built native". 3053 If build and target are the same, but host is different, you are using a 3054 cross compiler to build a cross compiler that produces code for the 3055 machine you're building on. This is rare, so there is no common way of 3056 describing it. There is a proposal to call this a "crossback". 3057 3058 If build and host are the same, the GCC you are building will also be 3059 used to build the target libraries (like 'libstdc++'). If build and 3060 host are different, you must have already built and installed a cross 3061 compiler that will be used to build the target libraries (if you 3062 configured with '--target=foo-bar', this compiler will be called 3063 'foo-bar-gcc'). 3064 3065 In the case of target libraries, the machine you're building for is the 3066 machine you specified with '--target'. So, build is the machine you're 3067 building on (no change there), host is the machine you're building for 3068 (the target libraries are built for the target, so host is the target 3069 you specified), and target doesn't apply (because you're not building a 3070 compiler, you're building libraries). The configure/make process will 3071 adjust these variables as needed. It also sets '$with_cross_host' to 3072 the original '--host' value in case you need it. 3073 3074 The 'libiberty' support library is built up to three times: once for 3075 the host, once for the target (even if they are the same), and once for 3076 the build if build and host are different. This allows it to be used by 3077 all programs which are generated in the course of the build process. 3078 3079 3080 File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3081 3082 6.2 Top Level Source Directory 3083 ============================== 3084 3085 The top level source directory in a GCC distribution contains several 3086 files and directories that are shared with other software distributions 3087 such as that of GNU Binutils. It also contains several subdirectories 3088 that contain parts of GCC and its runtime libraries: 3089 3090 'boehm-gc' 3091 The Boehm conservative garbage collector, used as part of the Java 3092 runtime library. 3093 3094 'config' 3095 Autoconf macros and Makefile fragments used throughout the tree. 3096 3097 'contrib' 3098 Contributed scripts that may be found useful in conjunction with 3099 GCC. One of these, 'contrib/texi2pod.pl', is used to generate man 3100 pages from Texinfo manuals as part of the GCC build process. 3101 3102 'fixincludes' 3103 The support for fixing system headers to work with GCC. See 3104 'fixincludes/README' for more information. The headers fixed by 3105 this mechanism are installed in 'LIBSUBDIR/include-fixed'. Along 3106 with those headers, 'README-fixinc' is also installed, as 3107 'LIBSUBDIR/include-fixed/README'. 3108 3109 'gcc' 3110 The main sources of GCC itself (except for runtime libraries), 3111 including optimizers, support for different target architectures, 3112 language front ends, and testsuites. *Note The 'gcc' Subdirectory: 3113 gcc Directory, for details. 3114 3115 'gnattools' 3116 Support tools for GNAT. 3117 3118 'include' 3119 Headers for the 'libiberty' library. 3120 3121 'intl' 3122 GNU 'libintl', from GNU 'gettext', for systems which do not include 3123 it in 'libc'. 3124 3125 'libada' 3126 The Ada runtime library. 3127 3128 'libatomic' 3129 The runtime support library for atomic operations (e.g. for 3130 '__sync' and '__atomic'). 3131 3132 'libcpp' 3133 The C preprocessor library. 3134 3135 'libdecnumber' 3136 The Decimal Float support library. 3137 3138 'libffi' 3139 The 'libffi' library, used as part of the Java runtime library. 3140 3141 'libgcc' 3142 The GCC runtime library. 3143 3144 'libgfortran' 3145 The Fortran runtime library. 3146 3147 'libgo' 3148 The Go runtime library. The bulk of this library is mirrored from 3149 the master Go repository (http://code.google.com/p/go/). 3150 3151 'libgomp' 3152 The GNU OpenMP runtime library. 3153 3154 'libiberty' 3155 The 'libiberty' library, used for portability and for some 3156 generally useful data structures and algorithms. *Note 3157 Introduction: (libiberty)Top, for more information about this 3158 library. 3159 3160 'libitm' 3161 The runtime support library for transactional memory. 3162 3163 'libjava' 3164 The Java runtime library. 3165 3166 'libmudflap' 3167 The 'libmudflap' library, used for instrumenting pointer and array 3168 dereferencing operations. 3169 3170 'libobjc' 3171 The Objective-C and Objective-C++ runtime library. 3172 3173 'libquadmath' 3174 The runtime support library for quad-precision math operations. 3175 3176 'libssp' 3177 The Stack protector runtime library. 3178 3179 'libstdc++-v3' 3180 The C++ runtime library. 3181 3182 'lto-plugin' 3183 Plugin used by 'gold' if link-time optimizations are enabled. 3184 3185 'maintainer-scripts' 3186 Scripts used by the 'gccadmin' account on 'gcc.gnu.org'. 3187 3188 'zlib' 3189 The 'zlib' compression library, used by the Java front end, as part 3190 of the Java runtime library, and for compressing and uncompressing 3191 GCC's intermediate language in LTO object files. 3192 3193 The build system in the top level directory, including how recursion 3194 into subdirectories works and how building runtime libraries for 3195 multilibs is handled, is documented in a separate manual, included with 3196 GNU Binutils. *Note GNU configure and build system: (configure)Top, for 3197 details. 3198 3199 3200 File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3201 3202 6.3 The 'gcc' Subdirectory 3203 ========================== 3204 3205 The 'gcc' directory contains many files that are part of the C sources 3206 of GCC, other files used as part of the configuration and build process, 3207 and subdirectories including documentation and a testsuite. The files 3208 that are sources of GCC are documented in a separate chapter. *Note 3209 Passes and Files of the Compiler: Passes. 3210 3211 * Menu: 3212 3213 * Subdirectories:: Subdirectories of 'gcc'. 3214 * Configuration:: The configuration process, and the files it uses. 3215 * Build:: The build system in the 'gcc' directory. 3216 * Makefile:: Targets in 'gcc/Makefile'. 3217 * Library Files:: Library source files and headers under 'gcc/'. 3218 * Headers:: Headers installed by GCC. 3219 * Documentation:: Building documentation in GCC. 3220 * Front End:: Anatomy of a language front end. 3221 * Back End:: Anatomy of a target back end. 3222 3223 3224 File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3225 3226 6.3.1 Subdirectories of 'gcc' 3227 ----------------------------- 3228 3229 The 'gcc' directory contains the following subdirectories: 3230 3231 'LANGUAGE' 3232 Subdirectories for various languages. Directories containing a 3233 file 'config-lang.in' are language subdirectories. The contents of 3234 the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for 3235 Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are 3236 documented in this manual (*note Passes and Files of the Compiler: 3237 Passes.); those for other languages are not. *Note Anatomy of a 3238 Language Front End: Front End, for details of the files in these 3239 directories. 3240 3241 'common' 3242 Source files shared between the compiler drivers (such as 'gcc') 3243 and the compilers proper (such as 'cc1'). If an architecture 3244 defines target hooks shared between those places, it also has a 3245 subdirectory in 'common/config'. *Note Target Structure::. 3246 3247 'config' 3248 Configuration files for supported architectures and operating 3249 systems. *Note Anatomy of a Target Back End: Back End, for details 3250 of the files in this directory. 3251 3252 'doc' 3253 Texinfo documentation for GCC, together with automatically 3254 generated man pages and support for converting the installation 3255 manual to HTML. *Note Documentation::. 3256 3257 'ginclude' 3258 System headers installed by GCC, mainly those required by the C 3259 standard of freestanding implementations. *Note Headers Installed 3260 by GCC: Headers, for details of when these and other headers are 3261 installed. 3262 3263 'po' 3264 Message catalogs with translations of messages produced by GCC into 3265 various languages, 'LANGUAGE.po'. This directory also contains 3266 'gcc.pot', the template for these message catalogues, 'exgettext', 3267 a wrapper around 'gettext' to extract the messages from the GCC 3268 sources and create 'gcc.pot', which is run by 'make gcc.pot', and 3269 'EXCLUDES', a list of files from which messages should not be 3270 extracted. 3271 3272 'testsuite' 3273 The GCC testsuites (except for those for runtime libraries). *Note 3274 Testsuites::. 3275 3276 3277 File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3278 3279 6.3.2 Configuration in the 'gcc' Directory 3280 ------------------------------------------ 3281 3282 The 'gcc' directory is configured with an Autoconf-generated script 3283 'configure'. The 'configure' script is generated from 'configure.ac' 3284 and 'aclocal.m4'. From the files 'configure.ac' and 'acconfig.h', 3285 Autoheader generates the file 'config.in'. The file 'cstamp-h.in' is 3286 used as a timestamp. 3287 3288 * Menu: 3289 3290 * Config Fragments:: Scripts used by 'configure'. 3291 * System Config:: The 'config.build', 'config.host', and 3292 'config.gcc' files. 3293 * Configuration Files:: Files created by running 'configure'. 3294 3295 3296 File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3297 3298 6.3.2.1 Scripts Used by 'configure' 3299 ................................... 3300 3301 'configure' uses some other scripts to help in its work: 3302 3303 * The standard GNU 'config.sub' and 'config.guess' files, kept in the 3304 top level directory, are used. 3305 3306 * The file 'config.gcc' is used to handle configuration specific to 3307 the particular target machine. The file 'config.build' is used to 3308 handle configuration specific to the particular build machine. The 3309 file 'config.host' is used to handle configuration specific to the 3310 particular host machine. (In general, these should only be used 3311 for features that cannot reasonably be tested in Autoconf feature 3312 tests.) *Note The 'config.build'; 'config.host'; and 'config.gcc' 3313 Files: System Config, for details of the contents of these files. 3314 3315 * Each language subdirectory has a file 'LANGUAGE/config-lang.in' 3316 that is used for front-end-specific configuration. *Note The Front 3317 End 'config-lang.in' File: Front End Config, for details of this 3318 file. 3319 3320 * A helper script 'configure.frag' is used as part of creating the 3321 output of 'configure'. 3322 3323 3324 File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3325 3326 6.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files 3327 ................................................................. 3328 3329 The 'config.build' file contains specific rules for particular systems 3330 which GCC is built on. This should be used as rarely as possible, as 3331 the behavior of the build system can always be detected by autoconf. 3332 3333 The 'config.host' file contains specific rules for particular systems 3334 which GCC will run on. This is rarely needed. 3335 3336 The 'config.gcc' file contains specific rules for particular systems 3337 which GCC will generate code for. This is usually needed. 3338 3339 Each file has a list of the shell variables it sets, with descriptions, 3340 at the top of the file. 3341 3342 FIXME: document the contents of these files, and what variables should 3343 be set to control build, host and target configuration. 3344 3345 3346 File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3347 3348 6.3.2.3 Files Created by 'configure' 3349 .................................... 3350 3351 Here we spell out what files will be set up by 'configure' in the 'gcc' 3352 directory. Some other files are created as temporary files in the 3353 configuration process, and are not used in the subsequent build; these 3354 are not documented. 3355 3356 * 'Makefile' is constructed from 'Makefile.in', together with the 3357 host and target fragments (*note Makefile Fragments: Fragments.) 3358 't-TARGET' and 'x-HOST' from 'config', if any, and language 3359 Makefile fragments 'LANGUAGE/Make-lang.in'. 3360 * 'auto-host.h' contains information about the host machine 3361 determined by 'configure'. If the host machine is different from 3362 the build machine, then 'auto-build.h' is also created, containing 3363 such information about the build machine. 3364 * 'config.status' is a script that may be run to recreate the current 3365 configuration. 3366 * 'configargs.h' is a header containing details of the arguments 3367 passed to 'configure' to configure GCC, and of the thread model 3368 used. 3369 * 'cstamp-h' is used as a timestamp. 3370 * If a language 'config-lang.in' file (*note The Front End 3371 'config-lang.in' File: Front End Config.) sets 'outputs', then the 3372 files listed in 'outputs' there are also generated. 3373 3374 The following configuration headers are created from the Makefile, 3375 using 'mkconfig.sh', rather than directly by 'configure'. 'config.h', 3376 'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if 3377 any, appropriate to the host, build and target machines respectively, 3378 the configuration headers for the target, and some definitions; for the 3379 host and build machines, these include the autoconfigured headers 3380 generated by 'configure'. The other configuration headers are 3381 determined by 'config.gcc'. They also contain the typedefs for 'rtx', 3382 'rtvec' and 'tree'. 3383 3384 * 'config.h', for use in programs that run on the host machine. 3385 * 'bconfig.h', for use in programs that run on the build machine. 3386 * 'tconfig.h', for use in programs and libraries for the target 3387 machine. 3388 * 'tm_p.h', which includes the header 'MACHINE-protos.h' that 3389 contains prototypes for functions in the target 'MACHINE.c' file. 3390 The header 'MACHINE-protos.h' can include prototypes of functions 3391 that use rtl and tree data structures inside appropriate '#ifdef 3392 RTX_CODE' and '#ifdef TREE_CODE' conditional code segements. The 3393 'MACHINE-protos.h' is included after the 'rtl.h' and/or 'tree.h' 3394 would have been included. The 'tm_p.h' also includes the header 3395 'tm-preds.h' which is generated by 'genpreds' program during the 3396 build to define the declarations and inline functions for the 3397 predicate functions. 3398 3399 3400 File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3401 3402 6.3.3 Build System in the 'gcc' Directory 3403 ----------------------------------------- 3404 3405 FIXME: describe the build system, including what is built in what 3406 stages. Also list the various source files that are used in the build 3407 process but aren't source files of GCC itself and so aren't documented 3408 below (*note Passes::). 3409 3410 3411 File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3412 3413 6.3.4 Makefile Targets 3414 ---------------------- 3415 3416 These targets are available from the 'gcc' directory: 3417 3418 'all' 3419 This is the default target. Depending on what your 3420 build/host/target configuration is, it coordinates all the things 3421 that need to be built. 3422 3423 'doc' 3424 Produce info-formatted documentation and man pages. Essentially it 3425 calls 'make man' and 'make info'. 3426 3427 'dvi' 3428 Produce DVI-formatted documentation. 3429 3430 'pdf' 3431 Produce PDF-formatted documentation. 3432 3433 'html' 3434 Produce HTML-formatted documentation. 3435 3436 'man' 3437 Generate man pages. 3438 3439 'info' 3440 Generate info-formatted pages. 3441 3442 'mostlyclean' 3443 Delete the files made while building the compiler. 3444 3445 'clean' 3446 That, and all the other files built by 'make all'. 3447 3448 'distclean' 3449 That, and all the files created by 'configure'. 3450 3451 'maintainer-clean' 3452 Distclean plus any file that can be generated from other files. 3453 Note that additional tools may be required beyond what is normally 3454 needed to build GCC. 3455 3456 'srcextra' 3457 Generates files in the source directory that are not 3458 version-controlled but should go into a release tarball. 3459 3460 'srcinfo' 3461 'srcman' 3462 Copies the info-formatted and manpage documentation into the source 3463 directory usually for the purpose of generating a release tarball. 3464 3465 'install' 3466 Installs GCC. 3467 3468 'uninstall' 3469 Deletes installed files, though this is not supported. 3470 3471 'check' 3472 Run the testsuite. This creates a 'testsuite' subdirectory that 3473 has various '.sum' and '.log' files containing the results of the 3474 testing. You can run subsets with, for example, 'make check-gcc'. 3475 You can specify specific tests by setting 'RUNTESTFLAGS' to be the 3476 name of the '.exp' file, optionally followed by (for some tests) an 3477 equals and a file wildcard, like: 3478 3479 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3480 3481 Note that running the testsuite may require additional tools be 3482 installed, such as Tcl or DejaGnu. 3483 3484 The toplevel tree from which you start GCC compilation is not the GCC 3485 directory, but rather a complex Makefile that coordinates the various 3486 steps of the build, including bootstrapping the compiler and using the 3487 new compiler to build target libraries. 3488 3489 When GCC is configured for a native configuration, the default action 3490 for 'make' is to do a full three-stage bootstrap. This means that GCC 3491 is built three times--once with the native compiler, once with the 3492 native-built compiler it just built, and once with the compiler it built 3493 the second time. In theory, the last two should produce the same 3494 results, which 'make compare' can check. Each stage is configured 3495 separately and compiled into a separate directory, to minimize problems 3496 due to ABI incompatibilities between the native compiler and GCC. 3497 3498 If you do a change, rebuilding will also start from the first stage and 3499 "bubble" up the change through the three stages. Each stage is taken 3500 from its build directory (if it had been built previously), rebuilt, and 3501 copied to its subdirectory. This will allow you to, for example, 3502 continue a bootstrap after fixing a bug which causes the stage2 build to 3503 crash. It does not provide as good coverage of the compiler as 3504 bootstrapping from scratch, but it ensures that the new code is 3505 syntactically correct (e.g., that you did not use GCC extensions by 3506 mistake), and avoids spurious bootstrap comparison failures(1). 3507 3508 Other targets available from the top level include: 3509 3510 'bootstrap-lean' 3511 Like 'bootstrap', except that the various stages are removed once 3512 they're no longer needed. This saves disk space. 3513 3514 'bootstrap2' 3515 'bootstrap2-lean' 3516 Performs only the first two stages of bootstrap. Unlike a 3517 three-stage bootstrap, this does not perform a comparison to test 3518 that the compiler is running properly. Note that the disk space 3519 required by a "lean" bootstrap is approximately independent of the 3520 number of stages. 3521 3522 'stageN-bubble (N = 1...4, profile, feedback)' 3523 Rebuild all the stages up to N, with the appropriate flags, 3524 "bubbling" the changes as described above. 3525 3526 'all-stageN (N = 1...4, profile, feedback)' 3527 Assuming that stage N has already been built, rebuild it with the 3528 appropriate flags. This is rarely needed. 3529 3530 'cleanstrap' 3531 Remove everything ('make clean') and rebuilds ('make bootstrap'). 3532 3533 'compare' 3534 Compares the results of stages 2 and 3. This ensures that the 3535 compiler is running properly, since it should produce the same 3536 object files regardless of how it itself was compiled. 3537 3538 'profiledbootstrap' 3539 Builds a compiler with profiling feedback information. In this 3540 case, the second and third stages are named 'profile' and 3541 'feedback', respectively. For more information, see *note Building 3542 with profile feedback: (gccinstall)Building. 3543 3544 'restrap' 3545 Restart a bootstrap, so that everything that was not built with the 3546 system compiler is rebuilt. 3547 3548 'stageN-start (N = 1...4, profile, feedback)' 3549 For each package that is bootstrapped, rename directories so that, 3550 for example, 'gcc' points to the stageN GCC, compiled with the 3551 stageN-1 GCC(2). 3552 3553 You will invoke this target if you need to test or debug the stageN 3554 GCC. If you only need to execute GCC (but you need not run 'make' 3555 either to rebuild it or to run test suites), you should be able to 3556 work directly in the 'stageN-gcc' directory. This makes it easier 3557 to debug multiple stages in parallel. 3558 3559 'stage' 3560 For each package that is bootstrapped, relocate its build directory 3561 to indicate its stage. For example, if the 'gcc' directory points 3562 to the stage2 GCC, after invoking this target it will be renamed to 3563 'stage2-gcc'. 3564 3565 If you wish to use non-default GCC flags when compiling the stage2 and 3566 stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing 3567 'make'. 3568 3569 Usually, the first stage only builds the languages that the compiler is 3570 written in: typically, C and maybe Ada. If you are debugging a 3571 miscompilation of a different stage2 front-end (for example, of the 3572 Fortran front-end), you may want to have front-ends for other languages 3573 in the first stage as well. To do so, set 'STAGE1_LANGUAGES' on the 3574 command line when doing 'make'. 3575 3576 For example, in the aforementioned scenario of debugging a Fortran 3577 front-end miscompilation caused by the stage1 compiler, you may need a 3578 command like 3579 3580 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3581 3582 Alternatively, you can use per-language targets to build and test 3583 languages that are not enabled by default in stage1. For example, 'make 3584 f951' will build a Fortran compiler even in the stage1 build directory. 3585 3586 ---------- Footnotes ---------- 3587 3588 (1) Except if the compiler was buggy and miscompiled some of the 3589 files that were not modified. In this case, it's best to use 'make 3590 restrap'. 3591 3592 (2) Customarily, the system compiler is also termed the 'stage0' GCC. 3593 3594 3595 File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3596 3597 6.3.5 Library Source Files and Headers under the 'gcc' Directory 3598 ---------------------------------------------------------------- 3599 3600 FIXME: list here, with explanation, all the C source files and headers 3601 under the 'gcc' directory that aren't built into the GCC executable but 3602 rather are part of runtime libraries and object files, such as 3603 'crtstuff.c' and 'unwind-dw2.c'. *Note Headers Installed by GCC: 3604 Headers, for more information about the 'ginclude' directory. 3605 3606 3607 File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3608 3609 6.3.6 Headers Installed by GCC 3610 ------------------------------ 3611 3612 In general, GCC expects the system C library to provide most of the 3613 headers to be used with it. However, GCC will fix those headers if 3614 necessary to make them work with GCC, and will install some headers 3615 required of freestanding implementations. These headers are installed 3616 in 'LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3617 installed by GCC; these are not documented here. (FIXME: document them 3618 somewhere.) 3619 3620 Several of the headers GCC installs are in the 'ginclude' directory. 3621 These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are 3622 installed in 'LIBSUBDIR/include', unless the target Makefile fragment 3623 (*note Target Fragment::) overrides this by setting 'USER_H'. 3624 3625 In addition to these headers and those generated by fixing system 3626 headers to work with GCC, some other headers may also be installed in 3627 'LIBSUBDIR/include'. 'config.gcc' may set 'extra_headers'; this 3628 specifies additional headers under 'config' to be installed on some 3629 systems. 3630 3631 GCC installs its own version of '<float.h>', from 'ginclude/float.h'. 3632 This is done to cope with command-line options that change the 3633 representation of floating point numbers. 3634 3635 GCC also installs its own version of '<limits.h>'; this is generated 3636 from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system 3637 also has its own version of '<limits.h>'. (GCC provides its own header 3638 because it is required of ISO C freestanding implementations, but needs 3639 to include the system header from its own header as well because other 3640 standards such as POSIX specify additional values to be defined in 3641 '<limits.h>'.) The system's '<limits.h>' header is used via 3642 'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if 3643 it does not need fixing to work with GCC; if it needs fixing, 3644 'syslimits.h' is the fixed copy. 3645 3646 GCC can also install '<tgmath.h>'. It will do this when 'config.gcc' 3647 sets 'use_gcc_tgmath' to 'yes'. 3648 3649 3650 File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3651 3652 6.3.7 Building Documentation 3653 ---------------------------- 3654 3655 The main GCC documentation is in the form of manuals in Texinfo format. 3656 These are installed in Info format; DVI versions may be generated by 3657 'make dvi', PDF versions by 'make pdf', and HTML versions by 'make 3658 html'. In addition, some man pages are generated from the Texinfo 3659 manuals, there are some other text files with miscellaneous 3660 documentation, and runtime libraries have their own documentation 3661 outside the 'gcc' directory. FIXME: document the documentation for 3662 runtime libraries somewhere. 3663 3664 * Menu: 3665 3666 * Texinfo Manuals:: GCC manuals in Texinfo format. 3667 * Man Page Generation:: Generating man pages from Texinfo manuals. 3668 * Miscellaneous Docs:: Miscellaneous text files with documentation. 3669 3670 3671 File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3672 3673 6.3.7.1 Texinfo Manuals 3674 ....................... 3675 3676 The manuals for GCC as a whole, and the C and C++ front ends, are in 3677 files 'doc/*.texi'. Other front ends have their own manuals in files 3678 'LANGUAGE/*.texi'. Common files 'doc/include/*.texi' are provided which 3679 may be included in multiple manuals; the following files are in 3680 'doc/include': 3681 3682 'fdl.texi' 3683 The GNU Free Documentation License. 3684 'funding.texi' 3685 The section "Funding Free Software". 3686 'gcc-common.texi' 3687 Common definitions for manuals. 3688 'gpl_v3.texi' 3689 The GNU General Public License. 3690 'texinfo.tex' 3691 A copy of 'texinfo.tex' known to work with the GCC manuals. 3692 3693 DVI-formatted manuals are generated by 'make dvi', which uses 3694 'texi2dvi' (via the Makefile macro '$(TEXI2DVI)'). PDF-formatted 3695 manuals are generated by 'make pdf', which uses 'texi2pdf' (via the 3696 Makefile macro '$(TEXI2PDF)'). HTML formatted manuals are generated by 3697 'make html'. Info manuals are generated by 'make info' (which is run as 3698 part of a bootstrap); this generates the manuals in the source 3699 directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and 3700 they are included in release distributions. 3701 3702 Manuals are also provided on the GCC web site, in both HTML and 3703 PostScript forms. This is done via the script 3704 'maintainer-scripts/update_web_docs_svn'. Each manual to be provided 3705 online must be listed in the definition of 'MANUALS' in that file; a 3706 file 'NAME.texi' must only appear once in the source tree, and the 3707 output manual must have the same name as the source file. (However, 3708 other Texinfo files, included in manuals but not themselves the root 3709 files of manuals, may have names that appear more than once in the 3710 source tree.) The manual file 'NAME.texi' should only include other 3711 files in its own directory or in 'doc/include'. HTML manuals will be 3712 generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and 3713 'dvips', and PDF manuals by 'texi2pdf'. All Texinfo files that are 3714 parts of manuals must be version-controlled, even if they are generated 3715 files, for the generation of online manuals to work. 3716 3717 The installation manual, 'doc/install.texi', is also provided on the 3718 GCC web site. The HTML version is generated by the script 3719 'doc/install.texi2html'. 3720 3721 3722 File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3723 3724 6.3.7.2 Man Page Generation 3725 ........................... 3726 3727 Because of user demand, in addition to full Texinfo manuals, man pages 3728 are provided which contain extracts from those manuals. These man pages 3729 are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and 3730 'pod2man'. (The man page for 'g++', 'cp/g++.1', just contains a '.so' 3731 reference to 'gcc.1', but all the other man pages are generated from 3732 Texinfo manuals.) 3733 3734 Because many systems may not have the necessary tools installed to 3735 generate the man pages, they are only generated if the 'configure' 3736 script detects that recent enough tools are installed, and the Makefiles 3737 allow generating man pages to fail without aborting the build. Man 3738 pages are also included in release distributions. They are generated in 3739 the source directory. 3740 3741 Magic comments in Texinfo files starting '@c man' control what parts of 3742 a Texinfo file go into a man page. Only a subset of Texinfo is 3743 supported by 'texi2pod.pl', and it may be necessary to add support for 3744 more Texinfo features to this script when generating new man pages. To 3745 improve the man page output, some special Texinfo macros are provided in 3746 'doc/include/gcc-common.texi' which 'texi2pod.pl' understands: 3747 3748 '@gcctabopt' 3749 Use in the form '@table @gcctabopt' for tables of options, where 3750 for printed output the effect of '@code' is better than that of 3751 '@option' but for man page output a different effect is wanted. 3752 '@gccoptlist' 3753 Use for summary lists of options in manuals. 3754 '@gol' 3755 Use at the end of each line inside '@gccoptlist'. This is 3756 necessary to avoid problems with differences in how the 3757 '@gccoptlist' macro is handled by different Texinfo formatters. 3758 3759 FIXME: describe the 'texi2pod.pl' input language and magic comments in 3760 more detail. 3761 3762 3763 File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3764 3765 6.3.7.3 Miscellaneous Documentation 3766 ................................... 3767 3768 In addition to the formal documentation that is installed by GCC, there 3769 are several other text files in the 'gcc' subdirectory with 3770 miscellaneous documentation: 3771 3772 'ABOUT-GCC-NLS' 3773 Notes on GCC's Native Language Support. FIXME: this should be part 3774 of this manual rather than a separate file. 3775 'ABOUT-NLS' 3776 Notes on the Free Translation Project. 3777 'COPYING' 3778 'COPYING3' 3779 The GNU General Public License, Versions 2 and 3. 3780 'COPYING.LIB' 3781 'COPYING3.LIB' 3782 The GNU Lesser General Public License, Versions 2.1 and 3. 3783 '*ChangeLog*' 3784 '*/ChangeLog*' 3785 Change log files for various parts of GCC. 3786 'LANGUAGES' 3787 Details of a few changes to the GCC front-end interface. FIXME: 3788 the information in this file should be part of general 3789 documentation of the front-end interface in this manual. 3790 'ONEWS' 3791 Information about new features in old versions of GCC. (For recent 3792 versions, the information is on the GCC web site.) 3793 'README.Portability' 3794 Information about portability issues when writing code in GCC. 3795 FIXME: why isn't this part of this manual or of the GCC Coding 3796 Conventions? 3797 3798 FIXME: document such files in subdirectories, at least 'config', 'c', 3799 'cp', 'objc', 'testsuite'. 3800 3801 3802 File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3803 3804 6.3.8 Anatomy of a Language Front End 3805 ------------------------------------- 3806 3807 A front end for a language in GCC has the following parts: 3808 3809 * A directory 'LANGUAGE' under 'gcc' containing source files for that 3810 front end. *Note The Front End 'LANGUAGE' Directory: Front End 3811 Directory, for details. 3812 * A mention of the language in the list of supported languages in 3813 'gcc/doc/install.texi'. 3814 * A mention of the name under which the language's runtime library is 3815 recognized by '--enable-shared=PACKAGE' in the documentation of 3816 that option in 'gcc/doc/install.texi'. 3817 * A mention of any special prerequisites for building the front end 3818 in the documentation of prerequisites in 'gcc/doc/install.texi'. 3819 * Details of contributors to that front end in 3820 'gcc/doc/contrib.texi'. If the details are in that front end's own 3821 manual then there should be a link to that manual's list in 3822 'contrib.texi'. 3823 * Information about support for that language in 3824 'gcc/doc/frontends.texi'. 3825 * Information about standards for that language, and the front end's 3826 support for them, in 'gcc/doc/standards.texi'. This may be a link 3827 to such information in the front end's own manual. 3828 * Details of source file suffixes for that language and '-x LANG' 3829 options supported, in 'gcc/doc/invoke.texi'. 3830 * Entries in 'default_compilers' in 'gcc.c' for source file suffixes 3831 for that language. 3832 * Preferably testsuites, which may be under 'gcc/testsuite' or 3833 runtime library directories. FIXME: document somewhere how to 3834 write testsuite harnesses. 3835 * Probably a runtime library for the language, outside the 'gcc' 3836 directory. FIXME: document this further. 3837 * Details of the directories of any runtime libraries in 3838 'gcc/doc/sourcebuild.texi'. 3839 * Check targets in 'Makefile.def' for the top-level 'Makefile' to 3840 check just the compiler or the compiler and runtime library for the 3841 language. 3842 3843 If the front end is added to the official GCC source repository, the 3844 following are also necessary: 3845 3846 * At least one Bugzilla component for bugs in that front end and 3847 runtime libraries. This category needs to be added to the Bugzilla 3848 database. 3849 * Normally, one or more maintainers of that front end listed in 3850 'MAINTAINERS'. 3851 * Mentions on the GCC web site in 'index.html' and 'frontends.html', 3852 with any relevant links on 'readings.html'. (Front ends that are 3853 not an official part of GCC may also be listed on 'frontends.html', 3854 with relevant links.) 3855 * A news item on 'index.html', and possibly an announcement on the 3856 <gcc-announce (a] gcc.gnu.org> mailing list. 3857 * The front end's manuals should be mentioned in 3858 'maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::) 3859 and the online manuals should be linked to from 3860 'onlinedocs/index.html'. 3861 * Any old releases or CVS repositories of the front end, before its 3862 inclusion in GCC, should be made available on the GCC FTP site 3863 <ftp://gcc.gnu.org/pub/gcc/old-releases/>. 3864 * The release and snapshot script 'maintainer-scripts/gcc_release' 3865 should be updated to generate appropriate tarballs for this front 3866 end. 3867 * If this front end includes its own version files that include the 3868 current date, 'maintainer-scripts/update_version' should be updated 3869 accordingly. 3870 3871 * Menu: 3872 3873 * Front End Directory:: The front end 'LANGUAGE' directory. 3874 * Front End Config:: The front end 'config-lang.in' file. 3875 * Front End Makefile:: The front end 'Make-lang.in' file. 3876 3877 3878 File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3879 3880 6.3.8.1 The Front End 'LANGUAGE' Directory 3881 .......................................... 3882 3883 A front end 'LANGUAGE' directory contains the source files of that front 3884 end (but not of any runtime libraries, which should be outside the 'gcc' 3885 directory). This includes documentation, and possibly some subsidiary 3886 programs built alongside the front end. Certain files are special and 3887 other parts of the compiler depend on their names: 3888 3889 'config-lang.in' 3890 This file is required in all language subdirectories. *Note The 3891 Front End 'config-lang.in' File: Front End Config, for details of 3892 its contents 3893 'Make-lang.in' 3894 This file is required in all language subdirectories. *Note The 3895 Front End 'Make-lang.in' File: Front End Makefile, for details of 3896 its contents. 3897 'lang.opt' 3898 This file registers the set of switches that the front end accepts 3899 on the command line, and their '--help' text. *Note Options::. 3900 'lang-specs.h' 3901 This file provides entries for 'default_compilers' in 'gcc.c' which 3902 override the default of giving an error that a compiler for that 3903 language is not installed. 3904 'LANGUAGE-tree.def' 3905 This file, which need not exist, defines any language-specific tree 3906 codes. 3907 3908 3909 File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3910 3911 6.3.8.2 The Front End 'config-lang.in' File 3912 ........................................... 3913 3914 Each language subdirectory contains a 'config-lang.in' file. This file 3915 is a shell script that may define some variables describing the 3916 language: 3917 3918 'language' 3919 This definition must be present, and gives the name of the language 3920 for some purposes such as arguments to '--enable-languages'. 3921 'lang_requires' 3922 If defined, this variable lists (space-separated) language front 3923 ends other than C that this front end requires to be enabled (with 3924 the names given being their 'language' settings). For example, the 3925 Java front end depends on the C++ front end, so sets 3926 'lang_requires=c++'. 3927 'subdir_requires' 3928 If defined, this variable lists (space-separated) front end 3929 directories other than C that this front end requires to be 3930 present. For example, the Objective-C++ front end uses source 3931 files from the C++ and Objective-C front ends, so sets 3932 'subdir_requires="cp objc"'. 3933 'target_libs' 3934 If defined, this variable lists (space-separated) targets in the 3935 top level 'Makefile' to build the runtime libraries for this 3936 language, such as 'target-libobjc'. 3937 'lang_dirs' 3938 If defined, this variable lists (space-separated) top level 3939 directories (parallel to 'gcc'), apart from the runtime libraries, 3940 that should not be configured if this front end is not built. 3941 'build_by_default' 3942 If defined to 'no', this language front end is not built unless 3943 enabled in a '--enable-languages' argument. Otherwise, front ends 3944 are built by default, subject to any special logic in 3945 'configure.ac' (as is present to disable the Ada front end if the 3946 Ada compiler is not already installed). 3947 'boot_language' 3948 If defined to 'yes', this front end is built in stage1 of the 3949 bootstrap. This is only relevant to front ends written in their 3950 own languages. 3951 'compilers' 3952 If defined, a space-separated list of compiler executables that 3953 will be run by the driver. The names here will each end with 3954 '\$(exeext)'. 3955 'outputs' 3956 If defined, a space-separated list of files that should be 3957 generated by 'configure' substituting values in them. This 3958 mechanism can be used to create a file 'LANGUAGE/Makefile' from 3959 'LANGUAGE/Makefile.in', but this is deprecated, building everything 3960 from the single 'gcc/Makefile' is preferred. 3961 'gtfiles' 3962 If defined, a space-separated list of files that should be scanned 3963 by 'gengtype.c' to generate the garbage collection tables and 3964 routines for this language. This excludes the files that are 3965 common to all front ends. *Note Type Information::. 3966 3967 3968 File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 3969 3970 6.3.8.3 The Front End 'Make-lang.in' File 3971 ......................................... 3972 3973 Each language subdirectory contains a 'Make-lang.in' file. It contains 3974 targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in 3975 'config-lang.in') for the following values of 'HOOK', and any other 3976 Makefile rules required to build those targets (which may if necessary 3977 use other Makefiles specified in 'outputs' in 'config-lang.in', although 3978 this is deprecated). It also adds any testsuite targets that can use 3979 the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'. 3980 3981 'all.cross' 3982 'start.encap' 3983 'rest.encap' 3984 FIXME: exactly what goes in each of these targets? 3985 'tags' 3986 Build an 'etags' 'TAGS' file in the language subdirectory in the 3987 source tree. 3988 'info' 3989 Build info documentation for the front end, in the build directory. 3990 This target is only called by 'make bootstrap' if a suitable 3991 version of 'makeinfo' is available, so does not need to check for 3992 this, and should fail if an error occurs. 3993 'dvi' 3994 Build DVI documentation for the front end, in the build directory. 3995 This should be done using '$(TEXI2DVI)', with appropriate '-I' 3996 arguments pointing to directories of included files. 3997 'pdf' 3998 Build PDF documentation for the front end, in the build directory. 3999 This should be done using '$(TEXI2PDF)', with appropriate '-I' 4000 arguments pointing to directories of included files. 4001 'html' 4002 Build HTML documentation for the front end, in the build directory. 4003 'man' 4004 Build generated man pages for the front end from Texinfo manuals 4005 (*note Man Page Generation::), in the build directory. This target 4006 is only called if the necessary tools are available, but should 4007 ignore errors so as not to stop the build if errors occur; man 4008 pages are optional and the tools involved may be installed in a 4009 broken way. 4010 'install-common' 4011 Install everything that is part of the front end, apart from the 4012 compiler executables listed in 'compilers' in 'config-lang.in'. 4013 'install-info' 4014 Install info documentation for the front end, if it is present in 4015 the source directory. This target should have dependencies on info 4016 files that should be installed. 4017 'install-man' 4018 Install man pages for the front end. This target should ignore 4019 errors. 4020 'install-plugin' 4021 Install headers needed for plugins. 4022 'srcextra' 4023 Copies its dependencies into the source directory. This generally 4024 should be used for generated files such as Bison output files which 4025 are not version-controlled, but should be included in any release 4026 tarballs. This target will be executed during a bootstrap if 4027 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4028 option. 4029 'srcinfo' 4030 'srcman' 4031 Copies its dependencies into the source directory. These targets 4032 will be executed during a bootstrap if 4033 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4034 option. 4035 'uninstall' 4036 Uninstall files installed by installing the compiler. This is 4037 currently documented not to be supported, so the hook need not do 4038 anything. 4039 'mostlyclean' 4040 'clean' 4041 'distclean' 4042 'maintainer-clean' 4043 The language parts of the standard GNU '*clean' targets. *Note 4044 Standard Targets for Users: (standards)Standard Targets, for 4045 details of the standard targets. For GCC, 'maintainer-clean' 4046 should delete all generated files in the source directory that are 4047 not version-controlled, but should not delete anything that is. 4048 4049 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of 4050 host object files that are used by that language. 4051 4052 4053 File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4054 4055 6.3.9 Anatomy of a Target Back End 4056 ---------------------------------- 4057 4058 A back end for a target architecture in GCC has the following parts: 4059 4060 * A directory 'MACHINE' under 'gcc/config', containing a machine 4061 description 'MACHINE.md' file (*note Machine Descriptions: Machine 4062 Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a 4063 source file 'MACHINE.c' (*note Target Description Macros and 4064 Functions: Target Macros.), possibly a target Makefile fragment 4065 't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.), 4066 and maybe some other files. The names of these files may be 4067 changed from the defaults given by explicit specifications in 4068 'config.gcc'. 4069 * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE' 4070 directory, containing additional machine modes to represent 4071 condition codes. *Note Condition Code::, for further details. 4072 * An optional 'MACHINE.opt' file in the 'MACHINE' directory, 4073 containing a list of target-specific options. You can also add 4074 other option files using the 'extra_options' variable in 4075 'config.gcc'. *Note Options::. 4076 * Entries in 'config.gcc' (*note The 'config.gcc' File: System 4077 Config.) for the systems with this target architecture. 4078 * Documentation in 'gcc/doc/invoke.texi' for any command-line options 4079 supported by this target (*note Run-time Target Specification: 4080 Run-time Target.). This means both entries in the summary table of 4081 options and details of the individual options. 4082 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4083 attributes supported (*note Defining target-specific uses of 4084 '__attribute__': Target Attributes.), including where the same 4085 attribute is already supported on some targets, which are 4086 enumerated in the manual. 4087 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4088 pragmas supported. 4089 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4090 built-in functions supported. 4091 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4092 format checking styles supported. 4093 * Documentation in 'gcc/doc/md.texi' of any target-specific 4094 constraint letters (*note Constraints for Particular Machines: 4095 Machine Constraints.). 4096 * A note in 'gcc/doc/contrib.texi' under the person or people who 4097 contributed the target support. 4098 * Entries in 'gcc/doc/install.texi' for all target triplets supported 4099 with this target architecture, giving details of any special notes 4100 about installation for this target, or saying that there are no 4101 special notes if there are none. 4102 * Possibly other support outside the 'gcc' directory for runtime 4103 libraries. FIXME: reference docs for this. The 'libstdc++' 4104 porting manual needs to be installed as info for this to work, or 4105 to be a chapter of this manual. 4106 4107 If the back end is added to the official GCC source repository, the 4108 following are also necessary: 4109 4110 * An entry for the target architecture in 'readings.html' on the GCC 4111 web site, with any relevant links. 4112 * Details of the properties of the back end and target architecture 4113 in 'backends.html' on the GCC web site. 4114 * A news item about the contribution of support for that target 4115 architecture, in 'index.html' on the GCC web site. 4116 * Normally, one or more maintainers of that target listed in 4117 'MAINTAINERS'. Some existing architectures may be unmaintained, 4118 but it would be unusual to add support for a target that does not 4119 have a maintainer when support is added. 4120 * Target triplets covering all 'config.gcc' stanzas for the target, 4121 in the list in 'contrib/config-list.mk'. 4122 4123 4124 File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4125 4126 7 Testsuites 4127 ************ 4128 4129 GCC contains several testsuites to help maintain compiler quality. Most 4130 of the runtime libraries and language front ends in GCC have testsuites. 4131 Currently only the C language testsuites are documented here; FIXME: 4132 document the others. 4133 4134 * Menu: 4135 4136 * Test Idioms:: Idioms used in testsuite code. 4137 * Test Directives:: Directives used within DejaGnu tests. 4138 * Ada Tests:: The Ada language testsuites. 4139 * C Tests:: The C language testsuites. 4140 * libgcj Tests:: The Java library testsuites. 4141 * LTO Testing:: Support for testing link-time optimizations. 4142 * gcov Testing:: Support for testing gcov. 4143 * profopt Testing:: Support for testing profile-directed optimizations. 4144 * compat Testing:: Support for testing binary compatibility. 4145 * Torture Tests:: Support for torture testing using multiple options. 4146 4147 4148 File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4149 4150 7.1 Idioms Used in Testsuite Code 4151 ================================= 4152 4153 In general, C testcases have a trailing '-N.c', starting with '-1.c', in 4154 case other testcases with similar names are added later. If the test is 4155 a test of some well-defined feature, it should have a name referring to 4156 that feature such as 'FEATURE-1.c'. If it does not test a well-defined 4157 feature but just happens to exercise a bug somewhere in the compiler, 4158 and a bug report has been filed for this bug in the GCC bug database, 4159 'prBUG-NUMBER-1.c' is the appropriate form of name. Otherwise (for 4160 miscellaneous bugs not filed in the GCC bug database), and previously 4161 more generally, test cases are named after the date on which they were 4162 added. This allows people to tell at a glance whether a test failure is 4163 because of a recently found bug that has not yet been fixed, or whether 4164 it may be a regression, but does not give any other information about 4165 the bug or where discussion of it may be found. Some other language 4166 testsuites follow similar conventions. 4167 4168 In the 'gcc.dg' testsuite, it is often necessary to test that an error 4169 is indeed a hard error and not just a warning--for example, where it is 4170 a constraint violation in the C standard, which must become an error 4171 with '-pedantic-errors'. The following idiom, where the first line 4172 shown is line LINE of the file and the line that generates the error, is 4173 used for this: 4174 4175 /* { dg-bogus "warning" "warning in place of error" } */ 4176 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4177 4178 It may be necessary to check that an expression is an integer constant 4179 expression and has a certain value. To check that 'E' has value 'V', an 4180 idiom similar to the following is used: 4181 4182 char x[((E) == (V) ? 1 : -1)]; 4183 4184 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions 4185 about the types of expressions. See, for example, 4186 'gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4187 rules for the types of conditional expressions in the C standard; see, 4188 for example, 'gcc.dg/c99-intconst-1.c'. 4189 4190 It is useful to be able to test that optimizations are being made 4191 properly. This cannot be done in all cases, but it can be done where 4192 the optimization will lead to code being optimized away (for example, 4193 where flow analysis or alias analysis should show that certain code 4194 cannot be called) or to functions not being called because they have 4195 been expanded as built-in functions. Such tests go in 4196 'gcc.c-torture/execute'. Where code should be optimized away, a call to 4197 a nonexistent function such as 'link_failure ()' may be inserted; a 4198 definition 4199 4200 #ifndef __OPTIMIZE__ 4201 void 4202 link_failure (void) 4203 { 4204 abort (); 4205 } 4206 #endif 4207 4208 will also be needed so that linking still succeeds when the test is run 4209 without optimization. When all calls to a built-in function should have 4210 been optimized and no calls to the non-built-in version of the function 4211 should remain, that function may be defined as 'static' to call 'abort 4212 ()' (although redeclaring a function as static may not work on all 4213 targets). 4214 4215 All testcases must be portable. Target-specific testcases must have 4216 appropriate code to avoid causing failures on unsupported systems; 4217 unfortunately, the mechanisms for this differ by directory. 4218 4219 FIXME: discuss non-C testsuites here. 4220 4221 4222 File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4223 4224 7.2 Directives used within DejaGnu tests 4225 ======================================== 4226 4227 * Menu: 4228 4229 * Directives:: Syntax and descriptions of test directives. 4230 * Selectors:: Selecting targets to which a test applies. 4231 * Effective-Target Keywords:: Keywords describing target attributes. 4232 * Add Options:: Features for 'dg-add-options' 4233 * Require Support:: Variants of 'dg-require-SUPPORT' 4234 * Final Actions:: Commands for use in 'dg-final' 4235 4236 4237 File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4238 4239 7.2.1 Syntax and Descriptions of test directives 4240 ------------------------------------------------ 4241 4242 Test directives appear within comments in a test source file and begin 4243 with 'dg-'. Some of these are defined within DejaGnu and others are 4244 local to the GCC testsuite. 4245 4246 The order in which test directives appear in a test can be important: 4247 directives local to GCC sometimes override information used by the 4248 DejaGnu directives, which know nothing about the GCC directives, so the 4249 DejaGnu directives must precede GCC directives. 4250 4251 Several test directives include selectors (*note Selectors::) which are 4252 usually preceded by the keyword 'target' or 'xfail'. 4253 4254 7.2.1.1 Specify how to build the test 4255 ..................................... 4256 4257 '{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4258 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4259 is executed. It is one of: 4260 4261 'preprocess' 4262 Compile with '-E' to run only the preprocessor. 4263 'compile' 4264 Compile with '-S' to produce an assembly code file. 4265 'assemble' 4266 Compile with '-c' to produce a relocatable object file. 4267 'link' 4268 Compile, assemble, and link to produce an executable file. 4269 'run' 4270 Produce and run an executable file, which is expected to 4271 return an exit code of 0. 4272 4273 The default is 'compile'. That can be overridden for a set of 4274 tests by redefining 'dg-do-what-default' within the '.exp' file for 4275 those tests. 4276 4277 If the directive includes the optional '{ target SELECTOR }' then 4278 the test is skipped unless the target system matches the SELECTOR. 4279 4280 If DO-WHAT-KEYWORD is 'run' and the directive includes the optional 4281 '{ xfail SELECTOR }' and the selector is met then the test is 4282 expected to fail. The 'xfail' clause is ignored for other values 4283 of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'. 4284 4285 7.2.1.2 Specify additional compiler options 4286 ........................................... 4287 4288 '{ dg-options OPTIONS [{ target SELECTOR }] }' 4289 This DejaGnu directive provides a list of compiler options, to be 4290 used if the target system matches SELECTOR, that replace the 4291 default options used for this set of tests. 4292 4293 '{ dg-add-options FEATURE ... }' 4294 Add any compiler options that are needed to access certain 4295 features. This directive does nothing on targets that enable the 4296 features by default, or that don't provide them at all. It must 4297 come after all 'dg-options' directives. For supported values of 4298 FEATURE see *note Add Options::. 4299 4300 '{ dg-additional-options OPTIONS [{ target SELECTOR }] }' 4301 This directive provides a list of compiler options, to be used if 4302 the target system matches SELECTOR, that are added to the default 4303 options used for this set of tests. 4304 4305 7.2.1.3 Modify the test timeout value 4306 ..................................... 4307 4308 The normal timeout limit, in seconds, is found by searching the 4309 following in order: 4310 4311 * the value defined by an earlier 'dg-timeout' directive in the test 4312 4313 * variable TOOL_TIMEOUT defined by the set of tests 4314 4315 * GCC,TIMEOUT set in the target board 4316 4317 * 300 4318 4319 '{ dg-timeout N [{target SELECTOR }] }' 4320 Set the time limit for the compilation and for the execution of the 4321 test to the specified number of seconds. 4322 4323 '{ dg-timeout-factor X [{ target SELECTOR }] }' 4324 Multiply the normal time limit for compilation and execution of the 4325 test by the specified floating-point factor. 4326 4327 7.2.1.4 Skip a test for some targets 4328 .................................... 4329 4330 '{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4331 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4332 element is a string of zero or more GCC options. Skip the test if 4333 all of the following conditions are met: 4334 * the test system is included in SELECTOR 4335 4336 * for at least one of the option strings in INCLUDE-OPTS, every 4337 option from that string is in the set of options with which 4338 the test would be compiled; use '"*"' for an INCLUDE-OPTS list 4339 that matches any options; that is the default if INCLUDE-OPTS 4340 is not specified 4341 4342 * for each of the option strings in EXCLUDE-OPTS, at least one 4343 option from that string is not in the set of options with 4344 which the test would be compiled; use '""' for an empty 4345 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4346 specified 4347 4348 For example, to skip a test if option '-Os' is present: 4349 4350 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4351 4352 To skip a test if both options '-O2' and '-g' are present: 4353 4354 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4355 4356 To skip a test if either '-O2' or '-O3' is present: 4357 4358 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4359 4360 To skip a test unless option '-Os' is present: 4361 4362 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4363 4364 To skip a test if either '-O2' or '-O3' is used with '-g' but not 4365 if '-fpic' is also present: 4366 4367 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4368 4369 '{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4370 Skip the test if the test target, including current multilib flags, 4371 is not covered by the effective-target keyword. If the directive 4372 includes the optional '{ SELECTOR }' then the effective-target test 4373 is only performed if the target system matches the SELECTOR. This 4374 directive must appear after any 'dg-do' directive in the test and 4375 before any 'dg-additional-sources' directive. *Note 4376 Effective-Target Keywords::. 4377 4378 '{ dg-require-SUPPORT args }' 4379 Skip the test if the target does not provide the required support. 4380 These directives must appear after any 'dg-do' directive in the 4381 test and before any 'dg-additional-sources' directive. They 4382 require at least one argument, which can be an empty string if the 4383 specific procedure does not examine the argument. *Note Require 4384 Support::, for a complete list of these directives. 4385 4386 7.2.1.5 Expect a test to fail for some targets 4387 .............................................. 4388 4389 '{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4390 Expect the test to fail if the conditions (which are the same as 4391 for 'dg-skip-if') are met. This does not affect the execute step. 4392 4393 '{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4394 Expect the execute step of a test to fail if the conditions (which 4395 are the same as for 'dg-skip-if') are met. 4396 4397 7.2.1.6 Expect the test executable to fail 4398 .......................................... 4399 4400 '{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4401 Expect the test executable to return a nonzero exit status if the 4402 conditions (which are the same as for 'dg-skip-if') are met. 4403 4404 7.2.1.7 Verify compiler messages 4405 ................................ 4406 4407 '{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4408 This DejaGnu directive appears on a source line that is expected to 4409 get an error message, or else specifies the source line associated 4410 with the message. If there is no message for that line or if the 4411 text of that message is not matched by REGEXP then the check fails 4412 and COMMENT is included in the 'FAIL' message. The check does not 4413 look for the string 'error' unless it is part of REGEXP. 4414 4415 '{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4416 This DejaGnu directive appears on a source line that is expected to 4417 get a warning message, or else specifies the source line associated 4418 with the message. If there is no message for that line or if the 4419 text of that message is not matched by REGEXP then the check fails 4420 and COMMENT is included in the 'FAIL' message. The check does not 4421 look for the string 'warning' unless it is part of REGEXP. 4422 4423 '{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4424 The line is expected to get a message other than an error or 4425 warning. If there is no message for that line or if the text of 4426 that message is not matched by REGEXP then the check fails and 4427 COMMENT is included in the 'FAIL' message. 4428 4429 '{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4430 This DejaGnu directive appears on a source line that should not get 4431 a message matching REGEXP, or else specifies the source line 4432 associated with the bogus message. It is usually used with 'xfail' 4433 to indicate that the message is a known problem for a particular 4434 set of targets. 4435 4436 '{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4437 This DejaGnu directive indicates that the test is expected to fail 4438 due to compiler messages that are not handled by 'dg-error', 4439 'dg-warning' or 'dg-bogus'. For this directive 'xfail' has the 4440 same effect as 'target'. 4441 4442 '{ dg-prune-output REGEXP }' 4443 Prune messages matching REGEXP from the test output. 4444 4445 7.2.1.8 Verify output of the test executable 4446 ............................................ 4447 4448 '{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4449 This DejaGnu directive compares REGEXP to the combined output that 4450 the test executable writes to 'stdout' and 'stderr'. 4451 4452 7.2.1.9 Specify additional files for a test 4453 ........................................... 4454 4455 '{ dg-additional-files "FILELIST" }' 4456 Specify additional files, other than source files, that must be 4457 copied to the system where the compiler runs. 4458 4459 '{ dg-additional-sources "FILELIST" }' 4460 Specify additional source files to appear in the compile line 4461 following the main test file. 4462 4463 7.2.1.10 Add checks at the end of a test 4464 ........................................ 4465 4466 '{ dg-final { LOCAL-DIRECTIVE } }' 4467 This DejaGnu directive is placed within a comment anywhere in the 4468 source file and is processed after the test has been compiled and 4469 run. Multiple 'dg-final' commands are processed in the order in 4470 which they appear in the source file. *Note Final Actions::, for a 4471 list of directives that can be used within 'dg-final'. 4472 4473 4474 File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4475 4476 7.2.2 Selecting targets to which a test applies 4477 ----------------------------------------------- 4478 4479 Several test directives include SELECTORs to limit the targets for which 4480 a test is run or to declare that a test is expected to fail on 4481 particular targets. 4482 4483 A selector is: 4484 * one or more target triplets, possibly including wildcard 4485 characters; use '*-*-*' to match any target 4486 * a single effective-target keyword (*note Effective-Target 4487 Keywords::) 4488 * a logical expression 4489 4490 Depending on the context, the selector specifies whether a test is 4491 skipped and reported as unsupported or is expected to fail. A context 4492 that allows either 'target' or 'xfail' also allows '{ target SELECTOR1 4493 xfail SELECTOR2 }' to skip the test for targets that don't match 4494 SELECTOR1 and the test to fail for targets that match SELECTOR2. 4495 4496 A selector expression appears within curly braces and uses a single 4497 logical operator: one of '!', '&&', or '||'. An operand is another 4498 selector expression, an effective-target keyword, a single target 4499 triplet, or a list of target triplets within quotes or curly braces. 4500 For example: 4501 4502 { target { ! "hppa*-*-* ia64*-*-*" } } 4503 { target { powerpc*-*-* && lp64 } } 4504 { xfail { lp64 || vect_no_align } } 4505 4506 4507 File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4508 4509 7.2.3 Keywords describing target attributes 4510 ------------------------------------------- 4511 4512 Effective-target keywords identify sets of targets that support 4513 particular functionality. They are used to limit tests to be run only 4514 for particular targets, or to specify that particular sets of targets 4515 are expected to fail some tests. 4516 4517 Effective-target keywords are defined in 'lib/target-supports.exp' in 4518 the GCC testsuite, with the exception of those that are documented as 4519 being local to a particular test directory. 4520 4521 The 'effective target' takes into account all of the compiler options 4522 with which the test will be compiled, including the multilib options. 4523 By convention, keywords ending in '_nocache' can also include options 4524 specified for the particular test in an earlier 'dg-options' or 4525 'dg-add-options' directive. 4526 4527 7.2.3.1 Data type sizes 4528 ....................... 4529 4530 'ilp32' 4531 Target has 32-bit 'int', 'long', and pointers. 4532 4533 'lp64' 4534 Target has 32-bit 'int', 64-bit 'long' and pointers. 4535 4536 'llp64' 4537 Target has 32-bit 'int' and 'long', 64-bit 'long long' and 4538 pointers. 4539 4540 'double64' 4541 Target has 64-bit 'double'. 4542 4543 'double64plus' 4544 Target has 'double' that is 64 bits or longer. 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 4571 7.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 4583 7.2.3.3 Vector-specific attributes 4584 .................................. 4585 4586 'vect_condition' 4587 Target supports vector conditional operations. 4588 4589 'vect_double' 4590 Target supports hardware vectors of 'double'. 4591 4592 'vect_float' 4593 Target supports hardware vectors of 'float'. 4594 4595 'vect_int' 4596 Target supports hardware vectors of 'int'. 4597 4598 'vect_long' 4599 Target supports hardware vectors of 'long'. 4600 4601 'vect_long_long' 4602 Target supports hardware vectors of 'long long'. 4603 4604 'vect_aligned_arrays' 4605 Target aligns arrays to vector alignment boundary. 4606 4607 'vect_hw_misalign' 4608 Target supports a vector misalign access. 4609 4610 'vect_no_align' 4611 Target does not support a vector alignment mechanism. 4612 4613 'vect_no_int_max' 4614 Target does not support a vector max instruction on 'int'. 4615 4616 'vect_no_int_add' 4617 Target does not support a vector add instruction on 'int'. 4618 4619 'vect_no_bitwise' 4620 Target does not support vector bitwise instructions. 4621 4622 'vect_char_mult' 4623 Target supports 'vector char' multiplication. 4624 4625 'vect_short_mult' 4626 Target supports 'vector short' multiplication. 4627 4628 'vect_int_mult' 4629 Target supports 'vector int' multiplication. 4630 4631 'vect_extract_even_odd' 4632 Target supports vector even/odd element extraction. 4633 4634 'vect_extract_even_odd_wide' 4635 Target supports vector even/odd element extraction of vectors with 4636 elements 'SImode' or larger. 4637 4638 'vect_interleave' 4639 Target supports vector interleaving. 4640 4641 'vect_strided' 4642 Target supports vector interleaving and extract even/odd. 4643 4644 'vect_strided_wide' 4645 Target supports vector interleaving and extract even/odd for wide 4646 element types. 4647 4648 'vect_perm' 4649 Target supports vector permutation. 4650 4651 'vect_shift' 4652 Target supports a hardware vector shift operation. 4653 4654 'vect_widen_sum_hi_to_si' 4655 Target supports a vector widening summation of 'short' operands 4656 into 'int' results, or can promote (unpack) from 'short' to 'int'. 4657 4658 'vect_widen_sum_qi_to_hi' 4659 Target supports a vector widening summation of 'char' operands into 4660 'short' results, or can promote (unpack) from 'char' to 'short'. 4661 4662 'vect_widen_sum_qi_to_si' 4663 Target supports a vector widening summation of 'char' operands into 4664 'int' results. 4665 4666 'vect_widen_mult_qi_to_hi' 4667 Target supports a vector widening multiplication of 'char' operands 4668 into 'short' results, or can promote (unpack) from 'char' to 4669 'short' and perform non-widening multiplication of 'short'. 4670 4671 'vect_widen_mult_hi_to_si' 4672 Target supports a vector widening multiplication of 'short' 4673 operands into 'int' results, or can promote (unpack) from 'short' 4674 to 'int' and perform non-widening multiplication of 'int'. 4675 4676 'vect_sdot_qi' 4677 Target supports a vector dot-product of 'signed char'. 4678 4679 'vect_udot_qi' 4680 Target supports a vector dot-product of 'unsigned char'. 4681 4682 'vect_sdot_hi' 4683 Target supports a vector dot-product of 'signed short'. 4684 4685 'vect_udot_hi' 4686 Target supports a vector dot-product of 'unsigned short'. 4687 4688 'vect_pack_trunc' 4689 Target supports a vector demotion (packing) of 'short' to 'char' 4690 and from 'int' to 'short' using modulo arithmetic. 4691 4692 'vect_unpack' 4693 Target supports a vector promotion (unpacking) of 'char' to 'short' 4694 and from 'char' to 'int'. 4695 4696 'vect_intfloat_cvt' 4697 Target supports conversion from 'signed int' to 'float'. 4698 4699 'vect_uintfloat_cvt' 4700 Target supports conversion from 'unsigned int' to 'float'. 4701 4702 'vect_floatint_cvt' 4703 Target supports conversion from 'float' to 'signed int'. 4704 4705 'vect_floatuint_cvt' 4706 Target supports conversion from 'float' to 'unsigned int'. 4707 4708 7.2.3.4 Thread Local Storage attributes 4709 ....................................... 4710 4711 'tls' 4712 Target supports thread-local storage. 4713 4714 'tls_native' 4715 Target supports native (rather than emulated) thread-local storage. 4716 4717 'tls_runtime' 4718 Test system supports executing TLS executables. 4719 4720 7.2.3.5 Decimal floating point attributes 4721 ......................................... 4722 4723 'dfp' 4724 Targets supports compiling decimal floating point extension to C. 4725 4726 'dfp_nocache' 4727 Including the options used to compile this particular test, the 4728 target supports compiling decimal floating point extension to C. 4729 4730 'dfprt' 4731 Test system can execute decimal floating point tests. 4732 4733 'dfprt_nocache' 4734 Including the options used to compile this particular test, the 4735 test system can execute decimal floating point tests. 4736 4737 'hard_dfp' 4738 Target generates decimal floating point instructions with current 4739 options. 4740 4741 7.2.3.6 ARM-specific attributes 4742 ............................... 4743 4744 'arm32' 4745 ARM target generates 32-bit code. 4746 4747 'arm_eabi' 4748 ARM target adheres to the ABI for the ARM Architecture. 4749 4750 'arm_hf_eabi' 4751 ARM target adheres to the VFP and Advanced SIMD Register Arguments 4752 variant of the ABI for the ARM Architecture (as selected with 4753 '-mfloat-abi=hard'). 4754 4755 'arm_hard_vfp_ok' 4756 ARM target supports '-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4757 may be incompatible with these options. 4758 4759 'arm_iwmmxt_ok' 4760 ARM target supports '-mcpu=iwmmxt'. Some multilibs may be 4761 incompatible with this option. 4762 4763 'arm_neon' 4764 ARM target supports generating NEON instructions. 4765 4766 'arm_neon_hw' 4767 Test system supports executing NEON instructions. 4768 4769 'arm_neonv2_hw' 4770 Test system supports executing NEON v2 instructions. 4771 4772 'arm_neon_ok' 4773 ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible 4774 options. Some multilibs may be incompatible with these options. 4775 4776 'arm_neonv2_ok' 4777 ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or 4778 compatible options. Some multilibs may be incompatible with these 4779 options. 4780 4781 'arm_neon_fp16_ok' 4782 ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or 4783 compatible options. Some multilibs may be incompatible with these 4784 options. 4785 4786 'arm_thumb1_ok' 4787 ARM target generates Thumb-1 code for '-mthumb'. 4788 4789 'arm_thumb2_ok' 4790 ARM target generates Thumb-2 code for '-mthumb'. 4791 4792 'arm_vfp_ok' 4793 ARM target supports '-mfpu=vfp -mfloat-abi=softfp'. Some multilibs 4794 may be incompatible with these options. 4795 4796 'arm_v8_vfp_ok' 4797 ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'. Some 4798 multilibs may be incompatible with these options. 4799 4800 'arm_v8_neon_ok' 4801 ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'. Some 4802 multilibs may be incompatible with these options. 4803 4804 'arm_prefer_ldrd_strd' 4805 ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and 4806 'STM' instructions. 4807 4808 7.2.3.7 MIPS-specific attributes 4809 ................................ 4810 4811 'mips64' 4812 MIPS target supports 64-bit instructions. 4813 4814 'nomips16' 4815 MIPS target does not produce MIPS16 code. 4816 4817 'mips16_attribute' 4818 MIPS target can generate MIPS16 code. 4819 4820 'mips_loongson' 4821 MIPS target is a Loongson-2E or -2F target using an ABI that 4822 supports the Loongson vector modes. 4823 4824 'mips_newabi_large_long_double' 4825 MIPS target supports 'long double' larger than 'double' when using 4826 the new ABI. 4827 4828 'mpaired_single' 4829 MIPS target supports '-mpaired-single'. 4830 4831 7.2.3.8 PowerPC-specific attributes 4832 ................................... 4833 4834 'dfp_hw' 4835 PowerPC target supports executing hardware DFP instructions. 4836 4837 'p8vector_hw' 4838 PowerPC target supports executing VSX instructions (ISA 2.07). 4839 4840 'powerpc64' 4841 Test system supports executing 64-bit instructions. 4842 4843 'powerpc_altivec' 4844 PowerPC target supports AltiVec. 4845 4846 'powerpc_altivec_ok' 4847 PowerPC target supports '-maltivec'. 4848 4849 'powerpc_eabi_ok' 4850 PowerPC target supports '-meabi'. 4851 4852 'powerpc_elfv2' 4853 PowerPC target supports '-mabi=elfv2'. 4854 4855 'powerpc_fprs' 4856 PowerPC target supports floating-point registers. 4857 4858 'powerpc_hard_double' 4859 PowerPC target supports hardware double-precision floating-point. 4860 4861 'powerpc_htm_ok' 4862 PowerPC target supports '-mhtm' 4863 4864 'powerpc_p8vector_ok' 4865 PowerPC target supports '-mpower8-vector' 4866 4867 'powerpc_ppu_ok' 4868 PowerPC target supports '-mcpu=cell'. 4869 4870 'powerpc_spe' 4871 PowerPC target supports PowerPC SPE. 4872 4873 'powerpc_spe_nocache' 4874 Including the options used to compile this particular test, the 4875 PowerPC target supports PowerPC SPE. 4876 4877 'powerpc_spu' 4878 PowerPC target supports PowerPC SPU. 4879 4880 'powerpc_vsx_ok' 4881 PowerPC target supports '-mvsx'. 4882 4883 'powerpc_405_nocache' 4884 Including the options used to compile this particular test, the 4885 PowerPC target supports PowerPC 405. 4886 4887 'ppc_recip_hw' 4888 PowerPC target supports executing reciprocal estimate instructions. 4889 4890 'spu_auto_overlay' 4891 SPU target has toolchain that supports automatic overlay 4892 generation. 4893 4894 'vmx_hw' 4895 PowerPC target supports executing AltiVec instructions. 4896 4897 'vsx_hw' 4898 PowerPC target supports executing VSX instructions (ISA 2.06). 4899 4900 7.2.3.9 Other hardware attributes 4901 ................................. 4902 4903 'avx' 4904 Target supports compiling 'avx' instructions. 4905 4906 'avx_runtime' 4907 Target supports the execution of 'avx' instructions. 4908 4909 'cell_hw' 4910 Test system can execute AltiVec and Cell PPU instructions. 4911 4912 'coldfire_fpu' 4913 Target uses a ColdFire FPU. 4914 4915 'hard_float' 4916 Target supports FPU instructions. 4917 4918 'sse' 4919 Target supports compiling 'sse' instructions. 4920 4921 'sse_runtime' 4922 Target supports the execution of 'sse' instructions. 4923 4924 'sse2' 4925 Target supports compiling 'sse2' instructions. 4926 4927 'sse2_runtime' 4928 Target supports the execution of 'sse2' instructions. 4929 4930 'sync_char_short' 4931 Target supports atomic operations on 'char' and 'short'. 4932 4933 'sync_int_long' 4934 Target supports atomic operations on 'int' and 'long'. 4935 4936 'ultrasparc_hw' 4937 Test environment appears to run executables on a simulator that 4938 accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS' 4939 or 'EM_SPARCV9' executables. 4940 4941 'vect_cmdline_needed' 4942 Target requires a command line argument to enable a SIMD 4943 instruction set. 4944 4945 7.2.3.10 Environment attributes 4946 ............................... 4947 4948 'c' 4949 The language for the compiler under test is C. 4950 4951 'c++' 4952 The language for the compiler under test is C++. 4953 4954 'c99_runtime' 4955 Target provides a full C99 runtime. 4956 4957 'correct_iso_cpp_string_wchar_protos' 4958 Target 'string.h' and 'wchar.h' headers provide C++ required 4959 overloads for 'strchr' etc. functions. 4960 4961 'dummy_wcsftime' 4962 Target uses a dummy 'wcsftime' function that always returns zero. 4963 4964 'fd_truncate' 4965 Target can truncate a file from a file descriptor, as used by 4966 'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'. 4967 4968 'freestanding' 4969 Target is 'freestanding' as defined in section 4 of the C99 4970 standard. Effectively, it is a target which supports no extra 4971 headers or libraries other than what is considered essential. 4972 4973 'init_priority' 4974 Target supports constructors with initialization priority 4975 arguments. 4976 4977 'inttypes_types' 4978 Target has the basic signed and unsigned types in 'inttypes.h'. 4979 This is for tests that GCC's notions of these types agree with 4980 those in the header, as some systems have only 'inttypes.h'. 4981 4982 'lax_strtofp' 4983 Target might have errors of a few ULP in string to floating-point 4984 conversion functions and overflow is not always detected correctly 4985 by those functions. 4986 4987 'mmap' 4988 Target supports 'mmap'. 4989 4990 'newlib' 4991 Target supports Newlib. 4992 4993 'pow10' 4994 Target provides 'pow10' function. 4995 4996 'pthread' 4997 Target can compile using 'pthread.h' with no errors or warnings. 4998 4999 'pthread_h' 5000 Target has 'pthread.h'. 5001 5002 'run_expensive_tests' 5003 Expensive testcases (usually those that consume excessive amounts 5004 of CPU time) should be run on this target. This can be enabled by 5005 setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a 5006 non-empty string. 5007 5008 'simulator' 5009 Test system runs executables on a simulator (i.e. slowly) rather 5010 than hardware (i.e. fast). 5011 5012 'stdint_types' 5013 Target has the basic signed and unsigned C types in 'stdint.h'. 5014 This will be obsolete when GCC ensures a working 'stdint.h' for all 5015 targets. 5016 5017 'trampolines' 5018 Target supports trampolines. 5019 5020 'uclibc' 5021 Target supports uClibc. 5022 5023 'unwrapped' 5024 Target does not use a status wrapper. 5025 5026 'vxworks_kernel' 5027 Target is a VxWorks kernel. 5028 5029 'vxworks_rtp' 5030 Target is a VxWorks RTP. 5031 5032 'wchar' 5033 Target supports wide characters. 5034 5035 7.2.3.11 Other attributes 5036 ......................... 5037 5038 'automatic_stack_alignment' 5039 Target supports automatic stack alignment. 5040 5041 'cxa_atexit' 5042 Target uses '__cxa_atexit'. 5043 5044 'default_packed' 5045 Target has packed layout of structure members by default. 5046 5047 'fgraphite' 5048 Target supports Graphite optimizations. 5049 5050 'fixed_point' 5051 Target supports fixed-point extension to C. 5052 5053 'fopenmp' 5054 Target supports OpenMP via '-fopenmp'. 5055 5056 'fpic' 5057 Target supports '-fpic' and '-fPIC'. 5058 5059 'freorder' 5060 Target supports '-freorder-blocks-and-partition'. 5061 5062 'fstack_protector' 5063 Target supports '-fstack-protector'. 5064 5065 'gas' 5066 Target uses GNU 'as'. 5067 5068 'gc_sections' 5069 Target supports '--gc-sections'. 5070 5071 'gld' 5072 Target uses GNU 'ld'. 5073 5074 'keeps_null_pointer_checks' 5075 Target keeps null pointer checks, either due to the use of 5076 '-fno-delete-null-pointer-checks' or hardwired into the target. 5077 5078 'lto' 5079 Compiler has been configured to support link-time optimization 5080 (LTO). 5081 5082 'naked_functions' 5083 Target supports the 'naked' function attribute. 5084 5085 'named_sections' 5086 Target supports named sections. 5087 5088 'natural_alignment_32' 5089 Target uses natural alignment (aligned to type size) for types of 5090 32 bits or less. 5091 5092 'target_natural_alignment_64' 5093 Target uses natural alignment (aligned to type size) for types of 5094 64 bits or less. 5095 5096 'nonpic' 5097 Target does not generate PIC by default. 5098 5099 'pcc_bitfield_type_matters' 5100 Target defines 'PCC_BITFIELD_TYPE_MATTERS'. 5101 5102 'pe_aligned_commons' 5103 Target supports '-mpe-aligned-commons'. 5104 5105 'pie' 5106 Target supports '-pie', '-fpie' and '-fPIE'. 5107 5108 'section_anchors' 5109 Target supports section anchors. 5110 5111 'short_enums' 5112 Target defaults to short enums. 5113 5114 'static' 5115 Target supports '-static'. 5116 5117 'static_libgfortran' 5118 Target supports statically linking 'libgfortran'. 5119 5120 'string_merging' 5121 Target supports merging string constants at link time. 5122 5123 'ucn' 5124 Target supports compiling and assembling UCN. 5125 5126 'ucn_nocache' 5127 Including the options used to compile this particular test, the 5128 target supports compiling and assembling UCN. 5129 5130 'unaligned_stack' 5131 Target does not guarantee that its 'STACK_BOUNDARY' is greater than 5132 or equal to the required vector alignment. 5133 5134 'vector_alignment_reachable' 5135 Vector alignment is reachable for types of 32 bits or less. 5136 5137 'vector_alignment_reachable_for_64bit' 5138 Vector alignment is reachable for types of 64 bits or less. 5139 5140 'wchar_t_char16_t_compatible' 5141 Target supports 'wchar_t' that is compatible with 'char16_t'. 5142 5143 'wchar_t_char32_t_compatible' 5144 Target supports 'wchar_t' that is compatible with 'char32_t'. 5145 5146 7.2.3.12 Local to tests in 'gcc.target/i386' 5147 ............................................ 5148 5149 '3dnow' 5150 Target supports compiling '3dnow' instructions. 5151 5152 'aes' 5153 Target supports compiling 'aes' instructions. 5154 5155 'fma4' 5156 Target supports compiling 'fma4' instructions. 5157 5158 'ms_hook_prologue' 5159 Target supports attribute 'ms_hook_prologue'. 5160 5161 'pclmul' 5162 Target supports compiling 'pclmul' instructions. 5163 5164 'sse3' 5165 Target supports compiling 'sse3' instructions. 5166 5167 'sse4' 5168 Target supports compiling 'sse4' instructions. 5169 5170 'sse4a' 5171 Target supports compiling 'sse4a' instructions. 5172 5173 'ssse3' 5174 Target supports compiling 'ssse3' instructions. 5175 5176 'vaes' 5177 Target supports compiling 'vaes' instructions. 5178 5179 'vpclmul' 5180 Target supports compiling 'vpclmul' instructions. 5181 5182 'xop' 5183 Target supports compiling 'xop' instructions. 5184 5185 7.2.3.13 Local to tests in 'gcc.target/spu/ea' 5186 .............................................. 5187 5188 'ealib' 5189 Target '__ea' library functions are available. 5190 5191 7.2.3.14 Local to tests in 'gcc.test-framework' 5192 ............................................... 5193 5194 'no' 5195 Always returns 0. 5196 5197 'yes' 5198 Always returns 1. 5199 5200 5201 File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5202 5203 7.2.4 Features for 'dg-add-options' 5204 ----------------------------------- 5205 5206 The supported values of FEATURE for directive 'dg-add-options' are: 5207 5208 'arm_neon' 5209 NEON support. Only ARM targets support this feature, and only then 5210 in certain modes; see the *note arm_neon_ok effective target 5211 keyword: arm_neon_ok. 5212 5213 'arm_neon_fp16' 5214 NEON and half-precision floating point support. Only ARM targets 5215 support this feature, and only then in certain modes; see the *note 5216 arm_neon_fp16_ok effective target keyword: arm_neon_ok. 5217 5218 'bind_pic_locally' 5219 Add the target-specific flags needed to enable functions to bind 5220 locally when using pic/PIC passes in the testsuite. 5221 5222 'c99_runtime' 5223 Add the target-specific flags needed to access the C99 runtime. 5224 5225 'ieee' 5226 Add the target-specific flags needed to enable full IEEE compliance 5227 mode. 5228 5229 'mips16_attribute' 5230 'mips16' function attributes. Only MIPS targets support this 5231 feature, and only then in certain modes. 5232 5233 'tls' 5234 Add the target-specific flags needed to use thread-local storage. 5235 5236 5237 File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5238 5239 7.2.5 Variants of 'dg-require-SUPPORT' 5240 -------------------------------------- 5241 5242 A few of the 'dg-require' directives take arguments. 5243 5244 'dg-require-iconv CODESET' 5245 Skip the test if the target does not support iconv. CODESET is the 5246 codeset to convert to. 5247 5248 'dg-require-profiling PROFOPT' 5249 Skip the test if the target does not support profiling with option 5250 PROFOPT. 5251 5252 'dg-require-visibility VIS' 5253 Skip the test if the target does not support the 'visibility' 5254 attribute. If VIS is '""', support for 'visibility("hidden")' is 5255 checked, for 'visibility("VIS")' otherwise. 5256 5257 The original 'dg-require' directives were defined before there was 5258 support for effective-target keywords. The directives that do not take 5259 arguments could be replaced with effective-target keywords. 5260 5261 'dg-require-alias ""' 5262 Skip the test if the target does not support the 'alias' attribute. 5263 5264 'dg-require-ascii-locale ""' 5265 Skip the test if the host does not support an ASCII locale. 5266 5267 'dg-require-compat-dfp ""' 5268 Skip this test unless both compilers in a 'compat' testsuite 5269 support decimal floating point. 5270 5271 'dg-require-cxa-atexit ""' 5272 Skip the test if the target does not support '__cxa_atexit'. This 5273 is equivalent to 'dg-require-effective-target cxa_atexit'. 5274 5275 'dg-require-dll ""' 5276 Skip the test if the target does not support DLL attributes. 5277 5278 'dg-require-fork ""' 5279 Skip the test if the target does not support 'fork'. 5280 5281 'dg-require-gc-sections ""' 5282 Skip the test if the target's linker does not support the 5283 '--gc-sections' flags. This is equivalent to 5284 'dg-require-effective-target gc-sections'. 5285 5286 'dg-require-host-local ""' 5287 Skip the test if the host is remote, rather than the same as the 5288 build system. Some tests are incompatible with DejaGnu's handling 5289 of remote hosts, which involves copying the source file to the host 5290 and compiling it with a relative path and "'-o a.out'". 5291 5292 'dg-require-mkfifo ""' 5293 Skip the test if the target does not support 'mkfifo'. 5294 5295 'dg-require-named-sections ""' 5296 Skip the test is the target does not support named sections. This 5297 is equivalent to 'dg-require-effective-target named_sections'. 5298 5299 'dg-require-weak ""' 5300 Skip the test if the target does not support weak symbols. 5301 5302 'dg-require-weak-override ""' 5303 Skip the test if the target does not support overriding weak 5304 symbols. 5305 5306 5307 File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5308 5309 7.2.6 Commands for use in 'dg-final' 5310 ------------------------------------ 5311 5312 The GCC testsuite defines the following directives to be used within 5313 'dg-final'. 5314 5315 7.2.6.1 Scan a particular file 5316 .............................. 5317 5318 'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 5319 Passes if REGEXP matches text in FILENAME. 5320 'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 5321 Passes if REGEXP does not match text in FILENAME. 5322 'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 5323 Passes if REGEXP matches in Fortran module MODULE. 5324 5325 7.2.6.2 Scan the assembly output 5326 ................................ 5327 5328 'scan-assembler REGEX [{ target/xfail SELECTOR }]' 5329 Passes if REGEX matches text in the test's assembler output. 5330 5331 'scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 5332 Passes if REGEX does not match text in the test's assembler output. 5333 5334 'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 5335 Passes if REGEX is matched exactly NUM times in the test's 5336 assembler output. 5337 5338 'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 5339 Passes if REGEX matches text in the test's demangled assembler 5340 output. 5341 5342 'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 5343 Passes if REGEX does not match text in the test's demangled 5344 assembler output. 5345 5346 'scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 5347 Passes if SYMBOL is defined as a hidden symbol in the test's 5348 assembly output. 5349 5350 'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 5351 Passes if SYMBOL is not defined as a hidden symbol in the test's 5352 assembly output. 5353 5354 7.2.6.3 Scan optimization dump files 5355 .................................... 5356 5357 These commands are available for KIND of 'tree', 'rtl', and 'ipa'. 5358 5359 'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 5360 Passes if REGEX matches text in the dump file with suffix SUFFIX. 5361 5362 'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5363 Passes if REGEX does not match text in the dump file with suffix 5364 SUFFIX. 5365 5366 'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 5367 Passes if REGEX is found exactly NUM times in the dump file with 5368 suffix SUFFIX. 5369 5370 'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 5371 Passes if REGEX matches demangled text in the dump file with suffix 5372 SUFFIX. 5373 5374 'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5375 Passes if REGEX does not match demangled text in the dump file with 5376 suffix SUFFIX. 5377 5378 7.2.6.4 Verify that an output files exists or not 5379 ................................................. 5380 5381 'output-exists [{ target/xfail SELECTOR }]' 5382 Passes if compiler output file exists. 5383 5384 'output-exists-not [{ target/xfail SELECTOR }]' 5385 Passes if compiler output file does not exist. 5386 5387 7.2.6.5 Check for LTO tests 5388 ........................... 5389 5390 'scan-symbol REGEXP [{ target/xfail SELECTOR }]' 5391 Passes if the pattern is present in the final executable. 5392 5393 7.2.6.6 Checks for 'gcov' tests 5394 ............................... 5395 5396 'run-gcov SOURCEFILE' 5397 Check line counts in 'gcov' tests. 5398 5399 'run-gcov [branches] [calls] { OPTS SOURCEFILE }' 5400 Check branch and/or call counts, in addition to line counts, in 5401 'gcov' tests. 5402 5403 7.2.6.7 Clean up generated test files 5404 ..................................... 5405 5406 'cleanup-coverage-files' 5407 Removes coverage data files generated for this test. 5408 5409 'cleanup-ipa-dump SUFFIX' 5410 Removes IPA dump files generated for this test. 5411 5412 'cleanup-modules "LIST-OF-EXTRA-MODULES"' 5413 Removes Fortran module files generated for this test, excluding the 5414 module names listed in keep-modules. Cleaning up module files is 5415 usually done automatically by the testsuite by looking at the 5416 source files and removing the modules after the test has been 5417 executed. 5418 module MoD1 5419 end module MoD1 5420 module Mod2 5421 end module Mod2 5422 module moD3 5423 end module moD3 5424 module mod4 5425 end module mod4 5426 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant 5427 ! { dg-final { keep-modules "mod3 mod4" } } 5428 5429 'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"' 5430 Whitespace separated list of module names that should not be 5431 deleted by cleanup-modules. If the list of modules is empty, all 5432 modules defined in this file are kept. 5433 module maybe_unneeded 5434 end module maybe_unneeded 5435 module keep1 5436 end module keep1 5437 module keep2 5438 end module keep2 5439 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two 5440 ! { dg-final { keep-modules "" } } ! keep all 5441 5442 'cleanup-profile-file' 5443 Removes profiling files generated for this test. 5444 5445 'cleanup-repo-files' 5446 Removes files generated for this test for '-frepo'. 5447 5448 'cleanup-rtl-dump SUFFIX' 5449 Removes RTL dump files generated for this test. 5450 5451 'cleanup-saved-temps' 5452 Removes files for the current test which were kept for 5453 '-save-temps'. 5454 5455 'cleanup-tree-dump SUFFIX' 5456 Removes tree dump files matching SUFFIX which were generated for 5457 this test. 5458 5459 5460 File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 5461 5462 7.3 Ada Language Testsuites 5463 =========================== 5464 5465 The Ada testsuite includes executable tests from the ACATS testsuite, 5466 publicly available at <http://www.ada-auth.org/acats.html>. 5467 5468 These tests are integrated in the GCC testsuite in the 'ada/acats' 5469 directory, and enabled automatically when running 'make check', assuming 5470 the Ada language has been enabled when configuring GCC. 5471 5472 You can also run the Ada testsuite independently, using 'make 5473 check-ada', or run a subset of the tests by specifying which chapter to 5474 run, e.g.: 5475 5476 $ make check-ada CHAPTERS="c3 c9" 5477 5478 The tests are organized by directory, each directory corresponding to a 5479 chapter of the Ada Reference Manual. So for example, 'c9' corresponds 5480 to chapter 9, which deals with tasking features of the language. 5481 5482 There is also an extra chapter called 'gcc' containing a template for 5483 creating new executable tests, although this is deprecated in favor of 5484 the 'gnat.dg' testsuite. 5485 5486 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'. 5487 To run the tests using a simulator or a cross target, see the small 5488 customization section at the top of 'run_all.sh'. 5489 5490 These tests are run using the build tree: they can be run without doing 5491 a 'make install'. 5492 5493 5494 File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 5495 5496 7.4 C Language Testsuites 5497 ========================= 5498 5499 GCC contains the following C language testsuites, in the 'gcc/testsuite' 5500 directory: 5501 5502 'gcc.dg' 5503 This contains tests of particular features of the C compiler, using 5504 the more modern 'dg' harness. Correctness tests for various 5505 compiler features should go here if possible. 5506 5507 Magic comments determine whether the file is preprocessed, 5508 compiled, linked or run. In these tests, error and warning message 5509 texts are compared against expected texts or regular expressions 5510 given in comments. These tests are run with the options '-ansi 5511 -pedantic' unless other options are given in the test. Except as 5512 noted below they are not run with multiple optimization options. 5513 'gcc.dg/compat' 5514 This subdirectory contains tests for binary compatibility using 5515 'lib/compat.exp', which in turn uses the language-independent 5516 support (*note Support for testing binary compatibility: compat 5517 Testing.). 5518 'gcc.dg/cpp' 5519 This subdirectory contains tests of the preprocessor. 5520 'gcc.dg/debug' 5521 This subdirectory contains tests for debug formats. Tests in this 5522 subdirectory are run for each debug format that the compiler 5523 supports. 5524 'gcc.dg/format' 5525 This subdirectory contains tests of the '-Wformat' format checking. 5526 Tests in this directory are run with and without '-DWIDE'. 5527 'gcc.dg/noncompile' 5528 This subdirectory contains tests of code that should not compile 5529 and does not need any special compilation options. They are run 5530 with multiple optimization options, since sometimes invalid code 5531 crashes the compiler with optimization. 5532 'gcc.dg/special' 5533 FIXME: describe this. 5534 5535 'gcc.c-torture' 5536 This contains particular code fragments which have historically 5537 broken easily. These tests are run with multiple optimization 5538 options, so tests for features which only break at some 5539 optimization levels belong here. This also contains tests to check 5540 that certain optimizations occur. It might be worthwhile to 5541 separate the correctness tests cleanly from the code quality tests, 5542 but it hasn't been done yet. 5543 5544 'gcc.c-torture/compat' 5545 FIXME: describe this. 5546 5547 This directory should probably not be used for new tests. 5548 'gcc.c-torture/compile' 5549 This testsuite contains test cases that should compile, but do not 5550 need to link or run. These test cases are compiled with several 5551 different combinations of optimization options. All warnings are 5552 disabled for these test cases, so this directory is not suitable if 5553 you wish to test for the presence or absence of compiler warnings. 5554 While special options can be set, and tests disabled on specific 5555 platforms, by the use of '.x' files, mostly these test cases should 5556 not contain platform dependencies. FIXME: discuss how defines such 5557 as 'NO_LABEL_VALUES' and 'STACK_SIZE' are used. 5558 'gcc.c-torture/execute' 5559 This testsuite contains test cases that should compile, link and 5560 run; otherwise the same comments as for 'gcc.c-torture/compile' 5561 apply. 5562 'gcc.c-torture/execute/ieee' 5563 This contains tests which are specific to IEEE floating point. 5564 'gcc.c-torture/unsorted' 5565 FIXME: describe this. 5566 5567 This directory should probably not be used for new tests. 5568 'gcc.misc-tests' 5569 This directory contains C tests that require special handling. 5570 Some of these tests have individual expect files, and others share 5571 special-purpose expect files: 5572 5573 'bprob*.c' 5574 Test '-fbranch-probabilities' using 5575 'gcc.misc-tests/bprob.exp', which in turn uses the generic, 5576 language-independent framework (*note Support for testing 5577 profile-directed optimizations: profopt Testing.). 5578 5579 'gcov*.c' 5580 Test 'gcov' output using 'gcov.exp', which in turn uses the 5581 language-independent support (*note Support for testing gcov: 5582 gcov Testing.). 5583 5584 'i386-pf-*.c' 5585 Test i386-specific support for data prefetch using 5586 'i386-prefetch.exp'. 5587 5588 'gcc.test-framework' 5589 'dg-*.c' 5590 Test the testsuite itself using 5591 'gcc.test-framework/test-framework.exp'. 5592 5593 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test 5594 cases and magic comments more. 5595 5596 5597 File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites 5598 5599 7.5 The Java library testsuites. 5600 ================================ 5601 5602 Runtime tests are executed via 'make check' in the 5603 'TARGET/libjava/testsuite' directory in the build tree. Additional 5604 runtime tests can be checked into this testsuite. 5605 5606 Regression testing of the core packages in libgcj is also covered by 5607 the Mauve testsuite. The Mauve Project develops tests for the Java 5608 Class Libraries. These tests are run as part of libgcj testing by 5609 placing the Mauve tree within the libjava testsuite sources at 5610 'libjava/testsuite/libjava.mauve/mauve', or by specifying the location 5611 of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'. 5612 5613 To detect regressions, a mechanism in 'mauve.exp' compares the failures 5614 for a test run against the list of expected failures in 5615 'libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 5616 Update this file when adding new failing tests to Mauve, or when fixing 5617 bugs in libgcj that had caused Mauve test failures. 5618 5619 We encourage developers to contribute test cases to Mauve. 5620 5621 5622 File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites 5623 5624 7.6 Support for testing link-time optimizations 5625 =============================================== 5626 5627 Tests for link-time optimizations usually require multiple source files 5628 that are compiled separately, perhaps with different sets of options. 5629 There are several special-purpose test directives used for these tests. 5630 5631 '{ dg-lto-do DO-WHAT-KEYWORD }' 5632 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 5633 is executed. It is one of: 5634 5635 'assemble' 5636 Compile with '-c' to produce a relocatable object file. 5637 'link' 5638 Compile, assemble, and link to produce an executable file. 5639 'run' 5640 Produce and run an executable file, which is expected to 5641 return an exit code of 0. 5642 5643 The default is 'assemble'. That can be overridden for a set of 5644 tests by redefining 'dg-do-what-default' within the '.exp' file for 5645 those tests. 5646 5647 Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target' 5648 or 'xfail' list. Use 'dg-skip-if', 'dg-xfail-if', or 5649 'dg-xfail-run-if'. 5650 5651 '{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 5652 This directive provides a list of one or more sets of compiler 5653 options to override LTO_OPTIONS. Each test will be compiled and 5654 run with each of these sets of options. 5655 5656 '{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}' 5657 This directive adds OPTIONS to the linker options used. 5658 5659 '{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}' 5660 This directive removes OPTIONS from the set of linker options used. 5661 5662 5663 File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 5664 5665 7.7 Support for testing 'gcov' 5666 ============================== 5667 5668 Language-independent support for testing 'gcov', and for checking that 5669 branch profiling produces expected values, is provided by the expect 5670 file 'lib/gcov.exp'. 'gcov' tests also rely on procedures in 5671 'lib/gcc-dg.exp' to compile and run the test program. A typical 'gcov' 5672 test contains the following DejaGnu commands within comments: 5673 5674 { dg-options "-fprofile-arcs -ftest-coverage" } 5675 { dg-do run { target native } } 5676 { dg-final { run-gcov sourcefile } } 5677 5678 Checks of 'gcov' output can include line counts, branch percentages, 5679 and call return percentages. All of these checks are requested via 5680 commands that appear in comments in the test's source file. Commands to 5681 check line counts are processed by default. Commands to check branch 5682 percentages and call return percentages are processed if the 'run-gcov' 5683 command has arguments 'branches' or 'calls', respectively. For example, 5684 the following specifies checking both, as well as passing '-b' to 5685 'gcov': 5686 5687 { dg-final { run-gcov branches calls { -b sourcefile } } } 5688 5689 A line count command appears within a comment on the source line that 5690 is expected to get the specified count and has the form 'count(CNT)'. A 5691 test should only check line counts for lines that will get the same 5692 count for any architecture. 5693 5694 Commands to check branch percentages ('branch') and call return 5695 percentages ('returns') are very similar to each other. A beginning 5696 command appears on or before the first of a range of lines that will 5697 report the percentage, and the ending command follows that range of 5698 lines. The beginning command can include a list of percentages, all of 5699 which are expected to be found within the range. A range is terminated 5700 by the next command of the same kind. A command 'branch(end)' or 5701 'returns(end)' marks the end of a range without starting a new one. For 5702 example: 5703 5704 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 5705 /* branch(end) */ 5706 foo (i, j); 5707 5708 For a call return percentage, the value specified is the percentage of 5709 calls reported to return. For a branch percentage, the value is either 5710 the expected percentage or 100 minus that value, since the direction of 5711 a branch can differ depending on the target or the optimization level. 5712 5713 Not all branches and calls need to be checked. A test should not check 5714 for branches that might be optimized away or replaced with predicated 5715 instructions. Don't check for calls inserted by the compiler or ones 5716 that might be inlined or optimized away. 5717 5718 A single test can check for combinations of line counts, branch 5719 percentages, and call return percentages. The command to check a line 5720 count must appear on the line that will report that count, but commands 5721 to check branch percentages and call return percentages can bracket the 5722 lines that report them. 5723 5724 5725 File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 5726 5727 7.8 Support for testing profile-directed optimizations 5728 ====================================================== 5729 5730 The file 'profopt.exp' provides language-independent support for 5731 checking correct execution of a test built with profile-directed 5732 optimization. This testing requires that a test program be built and 5733 executed twice. The first time it is compiled to generate profile data, 5734 and the second time it is compiled to use the data that was generated 5735 during the first execution. The second execution is to verify that the 5736 test produces the expected results. 5737 5738 To check that the optimization actually generated better code, a test 5739 can be built and run a third time with normal optimizations to verify 5740 that the performance is better with the profile-directed optimizations. 5741 'profopt.exp' has the beginnings of this kind of support. 5742 5743 'profopt.exp' provides generic support for profile-directed 5744 optimizations. Each set of tests that uses it provides information 5745 about a specific optimization: 5746 5747 'tool' 5748 tool being tested, e.g., 'gcc' 5749 5750 'profile_option' 5751 options used to generate profile data 5752 5753 'feedback_option' 5754 options used to optimize using that profile data 5755 5756 'prof_ext' 5757 suffix of profile data files 5758 5759 'PROFOPT_OPTIONS' 5760 list of options with which to run each test, similar to the lists 5761 for torture tests 5762 5763 '{ dg-final-generate { LOCAL-DIRECTIVE } }' 5764 This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is 5765 run after the generation of profile data. 5766 5767 '{ dg-final-use { LOCAL-DIRECTIVE } }' 5768 The LOCAL-DIRECTIVE is run after the profile data have been used. 5769 5770 5771 File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 5772 5773 7.9 Support for testing binary compatibility 5774 ============================================ 5775 5776 The file 'compat.exp' provides language-independent support for binary 5777 compatibility testing. It supports testing interoperability of two 5778 compilers that follow the same ABI, or of multiple sets of compiler 5779 options that should not affect binary compatibility. It is intended to 5780 be used for testsuites that complement ABI testsuites. 5781 5782 A test supported by this framework has three parts, each in a separate 5783 source file: a main program and two pieces that interact with each other 5784 to split up the functionality being tested. 5785 5786 'TESTNAME_main.SUFFIX' 5787 Contains the main program, which calls a function in file 5788 'TESTNAME_x.SUFFIX'. 5789 5790 'TESTNAME_x.SUFFIX' 5791 Contains at least one call to a function in 'TESTNAME_y.SUFFIX'. 5792 5793 'TESTNAME_y.SUFFIX' 5794 Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'. 5795 5796 Within each test, the main program and one functional piece are 5797 compiled by the GCC under test. The other piece can be compiled by an 5798 alternate compiler. If no alternate compiler is specified, then all 5799 three source files are all compiled by the GCC under test. You can 5800 specify pairs of sets of compiler options. The first element of such a 5801 pair specifies options used with the GCC under test, and the second 5802 element of the pair specifies options used with the alternate compiler. 5803 Each test is compiled with each pair of options. 5804 5805 'compat.exp' defines default pairs of compiler options. These can be 5806 overridden by defining the environment variable 'COMPAT_OPTIONS' as: 5807 5808 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 5809 ...[list {TSTN} {ALTN}]]" 5810 5811 where TSTI and ALTI are lists of options, with TSTI used by the 5812 compiler under test and ALTI used by the alternate compiler. For 5813 example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 5814 the test is first built with '-g -O0' by the compiler under test and 5815 with '-O3' by the alternate compiler. The test is built a second time 5816 using '-fpic' by the compiler under test and '-fPIC -O2' by the 5817 alternate compiler. 5818 5819 An alternate compiler is specified by defining an environment variable 5820 to be the full pathname of an installed compiler; for C define 5821 'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'. These 5822 will be written to the 'site.exp' file used by DejaGnu. The default is 5823 to build each test with the compiler under test using the first of each 5824 pair of compiler options from 'COMPAT_OPTIONS'. When 5825 'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is 5826 built using the compiler under test but with combinations of the options 5827 from 'COMPAT_OPTIONS'. 5828 5829 To run only the C++ compatibility suite using the compiler under test 5830 and another version of GCC using specific compiler options, do the 5831 following from 'OBJDIR/gcc': 5832 5833 rm site.exp 5834 make -k \ 5835 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 5836 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 5837 check-c++ \ 5838 RUNTESTFLAGS="compat.exp" 5839 5840 A test that fails when the source files are compiled with different 5841 compilers, but passes when the files are compiled with the same 5842 compiler, demonstrates incompatibility of the generated code or runtime 5843 support. A test that fails for the alternate compiler but passes for 5844 the compiler under test probably tests for a bug that was fixed in the 5845 compiler under test but is present in the alternate compiler. 5846 5847 The binary compatibility tests support a small number of test framework 5848 commands that appear within comments in a test file. 5849 5850 'dg-require-*' 5851 These commands can be used in 'TESTNAME_main.SUFFIX' to skip the 5852 test if specific support is not available on the target. 5853 5854 'dg-options' 5855 The specified options are used for compiling this particular source 5856 file, appended to the options from 'COMPAT_OPTIONS'. When this 5857 command appears in 'TESTNAME_main.SUFFIX' the options are also used 5858 to link the test program. 5859 5860 'dg-xfail-if' 5861 This command can be used in a secondary source file to specify that 5862 compilation is expected to fail for particular options on 5863 particular targets. 5864 5865 5866 File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites 5867 5868 7.10 Support for torture testing using multiple options 5869 ======================================================= 5870 5871 Throughout the compiler testsuite there are several directories whose 5872 tests are run multiple times, each with a different set of options. 5873 These are known as torture tests. 'lib/torture-options.exp' defines 5874 procedures to set up these lists: 5875 5876 'torture-init' 5877 Initialize use of torture lists. 5878 'set-torture-options' 5879 Set lists of torture options to use for tests with and without 5880 loops. Optionally combine a set of torture options with a set of 5881 other options, as is done with Objective-C runtime options. 5882 'torture-finish' 5883 Finalize use of torture lists. 5884 5885 The '.exp' file for a set of tests that use torture options must 5886 include calls to these three procedures if: 5887 5888 * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 5889 5890 * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL 5891 is 'c', 'fortran', or 'objc'. 5892 5893 * It calls 'dg-pch'. 5894 5895 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to 5896 call the torture procedures if the tests should use the list in 5897 DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'. 5898 5899 Most uses of torture options can override the default lists by defining 5900 TORTURE_OPTIONS or add to the default list by defining 5901 ADDITIONAL_TORTURE_OPTIONS. Define these in a '.dejagnurc' file or add 5902 them to the 'site.exp' file; for example 5903 5904 set ADDITIONAL_TORTURE_OPTIONS [list \ 5905 { -O2 -ftree-loop-linear } \ 5906 { -O2 -fpeel-loops } ] 5907 5908 5909 File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 5910 5911 8 Option specification files 5912 **************************** 5913 5914 Most GCC command-line options are described by special option definition 5915 files, the names of which conventionally end in '.opt'. This chapter 5916 describes the format of these files. 5917 5918 * Menu: 5919 5920 * Option file format:: The general layout of the files 5921 * Option properties:: Supported option properties 5922 5923 5924 File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 5925 5926 8.1 Option file format 5927 ====================== 5928 5929 Option files are a simple list of records in which each field occupies 5930 its own line and in which the records themselves are separated by blank 5931 lines. Comments may appear on their own line anywhere within the file 5932 and are preceded by semicolons. Whitespace is allowed before the 5933 semicolon. 5934 5935 The files can contain the following types of record: 5936 5937 * A language definition record. These records have two fields: the 5938 string 'Language' and the name of the language. Once a language 5939 has been declared in this way, it can be used as an option 5940 property. *Note Option properties::. 5941 5942 * A target specific save record to save additional information. 5943 These records have two fields: the string 'TargetSave', and a 5944 declaration type to go in the 'cl_target_option' structure. 5945 5946 * A variable record to define a variable used to store option 5947 information. These records have two fields: the string 'Variable', 5948 and a declaration of the type and name of the variable, optionally 5949 with an initializer (but without any trailing ';'). These records 5950 may be used for variables used for many options where declaring the 5951 initializer in a single option definition record, or duplicating it 5952 in many records, would be inappropriate, or for variables set in 5953 option handlers rather than referenced by 'Var' properties. 5954 5955 * A variable record to define a variable used to store option 5956 information. These records have two fields: the string 5957 'TargetVariable', and a declaration of the type and name of the 5958 variable, optionally with an initializer (but without any trailing 5959 ';'). 'TargetVariable' is a combination of 'Variable' and 5960 'TargetSave' records in that the variable is defined in the 5961 'gcc_options' structure, but these variables are also stored in the 5962 'cl_target_option' structure. The variables are saved in the 5963 target save code and restored in the target restore code. 5964 5965 * A variable record to record any additional files that the 5966 'options.h' file should include. This is useful to provide 5967 enumeration or structure definitions needed for target variables. 5968 These records have two fields: the string 'HeaderInclude' and the 5969 name of the include file. 5970 5971 * A variable record to record any additional files that the 5972 'options.c' or 'options-save.c' file should include. This is 5973 useful to provide inline functions needed for target variables 5974 and/or '#ifdef' sequences to properly set up the initialization. 5975 These records have two fields: the string 'SourceInclude' and the 5976 name of the include file. 5977 5978 * An enumeration record to define a set of strings that may be used 5979 as arguments to an option or options. These records have three 5980 fields: the string 'Enum', a space-separated list of properties and 5981 help text used to describe the set of strings in '--help' output. 5982 Properties use the same format as option properties; the following 5983 are valid: 5984 'Name(NAME)' 5985 This property is required; NAME must be a name (suitable for 5986 use in C identifiers) used to identify the set of strings in 5987 'Enum' option properties. 5988 5989 'Type(TYPE)' 5990 This property is required; TYPE is the C type for variables 5991 set by options using this enumeration together with 'Var'. 5992 5993 'UnknownError(MESSAGE)' 5994 The message MESSAGE will be used as an error message if the 5995 argument is invalid; for enumerations without 'UnknownError', 5996 a generic error message is used. MESSAGE should contain a 5997 single '%qs' format, which will be used to format the invalid 5998 argument. 5999 6000 * An enumeration value record to define one of the strings in a set 6001 given in an 'Enum' record. These records have two fields: the 6002 string 'EnumValue' and a space-separated list of properties. 6003 Properties use the same format as option properties; the following 6004 are valid: 6005 'Enum(NAME)' 6006 This property is required; NAME says which 'Enum' record this 6007 'EnumValue' record corresponds to. 6008 6009 'String(STRING)' 6010 This property is required; STRING is the string option 6011 argument being described by this record. 6012 6013 'Value(VALUE)' 6014 This property is required; it says what value (representable 6015 as 'int') should be used for the given string. 6016 6017 'Canonical' 6018 This property is optional. If present, it says the present 6019 string is the canonical one among all those with the given 6020 value. Other strings yielding that value will be mapped to 6021 this one so specs do not need to handle them. 6022 6023 'DriverOnly' 6024 This property is optional. If present, the present string 6025 will only be accepted by the driver. This is used for cases 6026 such as '-march=native' that are processed by the driver so 6027 that 'gcc -v' shows how the options chosen depended on the 6028 system on which the compiler was run. 6029 6030 * An option definition record. These records have the following 6031 fields: 6032 1. the name of the option, with the leading "-" removed 6033 2. a space-separated list of option properties (*note Option 6034 properties::) 6035 3. the help text to use for '--help' (omitted if the second field 6036 contains the 'Undocumented' property). 6037 6038 By default, all options beginning with "f", "W" or "m" are 6039 implicitly assumed to take a "no-" form. This form should not be 6040 listed separately. If an option beginning with one of these 6041 letters does not have a "no-" form, you can use the 6042 'RejectNegative' property to reject it. 6043 6044 The help text is automatically line-wrapped before being displayed. 6045 Normally the name of the option is printed on the left-hand side of 6046 the output and the help text is printed on the right. However, if 6047 the help text contains a tab character, the text to the left of the 6048 tab is used instead of the option's name and the text to the right 6049 of the tab forms the help text. This allows you to elaborate on 6050 what type of argument the option takes. 6051 6052 * A target mask record. These records have one field of the form 6053 'Mask(X)'. The options-processing script will automatically 6054 allocate a bit in 'target_flags' (*note Run-time Target::) for each 6055 mask name X and set the macro 'MASK_X' to the appropriate bitmask. 6056 It will also declare a 'TARGET_X' macro that has the value 1 when 6057 bit 'MASK_X' is set and 0 otherwise. 6058 6059 They are primarily intended to declare target masks that are not 6060 associated with user options, either because these masks represent 6061 internal switches or because the options are not available on all 6062 configurations and yet the masks always need to be defined. 6063 6064 6065 File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 6066 6067 8.2 Option properties 6068 ===================== 6069 6070 The second field of an option record can specify any of the following 6071 properties. When an option takes an argument, it is enclosed in 6072 parentheses following the option property name. The parser that handles 6073 option files is quite simplistic, and will be tricked by any nested 6074 parentheses within the argument text itself; in this case, the entire 6075 option argument can be wrapped in curly braces within the parentheses to 6076 demarcate it, e.g.: 6077 6078 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 6079 6080 'Common' 6081 The option is available for all languages and targets. 6082 6083 'Target' 6084 The option is available for all languages but is target-specific. 6085 6086 'Driver' 6087 The option is handled by the compiler driver using code not shared 6088 with the compilers proper ('cc1' etc.). 6089 6090 'LANGUAGE' 6091 The option is available when compiling for the given language. 6092 6093 It is possible to specify several different languages for the same 6094 option. Each LANGUAGE must have been declared by an earlier 6095 'Language' record. *Note Option file format::. 6096 6097 'RejectDriver' 6098 The option is only handled by the compilers proper ('cc1' etc.) and 6099 should not be accepted by the driver. 6100 6101 'RejectNegative' 6102 The option does not have a "no-" form. All options beginning with 6103 "f", "W" or "m" are assumed to have a "no-" form unless this 6104 property is used. 6105 6106 'Negative(OTHERNAME)' 6107 The option will turn off another option OTHERNAME, which is the 6108 option name with the leading "-" removed. This chain action will 6109 propagate through the 'Negative' property of the option to be 6110 turned off. 6111 6112 As a consequence, if you have a group of mutually-exclusive 6113 options, their 'Negative' properties should form a circular chain. 6114 For example, if options '-A', '-B' and '-C' are mutually exclusive, 6115 their respective 'Negative' properties should be 'Negative(B)', 6116 'Negative(C)' and 'Negative(A)'. 6117 6118 'Joined' 6119 'Separate' 6120 The option takes a mandatory argument. 'Joined' indicates that the 6121 option and argument can be included in the same 'argv' entry (as 6122 with '-mflush-func=NAME', for example). 'Separate' indicates that 6123 the option and argument can be separate 'argv' entries (as with 6124 '-o'). An option is allowed to have both of these properties. 6125 6126 'JoinedOrMissing' 6127 The option takes an optional argument. If the argument is given, 6128 it will be part of the same 'argv' entry as the option itself. 6129 6130 This property cannot be used alongside 'Joined' or 'Separate'. 6131 6132 'MissingArgError(MESSAGE)' 6133 For an option marked 'Joined' or 'Separate', the message MESSAGE 6134 will be used as an error message if the mandatory argument is 6135 missing; for options without 'MissingArgError', a generic error 6136 message is used. MESSAGE should contain a single '%qs' format, 6137 which will be used to format the name of the option passed. 6138 6139 'Args(N)' 6140 For an option marked 'Separate', indicate that it takes N 6141 arguments. The default is 1. 6142 6143 'UInteger' 6144 The option's argument is a non-negative integer. The option parser 6145 will check and convert the argument before passing it to the 6146 relevant option handler. 'UInteger' should also be used on options 6147 like '-falign-loops' where both '-falign-loops' and 6148 '-falign-loops'=N are supported to make sure the saved options are 6149 given a full integer. 6150 6151 'ToLower' 6152 The option's argument should be converted to lowercase as part of 6153 putting it in canonical form, and before comparing with the strings 6154 indicated by any 'Enum' property. 6155 6156 'NoDriverArg' 6157 For an option marked 'Separate', the option only takes an argument 6158 in the compiler proper, not in the driver. This is for 6159 compatibility with existing options that are used both directly and 6160 via '-Wp,'; new options should not have this property. 6161 6162 'Var(VAR)' 6163 The state of this option should be stored in variable VAR (actually 6164 a macro for 'global_options.x_VAR'). The way that the state is 6165 stored depends on the type of option: 6166 6167 * If the option uses the 'Mask' or 'InverseMask' properties, VAR 6168 is the integer variable that contains the mask. 6169 6170 * If the option is a normal on/off switch, VAR is an integer 6171 variable that is nonzero when the option is enabled. The 6172 options parser will set the variable to 1 when the positive 6173 form of the option is used and 0 when the "no-" form is used. 6174 6175 * If the option takes an argument and has the 'UInteger' 6176 property, VAR is an integer variable that stores the value of 6177 the argument. 6178 6179 * If the option takes an argument and has the 'Enum' property, 6180 VAR is a variable (type given in the 'Type' property of the 6181 'Enum' record whose 'Name' property has the same argument as 6182 the 'Enum' property of this option) that stores the value of 6183 the argument. 6184 6185 * If the option has the 'Defer' property, VAR is a pointer to a 6186 'VEC(cl_deferred_option,heap)' that stores the option for 6187 later processing. (VAR is declared with type 'void *' and 6188 needs to be cast to 'VEC(cl_deferred_option,heap)' before 6189 use.) 6190 6191 * Otherwise, if the option takes an argument, VAR is a pointer 6192 to the argument string. The pointer will be null if the 6193 argument is optional and wasn't given. 6194 6195 The option-processing script will usually zero-initialize VAR. You 6196 can modify this behavior using 'Init'. 6197 6198 'Var(VAR, SET)' 6199 The option controls an integer variable VAR and is active when VAR 6200 equals SET. The option parser will set VAR to SET when the 6201 positive form of the option is used and '!SET' when the "no-" form 6202 is used. 6203 6204 VAR is declared in the same way as for the single-argument form 6205 described above. 6206 6207 'Init(VALUE)' 6208 The variable specified by the 'Var' property should be statically 6209 initialized to VALUE. If more than one option using the same 6210 variable specifies 'Init', all must specify the same initializer. 6211 6212 'Mask(NAME)' 6213 The option is associated with a bit in the 'target_flags' variable 6214 (*note Run-time Target::) and is active when that bit is set. You 6215 may also specify 'Var' to select a variable other than 6216 'target_flags'. 6217 6218 The options-processing script will automatically allocate a unique 6219 bit for the option. If the option is attached to 'target_flags', 6220 the script will set the macro 'MASK_NAME' to the appropriate 6221 bitmask. It will also declare a 'TARGET_NAME' macro that has the 6222 value 1 when the option is active and 0 otherwise. If you use 6223 'Var' to attach the option to a different variable, the bitmask 6224 macro with be called 'OPTION_MASK_NAME'. 6225 6226 'InverseMask(OTHERNAME)' 6227 'InverseMask(OTHERNAME, THISNAME)' 6228 The option is the inverse of another option that has the 6229 'Mask(OTHERNAME)' property. If THISNAME is given, the 6230 options-processing script will declare a 'TARGET_THISNAME' macro 6231 that is 1 when the option is active and 0 otherwise. 6232 6233 'Enum(NAME)' 6234 The option's argument is a string from the set of strings 6235 associated with the corresponding 'Enum' record. The string is 6236 checked and converted to the integer specified in the corresponding 6237 'EnumValue' record before being passed to option handlers. 6238 6239 'Defer' 6240 The option should be stored in a vector, specified with 'Var', for 6241 later processing. 6242 6243 'Alias(OPT)' 6244 'Alias(OPT, ARG)' 6245 'Alias(OPT, POSARG, NEGARG)' 6246 The option is an alias for '-OPT' (or the negative form of that 6247 option, depending on 'NegativeAlias'). In the first form, any 6248 argument passed to the alias is considered to be passed to '-OPT', 6249 and '-OPT' is considered to be negated if the alias is used in 6250 negated form. In the second form, the alias may not be negated or 6251 have an argument, and POSARG is considered to be passed as an 6252 argument to '-OPT'. In the third form, the alias may not have an 6253 argument, if the alias is used in the positive form then POSARG is 6254 considered to be passed to '-OPT', and if the alias is used in the 6255 negative form then NEGARG is considered to be passed to '-OPT'. 6256 6257 Aliases should not specify 'Var' or 'Mask' or 'UInteger'. Aliases 6258 should normally specify the same languages as the target of the 6259 alias; the flags on the target will be used to determine any 6260 diagnostic for use of an option for the wrong language, while those 6261 on the alias will be used to identify what command-line text is the 6262 option and what text is any argument to that option. 6263 6264 When an 'Alias' definition is used for an option, driver specs do 6265 not need to handle it and no 'OPT_' enumeration value is defined 6266 for it; only the canonical form of the option will be seen in those 6267 places. 6268 6269 'NegativeAlias' 6270 For an option marked with 'Alias(OPT)', the option is considered to 6271 be an alias for the positive form of '-OPT' if negated and for the 6272 negative form of '-OPT' if not negated. 'NegativeAlias' may not be 6273 used with the forms of 'Alias' taking more than one argument. 6274 6275 'Ignore' 6276 This option is ignored apart from printing any warning specified 6277 using 'Warn'. The option will not be seen by specs and no 'OPT_' 6278 enumeration value is defined for it. 6279 6280 'SeparateAlias' 6281 For an option marked with 'Joined', 'Separate' and 'Alias', the 6282 option only acts as an alias when passed a separate argument; with 6283 a joined argument it acts as a normal option, with an 'OPT_' 6284 enumeration value. This is for compatibility with the Java '-d' 6285 option and should not be used for new options. 6286 6287 'Warn(MESSAGE)' 6288 If this option is used, output the warning MESSAGE. MESSAGE is a 6289 format string, either taking a single operand with a '%qs' format 6290 which is the option name, or not taking any operands, which is 6291 passed to the 'warning' function. If an alias is marked 'Warn', 6292 the target of the alias must not also be marked 'Warn'. 6293 6294 'Report' 6295 The state of the option should be printed by '-fverbose-asm'. 6296 6297 'Warning' 6298 This is a warning option and should be shown as such in '--help' 6299 output. This flag does not currently affect anything other than 6300 '--help'. 6301 6302 'Optimization' 6303 This is an optimization option. It should be shown as such in 6304 '--help' output, and any associated variable named using 'Var' 6305 should be saved and restored when the optimization level is changed 6306 with 'optimize' attributes. 6307 6308 'Undocumented' 6309 The option is deliberately missing documentation and should not be 6310 included in the '--help' output. 6311 6312 'Condition(COND)' 6313 The option should only be accepted if preprocessor condition COND 6314 is true. Note that any C declarations associated with the option 6315 will be present even if COND is false; COND simply controls whether 6316 the option is accepted and whether it is printed in the '--help' 6317 output. 6318 6319 'Save' 6320 Build the 'cl_target_option' structure to hold a copy of the 6321 option, add the functions 'cl_target_option_save' and 6322 'cl_target_option_restore' to save and restore the options. 6323 6324 'SetByCombined' 6325 The option may also be set by a combined option such as 6326 '-ffast-math'. This causes the 'gcc_options' struct to have a 6327 field 'frontend_set_NAME', where 'NAME' is the name of the field 6328 holding the value of this option (without the leading 'x_'). This 6329 gives the front end a way to indicate that the value has been set 6330 explicitly and should not be changed by the combined option. For 6331 example, some front ends use this to prevent '-ffast-math' and 6332 '-fno-fast-math' from changing the value of '-fmath-errno' for 6333 languages that do not use 'errno'. 6334 6335 'EnabledBy(OPT)' 6336 'EnabledBy(OPT && OPT2)' 6337 If not explicitly set, the option is set to the value of '-OPT'. 6338 The second form specifies that the option is only set if both OPT 6339 and OPT2 are set. 6340 6341 'LangEnabledBy(LANGUAGE, OPT)' 6342 'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)' 6343 When compiling for the given language, the option is set to the 6344 value of '-OPT', if not explicitly set. In the second form, if OPT 6345 is used in the positive form then POSARG is considered to be passed 6346 to the option, and if OPT is used in the negative form then NEGARG 6347 is considered to be passed to the option. It is possible to 6348 specify several different languages. Each LANGUAGE must have been 6349 declared by an earlier 'Language' record. *Note Option file 6350 format::. 6351 6352 'NoDWARFRecord' 6353 The option is omitted from the producer string written by 6354 '-grecord-gcc-switches'. 6355 6356 6357 File: gccint.info, Node: Passes, Next: RTL, Prev: Options, Up: Top 6358 6359 9 Passes and Files of the Compiler 6360 ********************************** 6361 6362 This chapter is dedicated to giving an overview of the optimization and 6363 code generation passes of the compiler. In the process, it describes 6364 some of the language front end interface, though this description is no 6365 where near complete. 6366 6367 * Menu: 6368 6369 * Parsing pass:: The language front end turns text into bits. 6370 * Gimplification pass:: The bits are turned into something we can optimize. 6371 * Pass manager:: Sequencing the optimization passes. 6372 * Tree SSA passes:: Optimizations on a high-level representation. 6373 * RTL passes:: Optimizations on a low-level representation. 6374 6375 6376 File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes 6377 6378 9.1 Parsing pass 6379 ================ 6380 6381 The language front end is invoked only once, via 6382 'lang_hooks.parse_file', to parse the entire input. The language front 6383 end may use any intermediate language representation deemed appropriate. 6384 The C front end uses GENERIC trees (*note GENERIC::), plus a double 6385 handful of language specific tree codes defined in 'c-common.def'. The 6386 Fortran front end uses a completely different private representation. 6387 6388 At some point the front end must translate the representation used in 6389 the front end to a representation understood by the language-independent 6390 portions of the compiler. Current practice takes one of two forms. The 6391 C front end manually invokes the gimplifier (*note GIMPLE::) on each 6392 function, and uses the gimplifier callbacks to convert the 6393 language-specific tree nodes directly to GIMPLE before passing the 6394 function off to be compiled. The Fortran front end converts from a 6395 private representation to GENERIC, which is later lowered to GIMPLE when 6396 the function is compiled. Which route to choose probably depends on how 6397 well GENERIC (plus extensions) can be made to match up with the source 6398 language and necessary parsing data structures. 6399 6400 BUG: Gimplification must occur before nested function lowering, and 6401 nested function lowering must be done by the front end before passing 6402 the data off to cgraph. 6403 6404 TODO: Cgraph should control nested function lowering. It would only be 6405 invoked when it is certain that the outer-most function is used. 6406 6407 TODO: Cgraph needs a gimplify_function callback. It should be invoked 6408 when (1) it is certain that the function is used, (2) warning flags 6409 specified by the user require some amount of compilation in order to 6410 honor, (3) the language indicates that semantic analysis is not complete 6411 until gimplification occurs. Hum... this sounds overly complicated. 6412 Perhaps we should just have the front end gimplify always; in most cases 6413 it's only one function call. 6414 6415 The front end needs to pass all function definitions and top level 6416 declarations off to the middle-end so that they can be compiled and 6417 emitted to the object file. For a simple procedural language, it is 6418 usually most convenient to do this as each top level declaration or 6419 definition is seen. There is also a distinction to be made between 6420 generating functional code and generating complete debug information. 6421 The only thing that is absolutely required for functional code is that 6422 function and data _definitions_ be passed to the middle-end. For 6423 complete debug information, function, data and type declarations should 6424 all be passed as well. 6425 6426 In any case, the front end needs each complete top-level function or 6427 data declaration, and each data definition should be passed to 6428 'rest_of_decl_compilation'. Each complete type definition should be 6429 passed to 'rest_of_type_compilation'. Each function definition should 6430 be passed to 'cgraph_finalize_function'. 6431 6432 TODO: I know rest_of_compilation currently has all sorts of RTL 6433 generation semantics. I plan to move all code generation bits (both 6434 Tree and RTL) to compile_function. Should we hide cgraph from the front 6435 ends and move back to rest_of_compilation as the official interface? 6436 Possibly we should rename all three interfaces such that the names match 6437 in some meaningful way and that is more descriptive than "rest_of". 6438 6439 The middle-end will, at its option, emit the function and data 6440 definitions immediately or queue them for later processing. 6441 6442 6443 File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes 6444 6445 9.2 Gimplification pass 6446 ======================= 6447 6448 "Gimplification" is a whimsical term for the process of converting the 6449 intermediate representation of a function into the GIMPLE language 6450 (*note GIMPLE::). The term stuck, and so words like "gimplification", 6451 "gimplify", "gimplifier" and the like are sprinkled throughout this 6452 section of code. 6453 6454 While a front end may certainly choose to generate GIMPLE directly if 6455 it chooses, this can be a moderately complex process unless the 6456 intermediate language used by the front end is already fairly simple. 6457 Usually it is easier to generate GENERIC trees plus extensions and let 6458 the language-independent gimplifier do most of the work. 6459 6460 The main entry point to this pass is 'gimplify_function_tree' located 6461 in 'gimplify.c'. From here we process the entire function gimplifying 6462 each statement in turn. The main workhorse for this pass is 6463 'gimplify_expr'. Approximately everything passes through here at least 6464 once, and it is from here that we invoke the 'lang_hooks.gimplify_expr' 6465 callback. 6466 6467 The callback should examine the expression in question and return 6468 'GS_UNHANDLED' if the expression is not a language specific construct 6469 that requires attention. Otherwise it should alter the expression in 6470 some way to such that forward progress is made toward producing valid 6471 GIMPLE. If the callback is certain that the transformation is complete 6472 and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'. 6473 Otherwise it should return 'GS_OK', which will cause the expression to 6474 be processed again. If the callback encounters an error during the 6475 transformation (because the front end is relying on the gimplification 6476 process to finish semantic checks), it should return 'GS_ERROR'. 6477 6478 6479 File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes 6480 6481 9.3 Pass manager 6482 ================ 6483 6484 The pass manager is located in 'passes.c', 'tree-optimize.c' and 6485 'tree-pass.h'. Its job is to run all of the individual passes in the 6486 correct order, and take care of standard bookkeeping that applies to 6487 every pass. 6488 6489 The theory of operation is that each pass defines a structure that 6490 represents everything we need to know about that pass--when it should be 6491 run, how it should be run, what intermediate language form or 6492 on-the-side data structures it needs. We register the pass to be run in 6493 some particular order, and the pass manager arranges for everything to 6494 happen in the correct order. 6495 6496 The actuality doesn't completely live up to the theory at present. 6497 Command-line switches and 'timevar_id_t' enumerations must still be 6498 defined elsewhere. The pass manager validates constraints but does not 6499 attempt to (re-)generate data structures or lower intermediate language 6500 form based on the requirements of the next pass. Nevertheless, what is 6501 present is useful, and a far sight better than nothing at all. 6502 6503 Each pass should have a unique name. Each pass may have its own dump 6504 file (for GCC debugging purposes). Passes with a name starting with a 6505 star do not dump anything. Sometimes passes are supposed to share a 6506 dump file / option name. To still give these unique names, you can use 6507 a prefix that is delimited by a space from the part that is used for the 6508 dump file / option name. E.g. When the pass name is "ud dce", the name 6509 used for dump file/options is "dce". 6510 6511 TODO: describe the global variables set up by the pass manager, and a 6512 brief description of how a new pass should use it. I need to look at 6513 what info RTL passes use first... 6514 6515 6516 File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 6517 6518 9.4 Tree SSA passes 6519 =================== 6520 6521 The following briefly describes the Tree optimization passes that are 6522 run after gimplification and what source files they are located in. 6523 6524 * Remove useless statements 6525 6526 This pass is an extremely simple sweep across the gimple code in 6527 which we identify obviously dead code and remove it. Here we do 6528 things like simplify 'if' statements with constant conditions, 6529 remove exception handling constructs surrounding code that 6530 obviously cannot throw, remove lexical bindings that contain no 6531 variables, and other assorted simplistic cleanups. The idea is to 6532 get rid of the obvious stuff quickly rather than wait until later 6533 when it's more work to get rid of it. This pass is located in 6534 'tree-cfg.c' and described by 'pass_remove_useless_stmts'. 6535 6536 * Mudflap declaration registration 6537 6538 If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize 6539 Options.) is enabled, we generate code to register some variable 6540 declarations with the mudflap runtime. Specifically, the runtime 6541 tracks the lifetimes of those variable declarations that have their 6542 addresses taken, or whose bounds are unknown at compile time 6543 ('extern'). This pass generates new exception handling constructs 6544 ('try'/'finally'), and so must run before those are lowered. In 6545 addition, the pass enqueues declarations of static variables whose 6546 lifetimes extend to the entire program. The pass is located in 6547 'tree-mudflap.c' and is described by 'pass_mudflap_1'. 6548 6549 * OpenMP lowering 6550 6551 If OpenMP generation ('-fopenmp') is enabled, this pass lowers 6552 OpenMP constructs into GIMPLE. 6553 6554 Lowering of OpenMP constructs involves creating replacement 6555 expressions for local variables that have been mapped using data 6556 sharing clauses, exposing the control flow of most synchronization 6557 directives and adding region markers to facilitate the creation of 6558 the control flow graph. The pass is located in 'omp-low.c' and is 6559 described by 'pass_lower_omp'. 6560 6561 * OpenMP expansion 6562 6563 If OpenMP generation ('-fopenmp') is enabled, this pass expands 6564 parallel regions into their own functions to be invoked by the 6565 thread library. The pass is located in 'omp-low.c' and is 6566 described by 'pass_expand_omp'. 6567 6568 * Lower control flow 6569 6570 This pass flattens 'if' statements ('COND_EXPR') and moves lexical 6571 bindings ('BIND_EXPR') out of line. After this pass, all 'if' 6572 statements will have exactly two 'goto' statements in its 'then' 6573 and 'else' arms. Lexical binding information for each statement 6574 will be found in 'TREE_BLOCK' rather than being inferred from its 6575 position under a 'BIND_EXPR'. This pass is found in 'gimple-low.c' 6576 and is described by 'pass_lower_cf'. 6577 6578 * Lower exception handling control flow 6579 6580 This pass decomposes high-level exception handling constructs 6581 ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that 6582 explicitly represents the control flow involved. After this pass, 6583 'lookup_stmt_eh_region' will return a non-negative number for any 6584 statement that may have EH control flow semantics; examine 6585 'tree_can_throw_internal' or 'tree_can_throw_external' for exact 6586 semantics. Exact control flow may be extracted from 6587 'foreach_reachable_handler'. The EH region nesting tree is defined 6588 in 'except.h' and built in 'except.c'. The lowering pass itself is 6589 in 'tree-eh.c' and is described by 'pass_lower_eh'. 6590 6591 * Build the control flow graph 6592 6593 This pass decomposes a function into basic blocks and creates all 6594 of the edges that connect them. It is located in 'tree-cfg.c' and 6595 is described by 'pass_build_cfg'. 6596 6597 * Find all referenced variables 6598 6599 This pass walks the entire function and collects an array of all 6600 variables referenced in the function, 'referenced_vars'. The index 6601 at which a variable is found in the array is used as a UID for the 6602 variable within this function. This data is needed by the SSA 6603 rewriting routines. The pass is located in 'tree-dfa.c' and is 6604 described by 'pass_referenced_vars'. 6605 6606 * Enter static single assignment form 6607 6608 This pass rewrites the function such that it is in SSA form. After 6609 this pass, all 'is_gimple_reg' variables will be referenced by 6610 'SSA_NAME', and all occurrences of other variables will be 6611 annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been 6612 inserted as necessary for each basic block. This pass is located 6613 in 'tree-ssa.c' and is described by 'pass_build_ssa'. 6614 6615 * Warn for uninitialized variables 6616 6617 This pass scans the function for uses of 'SSA_NAME's that are fed 6618 by default definition. For non-parameter variables, such uses are 6619 uninitialized. The pass is run twice, before and after 6620 optimization (if turned on). In the first pass we only warn for 6621 uses that are positively uninitialized; in the second pass we warn 6622 for uses that are possibly uninitialized. The pass is located in 6623 'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and 6624 'pass_late_warn_uninitialized'. 6625 6626 * Dead code elimination 6627 6628 This pass scans the function for statements without side effects 6629 whose result is unused. It does not do memory life analysis, so 6630 any value that is stored in memory is considered used. The pass is 6631 run multiple times throughout the optimization process. It is 6632 located in 'tree-ssa-dce.c' and is described by 'pass_dce'. 6633 6634 * Dominator optimizations 6635 6636 This pass performs trivial dominator-based copy and constant 6637 propagation, expression simplification, and jump threading. It is 6638 run multiple times throughout the optimization process. It is 6639 located in 'tree-ssa-dom.c' and is described by 'pass_dominator'. 6640 6641 * Forward propagation of single-use variables 6642 6643 This pass attempts to remove redundant computation by substituting 6644 variables that are used once into the expression that uses them and 6645 seeing if the result can be simplified. It is located in 6646 'tree-ssa-forwprop.c' and is described by 'pass_forwprop'. 6647 6648 * Copy Renaming 6649 6650 This pass attempts to change the name of compiler temporaries 6651 involved in copy operations such that SSA->normal can coalesce the 6652 copy away. When compiler temporaries are copies of user variables, 6653 it also renames the compiler temporary to the user variable 6654 resulting in better use of user symbols. It is located in 6655 'tree-ssa-copyrename.c' and is described by 'pass_copyrename'. 6656 6657 * PHI node optimizations 6658 6659 This pass recognizes forms of PHI inputs that can be represented as 6660 conditional expressions and rewrites them into straight line code. 6661 It is located in 'tree-ssa-phiopt.c' and is described by 6662 'pass_phiopt'. 6663 6664 * May-alias optimization 6665 6666 This pass performs a flow sensitive SSA-based points-to analysis. 6667 The resulting may-alias, must-alias, and escape analysis 6668 information is used to promote variables from in-memory addressable 6669 objects to non-aliased variables that can be renamed into SSA form. 6670 We also update the 'VDEF'/'VUSE' memory tags for non-renameable 6671 aggregates so that we get fewer false kills. The pass is located 6672 in 'tree-ssa-alias.c' and is described by 'pass_may_alias'. 6673 6674 Interprocedural points-to information is located in 6675 'tree-ssa-structalias.c' and described by 'pass_ipa_pta'. 6676 6677 * Profiling 6678 6679 This pass rewrites the function in order to collect runtime block 6680 and value profiling data. Such data may be fed back into the 6681 compiler on a subsequent run so as to allow optimization based on 6682 expected execution frequencies. The pass is located in 'predict.c' 6683 and is described by 'pass_profile'. 6684 6685 * Lower complex arithmetic 6686 6687 This pass rewrites complex arithmetic operations into their 6688 component scalar arithmetic operations. The pass is located in 6689 'tree-complex.c' and is described by 'pass_lower_complex'. 6690 6691 * Scalar replacement of aggregates 6692 6693 This pass rewrites suitable non-aliased local aggregate variables 6694 into a set of scalar variables. The resulting scalar variables are 6695 rewritten into SSA form, which allows subsequent optimization 6696 passes to do a significantly better job with them. The pass is 6697 located in 'tree-sra.c' and is described by 'pass_sra'. 6698 6699 * Dead store elimination 6700 6701 This pass eliminates stores to memory that are subsequently 6702 overwritten by another store, without any intervening loads. The 6703 pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'. 6704 6705 * Tail recursion elimination 6706 6707 This pass transforms tail recursion into a loop. It is located in 6708 'tree-tailcall.c' and is described by 'pass_tail_recursion'. 6709 6710 * Forward store motion 6711 6712 This pass sinks stores and assignments down the flowgraph closer to 6713 their use point. The pass is located in 'tree-ssa-sink.c' and is 6714 described by 'pass_sink_code'. 6715 6716 * Partial redundancy elimination 6717 6718 This pass eliminates partially redundant computations, as well as 6719 performing load motion. The pass is located in 'tree-ssa-pre.c' 6720 and is described by 'pass_pre'. 6721 6722 Just before partial redundancy elimination, if 6723 '-funsafe-math-optimizations' is on, GCC tries to convert divisions 6724 to multiplications by the reciprocal. The pass is located in 6725 'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'. 6726 6727 * Full redundancy elimination 6728 6729 This is a simpler form of PRE that only eliminates redundancies 6730 that occur on all paths. It is located in 'tree-ssa-pre.c' and 6731 described by 'pass_fre'. 6732 6733 * Loop optimization 6734 6735 The main driver of the pass is placed in 'tree-ssa-loop.c' and 6736 described by 'pass_loop'. 6737 6738 The optimizations performed by this pass are: 6739 6740 Loop invariant motion. This pass moves only invariants that would 6741 be hard to handle on RTL level (function calls, operations that 6742 expand to nontrivial sequences of insns). With '-funswitch-loops' 6743 it also moves operands of conditions that are invariant out of the 6744 loop, so that we can use just trivial invariantness analysis in 6745 loop unswitching. The pass also includes store motion. The pass 6746 is implemented in 'tree-ssa-loop-im.c'. 6747 6748 Canonical induction variable creation. This pass creates a simple 6749 counter for number of iterations of the loop and replaces the exit 6750 condition of the loop using it, in case when a complicated analysis 6751 is necessary to determine the number of iterations. Later 6752 optimizations then may determine the number easily. The pass is 6753 implemented in 'tree-ssa-loop-ivcanon.c'. 6754 6755 Induction variable optimizations. This pass performs standard 6756 induction variable optimizations, including strength reduction, 6757 induction variable merging and induction variable elimination. The 6758 pass is implemented in 'tree-ssa-loop-ivopts.c'. 6759 6760 Loop unswitching. This pass moves the conditional jumps that are 6761 invariant out of the loops. To achieve this, a duplicate of the 6762 loop is created for each possible outcome of conditional jump(s). 6763 The pass is implemented in 'tree-ssa-loop-unswitch.c'. This pass 6764 should eventually replace the RTL level loop unswitching in 6765 'loop-unswitch.c', but currently the RTL level pass is not 6766 completely redundant yet due to deficiencies in tree level alias 6767 analysis. 6768 6769 The optimizations also use various utility functions contained in 6770 'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and 6771 'cfgloopmanip.c'. 6772 6773 Vectorization. This pass transforms loops to operate on vector 6774 types instead of scalar types. Data parallelism across loop 6775 iterations is exploited to group data elements from consecutive 6776 iterations into a vector and operate on them in parallel. 6777 Depending on available target support the loop is conceptually 6778 unrolled by a factor 'VF' (vectorization factor), which is the 6779 number of elements operated upon in parallel in each iteration, and 6780 the 'VF' copies of each scalar operation are fused to form a vector 6781 operation. Additional loop transformations such as peeling and 6782 versioning may take place to align the number of iterations, and to 6783 align the memory accesses in the loop. The pass is implemented in 6784 'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and 6785 'tree-vect-loop-manip.c' (loop specific parts and general loop 6786 utilities), 'tree-vect-slp' (loop-aware SLP functionality), 6787 'tree-vect-stmts.c' and 'tree-vect-data-refs.c'. Analysis of data 6788 references is in 'tree-data-ref.c'. 6789 6790 SLP Vectorization. This pass performs vectorization of 6791 straight-line code. The pass is implemented in 'tree-vectorizer.c' 6792 (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and 6793 'tree-vect-data-refs.c'. 6794 6795 Autoparallelization. This pass splits the loop iteration space to 6796 run into several threads. The pass is implemented in 6797 'tree-parloops.c'. 6798 6799 Graphite is a loop transformation framework based on the polyhedral 6800 model. Graphite stands for Gimple Represented as Polyhedra. The 6801 internals of this infrastructure are documented in 6802 <http://gcc.gnu.org/wiki/Graphite>. The passes working on this 6803 representation are implemented in the various 'graphite-*' files. 6804 6805 * Tree level if-conversion for vectorizer 6806 6807 This pass applies if-conversion to simple loops to help vectorizer. 6808 We identify if convertible loops, if-convert statements and merge 6809 basic blocks in one big block. The idea is to present loop in such 6810 form so that vectorizer can have one to one mapping between 6811 statements and available vector operations. This pass is located 6812 in 'tree-if-conv.c' and is described by 'pass_if_conversion'. 6813 6814 * Conditional constant propagation 6815 6816 This pass relaxes a lattice of values in order to identify those 6817 that must be constant even in the presence of conditional branches. 6818 The pass is located in 'tree-ssa-ccp.c' and is described by 6819 'pass_ccp'. 6820 6821 A related pass that works on memory loads and stores, and not just 6822 register values, is located in 'tree-ssa-ccp.c' and described by 6823 'pass_store_ccp'. 6824 6825 * Conditional copy propagation 6826 6827 This is similar to constant propagation but the lattice of values 6828 is the "copy-of" relation. It eliminates redundant copies from the 6829 code. The pass is located in 'tree-ssa-copy.c' and described by 6830 'pass_copy_prop'. 6831 6832 A related pass that works on memory copies, and not just register 6833 copies, is located in 'tree-ssa-copy.c' and described by 6834 'pass_store_copy_prop'. 6835 6836 * Value range propagation 6837 6838 This transformation is similar to constant propagation but instead 6839 of propagating single constant values, it propagates known value 6840 ranges. The implementation is based on Patterson's range 6841 propagation algorithm (Accurate Static Branch Prediction by Value 6842 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 6843 Patterson's algorithm, this implementation does not propagate 6844 branch probabilities nor it uses more than a single range per SSA 6845 name. This means that the current implementation cannot be used 6846 for branch prediction (though adapting it would not be difficult). 6847 The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'. 6848 6849 * Folding built-in functions 6850 6851 This pass simplifies built-in functions, as applicable, with 6852 constant arguments or with inferable string lengths. It is located 6853 in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'. 6854 6855 * Split critical edges 6856 6857 This pass identifies critical edges and inserts empty basic blocks 6858 such that the edge is no longer critical. The pass is located in 6859 'tree-cfg.c' and is described by 'pass_split_crit_edges'. 6860 6861 * Control dependence dead code elimination 6862 6863 This pass is a stronger form of dead code elimination that can 6864 eliminate unnecessary control flow statements. It is located in 6865 'tree-ssa-dce.c' and is described by 'pass_cd_dce'. 6866 6867 * Tail call elimination 6868 6869 This pass identifies function calls that may be rewritten into 6870 jumps. No code transformation is actually applied here, but the 6871 data and control flow problem is solved. The code transformation 6872 requires target support, and so is delayed until RTL. In the 6873 meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility. 6874 The pass is located in 'tree-tailcall.c' and is described by 6875 'pass_tail_calls'. The RTL transformation is handled by 6876 'fixup_tail_calls' in 'calls.c'. 6877 6878 * Warn for function return without value 6879 6880 For non-void functions, this pass locates return statements that do 6881 not specify a value and issues a warning. Such a statement may 6882 have been injected by falling off the end of the function. This 6883 pass is run last so that we have as much time as possible to prove 6884 that the statement is not reachable. It is located in 'tree-cfg.c' 6885 and is described by 'pass_warn_function_return'. 6886 6887 * Mudflap statement annotation 6888 6889 If mudflap is enabled, we rewrite some memory accesses with code to 6890 validate that the memory access is correct. In particular, 6891 expressions involving pointer dereferences ('INDIRECT_REF', 6892 'ARRAY_REF', etc.) are replaced by code that checks the selected 6893 address range against the mudflap runtime's database of valid 6894 regions. This check includes an inline lookup into a direct-mapped 6895 cache, based on shift/mask operations of the pointer value, with a 6896 fallback function call into the runtime. The pass is located in 6897 'tree-mudflap.c' and is described by 'pass_mudflap_2'. 6898 6899 * Leave static single assignment form 6900 6901 This pass rewrites the function such that it is in normal form. At 6902 the same time, we eliminate as many single-use temporaries as 6903 possible, so the intermediate language is no longer GIMPLE, but 6904 GENERIC. The pass is located in 'tree-outof-ssa.c' and is 6905 described by 'pass_del_ssa'. 6906 6907 * Merge PHI nodes that feed into one another 6908 6909 This is part of the CFG cleanup passes. It attempts to join PHI 6910 nodes from a forwarder CFG block into another block with PHI nodes. 6911 The pass is located in 'tree-cfgcleanup.c' and is described by 6912 'pass_merge_phi'. 6913 6914 * Return value optimization 6915 6916 If a function always returns the same local variable, and that 6917 local variable is an aggregate type, then the variable is replaced 6918 with the return value for the function (i.e., the function's 6919 DECL_RESULT). This is equivalent to the C++ named return value 6920 optimization applied to GIMPLE. The pass is located in 6921 'tree-nrv.c' and is described by 'pass_nrv'. 6922 6923 * Return slot optimization 6924 6925 If a function returns a memory object and is called as 'var = 6926 foo()', this pass tries to change the call so that the address of 6927 'var' is sent to the caller to avoid an extra memory copy. This 6928 pass is located in 'tree-nrv.c' and is described by 6929 'pass_return_slot'. 6930 6931 * Optimize calls to '__builtin_object_size' 6932 6933 This is a propagation pass similar to CCP that tries to remove 6934 calls to '__builtin_object_size' when the size of the object can be 6935 computed at compile-time. This pass is located in 6936 'tree-object-size.c' and is described by 'pass_object_sizes'. 6937 6938 * Loop invariant motion 6939 6940 This pass removes expensive loop-invariant computations out of 6941 loops. The pass is located in 'tree-ssa-loop.c' and described by 6942 'pass_lim'. 6943 6944 * Loop nest optimizations 6945 6946 This is a family of loop transformations that works on loop nests. 6947 It includes loop interchange, scaling, skewing and reversal and 6948 they are all geared to the optimization of data locality in array 6949 traversals and the removal of dependencies that hamper 6950 optimizations such as loop parallelization and vectorization. The 6951 pass is located in 'tree-loop-linear.c' and described by 6952 'pass_linear_transform'. 6953 6954 * Removal of empty loops 6955 6956 This pass removes loops with no code in them. The pass is located 6957 in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'. 6958 6959 * Unrolling of small loops 6960 6961 This pass completely unrolls loops with few iterations. The pass 6962 is located in 'tree-ssa-loop-ivcanon.c' and described by 6963 'pass_complete_unroll'. 6964 6965 * Predictive commoning 6966 6967 This pass makes the code reuse the computations from the previous 6968 iterations of the loops, especially loads and stores to memory. It 6969 does so by storing the values of these computations to a bank of 6970 temporary variables that are rotated at the end of loop. To avoid 6971 the need for this rotation, the loop is then unrolled and the 6972 copies of the loop body are rewritten to use the appropriate 6973 version of the temporary variable. This pass is located in 6974 'tree-predcom.c' and described by 'pass_predcom'. 6975 6976 * Array prefetching 6977 6978 This pass issues prefetch instructions for array references inside 6979 loops. The pass is located in 'tree-ssa-loop-prefetch.c' and 6980 described by 'pass_loop_prefetch'. 6981 6982 * Reassociation 6983 6984 This pass rewrites arithmetic expressions to enable optimizations 6985 that operate on them, like redundancy elimination and 6986 vectorization. The pass is located in 'tree-ssa-reassoc.c' and 6987 described by 'pass_reassoc'. 6988 6989 * Optimization of 'stdarg' functions 6990 6991 This pass tries to avoid the saving of register arguments into the 6992 stack on entry to 'stdarg' functions. If the function doesn't use 6993 any 'va_start' macros, no registers need to be saved. If 6994 'va_start' macros are used, the 'va_list' variables don't escape 6995 the function, it is only necessary to save registers that will be 6996 used in 'va_arg' macros. For instance, if 'va_arg' is only used 6997 with integral types in the function, floating point registers don't 6998 need to be saved. This pass is located in 'tree-stdarg.c' and 6999 described by 'pass_stdarg'. 7000 7001 7002 File: gccint.info, Node: RTL passes, Prev: Tree SSA passes, Up: Passes 7003 7004 9.5 RTL passes 7005 ============== 7006 7007 The following briefly describes the RTL generation and optimization 7008 passes that are run after the Tree optimization passes. 7009 7010 * RTL generation 7011 7012 The source files for RTL generation include 'stmt.c', 'calls.c', 7013 'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and 7014 'emit-rtl.c'. Also, the file 'insn-emit.c', generated from the 7015 machine description by the program 'genemit', is used in this pass. 7016 The header file 'expr.h' is used for communication within this 7017 pass. 7018 7019 The header files 'insn-flags.h' and 'insn-codes.h', generated from 7020 the machine description by the programs 'genflags' and 'gencodes', 7021 tell this pass which standard names are available for use and which 7022 patterns correspond to them. 7023 7024 * Generation of exception landing pads 7025 7026 This pass generates the glue that handles communication between the 7027 exception handling library routines and the exception handlers 7028 within the function. Entry points in the function that are invoked 7029 by the exception handling library are called "landing pads". The 7030 code for this pass is located in 'except.c'. 7031 7032 * Control flow graph cleanup 7033 7034 This pass removes unreachable code, simplifies jumps to next, jumps 7035 to jump, jumps across jumps, etc. The pass is run multiple times. 7036 For historical reasons, it is occasionally referred to as the "jump 7037 optimization pass". The bulk of the code for this pass is in 7038 'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and 7039 'jump.c'. 7040 7041 * Forward propagation of single-def values 7042 7043 This pass attempts to remove redundant computation by substituting 7044 variables that come from a single definition, and seeing if the 7045 result can be simplified. It performs copy propagation and 7046 addressing mode selection. The pass is run twice, with values 7047 being propagated into loops only on the second run. The code is 7048 located in 'fwprop.c'. 7049 7050 * Common subexpression elimination 7051 7052 This pass removes redundant computation within basic blocks, and 7053 optimizes addressing modes based on cost. The pass is run twice. 7054 The code for this pass is located in 'cse.c'. 7055 7056 * Global common subexpression elimination 7057 7058 This pass performs two different types of GCSE depending on whether 7059 you are optimizing for size or not (LCM based GCSE tends to 7060 increase code size for a gain in speed, while Morel-Renvoise based 7061 GCSE does not). When optimizing for size, GCSE is done using 7062 Morel-Renvoise Partial Redundancy Elimination, with the exception 7063 that it does not try to move invariants out of loops--that is left 7064 to the loop optimization pass. If MR PRE GCSE is done, code 7065 hoisting (aka unification) is also done, as well as load motion. 7066 If you are optimizing for speed, LCM (lazy code motion) based GCSE 7067 is done. LCM is based on the work of Knoop, Ruthing, and Steffen. 7068 LCM based GCSE also does loop invariant code motion. We also 7069 perform load and store motion when optimizing for speed. 7070 Regardless of which type of GCSE is used, the GCSE pass also 7071 performs global constant and copy propagation. The source file for 7072 this pass is 'gcse.c', and the LCM routines are in 'lcm.c'. 7073 7074 * Loop optimization 7075 7076 This pass performs several loop related optimizations. The source 7077 files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop 7078 analysis and manipulation code. Initialization and finalization of 7079 loop structures is handled by 'loop-init.c'. A loop invariant 7080 motion pass is implemented in 'loop-invariant.c'. Basic block 7081 level optimizations--unrolling, peeling and unswitching loops-- are 7082 implemented in 'loop-unswitch.c' and 'loop-unroll.c'. Replacing of 7083 the exit condition of loops by special machine-dependent 7084 instructions is handled by 'loop-doloop.c'. 7085 7086 * Jump bypassing 7087 7088 This pass is an aggressive form of GCSE that transforms the control 7089 flow graph of a function by propagating constants into conditional 7090 branch instructions. The source file for this pass is 'gcse.c'. 7091 7092 * If conversion 7093 7094 This pass attempts to replace conditional branches and surrounding 7095 assignments with arithmetic, boolean value producing comparison 7096 instructions, and conditional move instructions. In the very last 7097 invocation after reload/LRA, it will generate predicated 7098 instructions when supported by the target. The code is located in 7099 'ifcvt.c'. 7100 7101 * Web construction 7102 7103 This pass splits independent uses of each pseudo-register. This 7104 can improve effect of the other transformation, such as CSE or 7105 register allocation. The code for this pass is located in 'web.c'. 7106 7107 * Instruction combination 7108 7109 This pass attempts to combine groups of two or three instructions 7110 that are related by data flow into single instructions. It 7111 combines the RTL expressions for the instructions by substitution, 7112 simplifies the result using algebra, and then attempts to match the 7113 result against the machine description. The code is located in 7114 'combine.c'. 7115 7116 * Register movement 7117 7118 This pass looks for cases where matching constraints would force an 7119 instruction to need a reload, and this reload would be a 7120 register-to-register move. It then attempts to change the 7121 registers used by the instruction to avoid the move instruction. 7122 The code is located in 'regmove.c'. 7123 7124 * Mode switching optimization 7125 7126 This pass looks for instructions that require the processor to be 7127 in a specific "mode" and minimizes the number of mode changes 7128 required to satisfy all users. What these modes are, and what they 7129 apply to are completely target-specific. The code for this pass is 7130 located in 'mode-switching.c'. 7131 7132 * Modulo scheduling 7133 7134 This pass looks at innermost loops and reorders their instructions 7135 by overlapping different iterations. Modulo scheduling is 7136 performed immediately before instruction scheduling. The code for 7137 this pass is located in 'modulo-sched.c'. 7138 7139 * Instruction scheduling 7140 7141 This pass looks for instructions whose output will not be available 7142 by the time that it is used in subsequent instructions. Memory 7143 loads and floating point instructions often have this behavior on 7144 RISC machines. It re-orders instructions within a basic block to 7145 try to separate the definition and use of items that otherwise 7146 would cause pipeline stalls. This pass is performed twice, before 7147 and after register allocation. The code for this pass is located 7148 in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c' 7149 and 'sched-vis.c'. 7150 7151 * Register allocation 7152 7153 These passes make sure that all occurrences of pseudo registers are 7154 eliminated, either by allocating them to a hard register, replacing 7155 them by an equivalent expression (e.g. a constant) or by placing 7156 them on the stack. This is done in several subpasses: 7157 7158 * Register move optimizations. This pass makes some simple RTL 7159 code transformations which improve the subsequent register 7160 allocation. The source file is 'regmove.c'. 7161 7162 * The integrated register allocator (IRA). It is called 7163 integrated because coalescing, register live range splitting, 7164 and hard register preferencing are done on-the-fly during 7165 coloring. It also has better integration with the reload/LRA 7166 pass. Pseudo-registers spilled by the allocator or the 7167 reload/LRA have still a chance to get hard-registers if the 7168 reload/LRA evicts some pseudo-registers from hard-registers. 7169 The allocator helps to choose better pseudos for spilling 7170 based on their live ranges and to coalesce stack slots 7171 allocated for the spilled pseudo-registers. IRA is a regional 7172 register allocator which is transformed into Chaitin-Briggs 7173 allocator if there is one region. By default, IRA chooses 7174 regions using register pressure but the user can force it to 7175 use one region or regions corresponding to all loops. 7176 7177 Source files of the allocator are 'ira.c', 'ira-build.c', 7178 'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c', 7179 'ira-lives', plus header files 'ira.h' and 'ira-int.h' used 7180 for the communication between the allocator and the rest of 7181 the compiler and between the IRA files. 7182 7183 * Reloading. This pass renumbers pseudo registers with the 7184 hardware registers numbers they were allocated. Pseudo 7185 registers that did not get hard registers are replaced with 7186 stack slots. Then it finds instructions that are invalid 7187 because a value has failed to end up in a register, or has 7188 ended up in a register of the wrong kind. It fixes up these 7189 instructions by reloading the problematical values temporarily 7190 into registers. Additional instructions are generated to do 7191 the copying. 7192 7193 The reload pass also optionally eliminates the frame pointer 7194 and inserts instructions to save and restore call-clobbered 7195 registers around calls. 7196 7197 Source files are 'reload.c' and 'reload1.c', plus the header 7198 'reload.h' used for communication between them. 7199 7200 * This pass is a modern replacement of the reload pass. Source 7201 files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c', 7202 'lra-constraints.c', 'lra-eliminations.c', 'lra-equivs.c', 7203 'lra-lives.c', 'lra-saves.c', 'lra-spills.c', the header 7204 'lra-int.h' used for communication between them, and the 7205 header 'lra.h' used for communication between LRA and the rest 7206 of compiler. 7207 7208 Unlike the reload pass, intermediate LRA decisions are 7209 reflected in RTL as much as possible. This reduces the number 7210 of target-dependent macros and hooks, leaving instruction 7211 constraints as the primary source of control. 7212 7213 LRA is run on targets for which TARGET_LRA_P returns true. 7214 7215 * Basic block reordering 7216 7217 This pass implements profile guided code positioning. If profile 7218 information is not available, various types of static analysis are 7219 performed to make the predictions normally coming from the profile 7220 feedback (IE execution frequency, branch probability, etc). It is 7221 implemented in the file 'bb-reorder.c', and the various prediction 7222 routines are in 'predict.c'. 7223 7224 * Variable tracking 7225 7226 This pass computes where the variables are stored at each position 7227 in code and generates notes describing the variable locations to 7228 RTL code. The location lists are then generated according to these 7229 notes to debug information if the debugging information format 7230 supports location lists. The code is located in 'var-tracking.c'. 7231 7232 * Delayed branch scheduling 7233 7234 This optional pass attempts to find instructions that can go into 7235 the delay slots of other instructions, usually jumps and calls. 7236 The code for this pass is located in 'reorg.c'. 7237 7238 * Branch shortening 7239 7240 On many RISC machines, branch instructions have a limited range. 7241 Thus, longer sequences of instructions must be used for long 7242 branches. In this pass, the compiler figures out what how far each 7243 instruction will be from each other instruction, and therefore 7244 whether the usual instructions, or the longer sequences, must be 7245 used for each branch. The code for this pass is located in 7246 'final.c'. 7247 7248 * Register-to-stack conversion 7249 7250 Conversion from usage of some hard registers to usage of a register 7251 stack may be done at this point. Currently, this is supported only 7252 for the floating-point registers of the Intel 80387 coprocessor. 7253 The code for this pass is located in 'reg-stack.c'. 7254 7255 * Final 7256 7257 This pass outputs the assembler code for the function. The source 7258 files are 'final.c' plus 'insn-output.c'; the latter is generated 7259 automatically from the machine description by the tool 'genoutput'. 7260 The header file 'conditions.h' is used for communication between 7261 these files. If mudflap is enabled, the queue of deferred 7262 declarations and any addressed constants (e.g., string literals) is 7263 processed by 'mudflap_finish_file' into a synthetic constructor 7264 function containing calls into the mudflap runtime. 7265 7266 * Debugging information output 7267 7268 This is run after final because it must output the stack slot 7269 offsets for pseudo registers that did not get hard registers. 7270 Source files are 'dbxout.c' for DBX symbol table format, 'sdbout.c' 7271 for SDB symbol table format, 'dwarfout.c' for DWARF symbol table 7272 format, files 'dwarf2out.c' and 'dwarf2asm.c' for DWARF2 symbol 7273 table format, and 'vmsdbgout.c' for VMS debug symbol table format. 7274 7275 7276 File: gccint.info, Node: RTL, Next: GENERIC, Prev: Passes, Up: Top 7277 7278 10 RTL Representation 7279 ********************* 7280 7281 The last part of the compiler work is done on a low-level intermediate 7282 representation called Register Transfer Language. In this language, the 7283 instructions to be output are described, pretty much one by one, in an 7284 algebraic form that describes what the instruction does. 7285 7286 RTL is inspired by Lisp lists. It has both an internal form, made up 7287 of structures that point at other structures, and a textual form that is 7288 used in the machine description and in printed debugging dumps. The 7289 textual form uses nested parentheses to indicate the pointers in the 7290 internal form. 7291 7292 * Menu: 7293 7294 * RTL Objects:: Expressions vs vectors vs strings vs integers. 7295 * RTL Classes:: Categories of RTL expression objects, and their structure. 7296 * Accessors:: Macros to access expression operands or vector elts. 7297 * Special Accessors:: Macros to access specific annotations on RTL. 7298 * Flags:: Other flags in an RTL expression. 7299 * Machine Modes:: Describing the size and format of a datum. 7300 * Constants:: Expressions with constant values. 7301 * Regs and Memory:: Expressions representing register contents or memory. 7302 * Arithmetic:: Expressions representing arithmetic on other expressions. 7303 * Comparisons:: Expressions representing comparison of expressions. 7304 * Bit-Fields:: Expressions representing bit-fields in memory or reg. 7305 * Vector Operations:: Expressions involving vector datatypes. 7306 * Conversions:: Extending, truncating, floating or fixing. 7307 * RTL Declarations:: Declaring volatility, constancy, etc. 7308 * Side Effects:: Expressions for storing in registers, etc. 7309 * Incdec:: Embedded side-effects for autoincrement addressing. 7310 * Assembler:: Representing 'asm' with operands. 7311 * Debug Information:: Expressions representing debugging information. 7312 * Insns:: Expression types for entire insns. 7313 * Calls:: RTL representation of function call insns. 7314 * Sharing:: Some expressions are unique; others *must* be copied. 7315 * Reading RTL:: Reading textual RTL from a file. 7316 7317 7318 File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 7319 7320 10.1 RTL Object Types 7321 ===================== 7322 7323 RTL uses five kinds of objects: expressions, integers, wide integers, 7324 strings and vectors. Expressions are the most important ones. An RTL 7325 expression ("RTX", for short) is a C structure, but it is usually 7326 referred to with a pointer; a type that is given the typedef name 'rtx'. 7327 7328 An integer is simply an 'int'; their written form uses decimal digits. 7329 A wide integer is an integral object whose type is 'HOST_WIDE_INT'; 7330 their written form uses decimal digits. 7331 7332 A string is a sequence of characters. In core it is represented as a 7333 'char *' in usual C fashion, and it is written in C syntax as well. 7334 However, strings in RTL may never be null. If you write an empty string 7335 in a machine description, it is represented in core as a null pointer 7336 rather than as a pointer to a null character. In certain contexts, 7337 these null pointers instead of strings are valid. Within RTL code, 7338 strings are most commonly found inside 'symbol_ref' expressions, but 7339 they appear in other contexts in the RTL expressions that make up 7340 machine descriptions. 7341 7342 In a machine description, strings are normally written with double 7343 quotes, as you would in C. However, strings in machine descriptions may 7344 extend over many lines, which is invalid C, and adjacent string 7345 constants are not concatenated as they are in C. Any string constant 7346 may be surrounded with a single set of parentheses. Sometimes this 7347 makes the machine description easier to read. 7348 7349 There is also a special syntax for strings, which can be useful when C 7350 code is embedded in a machine description. Wherever a string can 7351 appear, it is also valid to write a C-style brace block. The entire 7352 brace block, including the outermost pair of braces, is considered to be 7353 the string constant. Double quote characters inside the braces are not 7354 special. Therefore, if you write string constants in the C code, you 7355 need not escape each quote character with a backslash. 7356 7357 A vector contains an arbitrary number of pointers to expressions. The 7358 number of elements in the vector is explicitly present in the vector. 7359 The written form of a vector consists of square brackets ('[...]') 7360 surrounding the elements, in sequence and with whitespace separating 7361 them. Vectors of length zero are not created; null pointers are used 7362 instead. 7363 7364 Expressions are classified by "expression codes" (also called RTX 7365 codes). The expression code is a name defined in 'rtl.def', which is 7366 also (in uppercase) a C enumeration constant. The possible expression 7367 codes and their meanings are machine-independent. The code of an RTX 7368 can be extracted with the macro 'GET_CODE (X)' and altered with 7369 'PUT_CODE (X, NEWCODE)'. 7370 7371 The expression code determines how many operands the expression 7372 contains, and what kinds of objects they are. In RTL, unlike Lisp, you 7373 cannot tell by looking at an operand what kind of object it is. 7374 Instead, you must know from its context--from the expression code of the 7375 containing expression. For example, in an expression of code 'subreg', 7376 the first operand is to be regarded as an expression and the second 7377 operand as an integer. In an expression of code 'plus', there are two 7378 operands, both of which are to be regarded as expressions. In a 7379 'symbol_ref' expression, there is one operand, which is to be regarded 7380 as a string. 7381 7382 Expressions are written as parentheses containing the name of the 7383 expression type, its flags and machine mode if any, and then the 7384 operands of the expression (separated by spaces). 7385 7386 Expression code names in the 'md' file are written in lowercase, but 7387 when they appear in C code they are written in uppercase. In this 7388 manual, they are shown as follows: 'const_int'. 7389 7390 In a few contexts a null pointer is valid where an expression is 7391 normally wanted. The written form of this is '(nil)'. 7392 7393 7394 File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 7395 7396 10.2 RTL Classes and Formats 7397 ============================ 7398 7399 The various expression codes are divided into several "classes", which 7400 are represented by single characters. You can determine the class of an 7401 RTX code with the macro 'GET_RTX_CLASS (CODE)'. Currently, 'rtl.def' 7402 defines these classes: 7403 7404 'RTX_OBJ' 7405 An RTX code that represents an actual object, such as a register 7406 ('REG') or a memory location ('MEM', 'SYMBOL_REF'). 'LO_SUM') is 7407 also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in 7408 this class, but in class 'x'. 7409 7410 'RTX_CONST_OBJ' 7411 An RTX code that represents a constant object. 'HIGH' is also 7412 included in this class. 7413 7414 'RTX_COMPARE' 7415 An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'. 7416 7417 'RTX_COMM_COMPARE' 7418 An RTX code for a symmetric (commutative) comparison, such as 'EQ' 7419 or 'ORDERED'. 7420 7421 'RTX_UNARY' 7422 An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT', 7423 or 'ABS'. This category also includes value extension (sign or 7424 zero) and conversions between integer and floating point. 7425 7426 'RTX_COMM_ARITH' 7427 An RTX code for a commutative binary operation, such as 'PLUS' or 7428 'AND'. 'NE' and 'EQ' are comparisons, so they have class '<'. 7429 7430 'RTX_BIN_ARITH' 7431 An RTX code for a non-commutative binary operation, such as 7432 'MINUS', 'DIV', or 'ASHIFTRT'. 7433 7434 'RTX_BITFIELD_OPS' 7435 An RTX code for a bit-field operation. Currently only 7436 'ZERO_EXTRACT' and 'SIGN_EXTRACT'. These have three inputs and are 7437 lvalues (so they can be used for insertion as well). *Note 7438 Bit-Fields::. 7439 7440 'RTX_TERNARY' 7441 An RTX code for other three input operations. Currently only 7442 'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and 7443 'FMA'. 7444 7445 'RTX_INSN' 7446 An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and 7447 'CALL_INSN'. *Note Insns::. 7448 7449 'RTX_MATCH' 7450 An RTX code for something that matches in insns, such as 7451 'MATCH_DUP'. These only occur in machine descriptions. 7452 7453 'RTX_AUTOINC' 7454 An RTX code for an auto-increment addressing mode, such as 7455 'POST_INC'. 7456 7457 'RTX_EXTRA' 7458 All other RTX codes. This category includes the remaining codes 7459 used only in machine descriptions ('DEFINE_*', etc.). It also 7460 includes all the codes describing side effects ('SET', 'USE', 7461 'CLOBBER', etc.) and the non-insns that may appear on an insn 7462 chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'. 'SUBREG' is 7463 also part of this class. 7464 7465 For each expression code, 'rtl.def' specifies the number of contained 7466 objects and their kinds using a sequence of characters called the 7467 "format" of the expression code. For example, the format of 'subreg' is 7468 'ei'. 7469 7470 These are the most commonly used format characters: 7471 7472 'e' 7473 An expression (actually a pointer to an expression). 7474 7475 'i' 7476 An integer. 7477 7478 'w' 7479 A wide integer. 7480 7481 's' 7482 A string. 7483 7484 'E' 7485 A vector of expressions. 7486 7487 A few other format characters are used occasionally: 7488 7489 'u' 7490 'u' is equivalent to 'e' except that it is printed differently in 7491 debugging dumps. It is used for pointers to insns. 7492 7493 'n' 7494 'n' is equivalent to 'i' except that it is printed differently in 7495 debugging dumps. It is used for the line number or code number of 7496 a 'note' insn. 7497 7498 'S' 7499 'S' indicates a string which is optional. In the RTL objects in 7500 core, 'S' is equivalent to 's', but when the object is read, from 7501 an 'md' file, the string value of this operand may be omitted. An 7502 omitted string is taken to be the null string. 7503 7504 'V' 7505 'V' indicates a vector which is optional. In the RTL objects in 7506 core, 'V' is equivalent to 'E', but when the object is read from an 7507 'md' file, the vector value of this operand may be omitted. An 7508 omitted vector is effectively the same as a vector of no elements. 7509 7510 'B' 7511 'B' indicates a pointer to basic block structure. 7512 7513 '0' 7514 '0' means a slot whose contents do not fit any normal category. 7515 '0' slots are not printed at all in dumps, and are often used in 7516 special ways by small parts of the compiler. 7517 7518 There are macros to get the number of operands and the format of an 7519 expression code: 7520 7521 'GET_RTX_LENGTH (CODE)' 7522 Number of operands of an RTX of code CODE. 7523 7524 'GET_RTX_FORMAT (CODE)' 7525 The format of an RTX of code CODE, as a C string. 7526 7527 Some classes of RTX codes always have the same format. For example, it 7528 is safe to assume that all comparison operations have format 'ee'. 7529 7530 '1' 7531 All codes of this class have format 'e'. 7532 7533 '<' 7534 'c' 7535 '2' 7536 All codes of these classes have format 'ee'. 7537 7538 'b' 7539 '3' 7540 All codes of these classes have format 'eee'. 7541 7542 'i' 7543 All codes of this class have formats that begin with 'iuueiee'. 7544 *Note Insns::. Note that not all RTL objects linked onto an insn 7545 chain are of class 'i'. 7546 7547 'o' 7548 'm' 7549 'x' 7550 You can make no assumptions about the format of these codes. 7551 7552 7553 File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 7554 7555 10.3 Access to Operands 7556 ======================= 7557 7558 Operands of expressions are accessed using the macros 'XEXP', 'XINT', 7559 'XWINT' and 'XSTR'. Each of these macros takes two arguments: an 7560 expression-pointer (RTX) and an operand number (counting from zero). 7561 Thus, 7562 7563 XEXP (X, 2) 7564 7565 accesses operand 2 of expression X, as an expression. 7566 7567 XINT (X, 2) 7568 7569 accesses the same operand as an integer. 'XSTR', used in the same 7570 fashion, would access it as a string. 7571 7572 Any operand can be accessed as an integer, as an expression or as a 7573 string. You must choose the correct method of access for the kind of 7574 value actually stored in the operand. You would do this based on the 7575 expression code of the containing expression. That is also how you 7576 would know how many operands there are. 7577 7578 For example, if X is a 'subreg' expression, you know that it has two 7579 operands which can be correctly accessed as 'XEXP (X, 0)' and 'XINT (X, 7580 1)'. If you did 'XINT (X, 0)', you would get the address of the 7581 expression operand but cast as an integer; that might occasionally be 7582 useful, but it would be cleaner to write '(int) XEXP (X, 0)'. 'XEXP (X, 7583 1)' would also compile without error, and would return the second, 7584 integer operand cast as an expression pointer, which would probably 7585 result in a crash when accessed. Nothing stops you from writing 'XEXP 7586 (X, 28)' either, but this will access memory past the end of the 7587 expression with unpredictable results. 7588 7589 Access to operands which are vectors is more complicated. You can use 7590 the macro 'XVEC' to get the vector-pointer itself, or the macros 7591 'XVECEXP' and 'XVECLEN' to access the elements and length of a vector. 7592 7593 'XVEC (EXP, IDX)' 7594 Access the vector-pointer which is operand number IDX in EXP. 7595 7596 'XVECLEN (EXP, IDX)' 7597 Access the length (number of elements) in the vector which is in 7598 operand number IDX in EXP. This value is an 'int'. 7599 7600 'XVECEXP (EXP, IDX, ELTNUM)' 7601 Access element number ELTNUM in the vector which is in operand 7602 number IDX in EXP. This value is an RTX. 7603 7604 It is up to you to make sure that ELTNUM is not negative and is 7605 less than 'XVECLEN (EXP, IDX)'. 7606 7607 All the macros defined in this section expand into lvalues and 7608 therefore can be used to assign the operands, lengths and vector 7609 elements as well as to access them. 7610 7611 7612 File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 7613 7614 10.4 Access to Special Operands 7615 =============================== 7616 7617 Some RTL nodes have special annotations associated with them. 7618 7619 'MEM' 7620 'MEM_ALIAS_SET (X)' 7621 If 0, X is not in any alias set, and may alias anything. 7622 Otherwise, X can only alias 'MEM's in a conflicting alias set. 7623 This value is set in a language-dependent manner in the 7624 front-end, and should not be altered in the back-end. In some 7625 front-ends, these numbers may correspond in some way to types, 7626 or other language-level entities, but they need not, and the 7627 back-end makes no such assumptions. These set numbers are 7628 tested with 'alias_sets_conflict_p'. 7629 7630 'MEM_EXPR (X)' 7631 If this register is known to hold the value of some user-level 7632 declaration, this is that tree node. It may also be a 7633 'COMPONENT_REF', in which case this is some field reference, 7634 and 'TREE_OPERAND (X, 0)' contains the declaration, or another 7635 'COMPONENT_REF', or null if there is no compile-time object 7636 associated with the reference. 7637 7638 'MEM_OFFSET_KNOWN_P (X)' 7639 True if the offset of the memory reference from 'MEM_EXPR' is 7640 known. 'MEM_OFFSET (X)' provides the offset if so. 7641 7642 'MEM_OFFSET (X)' 7643 The offset from the start of 'MEM_EXPR'. The value is only 7644 valid if 'MEM_OFFSET_KNOWN_P (X)' is true. 7645 7646 'MEM_SIZE_KNOWN_P (X)' 7647 True if the size of the memory reference is known. 'MEM_SIZE 7648 (X)' provides its size if so. 7649 7650 'MEM_SIZE (X)' 7651 The size in bytes of the memory reference. This is mostly 7652 relevant for 'BLKmode' references as otherwise the size is 7653 implied by the mode. The value is only valid if 7654 'MEM_SIZE_KNOWN_P (X)' is true. 7655 7656 'MEM_ALIGN (X)' 7657 The known alignment in bits of the memory reference. 7658 7659 'MEM_ADDR_SPACE (X)' 7660 The address space of the memory reference. This will commonly 7661 be zero for the generic address space. 7662 7663 'REG' 7664 'ORIGINAL_REGNO (X)' 7665 This field holds the number the register "originally" had; for 7666 a pseudo register turned into a hard reg this will hold the 7667 old pseudo register number. 7668 7669 'REG_EXPR (X)' 7670 If this register is known to hold the value of some user-level 7671 declaration, this is that tree node. 7672 7673 'REG_OFFSET (X)' 7674 If this register is known to hold the value of some user-level 7675 declaration, this is the offset into that logical storage. 7676 7677 'SYMBOL_REF' 7678 'SYMBOL_REF_DECL (X)' 7679 If the 'symbol_ref' X was created for a 'VAR_DECL' or a 7680 'FUNCTION_DECL', that tree is recorded here. If this value is 7681 null, then X was created by back end code generation routines, 7682 and there is no associated front end symbol table entry. 7683 7684 'SYMBOL_REF_DECL' may also point to a tree of class ''c'', 7685 that is, some sort of constant. In this case, the 7686 'symbol_ref' is an entry in the per-file constant pool; again, 7687 there is no associated front end symbol table entry. 7688 7689 'SYMBOL_REF_CONSTANT (X)' 7690 If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 7691 pool entry for X. It is null otherwise. 7692 7693 'SYMBOL_REF_DATA (X)' 7694 A field of opaque type used to store 'SYMBOL_REF_DECL' or 7695 'SYMBOL_REF_CONSTANT'. 7696 7697 'SYMBOL_REF_FLAGS (X)' 7698 In a 'symbol_ref', this is used to communicate various 7699 predicates about the symbol. Some of these are common enough 7700 to be computed by common code, some are specific to the 7701 target. The common bits are: 7702 7703 'SYMBOL_FLAG_FUNCTION' 7704 Set if the symbol refers to a function. 7705 7706 'SYMBOL_FLAG_LOCAL' 7707 Set if the symbol is local to this "module". See 7708 'TARGET_BINDS_LOCAL_P'. 7709 7710 'SYMBOL_FLAG_EXTERNAL' 7711 Set if this symbol is not defined in this translation 7712 unit. Note that this is not the inverse of 7713 'SYMBOL_FLAG_LOCAL'. 7714 7715 'SYMBOL_FLAG_SMALL' 7716 Set if the symbol is located in the small data section. 7717 See 'TARGET_IN_SMALL_DATA_P'. 7718 7719 'SYMBOL_REF_TLS_MODEL (X)' 7720 This is a multi-bit field accessor that returns the 7721 'tls_model' to be used for a thread-local storage symbol. 7722 It returns zero for non-thread-local symbols. 7723 7724 'SYMBOL_FLAG_HAS_BLOCK_INFO' 7725 Set if the symbol has 'SYMBOL_REF_BLOCK' and 7726 'SYMBOL_REF_BLOCK_OFFSET' fields. 7727 7728 'SYMBOL_FLAG_ANCHOR' 7729 Set if the symbol is used as a section anchor. "Section 7730 anchors" are symbols that have a known position within an 7731 'object_block' and that can be used to access nearby 7732 members of that block. They are used to implement 7733 '-fsection-anchors'. 7734 7735 If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO' 7736 will be too. 7737 7738 Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for 7739 the target's use. 7740 7741 'SYMBOL_REF_BLOCK (X)' 7742 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block' 7743 structure to which the symbol belongs, or 'NULL' if it has not been 7744 assigned a block. 7745 7746 'SYMBOL_REF_BLOCK_OFFSET (X)' 7747 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 7748 the first object in 'SYMBOL_REF_BLOCK (X)'. The value is negative 7749 if X has not yet been assigned to a block, or it has not been given 7750 an offset within that block. 7751 7752 7753 File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 7754 7755 10.5 Flags in an RTL Expression 7756 =============================== 7757 7758 RTL expressions contain several flags (one-bit bit-fields) that are used 7759 in certain types of expression. Most often they are accessed with the 7760 following macros, which expand into lvalues. 7761 7762 'CONSTANT_POOL_ADDRESS_P (X)' 7763 Nonzero in a 'symbol_ref' if it refers to part of the current 7764 function's constant pool. For most targets these addresses are in 7765 a '.rodata' section entirely separate from the function, but for 7766 some targets the addresses are close to the beginning of the 7767 function. In either case GCC assumes these addresses can be 7768 addressed directly, perhaps with the help of base registers. 7769 Stored in the 'unchanging' field and printed as '/u'. 7770 7771 'RTL_CONST_CALL_P (X)' 7772 In a 'call_insn' indicates that the insn represents a call to a 7773 const function. Stored in the 'unchanging' field and printed as 7774 '/u'. 7775 7776 'RTL_PURE_CALL_P (X)' 7777 In a 'call_insn' indicates that the insn represents a call to a 7778 pure function. Stored in the 'return_val' field and printed as 7779 '/i'. 7780 7781 'RTL_CONST_OR_PURE_CALL_P (X)' 7782 In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' 7783 is true. 7784 7785 'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 7786 In a 'call_insn' indicates that the insn represents a possibly 7787 infinite looping call to a const or pure function. Stored in the 7788 'call' field and printed as '/c'. Only true if one of 7789 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true. 7790 7791 'INSN_ANNULLED_BRANCH_P (X)' 7792 In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch 7793 is an annulling one. See the discussion under 'sequence' below. 7794 Stored in the 'unchanging' field and printed as '/u'. 7795 7796 'INSN_DELETED_P (X)' 7797 In an 'insn', 'call_insn', 'jump_insn', 'code_label', 'barrier', or 7798 'note', nonzero if the insn has been deleted. Stored in the 7799 'volatil' field and printed as '/v'. 7800 7801 'INSN_FROM_TARGET_P (X)' 7802 In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a 7803 branch, indicates that the insn is from the target of the branch. 7804 If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will 7805 only be executed if the branch is taken. For annulled branches 7806 with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if 7807 the branch is not taken. When 'INSN_ANNULLED_BRANCH_P' is not set, 7808 this insn will always be executed. Stored in the 'in_struct' field 7809 and printed as '/s'. 7810 7811 'LABEL_PRESERVE_P (X)' 7812 In a 'code_label' or 'note', indicates that the label is referenced 7813 by code or data not visible to the RTL of a given function. Labels 7814 referenced by a non-local goto will have this bit set. Stored in 7815 the 'in_struct' field and printed as '/s'. 7816 7817 'LABEL_REF_NONLOCAL_P (X)' 7818 In 'label_ref' and 'reg_label' expressions, nonzero if this is a 7819 reference to a non-local label. Stored in the 'volatil' field and 7820 printed as '/v'. 7821 7822 'MEM_KEEP_ALIAS_SET_P (X)' 7823 In 'mem' expressions, 1 if we should keep the alias set for this 7824 mem unchanged when we access a component. Set to 1, for example, 7825 when we are already in a non-addressable component of an aggregate. 7826 Stored in the 'jump' field and printed as '/j'. 7827 7828 'MEM_VOLATILE_P (X)' 7829 In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for 7830 volatile memory references. Stored in the 'volatil' field and 7831 printed as '/v'. 7832 7833 'MEM_NOTRAP_P (X)' 7834 In 'mem', nonzero for memory references that will not trap. Stored 7835 in the 'call' field and printed as '/c'. 7836 7837 'MEM_POINTER (X)' 7838 Nonzero in a 'mem' if the memory reference holds a pointer. Stored 7839 in the 'frame_related' field and printed as '/f'. 7840 7841 'REG_FUNCTION_VALUE_P (X)' 7842 Nonzero in a 'reg' if it is the place in which this function's 7843 value is going to be returned. (This happens only in a hard 7844 register.) Stored in the 'return_val' field and printed as '/i'. 7845 7846 'REG_POINTER (X)' 7847 Nonzero in a 'reg' if the register holds a pointer. Stored in the 7848 'frame_related' field and printed as '/f'. 7849 7850 'REG_USERVAR_P (X)' 7851 In a 'reg', nonzero if it corresponds to a variable present in the 7852 user's source code. Zero for temporaries generated internally by 7853 the compiler. Stored in the 'volatil' field and printed as '/v'. 7854 7855 The same hard register may be used also for collecting the values 7856 of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero 7857 in this kind of use. 7858 7859 'RTX_FRAME_RELATED_P (X)' 7860 Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set' 7861 which is part of a function prologue and sets the stack pointer, 7862 sets the frame pointer, or saves a register. This flag should also 7863 be set on an instruction that sets up a temporary register to use 7864 in place of the frame pointer. Stored in the 'frame_related' field 7865 and printed as '/f'. 7866 7867 In particular, on RISC targets where there are limits on the sizes 7868 of immediate constants, it is sometimes impossible to reach the 7869 register save area directly from the stack pointer. In that case, 7870 a temporary register is used that is near enough to the register 7871 save area, and the Canonical Frame Address, i.e., DWARF2's logical 7872 frame pointer, register must (temporarily) be changed to be this 7873 temporary register. So, the instruction that sets this temporary 7874 register must be marked as 'RTX_FRAME_RELATED_P'. 7875 7876 If the marked instruction is overly complex (defined in terms of 7877 what 'dwarf2out_frame_debug_expr' can handle), you will also have 7878 to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the 7879 instruction. This note should contain a simple expression of the 7880 computation performed by this instruction, i.e., one that 7881 'dwarf2out_frame_debug_expr' can handle. 7882 7883 This flag is required for exception handling support on targets 7884 with RTL prologues. 7885 7886 'MEM_READONLY_P (X)' 7887 Nonzero in a 'mem', if the memory is statically allocated and 7888 read-only. 7889 7890 Read-only in this context means never modified during the lifetime 7891 of the program, not necessarily in ROM or in write-disabled pages. 7892 A common example of the later is a shared library's global offset 7893 table. This table is initialized by the runtime loader, so the 7894 memory is technically writable, but after control is transferred 7895 from the runtime loader to the application, this memory will never 7896 be subsequently modified. 7897 7898 Stored in the 'unchanging' field and printed as '/u'. 7899 7900 'SCHED_GROUP_P (X)' 7901 During instruction scheduling, in an 'insn', 'call_insn' or 7902 'jump_insn', indicates that the previous insn must be scheduled 7903 together with this insn. This is used to ensure that certain 7904 groups of instructions will not be split up by the instruction 7905 scheduling pass, for example, 'use' insns before a 'call_insn' may 7906 not be separated from the 'call_insn'. Stored in the 'in_struct' 7907 field and printed as '/s'. 7908 7909 'SET_IS_RETURN_P (X)' 7910 For a 'set', nonzero if it is for a return. Stored in the 'jump' 7911 field and printed as '/j'. 7912 7913 'SIBLING_CALL_P (X)' 7914 For a 'call_insn', nonzero if the insn is a sibling call. Stored 7915 in the 'jump' field and printed as '/j'. 7916 7917 'STRING_POOL_ADDRESS_P (X)' 7918 For a 'symbol_ref' expression, nonzero if it addresses this 7919 function's string constant pool. Stored in the 'frame_related' 7920 field and printed as '/f'. 7921 7922 'SUBREG_PROMOTED_UNSIGNED_P (X)' 7923 Returns a value greater then zero for a 'subreg' that has 7924 'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 7925 kept zero-extended, zero if it is kept sign-extended, and less then 7926 zero if it is extended some other way via the 'ptr_extend' 7927 instruction. Stored in the 'unchanging' field and 'volatil' field, 7928 printed as '/u' and '/v'. This macro may only be used to get the 7929 value it may not be used to change the value. Use 7930 'SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 7931 7932 'SUBREG_PROMOTED_UNSIGNED_SET (X)' 7933 Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect 7934 zero, sign, or other extension. If 'volatil' is zero, then 7935 'unchanging' as nonzero means zero extension and as zero means sign 7936 extension. If 'volatil' is nonzero then some other type of 7937 extension was done via the 'ptr_extend' instruction. 7938 7939 'SUBREG_PROMOTED_VAR_P (X)' 7940 Nonzero in a 'subreg' if it was made when accessing an object that 7941 was promoted to a wider mode in accord with the 'PROMOTED_MODE' 7942 machine description macro (*note Storage Layout::). In this case, 7943 the mode of the 'subreg' is the declared mode of the object and the 7944 mode of 'SUBREG_REG' is the mode of the register that holds the 7945 object. Promoted variables are always either sign- or 7946 zero-extended to the wider mode on every assignment. Stored in the 7947 'in_struct' field and printed as '/s'. 7948 7949 'SYMBOL_REF_USED (X)' 7950 In a 'symbol_ref', indicates that X has been used. This is 7951 normally only used to ensure that X is only declared external once. 7952 Stored in the 'used' field. 7953 7954 'SYMBOL_REF_WEAK (X)' 7955 In a 'symbol_ref', indicates that X has been declared weak. Stored 7956 in the 'return_val' field and printed as '/i'. 7957 7958 'SYMBOL_REF_FLAG (X)' 7959 In a 'symbol_ref', this is used as a flag for machine-specific 7960 purposes. Stored in the 'volatil' field and printed as '/v'. 7961 7962 Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by 7963 'SYMBOL_REF_FLAGS'. Certainly use of 'SYMBOL_REF_FLAGS' is 7964 mandatory if the target requires more than one bit of storage. 7965 7966 'PREFETCH_SCHEDULE_BARRIER_P (X)' 7967 In a 'prefetch', indicates that the prefetch is a scheduling 7968 barrier. No other INSNs will be moved over it. Stored in the 7969 'volatil' field and printed as '/v'. 7970 7971 These are the fields to which the above macros refer: 7972 7973 'call' 7974 In a 'mem', 1 means that the memory reference will not trap. 7975 7976 In a 'call', 1 means that this pure or const call may possibly 7977 infinite loop. 7978 7979 In an RTL dump, this flag is represented as '/c'. 7980 7981 'frame_related' 7982 In an 'insn' or 'set' expression, 1 means that it is part of a 7983 function prologue and sets the stack pointer, sets the frame 7984 pointer, saves a register, or sets up a temporary register to use 7985 in place of the frame pointer. 7986 7987 In 'reg' expressions, 1 means that the register holds a pointer. 7988 7989 In 'mem' expressions, 1 means that the memory reference holds a 7990 pointer. 7991 7992 In 'symbol_ref' expressions, 1 means that the reference addresses 7993 this function's string constant pool. 7994 7995 In an RTL dump, this flag is represented as '/f'. 7996 7997 'in_struct' 7998 In 'reg' expressions, it is 1 if the register has its entire life 7999 contained within the test expression of some loop. 8000 8001 In 'subreg' expressions, 1 means that the 'subreg' is accessing an 8002 object that has had its mode promoted from a wider mode. 8003 8004 In 'label_ref' expressions, 1 means that the referenced label is 8005 outside the innermost loop containing the insn in which the 8006 'label_ref' was found. 8007 8008 In 'code_label' expressions, it is 1 if the label may never be 8009 deleted. This is used for labels which are the target of non-local 8010 gotos. Such a label that would have been deleted is replaced with 8011 a 'note' of type 'NOTE_INSN_DELETED_LABEL'. 8012 8013 In an 'insn' during dead-code elimination, 1 means that the insn is 8014 dead code. 8015 8016 In an 'insn' or 'jump_insn' during reorg for an insn in the delay 8017 slot of a branch, 1 means that this insn is from the target of the 8018 branch. 8019 8020 In an 'insn' during instruction scheduling, 1 means that this insn 8021 must be scheduled as part of a group together with the previous 8022 insn. 8023 8024 In an RTL dump, this flag is represented as '/s'. 8025 8026 'return_val' 8027 In 'reg' expressions, 1 means the register contains the value to be 8028 returned by the current function. On machines that pass parameters 8029 in registers, the same register number may be used for parameters 8030 as well, but this flag is not set on such uses. 8031 8032 In 'symbol_ref' expressions, 1 means the referenced symbol is weak. 8033 8034 In 'call' expressions, 1 means the call is pure. 8035 8036 In an RTL dump, this flag is represented as '/i'. 8037 8038 'jump' 8039 In a 'mem' expression, 1 means we should keep the alias set for 8040 this mem unchanged when we access a component. 8041 8042 In a 'set', 1 means it is for a return. 8043 8044 In a 'call_insn', 1 means it is a sibling call. 8045 8046 In an RTL dump, this flag is represented as '/j'. 8047 8048 'unchanging' 8049 In 'reg' and 'mem' expressions, 1 means that the value of the 8050 expression never changes. 8051 8052 In 'subreg' expressions, it is 1 if the 'subreg' references an 8053 unsigned object whose mode has been promoted to a wider mode. 8054 8055 In an 'insn' or 'jump_insn' in the delay slot of a branch 8056 instruction, 1 means an annulling branch should be used. 8057 8058 In a 'symbol_ref' expression, 1 means that this symbol addresses 8059 something in the per-function constant pool. 8060 8061 In a 'call_insn' 1 means that this instruction is a call to a const 8062 function. 8063 8064 In an RTL dump, this flag is represented as '/u'. 8065 8066 'used' 8067 This flag is used directly (without an access macro) at the end of 8068 RTL generation for a function, to count the number of times an 8069 expression appears in insns. Expressions that appear more than 8070 once are copied, according to the rules for shared structure (*note 8071 Sharing::). 8072 8073 For a 'reg', it is used directly (without an access macro) by the 8074 leaf register renumbering code to ensure that each register is only 8075 renumbered once. 8076 8077 In a 'symbol_ref', it indicates that an external declaration for 8078 the symbol has already been written. 8079 8080 'volatil' 8081 In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if 8082 the memory reference is volatile. Volatile memory references may 8083 not be deleted, reordered or combined. 8084 8085 In a 'symbol_ref' expression, it is used for machine-specific 8086 purposes. 8087 8088 In a 'reg' expression, it is 1 if the value is a user-level 8089 variable. 0 indicates an internal compiler temporary. 8090 8091 In an 'insn', 1 means the insn has been deleted. 8092 8093 In 'label_ref' and 'reg_label' expressions, 1 means a reference to 8094 a non-local label. 8095 8096 In 'prefetch' expressions, 1 means that the containing insn is a 8097 scheduling barrier. 8098 8099 In an RTL dump, this flag is represented as '/v'. 8100 8101 8102 File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 8103 8104 10.6 Machine Modes 8105 ================== 8106 8107 A machine mode describes a size of data object and the representation 8108 used for it. In the C code, machine modes are represented by an 8109 enumeration type, 'enum machine_mode', defined in 'machmode.def'. Each 8110 RTL expression has room for a machine mode and so do certain kinds of 8111 tree expressions (declarations and types, to be precise). 8112 8113 In debugging dumps and machine descriptions, the machine mode of an RTL 8114 expression is written after the expression code with a colon to separate 8115 them. The letters 'mode' which appear at the end of each machine mode 8116 name are omitted. For example, '(reg:SI 38)' is a 'reg' expression with 8117 machine mode 'SImode'. If the mode is 'VOIDmode', it is not written at 8118 all. 8119 8120 Here is a table of machine modes. The term "byte" below refers to an 8121 object of 'BITS_PER_UNIT' bits (*note Storage Layout::). 8122 8123 'BImode' 8124 "Bit" mode represents a single bit, for predicate registers. 8125 8126 'QImode' 8127 "Quarter-Integer" mode represents a single byte treated as an 8128 integer. 8129 8130 'HImode' 8131 "Half-Integer" mode represents a two-byte integer. 8132 8133 'PSImode' 8134 "Partial Single Integer" mode represents an integer which occupies 8135 four bytes but which doesn't really use all four. On some 8136 machines, this is the right mode to use for pointers. 8137 8138 'SImode' 8139 "Single Integer" mode represents a four-byte integer. 8140 8141 'PDImode' 8142 "Partial Double Integer" mode represents an integer which occupies 8143 eight bytes but which doesn't really use all eight. On some 8144 machines, this is the right mode to use for certain pointers. 8145 8146 'DImode' 8147 "Double Integer" mode represents an eight-byte integer. 8148 8149 'TImode' 8150 "Tetra Integer" (?) mode represents a sixteen-byte integer. 8151 8152 'OImode' 8153 "Octa Integer" (?) mode represents a thirty-two-byte integer. 8154 8155 'QFmode' 8156 "Quarter-Floating" mode represents a quarter-precision (single 8157 byte) floating point number. 8158 8159 'HFmode' 8160 "Half-Floating" mode represents a half-precision (two byte) 8161 floating point number. 8162 8163 'TQFmode' 8164 "Three-Quarter-Floating" (?) mode represents a 8165 three-quarter-precision (three byte) floating point number. 8166 8167 'SFmode' 8168 "Single Floating" mode represents a four byte floating point 8169 number. In the common case, of a processor with IEEE arithmetic 8170 and 8-bit bytes, this is a single-precision IEEE floating point 8171 number; it can also be used for double-precision (on processors 8172 with 16-bit bytes) and single-precision VAX and IBM types. 8173 8174 'DFmode' 8175 "Double Floating" mode represents an eight byte floating point 8176 number. In the common case, of a processor with IEEE arithmetic 8177 and 8-bit bytes, this is a double-precision IEEE floating point 8178 number. 8179 8180 'XFmode' 8181 "Extended Floating" mode represents an IEEE extended floating point 8182 number. This mode only has 80 meaningful bits (ten bytes). Some 8183 processors require such numbers to be padded to twelve bytes, 8184 others to sixteen; this mode is used for either. 8185 8186 'SDmode' 8187 "Single Decimal Floating" mode represents a four byte decimal 8188 floating point number (as distinct from conventional binary 8189 floating point). 8190 8191 'DDmode' 8192 "Double Decimal Floating" mode represents an eight byte decimal 8193 floating point number. 8194 8195 'TDmode' 8196 "Tetra Decimal Floating" mode represents a sixteen byte decimal 8197 floating point number all 128 of whose bits are meaningful. 8198 8199 'TFmode' 8200 "Tetra Floating" mode represents a sixteen byte floating point 8201 number all 128 of whose bits are meaningful. One common use is the 8202 IEEE quad-precision format. 8203 8204 'QQmode' 8205 "Quarter-Fractional" mode represents a single byte treated as a 8206 signed fractional number. The default format is "s.7". 8207 8208 'HQmode' 8209 "Half-Fractional" mode represents a two-byte signed fractional 8210 number. The default format is "s.15". 8211 8212 'SQmode' 8213 "Single Fractional" mode represents a four-byte signed fractional 8214 number. The default format is "s.31". 8215 8216 'DQmode' 8217 "Double Fractional" mode represents an eight-byte signed fractional 8218 number. The default format is "s.63". 8219 8220 'TQmode' 8221 "Tetra Fractional" mode represents a sixteen-byte signed fractional 8222 number. The default format is "s.127". 8223 8224 'UQQmode' 8225 "Unsigned Quarter-Fractional" mode represents a single byte treated 8226 as an unsigned fractional number. The default format is ".8". 8227 8228 'UHQmode' 8229 "Unsigned Half-Fractional" mode represents a two-byte unsigned 8230 fractional number. The default format is ".16". 8231 8232 'USQmode' 8233 "Unsigned Single Fractional" mode represents a four-byte unsigned 8234 fractional number. The default format is ".32". 8235 8236 'UDQmode' 8237 "Unsigned Double Fractional" mode represents an eight-byte unsigned 8238 fractional number. The default format is ".64". 8239 8240 'UTQmode' 8241 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 8242 fractional number. The default format is ".128". 8243 8244 'HAmode' 8245 "Half-Accumulator" mode represents a two-byte signed accumulator. 8246 The default format is "s8.7". 8247 8248 'SAmode' 8249 "Single Accumulator" mode represents a four-byte signed 8250 accumulator. The default format is "s16.15". 8251 8252 'DAmode' 8253 "Double Accumulator" mode represents an eight-byte signed 8254 accumulator. The default format is "s32.31". 8255 8256 'TAmode' 8257 "Tetra Accumulator" mode represents a sixteen-byte signed 8258 accumulator. The default format is "s64.63". 8259 8260 'UHAmode' 8261 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 8262 accumulator. The default format is "8.8". 8263 8264 'USAmode' 8265 "Unsigned Single Accumulator" mode represents a four-byte unsigned 8266 accumulator. The default format is "16.16". 8267 8268 'UDAmode' 8269 "Unsigned Double Accumulator" mode represents an eight-byte 8270 unsigned accumulator. The default format is "32.32". 8271 8272 'UTAmode' 8273 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 8274 unsigned accumulator. The default format is "64.64". 8275 8276 'CCmode' 8277 "Condition Code" mode represents the value of a condition code, 8278 which is a machine-specific set of bits used to represent the 8279 result of a comparison operation. Other machine-specific modes may 8280 also be used for the condition code. These modes are not used on 8281 machines that use 'cc0' (*note Condition Code::). 8282 8283 'BLKmode' 8284 "Block" mode represents values that are aggregates to which none of 8285 the other modes apply. In RTL, only memory references can have 8286 this mode, and only if they appear in string-move or vector 8287 instructions. On machines which have no such instructions, 8288 'BLKmode' will not appear in RTL. 8289 8290 'VOIDmode' 8291 Void mode means the absence of a mode or an unspecified mode. For 8292 example, RTL expressions of code 'const_int' have mode 'VOIDmode' 8293 because they can be taken to have whatever mode the context 8294 requires. In debugging dumps of RTL, 'VOIDmode' is expressed by 8295 the absence of any mode. 8296 8297 'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 8298 These modes stand for a complex number represented as a pair of 8299 floating point values. The floating point values are in 'QFmode', 8300 'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively. 8301 8302 'CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 8303 These modes stand for a complex number represented as a pair of 8304 integer values. The integer values are in 'QImode', 'HImode', 8305 'SImode', 'DImode', 'TImode', and 'OImode', respectively. 8306 8307 The machine description defines 'Pmode' as a C macro which expands into 8308 the machine mode used for addresses. Normally this is the mode whose 8309 size is 'BITS_PER_WORD', 'SImode' on 32-bit machines. 8310 8311 The only modes which a machine description must support are 'QImode', 8312 and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and 8313 'DOUBLE_TYPE_SIZE'. The compiler will attempt to use 'DImode' for 8314 8-byte structures and unions, but this can be prevented by overriding 8315 the definition of 'MAX_FIXED_MODE_SIZE'. Alternatively, you can have 8316 the compiler use 'TImode' for 16-byte structures and unions. Likewise, 8317 you can arrange for the C type 'short int' to avoid using 'HImode'. 8318 8319 Very few explicit references to machine modes remain in the compiler 8320 and these few references will soon be removed. Instead, the machine 8321 modes are divided into mode classes. These are represented by the 8322 enumeration type 'enum mode_class' defined in 'machmode.h'. The 8323 possible mode classes are: 8324 8325 'MODE_INT' 8326 Integer modes. By default these are 'BImode', 'QImode', 'HImode', 8327 'SImode', 'DImode', 'TImode', and 'OImode'. 8328 8329 'MODE_PARTIAL_INT' 8330 The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and 8331 'PDImode'. 8332 8333 'MODE_FLOAT' 8334 Floating point modes. By default these are 'QFmode', 'HFmode', 8335 'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'. 8336 8337 'MODE_DECIMAL_FLOAT' 8338 Decimal floating point modes. By default these are 'SDmode', 8339 'DDmode' and 'TDmode'. 8340 8341 'MODE_FRACT' 8342 Signed fractional modes. By default these are 'QQmode', 'HQmode', 8343 'SQmode', 'DQmode' and 'TQmode'. 8344 8345 'MODE_UFRACT' 8346 Unsigned fractional modes. By default these are 'UQQmode', 8347 'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'. 8348 8349 'MODE_ACCUM' 8350 Signed accumulator modes. By default these are 'HAmode', 'SAmode', 8351 'DAmode' and 'TAmode'. 8352 8353 'MODE_UACCUM' 8354 Unsigned accumulator modes. By default these are 'UHAmode', 8355 'USAmode', 'UDAmode' and 'UTAmode'. 8356 8357 'MODE_COMPLEX_INT' 8358 Complex integer modes. (These are not currently implemented). 8359 8360 'MODE_COMPLEX_FLOAT' 8361 Complex floating point modes. By default these are 'QCmode', 8362 'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'. 8363 8364 'MODE_FUNCTION' 8365 Algol or Pascal function variables including a static chain. 8366 (These are not currently implemented). 8367 8368 'MODE_CC' 8369 Modes representing condition code values. These are 'CCmode' plus 8370 any 'CC_MODE' modes listed in the 'MACHINE-modes.def'. *Note Jump 8371 Patterns::, also see *note Condition Code::. 8372 8373 'MODE_RANDOM' 8374 This is a catchall mode class for modes which don't fit into the 8375 above classes. Currently 'VOIDmode' and 'BLKmode' are in 8376 'MODE_RANDOM'. 8377 8378 Here are some C macros that relate to machine modes: 8379 8380 'GET_MODE (X)' 8381 Returns the machine mode of the RTX X. 8382 8383 'PUT_MODE (X, NEWMODE)' 8384 Alters the machine mode of the RTX X to be NEWMODE. 8385 8386 'NUM_MACHINE_MODES' 8387 Stands for the number of machine modes available on the target 8388 machine. This is one greater than the largest numeric value of any 8389 machine mode. 8390 8391 'GET_MODE_NAME (M)' 8392 Returns the name of mode M as a string. 8393 8394 'GET_MODE_CLASS (M)' 8395 Returns the mode class of mode M. 8396 8397 'GET_MODE_WIDER_MODE (M)' 8398 Returns the next wider natural mode. For example, the expression 8399 'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'. 8400 8401 'GET_MODE_SIZE (M)' 8402 Returns the size in bytes of a datum of mode M. 8403 8404 'GET_MODE_BITSIZE (M)' 8405 Returns the size in bits of a datum of mode M. 8406 8407 'GET_MODE_IBIT (M)' 8408 Returns the number of integral bits of a datum of fixed-point mode 8409 M. 8410 8411 'GET_MODE_FBIT (M)' 8412 Returns the number of fractional bits of a datum of fixed-point 8413 mode M. 8414 8415 'GET_MODE_MASK (M)' 8416 Returns a bitmask containing 1 for all bits in a word that fit 8417 within mode M. This macro can only be used for modes whose bitsize 8418 is less than or equal to 'HOST_BITS_PER_INT'. 8419 8420 'GET_MODE_ALIGNMENT (M)' 8421 Return the required alignment, in bits, for an object of mode M. 8422 8423 'GET_MODE_UNIT_SIZE (M)' 8424 Returns the size in bytes of the subunits of a datum of mode M. 8425 This is the same as 'GET_MODE_SIZE' except in the case of complex 8426 modes. For them, the unit size is the size of the real or 8427 imaginary part. 8428 8429 'GET_MODE_NUNITS (M)' 8430 Returns the number of units contained in a mode, i.e., 8431 'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'. 8432 8433 'GET_CLASS_NARROWEST_MODE (C)' 8434 Returns the narrowest mode in mode class C. 8435 8436 The global variables 'byte_mode' and 'word_mode' contain modes whose 8437 classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or 8438 'BITS_PER_WORD', respectively. On 32-bit machines, these are 'QImode' 8439 and 'SImode', respectively. 8440 8441 8442 File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 8443 8444 10.7 Constant Expression Types 8445 ============================== 8446 8447 The simplest RTL expressions are those that represent constant values. 8448 8449 '(const_int I)' 8450 This type of expression represents the integer value I. I is 8451 customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)', 8452 which is equivalent to 'XWINT (EXP, 0)'. 8453 8454 Constants generated for modes with fewer bits than in 8455 'HOST_WIDE_INT' must be sign extended to full width (e.g., with 8456 'gen_int_mode'). For constants for modes with more bits than in 8457 'HOST_WIDE_INT' the implied high order bits of that constant are 8458 copies of the top bit. Note however that values are neither 8459 inherently signed nor inherently unsigned; where necessary, 8460 signedness is determined by the rtl operation instead. 8461 8462 There is only one expression object for the integer value zero; it 8463 is the value of the variable 'const0_rtx'. Likewise, the only 8464 expression for integer value one is found in 'const1_rtx', the only 8465 expression for integer value two is found in 'const2_rtx', and the 8466 only expression for integer value negative one is found in 8467 'constm1_rtx'. Any attempt to create an expression of code 8468 'const_int' and value zero, one, two or negative one will return 8469 'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as 8470 appropriate. 8471 8472 Similarly, there is only one object for the integer whose value is 8473 'STORE_FLAG_VALUE'. It is found in 'const_true_rtx'. If 8474 'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will 8475 point to the same object. If 'STORE_FLAG_VALUE' is -1, 8476 'const_true_rtx' and 'constm1_rtx' will point to the same object. 8477 8478 '(const_double:M I0 I1 ...)' 8479 Represents either a floating-point constant of mode M or an integer 8480 constant too large to fit into 'HOST_BITS_PER_WIDE_INT' bits but 8481 small enough to fit within twice that number of bits (GCC does not 8482 provide a mechanism to represent even larger constants). In the 8483 latter case, M will be 'VOIDmode'. For integral values constants 8484 for modes with more bits than twice the number in 'HOST_WIDE_INT' 8485 the implied high order bits of that constant are copies of the top 8486 bit of 'CONST_DOUBLE_HIGH'. Note however that integral values are 8487 neither inherently signed nor inherently unsigned; where necessary, 8488 signedness is determined by the rtl operation instead. 8489 8490 If M is 'VOIDmode', the bits of the value are stored in I0 and I1. 8491 I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1 8492 with 'CONST_DOUBLE_HIGH'. 8493 8494 If the constant is floating point (regardless of its precision), 8495 then the number of integers used to store the value depends on the 8496 size of 'REAL_VALUE_TYPE' (*note Floating Point::). The integers 8497 represent a floating point number, but not precisely in the target 8498 machine's or host machine's floating point format. To convert them 8499 to the precise bit pattern used by the target machine, use the 8500 macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 8501 Output::). 8502 8503 '(const_fixed:M ...)' 8504 Represents a fixed-point constant of mode M. The operand is a data 8505 structure of type 'struct fixed_value' and is accessed with the 8506 macro 'CONST_FIXED_VALUE'. The high part of data is accessed with 8507 'CONST_FIXED_VALUE_HIGH'; the low part is accessed with 8508 'CONST_FIXED_VALUE_LOW'. 8509 8510 '(const_vector:M [X0 X1 ...])' 8511 Represents a vector constant. The square brackets stand for the 8512 vector containing the constant elements. X0, X1 and so on are the 8513 'const_int', 'const_double' or 'const_fixed' elements. 8514 8515 The number of units in a 'const_vector' is obtained with the macro 8516 'CONST_VECTOR_NUNITS' as in 'CONST_VECTOR_NUNITS (V)'. 8517 8518 Individual elements in a vector constant are accessed with the 8519 macro 'CONST_VECTOR_ELT' as in 'CONST_VECTOR_ELT (V, N)' where V is 8520 the vector constant and N is the element desired. 8521 8522 '(const_string STR)' 8523 Represents a constant string with value STR. Currently this is 8524 used only for insn attributes (*note Insn Attributes::) since 8525 constant strings in C are placed in memory. 8526 8527 '(symbol_ref:MODE SYMBOL)' 8528 Represents the value of an assembler label for data. SYMBOL is a 8529 string that describes the name of the assembler label. If it 8530 starts with a '*', the label is the rest of SYMBOL not including 8531 the '*'. Otherwise, the label is SYMBOL, usually prefixed with 8532 '_'. 8533 8534 The 'symbol_ref' contains a mode, which is usually 'Pmode'. 8535 Usually that is the only mode for which a symbol is directly valid. 8536 8537 '(label_ref:MODE LABEL)' 8538 Represents the value of an assembler label for code. It contains 8539 one operand, an expression, which must be a 'code_label' or a 8540 'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the 8541 instruction sequence to identify the place where the label should 8542 go. 8543 8544 The reason for using a distinct expression type for code label 8545 references is so that jump optimization can distinguish them. 8546 8547 The 'label_ref' contains a mode, which is usually 'Pmode'. Usually 8548 that is the only mode for which a label is directly valid. 8549 8550 '(const:M EXP)' 8551 Represents a constant that is the result of an assembly-time 8552 arithmetic computation. The operand, EXP, is an expression that 8553 contains only constants ('const_int', 'symbol_ref' and 'label_ref' 8554 expressions) combined with 'plus' and 'minus'. However, not all 8555 combinations are valid, since the assembler cannot do arbitrary 8556 arithmetic on relocatable symbols. 8557 8558 M should be 'Pmode'. 8559 8560 '(high:M EXP)' 8561 Represents the high-order bits of EXP, usually a 'symbol_ref'. The 8562 number of bits is machine-dependent and is normally the number of 8563 bits specified in an instruction that initializes the high order 8564 bits of a register. It is used with 'lo_sum' to represent the 8565 typical two-instruction sequence used in RISC machines to reference 8566 a global memory location. 8567 8568 M should be 'Pmode'. 8569 8570 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in 8571 mode MODE. If mode MODE is of mode class 'MODE_INT', it returns 8572 'const0_rtx'. If mode MODE is of mode class 'MODE_FLOAT', it returns a 8573 'CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 8574 'CONST_VECTOR' expression in mode MODE. Similarly, the macro 8575 'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 8576 and similarly for 'CONST2_RTX'. The 'CONST1_RTX' and 'CONST2_RTX' 8577 macros are undefined for vector modes. 8578 8579 8580 File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 8581 8582 10.8 Registers and Memory 8583 ========================= 8584 8585 Here are the RTL expression types for describing access to machine 8586 registers and to main memory. 8587 8588 '(reg:M N)' 8589 For small values of the integer N (those that are less than 8590 'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 8591 register number N: a "hard register". For larger values of N, it 8592 stands for a temporary value or "pseudo register". The compiler's 8593 strategy is to generate code assuming an unlimited number of such 8594 pseudo registers, and later convert them into hard registers or 8595 into memory references. 8596 8597 M is the machine mode of the reference. It is necessary because 8598 machines can generally refer to each register in more than one 8599 mode. For example, a register may contain a full word but there 8600 may be instructions to refer to it as a half word or as a single 8601 byte, as well as instructions to refer to it as a floating point 8602 number of various precisions. 8603 8604 Even for a register that the machine can access in only one mode, 8605 the mode must always be specified. 8606 8607 The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine 8608 description, since the number of hard registers on the machine is 8609 an invariant characteristic of the machine. Note, however, that 8610 not all of the machine registers must be general registers. All 8611 the machine registers that can be used for storage of data are 8612 given hard register numbers, even those that can be used only in 8613 certain instructions or can hold only certain types of data. 8614 8615 A hard register may be accessed in various modes throughout one 8616 function, but each pseudo register is given a natural mode and is 8617 accessed only in that mode. When it is necessary to describe an 8618 access to a pseudo register using a nonnatural mode, a 'subreg' 8619 expression is used. 8620 8621 A 'reg' expression with a machine mode that specifies more than one 8622 word of data may actually stand for several consecutive registers. 8623 If in addition the register number specifies a hardware register, 8624 then it actually represents several consecutive hardware registers 8625 starting with the specified one. 8626 8627 Each pseudo register number used in a function's RTL code is 8628 represented by a unique 'reg' expression. 8629 8630 Some pseudo register numbers, those within the range of 8631 'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear 8632 during the RTL generation phase and are eliminated before the 8633 optimization phases. These represent locations in the stack frame 8634 that cannot be determined until RTL generation for the function has 8635 been completed. The following virtual register numbers are 8636 defined: 8637 8638 'VIRTUAL_INCOMING_ARGS_REGNUM' 8639 This points to the first word of the incoming arguments passed 8640 on the stack. Normally these arguments are placed there by 8641 the caller, but the callee may have pushed some arguments that 8642 were previously passed in registers. 8643 8644 When RTL generation is complete, this virtual register is 8645 replaced by the sum of the register given by 8646 'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'. 8647 8648 'VIRTUAL_STACK_VARS_REGNUM' 8649 If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 8650 points to immediately above the first variable on the stack. 8651 Otherwise, it points to the first variable on the stack. 8652 8653 'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 8654 register given by 'FRAME_POINTER_REGNUM' and the value 8655 'STARTING_FRAME_OFFSET'. 8656 8657 'VIRTUAL_STACK_DYNAMIC_REGNUM' 8658 This points to the location of dynamically allocated memory on 8659 the stack immediately after the stack pointer has been 8660 adjusted by the amount of memory desired. 8661 8662 This virtual register is replaced by the sum of the register 8663 given by 'STACK_POINTER_REGNUM' and the value 8664 'STACK_DYNAMIC_OFFSET'. 8665 8666 'VIRTUAL_OUTGOING_ARGS_REGNUM' 8667 This points to the location in the stack at which outgoing 8668 arguments should be written when the stack is pre-pushed 8669 (arguments pushed using push insns should always use 8670 'STACK_POINTER_REGNUM'). 8671 8672 This virtual register is replaced by the sum of the register 8673 given by 'STACK_POINTER_REGNUM' and the value 8674 'STACK_POINTER_OFFSET'. 8675 8676 '(subreg:M1 REG:M2 BYTENUM)' 8677 8678 'subreg' expressions are used to refer to a register in a machine 8679 mode other than its natural one, or to refer to one register of a 8680 multi-part 'reg' that actually refers to several registers. 8681 8682 Each pseudo register has a natural mode. If it is necessary to 8683 operate on it in a different mode, the register must be enclosed in 8684 a 'subreg'. 8685 8686 There are currently three supported types for the first operand of 8687 a 'subreg': 8688 * pseudo registers This is the most common case. Most 'subreg's 8689 have pseudo 'reg's as their first operand. 8690 8691 * mem 'subreg's of 'mem' were common in earlier versions of GCC 8692 and are still supported. During the reload pass these are 8693 replaced by plain 'mem's. On machines that do not do 8694 instruction scheduling, use of 'subreg's of 'mem' are still 8695 used, but this is no longer recommended. Such 'subreg's are 8696 considered to be 'register_operand's rather than 8697 'memory_operand's before and during reload. Because of this, 8698 the scheduling passes cannot properly schedule instructions 8699 with 'subreg's of 'mem', so for machines that do scheduling, 8700 'subreg's of 'mem' should never be used. To support this, the 8701 combine and recog passes have explicit code to inhibit the 8702 creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is 8703 defined. 8704 8705 The use of 'subreg's of 'mem' after the reload pass is an area 8706 that is not well understood and should be avoided. There is 8707 still some code in the compiler to support this, but this code 8708 has possibly rotted. This use of 'subreg's is discouraged and 8709 will most likely not be supported in the future. 8710 8711 * hard registers It is seldom necessary to wrap hard registers 8712 in 'subreg's; such registers would normally reduce to a single 8713 'reg' rtx. This use of 'subreg's is discouraged and may not 8714 be supported in the future. 8715 8716 'subreg's of 'subreg's are not supported. Using 8717 'simplify_gen_subreg' is the recommended way to avoid this problem. 8718 8719 'subreg's come in two distinct flavors, each having its own usage 8720 and rules: 8721 8722 Paradoxical subregs 8723 When M1 is strictly wider than M2, the 'subreg' expression is 8724 called "paradoxical". The canonical test for this class of 8725 'subreg' is: 8726 8727 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2) 8728 8729 Paradoxical 'subreg's can be used as both lvalues and rvalues. 8730 When used as an lvalue, the low-order bits of the source value 8731 are stored in REG and the high-order bits are discarded. When 8732 used as an rvalue, the low-order bits of the 'subreg' are 8733 taken from REG while the high-order bits may or may not be 8734 defined. 8735 8736 The high-order bits of rvalues are in the following 8737 circumstances: 8738 8739 * 'subreg's of 'mem' When M2 is smaller than a word, the 8740 macro 'LOAD_EXTEND_OP', can control how the high-order 8741 bits are defined. 8742 8743 * 'subreg' of 'reg's The upper bits are defined when 8744 'SUBREG_PROMOTED_VAR_P' is true. 8745 'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 8746 bits hold. Such subregs usually represent local 8747 variables, register variables and parameter pseudo 8748 variables that have been promoted to a wider mode. 8749 8750 BYTENUM is always zero for a paradoxical 'subreg', even on 8751 big-endian targets. 8752 8753 For example, the paradoxical 'subreg': 8754 8755 (set (subreg:SI (reg:HI X) 0) Y) 8756 8757 stores the lower 2 bytes of Y in X and discards the upper 2 8758 bytes. A subsequent: 8759 8760 (set Z (subreg:SI (reg:HI X) 0)) 8761 8762 would set the lower two bytes of Z to Y and set the upper two 8763 bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is 8764 false. 8765 8766 Normal subregs 8767 When M1 is at least as narrow as M2 the 'subreg' expression is 8768 called "normal". 8769 8770 Normal 'subreg's restrict consideration to certain bits of 8771 REG. There are two cases. If M1 is smaller than a word, the 8772 'subreg' refers to the least-significant part (or "lowpart") 8773 of one word of REG. If M1 is word-sized or greater, the 8774 'subreg' refers to one or more complete words. 8775 8776 When used as an lvalue, 'subreg' is a word-based accessor. 8777 Storing to a 'subreg' modifies all the words of REG that 8778 overlap the 'subreg', but it leaves the other words of REG 8779 alone. 8780 8781 When storing to a normal 'subreg' that is smaller than a word, 8782 the other bits of the referenced word are usually left in an 8783 undefined state. This laxity makes it easier to generate 8784 efficient code for such instructions. To represent an 8785 instruction that preserves all the bits outside of those in 8786 the 'subreg', use 'strict_low_part' or 'zero_extract' around 8787 the 'subreg'. 8788 8789 BYTENUM must identify the offset of the first byte of the 8790 'subreg' from the start of REG, assuming that REG is laid out 8791 in memory order. The memory order of bytes is defined by two 8792 target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN': 8793 8794 * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number 8795 zero is part of the most significant word; otherwise, it 8796 is part of the least significant word. 8797 8798 * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number 8799 zero is the most significant byte within a word; 8800 otherwise, it is the least significant byte within a 8801 word. 8802 8803 On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with 8804 'WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 8805 floating point values as if they had the same endianness as 8806 integer values. This works because they handle them solely as 8807 a collection of integer values, with no particular numerical 8808 value. Only real.c and the runtime libraries care about 8809 'FLOAT_WORDS_BIG_ENDIAN'. 8810 8811 Thus, 8812 8813 (subreg:HI (reg:SI X) 2) 8814 8815 on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the 8816 same as 8817 8818 (subreg:HI (reg:SI X) 0) 8819 8820 on a little-endian, 'UNITS_PER_WORD == 4' target. Both 8821 'subreg's access the lower two bytes of register X. 8822 8823 A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the 8824 corresponding 'MODE_INT' mode, except that it has an unknown number 8825 of undefined bits. For example: 8826 8827 (subreg:PSI (reg:SI 0) 0) 8828 8829 accesses the whole of '(reg:SI 0)', but the exact relationship 8830 between the 'PSImode' value and the 'SImode' value is not defined. 8831 If we assume 'UNITS_PER_WORD <= 4', then the following two 8832 'subreg's: 8833 8834 (subreg:PSI (reg:DI 0) 0) 8835 (subreg:PSI (reg:DI 0) 4) 8836 8837 represent independent 4-byte accesses to the two halves of '(reg:DI 8838 0)'. Both 'subreg's have an unknown number of undefined bits. 8839 8840 If 'UNITS_PER_WORD <= 2' then these two 'subreg's: 8841 8842 (subreg:HI (reg:PSI 0) 0) 8843 (subreg:HI (reg:PSI 0) 2) 8844 8845 represent independent 2-byte accesses that together span the whole 8846 of '(reg:PSI 0)'. Storing to the first 'subreg' does not affect 8847 the value of the second, and vice versa. '(reg:PSI 0)' has an 8848 unknown number of undefined bits, so the assignment: 8849 8850 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 8851 8852 does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value 8853 '(reg:HI 4)'. 8854 8855 The rules above apply to both pseudo REGs and hard REGs. If the 8856 semantics are not correct for particular combinations of M1, M2 and 8857 hard REG, the target-specific code must ensure that those 8858 combinations are never used. For example: 8859 8860 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS) 8861 8862 must be true for every class CLASS that includes REG. 8863 8864 The first operand of a 'subreg' expression is customarily accessed 8865 with the 'SUBREG_REG' macro and the second operand is customarily 8866 accessed with the 'SUBREG_BYTE' macro. 8867 8868 It has been several years since a platform in which 8869 'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested. 8870 Anyone wishing to support such a platform in the future may be 8871 confronted with code rot. 8872 8873 '(scratch:M)' 8874 This represents a scratch register that will be required for the 8875 execution of a single instruction and not used subsequently. It is 8876 converted into a 'reg' by either the local register allocator or 8877 the reload pass. 8878 8879 'scratch' is usually present inside a 'clobber' operation (*note 8880 Side Effects::). 8881 8882 '(cc0)' 8883 This refers to the machine's condition code register. It has no 8884 operands and may not have a machine mode. There are two ways to 8885 use it: 8886 8887 * To stand for a complete set of condition code flags. This is 8888 best on most machines, where each comparison sets the entire 8889 series of flags. 8890 8891 With this technique, '(cc0)' may be validly used in only two 8892 contexts: as the destination of an assignment (in test and 8893 compare instructions) and in comparison operators comparing 8894 against zero ('const_int' with value zero; that is to say, 8895 'const0_rtx'). 8896 8897 * To stand for a single flag that is the result of a single 8898 condition. This is useful on machines that have only a single 8899 flag bit, and in which comparison instructions must specify 8900 the condition to test. 8901 8902 With this technique, '(cc0)' may be validly used in only two 8903 contexts: as the destination of an assignment (in test and 8904 compare instructions) where the source is a comparison 8905 operator, and as the first operand of 'if_then_else' (in a 8906 conditional branch). 8907 8908 There is only one expression object of code 'cc0'; it is the value 8909 of the variable 'cc0_rtx'. Any attempt to create an expression of 8910 code 'cc0' will return 'cc0_rtx'. 8911 8912 Instructions can set the condition code implicitly. On many 8913 machines, nearly all instructions set the condition code based on 8914 the value that they compute or store. It is not necessary to 8915 record these actions explicitly in the RTL because the machine 8916 description includes a prescription for recognizing the 8917 instructions that do so (by means of the macro 'NOTICE_UPDATE_CC'). 8918 *Note Condition Code::. Only instructions whose sole purpose is to 8919 set the condition code, and instructions that use the condition 8920 code, need mention '(cc0)'. 8921 8922 On some machines, the condition code register is given a register 8923 number and a 'reg' is used instead of '(cc0)'. This is usually the 8924 preferable approach if only a small subset of instructions modify 8925 the condition code. Other machines store condition codes in 8926 general registers; in such cases a pseudo register should be used. 8927 8928 Some machines, such as the SPARC and RS/6000, have two sets of 8929 arithmetic instructions, one that sets and one that does not set 8930 the condition code. This is best handled by normally generating 8931 the instruction that does not set the condition code, and making a 8932 pattern that both performs the arithmetic and sets the condition 8933 code register (which would not be '(cc0)' in this case). For 8934 examples, search for 'addcc' and 'andcc' in 'sparc.md'. 8935 8936 '(pc)' 8937 This represents the machine's program counter. It has no operands 8938 and may not have a machine mode. '(pc)' may be validly used only 8939 in certain specific contexts in jump instructions. 8940 8941 There is only one expression object of code 'pc'; it is the value 8942 of the variable 'pc_rtx'. Any attempt to create an expression of 8943 code 'pc' will return 'pc_rtx'. 8944 8945 All instructions that do not jump alter the program counter 8946 implicitly by incrementing it, but there is no need to mention this 8947 in the RTL. 8948 8949 '(mem:M ADDR ALIAS)' 8950 This RTX represents a reference to main memory at an address 8951 represented by the expression ADDR. M specifies how large a unit 8952 of memory is accessed. ALIAS specifies an alias set for the 8953 reference. In general two items are in different alias sets if 8954 they cannot reference the same memory address. 8955 8956 The construct '(mem:BLK (scratch))' is considered to alias all 8957 other memories. Thus it may be used as a memory barrier in 8958 epilogue stack deallocation patterns. 8959 8960 '(concatM RTX RTX)' 8961 This RTX represents the concatenation of two other RTXs. This is 8962 used for complex values. It should only appear in the RTL attached 8963 to declarations and during RTL generation. It should not appear in 8964 the ordinary insn chain. 8965 8966 '(concatnM [RTX ...])' 8967 This RTX represents the concatenation of all the RTX to make a 8968 single value. Like 'concat', this should only appear in 8969 declarations, and not in the insn chain. 8970 8971 8972 File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 8973 8974 10.9 RTL Expressions for Arithmetic 8975 =================================== 8976 8977 Unless otherwise specified, all the operands of arithmetic expressions 8978 must be valid for mode M. An operand is valid for mode M if it has mode 8979 M, or if it is a 'const_int' or 'const_double' and M is a mode of class 8980 'MODE_INT'. 8981 8982 For commutative binary operations, constants should be placed in the 8983 second operand. 8984 8985 '(plus:M X Y)' 8986 '(ss_plus:M X Y)' 8987 '(us_plus:M X Y)' 8988 8989 These three expressions all represent the sum of the values 8990 represented by X and Y carried out in machine mode M. They differ 8991 in their behavior on overflow of integer modes. 'plus' wraps round 8992 modulo the width of M; 'ss_plus' saturates at the maximum signed 8993 value representable in M; 'us_plus' saturates at the maximum 8994 unsigned value. 8995 8996 '(lo_sum:M X Y)' 8997 8998 This expression represents the sum of X and the low-order bits of 8999 Y. It is used with 'high' (*note Constants::) to represent the 9000 typical two-instruction sequence used in RISC machines to reference 9001 a global memory location. 9002 9003 The number of low order bits is machine-dependent but is normally 9004 the number of bits in a 'Pmode' item minus the number of bits set 9005 by 'high'. 9006 9007 M should be 'Pmode'. 9008 9009 '(minus:M X Y)' 9010 '(ss_minus:M X Y)' 9011 '(us_minus:M X Y)' 9012 9013 These three expressions represent the result of subtracting Y from 9014 X, carried out in mode M. Behavior on overflow is the same as for 9015 the three variants of 'plus' (see above). 9016 9017 '(compare:M X Y)' 9018 Represents the result of subtracting Y from X for purposes of 9019 comparison. The result is computed without overflow, as if with 9020 infinite precision. 9021 9022 Of course, machines can't really subtract with infinite precision. 9023 However, they can pretend to do so when only the sign of the result 9024 will be used, which is the case when the result is stored in the 9025 condition code. And that is the _only_ way this kind of expression 9026 may validly be used: as a value to be stored in the condition 9027 codes, either '(cc0)' or a register. *Note Comparisons::. 9028 9029 The mode M is not related to the modes of X and Y, but instead is 9030 the mode of the condition code value. If '(cc0)' is used, it is 9031 'VOIDmode'. Otherwise it is some mode in class 'MODE_CC', often 9032 'CCmode'. *Note Condition Code::. If M is 'VOIDmode' or 'CCmode', 9033 the operation returns sufficient information (in an unspecified 9034 format) so that any comparison operator can be applied to the 9035 result of the 'COMPARE' operation. For other modes in class 9036 'MODE_CC', the operation only returns a subset of this information. 9037 9038 Normally, X and Y must have the same mode. Otherwise, 'compare' is 9039 valid only if the mode of X is in class 'MODE_INT' and Y is a 9040 'const_int' or 'const_double' with mode 'VOIDmode'. The mode of X 9041 determines what mode the comparison is to be done in; thus it must 9042 not be 'VOIDmode'. 9043 9044 If one of the operands is a constant, it should be placed in the 9045 second operand and the comparison code adjusted as appropriate. 9046 9047 A 'compare' specifying two 'VOIDmode' constants is not valid since 9048 there is no way to know in what mode the comparison is to be 9049 performed; the comparison must either be folded during the 9050 compilation or the first operand must be loaded into a register 9051 while its mode is still known. 9052 9053 '(neg:M X)' 9054 '(ss_neg:M X)' 9055 '(us_neg:M X)' 9056 These two expressions represent the negation (subtraction from 9057 zero) of the value represented by X, carried out in mode M. They 9058 differ in the behavior on overflow of integer modes. In the case 9059 of 'neg', the negation of the operand may be a number not 9060 representable in mode M, in which case it is truncated to M. 9061 'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates 9062 to the maximum or minimum signed or unsigned value. 9063 9064 '(mult:M X Y)' 9065 '(ss_mult:M X Y)' 9066 '(us_mult:M X Y)' 9067 Represents the signed product of the values represented by X and Y 9068 carried out in machine mode M. 'ss_mult' and 'us_mult' ensure that 9069 an out-of-bounds result saturates to the maximum or minimum signed 9070 or unsigned value. 9071 9072 Some machines support a multiplication that generates a product 9073 wider than the operands. Write the pattern for this as 9074 9075 (mult:M (sign_extend:M X) (sign_extend:M Y)) 9076 9077 where M is wider than the modes of X and Y, which need not be the 9078 same. 9079 9080 For unsigned widening multiplication, use the same idiom, but with 9081 'zero_extend' instead of 'sign_extend'. 9082 9083 '(fma:M X Y Z)' 9084 Represents the 'fma', 'fmaf', and 'fmal' builtin functions that do 9085 a combined multiply of X and Y and then adding toZ without doing an 9086 intermediate rounding step. 9087 9088 '(div:M X Y)' 9089 '(ss_div:M X Y)' 9090 Represents the quotient in signed division of X by Y, carried out 9091 in machine mode M. If M is a floating point mode, it represents 9092 the exact quotient; otherwise, the integerized quotient. 'ss_div' 9093 ensures that an out-of-bounds result saturates to the maximum or 9094 minimum signed value. 9095 9096 Some machines have division instructions in which the operands and 9097 quotient widths are not all the same; you should represent such 9098 instructions using 'truncate' and 'sign_extend' as in, 9099 9100 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 9101 9102 '(udiv:M X Y)' 9103 '(us_div:M X Y)' 9104 Like 'div' but represents unsigned division. 'us_div' ensures that 9105 an out-of-bounds result saturates to the maximum or minimum 9106 unsigned value. 9107 9108 '(mod:M X Y)' 9109 '(umod:M X Y)' 9110 Like 'div' and 'udiv' but represent the remainder instead of the 9111 quotient. 9112 9113 '(smin:M X Y)' 9114 '(smax:M X Y)' 9115 Represents the smaller (for 'smin') or larger (for 'smax') of X and 9116 Y, interpreted as signed values in mode M. When used with floating 9117 point, if both operands are zeros, or if either operand is 'NaN', 9118 then it is unspecified which of the two operands is returned as the 9119 result. 9120 9121 '(umin:M X Y)' 9122 '(umax:M X Y)' 9123 Like 'smin' and 'smax', but the values are interpreted as unsigned 9124 integers. 9125 9126 '(not:M X)' 9127 Represents the bitwise complement of the value represented by X, 9128 carried out in mode M, which must be a fixed-point machine mode. 9129 9130 '(and:M X Y)' 9131 Represents the bitwise logical-and of the values represented by X 9132 and Y, carried out in machine mode M, which must be a fixed-point 9133 machine mode. 9134 9135 '(ior:M X Y)' 9136 Represents the bitwise inclusive-or of the values represented by X 9137 and Y, carried out in machine mode M, which must be a fixed-point 9138 mode. 9139 9140 '(xor:M X Y)' 9141 Represents the bitwise exclusive-or of the values represented by X 9142 and Y, carried out in machine mode M, which must be a fixed-point 9143 mode. 9144 9145 '(ashift:M X C)' 9146 '(ss_ashift:M X C)' 9147 '(us_ashift:M X C)' 9148 These three expressions represent the result of arithmetically 9149 shifting X left by C places. They differ in their behavior on 9150 overflow of integer modes. An 'ashift' operation is a plain shift 9151 with no special behavior in case of a change in the sign bit; 9152 'ss_ashift' and 'us_ashift' saturates to the minimum or maximum 9153 representable value if any of the bits shifted out differs from the 9154 final sign bit. 9155 9156 X have mode M, a fixed-point machine mode. C be a fixed-point mode 9157 or be a constant with mode 'VOIDmode'; which mode is determined by 9158 the mode called for in the machine description entry for the 9159 left-shift instruction. For example, on the VAX, the mode of C is 9160 'QImode' regardless of M. 9161 9162 '(lshiftrt:M X C)' 9163 '(ashiftrt:M X C)' 9164 Like 'ashift' but for right shift. Unlike the case for left shift, 9165 these two operations are distinct. 9166 9167 '(rotate:M X C)' 9168 '(rotatert:M X C)' 9169 Similar but represent left and right rotate. If C is a constant, 9170 use 'rotate'. 9171 9172 '(abs:M X)' 9173 '(ss_abs:M X)' 9174 Represents the absolute value of X, computed in mode M. 'ss_abs' 9175 ensures that an out-of-bounds result saturates to the maximum 9176 signed value. 9177 9178 '(sqrt:M X)' 9179 Represents the square root of X, computed in mode M. Most often M 9180 will be a floating point mode. 9181 9182 '(ffs:M X)' 9183 Represents one plus the index of the least significant 1-bit in X, 9184 represented as an integer of mode M. (The value is zero if X is 9185 zero.) The mode of X must be M or 'VOIDmode'. 9186 9187 '(clrsb:M X)' 9188 Represents the number of redundant leading sign bits in X, 9189 represented as an integer of mode M, starting at the most 9190 significant bit position. This is one less than the number of 9191 leading sign bits (either 0 or 1), with no special cases. The mode 9192 of X must be M or 'VOIDmode'. 9193 9194 '(clz:M X)' 9195 Represents the number of leading 0-bits in X, represented as an 9196 integer of mode M, starting at the most significant bit position. 9197 If X is zero, the value is determined by 9198 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 9199 of the few expressions that is not invariant under widening. The 9200 mode of X must be M or 'VOIDmode'. 9201 9202 '(ctz:M X)' 9203 Represents the number of trailing 0-bits in X, represented as an 9204 integer of mode M, starting at the least significant bit position. 9205 If X is zero, the value is determined by 9206 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 9207 'ctz(x)' is equivalent to 'ffs(X) - 1'. The mode of X must be M or 9208 'VOIDmode'. 9209 9210 '(popcount:M X)' 9211 Represents the number of 1-bits in X, represented as an integer of 9212 mode M. The mode of X must be M or 'VOIDmode'. 9213 9214 '(parity:M X)' 9215 Represents the number of 1-bits modulo 2 in X, represented as an 9216 integer of mode M. The mode of X must be M or 'VOIDmode'. 9217 9218 '(bswap:M X)' 9219 Represents the value X with the order of bytes reversed, carried 9220 out in mode M, which must be a fixed-point machine mode. The mode 9221 of X must be M or 'VOIDmode'. 9222 9223 9224 File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 9225 9226 10.10 Comparison Operations 9227 =========================== 9228 9229 Comparison operators test a relation on two operands and are considered 9230 to represent a machine-dependent nonzero value described by, but not 9231 necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation 9232 holds, or zero if it does not, for comparison operators whose results 9233 have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 9234 relation holds, or zero if it does not, for comparison operators that 9235 return floating-point values, and a vector of either 9236 'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 9237 zeros if it does not, for comparison operators that return vector 9238 results. The mode of the comparison operation is independent of the 9239 mode of the data being compared. If the comparison operation is being 9240 tested (e.g., the first operand of an 'if_then_else'), the mode must be 9241 'VOIDmode'. 9242 9243 There are two ways that comparison operations may be used. The 9244 comparison operators may be used to compare the condition codes '(cc0)' 9245 against zero, as in '(eq (cc0) (const_int 0))'. Such a construct 9246 actually refers to the result of the preceding instruction in which the 9247 condition codes were set. The instruction setting the condition code 9248 must be adjacent to the instruction using the condition code; only 9249 'note' insns may separate them. 9250 9251 Alternatively, a comparison operation may directly compare two data 9252 objects. The mode of the comparison is determined by the operands; they 9253 must both be valid for a common machine mode. A comparison with both 9254 operands constant would be invalid as the machine mode could not be 9255 deduced from it, but such a comparison should never exist in RTL due to 9256 constant folding. 9257 9258 In the example above, if '(cc0)' were last set to '(compare X Y)', the 9259 comparison operation is identical to '(eq X Y)'. Usually only one style 9260 of comparisons is supported on a particular machine, but the combine 9261 pass will try to merge the operations to produce the 'eq' shown in case 9262 it exists in the context of the particular insn involved. 9263 9264 Inequality comparisons come in two flavors, signed and unsigned. Thus, 9265 there are distinct expression codes 'gt' and 'gtu' for signed and 9266 unsigned greater-than. These can produce different results for the same 9267 pair of integer values: for example, 1 is signed greater-than -1 but not 9268 unsigned greater-than, because -1 when regarded as unsigned is actually 9269 '0xffffffff' which is greater than 1. 9270 9271 The signed comparisons are also used for floating point values. 9272 Floating point comparisons are distinguished by the machine modes of the 9273 operands. 9274 9275 '(eq:M X Y)' 9276 'STORE_FLAG_VALUE' if the values represented by X and Y are equal, 9277 otherwise 0. 9278 9279 '(ne:M X Y)' 9280 'STORE_FLAG_VALUE' if the values represented by X and Y are not 9281 equal, otherwise 0. 9282 9283 '(gt:M X Y)' 9284 'STORE_FLAG_VALUE' if the X is greater than Y. If they are 9285 fixed-point, the comparison is done in a signed sense. 9286 9287 '(gtu:M X Y)' 9288 Like 'gt' but does unsigned comparison, on fixed-point numbers 9289 only. 9290 9291 '(lt:M X Y)' 9292 '(ltu:M X Y)' 9293 Like 'gt' and 'gtu' but test for "less than". 9294 9295 '(ge:M X Y)' 9296 '(geu:M X Y)' 9297 Like 'gt' and 'gtu' but test for "greater than or equal". 9298 9299 '(le:M X Y)' 9300 '(leu:M X Y)' 9301 Like 'gt' and 'gtu' but test for "less than or equal". 9302 9303 '(if_then_else COND THEN ELSE)' 9304 This is not a comparison operation but is listed here because it is 9305 always used in conjunction with a comparison operation. To be 9306 precise, COND is a comparison expression. This expression 9307 represents a choice, according to COND, between the value 9308 represented by THEN and the one represented by ELSE. 9309 9310 On most machines, 'if_then_else' expressions are valid only to 9311 express conditional jumps. 9312 9313 '(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 9314 Similar to 'if_then_else', but more general. Each of TEST1, TEST2, 9315 ... is performed in turn. The result of this expression is the 9316 VALUE corresponding to the first nonzero test, or DEFAULT if none 9317 of the tests are nonzero expressions. 9318 9319 This is currently not valid for instruction patterns and is 9320 supported only for insn attributes. *Note Insn Attributes::. 9321 9322 9323 File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 9324 9325 10.11 Bit-Fields 9326 ================ 9327 9328 Special expression codes exist to represent bit-field instructions. 9329 9330 '(sign_extract:M LOC SIZE POS)' 9331 This represents a reference to a sign-extended bit-field contained 9332 or starting in LOC (a memory or register reference). The bit-field 9333 is SIZE bits wide and starts at bit POS. The compilation option 9334 'BITS_BIG_ENDIAN' says which end of the memory unit POS counts 9335 from. 9336 9337 If LOC is in memory, its mode must be a single-byte integer mode. 9338 If LOC is in a register, the mode to use is specified by the 9339 operand of the 'insv' or 'extv' pattern (*note Standard Names::) 9340 and is usually a full-word integer mode, which is the default if 9341 none is specified. 9342 9343 The mode of POS is machine-specific and is also specified in the 9344 'insv' or 'extv' pattern. 9345 9346 The mode M is the same as the mode that would be used for LOC if it 9347 were a register. 9348 9349 A 'sign_extract' can not appear as an lvalue, or part thereof, in 9350 RTL. 9351 9352 '(zero_extract:M LOC SIZE POS)' 9353 Like 'sign_extract' but refers to an unsigned or zero-extended 9354 bit-field. The same sequence of bits are extracted, but they are 9355 filled to an entire word with zeros instead of by sign-extension. 9356 9357 Unlike 'sign_extract', this type of expressions can be lvalues in 9358 RTL; they may appear on the left side of an assignment, indicating 9359 insertion of a value into the specified bit-field. 9360 9361 9362 File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 9363 9364 10.12 Vector Operations 9365 ======================= 9366 9367 All normal RTL expressions can be used with vector modes; they are 9368 interpreted as operating on each part of the vector independently. 9369 Additionally, there are a few new expressions to describe specific 9370 vector operations. 9371 9372 '(vec_merge:M VEC1 VEC2 ITEMS)' 9373 This describes a merge operation between two vectors. The result 9374 is a vector of mode M; its elements are selected from either VEC1 9375 or VEC2. Which elements are selected is described by ITEMS, which 9376 is a bit mask represented by a 'const_int'; a zero bit indicates 9377 the corresponding element in the result vector is taken from VEC2 9378 while a set bit indicates it is taken from VEC1. 9379 9380 '(vec_select:M VEC1 SELECTION)' 9381 This describes an operation that selects parts of a vector. VEC1 9382 is the source vector, and SELECTION is a 'parallel' that contains a 9383 'const_int' for each of the subparts of the result vector, giving 9384 the number of the source subpart that should be stored into it. 9385 The result mode M is either the submode for a single element of 9386 VEC1 (if only one subpart is selected), or another vector mode with 9387 that element submode (if multiple subparts are selected). 9388 9389 '(vec_concat:M X1 X2)' 9390 Describes a vector concat operation. The result is a concatenation 9391 of the vectors or scalars X1 and X2; its length is the sum of the 9392 lengths of the two inputs. 9393 9394 '(vec_duplicate:M X)' 9395 This operation converts a scalar into a vector or a small vector 9396 into a larger one by duplicating the input values. The output 9397 vector mode must have the same submodes as the input vector mode or 9398 the scalar modes, and the number of output parts must be an integer 9399 multiple of the number of input parts. 9400 9401 9402 File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 9403 9404 10.13 Conversions 9405 ================= 9406 9407 All conversions between machine modes must be represented by explicit 9408 conversion operations. For example, an expression which is the sum of a 9409 byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI 9410 80))' because the 'plus' operation requires two operands of the same 9411 machine mode. Therefore, the byte-sized operand is enclosed in a 9412 conversion operation, as in 9413 9414 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 9415 9416 The conversion operation is not a mere placeholder, because there may 9417 be more than one way of converting from a given starting mode to the 9418 desired final mode. The conversion operation code says how to do it. 9419 9420 For all conversion operations, X must not be 'VOIDmode' because the 9421 mode in which to do the conversion would not be known. The conversion 9422 must either be done at compile-time or X must be placed into a register. 9423 9424 '(sign_extend:M X)' 9425 Represents the result of sign-extending the value X to machine mode 9426 M. M must be a fixed-point mode and X a fixed-point value of a 9427 mode narrower than M. 9428 9429 '(zero_extend:M X)' 9430 Represents the result of zero-extending the value X to machine mode 9431 M. M must be a fixed-point mode and X a fixed-point value of a 9432 mode narrower than M. 9433 9434 '(float_extend:M X)' 9435 Represents the result of extending the value X to machine mode M. 9436 M must be a floating point mode and X a floating point value of a 9437 mode narrower than M. 9438 9439 '(truncate:M X)' 9440 Represents the result of truncating the value X to machine mode M. 9441 M must be a fixed-point mode and X a fixed-point value of a mode 9442 wider than M. 9443 9444 '(ss_truncate:M X)' 9445 Represents the result of truncating the value X to machine mode M, 9446 using signed saturation in the case of overflow. Both M and the 9447 mode of X must be fixed-point modes. 9448 9449 '(us_truncate:M X)' 9450 Represents the result of truncating the value X to machine mode M, 9451 using unsigned saturation in the case of overflow. Both M and the 9452 mode of X must be fixed-point modes. 9453 9454 '(float_truncate:M X)' 9455 Represents the result of truncating the value X to machine mode M. 9456 M must be a floating point mode and X a floating point value of a 9457 mode wider than M. 9458 9459 '(float:M X)' 9460 Represents the result of converting fixed point value X, regarded 9461 as signed, to floating point mode M. 9462 9463 '(unsigned_float:M X)' 9464 Represents the result of converting fixed point value X, regarded 9465 as unsigned, to floating point mode M. 9466 9467 '(fix:M X)' 9468 When M is a floating-point mode, represents the result of 9469 converting floating point value X (valid for mode M) to an integer, 9470 still represented in floating point mode M, by rounding towards 9471 zero. 9472 9473 When M is a fixed-point mode, represents the result of converting 9474 floating point value X to mode M, regarded as signed. How rounding 9475 is done is not specified, so this operation may be used validly in 9476 compiling C code only for integer-valued operands. 9477 9478 '(unsigned_fix:M X)' 9479 Represents the result of converting floating point value X to fixed 9480 point mode M, regarded as unsigned. How rounding is done is not 9481 specified. 9482 9483 '(fract_convert:M X)' 9484 Represents the result of converting fixed-point value X to 9485 fixed-point mode M, signed integer value X to fixed-point mode M, 9486 floating-point value X to fixed-point mode M, fixed-point value X 9487 to integer mode M regarded as signed, or fixed-point value X to 9488 floating-point mode M. When overflows or underflows happen, the 9489 results are undefined. 9490 9491 '(sat_fract:M X)' 9492 Represents the result of converting fixed-point value X to 9493 fixed-point mode M, signed integer value X to fixed-point mode M, 9494 or floating-point value X to fixed-point mode M. When overflows or 9495 underflows happen, the results are saturated to the maximum or the 9496 minimum. 9497 9498 '(unsigned_fract_convert:M X)' 9499 Represents the result of converting fixed-point value X to integer 9500 mode M regarded as unsigned, or unsigned integer value X to 9501 fixed-point mode M. When overflows or underflows happen, the 9502 results are undefined. 9503 9504 '(unsigned_sat_fract:M X)' 9505 Represents the result of converting unsigned integer value X to 9506 fixed-point mode M. When overflows or underflows happen, the 9507 results are saturated to the maximum or the minimum. 9508 9509 9510 File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 9511 9512 10.14 Declarations 9513 ================== 9514 9515 Declaration expression codes do not represent arithmetic operations but 9516 rather state assertions about their operands. 9517 9518 '(strict_low_part (subreg:M (reg:N R) 0))' 9519 This expression code is used in only one context: as the 9520 destination operand of a 'set' expression. In addition, the 9521 operand of this expression must be a non-paradoxical 'subreg' 9522 expression. 9523 9524 The presence of 'strict_low_part' says that the part of the 9525 register which is meaningful in mode N, but is not part of mode M, 9526 is not to be altered. Normally, an assignment to such a subreg is 9527 allowed to have undefined effects on the rest of the register when 9528 M is less than a word. 9529 9530 9531 File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 9532 9533 10.15 Side Effect Expressions 9534 ============================= 9535 9536 The expression codes described so far represent values, not actions. 9537 But machine instructions never produce values; they are meaningful only 9538 for their side effects on the state of the machine. Special expression 9539 codes are used to represent side effects. 9540 9541 The body of an instruction is always one of these side effect codes; 9542 the codes described above, which represent values, appear only as the 9543 operands of these. 9544 9545 '(set LVAL X)' 9546 Represents the action of storing the value of X into the place 9547 represented by LVAL. LVAL must be an expression representing a 9548 place that can be stored in: 'reg' (or 'subreg', 'strict_low_part' 9549 or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'. 9550 9551 If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then 9552 X must be valid for that mode. 9553 9554 If LVAL is a 'reg' whose machine mode is less than the full width 9555 of the register, then it means that the part of the register 9556 specified by the machine mode is given the specified value and the 9557 rest of the register receives an undefined value. Likewise, if 9558 LVAL is a 'subreg' whose machine mode is narrower than the mode of 9559 the register, the rest of the register can be changed in an 9560 undefined way. 9561 9562 If LVAL is a 'strict_low_part' of a subreg, then the part of the 9563 register specified by the machine mode of the 'subreg' is given the 9564 value X and the rest of the register is not changed. 9565 9566 If LVAL is a 'zero_extract', then the referenced part of the 9567 bit-field (a memory or register reference) specified by the 9568 'zero_extract' is given the value X and the rest of the bit-field 9569 is not changed. Note that 'sign_extract' can not appear in LVAL. 9570 9571 If LVAL is '(cc0)', it has no machine mode, and X may be either a 9572 'compare' expression or a value that may have any mode. The latter 9573 case represents a "test" instruction. The expression '(set (cc0) 9574 (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N) 9575 (const_int 0)))'. Use the former expression to save space during 9576 the compilation. 9577 9578 If LVAL is a 'parallel', it is used to represent the case of a 9579 function returning a structure in multiple registers. Each element 9580 of the 'parallel' is an 'expr_list' whose first operand is a 'reg' 9581 and whose second operand is a 'const_int' representing the offset 9582 (in bytes) into the structure at which the data in that register 9583 corresponds. The first element may be null to indicate that the 9584 structure is also passed partly in memory. 9585 9586 If LVAL is '(pc)', we have a jump instruction, and the 9587 possibilities for X are very limited. It may be a 'label_ref' 9588 expression (unconditional jump). It may be an 'if_then_else' 9589 (conditional jump), in which case either the second or the third 9590 operand must be '(pc)' (for the case which does not jump) and the 9591 other of the two must be a 'label_ref' (for the case which does 9592 jump). X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be 9593 a 'reg' or a 'mem'; these unusual patterns are used to represent 9594 jumps through branch tables. 9595 9596 If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be 9597 'VOIDmode' and the mode of X must be valid for the mode of LVAL. 9598 9599 LVAL is customarily accessed with the 'SET_DEST' macro and X with 9600 the 'SET_SRC' macro. 9601 9602 '(return)' 9603 As the sole expression in a pattern, represents a return from the 9604 current function, on machines where this can be done with one 9605 instruction, such as VAXen. On machines where a multi-instruction 9606 "epilogue" must be executed in order to return from the function, 9607 returning is done by jumping to a label which precedes the 9608 epilogue, and the 'return' expression code is never used. 9609 9610 Inside an 'if_then_else' expression, represents the value to be 9611 placed in 'pc' to return to the caller. 9612 9613 Note that an insn pattern of '(return)' is logically equivalent to 9614 '(set (pc) (return))', but the latter form is never used. 9615 9616 '(simple_return)' 9617 Like '(return)', but truly represents only a function return, while 9618 '(return)' may represent an insn that also performs other functions 9619 of the function epilogue. Like '(return)', this may also occur in 9620 conditional jumps. 9621 9622 '(call FUNCTION NARGS)' 9623 Represents a function call. FUNCTION is a 'mem' expression whose 9624 address is the address of the function to be called. NARGS is an 9625 expression which can be used for two purposes: on some machines it 9626 represents the number of bytes of stack argument; on others, it 9627 represents the number of argument registers. 9628 9629 Each machine has a standard machine mode which FUNCTION must have. 9630 The machine description defines macro 'FUNCTION_MODE' to expand 9631 into the requisite mode name. The purpose of this mode is to 9632 specify what kind of addressing is allowed, on machines where the 9633 allowed kinds of addressing depend on the machine mode being 9634 addressed. 9635 9636 '(clobber X)' 9637 Represents the storing or possible storing of an unpredictable, 9638 undescribed value into X, which must be a 'reg', 'scratch', 9639 'parallel' or 'mem' expression. 9640 9641 One place this is used is in string instructions that store 9642 standard values into particular hard registers. It may not be 9643 worth the trouble to describe the values that are stored, but it is 9644 essential to inform the compiler that the registers will be 9645 altered, lest it attempt to keep data in them across the string 9646 instruction. 9647 9648 If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it 9649 means that all memory locations must be presumed clobbered. If X 9650 is a 'parallel', it has the same meaning as a 'parallel' in a 'set' 9651 expression. 9652 9653 Note that the machine description classifies certain hard registers 9654 as "call-clobbered". All function call instructions are assumed by 9655 default to clobber these registers, so there is no need to use 9656 'clobber' expressions to indicate this fact. Also, each function 9657 call is assumed to have the potential to alter any memory location, 9658 unless the function is declared 'const'. 9659 9660 If the last group of expressions in a 'parallel' are each a 9661 'clobber' expression whose arguments are 'reg' or 'match_scratch' 9662 (*note RTL Template::) expressions, the combiner phase can add the 9663 appropriate 'clobber' expressions to an insn it has constructed 9664 when doing so will cause a pattern to be matched. 9665 9666 This feature can be used, for example, on a machine that whose 9667 multiply and add instructions don't use an MQ register but which 9668 has an add-accumulate instruction that does clobber the MQ 9669 register. Similarly, a combined instruction might require a 9670 temporary register while the constituent instructions might not. 9671 9672 When a 'clobber' expression for a register appears inside a 9673 'parallel' with other side effects, the register allocator 9674 guarantees that the register is unoccupied both before and after 9675 that insn if it is a hard register clobber. For pseudo-register 9676 clobber, the register allocator and the reload pass do not assign 9677 the same hard register to the clobber and the input operands if 9678 there is an insn alternative containing the '&' constraint (*note 9679 Modifiers::) for the clobber and the hard register is in register 9680 classes of the clobber in the alternative. You can clobber either 9681 a specific hard register, a pseudo register, or a 'scratch' 9682 expression; in the latter two cases, GCC will allocate a hard 9683 register that is available there for use as a temporary. 9684 9685 For instructions that require a temporary register, you should use 9686 'scratch' instead of a pseudo-register because this will allow the 9687 combiner phase to add the 'clobber' when required. You do this by 9688 coding ('clobber' ('match_scratch' ...)). If you do clobber a 9689 pseudo register, use one which appears nowhere else--generate a new 9690 one each time. Otherwise, you may confuse CSE. 9691 9692 There is one other known use for clobbering a pseudo register in a 9693 'parallel': when one of the input operands of the insn is also 9694 clobbered by the insn. In this case, using the same pseudo 9695 register in the clobber and elsewhere in the insn produces the 9696 expected results. 9697 9698 '(use X)' 9699 Represents the use of the value of X. It indicates that the value 9700 in X at this point in the program is needed, even though it may not 9701 be apparent why this is so. Therefore, the compiler will not 9702 attempt to delete previous instructions whose only effect is to 9703 store a value in X. X must be a 'reg' expression. 9704 9705 In some situations, it may be tempting to add a 'use' of a register 9706 in a 'parallel' to describe a situation where the value of a 9707 special register will modify the behavior of the instruction. A 9708 hypothetical example might be a pattern for an addition that can 9709 either wrap around or use saturating addition depending on the 9710 value of a special control register: 9711 9712 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 9713 (reg:SI 4)] 0)) 9714 (use (reg:SI 1))]) 9715 9716 This will not work, several of the optimizers only look at 9717 expressions locally; it is very likely that if you have multiple 9718 insns with identical inputs to the 'unspec', they will be optimized 9719 away even if register 1 changes in between. 9720 9721 This means that 'use' can _only_ be used to describe that the 9722 register is live. You should think twice before adding 'use' 9723 statements, more often you will want to use 'unspec' instead. The 9724 'use' RTX is most commonly useful to describe that a fixed register 9725 is implicitly used in an insn. It is also safe to use in patterns 9726 where the compiler knows for other reasons that the result of the 9727 whole pattern is variable, such as 'movmemM' or 'call' patterns. 9728 9729 During the reload phase, an insn that has a 'use' as pattern can 9730 carry a reg_equal note. These 'use' insns will be deleted before 9731 the reload phase exits. 9732 9733 During the delayed branch scheduling phase, X may be an insn. This 9734 indicates that X previously was located at this place in the code 9735 and its data dependencies need to be taken into account. These 9736 'use' insns will be deleted before the delayed branch scheduling 9737 phase exits. 9738 9739 '(parallel [X0 X1 ...])' 9740 Represents several side effects performed in parallel. The square 9741 brackets stand for a vector; the operand of 'parallel' is a vector 9742 of expressions. X0, X1 and so on are individual side effect 9743 expressions--expressions of code 'set', 'call', 'return', 9744 'simple_return', 'clobber' or 'use'. 9745 9746 "In parallel" means that first all the values used in the 9747 individual side-effects are computed, and second all the actual 9748 side-effects are performed. For example, 9749 9750 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 9751 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 9752 9753 says unambiguously that the values of hard register 1 and the 9754 memory location addressed by it are interchanged. In both places 9755 where '(reg:SI 1)' appears as a memory address it refers to the 9756 value in register 1 _before_ the execution of the insn. 9757 9758 It follows that it is _incorrect_ to use 'parallel' and expect the 9759 result of one 'set' to be available for the next one. For example, 9760 people sometimes attempt to represent a jump-if-zero instruction 9761 this way: 9762 9763 (parallel [(set (cc0) (reg:SI 34)) 9764 (set (pc) (if_then_else 9765 (eq (cc0) (const_int 0)) 9766 (label_ref ...) 9767 (pc)))]) 9768 9769 But this is incorrect, because it says that the jump condition 9770 depends on the condition code value _before_ this instruction, not 9771 on the new value that is set by this instruction. 9772 9773 Peephole optimization, which takes place together with final 9774 assembly code output, can produce insns whose patterns consist of a 9775 'parallel' whose elements are the operands needed to output the 9776 resulting assembler code--often 'reg', 'mem' or constant 9777 expressions. This would not be well-formed RTL at any other stage 9778 in compilation, but it is ok then because no further optimization 9779 remains to be done. However, the definition of the macro 9780 'NOTICE_UPDATE_CC', if any, must deal with such insns if you define 9781 any peephole optimizations. 9782 9783 '(cond_exec [COND EXPR])' 9784 Represents a conditionally executed expression. The EXPR is 9785 executed only if the COND is nonzero. The COND expression must not 9786 have side-effects, but the EXPR may very well have side-effects. 9787 9788 '(sequence [INSNS ...])' 9789 Represents a sequence of insns. Each of the INSNS that appears in 9790 the vector is suitable for appearing in the chain of insns, so it 9791 must be an 'insn', 'jump_insn', 'call_insn', 'code_label', 9792 'barrier' or 'note'. 9793 9794 A 'sequence' RTX is never placed in an actual insn during RTL 9795 generation. It represents the sequence of insns that result from a 9796 'define_expand' _before_ those insns are passed to 'emit_insn' to 9797 insert them in the chain of insns. When actually inserted, the 9798 individual sub-insns are separated out and the 'sequence' is 9799 forgotten. 9800 9801 After delay-slot scheduling is completed, an insn and all the insns 9802 that reside in its delay slots are grouped together into a 9803 'sequence'. The insn requiring the delay slot is the first insn in 9804 the vector; subsequent insns are to be placed in the delay slot. 9805 9806 'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 9807 indicate that a branch insn should be used that will conditionally 9808 annul the effect of the insns in the delay slots. In such a case, 9809 'INSN_FROM_TARGET_P' indicates that the insn is from the target of 9810 the branch and should be executed only if the branch is taken; 9811 otherwise the insn should be executed only if the branch is not 9812 taken. *Note Delay Slots::. 9813 9814 These expression codes appear in place of a side effect, as the body of 9815 an insn, though strictly speaking they do not always describe side 9816 effects as such: 9817 9818 '(asm_input S)' 9819 Represents literal assembler code as described by the string S. 9820 9821 '(unspec [OPERANDS ...] INDEX)' 9822 '(unspec_volatile [OPERANDS ...] INDEX)' 9823 Represents a machine-specific operation on OPERANDS. INDEX selects 9824 between multiple machine-specific operations. 'unspec_volatile' is 9825 used for volatile operations and operations that may trap; 'unspec' 9826 is used for other operations. 9827 9828 These codes may appear inside a 'pattern' of an insn, inside a 9829 'parallel', or inside an expression. 9830 9831 '(addr_vec:M [LR0 LR1 ...])' 9832 Represents a table of jump addresses. The vector elements LR0, 9833 etc., are 'label_ref' expressions. The mode M specifies how much 9834 space is given to each address; normally M would be 'Pmode'. 9835 9836 '(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 9837 Represents a table of jump addresses expressed as offsets from 9838 BASE. The vector elements LR0, etc., are 'label_ref' expressions 9839 and so is BASE. The mode M specifies how much space is given to 9840 each address-difference. MIN and MAX are set up by branch 9841 shortening and hold a label with a minimum and a maximum address, 9842 respectively. FLAGS indicates the relative position of BASE, MIN 9843 and MAX to the containing insn and of MIN and MAX to BASE. See 9844 rtl.def for details. 9845 9846 '(prefetch:M ADDR RW LOCALITY)' 9847 Represents prefetch of memory at address ADDR. Operand RW is 1 if 9848 the prefetch is for data to be written, 0 otherwise; targets that 9849 do not support write prefetches should treat this as a normal 9850 prefetch. Operand LOCALITY specifies the amount of temporal 9851 locality; 0 if there is none or 1, 2, or 3 for increasing levels of 9852 temporal locality; targets that do not support locality hints 9853 should ignore this. 9854 9855 This insn is used to minimize cache-miss latency by moving data 9856 into a cache before it is accessed. It should use only 9857 non-faulting data prefetch instructions. 9858 9859 9860 File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 9861 9862 10.16 Embedded Side-Effects on Addresses 9863 ======================================== 9864 9865 Six special side-effect expression codes appear as memory addresses. 9866 9867 '(pre_dec:M X)' 9868 Represents the side effect of decrementing X by a standard amount 9869 and represents also the value that X has after being decremented. 9870 X must be a 'reg' or 'mem', but most machines allow only a 'reg'. 9871 M must be the machine mode for pointers on the machine in use. The 9872 amount X is decremented by is the length in bytes of the machine 9873 mode of the containing memory reference of which this expression 9874 serves as the address. Here is an example of its use: 9875 9876 (mem:DF (pre_dec:SI (reg:SI 39))) 9877 9878 This says to decrement pseudo register 39 by the length of a 9879 'DFmode' value and use the result to address a 'DFmode' value. 9880 9881 '(pre_inc:M X)' 9882 Similar, but specifies incrementing X instead of decrementing it. 9883 9884 '(post_dec:M X)' 9885 Represents the same side effect as 'pre_dec' but a different value. 9886 The value represented here is the value X has before being 9887 decremented. 9888 9889 '(post_inc:M X)' 9890 Similar, but specifies incrementing X instead of decrementing it. 9891 9892 '(post_modify:M X Y)' 9893 9894 Represents the side effect of setting X to Y and represents X 9895 before X is modified. X must be a 'reg' or 'mem', but most 9896 machines allow only a 'reg'. M must be the machine mode for 9897 pointers on the machine in use. 9898 9899 The expression Y must be one of three forms: '(plus:M X Z)', 9900 '(minus:M X Z)', or '(plus:M X I)', where Z is an index register 9901 and I is a constant. 9902 9903 Here is an example of its use: 9904 9905 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 9906 (reg:SI 48)))) 9907 9908 This says to modify pseudo register 42 by adding the contents of 9909 pseudo register 48 to it, after the use of what ever 42 points to. 9910 9911 '(pre_modify:M X EXPR)' 9912 Similar except side effects happen before the use. 9913 9914 These embedded side effect expressions must be used with care. 9915 Instruction patterns may not use them. Until the 'flow' pass of the 9916 compiler, they may occur only to represent pushes onto the stack. The 9917 'flow' pass finds cases where registers are incremented or decremented 9918 in one instruction and used as an address shortly before or after; these 9919 cases are then transformed to use pre- or post-increment or -decrement. 9920 9921 If a register used as the operand of these expressions is used in 9922 another address in an insn, the original value of the register is used. 9923 Uses of the register outside of an address are not permitted within the 9924 same insn as a use in an embedded side effect expression because such 9925 insns behave differently on different machines and hence must be treated 9926 as ambiguous and disallowed. 9927 9928 An instruction that can be represented with an embedded side effect 9929 could also be represented using 'parallel' containing an additional 9930 'set' to describe how the address register is altered. This is not done 9931 because machines that allow these operations at all typically allow them 9932 wherever a memory address is called for. Describing them as additional 9933 parallel stores would require doubling the number of entries in the 9934 machine description. 9935 9936 9937 File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 9938 9939 10.17 Assembler Instructions as Expressions 9940 =========================================== 9941 9942 The RTX code 'asm_operands' represents a value produced by a 9943 user-specified assembler instruction. It is used to represent an 'asm' 9944 statement with arguments. An 'asm' statement with a single output 9945 operand, like this: 9946 9947 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 9948 9949 is represented using a single 'asm_operands' RTX which represents the 9950 value that is stored in 'outputvar': 9951 9952 (set RTX-FOR-OUTPUTVAR 9953 (asm_operands "foo %1,%2,%0" "a" 0 9954 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 9955 [(asm_input:M1 "g") 9956 (asm_input:M2 "di")])) 9957 9958 Here the operands of the 'asm_operands' RTX are the assembler template 9959 string, the output-operand's constraint, the index-number of the output 9960 operand among the output operands specified, a vector of input operand 9961 RTX's, and a vector of input-operand modes and constraints. The mode M1 9962 is the mode of the sum 'x+y'; M2 is that of '*z'. 9963 9964 When an 'asm' statement has multiple output values, its insn has 9965 several such 'set' RTX's inside of a 'parallel'. Each 'set' contains an 9966 'asm_operands'; all of these share the same assembler template and 9967 vectors, but each contains the constraint for the respective output 9968 operand. They are also distinguished by the output-operand index 9969 number, which is 0, 1, ... for successive output operands. 9970 9971 9972 File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 9973 9974 10.18 Variable Location Debug Information in RTL 9975 ================================================ 9976 9977 Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to 9978 determine what user variables memory and register references refer to. 9979 9980 Variable tracking at assignments uses these notes only when they refer 9981 to variables that live at fixed locations (e.g., addressable variables, 9982 global non-automatic variables). For variables whose location may vary, 9983 it relies on the following types of notes. 9984 9985 '(var_location:MODE VAR EXP STAT)' 9986 Binds variable 'var', a tree, to value EXP, an RTL expression. It 9987 appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with 9988 slightly different meanings. MODE, if present, represents the mode 9989 of EXP, which is useful if it is a modeless expression. STAT is 9990 only meaningful in notes, indicating whether the variable is known 9991 to be initialized or uninitialized. 9992 9993 '(debug_expr:MODE DECL)' 9994 Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that 9995 points back to it, within value expressions in 'VAR_LOCATION' 9996 nodes. 9997 9998 9999 File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 10000 10001 10.19 Insns 10002 =========== 10003 10004 The RTL representation of the code for a function is a doubly-linked 10005 chain of objects called "insns". Insns are expressions with special 10006 codes that are used for no other purpose. Some insns are actual 10007 instructions; others represent dispatch tables for 'switch' statements; 10008 others represent labels to jump to or various sorts of declarative 10009 information. 10010 10011 In addition to its own specific data, each insn must have a unique 10012 id-number that distinguishes it from all other insns in the current 10013 function (after delayed branch scheduling, copies of an insn with the 10014 same id-number may be present in multiple places in a function, but 10015 these copies will always be identical and will only appear inside a 10016 'sequence'), and chain pointers to the preceding and following insns. 10017 These three fields occupy the same position in every insn, independent 10018 of the expression code of the insn. They could be accessed with 'XEXP' 10019 and 'XINT', but instead three special macros are always used: 10020 10021 'INSN_UID (I)' 10022 Accesses the unique id of insn I. 10023 10024 'PREV_INSN (I)' 10025 Accesses the chain pointer to the insn preceding I. If I is the 10026 first insn, this is a null pointer. 10027 10028 'NEXT_INSN (I)' 10029 Accesses the chain pointer to the insn following I. If I is the 10030 last insn, this is a null pointer. 10031 10032 The first insn in the chain is obtained by calling 'get_insns'; the 10033 last insn is the result of calling 'get_last_insn'. Within the chain 10034 delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must 10035 always correspond: if INSN is not the first insn, 10036 10037 NEXT_INSN (PREV_INSN (INSN)) == INSN 10038 10039 is always true and if INSN is not the last insn, 10040 10041 PREV_INSN (NEXT_INSN (INSN)) == INSN 10042 10043 is always true. 10044 10045 After delay slot scheduling, some of the insns in the chain might be 10046 'sequence' expressions, which contain a vector of insns. The value of 10047 'NEXT_INSN' in all but the last of these insns is the next insn in the 10048 vector; the value of 'NEXT_INSN' of the last insn in the vector is the 10049 same as the value of 'NEXT_INSN' for the 'sequence' in which it is 10050 contained. Similar rules apply for 'PREV_INSN'. 10051 10052 This means that the above invariants are not necessarily true for insns 10053 inside 'sequence' expressions. Specifically, if INSN is the first insn 10054 in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing 10055 the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN 10056 (INSN))' if INSN is the last insn in the 'sequence' expression. You can 10057 use these expressions to find the containing 'sequence' expression. 10058 10059 Every insn has one of the following expression codes: 10060 10061 'insn' 10062 The expression code 'insn' is used for instructions that do not 10063 jump and do not do function calls. 'sequence' expressions are 10064 always contained in insns with code 'insn' even if one of those 10065 insns should jump or do function calls. 10066 10067 Insns with code 'insn' have four additional fields beyond the three 10068 mandatory ones listed above. These four are described in a table 10069 below. 10070 10071 'jump_insn' 10072 The expression code 'jump_insn' is used for instructions that may 10073 jump (or, more generally, may contain 'label_ref' expressions to 10074 which 'pc' can be set in that instruction). If there is an 10075 instruction to return from the current function, it is recorded as 10076 a 'jump_insn'. 10077 10078 'jump_insn' insns have the same extra fields as 'insn' insns, 10079 accessed in the same way and in addition contain a field 10080 'JUMP_LABEL' which is defined once jump optimization has completed. 10081 10082 For simple conditional and unconditional jumps, this field contains 10083 the 'code_label' to which this insn will (possibly conditionally) 10084 branch. In a more complex jump, 'JUMP_LABEL' records one of the 10085 labels that the insn refers to; other jump target labels are 10086 recorded as 'REG_LABEL_TARGET' notes. The exception is 'addr_vec' 10087 and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only 10088 way to find the labels is to scan the entire body of the insn. 10089 10090 Return insns count as jumps, but since they do not refer to any 10091 labels, their 'JUMP_LABEL' is 'NULL_RTX'. 10092 10093 'call_insn' 10094 The expression code 'call_insn' is used for instructions that may 10095 do function calls. It is important to distinguish these 10096 instructions because they imply that certain registers and memory 10097 locations may be altered unpredictably. 10098 10099 'call_insn' insns have the same extra fields as 'insn' insns, 10100 accessed in the same way and in addition contain a field 10101 'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 10102 'expr_list' expressions) containing 'use', 'clobber' and sometimes 10103 'set' expressions that denote hard registers and 'mem's used or 10104 clobbered by the called function. 10105 10106 A 'mem' generally points to a stack slot in which arguments passed 10107 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 10108 Register Arguments.) are stored. If the argument is caller-copied 10109 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 10110 will be mentioned in 'clobber' and 'use' entries; if it's 10111 callee-copied, only a 'use' will appear, and the 'mem' may point to 10112 addresses that are not stack slots. 10113 10114 Registers occurring inside a 'clobber' in this list augment 10115 registers specified in 'CALL_USED_REGISTERS' (*note Register 10116 Basics::). 10117 10118 If the list contains a 'set' involving two registers, it indicates 10119 that the function returns one of its arguments. Such a 'set' may 10120 look like a no-op if the same register holds the argument and the 10121 return value. 10122 10123 'code_label' 10124 A 'code_label' insn represents a label that a jump insn can jump 10125 to. It contains two special fields of data in addition to the 10126 three standard ones. 'CODE_LABEL_NUMBER' is used to hold the 10127 "label number", a number that identifies this label uniquely among 10128 all the labels in the compilation (not just in the current 10129 function). Ultimately, the label is represented in the assembler 10130 output as an assembler label, usually of the form 'LN' where N is 10131 the label number. 10132 10133 When a 'code_label' appears in an RTL expression, it normally 10134 appears within a 'label_ref' which represents the address of the 10135 label, as a number. 10136 10137 Besides as a 'code_label', a label can also be represented as a 10138 'note' of type 'NOTE_INSN_DELETED_LABEL'. 10139 10140 The field 'LABEL_NUSES' is only defined once the jump optimization 10141 phase is completed. It contains the number of times this label is 10142 referenced in the current function. 10143 10144 The field 'LABEL_KIND' differentiates four different types of 10145 labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY', 10146 and 'LABEL_WEAK_ENTRY'. The only labels that do not have type 10147 'LABEL_NORMAL' are "alternate entry points" to the current 10148 function. These may be static (visible only in the containing 10149 translation unit), global (exposed to all translation units), or 10150 weak (global, but can be overridden by another symbol with the same 10151 name). 10152 10153 Much of the compiler treats all four kinds of label identically. 10154 Some of it needs to know whether or not a label is an alternate 10155 entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is 10156 provided. It is equivalent to testing whether 'LABEL_KIND (label) 10157 == LABEL_NORMAL'. The only place that cares about the distinction 10158 between static, global, and weak alternate entry points, besides 10159 the front-end code that creates them, is the function 10160 'output_alternate_entry_point', in 'final.c'. 10161 10162 To set the kind of a label, use the 'SET_LABEL_KIND' macro. 10163 10164 'barrier' 10165 Barriers are placed in the instruction stream when control cannot 10166 flow past them. They are placed after unconditional jump 10167 instructions to indicate that the jumps are unconditional and after 10168 calls to 'volatile' functions, which do not return (e.g., 'exit'). 10169 They contain no information beyond the three standard fields. 10170 10171 'note' 10172 'note' insns are used to represent additional debugging and 10173 declarative information. They contain two nonstandard fields, an 10174 integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a 10175 string accessed with 'NOTE_SOURCE_FILE'. 10176 10177 If 'NOTE_LINE_NUMBER' is positive, the note represents the position 10178 of a source line and 'NOTE_SOURCE_FILE' is the source file name 10179 that the line came from. These notes control generation of line 10180 number data in the assembler output. 10181 10182 Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a 10183 code with one of the following values (and 'NOTE_SOURCE_FILE' must 10184 contain a null pointer): 10185 10186 'NOTE_INSN_DELETED' 10187 Such a note is completely ignorable. Some passes of the 10188 compiler delete insns by altering them into notes of this 10189 kind. 10190 10191 'NOTE_INSN_DELETED_LABEL' 10192 This marks what used to be a 'code_label', but was not used 10193 for other purposes than taking its address and was transformed 10194 to mark that no code jumps to it. 10195 10196 'NOTE_INSN_BLOCK_BEG' 10197 'NOTE_INSN_BLOCK_END' 10198 These types of notes indicate the position of the beginning 10199 and end of a level of scoping of variable names. They control 10200 the output of debugging information. 10201 10202 'NOTE_INSN_EH_REGION_BEG' 10203 'NOTE_INSN_EH_REGION_END' 10204 These types of notes indicate the position of the beginning 10205 and end of a level of scoping for exception handling. 10206 'NOTE_BLOCK_NUMBER' identifies which 'CODE_LABEL' or 'note' of 10207 type 'NOTE_INSN_DELETED_LABEL' is associated with the given 10208 region. 10209 10210 'NOTE_INSN_LOOP_BEG' 10211 'NOTE_INSN_LOOP_END' 10212 These types of notes indicate the position of the beginning 10213 and end of a 'while' or 'for' loop. They enable the loop 10214 optimizer to find loops quickly. 10215 10216 'NOTE_INSN_LOOP_CONT' 10217 Appears at the place in a loop that 'continue' statements jump 10218 to. 10219 10220 'NOTE_INSN_LOOP_VTOP' 10221 This note indicates the place in a loop where the exit test 10222 begins for those loops in which the exit test has been 10223 duplicated. This position becomes another virtual start of 10224 the loop when considering loop invariants. 10225 10226 'NOTE_INSN_FUNCTION_BEG' 10227 Appears at the start of the function body, after the function 10228 prologue. 10229 10230 'NOTE_INSN_VAR_LOCATION' 10231 This note is used to generate variable location debugging 10232 information. It indicates that the user variable in its 10233 'VAR_LOCATION' operand is at the location given in the RTL 10234 expression, or holds a value that can be computed by 10235 evaluating the RTL expression from that static point in the 10236 program up to the next such note for the same user variable. 10237 10238 These codes are printed symbolically when they appear in debugging 10239 dumps. 10240 10241 'debug_insn' 10242 The expression code 'debug_insn' is used for pseudo-instructions 10243 that hold debugging information for variable tracking at 10244 assignments (see '-fvar-tracking-assignments' option). They are 10245 the RTL representation of 'GIMPLE_DEBUG' statements (*note 10246 'GIMPLE_DEBUG'::), with a 'VAR_LOCATION' operand that binds a user 10247 variable tree to an RTL representation of the 'value' in the 10248 corresponding statement. A 'DEBUG_EXPR' in it stands for the value 10249 bound to the corresponding 'DEBUG_EXPR_DECL'. 10250 10251 Throughout optimization passes, binding information is kept in 10252 pseudo-instruction form, so that, unlike notes, it gets the same 10253 treatment and adjustments that regular instructions would. It is 10254 the variable tracking pass that turns these pseudo-instructions 10255 into var location notes, analyzing control flow, value equivalences 10256 and changes to registers and memory referenced in value 10257 expressions, propagating the values of debug temporaries and 10258 determining expressions that can be used to compute the value of 10259 each user variable at as many points (ranges, actually) in the 10260 program as possible. 10261 10262 Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an 10263 'INSN_VAR_LOCATION' denotes a value at that specific point in the 10264 program, rather than an expression that can be evaluated at any 10265 later point before an overriding 'VAR_LOCATION' is encountered. 10266 E.g., if a user variable is bound to a 'REG' and then a subsequent 10267 insn modifies the 'REG', the note location would keep mapping the 10268 user variable to the register across the insn, whereas the insn 10269 location would keep the variable bound to the value, so that the 10270 variable tracking pass would emit another location note for the 10271 variable at the point in which the register is modified. 10272 10273 The machine mode of an insn is normally 'VOIDmode', but some phases use 10274 the mode for various purposes. 10275 10276 The common subexpression elimination pass sets the mode of an insn to 10277 'QImode' when it is the first insn in a block that has already been 10278 processed. 10279 10280 The second Haifa scheduling pass, for targets that can multiple issue, 10281 sets the mode of an insn to 'TImode' when it is believed that the 10282 instruction begins an issue group. That is, when the instruction cannot 10283 issue simultaneously with the previous. This may be relied on by later 10284 passes, in particular machine-dependent reorg. 10285 10286 Here is a table of the extra fields of 'insn', 'jump_insn' and 10287 'call_insn' insns: 10288 10289 'PATTERN (I)' 10290 An expression for the side effect performed by this insn. This 10291 must be one of the following codes: 'set', 'call', 'use', 10292 'clobber', 'return', 'simple_return', 'asm_input', 'asm_output', 10293 'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec', 10294 'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'. If it 10295 is a 'parallel', each element of the 'parallel' must be one these 10296 codes, except that 'parallel' expressions cannot be nested and 10297 'addr_vec' and 'addr_diff_vec' are not permitted inside a 10298 'parallel' expression. 10299 10300 'INSN_CODE (I)' 10301 An integer that says which pattern in the machine description 10302 matches this insn, or -1 if the matching has not yet been 10303 attempted. 10304 10305 Such matching is never attempted and this field remains -1 on an 10306 insn whose pattern consists of a single 'use', 'clobber', 10307 'asm_input', 'addr_vec' or 'addr_diff_vec' expression. 10308 10309 Matching is also never attempted on insns that result from an 'asm' 10310 statement. These contain at least one 'asm_operands' expression. 10311 The function 'asm_noperands' returns a non-negative value for such 10312 insns. 10313 10314 In the debugging output, this field is printed as a number followed 10315 by a symbolic representation that locates the pattern in the 'md' 10316 file as some small positive or negative offset from a named 10317 pattern. 10318 10319 'LOG_LINKS (I)' 10320 A list (chain of 'insn_list' expressions) giving information about 10321 dependencies between instructions within a basic block. Neither a 10322 jump nor a label may come between the related insns. These are 10323 only used by the schedulers and by combine. This is a deprecated 10324 data structure. Def-use and use-def chains are now preferred. 10325 10326 'REG_NOTES (I)' 10327 A list (chain of 'expr_list' and 'insn_list' expressions) giving 10328 miscellaneous information about the insn. It is often information 10329 pertaining to the registers used in this insn. 10330 10331 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions. 10332 Each of these has two operands: the first is an insn, and the second is 10333 another 'insn_list' expression (the next one in the chain). The last 10334 'insn_list' in the chain has a null pointer as second operand. The 10335 significant thing about the chain is which insns appear in it (as first 10336 operands of 'insn_list' expressions). Their order is not significant. 10337 10338 This list is originally set up by the flow analysis pass; it is a null 10339 pointer until then. Flow only adds links for those data dependencies 10340 which can be used for instruction combination. For each insn, the flow 10341 analysis pass adds a link to insns which store into registers values 10342 that are used for the first time in this insn. 10343 10344 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS' 10345 field but it includes 'expr_list' expressions in addition to 'insn_list' 10346 expressions. There are several kinds of register notes, which are 10347 distinguished by the machine mode, which in a register note is really 10348 understood as being an 'enum reg_note'. The first operand OP of the 10349 note is data whose meaning depends on the kind of note. 10350 10351 The macro 'REG_NOTE_KIND (X)' returns the kind of register note. Its 10352 counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 10353 register note type of X to be NEWKIND. 10354 10355 Register notes are of three classes: They may say something about an 10356 input to an insn, they may say something about an output of an insn, or 10357 they may create a linkage between two insns. There are also a set of 10358 values that are only used in 'LOG_LINKS'. 10359 10360 These register notes annotate inputs to an insn: 10361 10362 'REG_DEAD' 10363 The value in OP dies in this insn; that is to say, altering the 10364 value immediately after this insn would not affect the future 10365 behavior of the program. 10366 10367 It does not follow that the register OP has no useful value after 10368 this insn since OP is not necessarily modified by this insn. 10369 Rather, no subsequent instruction uses the contents of OP. 10370 10371 'REG_UNUSED' 10372 The register OP being set by this insn will not be used in a 10373 subsequent insn. This differs from a 'REG_DEAD' note, which 10374 indicates that the value in an input will not be used subsequently. 10375 These two notes are independent; both may be present for the same 10376 register. 10377 10378 'REG_INC' 10379 The register OP is incremented (or decremented; at this level there 10380 is no distinction) by an embedded side effect inside this insn. 10381 This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or 10382 'pre_dec' expression. 10383 10384 'REG_NONNEG' 10385 The register OP is known to have a nonnegative value when this insn 10386 is reached. This is used so that decrement and branch until zero 10387 instructions, such as the m68k dbra, can be matched. 10388 10389 The 'REG_NONNEG' note is added to insns only if the machine 10390 description has a 'decrement_and_branch_until_zero' pattern. 10391 10392 'REG_LABEL_OPERAND' 10393 This insn uses OP, a 'code_label' or a 'note' of type 10394 'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a 10395 'jump_insn' that refers to the operand as an ordinary operand. The 10396 label may still eventually be a jump target, but if so in an 10397 indirect jump in a subsequent insn. The presence of this note 10398 allows jump optimization to be aware that OP is, in fact, being 10399 used, and flow optimization to build an accurate flow graph. 10400 10401 'REG_LABEL_TARGET' 10402 This insn is a 'jump_insn' but not an 'addr_vec' or 10403 'addr_diff_vec'. It uses OP, a 'code_label' as a direct or 10404 indirect jump target. Its purpose is similar to that of 10405 'REG_LABEL_OPERAND'. This note is only present if the insn has 10406 multiple targets; the last label in the insn (in the highest 10407 numbered insn-field) goes into the 'JUMP_LABEL' field and does not 10408 have a 'REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 10409 10410 'REG_CROSSING_JUMP' 10411 This insn is a branching instruction (either an unconditional jump 10412 or an indirect jump) which crosses between hot and cold sections, 10413 which could potentially be very far apart in the executable. The 10414 presence of this note indicates to other optimizations that this 10415 branching instruction should not be "collapsed" into a simpler 10416 branching construct. It is used when the optimization to partition 10417 basic blocks into hot and cold sections is turned on. 10418 10419 'REG_SETJMP' 10420 Appears attached to each 'CALL_INSN' to 'setjmp' or a related 10421 function. 10422 10423 The following notes describe attributes of outputs of an insn: 10424 10425 'REG_EQUIV' 10426 'REG_EQUAL' 10427 This note is only valid on an insn that sets only one register and 10428 indicates that that register will be equal to OP at run time; the 10429 scope of this equivalence differs between the two types of notes. 10430 The value which the insn explicitly copies into the register may 10431 look different from OP, but they will be equal at run time. If the 10432 output of the single 'set' is a 'strict_low_part' expression, the 10433 note refers to the register that is contained in 'SUBREG_REG' of 10434 the 'subreg' expression. 10435 10436 For 'REG_EQUIV', the register is equivalent to OP throughout the 10437 entire function, and could validly be replaced in all its 10438 occurrences by OP. ("Validly" here refers to the data flow of the 10439 program; simple replacement may make some insns invalid.) For 10440 example, when a constant is loaded into a register that is never 10441 assigned any other value, this kind of note is used. 10442 10443 When a parameter is copied into a pseudo-register at entry to a 10444 function, a note of this kind records that the register is 10445 equivalent to the stack slot where the parameter was passed. 10446 Although in this case the register may be set by other insns, it is 10447 still valid to replace the register by the stack slot throughout 10448 the function. 10449 10450 A 'REG_EQUIV' note is also used on an instruction which copies a 10451 register parameter into a pseudo-register at entry to a function, 10452 if there is a stack slot where that parameter could be stored. 10453 Although other insns may set the pseudo-register, it is valid for 10454 the compiler to replace the pseudo-register by stack slot 10455 throughout the function, provided the compiler ensures that the 10456 stack slot is properly initialized by making the replacement in the 10457 initial copy instruction as well. This is used on machines for 10458 which the calling convention allocates stack space for register 10459 parameters. See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::. 10460 10461 In the case of 'REG_EQUAL', the register that is set by this insn 10462 will be equal to OP at run time at the end of this insn but not 10463 necessarily elsewhere in the function. In this case, OP is 10464 typically an arithmetic expression. For example, when a sequence 10465 of insns such as a library call is used to perform an arithmetic 10466 operation, this kind of note is attached to the insn that produces 10467 or copies the final value. 10468 10469 These two notes are used in different ways by the compiler passes. 10470 'REG_EQUAL' is used by passes prior to register allocation (such as 10471 common subexpression elimination and loop optimization) to tell 10472 them how to think of that value. 'REG_EQUIV' notes are used by 10473 register allocation to indicate that there is an available 10474 substitute expression (either a constant or a 'mem' expression for 10475 the location of a parameter on the stack) that may be used in place 10476 of a register if insufficient registers are available. 10477 10478 Except for stack homes for parameters, which are indicated by a 10479 'REG_EQUIV' note and are not useful to the early optimization 10480 passes and pseudo registers that are equivalent to a memory 10481 location throughout their entire life, which is not detected until 10482 later in the compilation, all equivalences are initially indicated 10483 by an attached 'REG_EQUAL' note. In the early stages of register 10484 allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note 10485 if OP is a constant and the insn represents the only set of its 10486 destination register. 10487 10488 Thus, compiler passes prior to register allocation need only check 10489 for 'REG_EQUAL' notes and passes subsequent to register allocation 10490 need only check for 'REG_EQUIV' notes. 10491 10492 These notes describe linkages between insns. They occur in pairs: one 10493 insn has one of a pair of notes that points to a second insn, which has 10494 the inverse note pointing back to the first insn. 10495 10496 'REG_CC_SETTER' 10497 'REG_CC_USER' 10498 On machines that use 'cc0', the insns which set and use 'cc0' set 10499 and use 'cc0' are adjacent. However, when branch delay slot 10500 filling is done, this may no longer be true. In this case a 10501 'REG_CC_USER' note will be placed on the insn setting 'cc0' to 10502 point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be 10503 placed on the insn using 'cc0' to point to the insn setting 'cc0'. 10504 10505 These values are only used in the 'LOG_LINKS' field, and indicate the 10506 type of dependency that each link represents. Links which indicate a 10507 data dependence (a read after write dependence) do not use any code, 10508 they simply have mode 'VOIDmode', and are printed without any 10509 descriptive text. 10510 10511 'REG_DEP_TRUE' 10512 This indicates a true dependence (a read after write dependence). 10513 10514 'REG_DEP_OUTPUT' 10515 This indicates an output dependence (a write after write 10516 dependence). 10517 10518 'REG_DEP_ANTI' 10519 This indicates an anti dependence (a write after read dependence). 10520 10521 These notes describe information gathered from gcov profile data. They 10522 are stored in the 'REG_NOTES' field of an insn as an 'expr_list'. 10523 10524 'REG_BR_PROB' 10525 This is used to specify the ratio of branches to non-branches of a 10526 branch insn according to the profile data. The value is stored as 10527 a value between 0 and REG_BR_PROB_BASE; larger values indicate a 10528 higher probability that the branch will be taken. 10529 10530 'REG_BR_PRED' 10531 These notes are found in JUMP insns after delayed branch scheduling 10532 has taken place. They indicate both the direction and the 10533 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 10534 values. 10535 10536 'REG_FRAME_RELATED_EXPR' 10537 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 10538 expression is used in place of the actual insn pattern. This is 10539 done in cases where the pattern is either complex or misleading. 10540 10541 For convenience, the machine mode in an 'insn_list' or 'expr_list' is 10542 printed using these symbolic codes in debugging dumps. 10543 10544 The only difference between the expression codes 'insn_list' and 10545 'expr_list' is that the first operand of an 'insn_list' is assumed to be 10546 an insn and is printed in debugging dumps as the insn's unique id; the 10547 first operand of an 'expr_list' is printed in the ordinary way as an 10548 expression. 10549 10550 10551 File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 10552 10553 10.20 RTL Representation of Function-Call Insns 10554 =============================================== 10555 10556 Insns that call subroutines have the RTL expression code 'call_insn'. 10557 These insns must satisfy special rules, and their bodies must use a 10558 special RTL expression code, 'call'. 10559 10560 A 'call' expression has two operands, as follows: 10561 10562 (call (mem:FM ADDR) NBYTES) 10563 10564 Here NBYTES is an operand that represents the number of bytes of 10565 argument data being passed to the subroutine, FM is a machine mode 10566 (which must equal as the definition of the 'FUNCTION_MODE' macro in the 10567 machine description) and ADDR represents the address of the subroutine. 10568 10569 For a subroutine that returns no value, the 'call' expression as shown 10570 above is the entire body of the insn, except that the insn might also 10571 contain 'use' or 'clobber' expressions. 10572 10573 For a subroutine that returns a value whose mode is not 'BLKmode', the 10574 value is returned in a hard register. If this register's number is R, 10575 then the body of the call insn looks like this: 10576 10577 (set (reg:M R) 10578 (call (mem:FM ADDR) NBYTES)) 10579 10580 This RTL expression makes it clear (to the optimizer passes) that the 10581 appropriate register receives a useful value in this insn. 10582 10583 When a subroutine returns a 'BLKmode' value, it is handled by passing 10584 to the subroutine the address of a place to store the value. So the 10585 call insn itself does not "return" any value, and it has the same RTL 10586 form as a call that returns nothing. 10587 10588 On some machines, the call instruction itself clobbers some register, 10589 for example to contain the return address. 'call_insn' insns on these 10590 machines should have a body which is a 'parallel' that contains both the 10591 'call' expression and 'clobber' expressions that indicate which 10592 registers are destroyed. Similarly, if the call instruction requires 10593 some register other than the stack pointer that is not explicitly 10594 mentioned in its RTL, a 'use' subexpression should mention that 10595 register. 10596 10597 Functions that are called are assumed to modify all registers listed in 10598 the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::) 10599 and, with the exception of 'const' functions and library calls, to 10600 modify all of memory. 10601 10602 Insns containing just 'use' expressions directly precede the 10603 'call_insn' insn to indicate which registers contain inputs to the 10604 function. Similarly, if registers other than those in 10605 'CALL_USED_REGISTERS' are clobbered by the called function, insns 10606 containing a single 'clobber' follow immediately after the call to 10607 indicate which registers. 10608 10609 10610 File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 10611 10612 10.21 Structure Sharing Assumptions 10613 =================================== 10614 10615 The compiler assumes that certain kinds of RTL expressions are unique; 10616 there do not exist two distinct objects representing the same value. In 10617 other cases, it makes an opposite assumption: that no RTL expression 10618 object of a certain kind appears in more than one place in the 10619 containing structure. 10620 10621 These assumptions refer to a single function; except for the RTL 10622 objects that describe global variables and external functions, and a few 10623 standard objects such as small integer constants, no RTL objects are 10624 common to two functions. 10625 10626 * Each pseudo-register has only a single 'reg' object to represent 10627 it, and therefore only a single machine mode. 10628 10629 * For any symbolic label, there is only one 'symbol_ref' object 10630 referring to it. 10631 10632 * All 'const_int' expressions with equal values are shared. 10633 10634 * There is only one 'pc' expression. 10635 10636 * There is only one 'cc0' expression. 10637 10638 * There is only one 'const_double' expression with value 0 for each 10639 floating point mode. Likewise for values 1 and 2. 10640 10641 * There is only one 'const_vector' expression with value 0 for each 10642 vector mode, be it an integer or a double constant vector. 10643 10644 * No 'label_ref' or 'scratch' appears in more than one place in the 10645 RTL structure; in other words, it is safe to do a tree-walk of all 10646 the insns in the function and assume that each time a 'label_ref' 10647 or 'scratch' is seen it is distinct from all others that are seen. 10648 10649 * Only one 'mem' object is normally created for each static variable 10650 or stack slot, so these objects are frequently shared in all the 10651 places they appear. However, separate but equal objects for these 10652 variables are occasionally made. 10653 10654 * When a single 'asm' statement has multiple output operands, a 10655 distinct 'asm_operands' expression is made for each output operand. 10656 However, these all share the vector which contains the sequence of 10657 input operands. This sharing is used later on to test whether two 10658 'asm_operands' expressions come from the same statement, so all 10659 optimizations must carefully preserve the sharing if they copy the 10660 vector at all. 10661 10662 * No RTL object appears in more than one place in the RTL structure 10663 except as described above. Many passes of the compiler rely on 10664 this by assuming that they can modify RTL objects in place without 10665 unwanted side-effects on other insns. 10666 10667 * During initial RTL generation, shared structure is freely 10668 introduced. After all the RTL for a function has been generated, 10669 all shared structure is copied by 'unshare_all_rtl' in 10670 'emit-rtl.c', after which the above rules are guaranteed to be 10671 followed. 10672 10673 * During the combiner pass, shared structure within an insn can exist 10674 temporarily. However, the shared structure is copied before the 10675 combiner is finished with the insn. This is done by calling 10676 'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'. 10677 10678 10679 File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 10680 10681 10.22 Reading RTL 10682 ================= 10683 10684 To read an RTL object from a file, call 'read_rtx'. It takes one 10685 argument, a stdio stream, and returns a single RTL object. This routine 10686 is defined in 'read-rtl.c'. It is not available in the compiler itself, 10687 only the various programs that generate the compiler back end from the 10688 machine description. 10689 10690 People frequently have the idea of using RTL stored as text in a file 10691 as an interface between a language front end and the bulk of GCC. This 10692 idea is not feasible. 10693 10694 GCC was designed to use RTL internally only. Correct RTL for a given 10695 program is very dependent on the particular target machine. And the RTL 10696 does not contain all the information about the program. 10697 10698 The proper way to interface GCC to a new language front end is with the 10699 "tree" data structure, described in the files 'tree.h' and 'tree.def'. 10700 The documentation for this structure (*note GENERIC::) is incomplete. 10701 10702 10703 File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: RTL, Up: Top 10704 10705 11 GENERIC 10706 ********** 10707 10708 The purpose of GENERIC is simply to provide a language-independent way 10709 of representing an entire function in trees. To this end, it was 10710 necessary to add a few new tree codes to the back end, but most 10711 everything was already there. If you can express it with the codes in 10712 'gcc/tree.def', it's GENERIC. 10713 10714 Early on, there was a great deal of debate about how to think about 10715 statements in a tree IL. In GENERIC, a statement is defined as any 10716 expression whose value, if any, is ignored. A statement will always 10717 have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a 10718 non-statement expression may also have side effects. A 'CALL_EXPR', for 10719 instance. 10720 10721 It would be possible for some local optimizations to work on the 10722 GENERIC form of a function; indeed, the adapted tree inliner works fine 10723 on GENERIC, but the current compiler performs inlining after lowering to 10724 GIMPLE (a restricted form described in the next section). Indeed, 10725 currently the frontends perform this lowering before handing off to 10726 'tree_rest_of_compilation', but this seems inelegant. 10727 10728 * Menu: 10729 10730 * Deficiencies:: Topics net yet covered in this document. 10731 * Tree overview:: All about 'tree's. 10732 * Types:: Fundamental and aggregate types. 10733 * Declarations:: Type declarations and variables. 10734 * Attributes:: Declaration and type attributes. 10735 * Expressions: Expression trees. Operating on data. 10736 * Statements:: Control flow and related trees. 10737 * Functions:: Function bodies, linkage, and other aspects. 10738 * Language-dependent trees:: Topics and trees specific to language front ends. 10739 * C and C++ Trees:: Trees specific to C and C++. 10740 * Java Trees:: Trees specific to Java. 10741 10742 10743 File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 10744 10745 11.1 Deficiencies 10746 ================= 10747 10748 There are many places in which this document is incomplet and incorrekt. 10749 It is, as of yet, only _preliminary_ documentation. 10750 10751 10752 File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 10753 10754 11.2 Overview 10755 ============= 10756 10757 The central data structure used by the internal representation is the 10758 'tree'. These nodes, while all of the C type 'tree', are of many 10759 varieties. A 'tree' is a pointer type, but the object to which it 10760 points may be of a variety of types. From this point forward, we will 10761 refer to trees in ordinary type, rather than in 'this font', except when 10762 talking about the actual C type 'tree'. 10763 10764 You can tell what kind of node a particular tree is by using the 10765 'TREE_CODE' macro. Many, many macros take trees as input and return 10766 trees as output. However, most macros require a certain kind of tree 10767 node as input. In other words, there is a type-system for trees, but it 10768 is not reflected in the C type-system. 10769 10770 For safety, it is useful to configure GCC with '--enable-checking'. 10771 Although this results in a significant performance penalty (since all 10772 tree types are checked at run-time), and is therefore inappropriate in a 10773 release version, it is extremely helpful during the development process. 10774 10775 Many macros behave as predicates. Many, although not all, of these 10776 predicates end in '_P'. Do not rely on the result type of these macros 10777 being of any particular type. You may, however, rely on the fact that 10778 the type can be compared to '0', so that statements like 10779 if (TEST_P (t) && !TEST_P (y)) 10780 x = 1; 10781 and 10782 int i = (TEST_P (t) != 0); 10783 are legal. Macros that return 'int' values now may be changed to return 10784 'tree' values, or other pointers in the future. Even those that 10785 continue to return 'int' may return multiple nonzero codes where 10786 previously they returned only zero and one. Therefore, you should not 10787 write code like 10788 if (TEST_P (t) == 1) 10789 as this code is not guaranteed to work correctly in the future. 10790 10791 You should not take the address of values returned by the macros or 10792 functions described here. In particular, no guarantee is given that the 10793 values are lvalues. 10794 10795 In general, the names of macros are all in uppercase, while the names 10796 of functions are entirely in lowercase. There are rare exceptions to 10797 this rule. You should assume that any macro or function whose name is 10798 made up entirely of uppercase letters may evaluate its arguments more 10799 than once. You may assume that a macro or function whose name is made 10800 up entirely of lowercase letters will evaluate its arguments only once. 10801 10802 The 'error_mark_node' is a special tree. Its tree code is 10803 'ERROR_MARK', but since there is only ever one node with that code, the 10804 usual practice is to compare the tree against 'error_mark_node'. (This 10805 test is just a test for pointer equality.) If an error has occurred 10806 during front-end processing the flag 'errorcount' will be set. If the 10807 front end has encountered code it cannot handle, it will issue a message 10808 to the user and set 'sorrycount'. When these flags are set, any macro 10809 or function which normally returns a tree of a particular kind may 10810 instead return the 'error_mark_node'. Thus, if you intend to do any 10811 processing of erroneous code, you must be prepared to deal with the 10812 'error_mark_node'. 10813 10814 Occasionally, a particular tree slot (like an operand to an expression, 10815 or a particular field in a declaration) will be referred to as "reserved 10816 for the back end". These slots are used to store RTL when the tree is 10817 converted to RTL for use by the GCC back end. However, if that process 10818 is not taking place (e.g., if the front end is being hooked up to an 10819 intelligent editor), then those slots may be used by the back end 10820 presently in use. 10821 10822 If you encounter situations that do not match this documentation, such 10823 as tree nodes of types not mentioned here, or macros documented to 10824 return entities of a particular kind that instead return entities of 10825 some different kind, you have found a bug, either in the front end or in 10826 the documentation. Please report these bugs as you would any other bug. 10827 10828 * Menu: 10829 10830 * Macros and Functions::Macros and functions that can be used with all trees. 10831 * Identifiers:: The names of things. 10832 * Containers:: Lists and vectors. 10833 10834 10835 File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 10836 10837 11.2.1 Trees 10838 ------------ 10839 10840 All GENERIC trees have two fields in common. First, 'TREE_CHAIN' is a 10841 pointer that can be used as a singly-linked list to other trees. The 10842 other is 'TREE_TYPE'. Many trees store the type of an expression or 10843 declaration in this field. 10844 10845 These are some other functions for handling trees: 10846 10847 'tree_size' 10848 Return the number of bytes a tree takes. 10849 10850 'build0' 10851 'build1' 10852 'build2' 10853 'build3' 10854 'build4' 10855 'build5' 10856 'build6' 10857 10858 These functions build a tree and supply values to put in each 10859 parameter. The basic signature is 'code, type, [operands]'. 10860 'code' is the 'TREE_CODE', and 'type' is a tree representing the 10861 'TREE_TYPE'. These are followed by the operands, each of which is 10862 also a tree. 10863 10864 10865 File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 10866 10867 11.2.2 Identifiers 10868 ------------------ 10869 10870 An 'IDENTIFIER_NODE' represents a slightly more general concept that the 10871 standard C or C++ concept of identifier. In particular, an 10872 'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters. 10873 10874 There are never two distinct 'IDENTIFIER_NODE's representing the same 10875 identifier. Therefore, you may use pointer equality to compare 10876 'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'. Use 10877 'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied 10878 string. 10879 10880 You can use the following macros to access identifiers: 10881 'IDENTIFIER_POINTER' 10882 The string represented by the identifier, represented as a 'char*'. 10883 This string is always 'NUL'-terminated, and contains no embedded 10884 'NUL' characters. 10885 10886 'IDENTIFIER_LENGTH' 10887 The length of the string returned by 'IDENTIFIER_POINTER', not 10888 including the trailing 'NUL'. This value of 'IDENTIFIER_LENGTH 10889 (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'. 10890 10891 'IDENTIFIER_OPNAME_P' 10892 This predicate holds if the identifier represents the name of an 10893 overloaded operator. In this case, you should not depend on the 10894 contents of either the 'IDENTIFIER_POINTER' or the 10895 'IDENTIFIER_LENGTH'. 10896 10897 'IDENTIFIER_TYPENAME_P' 10898 This predicate holds if the identifier represents the name of a 10899 user-defined conversion operator. In this case, the 'TREE_TYPE' of 10900 the 'IDENTIFIER_NODE' holds the type to which the conversion 10901 operator converts. 10902 10903 10904 File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 10905 10906 11.2.3 Containers 10907 ----------------- 10908 10909 Two common container data structures can be represented directly with 10910 tree nodes. A 'TREE_LIST' is a singly linked list containing two trees 10911 per node. These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node. 10912 (Often, the 'TREE_PURPOSE' contains some kind of tag, or additional 10913 information, while the 'TREE_VALUE' contains the majority of the 10914 payload. In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE', 10915 while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of 10916 equal stature.) Given one 'TREE_LIST' node, the next node is found by 10917 following the 'TREE_CHAIN'. If the 'TREE_CHAIN' is 'NULL_TREE', then 10918 you have reached the end of the list. 10919 10920 A 'TREE_VEC' is a simple vector. The 'TREE_VEC_LENGTH' is an integer 10921 (not a tree) giving the number of nodes in the vector. The nodes 10922 themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two 10923 arguments. The first is the 'TREE_VEC' in question; the second is an 10924 integer indicating which element in the vector is desired. The elements 10925 are indexed from zero. 10926 10927 10928 File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 10929 10930 11.3 Types 10931 ========== 10932 10933 All types have corresponding tree nodes. However, you should not assume 10934 that there is exactly one tree node corresponding to each type. There 10935 are often multiple nodes corresponding to the same type. 10936 10937 For the most part, different kinds of types have different tree codes. 10938 (For example, pointer types use a 'POINTER_TYPE' code while arrays use 10939 an 'ARRAY_TYPE' code.) However, pointers to member functions use the 10940 'RECORD_TYPE' code. Therefore, when writing a 'switch' statement that 10941 depends on the code associated with a particular type, you should take 10942 care to handle pointers to member functions under the 'RECORD_TYPE' case 10943 label. 10944 10945 The following functions and macros deal with cv-qualification of types: 10946 'TYPE_MAIN_VARIANT' 10947 This macro returns the unqualified version of a type. It may be 10948 applied to an unqualified type, but it is not always the identity 10949 function in that case. 10950 10951 A few other macros and functions are usable with all types: 10952 'TYPE_SIZE' 10953 The number of bits required to represent the type, represented as 10954 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 10955 'NULL_TREE'. 10956 10957 'TYPE_ALIGN' 10958 The alignment of the type, in bits, represented as an 'int'. 10959 10960 'TYPE_NAME' 10961 This macro returns a declaration (in the form of a 'TYPE_DECL') for 10962 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 10963 as you might expect, given its name!) You can look at the 10964 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 10965 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 10966 built-in type, the result of a typedef, or a named class type. 10967 10968 'TYPE_CANONICAL' 10969 This macro returns the "canonical" type for the given type node. 10970 Canonical types are used to improve performance in the C++ and 10971 Objective-C++ front ends by allowing efficient comparison between 10972 two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of 10973 the types are equal, the types are equivalent; otherwise, the types 10974 are not equivalent. The notion of equivalence for canonical types 10975 is the same as the notion of type equivalence in the language 10976 itself. For instance, 10977 10978 When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type 10979 for the given type node. In this case, comparison between this 10980 type and any other type requires the compiler to perform a deep, 10981 "structural" comparison to see if the two type nodes have the same 10982 form and properties. 10983 10984 The canonical type for a node is always the most fundamental type 10985 in the equivalence class of types. For instance, 'int' is its own 10986 canonical type. A typedef 'I' of 'int' will have 'int' as its 10987 canonical type. Similarly, 'I*' and a typedef 'IP' (defined to 10988 'I*') will has 'int*' as their canonical type. When building a new 10989 type node, be sure to set 'TYPE_CANONICAL' to the appropriate 10990 canonical type. If the new type is a compound type (built from 10991 other types), and any of those other types require structural 10992 equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new 10993 type also requires structural equality. Finally, if for some 10994 reason you cannot guarantee that 'TYPE_CANONICAL' will point to the 10995 canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure 10996 that the new type-and any type constructed based on it-requires 10997 structural equality. If you suspect that the canonical type system 10998 is miscomparing types, pass '--param verify-canonical-types=1' to 10999 the compiler or configure with '--enable-checking' to force the 11000 compiler to verify its canonical-type comparisons against the 11001 structural comparisons; the compiler will then print any warnings 11002 if the canonical types miscompare. 11003 11004 'TYPE_STRUCTURAL_EQUALITY_P' 11005 This predicate holds when the node requires structural equality 11006 checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'. 11007 11008 'SET_TYPE_STRUCTURAL_EQUALITY' 11009 This macro states that the type node it is given requires 11010 structural equality checks, e.g., it sets 'TYPE_CANONICAL' to 11011 'NULL_TREE'. 11012 11013 'same_type_p' 11014 This predicate takes two types as input, and holds if they are the 11015 same type. For example, if one type is a 'typedef' for the other, 11016 or both are 'typedef's for the same type. This predicate also 11017 holds if the two trees given as input are simply copies of one 11018 another; i.e., there is no difference between them at the source 11019 level, but, for whatever reason, a duplicate has been made in the 11020 representation. You should never use '==' (pointer equality) to 11021 compare types; always use 'same_type_p' instead. 11022 11023 Detailed below are the various kinds of types, and the macros that can 11024 be used to access them. Although other kinds of types are used 11025 elsewhere in G++, the types described here are the only ones that you 11026 will encounter while examining the intermediate representation. 11027 11028 'VOID_TYPE' 11029 Used to represent the 'void' type. 11030 11031 'INTEGER_TYPE' 11032 Used to represent the various integral types, including 'char', 11033 'short', 'int', 'long', and 'long long'. This code is not used for 11034 enumeration types, nor for the 'bool' type. The 'TYPE_PRECISION' 11035 is the number of bits used in the representation, represented as an 11036 'unsigned int'. (Note that in the general case this is not the 11037 same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer 11038 type, but that alignment requirements for the ABI required 32-bit 11039 alignment. Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32, 11040 while 'TYPE_PRECISION' would be 24.) The integer type is unsigned 11041 if 'TYPE_UNSIGNED' holds; otherwise, it is signed. 11042 11043 The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer 11044 that may be represented by this type. Similarly, the 11045 'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that 11046 may be represented by this type. 11047 11048 'REAL_TYPE' 11049 Used to represent the 'float', 'double', and 'long double' types. 11050 The number of bits in the floating-point representation is given by 11051 'TYPE_PRECISION', as in the 'INTEGER_TYPE' case. 11052 11053 'FIXED_POINT_TYPE' 11054 Used to represent the 'short _Fract', '_Fract', 'long _Fract', 11055 'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and 11056 'long long _Accum' types. The number of bits in the fixed-point 11057 representation is given by 'TYPE_PRECISION', as in the 11058 'INTEGER_TYPE' case. There may be padding bits, fractional bits 11059 and integral bits. The number of fractional bits is given by 11060 'TYPE_FBIT', and the number of integral bits is given by 11061 'TYPE_IBIT'. The fixed-point type is unsigned if 'TYPE_UNSIGNED' 11062 holds; otherwise, it is signed. The fixed-point type is saturating 11063 if 'TYPE_SATURATING' holds; otherwise, it is not saturating. 11064 11065 'COMPLEX_TYPE' 11066 Used to represent GCC built-in '__complex__' data types. The 11067 'TREE_TYPE' is the type of the real and imaginary parts. 11068 11069 'ENUMERAL_TYPE' 11070 Used to represent an enumeration type. The 'TYPE_PRECISION' gives 11071 (as an 'int'), the number of bits used to represent the type. If 11072 there are no negative enumeration constants, 'TYPE_UNSIGNED' will 11073 hold. The minimum and maximum enumeration constants may be 11074 obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively; 11075 each of these macros returns an 'INTEGER_CST'. 11076 11077 The actual enumeration constants themselves may be obtained by 11078 looking at the 'TYPE_VALUES'. This macro will return a 11079 'TREE_LIST', containing the constants. The 'TREE_PURPOSE' of each 11080 node will be an 'IDENTIFIER_NODE' giving the name of the constant; 11081 the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned 11082 to that constant. These constants will appear in the order in 11083 which they were declared. The 'TREE_TYPE' of each of these 11084 constants will be the type of enumeration type itself. 11085 11086 'BOOLEAN_TYPE' 11087 Used to represent the 'bool' type. 11088 11089 'POINTER_TYPE' 11090 Used to represent pointer types, and pointer to data member types. 11091 The 'TREE_TYPE' gives the type to which this type points. 11092 11093 'REFERENCE_TYPE' 11094 Used to represent reference types. The 'TREE_TYPE' gives the type 11095 to which this type refers. 11096 11097 'FUNCTION_TYPE' 11098 Used to represent the type of non-member functions and of static 11099 member functions. The 'TREE_TYPE' gives the return type of the 11100 function. The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument 11101 types. The 'TREE_VALUE' of each node in this list is the type of 11102 the corresponding argument; the 'TREE_PURPOSE' is an expression for 11103 the default argument value, if any. If the last node in the list 11104 is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the 11105 'void_type_node'), then functions of this type do not take variable 11106 arguments. Otherwise, they do take a variable number of arguments. 11107 11108 Note that in C (but not in C++) a function declared like 'void f()' 11109 is an unprototyped function taking a variable number of arguments; 11110 the 'TYPE_ARG_TYPES' of such a function will be 'NULL'. 11111 11112 'METHOD_TYPE' 11113 Used to represent the type of a non-static member function. Like a 11114 'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'. The 11115 type of '*this', i.e., the class of which functions of this type 11116 are a member, is given by the 'TYPE_METHOD_BASETYPE'. The 11117 'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE', 11118 and includes the 'this' argument. 11119 11120 'ARRAY_TYPE' 11121 Used to represent array types. The 'TREE_TYPE' gives the type of 11122 the elements in the array. If the array-bound is present in the 11123 type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE' 11124 and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the 11125 array, respectively. The 'TYPE_MIN_VALUE' will always be an 11126 'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less 11127 than the number of elements in the array, i.e., the highest value 11128 which may be used to index an element in the array. 11129 11130 'RECORD_TYPE' 11131 Used to represent 'struct' and 'class' types, as well as pointers 11132 to member functions and similar constructs in other languages. 11133 'TYPE_FIELDS' contains the items contained in this type, each of 11134 which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or 11135 'TYPE_DECL'. You may not make any assumptions about the ordering 11136 of the fields in the type or whether one or more of them overlap. 11137 11138 'UNION_TYPE' 11139 Used to represent 'union' types. Similar to 'RECORD_TYPE' except 11140 that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position 11141 zero. 11142 11143 'QUAL_UNION_TYPE' 11144 Used to represent part of a variant record in Ada. Similar to 11145 'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER' 11146 field, which contains a boolean expression that indicates whether 11147 the field is present in the object. The type will only have one 11148 field, so each field's 'DECL_QUALIFIER' is only evaluated if none 11149 of the expressions in the previous fields in 'TYPE_FIELDS' are 11150 nonzero. Normally these expressions will reference a field in the 11151 outer object using a 'PLACEHOLDER_EXPR'. 11152 11153 'LANG_TYPE' 11154 This node is used to represent a language-specific type. The front 11155 end must handle it. 11156 11157 'OFFSET_TYPE' 11158 This node is used to represent a pointer-to-data member. For a 11159 data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the 11160 'TREE_TYPE' is the type of 'm'. 11161 11162 There are variables whose values represent some of the basic types. 11163 These include: 11164 'void_type_node' 11165 A node for 'void'. 11166 11167 'integer_type_node' 11168 A node for 'int'. 11169 11170 'unsigned_type_node.' 11171 A node for 'unsigned int'. 11172 11173 'char_type_node.' 11174 A node for 'char'. 11175 It may sometimes be useful to compare one of these variables with a type 11176 in hand, using 'same_type_p'. 11177 11178 11179 File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 11180 11181 11.4 Declarations 11182 ================= 11183 11184 This section covers the various kinds of declarations that appear in the 11185 internal representation, except for declarations of functions 11186 (represented by 'FUNCTION_DECL' nodes), which are described in *note 11187 Functions::. 11188 11189 * Menu: 11190 11191 * Working with declarations:: Macros and functions that work on 11192 declarations. 11193 * Internal structure:: How declaration nodes are represented. 11194 11195 11196 File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 11197 11198 11.4.1 Working with declarations 11199 -------------------------------- 11200 11201 Some macros can be used with any kind of declaration. These include: 11202 'DECL_NAME' 11203 This macro returns an 'IDENTIFIER_NODE' giving the name of the 11204 entity. 11205 11206 'TREE_TYPE' 11207 This macro returns the type of the entity declared. 11208 11209 'EXPR_FILENAME' 11210 This macro returns the name of the file in which the entity was 11211 declared, as a 'char*'. For an entity declared implicitly by the 11212 compiler (like '__builtin_memcpy'), this will be the string 11213 '"<internal>"'. 11214 11215 'EXPR_LINENO' 11216 This macro returns the line number at which the entity was 11217 declared, as an 'int'. 11218 11219 'DECL_ARTIFICIAL' 11220 This predicate holds if the declaration was implicitly generated by 11221 the compiler. For example, this predicate will hold of an 11222 implicitly declared member function, or of the 'TYPE_DECL' 11223 implicitly generated for a class type. Recall that in C++ code 11224 like: 11225 struct S {}; 11226 is roughly equivalent to C code like: 11227 struct S {}; 11228 typedef struct S S; 11229 The implicitly generated 'typedef' declaration is represented by a 11230 'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds. 11231 11232 The various kinds of declarations include: 11233 'LABEL_DECL' 11234 These nodes are used to represent labels in function bodies. For 11235 more information, see *note Functions::. These nodes only appear 11236 in block scopes. 11237 11238 'CONST_DECL' 11239 These nodes are used to represent enumeration constants. The value 11240 of the constant is given by 'DECL_INITIAL' which will be an 11241 'INTEGER_CST' with the same type as the 'TREE_TYPE' of the 11242 'CONST_DECL', i.e., an 'ENUMERAL_TYPE'. 11243 11244 'RESULT_DECL' 11245 These nodes represent the value returned by a function. When a 11246 value is assigned to a 'RESULT_DECL', that indicates that the value 11247 should be returned, via bitwise copy, by the function. You can use 11248 'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a 11249 'VAR_DECL'. 11250 11251 'TYPE_DECL' 11252 These nodes represent 'typedef' declarations. The 'TREE_TYPE' is 11253 the type declared to have the name given by 'DECL_NAME'. In some 11254 cases, there is no associated name. 11255 11256 'VAR_DECL' 11257 These nodes represent variables with namespace or block scope, as 11258 well as static data members. The 'DECL_SIZE' and 'DECL_ALIGN' are 11259 analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'. For a declaration, you 11260 should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the 11261 'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since 11262 special attributes may have been applied to the variable to give it 11263 a particular size and alignment. You may use the predicates 11264 'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the 11265 storage class specifiers 'static' or 'extern' were used to declare 11266 a variable. 11267 11268 If this variable is initialized (but does not require a 11269 constructor), the 'DECL_INITIAL' will be an expression for the 11270 initializer. The initializer should be evaluated, and a bitwise 11271 copy into the variable performed. If the 'DECL_INITIAL' is the 11272 'error_mark_node', there is an initializer, but it is given by an 11273 explicit statement later in the code; no bitwise copy is required. 11274 11275 GCC provides an extension that allows either automatic variables, 11276 or global variables, to be placed in particular registers. This 11277 extension is being used for a particular 'VAR_DECL' if 11278 'DECL_REGISTER' holds for the 'VAR_DECL', and if 11279 'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'. In that case, 11280 'DECL_ASSEMBLER_NAME' is the name of the register into which the 11281 variable will be placed. 11282 11283 'PARM_DECL' 11284 Used to represent a parameter to a function. Treat these nodes 11285 similarly to 'VAR_DECL' nodes. These nodes only appear in the 11286 'DECL_ARGUMENTS' for a 'FUNCTION_DECL'. 11287 11288 The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will 11289 actually be used when a value is passed to this function. It may 11290 be a wider type than the 'TREE_TYPE' of the parameter; for example, 11291 the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is 11292 'int'. 11293 11294 'DEBUG_EXPR_DECL' 11295 Used to represent an anonymous debug-information temporary created 11296 to hold an expression as it is optimized away, so that its value 11297 can be referenced in debug bind statements. 11298 11299 'FIELD_DECL' 11300 These nodes represent non-static data members. The 'DECL_SIZE' and 11301 'DECL_ALIGN' behave as for 'VAR_DECL' nodes. The position of the 11302 field within the parent record is specified by a combination of 11303 three attributes. 'DECL_FIELD_OFFSET' is the position, counting in 11304 bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit 11305 of the field closest to the beginning of the structure. 11306 'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 11307 field within this word; this may be nonzero even for fields that 11308 are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than 11309 the natural alignment of the field's type. 11310 11311 If 'DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 11312 bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was 11313 originally specified for it, while DECL_TYPE may be a modified type 11314 with lesser precision, according to the size of the bit field. 11315 11316 'NAMESPACE_DECL' 11317 Namespaces provide a name hierarchy for other declarations. They 11318 appear in the 'DECL_CONTEXT' of other '_DECL' nodes. 11319 11320 11321 File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 11322 11323 11.4.2 Internal structure 11324 ------------------------- 11325 11326 'DECL' nodes are represented internally as a hierarchy of structures. 11327 11328 * Menu: 11329 11330 * Current structure hierarchy:: The current DECL node structure 11331 hierarchy. 11332 * Adding new DECL node types:: How to add a new DECL node to a 11333 frontend. 11334 11335 11336 File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 11337 11338 11.4.2.1 Current structure hierarchy 11339 .................................... 11340 11341 'struct tree_decl_minimal' 11342 This is the minimal structure to inherit from in order for common 11343 'DECL' macros to work. The fields it contains are a unique ID, 11344 source location, context, and name. 11345 11346 'struct tree_decl_common' 11347 This structure inherits from 'struct tree_decl_minimal'. It 11348 contains fields that most 'DECL' nodes need, such as a field to 11349 store alignment, machine mode, size, and attributes. 11350 11351 'struct tree_field_decl' 11352 This structure inherits from 'struct tree_decl_common'. It is used 11353 to represent 'FIELD_DECL'. 11354 11355 'struct tree_label_decl' 11356 This structure inherits from 'struct tree_decl_common'. It is used 11357 to represent 'LABEL_DECL'. 11358 11359 'struct tree_translation_unit_decl' 11360 This structure inherits from 'struct tree_decl_common'. It is used 11361 to represent 'TRANSLATION_UNIT_DECL'. 11362 11363 'struct tree_decl_with_rtl' 11364 This structure inherits from 'struct tree_decl_common'. It 11365 contains a field to store the low-level RTL associated with a 11366 'DECL' node. 11367 11368 'struct tree_result_decl' 11369 This structure inherits from 'struct tree_decl_with_rtl'. It is 11370 used to represent 'RESULT_DECL'. 11371 11372 'struct tree_const_decl' 11373 This structure inherits from 'struct tree_decl_with_rtl'. It is 11374 used to represent 'CONST_DECL'. 11375 11376 'struct tree_parm_decl' 11377 This structure inherits from 'struct tree_decl_with_rtl'. It is 11378 used to represent 'PARM_DECL'. 11379 11380 'struct tree_decl_with_vis' 11381 This structure inherits from 'struct tree_decl_with_rtl'. It 11382 contains fields necessary to store visibility information, as well 11383 as a section name and assembler name. 11384 11385 'struct tree_var_decl' 11386 This structure inherits from 'struct tree_decl_with_vis'. It is 11387 used to represent 'VAR_DECL'. 11388 11389 'struct tree_function_decl' 11390 This structure inherits from 'struct tree_decl_with_vis'. It is 11391 used to represent 'FUNCTION_DECL'. 11392 11393 11394 File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 11395 11396 11.4.2.2 Adding new DECL node types 11397 ................................... 11398 11399 Adding a new 'DECL' tree consists of the following steps 11400 11401 Add a new tree code for the 'DECL' node 11402 For language specific 'DECL' nodes, there is a '.def' file in each 11403 frontend directory where the tree code should be added. For 'DECL' 11404 nodes that are part of the middle-end, the code should be added to 11405 'tree.def'. 11406 11407 Create a new structure type for the 'DECL' node 11408 These structures should inherit from one of the existing structures 11409 in the language hierarchy by using that structure as the first 11410 member. 11411 11412 struct tree_foo_decl 11413 { 11414 struct tree_decl_with_vis common; 11415 } 11416 11417 Would create a structure name 'tree_foo_decl' that inherits from 11418 'struct tree_decl_with_vis'. 11419 11420 For language specific 'DECL' nodes, this new structure type should 11421 go in the appropriate '.h' file. For 'DECL' nodes that are part of 11422 the middle-end, the structure type should go in 'tree.h'. 11423 11424 Add a member to the tree structure enumerator for the node 11425 For garbage collection and dynamic checking purposes, each 'DECL' 11426 node structure type is required to have a unique enumerator value 11427 specified with it. For language specific 'DECL' nodes, this new 11428 enumerator value should go in the appropriate '.def' file. For 11429 'DECL' nodes that are part of the middle-end, the enumerator values 11430 are specified in 'treestruct.def'. 11431 11432 Update 'union tree_node' 11433 In order to make your new structure type usable, it must be added 11434 to 'union tree_node'. For language specific 'DECL' nodes, a new 11435 entry should be added to the appropriate '.h' file of the form 11436 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 11437 For 'DECL' nodes that are part of the middle-end, the additional 11438 member goes directly into 'union tree_node' in 'tree.h'. 11439 11440 Update dynamic checking info 11441 In order to be able to check whether accessing a named portion of 11442 'union tree_node' is legal, and whether a certain 'DECL' node 11443 contains one of the enumerated 'DECL' node structures in the 11444 hierarchy, a simple lookup table is used. This lookup table needs 11445 to be kept up to date with the tree structure hierarchy, or else 11446 checking and containment macros will fail inappropriately. 11447 11448 For language specific 'DECL' nodes, their is an 'init_ts' function 11449 in an appropriate '.c' file, which initializes the lookup table. 11450 Code setting up the table for new 'DECL' nodes should be added 11451 there. For each 'DECL' tree code and enumerator value representing 11452 a member of the inheritance hierarchy, the table should contain 1 11453 if that tree code inherits (directly or indirectly) from that 11454 member. Thus, a 'FOO_DECL' node derived from 'struct 11455 decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up 11456 as follows 11457 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 11458 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 11459 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 11460 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 11461 11462 For 'DECL' nodes that are part of the middle-end, the setup code 11463 goes into 'tree.c'. 11464 11465 Add macros to access any new fields and flags 11466 11467 Each added field or flag should have a macro that is used to access 11468 it, that performs appropriate checking to ensure only the right 11469 type of 'DECL' nodes access the field. 11470 11471 These macros generally take the following form 11472 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 11473 However, if the structure is simply a base class for further 11474 structures, something like the following should be used 11475 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 11476 #define BASE_STRUCT_FIELDNAME(NODE) \ 11477 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 11478 11479 11480 File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 11481 11482 11.5 Attributes in trees 11483 ======================== 11484 11485 Attributes, as specified using the '__attribute__' keyword, are 11486 represented internally as a 'TREE_LIST'. The 'TREE_PURPOSE' is the name 11487 of the attribute, as an 'IDENTIFIER_NODE'. The 'TREE_VALUE' is a 11488 'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if 11489 there are no arguments; the arguments are stored as the 'TREE_VALUE' of 11490 successive entries in the list, and may be identifiers or expressions. 11491 The 'TREE_CHAIN' of the attribute is the next attribute in a list of 11492 attributes applying to the same declaration or type, or 'NULL_TREE' if 11493 there are no further attributes in the list. 11494 11495 Attributes may be attached to declarations and to types; these 11496 attributes may be accessed with the following macros. All attributes 11497 are stored in this way, and many also cause other changes to the 11498 declaration or type or to other internal compiler data structures. 11499 11500 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 11501 This macro returns the attributes on the declaration DECL. 11502 11503 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 11504 This macro returns the attributes on the type TYPE. 11505 11506 11507 File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 11508 11509 11.6 Expressions 11510 ================ 11511 11512 The internal representation for expressions is for the most part quite 11513 straightforward. However, there are a few facts that one must bear in 11514 mind. In particular, the expression "tree" is actually a directed 11515 acyclic graph. (For example there may be many references to the integer 11516 constant zero throughout the source program; many of these will be 11517 represented by the same expression node.) You should not rely on 11518 certain kinds of node being shared, nor should you rely on certain kinds 11519 of nodes being unshared. 11520 11521 The following macros can be used with all expression nodes: 11522 11523 'TREE_TYPE' 11524 Returns the type of the expression. This value may not be 11525 precisely the same type that would be given the expression in the 11526 original program. 11527 11528 In what follows, some nodes that one might expect to always have type 11529 'bool' are documented to have either integral or boolean type. At some 11530 point in the future, the C front end may also make use of this same 11531 intermediate representation, and at this point these nodes will 11532 certainly have integral type. The previous sentence is not meant to 11533 imply that the C++ front end does not or will not give these nodes 11534 integral type. 11535 11536 Below, we list the various kinds of expression nodes. Except where 11537 noted otherwise, the operands to an expression are accessed using the 11538 'TREE_OPERAND' macro. For example, to access the first operand to a 11539 binary plus expression 'expr', use: 11540 11541 TREE_OPERAND (expr, 0) 11542 11543 As this example indicates, the operands are zero-indexed. 11544 11545 * Menu: 11546 11547 * Constants: Constant expressions. 11548 * Storage References:: 11549 * Unary and Binary Expressions:: 11550 * Vectors:: 11551 11552 11553 File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 11554 11555 11.6.1 Constant expressions 11556 --------------------------- 11557 11558 The table below begins with constants, moves on to unary expressions, 11559 then proceeds to binary expressions, and concludes with various other 11560 kinds of expressions: 11561 11562 'INTEGER_CST' 11563 These nodes represent integer constants. Note that the type of 11564 these constants is obtained with 'TREE_TYPE'; they are not always 11565 of type 'int'. In particular, 'char' constants are represented 11566 with 'INTEGER_CST' nodes. The value of the integer constant 'e' is 11567 given by 11568 ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT) 11569 + TREE_INST_CST_LOW (e)) 11570 HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms. 11571 Both 'TREE_INT_CST_HIGH' and 'TREE_INT_CST_LOW' return a 11572 'HOST_WIDE_INT'. The value of an 'INTEGER_CST' is interpreted as a 11573 signed or unsigned quantity depending on the type of the constant. 11574 In general, the expression given above will overflow, so it should 11575 not be used to calculate the value of the constant. 11576 11577 The variable 'integer_zero_node' is an integer constant with value 11578 zero. Similarly, 'integer_one_node' is an integer constant with 11579 value one. The 'size_zero_node' and 'size_one_node' variables are 11580 analogous, but have type 'size_t' rather than 'int'. 11581 11582 The function 'tree_int_cst_lt' is a predicate which holds if its 11583 first argument is less than its second. Both constants are assumed 11584 to have the same signedness (i.e., either both should be signed or 11585 both should be unsigned.) The full width of the constant is used 11586 when doing the comparison; the usual rules about promotions and 11587 conversions are ignored. Similarly, 'tree_int_cst_equal' holds if 11588 the two constants are equal. The 'tree_int_cst_sgn' function 11589 returns the sign of a constant. The value is '1', '0', or '-1' 11590 according on whether the constant is greater than, equal to, or 11591 less than zero. Again, the signedness of the constant's type is 11592 taken into account; an unsigned constant is never less than zero, 11593 no matter what its bit-pattern. 11594 11595 'REAL_CST' 11596 11597 FIXME: Talk about how to obtain representations of this constant, 11598 do comparisons, and so forth. 11599 11600 'FIXED_CST' 11601 11602 These nodes represent fixed-point constants. The type of these 11603 constants is obtained with 'TREE_TYPE'. 'TREE_FIXED_CST_PTR' 11604 points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the 11605 structure itself. 'struct fixed_value' contains 'data' with the 11606 size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated 11607 fixed-point machine mode for 'data'. 11608 11609 'COMPLEX_CST' 11610 These nodes are used to represent complex number constants, that is 11611 a '__complex__' whose parts are constant nodes. The 11612 'TREE_REALPART' and 'TREE_IMAGPART' return the real and the 11613 imaginary parts respectively. 11614 11615 'VECTOR_CST' 11616 These nodes are used to represent vector constants, whose parts are 11617 constant nodes. Each individual constant node is either an integer 11618 or a double constant node. The first operand is a 'TREE_LIST' of 11619 the constant nodes and is accessed through 'TREE_VECTOR_CST_ELTS'. 11620 11621 'STRING_CST' 11622 These nodes represent string-constants. The 'TREE_STRING_LENGTH' 11623 returns the length of the string, as an 'int'. The 11624 'TREE_STRING_POINTER' is a 'char*' containing the string itself. 11625 The string may not be 'NUL'-terminated, and it may contain embedded 11626 'NUL' characters. Therefore, the 'TREE_STRING_LENGTH' includes the 11627 trailing 'NUL' if it is present. 11628 11629 For wide string constants, the 'TREE_STRING_LENGTH' is the number 11630 of bytes in the string, and the 'TREE_STRING_POINTER' points to an 11631 array of the bytes of the string, as represented on the target 11632 system (that is, as integers in the target endianness). Wide and 11633 non-wide string constants are distinguished only by the 'TREE_TYPE' 11634 of the 'STRING_CST'. 11635 11636 FIXME: The formats of string constants are not well-defined when 11637 the target system bytes are not the same width as host system 11638 bytes. 11639 11640 11641 File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 11642 11643 11.6.2 References to storage 11644 ---------------------------- 11645 11646 'ARRAY_REF' 11647 These nodes represent array accesses. The first operand is the 11648 array; the second is the index. To calculate the address of the 11649 memory accessed, you must scale the index by the size of the type 11650 of the array elements. The type of these expressions must be the 11651 type of a component of the array. The third and fourth operands 11652 are used after gimplification to represent the lower bound and 11653 component size but should not be used directly; call 11654 'array_ref_low_bound' and 'array_ref_element_size' instead. 11655 11656 'ARRAY_RANGE_REF' 11657 These nodes represent access to a range (or "slice") of an array. 11658 The operands are the same as that for 'ARRAY_REF' and have the same 11659 meanings. The type of these expressions must be an array whose 11660 component type is the same as that of the first operand. The range 11661 of that array type determines the amount of data these expressions 11662 access. 11663 11664 'TARGET_MEM_REF' 11665 These nodes represent memory accesses whose address directly map to 11666 an addressing mode of the target architecture. The first argument 11667 is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed 11668 address. The second argument is 'TMR_BASE' and the third one is 11669 'TMR_INDEX'. The fourth argument is 'TMR_STEP' and must be an 11670 'INTEGER_CST'. The fifth argument is 'TMR_OFFSET' and must be an 11671 'INTEGER_CST'. Any of the arguments may be NULL if the appropriate 11672 component does not appear in the address. Address of the 11673 'TARGET_MEM_REF' is determined in the following way. 11674 11675 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 11676 11677 The sixth argument is the reference to the original memory access, 11678 which is preserved for the purposes of the RTL alias analysis. The 11679 seventh argument is a tag representing the results of tree level 11680 alias analysis. 11681 11682 'ADDR_EXPR' 11683 These nodes are used to represent the address of an object. (These 11684 expressions will always have pointer or reference type.) The 11685 operand may be another expression, or it may be a declaration. 11686 11687 As an extension, GCC allows users to take the address of a label. 11688 In this case, the operand of the 'ADDR_EXPR' will be a 11689 'LABEL_DECL'. The type of such an expression is 'void*'. 11690 11691 If the object addressed is not an lvalue, a temporary is created, 11692 and the address of the temporary is used. 11693 11694 'INDIRECT_REF' 11695 These nodes are used to represent the object pointed to by a 11696 pointer. The operand is the pointer being dereferenced; it will 11697 always have pointer or reference type. 11698 11699 'MEM_REF' 11700 These nodes are used to represent the object pointed to by a 11701 pointer offset by a constant. The first operand is the pointer 11702 being dereferenced; it will always have pointer or reference type. 11703 The second operand is a pointer constant. Its type is specifying 11704 the type to be used for type-based alias analysis. 11705 11706 'COMPONENT_REF' 11707 These nodes represent non-static data member accesses. The first 11708 operand is the object (rather than a pointer to it); the second 11709 operand is the 'FIELD_DECL' for the data member. The third operand 11710 represents the byte offset of the field, but should not be used 11711 directly; call 'component_ref_field_offset' instead. 11712 11713 11714 File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 11715 11716 11.6.3 Unary and Binary Expressions 11717 ----------------------------------- 11718 11719 'NEGATE_EXPR' 11720 These nodes represent unary negation of the single operand, for 11721 both integer and floating-point types. The type of negation can be 11722 determined by looking at the type of the expression. 11723 11724 The behavior of this operation on signed arithmetic overflow is 11725 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 11726 11727 'ABS_EXPR' 11728 These nodes represent the absolute value of the single operand, for 11729 both integer and floating-point types. This is typically used to 11730 implement the 'abs', 'labs' and 'llabs' builtins for integer types, 11731 and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point 11732 types. The type of abs operation can be determined by looking at 11733 the type of the expression. 11734 11735 This node is not used for complex types. To represent the modulus 11736 or complex abs of a complex value, use the 'BUILT_IN_CABS', 11737 'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement 11738 the C99 'cabs', 'cabsf' and 'cabsl' built-in functions. 11739 11740 'BIT_NOT_EXPR' 11741 These nodes represent bitwise complement, and will always have 11742 integral type. The only operand is the value to be complemented. 11743 11744 'TRUTH_NOT_EXPR' 11745 These nodes represent logical negation, and will always have 11746 integral (or boolean) type. The operand is the value being 11747 negated. The type of the operand and that of the result are always 11748 of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 11749 11750 'PREDECREMENT_EXPR' 11751 'PREINCREMENT_EXPR' 11752 'POSTDECREMENT_EXPR' 11753 'POSTINCREMENT_EXPR' 11754 These nodes represent increment and decrement expressions. The 11755 value of the single operand is computed, and the operand 11756 incremented or decremented. In the case of 'PREDECREMENT_EXPR' and 11757 'PREINCREMENT_EXPR', the value of the expression is the value 11758 resulting after the increment or decrement; in the case of 11759 'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before 11760 the increment or decrement occurs. The type of the operand, like 11761 that of the result, will be either integral, boolean, or 11762 floating-point. 11763 11764 'FIX_TRUNC_EXPR' 11765 These nodes represent conversion of a floating-point value to an 11766 integer. The single operand will have a floating-point type, while 11767 the complete expression will have an integral (or boolean) type. 11768 The operand is rounded towards zero. 11769 11770 'FLOAT_EXPR' 11771 These nodes represent conversion of an integral (or boolean) value 11772 to a floating-point value. The single operand will have integral 11773 type, while the complete expression will have a floating-point 11774 type. 11775 11776 FIXME: How is the operand supposed to be rounded? Is this 11777 dependent on '-mieee'? 11778 11779 'COMPLEX_EXPR' 11780 These nodes are used to represent complex numbers constructed from 11781 two expressions of the same (integer or real) type. The first 11782 operand is the real part and the second operand is the imaginary 11783 part. 11784 11785 'CONJ_EXPR' 11786 These nodes represent the conjugate of their operand. 11787 11788 'REALPART_EXPR' 11789 'IMAGPART_EXPR' 11790 These nodes represent respectively the real and the imaginary parts 11791 of complex numbers (their sole argument). 11792 11793 'NON_LVALUE_EXPR' 11794 These nodes indicate that their one and only operand is not an 11795 lvalue. A back end can treat these identically to the single 11796 operand. 11797 11798 'NOP_EXPR' 11799 These nodes are used to represent conversions that do not require 11800 any code-generation. For example, conversion of a 'char*' to an 11801 'int*' does not require any code be generated; such a conversion is 11802 represented by a 'NOP_EXPR'. The single operand is the expression 11803 to be converted. The conversion from a pointer to a reference is 11804 also represented with a 'NOP_EXPR'. 11805 11806 'CONVERT_EXPR' 11807 These nodes are similar to 'NOP_EXPR's, but are used in those 11808 situations where code may need to be generated. For example, if an 11809 'int*' is converted to an 'int' code may need to be generated on 11810 some platforms. These nodes are never used for C++-specific 11811 conversions, like conversions between pointers to different classes 11812 in an inheritance hierarchy. Any adjustments that need to be made 11813 in such cases are always indicated explicitly. Similarly, a 11814 user-defined conversion is never represented by a 'CONVERT_EXPR'; 11815 instead, the function calls are made explicit. 11816 11817 'FIXED_CONVERT_EXPR' 11818 These nodes are used to represent conversions that involve 11819 fixed-point values. For example, from a fixed-point value to 11820 another fixed-point value, from an integer to a fixed-point value, 11821 from a fixed-point value to an integer, from a floating-point value 11822 to a fixed-point value, or from a fixed-point value to a 11823 floating-point value. 11824 11825 'LSHIFT_EXPR' 11826 'RSHIFT_EXPR' 11827 These nodes represent left and right shifts, respectively. The 11828 first operand is the value to shift; it will always be of integral 11829 type. The second operand is an expression for the number of bits 11830 by which to shift. Right shift should be treated as arithmetic, 11831 i.e., the high-order bits should be zero-filled when the expression 11832 has unsigned type and filled with the sign bit when the expression 11833 has signed type. Note that the result is undefined if the second 11834 operand is larger than or equal to the first operand's type size. 11835 Unlike most nodes, these can have a vector as first operand and a 11836 scalar as second operand. 11837 11838 'BIT_IOR_EXPR' 11839 'BIT_XOR_EXPR' 11840 'BIT_AND_EXPR' 11841 These nodes represent bitwise inclusive or, bitwise exclusive or, 11842 and bitwise and, respectively. Both operands will always have 11843 integral type. 11844 11845 'TRUTH_ANDIF_EXPR' 11846 'TRUTH_ORIF_EXPR' 11847 These nodes represent logical "and" and logical "or", respectively. 11848 These operators are not strict; i.e., the second operand is 11849 evaluated only if the value of the expression is not determined by 11850 evaluation of the first operand. The type of the operands and that 11851 of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 11852 11853 'TRUTH_AND_EXPR' 11854 'TRUTH_OR_EXPR' 11855 'TRUTH_XOR_EXPR' 11856 These nodes represent logical and, logical or, and logical 11857 exclusive or. They are strict; both arguments are always 11858 evaluated. There are no corresponding operators in C or C++, but 11859 the front end will sometimes generate these expressions anyhow, if 11860 it can tell that strictness does not matter. The type of the 11861 operands and that of the result are always of 'BOOLEAN_TYPE' or 11862 'INTEGER_TYPE'. 11863 11864 'POINTER_PLUS_EXPR' 11865 This node represents pointer arithmetic. The first operand is 11866 always a pointer/reference type. The second operand is always an 11867 unsigned integer type compatible with sizetype. This is the only 11868 binary arithmetic operand that can operate on pointer types. 11869 11870 'PLUS_EXPR' 11871 'MINUS_EXPR' 11872 'MULT_EXPR' 11873 These nodes represent various binary arithmetic operations. 11874 Respectively, these operations are addition, subtraction (of the 11875 second operand from the first) and multiplication. Their operands 11876 may have either integral or floating type, but there will never be 11877 case in which one operand is of floating type and the other is of 11878 integral type. 11879 11880 The behavior of these operations on signed arithmetic overflow is 11881 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 11882 11883 'MULT_HIGHPART_EXPR' 11884 This node represents the "high-part" of a widening multiplication. 11885 For an integral type with B bits of precision, the result is the 11886 most significant B bits of the full 2B product. 11887 11888 'RDIV_EXPR' 11889 This node represents a floating point division operation. 11890 11891 'TRUNC_DIV_EXPR' 11892 'FLOOR_DIV_EXPR' 11893 'CEIL_DIV_EXPR' 11894 'ROUND_DIV_EXPR' 11895 These nodes represent integer division operations that return an 11896 integer result. 'TRUNC_DIV_EXPR' rounds towards zero, 11897 'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR' 11898 rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the 11899 closest integer. Integer division in C and C++ is truncating, i.e. 11900 'TRUNC_DIV_EXPR'. 11901 11902 The behavior of these operations on signed arithmetic overflow, 11903 when dividing the minimum signed integer by minus one, is 11904 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 11905 11906 'TRUNC_MOD_EXPR' 11907 'FLOOR_MOD_EXPR' 11908 'CEIL_MOD_EXPR' 11909 'ROUND_MOD_EXPR' 11910 These nodes represent the integer remainder or modulus operation. 11911 The integer modulus of two operands 'a' and 'b' is defined as 'a - 11912 (a/b)*b' where the division calculated using the corresponding 11913 division operator. Hence for 'TRUNC_MOD_EXPR' this definition 11914 assumes division using truncation towards zero, i.e. 11915 'TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 11916 division, i.e. 'TRUNC_MOD_EXPR'. 11917 11918 'EXACT_DIV_EXPR' 11919 The 'EXACT_DIV_EXPR' code is used to represent integer divisions 11920 where the numerator is known to be an exact multiple of the 11921 denominator. This allows the backend to choose between the faster 11922 of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the 11923 current target. 11924 11925 'LT_EXPR' 11926 'LE_EXPR' 11927 'GT_EXPR' 11928 'GE_EXPR' 11929 'EQ_EXPR' 11930 'NE_EXPR' 11931 These nodes represent the less than, less than or equal to, greater 11932 than, greater than or equal to, equal, and not equal comparison 11933 operators. The first and second operands will either be both of 11934 integral type, both of floating type or both of vector type. The 11935 result type of these expressions will always be of integral, 11936 boolean or signed integral vector type. These operations return 11937 the result type's zero value for false, the result type's one value 11938 for true, and a vector whose elements are zero (false) or minus one 11939 (true) for vectors. 11940 11941 For floating point comparisons, if we honor IEEE NaNs and either 11942 operand is NaN, then 'NE_EXPR' always returns true and the 11943 remaining operators always return false. On some targets, 11944 comparisons against an IEEE NaN, other than equality and 11945 inequality, may generate a floating point exception. 11946 11947 'ORDERED_EXPR' 11948 'UNORDERED_EXPR' 11949 These nodes represent non-trapping ordered and unordered comparison 11950 operators. These operations take two floating point operands and 11951 determine whether they are ordered or unordered relative to each 11952 other. If either operand is an IEEE NaN, their comparison is 11953 defined to be unordered, otherwise the comparison is defined to be 11954 ordered. The result type of these expressions will always be of 11955 integral or boolean type. These operations return the result 11956 type's zero value for false, and the result type's one value for 11957 true. 11958 11959 'UNLT_EXPR' 11960 'UNLE_EXPR' 11961 'UNGT_EXPR' 11962 'UNGE_EXPR' 11963 'UNEQ_EXPR' 11964 'LTGT_EXPR' 11965 These nodes represent the unordered comparison operators. These 11966 operations take two floating point operands and determine whether 11967 the operands are unordered or are less than, less than or equal to, 11968 greater than, greater than or equal to, or equal respectively. For 11969 example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN 11970 or the first operand is less than the second. With the possible 11971 exception of 'LTGT_EXPR', all of these operations are guaranteed 11972 not to generate a floating point exception. The result type of 11973 these expressions will always be of integral or boolean type. 11974 These operations return the result type's zero value for false, and 11975 the result type's one value for true. 11976 11977 'MODIFY_EXPR' 11978 These nodes represent assignment. The left-hand side is the first 11979 operand; the right-hand side is the second operand. The left-hand 11980 side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or 11981 other lvalue. 11982 11983 These nodes are used to represent not only assignment with '=' but 11984 also compound assignments (like '+='), by reduction to '=' 11985 assignment. In other words, the representation for 'i += 3' looks 11986 just like that for 'i = i + 3'. 11987 11988 'INIT_EXPR' 11989 These nodes are just like 'MODIFY_EXPR', but are used only when a 11990 variable is initialized, rather than assigned to subsequently. 11991 This means that we can assume that the target of the initialization 11992 is not used in computing its own value; any reference to the lhs in 11993 computing the rhs is undefined. 11994 11995 'COMPOUND_EXPR' 11996 These nodes represent comma-expressions. The first operand is an 11997 expression whose value is computed and thrown away prior to the 11998 evaluation of the second operand. The value of the entire 11999 expression is the value of the second operand. 12000 12001 'COND_EXPR' 12002 These nodes represent '?:' expressions. The first operand is of 12003 boolean or integral type. If it evaluates to a nonzero value, the 12004 second operand should be evaluated, and returned as the value of 12005 the expression. Otherwise, the third operand is evaluated, and 12006 returned as the value of the expression. 12007 12008 The second operand must have the same type as the entire 12009 expression, unless it unconditionally throws an exception or calls 12010 a noreturn function, in which case it should have void type. The 12011 same constraints apply to the third operand. This allows array 12012 bounds checks to be represented conveniently as '(i >= 0 && i < 10) 12013 ? i : abort()'. 12014 12015 As a GNU extension, the C language front-ends allow the second 12016 operand of the '?:' operator may be omitted in the source. For 12017 example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x' 12018 is an expression without side-effects. In the tree representation, 12019 however, the second operand is always present, possibly protected 12020 by 'SAVE_EXPR' if the first argument does cause side-effects. 12021 12022 'CALL_EXPR' 12023 These nodes are used to represent calls to functions, including 12024 non-static member functions. 'CALL_EXPR's are implemented as 12025 expression nodes with a variable number of operands. Rather than 12026 using 'TREE_OPERAND' to extract them, it is preferable to use the 12027 specialized accessor macros and functions that operate specifically 12028 on 'CALL_EXPR' nodes. 12029 12030 'CALL_EXPR_FN' returns a pointer to the function to call; it is 12031 always an expression whose type is a 'POINTER_TYPE'. 12032 12033 The number of arguments to the call is returned by 12034 'call_expr_nargs', while the arguments themselves can be accessed 12035 with the 'CALL_EXPR_ARG' macro. The arguments are zero-indexed and 12036 numbered left-to-right. You can iterate over the arguments using 12037 'FOR_EACH_CALL_EXPR_ARG', as in: 12038 12039 tree call, arg; 12040 call_expr_arg_iterator iter; 12041 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 12042 /* arg is bound to successive arguments of call. */ 12043 ...; 12044 12045 For non-static member functions, there will be an operand 12046 corresponding to the 'this' pointer. There will always be 12047 expressions corresponding to all of the arguments, even if the 12048 function is declared with default arguments and some arguments are 12049 not explicitly provided at the call sites. 12050 12051 'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is 12052 used to implement nested functions. This operand is otherwise 12053 null. 12054 12055 'CLEANUP_POINT_EXPR' 12056 These nodes represent full-expressions. The single operand is an 12057 expression to evaluate. Any destructor calls engendered by the 12058 creation of temporaries during the evaluation of that expression 12059 should be performed immediately after the expression is evaluated. 12060 12061 'CONSTRUCTOR' 12062 These nodes represent the brace-enclosed initializers for a 12063 structure or array. The first operand is reserved for use by the 12064 back end. The second operand is a 'TREE_LIST'. If the 'TREE_TYPE' 12065 of the 'CONSTRUCTOR' is a 'RECORD_TYPE' or 'UNION_TYPE', then the 12066 'TREE_PURPOSE' of each node in the 'TREE_LIST' will be a 12067 'FIELD_DECL' and the 'TREE_VALUE' of each node will be the 12068 expression used to initialize that field. 12069 12070 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then 12071 the 'TREE_PURPOSE' of each element in the 'TREE_LIST' will be an 12072 'INTEGER_CST' or a 'RANGE_EXPR' of two 'INTEGER_CST's. A single 12073 'INTEGER_CST' indicates which element of the array (indexed from 12074 zero) is being assigned to. A 'RANGE_EXPR' indicates an inclusive 12075 range of elements to initialize. In both cases the 'TREE_VALUE' is 12076 the corresponding initializer. It is re-evaluated for each element 12077 of a 'RANGE_EXPR'. If the 'TREE_PURPOSE' is 'NULL_TREE', then the 12078 initializer is for the next available array element. 12079 12080 In the front end, you should not depend on the fields appearing in 12081 any particular order. However, in the middle end, fields must 12082 appear in declaration order. You should not assume that all fields 12083 will be represented. Unrepresented fields will be set to zero. 12084 12085 'COMPOUND_LITERAL_EXPR' 12086 These nodes represent ISO C99 compound literals. The 12087 'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an 12088 anonymous 'VAR_DECL' for the unnamed object represented by the 12089 compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a 12090 'CONSTRUCTOR' representing the brace-enclosed list of initializers 12091 in the compound literal. That anonymous 'VAR_DECL' can also be 12092 accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro. 12093 12094 'SAVE_EXPR' 12095 12096 A 'SAVE_EXPR' represents an expression (possibly involving 12097 side-effects) that is used more than once. The side-effects should 12098 occur only the first time the expression is evaluated. Subsequent 12099 uses should just reuse the computed value. The first operand to 12100 the 'SAVE_EXPR' is the expression to evaluate. The side-effects 12101 should be executed where the 'SAVE_EXPR' is first encountered in a 12102 depth-first preorder traversal of the expression tree. 12103 12104 'TARGET_EXPR' 12105 A 'TARGET_EXPR' represents a temporary object. The first operand 12106 is a 'VAR_DECL' for the temporary variable. The second operand is 12107 the initializer for the temporary. The initializer is evaluated 12108 and, if non-void, copied (bitwise) into the temporary. If the 12109 initializer is void, that means that it will perform the 12110 initialization itself. 12111 12112 Often, a 'TARGET_EXPR' occurs on the right-hand side of an 12113 assignment, or as the second operand to a comma-expression which is 12114 itself the right-hand side of an assignment, etc. In this case, we 12115 say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is 12116 "orphaned". For a normal 'TARGET_EXPR' the temporary variable 12117 should be treated as an alias for the left-hand side of the 12118 assignment, rather than as a new temporary variable. 12119 12120 The third operand to the 'TARGET_EXPR', if present, is a 12121 cleanup-expression (i.e., destructor call) for the temporary. If 12122 this expression is orphaned, then this expression must be executed 12123 when the statement containing this expression is complete. These 12124 cleanups must always be executed in the order opposite to that in 12125 which they were encountered. Note that if a temporary is created 12126 on one branch of a conditional operator (i.e., in the second or 12127 third operand to a 'COND_EXPR'), the cleanup must be run only if 12128 that branch is actually executed. 12129 12130 'VA_ARG_EXPR' 12131 This node is used to implement support for the C/C++ variable 12132 argument-list mechanism. It represents expressions like 'va_arg 12133 (ap, type)'. Its 'TREE_TYPE' yields the tree representation for 12134 'type' and its sole argument yields the representation for 'ap'. 12135 12136 12137 File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 12138 12139 11.6.4 Vectors 12140 -------------- 12141 12142 'VEC_LSHIFT_EXPR' 12143 'VEC_RSHIFT_EXPR' 12144 These nodes represent whole vector left and right shifts, 12145 respectively. The first operand is the vector to shift; it will 12146 always be of vector type. The second operand is an expression for 12147 the number of bits by which to shift. Note that the result is 12148 undefined if the second operand is larger than or equal to the 12149 first operand's type size. 12150 12151 'VEC_WIDEN_MULT_HI_EXPR' 12152 'VEC_WIDEN_MULT_LO_EXPR' 12153 These nodes represent widening vector multiplication of the high 12154 and low parts of the two input vectors, respectively. Their 12155 operands are vectors that contain the same number of elements ('N') 12156 of the same integral type. The result is a vector that contains 12157 half as many elements, of an integral type whose size is twice as 12158 wide. In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2' 12159 elements of the two vector are multiplied to produce the vector of 12160 'N/2' products. In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low 12161 'N/2' elements of the two vector are multiplied to produce the 12162 vector of 'N/2' products. 12163 12164 'VEC_UNPACK_HI_EXPR' 12165 'VEC_UNPACK_LO_EXPR' 12166 These nodes represent unpacking of the high and low parts of the 12167 input vector, respectively. The single operand is a vector that 12168 contains 'N' elements of the same integral or floating point type. 12169 The result is a vector that contains half as many elements, of an 12170 integral or floating point type whose size is twice as wide. In 12171 the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the 12172 vector are extracted and widened (promoted). In the case of 12173 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are 12174 extracted and widened (promoted). 12175 12176 'VEC_UNPACK_FLOAT_HI_EXPR' 12177 'VEC_UNPACK_FLOAT_LO_EXPR' 12178 These nodes represent unpacking of the high and low parts of the 12179 input vector, where the values are converted from fixed point to 12180 floating point. The single operand is a vector that contains 'N' 12181 elements of the same integral type. The result is a vector that 12182 contains half as many elements of a floating point type whose size 12183 is twice as wide. In the case of 'VEC_UNPACK_HI_EXPR' the high 12184 'N/2' elements of the vector are extracted, converted and widened. 12185 In the case of 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the 12186 vector are extracted, converted and widened. 12187 12188 'VEC_PACK_TRUNC_EXPR' 12189 This node represents packing of truncated elements of the two input 12190 vectors into the output vector. Input operands are vectors that 12191 contain the same number of elements of the same integral or 12192 floating point type. The result is a vector that contains twice as 12193 many elements of an integral or floating point type whose size is 12194 half as wide. The elements of the two vectors are demoted and 12195 merged (concatenated) to form the output vector. 12196 12197 'VEC_PACK_SAT_EXPR' 12198 This node represents packing of elements of the two input vectors 12199 into the output vector using saturation. Input operands are 12200 vectors that contain the same number of elements of the same 12201 integral type. The result is a vector that contains twice as many 12202 elements of an integral type whose size is half as wide. The 12203 elements of the two vectors are demoted and merged (concatenated) 12204 to form the output vector. 12205 12206 'VEC_PACK_FIX_TRUNC_EXPR' 12207 This node represents packing of elements of the two input vectors 12208 into the output vector, where the values are converted from 12209 floating point to fixed point. Input operands are vectors that 12210 contain the same number of elements of a floating point type. The 12211 result is a vector that contains twice as many elements of an 12212 integral type whose size is half as wide. The elements of the two 12213 vectors are merged (concatenated) to form the output vector. 12214 12215 'VEC_COND_EXPR' 12216 These nodes represent '?:' expressions. The three operands must be 12217 vectors of the same size and number of elements. The second and 12218 third operands must have the same type as the entire expression. 12219 The first operand is of signed integral vector type. If an element 12220 of the first operand evaluates to a zero value, the corresponding 12221 element of the result is taken from the third operand. If it 12222 evaluates to a minus one value, it is taken from the second 12223 operand. It should never evaluate to any other value currently, 12224 but optimizations should not rely on that property. In contrast 12225 with a 'COND_EXPR', all operands are always evaluated. 12226 12227 12228 File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 12229 12230 11.7 Statements 12231 =============== 12232 12233 Most statements in GIMPLE are assignment statements, represented by 12234 'GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 12235 a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'. 12236 12237 There are also several varieties of complex statements. 12238 12239 * Menu: 12240 12241 * Basic Statements:: 12242 * Blocks:: 12243 * Statement Sequences:: 12244 * Empty Statements:: 12245 * Jumps:: 12246 * Cleanups:: 12247 * OpenMP:: 12248 12249 12250 File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 12251 12252 11.7.1 Basic Statements 12253 ----------------------- 12254 12255 'ASM_EXPR' 12256 12257 Used to represent an inline assembly statement. For an inline 12258 assembly statement like: 12259 asm ("mov x, y"); 12260 The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x, 12261 y"'. If the original statement made use of the extended-assembly 12262 syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will 12263 be the outputs, inputs, and clobbers for the statement, represented 12264 as 'STRING_CST' nodes. The extended-assembly syntax looks like: 12265 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 12266 The first string is the 'ASM_STRING', containing the instruction 12267 template. The next two strings are the output and inputs, 12268 respectively; this statement has no clobbers. As this example 12269 indicates, "plain" assembly statements are merely a special case of 12270 extended assembly statements; they have no cv-qualifiers, outputs, 12271 inputs, or clobbers. All of the strings will be 'NUL'-terminated, 12272 and will contain no embedded 'NUL'-characters. 12273 12274 If the assembly statement is declared 'volatile', or if the 12275 statement was not an extended assembly statement, and is therefore 12276 implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold 12277 of the 'ASM_EXPR'. 12278 12279 'DECL_EXPR' 12280 12281 Used to represent a local declaration. The 'DECL_EXPR_DECL' macro 12282 can be used to obtain the entity declared. This declaration may be 12283 a 'LABEL_DECL', indicating that the label declared is a local 12284 label. (As an extension, GCC allows the declaration of labels with 12285 scope.) In C, this declaration may be a 'FUNCTION_DECL', 12286 indicating the use of the GCC nested function extension. For more 12287 information, *note Functions::. 12288 12289 'LABEL_EXPR' 12290 12291 Used to represent a label. The 'LABEL_DECL' declared by this 12292 statement can be obtained with the 'LABEL_EXPR_LABEL' macro. The 12293 'IDENTIFIER_NODE' giving the name of the label can be obtained from 12294 the 'LABEL_DECL' with 'DECL_NAME'. 12295 12296 'GOTO_EXPR' 12297 12298 Used to represent a 'goto' statement. The 'GOTO_DESTINATION' will 12299 usually be a 'LABEL_DECL'. However, if the "computed goto" 12300 extension has been used, the 'GOTO_DESTINATION' will be an 12301 arbitrary expression indicating the destination. This expression 12302 will always have pointer type. 12303 12304 'RETURN_EXPR' 12305 12306 Used to represent a 'return' statement. Operand 0 represents the 12307 value to return. It should either be the 'RESULT_DECL' for the 12308 containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the 12309 function's 'RESULT_DECL'. It will be 'NULL_TREE' if the statement 12310 was just 12311 return; 12312 12313 'LOOP_EXPR' 12314 These nodes represent "infinite" loops. The 'LOOP_EXPR_BODY' 12315 represents the body of the loop. It should be executed forever, 12316 unless an 'EXIT_EXPR' is encountered. 12317 12318 'EXIT_EXPR' 12319 These nodes represent conditional exits from the nearest enclosing 12320 'LOOP_EXPR'. The single operand is the condition; if it is 12321 nonzero, then the loop should be exited. An 'EXIT_EXPR' will only 12322 appear within a 'LOOP_EXPR'. 12323 12324 'SWITCH_STMT' 12325 12326 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 12327 the expression on which the switch is occurring. See the 12328 documentation for an 'IF_STMT' for more information on the 12329 representation used for the condition. The 'SWITCH_STMT_BODY' is 12330 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 12331 original type of switch expression as given in the source, before 12332 any compiler conversions. 12333 12334 'CASE_LABEL_EXPR' 12335 12336 Use to represent a 'case' label, range of 'case' labels, or a 12337 'default' label. If 'CASE_LOW' is 'NULL_TREE', then this is a 12338 'default' label. Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then 12339 this is an ordinary 'case' label. In this case, 'CASE_LOW' is an 12340 expression giving the value of the label. Both 'CASE_LOW' and 12341 'CASE_HIGH' are 'INTEGER_CST' nodes. These values will have the 12342 same type as the condition expression in the switch statement. 12343 12344 Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the 12345 statement is a range of case labels. Such statements originate 12346 with the extension that allows users to write things of the form: 12347 case 2 ... 5: 12348 The first value will be 'CASE_LOW', while the second will be 12349 'CASE_HIGH'. 12350 12351 12352 File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 12353 12354 11.7.2 Blocks 12355 ------------- 12356 12357 Block scopes and the variables they declare in GENERIC are expressed 12358 using the 'BIND_EXPR' code, which in previous versions of GCC was 12359 primarily used for the C statement-expression extension. 12360 12361 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration 12362 order through their 'TREE_CHAIN' field. Any runtime initialization is 12363 moved out of 'DECL_INITIAL' and into a statement in the controlled 12364 block. When gimplifying from C or C++, this initialization replaces the 12365 'DECL_STMT'. These variables will never require cleanups. The scope of 12366 these variables is just the body 12367 12368 Variable-length arrays (VLAs) complicate this process, as their size 12369 often refers to variables initialized earlier in the block. To handle 12370 this, we currently split the block at that point, and move the VLA into 12371 a new, inner 'BIND_EXPR'. This strategy may change in the future. 12372 12373 A C++ program will usually contain more 'BIND_EXPR's than there are 12374 syntactic blocks in the source code, since several C++ constructs have 12375 implicit scopes associated with them. On the other hand, although the 12376 C++ front end uses pseudo-scopes to handle cleanups for objects with 12377 destructors, these don't translate into the GIMPLE form; multiple 12378 declarations at the same level use the same 'BIND_EXPR'. 12379 12380 12381 File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 12382 12383 11.7.3 Statement Sequences 12384 -------------------------- 12385 12386 Multiple statements at the same nesting level are collected into a 12387 'STATEMENT_LIST'. Statement lists are modified and traversed using the 12388 interface in 'tree-iterator.h'. 12389 12390 12391 File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 12392 12393 11.7.4 Empty Statements 12394 ----------------------- 12395 12396 Whenever possible, statements with no effect are discarded. But if they 12397 are nested within another construct which cannot be discarded for some 12398 reason, they are instead replaced with an empty statement, generated by 12399 'build_empty_stmt'. Initially, all empty statements were shared, after 12400 the pattern of the Java front end, but this caused a lot of trouble in 12401 practice. 12402 12403 An empty statement is represented as '(void)0'. 12404 12405 12406 File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 12407 12408 11.7.5 Jumps 12409 ------------ 12410 12411 Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'. 12412 12413 The operand of a 'GOTO_EXPR' must be either a label or a variable 12414 containing the address to jump to. 12415 12416 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or 12417 a 'MODIFY_EXPR' which sets the return value. It would be nice to move 12418 the 'MODIFY_EXPR' into a separate statement, but the special return 12419 semantics in 'expand_return' make that difficult. It may still happen 12420 in the future, perhaps by moving most of that logic into 12421 'expand_assignment'. 12422 12423 12424 File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 12425 12426 11.7.6 Cleanups 12427 --------------- 12428 12429 Destructors for local C++ objects and similar dynamic cleanups are 12430 represented in GIMPLE by a 'TRY_FINALLY_EXPR'. 'TRY_FINALLY_EXPR' has 12431 two operands, both of which are a sequence of statements to execute. 12432 The first sequence is executed. When it completes the second sequence 12433 is executed. 12434 12435 The first sequence may complete in the following ways: 12436 12437 1. Execute the last statement in the sequence and fall off the end. 12438 12439 2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside 12440 the sequence. 12441 12442 3. Execute a return statement ('RETURN_EXPR'). 12443 12444 4. Throw an exception. This is currently not explicitly represented 12445 in GIMPLE. 12446 12447 The second sequence is not executed if the first sequence completes by 12448 calling 'setjmp' or 'exit' or any other function that does not return. 12449 The second sequence is also not executed if the first sequence completes 12450 via a non-local goto or a computed goto (in general the compiler does 12451 not know whether such a goto statement exits the first sequence or not, 12452 so we assume that it doesn't). 12453 12454 After the second sequence is executed, if it completes normally by 12455 falling off the end, execution continues wherever the first sequence 12456 would have continued, by falling off the end, or doing a goto, etc. 12457 12458 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 12459 to appear on every edge out of the controlled block; this reduces the 12460 freedom to move code across these edges. Therefore, the EH lowering 12461 pass which runs before most of the optimization passes eliminates these 12462 expressions by explicitly adding the cleanup to each edge. Rethrowing 12463 the exception is represented using 'RESX_EXPR'. 12464 12465 12466 File: gccint.info, Node: OpenMP, Prev: Cleanups, Up: Statements 12467 12468 11.7.7 OpenMP 12469 ------------- 12470 12471 All the statements starting with 'OMP_' represent directives and clauses 12472 used by the OpenMP API <http://www.openmp.org/>. 12473 12474 'OMP_PARALLEL' 12475 12476 Represents '#pragma omp parallel [clause1 ... clauseN]'. It has 12477 four operands: 12478 12479 Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High 12480 GIMPLE forms. It contains the body of code to be executed by all 12481 the threads. During GIMPLE lowering, this operand becomes 'NULL' 12482 and the body is emitted linearly after 'OMP_PARALLEL'. 12483 12484 Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated 12485 with the directive. 12486 12487 Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it 12488 contains the 'FUNCTION_DECL' for the function that will contain the 12489 body of the parallel region. 12490 12491 Operand 'OMP_PARALLEL_DATA_ARG' is also created by 12492 'pass_lower_omp'. If there are shared variables to be communicated 12493 to the children threads, this operand will contain the 'VAR_DECL' 12494 that contains all the shared values and variables. 12495 12496 'OMP_FOR' 12497 12498 Represents '#pragma omp for [clause1 ... clauseN]'. It has 5 12499 operands: 12500 12501 Operand 'OMP_FOR_BODY' contains the loop body. 12502 12503 Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with 12504 the directive. 12505 12506 Operand 'OMP_FOR_INIT' is the loop initialization code of the form 12507 'VAR = N1'. 12508 12509 Operand 'OMP_FOR_COND' is the loop conditional expression of the 12510 form 'VAR {<,>,<=,>=} N2'. 12511 12512 Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR 12513 {+=,-=} INCR'. 12514 12515 Operand 'OMP_FOR_PRE_BODY' contains side-effect code from operands 12516 'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'. These 12517 side-effects are part of the 'OMP_FOR' block but must be evaluated 12518 before the start of loop body. 12519 12520 The loop index variable 'VAR' must be a signed integer variable, 12521 which is implicitly private to each thread. Bounds 'N1' and 'N2' 12522 and the increment expression 'INCR' are required to be loop 12523 invariant integer expressions that are evaluated without any 12524 synchronization. The evaluation order, frequency of evaluation and 12525 side-effects are unspecified by the standard. 12526 12527 'OMP_SECTIONS' 12528 12529 Represents '#pragma omp sections [clause1 ... clauseN]'. 12530 12531 Operand 'OMP_SECTIONS_BODY' contains the sections body, which in 12532 turn contains a set of 'OMP_SECTION' nodes for each of the 12533 concurrent sections delimited by '#pragma omp section'. 12534 12535 Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated 12536 with the directive. 12537 12538 'OMP_SECTION' 12539 12540 Section delimiter for 'OMP_SECTIONS'. 12541 12542 'OMP_SINGLE' 12543 12544 Represents '#pragma omp single'. 12545 12546 Operand 'OMP_SINGLE_BODY' contains the body of code to be executed 12547 by a single thread. 12548 12549 Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with 12550 the directive. 12551 12552 'OMP_MASTER' 12553 12554 Represents '#pragma omp master'. 12555 12556 Operand 'OMP_MASTER_BODY' contains the body of code to be executed 12557 by the master thread. 12558 12559 'OMP_ORDERED' 12560 12561 Represents '#pragma omp ordered'. 12562 12563 Operand 'OMP_ORDERED_BODY' contains the body of code to be executed 12564 in the sequential order dictated by the loop index variable. 12565 12566 'OMP_CRITICAL' 12567 12568 Represents '#pragma omp critical [name]'. 12569 12570 Operand 'OMP_CRITICAL_BODY' is the critical section. 12571 12572 Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the 12573 critical section. 12574 12575 'OMP_RETURN' 12576 12577 This does not represent any OpenMP directive, it is an artificial 12578 marker to indicate the end of the body of an OpenMP. It is used by 12579 the flow graph ('tree-cfg.c') and OpenMP region building code 12580 ('omp-low.c'). 12581 12582 'OMP_CONTINUE' 12583 12584 Similarly, this instruction does not represent an OpenMP directive, 12585 it is used by 'OMP_FOR' and 'OMP_SECTIONS' to mark the place where 12586 the code needs to loop to the next iteration (in the case of 12587 'OMP_FOR') or the next section (in the case of 'OMP_SECTIONS'). 12588 12589 In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'. 12590 But if there are cleanups that need to occur right after the 12591 looping body, it will be emitted between 'OMP_CONTINUE' and 12592 'OMP_RETURN'. 12593 12594 'OMP_ATOMIC' 12595 12596 Represents '#pragma omp atomic'. 12597 12598 Operand 0 is the address at which the atomic operation is to be 12599 performed. 12600 12601 Operand 1 is the expression to evaluate. The gimplifier tries 12602 three alternative code generation strategies. Whenever possible, 12603 an atomic update built-in is used. If that fails, a 12604 compare-and-swap loop is attempted. If that also fails, a regular 12605 critical section around the expression is used. 12606 12607 'OMP_CLAUSE' 12608 12609 Represents clauses associated with one of the 'OMP_' directives. 12610 Clauses are represented by separate sub-codes defined in 'tree.h'. 12611 Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE', 12612 'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE', 12613 'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN', 12614 'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF', 12615 'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE', 12616 'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT', 12617 'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED', 12618 'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'. Each code 12619 represents the corresponding OpenMP clause. 12620 12621 Clauses associated with the same directive are chained together via 12622 'OMP_CLAUSE_CHAIN'. Those clauses that accept a list of variables 12623 are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'. 12624 Therefore, multiple variables under the same clause 'C' need to be 12625 represented as multiple 'C' clauses chained together. This 12626 facilitates adding new clauses during compilation. 12627 12628 12629 File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 12630 12631 11.8 Functions 12632 ============== 12633 12634 A function is represented by a 'FUNCTION_DECL' node. It stores the 12635 basic pieces of the function such as body, parameters, and return type 12636 as well as information on the surrounding context, visibility, and 12637 linkage. 12638 12639 * Menu: 12640 12641 * Function Basics:: Function names, body, and parameters. 12642 * Function Properties:: Context, linkage, etc. 12643 12644 12645 File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 12646 12647 11.8.1 Function Basics 12648 ---------------------- 12649 12650 A function has four core parts: the name, the parameters, the result, 12651 and the body. The following macros and functions access these parts of 12652 a 'FUNCTION_DECL' as well as other basic features: 12653 'DECL_NAME' 12654 This macro returns the unqualified name of the function, as an 12655 'IDENTIFIER_NODE'. For an instantiation of a function template, 12656 the 'DECL_NAME' is the unqualified name of the template, not 12657 something like 'f<int>'. The value of 'DECL_NAME' is undefined 12658 when used on a constructor, destructor, overloaded operator, or 12659 type-conversion operator, or any function that is implicitly 12660 generated by the compiler. See below for macros that can be used 12661 to distinguish these cases. 12662 12663 'DECL_ASSEMBLER_NAME' 12664 This macro returns the mangled name of the function, also an 12665 'IDENTIFIER_NODE'. This name does not contain leading underscores 12666 on systems that prefix all identifiers with underscores. The 12667 mangled name is computed in the same way on all platforms; if 12668 special processing is required to deal with the object file format 12669 used on a particular platform, it is the responsibility of the back 12670 end to perform those modifications. (Of course, the back end 12671 should not modify 'DECL_ASSEMBLER_NAME' itself.) 12672 12673 Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be 12674 allocated (for the mangled name of the entity) so it should be used 12675 only when emitting assembly code. It should not be used within the 12676 optimizers to determine whether or not two declarations are the 12677 same, even though some of the existing optimizers do use it in that 12678 way. These uses will be removed over time. 12679 12680 'DECL_ARGUMENTS' 12681 This macro returns the 'PARM_DECL' for the first argument to the 12682 function. Subsequent 'PARM_DECL' nodes can be obtained by 12683 following the 'TREE_CHAIN' links. 12684 12685 'DECL_RESULT' 12686 This macro returns the 'RESULT_DECL' for the function. 12687 12688 'DECL_SAVED_TREE' 12689 This macro returns the complete body of the function. 12690 12691 'TREE_TYPE' 12692 This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the 12693 function. 12694 12695 'DECL_INITIAL' 12696 A function that has a definition in the current translation unit 12697 will have a non-'NULL' 'DECL_INITIAL'. However, back ends should 12698 not make use of the particular value given by 'DECL_INITIAL'. 12699 12700 It should contain a tree of 'BLOCK' nodes that mirrors the scopes 12701 that variables are bound in the function. Each block contains a 12702 list of decls declared in a basic block, a pointer to a chain of 12703 blocks at the next lower scope level, then a pointer to the next 12704 block at the same level and a backpointer to the parent 'BLOCK' or 12705 'FUNCTION_DECL'. So given a function as follows: 12706 12707 void foo() 12708 { 12709 int a; 12710 { 12711 int b; 12712 } 12713 int c; 12714 } 12715 12716 you would get the following: 12717 12718 tree foo = FUNCTION_DECL; 12719 tree decl_a = VAR_DECL; 12720 tree decl_b = VAR_DECL; 12721 tree decl_c = VAR_DECL; 12722 tree block_a = BLOCK; 12723 tree block_b = BLOCK; 12724 tree block_c = BLOCK; 12725 BLOCK_VARS(block_a) = decl_a; 12726 BLOCK_SUBBLOCKS(block_a) = block_b; 12727 BLOCK_CHAIN(block_a) = block_c; 12728 BLOCK_SUPERCONTEXT(block_a) = foo; 12729 BLOCK_VARS(block_b) = decl_b; 12730 BLOCK_SUPERCONTEXT(block_b) = block_a; 12731 BLOCK_VARS(block_c) = decl_c; 12732 BLOCK_SUPERCONTEXT(block_c) = foo; 12733 DECL_INITIAL(foo) = block_a; 12734 12735 12736 File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 12737 12738 11.8.2 Function Properties 12739 -------------------------- 12740 12741 To determine the scope of a function, you can use the 'DECL_CONTEXT' 12742 macro. This macro will return the class (either a 'RECORD_TYPE' or a 12743 'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 12744 a member. For a virtual function, this macro returns the class in which 12745 the function was actually defined, not the base class in which the 12746 virtual declaration occurred. 12747 12748 In C, the 'DECL_CONTEXT' for a function maybe another function. This 12749 representation indicates that the GNU nested function extension is in 12750 use. For details on the semantics of nested functions, see the GCC 12751 Manual. The nested function can refer to local variables in its 12752 containing function. Such references are not explicitly marked in the 12753 tree structure; back ends must look at the 'DECL_CONTEXT' for the 12754 referenced 'VAR_DECL'. If the 'DECL_CONTEXT' for the referenced 12755 'VAR_DECL' is not the same as the function currently being processed, 12756 and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference 12757 is to a local variable in a containing function, and the back end must 12758 take appropriate action. 12759 12760 'DECL_EXTERNAL' 12761 This predicate holds if the function is undefined. 12762 12763 'TREE_PUBLIC' 12764 This predicate holds if the function has external linkage. 12765 12766 'TREE_STATIC' 12767 This predicate holds if the function has been defined. 12768 12769 'TREE_THIS_VOLATILE' 12770 This predicate holds if the function does not return normally. 12771 12772 'TREE_READONLY' 12773 This predicate holds if the function can only read its arguments. 12774 12775 'DECL_PURE_P' 12776 This predicate holds if the function can only read its arguments, 12777 but may also read global memory. 12778 12779 'DECL_VIRTUAL_P' 12780 This predicate holds if the function is virtual. 12781 12782 'DECL_ARTIFICIAL' 12783 This macro holds if the function was implicitly generated by the 12784 compiler, rather than explicitly declared. In addition to 12785 implicitly generated class member functions, this macro holds for 12786 the special functions created to implement static initialization 12787 and destruction, to compute run-time type information, and so 12788 forth. 12789 12790 'DECL_FUNCTION_SPECIFIC_TARGET' 12791 This macro returns a tree node that holds the target options that 12792 are to be used to compile this particular function or 'NULL_TREE' 12793 if the function is to be compiled with the target options specified 12794 on the command line. 12795 12796 'DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 12797 This macro returns a tree node that holds the optimization options 12798 that are to be used to compile this particular function or 12799 'NULL_TREE' if the function is to be compiled with the optimization 12800 options specified on the command line. 12801 12802 12803 File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 12804 12805 11.9 Language-dependent trees 12806 ============================= 12807 12808 Front ends may wish to keep some state associated with various GENERIC 12809 trees while parsing. To support this, trees provide a set of flags that 12810 may be used by the front end. They are accessed using 12811 'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6. 12812 12813 If necessary, a front end can use some language-dependent tree codes in 12814 its GENERIC representation, so long as it provides a hook for converting 12815 them to GIMPLE and doesn't expect them to work with any (hypothetical) 12816 optimizers that run before the conversion to GIMPLE. The intermediate 12817 representation used while parsing C and C++ looks very little like 12818 GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take 12819 it as input and spit out GIMPLE. 12820 12821 12822 File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC 12823 12824 11.10 C and C++ Trees 12825 ===================== 12826 12827 This section documents the internal representation used by GCC to 12828 represent C and C++ source programs. When presented with a C or C++ 12829 source program, GCC parses the program, performs semantic analysis 12830 (including the generation of error messages), and then produces the 12831 internal representation described here. This representation contains a 12832 complete representation for the entire translation unit provided as 12833 input to the front end. This representation is then typically processed 12834 by a code-generator in order to produce machine code, but could also be 12835 used in the creation of source browsers, intelligent editors, automatic 12836 documentation generators, interpreters, and any other programs needing 12837 the ability to process C or C++ code. 12838 12839 This section explains the internal representation. In particular, it 12840 documents the internal representation for C and C++ source constructs, 12841 and the macros, functions, and variables that can be used to access 12842 these constructs. The C++ representation is largely a superset of the 12843 representation used in the C front end. There is only one construct 12844 used in C that does not appear in the C++ front end and that is the GNU 12845 "nested function" extension. Many of the macros documented here do not 12846 apply in C because the corresponding language constructs do not appear 12847 in C. 12848 12849 The C and C++ front ends generate a mix of GENERIC trees and ones 12850 specific to C and C++. These language-specific trees are higher-level 12851 constructs than the ones in GENERIC to make the parser's job easier. 12852 This section describes those trees that aren't part of GENERIC as well 12853 as aspects of GENERIC trees that are treated in a language-specific 12854 manner. 12855 12856 If you are developing a "back end", be it is a code-generator or some 12857 other tool, that uses this representation, you may occasionally find 12858 that you need to ask questions not easily answered by the functions and 12859 macros available here. If that situation occurs, it is quite likely 12860 that GCC already supports the functionality you desire, but that the 12861 interface is simply not documented here. In that case, you should ask 12862 the GCC maintainers (via mail to <gcc (a] gcc.gnu.org>) about documenting 12863 the functionality you require. Similarly, if you find yourself writing 12864 functions that do not deal directly with your back end, but instead 12865 might be useful to other people using the GCC front end, you should 12866 submit your patches for inclusion in GCC. 12867 12868 * Menu: 12869 12870 * Types for C++:: Fundamental and aggregate types. 12871 * Namespaces:: Namespaces. 12872 * Classes:: Classes. 12873 * Functions for C++:: Overloading and accessors for C++. 12874 * Statements for C++:: Statements specific to C and C++. 12875 * C++ Expressions:: From 'typeid' to 'throw'. 12876 12877 12878 File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 12879 12880 11.10.1 Types for C++ 12881 --------------------- 12882 12883 In C++, an array type is not qualified; rather the type of the array 12884 elements is qualified. This situation is reflected in the intermediate 12885 representation. The macros described here will always examine the 12886 qualification of the underlying element type when applied to an array 12887 type. (If the element type is itself an array, then the recursion 12888 continues until a non-array type is found, and the qualification of this 12889 type is examined.) So, for example, 'CP_TYPE_CONST_P' will hold of the 12890 type 'const int ()[7]', denoting an array of seven 'int's. 12891 12892 The following functions and macros deal with cv-qualification of types: 12893 'cp_type_quals' 12894 This function returns the set of type qualifiers applied to this 12895 type. This value is 'TYPE_UNQUALIFIED' if no qualifiers have been 12896 applied. The 'TYPE_QUAL_CONST' bit is set if the type is 12897 'const'-qualified. The 'TYPE_QUAL_VOLATILE' bit is set if the type 12898 is 'volatile'-qualified. The 'TYPE_QUAL_RESTRICT' bit is set if 12899 the type is 'restrict'-qualified. 12900 12901 'CP_TYPE_CONST_P' 12902 This macro holds if the type is 'const'-qualified. 12903 12904 'CP_TYPE_VOLATILE_P' 12905 This macro holds if the type is 'volatile'-qualified. 12906 12907 'CP_TYPE_RESTRICT_P' 12908 This macro holds if the type is 'restrict'-qualified. 12909 12910 'CP_TYPE_CONST_NON_VOLATILE_P' 12911 This predicate holds for a type that is 'const'-qualified, but 12912 _not_ 'volatile'-qualified; other cv-qualifiers are ignored as 12913 well: only the 'const'-ness is tested. 12914 12915 A few other macros and functions are usable with all types: 12916 'TYPE_SIZE' 12917 The number of bits required to represent the type, represented as 12918 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 12919 'NULL_TREE'. 12920 12921 'TYPE_ALIGN' 12922 The alignment of the type, in bits, represented as an 'int'. 12923 12924 'TYPE_NAME' 12925 This macro returns a declaration (in the form of a 'TYPE_DECL') for 12926 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 12927 as you might expect, given its name!) You can look at the 12928 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 12929 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 12930 built-in type, the result of a typedef, or a named class type. 12931 12932 'CP_INTEGRAL_TYPE' 12933 This predicate holds if the type is an integral type. Notice that 12934 in C++, enumerations are _not_ integral types. 12935 12936 'ARITHMETIC_TYPE_P' 12937 This predicate holds if the type is an integral type (in the C++ 12938 sense) or a floating point type. 12939 12940 'CLASS_TYPE_P' 12941 This predicate holds for a class-type. 12942 12943 'TYPE_BUILT_IN' 12944 This predicate holds for a built-in type. 12945 12946 'TYPE_PTRDATAMEM_P' 12947 This predicate holds if the type is a pointer to data member. 12948 12949 'TYPE_PTR_P' 12950 This predicate holds if the type is a pointer type, and the pointee 12951 is not a data member. 12952 12953 'TYPE_PTRFN_P' 12954 This predicate holds for a pointer to function type. 12955 12956 'TYPE_PTROB_P' 12957 This predicate holds for a pointer to object type. Note however 12958 that it does not hold for the generic pointer to object type 'void 12959 *'. You may use 'TYPE_PTROBV_P' to test for a pointer to object 12960 type as well as 'void *'. 12961 12962 The table below describes types specific to C and C++ as well as 12963 language-dependent info about GENERIC types. 12964 12965 'POINTER_TYPE' 12966 Used to represent pointer types, and pointer to data member types. 12967 If 'TREE_TYPE' is a pointer to data member type, then 12968 'TYPE_PTRDATAMEM_P' will hold. For a pointer to data member type 12969 of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type 12970 'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'. 12971 12972 'RECORD_TYPE' 12973 Used to represent 'struct' and 'class' types in C and C++. If 12974 'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 12975 type. In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a 12976 'POINTER_TYPE' pointing to a 'METHOD_TYPE'. The 'METHOD_TYPE' is 12977 the type of a function pointed to by the pointer-to-member 12978 function. If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a 12979 class type. For more information, *note Classes::. 12980 12981 'UNKNOWN_TYPE' 12982 This node is used to represent a type the knowledge of which is 12983 insufficient for a sound processing. 12984 12985 'TYPENAME_TYPE' 12986 Used to represent a construct of the form 'typename T::A'. The 12987 'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for 12988 'A'. If the type is specified via a template-id, then 12989 'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'. The 12990 'TREE_TYPE' is non-'NULL' if the node is implicitly generated in 12991 support for the implicit typename extension; in which case the 12992 'TREE_TYPE' is a type node for the base-class. 12993 12994 'TYPEOF_TYPE' 12995 Used to represent the '__typeof__' extension. The 'TYPE_FIELDS' is 12996 the expression the type of which is being represented. 12997 12998 12999 File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 13000 13001 11.10.2 Namespaces 13002 ------------------ 13003 13004 The root of the entire intermediate representation is the variable 13005 'global_namespace'. This is the namespace specified with '::' in C++ 13006 source code. All other namespaces, types, variables, functions, and so 13007 forth can be found starting with this namespace. 13008 13009 However, except for the fact that it is distinguished as the root of 13010 the representation, the global namespace is no different from any other 13011 namespace. Thus, in what follows, we describe namespaces generally, 13012 rather than the global namespace in particular. 13013 13014 A namespace is represented by a 'NAMESPACE_DECL' node. 13015 13016 The following macros and functions can be used on a 'NAMESPACE_DECL': 13017 13018 'DECL_NAME' 13019 This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to 13020 the unqualified name of the name of the namespace (*note 13021 Identifiers::). The name of the global namespace is '::', even 13022 though in C++ the global namespace is unnamed. However, you should 13023 use comparison with 'global_namespace', rather than 'DECL_NAME' to 13024 determine whether or not a namespace is the global one. An unnamed 13025 namespace will have a 'DECL_NAME' equal to 13026 'anonymous_namespace_name'. Within a single translation unit, all 13027 unnamed namespaces will have the same name. 13028 13029 'DECL_CONTEXT' 13030 This macro returns the enclosing namespace. The 'DECL_CONTEXT' for 13031 the 'global_namespace' is 'NULL_TREE'. 13032 13033 'DECL_NAMESPACE_ALIAS' 13034 If this declaration is for a namespace alias, then 13035 'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 13036 alias. 13037 13038 Do not attempt to use 'cp_namespace_decls' for a namespace which is 13039 an alias. Instead, follow 'DECL_NAMESPACE_ALIAS' links until you 13040 reach an ordinary, non-alias, namespace, and call 13041 'cp_namespace_decls' there. 13042 13043 'DECL_NAMESPACE_STD_P' 13044 This predicate holds if the namespace is the special '::std' 13045 namespace. 13046 13047 'cp_namespace_decls' 13048 This function will return the declarations contained in the 13049 namespace, including types, overloaded functions, other namespaces, 13050 and so forth. If there are no declarations, this function will 13051 return 'NULL_TREE'. The declarations are connected through their 13052 'TREE_CHAIN' fields. 13053 13054 Although most entries on this list will be declarations, 13055 'TREE_LIST' nodes may also appear. In this case, the 'TREE_VALUE' 13056 will be an 'OVERLOAD'. The value of the 'TREE_PURPOSE' is 13057 unspecified; back ends should ignore this value. As with the other 13058 kinds of declarations returned by 'cp_namespace_decls', the 13059 'TREE_CHAIN' will point to the next declaration in this list. 13060 13061 For more information on the kinds of declarations that can occur on 13062 this list, *Note Declarations::. Some declarations will not appear 13063 on this list. In particular, no 'FIELD_DECL', 'LABEL_DECL', or 13064 'PARM_DECL' nodes will appear here. 13065 13066 This function cannot be used with namespaces that have 13067 'DECL_NAMESPACE_ALIAS' set. 13068 13069 13070 File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 13071 13072 11.10.3 Classes 13073 --------------- 13074 13075 Besides namespaces, the other high-level scoping construct in C++ is the 13076 class. (Throughout this manual the term "class" is used to mean the 13077 types referred to in the ANSI/ISO C++ Standard as classes; these include 13078 types defined with the 'class', 'struct', and 'union' keywords.) 13079 13080 A class type is represented by either a 'RECORD_TYPE' or a 13081 'UNION_TYPE'. A class declared with the 'union' tag is represented by a 13082 'UNION_TYPE', while classes declared with either the 'struct' or the 13083 'class' tag are represented by 'RECORD_TYPE's. You can use the 13084 'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 13085 type is a 'class' as opposed to a 'struct'. This macro will be true 13086 only for classes declared with the 'class' tag. 13087 13088 Almost all non-function members are available on the 'TYPE_FIELDS' 13089 list. Given one member, the next can be found by following the 13090 'TREE_CHAIN'. You should not depend in any way on the order in which 13091 fields appear on this list. All nodes on this list will be 'DECL' 13092 nodes. A 'FIELD_DECL' is used to represent a non-static data member, a 13093 'VAR_DECL' is used to represent a static data member, and a 'TYPE_DECL' 13094 is used to represent a type. Note that the 'CONST_DECL' for an 13095 enumeration constant will appear on this list, if the enumeration type 13096 was declared in the class. (Of course, the 'TYPE_DECL' for the 13097 enumeration type will appear here as well.) There are no entries for 13098 base classes on this list. In particular, there is no 'FIELD_DECL' for 13099 the "base-class portion" of an object. 13100 13101 The 'TYPE_VFIELD' is a compiler-generated field used to point to 13102 virtual function tables. It may or may not appear on the 'TYPE_FIELDS' 13103 list. However, back ends should handle the 'TYPE_VFIELD' just like all 13104 the entries on the 'TYPE_FIELDS' list. 13105 13106 The function members are available on the 'TYPE_METHODS' list. Again, 13107 subsequent members are found by following the 'TREE_CHAIN' field. If a 13108 function is overloaded, each of the overloaded functions appears; no 13109 'OVERLOAD' nodes appear on the 'TYPE_METHODS' list. Implicitly declared 13110 functions (including default constructors, copy constructors, assignment 13111 operators, and destructors) will appear on this list as well. 13112 13113 Every class has an associated "binfo", which can be obtained with 13114 'TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 13115 given by 'TYPE_BINFO' is the degenerate case, whereby every class is 13116 considered to be its own base-class. The base binfos for a particular 13117 binfo are held in a vector, whose length is obtained with 13118 'BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 13119 'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'. To add a new binfo, use 13120 'BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 13121 'BINFO_BASE_BINFOS', but normally you do not need to use that. The 13122 class type associated with a binfo is given by 'BINFO_TYPE'. It is not 13123 always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 13124 and qualified types. Neither is it the case that 'TYPE_BINFO 13125 (BINFO_TYPE (y))' is the same binfo as 'y'. The reason is that if 'y' 13126 is a binfo representing a base-class 'B' of a derived class 'D', then 13127 'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be 13128 'B' as its own base-class, rather than as a base-class of 'D'. 13129 13130 The access to a base type can be found with 'BINFO_BASE_ACCESS'. This 13131 will produce 'access_public_node', 'access_private_node' or 13132 'access_protected_node'. If bases are always public, 13133 'BINFO_BASE_ACCESSES' may be 'NULL'. 13134 13135 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 13136 virtually or not. The other flags, 'BINFO_MARKED_P' and 'BINFO_FLAG_1' 13137 to 'BINFO_FLAG_6' can be used for language specific use. 13138 13139 The following macros can be used on a tree node representing a 13140 class-type. 13141 13142 'LOCAL_CLASS_P' 13143 This predicate holds if the class is local class _i.e._ declared 13144 inside a function body. 13145 13146 'TYPE_POLYMORPHIC_P' 13147 This predicate holds if the class has at least one virtual function 13148 (declared or inherited). 13149 13150 'TYPE_HAS_DEFAULT_CONSTRUCTOR' 13151 This predicate holds whenever its argument represents a class-type 13152 with default constructor. 13153 13154 'CLASSTYPE_HAS_MUTABLE' 13155 'TYPE_HAS_MUTABLE_P' 13156 These predicates hold for a class-type having a mutable data 13157 member. 13158 13159 'CLASSTYPE_NON_POD_P' 13160 This predicate holds only for class-types that are not PODs. 13161 13162 'TYPE_HAS_NEW_OPERATOR' 13163 This predicate holds for a class-type that defines 'operator new'. 13164 13165 'TYPE_HAS_ARRAY_NEW_OPERATOR' 13166 This predicate holds for a class-type for which 'operator new[]' is 13167 defined. 13168 13169 'TYPE_OVERLOADS_CALL_EXPR' 13170 This predicate holds for class-type for which the function call 13171 'operator()' is overloaded. 13172 13173 'TYPE_OVERLOADS_ARRAY_REF' 13174 This predicate holds for a class-type that overloads 'operator[]' 13175 13176 'TYPE_OVERLOADS_ARROW' 13177 This predicate holds for a class-type for which 'operator->' is 13178 overloaded. 13179 13180 13181 File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 13182 13183 11.10.4 Functions for C++ 13184 ------------------------- 13185 13186 A function is represented by a 'FUNCTION_DECL' node. A set of 13187 overloaded functions is sometimes represented by an 'OVERLOAD' node. 13188 13189 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros 13190 should be used on an 'OVERLOAD'. An 'OVERLOAD' node is similar to a 13191 'TREE_LIST'. Use 'OVL_CURRENT' to get the function associated with an 13192 'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the 13193 list of overloaded functions. The macros 'OVL_CURRENT' and 'OVL_NEXT' 13194 are actually polymorphic; you can use them to work with 'FUNCTION_DECL' 13195 nodes as well as with overloads. In the case of a 'FUNCTION_DECL', 13196 'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT' 13197 will always be 'NULL_TREE'. 13198 13199 To determine the scope of a function, you can use the 'DECL_CONTEXT' 13200 macro. This macro will return the class (either a 'RECORD_TYPE' or a 13201 'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 13202 a member. For a virtual function, this macro returns the class in which 13203 the function was actually defined, not the base class in which the 13204 virtual declaration occurred. 13205 13206 If a friend function is defined in a class scope, the 13207 'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 13208 it was defined. For example, in 13209 class C { friend void f() {} }; 13210 the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the 13211 'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'. 13212 13213 The following macros and functions can be used on a 'FUNCTION_DECL': 13214 'DECL_MAIN_P' 13215 This predicate holds for a function that is the program entry point 13216 '::code'. 13217 13218 'DECL_LOCAL_FUNCTION_P' 13219 This predicate holds if the function was declared at block scope, 13220 even though it has a global scope. 13221 13222 'DECL_ANTICIPATED' 13223 This predicate holds if the function is a built-in function but its 13224 prototype is not yet explicitly declared. 13225 13226 'DECL_EXTERN_C_FUNCTION_P' 13227 This predicate holds if the function is declared as an ''extern 13228 "C"'' function. 13229 13230 'DECL_LINKONCE_P' 13231 This macro holds if multiple copies of this function may be emitted 13232 in various translation units. It is the responsibility of the 13233 linker to merge the various copies. Template instantiations are 13234 the most common example of functions for which 'DECL_LINKONCE_P' 13235 holds; G++ instantiates needed templates in all translation units 13236 which require them, and then relies on the linker to remove 13237 duplicate instantiations. 13238 13239 FIXME: This macro is not yet implemented. 13240 13241 'DECL_FUNCTION_MEMBER_P' 13242 This macro holds if the function is a member of a class, rather 13243 than a member of a namespace. 13244 13245 'DECL_STATIC_FUNCTION_P' 13246 This predicate holds if the function a static member function. 13247 13248 'DECL_NONSTATIC_MEMBER_FUNCTION_P' 13249 This macro holds for a non-static member function. 13250 13251 'DECL_CONST_MEMFUNC_P' 13252 This predicate holds for a 'const'-member function. 13253 13254 'DECL_VOLATILE_MEMFUNC_P' 13255 This predicate holds for a 'volatile'-member function. 13256 13257 'DECL_CONSTRUCTOR_P' 13258 This macro holds if the function is a constructor. 13259 13260 'DECL_NONCONVERTING_P' 13261 This predicate holds if the constructor is a non-converting 13262 constructor. 13263 13264 'DECL_COMPLETE_CONSTRUCTOR_P' 13265 This predicate holds for a function which is a constructor for an 13266 object of a complete type. 13267 13268 'DECL_BASE_CONSTRUCTOR_P' 13269 This predicate holds for a function which is a constructor for a 13270 base class sub-object. 13271 13272 'DECL_COPY_CONSTRUCTOR_P' 13273 This predicate holds for a function which is a copy-constructor. 13274 13275 'DECL_DESTRUCTOR_P' 13276 This macro holds if the function is a destructor. 13277 13278 'DECL_COMPLETE_DESTRUCTOR_P' 13279 This predicate holds if the function is the destructor for an 13280 object a complete type. 13281 13282 'DECL_OVERLOADED_OPERATOR_P' 13283 This macro holds if the function is an overloaded operator. 13284 13285 'DECL_CONV_FN_P' 13286 This macro holds if the function is a type-conversion operator. 13287 13288 'DECL_GLOBAL_CTOR_P' 13289 This predicate holds if the function is a file-scope initialization 13290 function. 13291 13292 'DECL_GLOBAL_DTOR_P' 13293 This predicate holds if the function is a file-scope finalization 13294 function. 13295 13296 'DECL_THUNK_P' 13297 This predicate holds if the function is a thunk. 13298 13299 These functions represent stub code that adjusts the 'this' pointer 13300 and then jumps to another function. When the jumped-to function 13301 returns, control is transferred directly to the caller, without 13302 returning to the thunk. The first parameter to the thunk is always 13303 the 'this' pointer; the thunk should add 'THUNK_DELTA' to this 13304 value. (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.) 13305 13306 Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the 13307 adjusted 'this' pointer must be adjusted again. The complete 13308 calculation is given by the following pseudo-code: 13309 13310 this += THUNK_DELTA 13311 if (THUNK_VCALL_OFFSET) 13312 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 13313 13314 Finally, the thunk should jump to the location given by 13315 'DECL_INITIAL'; this will always be an expression for the address 13316 of a function. 13317 13318 'DECL_NON_THUNK_FUNCTION_P' 13319 This predicate holds if the function is _not_ a thunk function. 13320 13321 'GLOBAL_INIT_PRIORITY' 13322 If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then 13323 this gives the initialization priority for the function. The 13324 linker will arrange that all functions for which 13325 'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 13326 before 'main' is called. When the program exits, all functions for 13327 which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 13328 13329 'TYPE_RAISES_EXCEPTIONS' 13330 This macro returns the list of exceptions that a (member-)function 13331 can raise. The returned list, if non 'NULL', is comprised of nodes 13332 whose 'TREE_VALUE' represents a type. 13333 13334 'TYPE_NOTHROW_P' 13335 This predicate holds when the exception-specification of its 13336 arguments is of the form ''()''. 13337 13338 'DECL_ARRAY_DELETE_OPERATOR_P' 13339 This predicate holds if the function an overloaded 'operator 13340 delete[]'. 13341 13342 13343 File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 13344 13345 11.10.5 Statements for C++ 13346 -------------------------- 13347 13348 A function that has a definition in the current translation unit will 13349 have a non-'NULL' 'DECL_INITIAL'. However, back ends should not make 13350 use of the particular value given by 'DECL_INITIAL'. 13351 13352 The 'DECL_SAVED_TREE' macro will give the complete body of the 13353 function. 13354 13355 11.10.5.1 Statements 13356 .................... 13357 13358 There are tree nodes corresponding to all of the source-level statement 13359 constructs, used within the C and C++ frontends. These are enumerated 13360 here, together with a list of the various macros that can be used to 13361 obtain information about them. There are a few macros that can be used 13362 with all statements: 13363 13364 'STMT_IS_FULL_EXPR_P' 13365 In C++, statements normally constitute "full expressions"; 13366 temporaries created during a statement are destroyed when the 13367 statement is complete. However, G++ sometimes represents 13368 expressions by statements; these statements will not have 13369 'STMT_IS_FULL_EXPR_P' set. Temporaries created during such 13370 statements should be destroyed when the innermost enclosing 13371 statement with 'STMT_IS_FULL_EXPR_P' set is exited. 13372 13373 Here is the list of the various statement nodes, and the macros used to 13374 access them. This documentation describes the use of these nodes in 13375 non-template functions (including instantiations of template functions). 13376 In template functions, the same nodes are used, but sometimes in 13377 slightly different ways. 13378 13379 Many of the statements have substatements. For example, a 'while' loop 13380 will have a body, which is itself a statement. If the substatement is 13381 'NULL_TREE', it is considered equivalent to a statement consisting of a 13382 single ';', i.e., an expression statement in which the expression has 13383 been omitted. A substatement may in fact be a list of statements, 13384 connected via their 'TREE_CHAIN's. So, you should always process the 13385 statement tree by looping over substatements, like this: 13386 void process_stmt (stmt) 13387 tree stmt; 13388 { 13389 while (stmt) 13390 { 13391 switch (TREE_CODE (stmt)) 13392 { 13393 case IF_STMT: 13394 process_stmt (THEN_CLAUSE (stmt)); 13395 /* More processing here. */ 13396 break; 13397 13398 ... 13399 } 13400 13401 stmt = TREE_CHAIN (stmt); 13402 } 13403 } 13404 In other words, while the 'then' clause of an 'if' statement in C++ can 13405 be only one statement (although that one statement may be a compound 13406 statement), the intermediate representation will sometimes use several 13407 statements chained together. 13408 13409 'BREAK_STMT' 13410 13411 Used to represent a 'break' statement. There are no additional 13412 fields. 13413 13414 'CLEANUP_STMT' 13415 13416 Used to represent an action that should take place upon exit from 13417 the enclosing scope. Typically, these actions are calls to 13418 destructors for local objects, but back ends cannot rely on this 13419 fact. If these nodes are in fact representing such destructors, 13420 'CLEANUP_DECL' will be the 'VAR_DECL' destroyed. Otherwise, 13421 'CLEANUP_DECL' will be 'NULL_TREE'. In any case, the 13422 'CLEANUP_EXPR' is the expression to execute. The cleanups executed 13423 on exit from a scope should be run in the reverse order of the 13424 order in which the associated 'CLEANUP_STMT's were encountered. 13425 13426 'CONTINUE_STMT' 13427 13428 Used to represent a 'continue' statement. There are no additional 13429 fields. 13430 13431 'CTOR_STMT' 13432 13433 Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if 13434 'CTOR_END_P' holds of the main body of a constructor. See also 13435 'SUBOBJECT' for more information on how to use these nodes. 13436 13437 'DO_STMT' 13438 13439 Used to represent a 'do' loop. The body of the loop is given by 13440 'DO_BODY' while the termination condition for the loop is given by 13441 'DO_COND'. The condition for a 'do'-statement is always an 13442 expression. 13443 13444 'EMPTY_CLASS_EXPR' 13445 13446 Used to represent a temporary object of a class with no data whose 13447 address is never taken. (All such objects are interchangeable.) 13448 The 'TREE_TYPE' represents the type of the object. 13449 13450 'EXPR_STMT' 13451 13452 Used to represent an expression statement. Use 'EXPR_STMT_EXPR' to 13453 obtain the expression. 13454 13455 'FOR_STMT' 13456 13457 Used to represent a 'for' statement. The 'FOR_INIT_STMT' is the 13458 initialization statement for the loop. The 'FOR_COND' is the 13459 termination condition. The 'FOR_EXPR' is the expression executed 13460 right before the 'FOR_COND' on each loop iteration; often, this 13461 expression increments a counter. The body of the loop is given by 13462 'FOR_BODY'. Note that 'FOR_INIT_STMT' and 'FOR_BODY' return 13463 statements, while 'FOR_COND' and 'FOR_EXPR' return expressions. 13464 13465 'HANDLER' 13466 13467 Used to represent a C++ 'catch' block. The 'HANDLER_TYPE' is the 13468 type of exception that will be caught by this handler; it is equal 13469 (by pointer equality) to 'NULL' if this handler is for all types. 13470 'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and 13471 'HANDLER_BODY' is the code for the block itself. 13472 13473 'IF_STMT' 13474 13475 Used to represent an 'if' statement. The 'IF_COND' is the 13476 expression. 13477 13478 If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a 13479 statement (usually a 'DECL_STMT'). Each time the condition is 13480 evaluated, the statement should be executed. Then, the 13481 'TREE_VALUE' should be used as the conditional expression itself. 13482 This representation is used to handle C++ code like this: 13483 13484 C++ distinguishes between this and 'COND_EXPR' for handling 13485 templates. 13486 13487 if (int i = 7) ... 13488 13489 where there is a new local variable (or variables) declared within 13490 the condition. 13491 13492 The 'THEN_CLAUSE' represents the statement given by the 'then' 13493 condition, while the 'ELSE_CLAUSE' represents the statement given 13494 by the 'else' condition. 13495 13496 'SUBOBJECT' 13497 13498 In a constructor, these nodes are used to mark the point at which a 13499 subobject of 'this' is fully constructed. If, after this point, an 13500 exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is 13501 encountered, the 'SUBOBJECT_CLEANUP' must be executed. The 13502 cleanups must be executed in the reverse order in which they 13503 appear. 13504 13505 'SWITCH_STMT' 13506 13507 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 13508 the expression on which the switch is occurring. See the 13509 documentation for an 'IF_STMT' for more information on the 13510 representation used for the condition. The 'SWITCH_STMT_BODY' is 13511 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 13512 original type of switch expression as given in the source, before 13513 any compiler conversions. 13514 13515 'TRY_BLOCK' 13516 Used to represent a 'try' block. The body of the try block is 13517 given by 'TRY_STMTS'. Each of the catch blocks is a 'HANDLER' 13518 node. The first handler is given by 'TRY_HANDLERS'. Subsequent 13519 handlers are obtained by following the 'TREE_CHAIN' link from one 13520 handler to the next. The body of the handler is given by 13521 'HANDLER_BODY'. 13522 13523 If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS' 13524 will not be a 'HANDLER' node. Instead, it will be an expression 13525 that should be executed if an exception is thrown in the try block. 13526 It must rethrow the exception after executing that code. And, if 13527 an exception is thrown while the expression is executing, 13528 'terminate' must be called. 13529 13530 'USING_STMT' 13531 Used to represent a 'using' directive. The namespace is given by 13532 'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 13533 is needed inside template functions, to implement using directives 13534 during instantiation. 13535 13536 'WHILE_STMT' 13537 13538 Used to represent a 'while' loop. The 'WHILE_COND' is the 13539 termination condition for the loop. See the documentation for an 13540 'IF_STMT' for more information on the representation used for the 13541 condition. 13542 13543 The 'WHILE_BODY' is the body of the loop. 13544 13545 13546 File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 13547 13548 11.10.6 C++ Expressions 13549 ----------------------- 13550 13551 This section describes expressions specific to the C and C++ front ends. 13552 13553 'TYPEID_EXPR' 13554 13555 Used to represent a 'typeid' expression. 13556 13557 'NEW_EXPR' 13558 'VEC_NEW_EXPR' 13559 13560 Used to represent a call to 'new' and 'new[]' respectively. 13561 13562 'DELETE_EXPR' 13563 'VEC_DELETE_EXPR' 13564 13565 Used to represent a call to 'delete' and 'delete[]' respectively. 13566 13567 'MEMBER_REF' 13568 13569 Represents a reference to a member of a class. 13570 13571 'THROW_EXPR' 13572 13573 Represents an instance of 'throw' in the program. Operand 0, which 13574 is the expression to throw, may be 'NULL_TREE'. 13575 13576 'AGGR_INIT_EXPR' 13577 An 'AGGR_INIT_EXPR' represents the initialization as the return 13578 value of a function call, or as the result of a constructor. An 13579 'AGGR_INIT_EXPR' will only appear as a full-expression, or as the 13580 second operand of a 'TARGET_EXPR'. 'AGGR_INIT_EXPR's have a 13581 representation similar to that of 'CALL_EXPR's. You can use the 13582 'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the 13583 function to call and the arguments to pass. 13584 13585 If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the 13586 initialization is via a constructor call. The address of the 13587 'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is 13588 taken, and this value replaces the first argument in the argument 13589 list. 13590 13591 In either case, the expression is void. 13592 13593 13594 File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC 13595 13596 11.11 Java Trees 13597 ================ 13598 13599 13600 File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 13601 13602 12 GIMPLE 13603 ********* 13604 13605 GIMPLE is a three-address representation derived from GENERIC by 13606 breaking down GENERIC expressions into tuples of no more than 3 operands 13607 (with some exceptions like function calls). GIMPLE was heavily 13608 influenced by the SIMPLE IL used by the McCAT compiler project at McGill 13609 University, though we have made some different choices. For one thing, 13610 SIMPLE doesn't support 'goto'. 13611 13612 Temporaries are introduced to hold intermediate values needed to 13613 compute complex expressions. Additionally, all the control structures 13614 used in GENERIC are lowered into conditional jumps, lexical scopes are 13615 removed and exception regions are converted into an on the side 13616 exception region tree. 13617 13618 The compiler pass which converts GENERIC into GIMPLE is referred to as 13619 the 'gimplifier'. The gimplifier works recursively, generating GIMPLE 13620 tuples out of the original GENERIC expressions. 13621 13622 One of the early implementation strategies used for the GIMPLE 13623 representation was to use the same internal data structures used by 13624 front ends to represent parse trees. This simplified implementation 13625 because we could leverage existing functionality and interfaces. 13626 However, GIMPLE is a much more restrictive representation than abstract 13627 syntax trees (AST), therefore it does not require the full structural 13628 complexity provided by the main tree data structure. 13629 13630 The GENERIC representation of a function is stored in the 13631 'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node. It 13632 is converted to GIMPLE by a call to 'gimplify_function_tree'. 13633 13634 If a front end wants to include language-specific tree codes in the 13635 tree representation which it provides to the back end, it must provide a 13636 definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 13637 front end trees to GIMPLE. Usually such a hook will involve much of the 13638 same code for expanding front end trees to RTL. This function can 13639 return fully lowered GIMPLE, or it can return GENERIC trees and let the 13640 main gimplifier lower them the rest of the way; this is often simpler. 13641 GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 13642 of the IL before the pass 'pass_lower_cf'. High GIMPLE contains some 13643 container statements like lexical scopes (represented by 'GIMPLE_BIND') 13644 and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes 13645 all of the implicit jumps for control and exception expressions directly 13646 in the IL and EH region trees. 13647 13648 The C and C++ front ends currently convert directly from front end 13649 trees to GIMPLE, and hand that off to the back end rather than first 13650 converting to GENERIC. Their gimplifier hooks know about all the 13651 '_STMT' nodes and how to convert them to GENERIC forms. There was some 13652 work done on a genericization pass which would run first, but the 13653 existence of 'STMT_EXPR' meant that in order to convert all of the C 13654 statements into GENERIC equivalents would involve walking the entire 13655 tree anyway, so it was simpler to lower all the way. This might change 13656 in the future if someone writes an optimization pass which would work 13657 better with higher-level trees, but currently the optimizers all expect 13658 GIMPLE. 13659 13660 You can request to dump a C-like representation of the GIMPLE form with 13661 the flag '-fdump-tree-gimple'. 13662 13663 * Menu: 13664 13665 * Tuple representation:: 13666 * GIMPLE instruction set:: 13667 * GIMPLE Exception Handling:: 13668 * Temporaries:: 13669 * Operands:: 13670 * Manipulating GIMPLE statements:: 13671 * Tuple specific accessors:: 13672 * GIMPLE sequences:: 13673 * Sequence iterators:: 13674 * Adding a new GIMPLE statement code:: 13675 * Statement and operand traversals:: 13676 13677 13678 File: gccint.info, Node: Tuple representation, Next: GIMPLE instruction set, Up: GIMPLE 13679 13680 12.1 Tuple representation 13681 ========================= 13682 13683 GIMPLE instructions are tuples of variable size divided in two groups: a 13684 header describing the instruction and its locations, and a variable 13685 length body with all the operands. Tuples are organized into a 13686 hierarchy with 3 main classes of tuples. 13687 13688 12.1.1 'gimple_statement_base' (gsbase) 13689 --------------------------------------- 13690 13691 This is the root of the hierarchy, it holds basic information needed by 13692 most GIMPLE statements. There are some fields that may not be relevant 13693 to every GIMPLE statement, but those were moved into the base structure 13694 to take advantage of holes left by other fields (thus making the 13695 structure more compact). The structure takes 4 words (32 bytes) on 64 13696 bit hosts: 13697 13698 Field Size (bits) 13699 'code' 8 13700 'subcode' 16 13701 'no_warning' 1 13702 'visited' 1 13703 'nontemporal_move' 1 13704 'plf' 2 13705 'modified' 1 13706 'has_volatile_ops' 1 13707 'references_memory_p' 1 13708 'uid' 32 13709 'location' 32 13710 'num_ops' 32 13711 'bb' 64 13712 'block' 63 13713 Total size 32 bytes 13714 13715 * 'code' Main identifier for a GIMPLE instruction. 13716 13717 * 'subcode' Used to distinguish different variants of the same basic 13718 instruction or provide flags applicable to a given code. The 13719 'subcode' flags field has different uses depending on the code of 13720 the instruction, but mostly it distinguishes instructions of the 13721 same family. The most prominent use of this field is in 13722 assignments, where subcode indicates the operation done on the RHS 13723 of the assignment. For example, a = b + c is encoded as 13724 'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 13725 13726 * 'no_warning' Bitflag to indicate whether a warning has already been 13727 issued on this statement. 13728 13729 * 'visited' General purpose "visited" marker. Set and cleared by 13730 each pass when needed. 13731 13732 * 'nontemporal_move' Bitflag used in assignments that represent 13733 non-temporal moves. Although this bitflag is only used in 13734 assignments, it was moved into the base to take advantage of the 13735 bit holes left by the previous fields. 13736 13737 * 'plf' Pass Local Flags. This 2-bit mask can be used as general 13738 purpose markers by any pass. Passes are responsible for clearing 13739 and setting these two flags accordingly. 13740 13741 * 'modified' Bitflag to indicate whether the statement has been 13742 modified. Used mainly by the operand scanner to determine when to 13743 re-scan a statement for operands. 13744 13745 * 'has_volatile_ops' Bitflag to indicate whether this statement 13746 contains operands that have been marked volatile. 13747 13748 * 'references_memory_p' Bitflag to indicate whether this statement 13749 contains memory references (i.e., its operands are either global 13750 variables, or pointer dereferences or anything that must reside in 13751 memory). 13752 13753 * 'uid' This is an unsigned integer used by passes that want to 13754 assign IDs to every statement. These IDs must be assigned and used 13755 by each pass. 13756 13757 * 'location' This is a 'location_t' identifier to specify source code 13758 location for this statement. It is inherited from the front end. 13759 13760 * 'num_ops' Number of operands that this statement has. This 13761 specifies the size of the operand vector embedded in the tuple. 13762 Only used in some tuples, but it is declared in the base tuple to 13763 take advantage of the 32-bit hole left by the previous fields. 13764 13765 * 'bb' Basic block holding the instruction. 13766 13767 * 'block' Lexical block holding this statement. Also used for debug 13768 information generation. 13769 13770 12.1.2 'gimple_statement_with_ops' 13771 ---------------------------------- 13772 13773 This tuple is actually split in two: 'gimple_statement_with_ops_base' 13774 and 'gimple_statement_with_ops'. This is needed to accommodate the way 13775 the operand vector is allocated. The operand vector is defined to be an 13776 array of 1 element. So, to allocate a dynamic number of operands, the 13777 memory allocator ('gimple_alloc') simply allocates enough memory to hold 13778 the structure itself plus 'N - 1' operands which run "off the end" of 13779 the structure. For example, to allocate space for a tuple with 3 13780 operands, 'gimple_alloc' reserves 'sizeof (struct 13781 gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 13782 13783 On the other hand, several fields in this tuple need to be shared with 13784 the 'gimple_statement_with_memory_ops' tuple. So, these common fields 13785 are placed in 'gimple_statement_with_ops_base' which is then inherited 13786 from the other two tuples. 13787 13788 'gsbase' 256 13789 'def_ops' 64 13790 'use_ops' 64 13791 'op' 'num_ops' * 64 13792 Total 48 + 8 * 'num_ops' bytes 13793 size 13794 13795 * 'gsbase' Inherited from 'struct gimple_statement_base'. 13796 13797 * 'def_ops' Array of pointers into the operand array indicating all 13798 the slots that contain a variable written-to by the statement. 13799 This array is also used for immediate use chaining. Note that it 13800 would be possible to not rely on this array, but the changes 13801 required to implement this are pretty invasive. 13802 13803 * 'use_ops' Similar to 'def_ops' but for variables read by the 13804 statement. 13805 13806 * 'op' Array of trees with 'num_ops' slots. 13807 13808 12.1.3 'gimple_statement_with_memory_ops' 13809 ----------------------------------------- 13810 13811 This tuple is essentially identical to 'gimple_statement_with_ops', 13812 except that it contains 4 additional fields to hold vectors related 13813 memory stores and loads. Similar to the previous case, the structure is 13814 split in two to accommodate for the operand vector 13815 ('gimple_statement_with_memory_ops_base' and 13816 'gimple_statement_with_memory_ops'). 13817 13818 Field Size (bits) 13819 'gsbase' 256 13820 'def_ops' 64 13821 'use_ops' 64 13822 'vdef_ops' 64 13823 'vuse_ops' 64 13824 'stores' 64 13825 'loads' 64 13826 'op' 'num_ops' * 64 13827 Total size 80 + 8 * 'num_ops' bytes 13828 13829 * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators. There is 13830 one entry per memory symbol written by this statement. This is 13831 used to maintain the memory SSA use-def and def-def chains. 13832 13833 * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators. There is 13834 one entry per memory symbol loaded by this statement. This is used 13835 to maintain the memory SSA use-def chains. 13836 13837 * 'stores' Bitset with all the UIDs for the symbols written-to by the 13838 statement. This is different than 'vdef_ops' in that all the 13839 affected symbols are mentioned in this set. If memory partitioning 13840 is enabled, the 'vdef_ops' vector will refer to memory partitions. 13841 Furthermore, no SSA information is stored in this set. 13842 13843 * 'loads' Similar to 'stores', but for memory loads. (Note that 13844 there is some amount of redundancy here, it should be possible to 13845 reduce memory utilization further by removing these sets). 13846 13847 All the other tuples are defined in terms of these three basic ones. 13848 Each tuple will add some fields. The main gimple type is defined to be 13849 the union of all these structures ('GTY' markers elided for clarity): 13850 13851 union gimple_statement_d 13852 { 13853 struct gimple_statement_base gsbase; 13854 struct gimple_statement_with_ops gsops; 13855 struct gimple_statement_with_memory_ops gsmem; 13856 struct gimple_statement_omp omp; 13857 struct gimple_statement_bind gimple_bind; 13858 struct gimple_statement_catch gimple_catch; 13859 struct gimple_statement_eh_filter gimple_eh_filter; 13860 struct gimple_statement_phi gimple_phi; 13861 struct gimple_statement_resx gimple_resx; 13862 struct gimple_statement_try gimple_try; 13863 struct gimple_statement_wce gimple_wce; 13864 struct gimple_statement_asm gimple_asm; 13865 struct gimple_statement_omp_critical gimple_omp_critical; 13866 struct gimple_statement_omp_for gimple_omp_for; 13867 struct gimple_statement_omp_parallel gimple_omp_parallel; 13868 struct gimple_statement_omp_task gimple_omp_task; 13869 struct gimple_statement_omp_sections gimple_omp_sections; 13870 struct gimple_statement_omp_single gimple_omp_single; 13871 struct gimple_statement_omp_continue gimple_omp_continue; 13872 struct gimple_statement_omp_atomic_load gimple_omp_atomic_load; 13873 struct gimple_statement_omp_atomic_store gimple_omp_atomic_store; 13874 }; 13875 13876 13877 File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Tuple representation, Up: GIMPLE 13878 13879 12.2 GIMPLE instruction set 13880 =========================== 13881 13882 The following table briefly describes the GIMPLE instruction set. 13883 13884 Instruction High GIMPLE Low GIMPLE 13885 'GIMPLE_ASM' x x 13886 'GIMPLE_ASSIGN' x x 13887 'GIMPLE_BIND' x 13888 'GIMPLE_CALL' x x 13889 'GIMPLE_CATCH' x 13890 'GIMPLE_COND' x x 13891 'GIMPLE_DEBUG' x x 13892 'GIMPLE_EH_FILTER' x 13893 'GIMPLE_GOTO' x x 13894 'GIMPLE_LABEL' x x 13895 'GIMPLE_NOP' x x 13896 'GIMPLE_OMP_ATOMIC_LOAD' x x 13897 'GIMPLE_OMP_ATOMIC_STORE' x x 13898 'GIMPLE_OMP_CONTINUE' x x 13899 'GIMPLE_OMP_CRITICAL' x x 13900 'GIMPLE_OMP_FOR' x x 13901 'GIMPLE_OMP_MASTER' x x 13902 'GIMPLE_OMP_ORDERED' x x 13903 'GIMPLE_OMP_PARALLEL' x x 13904 'GIMPLE_OMP_RETURN' x x 13905 'GIMPLE_OMP_SECTION' x x 13906 'GIMPLE_OMP_SECTIONS' x x 13907 'GIMPLE_OMP_SECTIONS_SWITCH' x x 13908 'GIMPLE_OMP_SINGLE' x x 13909 'GIMPLE_PHI' x 13910 'GIMPLE_RESX' x 13911 'GIMPLE_RETURN' x x 13912 'GIMPLE_SWITCH' x x 13913 'GIMPLE_TRY' x 13914 13915 13916 File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 13917 13918 12.3 Exception Handling 13919 ======================= 13920 13921 Other exception handling constructs are represented using 13922 'GIMPLE_TRY_CATCH'. 'GIMPLE_TRY_CATCH' has two operands. The first 13923 operand is a sequence of statements to execute. If executing these 13924 statements does not throw an exception, then the second operand is 13925 ignored. Otherwise, if an exception is thrown, then the second operand 13926 of the 'GIMPLE_TRY_CATCH' is checked. The second operand may have the 13927 following forms: 13928 13929 1. A sequence of statements to execute. When an exception occurs, 13930 these statements are executed, and then the exception is rethrown. 13931 13932 2. A sequence of 'GIMPLE_CATCH' statements. Each 'GIMPLE_CATCH' has a 13933 list of applicable exception types and handler code. If the thrown 13934 exception matches one of the caught types, the associated handler 13935 code is executed. If the handler code falls off the bottom, 13936 execution continues after the original 'GIMPLE_TRY_CATCH'. 13937 13938 3. A 'GIMPLE_EH_FILTER' statement. This has a list of permitted 13939 exception types, and code to handle a match failure. If the thrown 13940 exception does not match one of the allowed types, the associated 13941 match failure code is executed. If the thrown exception does 13942 match, it continues unwinding the stack looking for the next 13943 handler. 13944 13945 Currently throwing an exception is not directly represented in GIMPLE, 13946 since it is implemented by calling a function. At some point in the 13947 future we will want to add some way to express that the call will throw 13948 an exception of a known type. 13949 13950 Just before running the optimizers, the compiler lowers the high-level 13951 EH constructs above into a set of 'goto's, magic labels, and EH regions. 13952 Continuing to unwind at the end of a cleanup is represented with a 13953 'GIMPLE_RESX'. 13954 13955 13956 File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 13957 13958 12.4 Temporaries 13959 ================ 13960 13961 When gimplification encounters a subexpression that is too complex, it 13962 creates a new temporary variable to hold the value of the subexpression, 13963 and adds a new statement to initialize it before the current statement. 13964 These special temporaries are known as 'expression temporaries', and are 13965 allocated using 'get_formal_tmp_var'. The compiler tries to always 13966 evaluate identical expressions into the same temporary, to simplify 13967 elimination of redundant calculations. 13968 13969 We can only use expression temporaries when we know that it will not be 13970 reevaluated before its value is used, and that it will not be otherwise 13971 modified(1). Other temporaries can be allocated using 13972 'get_initialized_tmp_var' or 'create_tmp_var'. 13973 13974 Currently, an expression like 'a = b + 5' is not reduced any further. 13975 We tried converting it to something like 13976 T1 = b + 5; 13977 a = T1; 13978 but this bloated the representation for minimal benefit. However, a 13979 variable which must live in memory cannot appear in an expression; its 13980 value is explicitly loaded into a temporary first. Similarly, storing 13981 the value of an expression to a memory variable goes through a 13982 temporary. 13983 13984 ---------- Footnotes ---------- 13985 13986 (1) These restrictions are derived from those in Morgan 4.8. 13987 13988 13989 File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 13990 13991 12.5 Operands 13992 ============= 13993 13994 In general, expressions in GIMPLE consist of an operation and the 13995 appropriate number of simple operands; these operands must either be a 13996 GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable. 13997 More complex operands are factored out into temporaries, so that 13998 a = b + c + d 13999 becomes 14000 T1 = b + c; 14001 a = T1 + d; 14002 14003 The same rule holds for arguments to a 'GIMPLE_CALL'. 14004 14005 The target of an assignment is usually a variable, but can also be a 14006 'MEM_REF' or a compound lvalue as described below. 14007 14008 * Menu: 14009 14010 * Compound Expressions:: 14011 * Compound Lvalues:: 14012 * Conditional Expressions:: 14013 * Logical Operators:: 14014 14015 14016 File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 14017 14018 12.5.1 Compound Expressions 14019 --------------------------- 14020 14021 The left-hand side of a C comma expression is simply moved into a 14022 separate statement. 14023 14024 14025 File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 14026 14027 12.5.2 Compound Lvalues 14028 ----------------------- 14029 14030 Currently compound lvalues involving array and structure field 14031 references are not broken down; an expression like 'a.b[2] = 42' is not 14032 reduced any further (though complex array subscripts are). This 14033 restriction is a workaround for limitations in later optimizers; if we 14034 were to convert this to 14035 14036 T1 = &a.b; 14037 T1[2] = 42; 14038 14039 alias analysis would not remember that the reference to 'T1[2]' came by 14040 way of 'a.b', so it would think that the assignment could alias another 14041 member of 'a'; this broke 'struct-alias-1.c'. Future optimizer 14042 improvements may make this limitation unnecessary. 14043 14044 14045 File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 14046 14047 12.5.3 Conditional Expressions 14048 ------------------------------ 14049 14050 A C '?:' expression is converted into an 'if' statement with each branch 14051 assigning to the same temporary. So, 14052 14053 a = b ? c : d; 14054 becomes 14055 if (b == 1) 14056 T1 = c; 14057 else 14058 T1 = d; 14059 a = T1; 14060 14061 The GIMPLE level if-conversion pass re-introduces '?:' expression, if 14062 appropriate. It is used to vectorize loops with conditions using vector 14063 conditional operations. 14064 14065 Note that in GIMPLE, 'if' statements are represented using 14066 'GIMPLE_COND', as described below. 14067 14068 14069 File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 14070 14071 12.5.4 Logical Operators 14072 ------------------------ 14073 14074 Except when they appear in the condition operand of a 'GIMPLE_COND', 14075 logical 'and' and 'or' operators are simplified as follows: 'a = b && c' 14076 becomes 14077 14078 T1 = (bool)b; 14079 if (T1 == true) 14080 T1 = (bool)c; 14081 a = T1; 14082 14083 Note that 'T1' in this example cannot be an expression temporary, 14084 because it has two different assignments. 14085 14086 12.5.5 Manipulating operands 14087 ---------------------------- 14088 14089 All gimple operands are of type 'tree'. But only certain types of trees 14090 are allowed to be used as operand tuples. Basic validation is 14091 controlled by the function 'get_gimple_rhs_class', which given a tree 14092 code, returns an 'enum' with the following values of type 'enum 14093 gimple_rhs_class' 14094 14095 * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 14096 14097 * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation. 14098 14099 * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 14100 14101 * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 14102 14103 * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 14104 split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL', 14105 'COMPONENT_REF', etc). 14106 14107 This operand class also acts as an escape hatch for tree nodes that 14108 may be flattened out into the operand vector, but would need more 14109 than two slots on the RHS. For instance, a 'COND_EXPR' expression 14110 of the form '(a op b) ? x : y' could be flattened out on the 14111 operand vector using 4 slots, but it would also require additional 14112 processing to distinguish 'c = a op b' from 'c = a op b ? x : y'. 14113 Something similar occurs with 'ASSERT_EXPR'. In time, these 14114 special case tree expressions should be flattened into the operand 14115 vector. 14116 14117 For tree nodes in the categories 'GIMPLE_TERNARY_RHS', 14118 'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside 14119 tuples directly. They first need to be flattened and separated into 14120 individual components. For instance, given the GENERIC expression 14121 14122 a = b + c 14123 14124 its tree representation is: 14125 14126 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 14127 14128 In this case, the GIMPLE form for this statement is logically identical 14129 to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the 14130 assignment is not represented as a tree, instead the two operands are 14131 taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE 14132 tuple as follows: 14133 14134 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 14135 14136 12.5.6 Operand vector allocation 14137 -------------------------------- 14138 14139 The operand vector is stored at the bottom of the three tuple structures 14140 that accept operands. This means, that depending on the code of a given 14141 statement, its operand vector will be at different offsets from the base 14142 of the structure. To access tuple operands use the following accessors 14143 14144 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 14145 Returns the number of operands in statement G. 14146 14147 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 14148 Returns operand 'I' from statement 'G'. 14149 14150 -- GIMPLE function: tree * gimple_ops (gimple g) 14151 Returns a pointer into the operand vector for statement 'G'. This 14152 is computed using an internal table called 'gimple_ops_offset_'[]. 14153 This table is indexed by the gimple code of 'G'. 14154 14155 When the compiler is built, this table is filled-in using the sizes 14156 of the structures used by each statement code defined in 14157 gimple.def. Since the operand vector is at the bottom of the 14158 structure, for a gimple code 'C' the offset is computed as sizeof 14159 (struct-of 'C') - sizeof (tree). 14160 14161 This mechanism adds one memory indirection to every access when 14162 using 'gimple_op'(), if this becomes a bottleneck, a pass can 14163 choose to memoize the result from 'gimple_ops'() and use that to 14164 access the operands. 14165 14166 12.5.7 Operand validation 14167 ------------------------- 14168 14169 When adding a new operand to a gimple statement, the operand will be 14170 validated according to what each tuple accepts in its operand vector. 14171 These predicates are called by the 'gimple_NAME_set_...()'. Each tuple 14172 will use one of the following predicates (Note, this list is not 14173 exhaustive): 14174 14175 -- GIMPLE function: bool is_gimple_val (tree t) 14176 Returns true if t is a "GIMPLE value", which are all the 14177 non-addressable stack variables (variables for which 14178 'is_gimple_reg' returns true) and constants (expressions for which 14179 'is_gimple_min_invariant' returns true). 14180 14181 -- GIMPLE function: bool is_gimple_addressable (tree t) 14182 Returns true if t is a symbol or memory reference whose address can 14183 be taken. 14184 14185 -- GIMPLE function: bool is_gimple_asm_val (tree t) 14186 Similar to 'is_gimple_val' but it also accepts hard registers. 14187 14188 -- GIMPLE function: bool is_gimple_call_addr (tree t) 14189 Return true if t is a valid expression to use as the function 14190 called by a 'GIMPLE_CALL'. 14191 14192 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t) 14193 Return true if t is a valid expression to use as first operand of a 14194 'MEM_REF' expression. 14195 14196 -- GIMPLE function: bool is_gimple_constant (tree t) 14197 Return true if t is a valid gimple constant. 14198 14199 -- GIMPLE function: bool is_gimple_min_invariant (tree t) 14200 Return true if t is a valid minimal invariant. This is different 14201 from constants, in that the specific value of t may not be known at 14202 compile time, but it is known that it doesn't change (e.g., the 14203 address of a function local variable). 14204 14205 -- GIMPLE function: bool is_gimple_ip_invariant (tree t) 14206 Return true if t is an interprocedural invariant. This means that 14207 t is a valid invariant in all functions (e.g. it can be an address 14208 of a global variable but not of a local one). 14209 14210 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t) 14211 Return true if t is an 'ADDR_EXPR' that does not change once the 14212 program is running (and which is valid in all functions). 14213 14214 12.5.8 Statement validation 14215 --------------------------- 14216 14217 -- GIMPLE function: bool is_gimple_assign (gimple g) 14218 Return true if the code of g is 'GIMPLE_ASSIGN'. 14219 14220 -- GIMPLE function: bool is_gimple_call (gimple g) 14221 Return true if the code of g is 'GIMPLE_CALL'. 14222 14223 -- GIMPLE function: bool is_gimple_debug (gimple g) 14224 Return true if the code of g is 'GIMPLE_DEBUG'. 14225 14226 -- GIMPLE function: bool gimple_assign_cast_p (gimple g) 14227 Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast 14228 operation. 14229 14230 -- GIMPLE function: bool gimple_debug_bind_p (gimple g) 14231 Return true if g is a 'GIMPLE_DEBUG' that binds the value of an 14232 expression to a variable. 14233 14234 14235 File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 14236 14237 12.6 Manipulating GIMPLE statements 14238 =================================== 14239 14240 This section documents all the functions available to handle each of the 14241 GIMPLE instructions. 14242 14243 12.6.1 Common accessors 14244 ----------------------- 14245 14246 The following are common accessors for gimple statements. 14247 14248 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 14249 Return the code for statement 'G'. 14250 14251 -- GIMPLE function: basic_block gimple_bb (gimple g) 14252 Return the basic block to which statement 'G' belongs to. 14253 14254 -- GIMPLE function: tree gimple_block (gimple g) 14255 Return the lexical scope block holding statement 'G'. 14256 14257 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 14258 Return the type of the main expression computed by 'STMT'. Return 14259 'void_type_node' if 'STMT' computes nothing. This will only return 14260 something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and 14261 'GIMPLE_CALL'. For all other tuple codes, it will return 14262 'void_type_node'. 14263 14264 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 14265 Return the tree code for the expression computed by 'STMT'. This 14266 is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and 14267 'GIMPLE_COND'. If 'STMT' is 'GIMPLE_CALL', it will return 14268 'CALL_EXPR'. For 'GIMPLE_COND', it returns the code of the 14269 comparison predicate. For 'GIMPLE_ASSIGN' it returns the code of 14270 the operation performed by the 'RHS' of the assignment. 14271 14272 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 14273 Set the lexical scope block of 'G' to 'BLOCK'. 14274 14275 -- GIMPLE function: location_t gimple_locus (gimple g) 14276 Return locus information for statement 'G'. 14277 14278 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 14279 Set locus information for statement 'G'. 14280 14281 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 14282 Return true if 'G' does not have locus information. 14283 14284 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 14285 Return true if no warnings should be emitted for statement 'STMT'. 14286 14287 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 14288 visited_p) 14289 Set the visited status on statement 'STMT' to 'VISITED_P'. 14290 14291 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 14292 Return the visited status on statement 'STMT'. 14293 14294 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 14295 plf, bool val_p) 14296 Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'. 14297 14298 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask 14299 plf) 14300 Return the value of pass local flag 'PLF' on statement 'STMT'. 14301 14302 -- GIMPLE function: bool gimple_has_ops (gimple g) 14303 Return true if statement 'G' has register or memory operands. 14304 14305 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 14306 Return true if statement 'G' has memory operands. 14307 14308 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 14309 Return the number of operands for statement 'G'. 14310 14311 -- GIMPLE function: tree * gimple_ops (gimple g) 14312 Return the array of operands for statement 'G'. 14313 14314 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 14315 Return operand 'I' for statement 'G'. 14316 14317 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i) 14318 Return a pointer to operand 'I' for statement 'G'. 14319 14320 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 14321 Set operand 'I' of statement 'G' to 'OP'. 14322 14323 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 14324 Return the set of symbols that have had their address taken by 14325 'STMT'. 14326 14327 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g) 14328 Return the set of 'DEF' operands for statement 'G'. 14329 14330 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 14331 def_optype_d *def) 14332 Set 'DEF' to be the set of 'DEF' operands for statement 'G'. 14333 14334 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g) 14335 Return the set of 'USE' operands for statement 'G'. 14336 14337 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 14338 use_optype_d *use) 14339 Set 'USE' to be the set of 'USE' operands for statement 'G'. 14340 14341 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g) 14342 Return the set of 'VUSE' operands for statement 'G'. 14343 14344 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 14345 voptype_d *ops) 14346 Set 'OPS' to be the set of 'VUSE' operands for statement 'G'. 14347 14348 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g) 14349 Return the set of 'VDEF' operands for statement 'G'. 14350 14351 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 14352 voptype_d *ops) 14353 Set 'OPS' to be the set of 'VDEF' operands for statement 'G'. 14354 14355 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 14356 Return the set of symbols loaded by statement 'G'. Each element of 14357 the set is the 'DECL_UID' of the corresponding symbol. 14358 14359 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 14360 Return the set of symbols stored by statement 'G'. Each element of 14361 the set is the 'DECL_UID' of the corresponding symbol. 14362 14363 -- GIMPLE function: bool gimple_modified_p (gimple g) 14364 Return true if statement 'G' has operands and the modified field 14365 has been set. 14366 14367 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 14368 Return true if statement 'STMT' contains volatile operands. 14369 14370 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool 14371 volatilep) 14372 Return true if statement 'STMT' contains volatile operands. 14373 14374 -- GIMPLE function: void update_stmt (gimple s) 14375 Mark statement 'S' as modified, and update it. 14376 14377 -- GIMPLE function: void update_stmt_if_modified (gimple s) 14378 Update statement 'S' if it has been marked modified. 14379 14380 -- GIMPLE function: gimple gimple_copy (gimple stmt) 14381 Return a deep copy of statement 'STMT'. 14382 14383 14384 File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 14385 14386 12.7 Tuple specific accessors 14387 ============================= 14388 14389 * Menu: 14390 14391 * 'GIMPLE_ASM':: 14392 * 'GIMPLE_ASSIGN':: 14393 * 'GIMPLE_BIND':: 14394 * 'GIMPLE_CALL':: 14395 * 'GIMPLE_CATCH':: 14396 * 'GIMPLE_COND':: 14397 * 'GIMPLE_DEBUG':: 14398 * 'GIMPLE_EH_FILTER':: 14399 * 'GIMPLE_LABEL':: 14400 * 'GIMPLE_NOP':: 14401 * 'GIMPLE_OMP_ATOMIC_LOAD':: 14402 * 'GIMPLE_OMP_ATOMIC_STORE':: 14403 * 'GIMPLE_OMP_CONTINUE':: 14404 * 'GIMPLE_OMP_CRITICAL':: 14405 * 'GIMPLE_OMP_FOR':: 14406 * 'GIMPLE_OMP_MASTER':: 14407 * 'GIMPLE_OMP_ORDERED':: 14408 * 'GIMPLE_OMP_PARALLEL':: 14409 * 'GIMPLE_OMP_RETURN':: 14410 * 'GIMPLE_OMP_SECTION':: 14411 * 'GIMPLE_OMP_SECTIONS':: 14412 * 'GIMPLE_OMP_SINGLE':: 14413 * 'GIMPLE_PHI':: 14414 * 'GIMPLE_RESX':: 14415 * 'GIMPLE_RETURN':: 14416 * 'GIMPLE_SWITCH':: 14417 * 'GIMPLE_TRY':: 14418 * 'GIMPLE_WITH_CLEANUP_EXPR':: 14419 14420 14421 File: gccint.info, Node: 'GIMPLE_ASM', Next: 'GIMPLE_ASSIGN', Up: Tuple specific accessors 14422 14423 12.7.1 'GIMPLE_ASM' 14424 ------------------- 14425 14426 -- GIMPLE function: gimple gimple_build_asm (const char *string, 14427 ninputs, noutputs, nclobbers, ...) 14428 Build a 'GIMPLE_ASM' statement. This statement is used for 14429 building in-line assembly constructs. 'STRING' is the assembly 14430 code. 'NINPUT' is the number of register inputs. 'NOUTPUT' is the 14431 number of register outputs. 'NCLOBBERS' is the number of clobbered 14432 registers. The rest of the arguments trees for each input, output, 14433 and clobbered registers. 14434 14435 -- GIMPLE function: gimple gimple_build_asm_vec (const char *, 14436 VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *) 14437 Identical to gimple_build_asm, but the arguments are passed in 14438 VECs. 14439 14440 -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g) 14441 Return the number of input operands for 'GIMPLE_ASM' 'G'. 14442 14443 -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g) 14444 Return the number of output operands for 'GIMPLE_ASM' 'G'. 14445 14446 -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g) 14447 Return the number of clobber operands for 'GIMPLE_ASM' 'G'. 14448 14449 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index) 14450 Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'. 14451 14452 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned 14453 index, tree in_op) 14454 Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'. 14455 14456 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned 14457 index) 14458 Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'. 14459 14460 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned 14461 index, tree out_op) 14462 Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'. 14463 14464 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned 14465 index) 14466 Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'. 14467 14468 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned 14469 index, tree clobber_op) 14470 Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'. 14471 14472 -- GIMPLE function: const char * gimple_asm_string (gimple g) 14473 Return the string representing the assembly instruction in 14474 'GIMPLE_ASM' 'G'. 14475 14476 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g) 14477 Return true if 'G' is an asm statement marked volatile. 14478 14479 -- GIMPLE function: void gimple_asm_set_volatile (gimple g) 14480 Mark asm statement 'G' as volatile. 14481 14482 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g) 14483 Remove volatile marker from asm statement 'G'. 14484 14485 14486 File: gccint.info, Node: 'GIMPLE_ASSIGN', Next: 'GIMPLE_BIND', Prev: 'GIMPLE_ASM', Up: Tuple specific accessors 14487 14488 12.7.2 'GIMPLE_ASSIGN' 14489 ---------------------- 14490 14491 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs) 14492 Build a 'GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 14493 passed in lhs. The right-hand side can be either a unary or binary 14494 tree expression. The expression tree rhs will be flattened and its 14495 operands assigned to the corresponding operand slots in the new 14496 statement. This function is useful when you already have a tree 14497 expression that you want to convert into a tuple. However, try to 14498 avoid building expression trees for the sole purpose of calling 14499 this function. If you already have the operands in separate trees, 14500 it is better to use 'gimple_build_assign_with_ops'. 14501 14502 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 14503 gimple_seq *seq_p) 14504 Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of 14505 '*SEQ_P'. 14506 14507 'DST'/'SRC' are the destination and source respectively. You can pass 14508 ungimplified trees in 'DST' or 'SRC', in which case they will be 14509 converted to a gimple operand if necessary. 14510 14511 This function returns the newly created 'GIMPLE_ASSIGN' tuple. 14512 14513 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum tree_code 14514 subcode, tree lhs, tree op1, tree op2) 14515 This function is similar to 'gimple_build_assign', but is used to 14516 build a 'GIMPLE_ASSIGN' statement when the operands of the 14517 right-hand side of the assignment are already split into different 14518 operands. 14519 14520 The left-hand side is an lvalue passed in lhs. Subcode is the 14521 'tree_code' for the right-hand side of the assignment. Op1 and op2 14522 are the operands. If op2 is null, subcode must be a 'tree_code' 14523 for a unary expression. 14524 14525 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 14526 Return the code of the expression computed on the 'RHS' of 14527 assignment statement 'G'. 14528 14529 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 14530 (gimple g) 14531 Return the gimple rhs class of the code for the expression computed 14532 on the rhs of assignment statement 'G'. This will never return 14533 'GIMPLE_INVALID_RHS'. 14534 14535 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 14536 Return the 'LHS' of assignment statement 'G'. 14537 14538 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g) 14539 Return a pointer to the 'LHS' of assignment statement 'G'. 14540 14541 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 14542 Return the first operand on the 'RHS' of assignment statement 'G'. 14543 14544 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g) 14545 Return the address of the first operand on the 'RHS' of assignment 14546 statement 'G'. 14547 14548 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 14549 Return the second operand on the 'RHS' of assignment statement 'G'. 14550 14551 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g) 14552 Return the address of the second operand on the 'RHS' of assignment 14553 statement 'G'. 14554 14555 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g) 14556 Return the third operand on the 'RHS' of assignment statement 'G'. 14557 14558 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g) 14559 Return the address of the third operand on the 'RHS' of assignment 14560 statement 'G'. 14561 14562 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 14563 Set 'LHS' to be the 'LHS' operand of assignment statement 'G'. 14564 14565 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 14566 Set 'RHS' to be the first operand on the 'RHS' of assignment 14567 statement 'G'. 14568 14569 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 14570 Set 'RHS' to be the second operand on the 'RHS' of assignment 14571 statement 'G'. 14572 14573 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs) 14574 Set 'RHS' to be the third operand on the 'RHS' of assignment 14575 statement 'G'. 14576 14577 -- GIMPLE function: bool gimple_assign_cast_p (gimple s) 14578 Return true if 'S' is a type-cast assignment. 14579 14580 14581 File: gccint.info, Node: 'GIMPLE_BIND', Next: 'GIMPLE_CALL', Prev: 'GIMPLE_ASSIGN', Up: Tuple specific accessors 14582 14583 12.7.3 'GIMPLE_BIND' 14584 -------------------- 14585 14586 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq 14587 body) 14588 Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS' 14589 and a body of statements in sequence 'BODY'. 14590 14591 -- GIMPLE function: tree gimple_bind_vars (gimple g) 14592 Return the variables declared in the 'GIMPLE_BIND' statement 'G'. 14593 14594 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars) 14595 Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND' 14596 statement 'G'. 14597 14598 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars) 14599 Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND' 14600 statement 'G'. 14601 14602 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g) 14603 Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement 14604 'G'. 14605 14606 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq 14607 seq) 14608 Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement 14609 'G'. 14610 14611 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt) 14612 Append a statement to the end of a 'GIMPLE_BIND''s body. 14613 14614 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq 14615 seq) 14616 Append a sequence of statements to the end of a 'GIMPLE_BIND''s 14617 body. 14618 14619 -- GIMPLE function: tree gimple_bind_block (gimple g) 14620 Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND' 14621 statement 'G'. This is analogous to the 'BIND_EXPR_BLOCK' field in 14622 trees. 14623 14624 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block) 14625 Set 'BLOCK' to be the 'TREE_BLOCK' node associated with 14626 'GIMPLE_BIND' statement 'G'. 14627 14628 14629 File: gccint.info, Node: 'GIMPLE_CALL', Next: 'GIMPLE_CATCH', Prev: 'GIMPLE_BIND', Up: Tuple specific accessors 14630 14631 12.7.4 'GIMPLE_CALL' 14632 -------------------- 14633 14634 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs, 14635 ...) 14636 Build a 'GIMPLE_CALL' statement to function 'FN'. The argument 14637 'FN' must be either a 'FUNCTION_DECL' or a gimple call address as 14638 determined by 'is_gimple_call_addr'. 'NARGS' are the number of 14639 arguments. The rest of the arguments follow the argument 'NARGS', 14640 and must be trees that are valid as rvalues in gimple (i.e., each 14641 operand is validated with 'is_gimple_operand'). 14642 14643 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr) 14644 Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node. The arguments and 14645 the function are taken from the expression directly. This routine 14646 assumes that 'call_expr' is already in GIMPLE form. That is, its 14647 operands are GIMPLE values and the function call needs no further 14648 simplification. All the call flags in 'call_expr' are copied over 14649 to the new 'GIMPLE_CALL'. 14650 14651 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, 'VEC'(tree, 14652 heap) *args) 14653 Identical to 'gimple_build_call' but the arguments are stored in a 14654 'VEC'(). 14655 14656 -- GIMPLE function: tree gimple_call_lhs (gimple g) 14657 Return the 'LHS' of call statement 'G'. 14658 14659 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g) 14660 Return a pointer to the 'LHS' of call statement 'G'. 14661 14662 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 14663 Set 'LHS' to be the 'LHS' operand of call statement 'G'. 14664 14665 -- GIMPLE function: tree gimple_call_fn (gimple g) 14666 Return the tree node representing the function called by call 14667 statement 'G'. 14668 14669 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn) 14670 Set 'FN' to be the function called by call statement 'G'. This has 14671 to be a gimple value specifying the address of the called function. 14672 14673 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 14674 If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it. 14675 Otherwise return 'NULL'. This function is analogous to 14676 'get_callee_fndecl' in 'GENERIC'. 14677 14678 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 14679 Set the called function to 'FNDECL'. 14680 14681 -- GIMPLE function: tree gimple_call_return_type (gimple g) 14682 Return the type returned by call statement 'G'. 14683 14684 -- GIMPLE function: tree gimple_call_chain (gimple g) 14685 Return the static chain for call statement 'G'. 14686 14687 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain) 14688 Set 'CHAIN' to be the static chain for call statement 'G'. 14689 14690 -- GIMPLE function: unsigned gimple_call_num_args (gimple g) 14691 Return the number of arguments used by call statement 'G'. 14692 14693 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 14694 Return the argument at position 'INDEX' for call statement 'G'. 14695 The first argument is 0. 14696 14697 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned 14698 index) 14699 Return a pointer to the argument at position 'INDEX' for call 14700 statement 'G'. 14701 14702 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index, 14703 tree arg) 14704 Set 'ARG' to be the argument at position 'INDEX' for call statement 14705 'G'. 14706 14707 -- GIMPLE function: void gimple_call_set_tail (gimple s) 14708 Mark call statement 'S' as being a tail call (i.e., a call just 14709 before the exit of a function). These calls are candidate for tail 14710 call optimization. 14711 14712 -- GIMPLE function: bool gimple_call_tail_p (gimple s) 14713 Return true if 'GIMPLE_CALL' 'S' is marked as a tail call. 14714 14715 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s) 14716 Mark 'GIMPLE_CALL' 'S' as being uninlinable. 14717 14718 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s) 14719 Return true if 'GIMPLE_CALL' 'S' cannot be inlined. 14720 14721 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 14722 Return true if 'S' is a noreturn call. 14723 14724 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt, 14725 bitmap args_to_skip) 14726 Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the 14727 arguments in the positions marked by the set 'ARGS_TO_SKIP'. 14728 14729 14730 File: gccint.info, Node: 'GIMPLE_CATCH', Next: 'GIMPLE_COND', Prev: 'GIMPLE_CALL', Up: Tuple specific accessors 14731 14732 12.7.5 'GIMPLE_CATCH' 14733 --------------------- 14734 14735 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq 14736 handler) 14737 Build a 'GIMPLE_CATCH' statement. 'TYPES' are the tree types this 14738 catch handles. 'HANDLER' is a sequence of statements with the code 14739 for the handler. 14740 14741 -- GIMPLE function: tree gimple_catch_types (gimple g) 14742 Return the types handled by 'GIMPLE_CATCH' statement 'G'. 14743 14744 -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g) 14745 Return a pointer to the types handled by 'GIMPLE_CATCH' statement 14746 'G'. 14747 14748 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g) 14749 Return the GIMPLE sequence representing the body of the handler of 14750 'GIMPLE_CATCH' statement 'G'. 14751 14752 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t) 14753 Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'. 14754 14755 -- GIMPLE function: void gimple_catch_set_handler (gimple g, gimple_seq 14756 handler) 14757 Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'. 14758 14759 14760 File: gccint.info, Node: 'GIMPLE_COND', Next: 'GIMPLE_DEBUG', Prev: 'GIMPLE_CATCH', Up: Tuple specific accessors 14761 14762 12.7.6 'GIMPLE_COND' 14763 -------------------- 14764 14765 -- GIMPLE function: gimple gimple_build_cond (enum tree_code pred_code, 14766 tree lhs, tree rhs, tree t_label, tree f_label) 14767 Build a 'GIMPLE_COND' statement. 'A' 'GIMPLE_COND' statement 14768 compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is 14769 true, jump to the label in 't_label', otherwise jump to the label 14770 in 'f_label'. 'PRED_CODE' are relational operator tree codes like 14771 'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc. 14772 14773 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond, tree 14774 t_label, tree f_label) 14775 Build a 'GIMPLE_COND' statement from the conditional expression 14776 tree 'COND'. 'T_LABEL' and 'F_LABEL' are as in 14777 'gimple_build_cond'. 14778 14779 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 14780 Return the code of the predicate computed by conditional statement 14781 'G'. 14782 14783 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum tree_code 14784 code) 14785 Set 'CODE' to be the predicate code for the conditional statement 14786 'G'. 14787 14788 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 14789 Return the 'LHS' of the predicate computed by conditional statement 14790 'G'. 14791 14792 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs) 14793 Set 'LHS' to be the 'LHS' operand of the predicate computed by 14794 conditional statement 'G'. 14795 14796 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 14797 Return the 'RHS' operand of the predicate computed by conditional 14798 'G'. 14799 14800 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs) 14801 Set 'RHS' to be the 'RHS' operand of the predicate computed by 14802 conditional statement 'G'. 14803 14804 -- GIMPLE function: tree gimple_cond_true_label (gimple g) 14805 Return the label used by conditional statement 'G' when its 14806 predicate evaluates to true. 14807 14808 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree 14809 label) 14810 Set 'LABEL' to be the label used by conditional statement 'G' when 14811 its predicate evaluates to true. 14812 14813 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree 14814 label) 14815 Set 'LABEL' to be the label used by conditional statement 'G' when 14816 its predicate evaluates to false. 14817 14818 -- GIMPLE function: tree gimple_cond_false_label (gimple g) 14819 Return the label used by conditional statement 'G' when its 14820 predicate evaluates to false. 14821 14822 -- GIMPLE function: void gimple_cond_make_false (gimple g) 14823 Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'. 14824 14825 -- GIMPLE function: void gimple_cond_make_true (gimple g) 14826 Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'. 14827 14828 14829 File: gccint.info, Node: 'GIMPLE_DEBUG', Next: 'GIMPLE_EH_FILTER', Prev: 'GIMPLE_COND', Up: Tuple specific accessors 14830 14831 12.7.7 'GIMPLE_DEBUG' 14832 --------------------- 14833 14834 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree 14835 value, gimple stmt) 14836 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' of 14837 'subcode'. The effect of this statement is to tell debug 14838 information generation machinery that the value of user variable 14839 'var' is given by 'value' at that point, and to remain with that 14840 value until 'var' runs out of scope, a dynamically-subsequent debug 14841 bind statement overrides the binding, or conflicting values reach a 14842 control flow merge point. Even if components of the 'value' 14843 expression change afterwards, the variable is supposed to retain 14844 the same value, though not necessarily the same location. 14845 14846 It is expected that 'var' be most often a tree for automatic user 14847 variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements 14848 for gimple registers, but it may also be a tree for a scalarized 14849 component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a 14850 debug temporary ('DEBUG_EXPR_DECL'). 14851 14852 As for 'value', it can be an arbitrary tree expression, but it is 14853 recommended that it be in a suitable form for a gimple assignment 14854 'RHS'. It is not expected that user variables that could appear as 14855 'var' ever appear in 'value', because in the latter we'd have their 14856 'SSA_NAME's instead, but even if they were not in SSA form, user 14857 variables appearing in 'value' are to be regarded as part of the 14858 executable code space, whereas those in 'var' are to be regarded as 14859 part of the source code space. There is no way to refer to the 14860 value bound to a user variable within a 'value' expression. 14861 14862 If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information 14863 generation machinery is informed that the variable 'var' is 14864 unbound, i.e., that its value is indeterminate, which sometimes 14865 means it is really unavailable, and other times that the compiler 14866 could not keep track of it. 14867 14868 Block and location information for the newly-created stmt are taken 14869 from 'stmt', if given. 14870 14871 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 14872 Return the user variable VAR that is bound at 'stmt'. 14873 14874 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 14875 Return the value expression that is bound to a user variable at 14876 'stmt'. 14877 14878 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple 14879 stmt) 14880 Return a pointer to the value expression that is bound to a user 14881 variable at 'stmt'. 14882 14883 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 14884 var) 14885 Modify the user variable bound at 'stmt' to VAR. 14886 14887 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree 14888 var) 14889 Modify the value bound to the user variable bound at 'stmt' to 14890 VALUE. 14891 14892 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 14893 Modify the value bound to the user variable bound at 'stmt' so that 14894 the variable becomes unbound. 14895 14896 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 14897 Return 'TRUE' if 'stmt' binds a user variable to a value, and 14898 'FALSE' if it unbinds the variable. 14899 14900 14901 File: gccint.info, Node: 'GIMPLE_EH_FILTER', Next: 'GIMPLE_LABEL', Prev: 'GIMPLE_DEBUG', Up: Tuple specific accessors 14902 14903 12.7.8 'GIMPLE_EH_FILTER' 14904 ------------------------- 14905 14906 -- GIMPLE function: gimple gimple_build_eh_filter (tree types, 14907 gimple_seq failure) 14908 Build a 'GIMPLE_EH_FILTER' statement. 'TYPES' are the filter's 14909 types. 'FAILURE' is a sequence with the filter's failure action. 14910 14911 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 14912 Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'. 14913 14914 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g) 14915 Return a pointer to the types handled by 'GIMPLE_EH_FILTER' 14916 statement 'G'. 14917 14918 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 14919 Return the sequence of statement to execute when 'GIMPLE_EH_FILTER' 14920 statement fails. 14921 14922 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree 14923 types) 14924 Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER' 14925 'G'. 14926 14927 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g, 14928 gimple_seq failure) 14929 Set 'FAILURE' to be the sequence of statements to execute on 14930 failure for 'GIMPLE_EH_FILTER' 'G'. 14931 14932 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g) 14933 Return the 'EH_FILTER_MUST_NOT_THROW' flag. 14934 14935 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple g, 14936 bool mntp) 14937 Set the 'EH_FILTER_MUST_NOT_THROW' flag. 14938 14939 14940 File: gccint.info, Node: 'GIMPLE_LABEL', Next: 'GIMPLE_NOP', Prev: 'GIMPLE_EH_FILTER', Up: Tuple specific accessors 14941 14942 12.7.9 'GIMPLE_LABEL' 14943 --------------------- 14944 14945 -- GIMPLE function: gimple gimple_build_label (tree label) 14946 Build a 'GIMPLE_LABEL' statement with corresponding to the tree 14947 label, 'LABEL'. 14948 14949 -- GIMPLE function: tree gimple_label_label (gimple g) 14950 Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'. 14951 14952 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label) 14953 Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL' 14954 statement 'G'. 14955 14956 -- GIMPLE function: gimple gimple_build_goto (tree dest) 14957 Build a 'GIMPLE_GOTO' statement to label 'DEST'. 14958 14959 -- GIMPLE function: tree gimple_goto_dest (gimple g) 14960 Return the destination of the unconditional jump 'G'. 14961 14962 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest) 14963 Set 'DEST' to be the destination of the unconditional jump 'G'. 14964 14965 14966 File: gccint.info, Node: 'GIMPLE_NOP', Next: 'GIMPLE_OMP_ATOMIC_LOAD', Prev: 'GIMPLE_LABEL', Up: Tuple specific accessors 14967 14968 12.7.10 'GIMPLE_NOP' 14969 -------------------- 14970 14971 -- GIMPLE function: gimple gimple_build_nop (void) 14972 Build a 'GIMPLE_NOP' statement. 14973 14974 -- GIMPLE function: bool gimple_nop_p (gimple g) 14975 Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'. 14976 14977 14978 File: gccint.info, Node: 'GIMPLE_OMP_ATOMIC_LOAD', Next: 'GIMPLE_OMP_ATOMIC_STORE', Prev: 'GIMPLE_NOP', Up: Tuple specific accessors 14979 14980 12.7.11 'GIMPLE_OMP_ATOMIC_LOAD' 14981 -------------------------------- 14982 14983 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs, tree 14984 rhs) 14985 Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement. 'LHS' is the left-hand 14986 side of the assignment. 'RHS' is the right-hand side of the 14987 assignment. 14988 14989 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g, tree 14990 lhs) 14991 Set the 'LHS' of an atomic load. 14992 14993 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g) 14994 Get the 'LHS' of an atomic load. 14995 14996 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g, tree 14997 rhs) 14998 Set the 'RHS' of an atomic set. 14999 15000 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g) 15001 Get the 'RHS' of an atomic set. 15002 15003 15004 File: gccint.info, Node: 'GIMPLE_OMP_ATOMIC_STORE', Next: 'GIMPLE_OMP_CONTINUE', Prev: 'GIMPLE_OMP_ATOMIC_LOAD', Up: Tuple specific accessors 15005 15006 12.7.12 'GIMPLE_OMP_ATOMIC_STORE' 15007 --------------------------------- 15008 15009 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val) 15010 Build a 'GIMPLE_OMP_ATOMIC_STORE' statement. 'VAL' is the value to 15011 be stored. 15012 15013 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g, 15014 tree val) 15015 Set the value being stored in an atomic store. 15016 15017 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g) 15018 Return the value being stored in an atomic store. 15019 15020 15021 File: gccint.info, Node: 'GIMPLE_OMP_CONTINUE', Next: 'GIMPLE_OMP_CRITICAL', Prev: 'GIMPLE_OMP_ATOMIC_STORE', Up: Tuple specific accessors 15022 15023 12.7.13 'GIMPLE_OMP_CONTINUE' 15024 ----------------------------- 15025 15026 -- GIMPLE function: gimple gimple_build_omp_continue (tree control_def, 15027 tree control_use) 15028 Build a 'GIMPLE_OMP_CONTINUE' statement. 'CONTROL_DEF' is the 15029 definition of the control variable. 'CONTROL_USE' is the use of 15030 the control variable. 15031 15032 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s) 15033 Return the definition of the control variable on a 15034 'GIMPLE_OMP_CONTINUE' in 'S'. 15035 15036 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s) 15037 Same as above, but return the pointer. 15038 15039 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s) 15040 Set the control variable definition for a 'GIMPLE_OMP_CONTINUE' 15041 statement in 'S'. 15042 15043 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s) 15044 Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE' 15045 in 'S'. 15046 15047 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s) 15048 Same as above, but return the pointer. 15049 15050 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s) 15051 Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement 15052 in 'S'. 15053 15054 15055 File: gccint.info, Node: 'GIMPLE_OMP_CRITICAL', Next: 'GIMPLE_OMP_FOR', Prev: 'GIMPLE_OMP_CONTINUE', Up: Tuple specific accessors 15056 15057 12.7.14 'GIMPLE_OMP_CRITICAL' 15058 ----------------------------- 15059 15060 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body, 15061 tree name) 15062 Build a 'GIMPLE_OMP_CRITICAL' statement. 'BODY' is the sequence of 15063 statements for which only one thread can execute. 'NAME' is an 15064 optional identifier for this critical block. 15065 15066 -- GIMPLE function: tree gimple_omp_critical_name (gimple g) 15067 Return the name associated with 'OMP_CRITICAL' statement 'G'. 15068 15069 -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g) 15070 Return a pointer to the name associated with 'OMP' critical 15071 statement 'G'. 15072 15073 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree 15074 name) 15075 Set 'NAME' to be the name associated with 'OMP' critical statement 15076 'G'. 15077 15078 15079 File: gccint.info, Node: 'GIMPLE_OMP_FOR', Next: 'GIMPLE_OMP_MASTER', Prev: 'GIMPLE_OMP_CRITICAL', Up: Tuple specific accessors 15080 15081 12.7.15 'GIMPLE_OMP_FOR' 15082 ------------------------ 15083 15084 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree 15085 clauses, tree index, tree initial, tree final, tree incr, 15086 gimple_seq pre_body, enum tree_code omp_for_cond) 15087 Build a 'GIMPLE_OMP_FOR' statement. 'BODY' is sequence of 15088 statements inside the for loop. 'CLAUSES', are any of the 'OMP' 15089 loop construct's clauses: private, firstprivate, lastprivate, 15090 reductions, ordered, schedule, and nowait. 'PRE_BODY' is the 15091 sequence of statements that are loop invariant. 'INDEX' is the 15092 index variable. 'INITIAL' is the initial value of 'INDEX'. 15093 'FINAL' is final value of 'INDEX'. OMP_FOR_COND is the predicate 15094 used to compare 'INDEX' and 'FINAL'. 'INCR' is the increment 15095 expression. 15096 15097 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 15098 Return the clauses associated with 'OMP_FOR' 'G'. 15099 15100 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g) 15101 Return a pointer to the 'OMP_FOR' 'G'. 15102 15103 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 15104 clauses) 15105 Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR' 15106 'G'. 15107 15108 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 15109 Return the index variable for 'OMP_FOR' 'G'. 15110 15111 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g) 15112 Return a pointer to the index variable for 'OMP_FOR' 'G'. 15113 15114 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 15115 index) 15116 Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'. 15117 15118 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 15119 Return the initial value for 'OMP_FOR' 'G'. 15120 15121 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g) 15122 Return a pointer to the initial value for 'OMP_FOR' 'G'. 15123 15124 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 15125 initial) 15126 Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'. 15127 15128 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 15129 Return the final value for 'OMP_FOR' 'G'. 15130 15131 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g) 15132 turn a pointer to the final value for 'OMP_FOR' 'G'. 15133 15134 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 15135 final) 15136 Set 'FINAL' to be the final value for 'OMP_FOR' 'G'. 15137 15138 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 15139 Return the increment value for 'OMP_FOR' 'G'. 15140 15141 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g) 15142 Return a pointer to the increment value for 'OMP_FOR' 'G'. 15143 15144 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 15145 Set 'INCR' to be the increment value for 'OMP_FOR' 'G'. 15146 15147 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 15148 Return the sequence of statements to execute before the 'OMP_FOR' 15149 statement 'G' starts. 15150 15151 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 15152 gimple_seq pre_body) 15153 Set 'PRE_BODY' to be the sequence of statements to execute before 15154 the 'OMP_FOR' statement 'G' starts. 15155 15156 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 15157 tree_code cond) 15158 Set 'COND' to be the condition code for 'OMP_FOR' 'G'. 15159 15160 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 15161 Return the condition code associated with 'OMP_FOR' 'G'. 15162 15163 15164 File: gccint.info, Node: 'GIMPLE_OMP_MASTER', Next: 'GIMPLE_OMP_ORDERED', Prev: 'GIMPLE_OMP_FOR', Up: Tuple specific accessors 15165 15166 12.7.16 'GIMPLE_OMP_MASTER' 15167 --------------------------- 15168 15169 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 15170 Build a 'GIMPLE_OMP_MASTER' statement. 'BODY' is the sequence of 15171 statements to be executed by just the master. 15172 15173 15174 File: gccint.info, Node: 'GIMPLE_OMP_ORDERED', Next: 'GIMPLE_OMP_PARALLEL', Prev: 'GIMPLE_OMP_MASTER', Up: Tuple specific accessors 15175 15176 12.7.17 'GIMPLE_OMP_ORDERED' 15177 ---------------------------- 15178 15179 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 15180 Build a 'GIMPLE_OMP_ORDERED' statement. 15181 15182 'BODY' is the sequence of statements inside a loop that will executed 15183 in sequence. 15184 15185 15186 File: gccint.info, Node: 'GIMPLE_OMP_PARALLEL', Next: 'GIMPLE_OMP_RETURN', Prev: 'GIMPLE_OMP_ORDERED', Up: Tuple specific accessors 15187 15188 12.7.18 'GIMPLE_OMP_PARALLEL' 15189 ----------------------------- 15190 15191 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body, 15192 tree clauses, tree child_fn, tree data_arg) 15193 Build a 'GIMPLE_OMP_PARALLEL' statement. 15194 15195 'BODY' is sequence of statements which are executed in parallel. 15196 'CLAUSES', are the 'OMP' parallel construct's clauses. 'CHILD_FN' is 15197 the function created for the parallel threads to execute. 'DATA_ARG' 15198 are the shared data argument(s). 15199 15200 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 15201 Return true if 'OMP' parallel statement 'G' has the 15202 'GF_OMP_PARALLEL_COMBINED' flag set. 15203 15204 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 15205 Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel 15206 statement 'G'. 15207 15208 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 15209 Return the body for the 'OMP' statement 'G'. 15210 15211 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 15212 body) 15213 Set 'BODY' to be the body for the 'OMP' statement 'G'. 15214 15215 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 15216 Return the clauses associated with 'OMP_PARALLEL' 'G'. 15217 15218 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (gimple g) 15219 Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'. 15220 15221 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g, 15222 tree clauses) 15223 Set 'CLAUSES' to be the list of clauses associated with 15224 'OMP_PARALLEL' 'G'. 15225 15226 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g) 15227 Return the child function used to hold the body of 'OMP_PARALLEL' 15228 'G'. 15229 15230 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple g) 15231 Return a pointer to the child function used to hold the body of 15232 'OMP_PARALLEL' 'G'. 15233 15234 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g, 15235 tree child_fn) 15236 Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'. 15237 15238 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g) 15239 Return the artificial argument used to send variables and values 15240 from the parent to the children threads in 'OMP_PARALLEL' 'G'. 15241 15242 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (gimple g) 15243 Return a pointer to the data argument for 'OMP_PARALLEL' 'G'. 15244 15245 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g, 15246 tree data_arg) 15247 Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'. 15248 15249 -- GIMPLE function: bool is_gimple_omp (gimple stmt) 15250 Returns true when the gimple statement 'STMT' is any of the OpenMP 15251 types. 15252 15253 15254 File: gccint.info, Node: 'GIMPLE_OMP_RETURN', Next: 'GIMPLE_OMP_SECTION', Prev: 'GIMPLE_OMP_PARALLEL', Up: Tuple specific accessors 15255 15256 12.7.19 'GIMPLE_OMP_RETURN' 15257 --------------------------- 15258 15259 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 15260 Build a 'GIMPLE_OMP_RETURN' statement. 'WAIT_P' is true if this is 15261 a non-waiting return. 15262 15263 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 15264 Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'. 15265 15266 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 15267 Return true if 'OMP' return statement 'G' has the 15268 'GF_OMP_RETURN_NOWAIT' flag set. 15269 15270 15271 File: gccint.info, Node: 'GIMPLE_OMP_SECTION', Next: 'GIMPLE_OMP_SECTIONS', Prev: 'GIMPLE_OMP_RETURN', Up: Tuple specific accessors 15272 15273 12.7.20 'GIMPLE_OMP_SECTION' 15274 ---------------------------- 15275 15276 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 15277 Build a 'GIMPLE_OMP_SECTION' statement for a sections statement. 15278 15279 'BODY' is the sequence of statements in the section. 15280 15281 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 15282 Return true if 'OMP' section statement 'G' has the 15283 'GF_OMP_SECTION_LAST' flag set. 15284 15285 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 15286 Set the 'GF_OMP_SECTION_LAST' flag on 'G'. 15287 15288 15289 File: gccint.info, Node: 'GIMPLE_OMP_SECTIONS', Next: 'GIMPLE_OMP_SINGLE', Prev: 'GIMPLE_OMP_SECTION', Up: Tuple specific accessors 15290 15291 12.7.21 'GIMPLE_OMP_SECTIONS' 15292 ----------------------------- 15293 15294 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body, 15295 tree clauses) 15296 Build a 'GIMPLE_OMP_SECTIONS' statement. 'BODY' is a sequence of 15297 section statements. 'CLAUSES' are any of the 'OMP' sections 15298 construct's clauses: private, firstprivate, lastprivate, reduction, 15299 and nowait. 15300 15301 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 15302 Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement. 15303 15304 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 15305 Return the control variable associated with the 15306 'GIMPLE_OMP_SECTIONS' in 'G'. 15307 15308 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g) 15309 Return a pointer to the clauses associated with the 15310 'GIMPLE_OMP_SECTIONS' in 'G'. 15311 15312 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 15313 tree control) 15314 Set 'CONTROL' to be the set of clauses associated with the 15315 'GIMPLE_OMP_SECTIONS' in 'G'. 15316 15317 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 15318 Return the clauses associated with 'OMP_SECTIONS' 'G'. 15319 15320 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g) 15321 Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'. 15322 15323 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 15324 tree clauses) 15325 Set 'CLAUSES' to be the set of clauses associated with 15326 'OMP_SECTIONS' 'G'. 15327 15328 15329 File: gccint.info, Node: 'GIMPLE_OMP_SINGLE', Next: 'GIMPLE_PHI', Prev: 'GIMPLE_OMP_SECTIONS', Up: Tuple specific accessors 15330 15331 12.7.22 'GIMPLE_OMP_SINGLE' 15332 --------------------------- 15333 15334 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body, 15335 tree clauses) 15336 Build a 'GIMPLE_OMP_SINGLE' statement. 'BODY' is the sequence of 15337 statements that will be executed once. 'CLAUSES' are any of the 15338 'OMP' single construct's clauses: private, firstprivate, 15339 copyprivate, nowait. 15340 15341 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 15342 Return the clauses associated with 'OMP_SINGLE' 'G'. 15343 15344 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g) 15345 Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'. 15346 15347 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree 15348 clauses) 15349 Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'. 15350 15351 15352 File: gccint.info, Node: 'GIMPLE_PHI', Next: 'GIMPLE_RESX', Prev: 'GIMPLE_OMP_SINGLE', Up: Tuple specific accessors 15353 15354 12.7.23 'GIMPLE_PHI' 15355 -------------------- 15356 15357 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 15358 Return the maximum number of arguments supported by 'GIMPLE_PHI' 15359 'G'. 15360 15361 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 15362 Return the number of arguments in 'GIMPLE_PHI' 'G'. This must 15363 always be exactly the number of incoming edges for the basic block 15364 holding 'G'. 15365 15366 -- GIMPLE function: tree gimple_phi_result (gimple g) 15367 Return the 'SSA' name created by 'GIMPLE_PHI' 'G'. 15368 15369 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g) 15370 Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'. 15371 15372 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result) 15373 Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'. 15374 15375 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index) 15376 Return the 'PHI' argument corresponding to incoming edge 'INDEX' 15377 for 'GIMPLE_PHI' 'G'. 15378 15379 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct 15380 phi_arg_d * phiarg) 15381 Set 'PHIARG' to be the argument corresponding to incoming edge 15382 'INDEX' for 'GIMPLE_PHI' 'G'. 15383 15384 15385 File: gccint.info, Node: 'GIMPLE_RESX', Next: 'GIMPLE_RETURN', Prev: 'GIMPLE_PHI', Up: Tuple specific accessors 15386 15387 12.7.24 'GIMPLE_RESX' 15388 --------------------- 15389 15390 -- GIMPLE function: gimple gimple_build_resx (int region) 15391 Build a 'GIMPLE_RESX' statement which is a statement. This 15392 statement is a placeholder for _Unwind_Resume before we know if a 15393 function call or a branch is needed. 'REGION' is the exception 15394 region from which control is flowing. 15395 15396 -- GIMPLE function: int gimple_resx_region (gimple g) 15397 Return the region number for 'GIMPLE_RESX' 'G'. 15398 15399 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region) 15400 Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'. 15401 15402 15403 File: gccint.info, Node: 'GIMPLE_RETURN', Next: 'GIMPLE_SWITCH', Prev: 'GIMPLE_RESX', Up: Tuple specific accessors 15404 15405 12.7.25 'GIMPLE_RETURN' 15406 ----------------------- 15407 15408 -- GIMPLE function: gimple gimple_build_return (tree retval) 15409 Build a 'GIMPLE_RETURN' statement whose return value is retval. 15410 15411 -- GIMPLE function: tree gimple_return_retval (gimple g) 15412 Return the return value for 'GIMPLE_RETURN' 'G'. 15413 15414 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree 15415 retval) 15416 Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'. 15417 15418 15419 File: gccint.info, Node: 'GIMPLE_SWITCH', Next: 'GIMPLE_TRY', Prev: 'GIMPLE_RETURN', Up: Tuple specific accessors 15420 15421 12.7.26 'GIMPLE_SWITCH' 15422 ----------------------- 15423 15424 -- GIMPLE function: gimple gimple_build_switch (tree index, tree 15425 default_label, 'VEC'(tree,heap) *args) 15426 Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable 15427 to switch on, and 'DEFAULT_LABEL' represents the default label. 15428 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the 15429 non-default case labels. Each label is a tree of code 15430 'CASE_LABEL_EXPR'. 15431 15432 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g) 15433 Return the number of labels associated with the switch statement 15434 'G'. 15435 15436 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g, 15437 unsigned nlabels) 15438 Set 'NLABELS' to be the number of labels for the switch statement 15439 'G'. 15440 15441 -- GIMPLE function: tree gimple_switch_index (gimple g) 15442 Return the index variable used by the switch statement 'G'. 15443 15444 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index) 15445 Set 'INDEX' to be the index variable for switch statement 'G'. 15446 15447 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index) 15448 Return the label numbered 'INDEX'. The default label is 0, 15449 followed by any labels in a switch statement. 15450 15451 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned 15452 index, tree label) 15453 Set the label number 'INDEX' to 'LABEL'. 0 is always the default 15454 label. 15455 15456 -- GIMPLE function: tree gimple_switch_default_label (gimple g) 15457 Return the default label for a switch statement. 15458 15459 -- GIMPLE function: void gimple_switch_set_default_label (gimple g, 15460 tree label) 15461 Set the default label for a switch statement. 15462 15463 15464 File: gccint.info, Node: 'GIMPLE_TRY', Next: 'GIMPLE_WITH_CLEANUP_EXPR', Prev: 'GIMPLE_SWITCH', Up: Tuple specific accessors 15465 15466 12.7.27 'GIMPLE_TRY' 15467 -------------------- 15468 15469 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval, 15470 gimple_seq cleanup, unsigned int kind) 15471 Build a 'GIMPLE_TRY' statement. 'EVAL' is a sequence with the 15472 expression to evaluate. 'CLEANUP' is a sequence of statements to 15473 run at clean-up time. 'KIND' is the enumeration value 15474 'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 15475 or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 15476 construct. 15477 15478 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 15479 Return the kind of try block represented by 'GIMPLE_TRY' 'G'. This 15480 is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'. 15481 15482 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 15483 Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15484 15485 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 15486 Return the sequence of statements used as the body for 'GIMPLE_TRY' 15487 'G'. 15488 15489 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 15490 Return the sequence of statements used as the cleanup body for 15491 'GIMPLE_TRY' 'G'. 15492 15493 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 15494 bool catch_is_cleanup) 15495 Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15496 15497 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq 15498 eval) 15499 Set 'EVAL' to be the sequence of statements to use as the body for 15500 'GIMPLE_TRY' 'G'. 15501 15502 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq 15503 cleanup) 15504 Set 'CLEANUP' to be the sequence of statements to use as the 15505 cleanup body for 'GIMPLE_TRY' 'G'. 15506 15507 15508 File: gccint.info, Node: 'GIMPLE_WITH_CLEANUP_EXPR', Prev: 'GIMPLE_TRY', Up: Tuple specific accessors 15509 15510 12.7.28 'GIMPLE_WITH_CLEANUP_EXPR' 15511 ---------------------------------- 15512 15513 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 15514 Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement. 'CLEANUP' is the 15515 clean-up expression. 15516 15517 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 15518 Return the cleanup sequence for cleanup statement 'G'. 15519 15520 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 15521 cleanup) 15522 Set 'CLEANUP' to be the cleanup sequence for 'G'. 15523 15524 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 15525 Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 15526 15527 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool 15528 eh_only_p) 15529 Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 15530 15531 15532 File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 15533 15534 12.8 GIMPLE sequences 15535 ===================== 15536 15537 GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in 15538 'GENERIC'. They are used to chain statements together, and when used in 15539 conjunction with sequence iterators, provide a framework for iterating 15540 through statements. 15541 15542 GIMPLE sequences are of type struct 'gimple_sequence', but are more 15543 commonly passed by reference to functions dealing with sequences. The 15544 type for a sequence pointer is 'gimple_seq' which is the same as struct 15545 'gimple_sequence' *. When declaring a local sequence, you can define a 15546 local variable of type struct 'gimple_sequence'. When declaring a 15547 sequence allocated on the garbage collected heap, use the function 15548 'gimple_seq_alloc' documented below. 15549 15550 There are convenience functions for iterating through sequences in the 15551 section entitled Sequence Iterators. 15552 15553 Below is a list of functions to manipulate and query sequences. 15554 15555 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 15556 g) 15557 Link a gimple statement to the end of the sequence *'SEQ' if 'G' is 15558 not 'NULL'. If *'SEQ' is 'NULL', allocate a sequence before 15559 linking. 15560 15561 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 15562 gimple_seq src) 15563 Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is 15564 not 'NULL'. If *'DEST' is 'NULL', allocate a new sequence before 15565 appending. 15566 15567 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 15568 Perform a deep copy of sequence 'SRC' and return the result. 15569 15570 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 15571 Reverse the order of the statements in the sequence 'SEQ'. Return 15572 'SEQ'. 15573 15574 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 15575 Return the first statement in sequence 'S'. 15576 15577 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 15578 Return the last statement in sequence 'S'. 15579 15580 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 15581 last) 15582 Set the last statement in sequence 'S' to the statement in 'LAST'. 15583 15584 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 15585 first) 15586 Set the first statement in sequence 'S' to the statement in 15587 'FIRST'. 15588 15589 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 15590 Initialize sequence 'S' to an empty sequence. 15591 15592 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 15593 Allocate a new sequence in the garbage collected store and return 15594 it. 15595 15596 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 15597 src) 15598 Copy the sequence 'SRC' into the sequence 'DEST'. 15599 15600 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 15601 Return true if the sequence 'S' is empty. 15602 15603 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 15604 Returns the sequence of statements in 'BB'. 15605 15606 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 15607 Sets the sequence of statements in 'BB' to 'SEQ'. 15608 15609 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 15610 Determine whether 'SEQ' contains exactly one statement. 15611 15612 15613 File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 15614 15615 12.9 Sequence iterators 15616 ======================= 15617 15618 Sequence iterators are convenience constructs for iterating through 15619 statements in a sequence. Given a sequence 'SEQ', here is a typical use 15620 of gimple sequence iterators: 15621 15622 gimple_stmt_iterator gsi; 15623 15624 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 15625 { 15626 gimple g = gsi_stmt (gsi); 15627 /* Do something with gimple statement G. */ 15628 } 15629 15630 Backward iterations are possible: 15631 15632 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 15633 15634 Forward and backward iterations on basic blocks are possible with 15635 'gsi_start_bb' and 'gsi_last_bb'. 15636 15637 In the documentation below we sometimes refer to enum 15638 'gsi_iterator_update'. The valid options for this enumeration are: 15639 15640 * 'GSI_NEW_STMT' Only valid when a single statement is added. Move 15641 the iterator to it. 15642 15643 * 'GSI_SAME_STMT' Leave the iterator at the same statement. 15644 15645 * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is 15646 suitable for linking other statements in the same direction. 15647 15648 Below is a list of the functions used to manipulate and use statement 15649 iterators. 15650 15651 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 15652 Return a new iterator pointing to the sequence 'SEQ''s first 15653 statement. If 'SEQ' is empty, the iterator's basic block is 15654 'NULL'. Use 'gsi_start_bb' instead when the iterator needs to 15655 always have the correct basic block set. 15656 15657 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 15658 Return a new iterator pointing to the first statement in basic 15659 block 'BB'. 15660 15661 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 15662 Return a new iterator initially pointing to the last statement of 15663 sequence 'SEQ'. If 'SEQ' is empty, the iterator's basic block is 15664 'NULL'. Use 'gsi_last_bb' instead when the iterator needs to 15665 always have the correct basic block set. 15666 15667 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 15668 Return a new iterator pointing to the last statement in basic block 15669 'BB'. 15670 15671 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 15672 Return 'TRUE' if at the end of 'I'. 15673 15674 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 15675 Return 'TRUE' if we're one statement before the end of 'I'. 15676 15677 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 15678 Advance the iterator to the next gimple statement. 15679 15680 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 15681 Advance the iterator to the previous gimple statement. 15682 15683 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 15684 Return the current stmt. 15685 15686 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 15687 bb) 15688 Return a block statement iterator that points to the first 15689 non-label statement in block 'BB'. 15690 15691 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i) 15692 Return a pointer to the current stmt. 15693 15694 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 15695 Return the basic block associated with this iterator. 15696 15697 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 15698 Return the sequence associated with this iterator. 15699 15700 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 15701 remove_eh_info) 15702 Remove the current stmt from the sequence. The iterator is updated 15703 to point to the next statement. When 'REMOVE_EH_INFO' is true we 15704 remove the statement pointed to by iterator 'I' from the 'EH' 15705 tables. Otherwise we do not modify the 'EH' tables. Generally, 15706 'REMOVE_EH_INFO' should be true when the statement is going to be 15707 removed from the 'IL' and not reinserted elsewhere. 15708 15709 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 15710 gimple_seq seq, enum gsi_iterator_update mode) 15711 Links the sequence of statements 'SEQ' before the statement pointed 15712 by iterator 'I'. 'MODE' indicates what to do with the iterator 15713 after insertion (see 'enum gsi_iterator_update' above). 15714 15715 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 15716 gimple g, enum gsi_iterator_update mode) 15717 Links statement 'G' before the statement pointed-to by iterator 15718 'I'. Updates iterator 'I' according to 'MODE'. 15719 15720 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 15721 gimple_seq seq, enum gsi_iterator_update mode) 15722 Links sequence 'SEQ' after the statement pointed-to by iterator 15723 'I'. 'MODE' is as in 'gsi_insert_after'. 15724 15725 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 15726 gimple g, enum gsi_iterator_update mode) 15727 Links statement 'G' after the statement pointed-to by iterator 'I'. 15728 'MODE' is as in 'gsi_insert_after'. 15729 15730 -- GIMPLE function: gimple_seq gsi_split_seq_after 15731 (gimple_stmt_iterator i) 15732 Move all statements in the sequence after 'I' to a new sequence. 15733 Return this new sequence. 15734 15735 -- GIMPLE function: gimple_seq gsi_split_seq_before 15736 (gimple_stmt_iterator *i) 15737 Move all statements in the sequence before 'I' to a new sequence. 15738 Return this new sequence. 15739 15740 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 15741 stmt, bool update_eh_info) 15742 Replace the statement pointed-to by 'I' to 'STMT'. If 15743 'UPDATE_EH_INFO' is true, the exception handling information of the 15744 original statement is moved to the new statement. 15745 15746 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 15747 gimple stmt, enum gsi_iterator_update mode) 15748 Insert statement 'STMT' before the statement pointed-to by iterator 15749 'I', update 'STMT''s basic block and scan it for new operands. 15750 'MODE' specifies how to update iterator 'I' after insertion (see 15751 enum 'gsi_iterator_update'). 15752 15753 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 15754 *i, gimple_seq seq, enum gsi_iterator_update mode) 15755 Like 'gsi_insert_before', but for all the statements in 'SEQ'. 15756 15757 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 15758 gimple stmt, enum gsi_iterator_update mode) 15759 Insert statement 'STMT' after the statement pointed-to by iterator 15760 'I', update 'STMT''s basic block and scan it for new operands. 15761 'MODE' specifies how to update iterator 'I' after insertion (see 15762 enum 'gsi_iterator_update'). 15763 15764 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i, 15765 gimple_seq seq, enum gsi_iterator_update mode) 15766 Like 'gsi_insert_after', but for all the statements in 'SEQ'. 15767 15768 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 15769 Finds iterator for 'STMT'. 15770 15771 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 15772 gimple_stmt_iterator *to) 15773 Move the statement at 'FROM' so it comes right after the statement 15774 at 'TO'. 15775 15776 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 15777 gimple_stmt_iterator *to) 15778 Move the statement at 'FROM' so it comes right before the statement 15779 at 'TO'. 15780 15781 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 15782 *from, basic_block bb) 15783 Move the statement at 'FROM' to the end of basic block 'BB'. 15784 15785 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 15786 Add 'STMT' to the pending list of edge 'E'. No actual insertion is 15787 made until a call to 'gsi_commit_edge_inserts'() is made. 15788 15789 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 15790 seq) 15791 Add the sequence of statements in 'SEQ' to the pending list of edge 15792 'E'. No actual insertion is made until a call to 15793 'gsi_commit_edge_inserts'() is made. 15794 15795 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 15796 gimple stmt) 15797 Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'. If a 15798 new block has to be created, it is returned. 15799 15800 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 15801 basic_block *new_bb) 15802 Commit insertions pending at edge 'E'. If a new block is created, 15803 set 'NEW_BB' to this block, otherwise set it to 'NULL'. 15804 15805 -- GIMPLE function: void gsi_commit_edge_inserts (void) 15806 This routine will commit all pending edge insertions, creating any 15807 new basic blocks which are necessary. 15808 15809 15810 File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 15811 15812 12.10 Adding a new GIMPLE statement code 15813 ======================================== 15814 15815 The first step in adding a new GIMPLE statement code, is modifying the 15816 file 'gimple.def', which contains all the GIMPLE codes. Then you must 15817 add a corresponding structure, and an entry in 'union 15818 gimple_statement_d', both of which are located in 'gimple.h'. This in 15819 turn, will require you to add a corresponding 'GTY' tag in 15820 'gsstruct.def', and code to handle this tag in 'gss_for_code' which is 15821 located in 'gimple.c'. 15822 15823 In order for the garbage collector to know the size of the structure 15824 you created in 'gimple.h', you need to add a case to handle your new 15825 GIMPLE statement in 'gimple_size' which is located in 'gimple.c'. 15826 15827 You will probably want to create a function to build the new gimple 15828 statement in 'gimple.c'. The function should be called 15829 'gimple_build_NEW-TUPLE-NAME', and should return the new tuple of type 15830 gimple. 15831 15832 If your new statement requires accessors for any members or operands it 15833 may have, put simple inline accessors in 'gimple.h' and any non-trivial 15834 accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'. 15835 15836 15837 File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 15838 15839 12.11 Statement and operand traversals 15840 ====================================== 15841 15842 There are two functions available for walking statements and sequences: 15843 'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third 15844 function for walking the operands in a statement: 'walk_gimple_op'. 15845 15846 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 15847 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 15848 walk_stmt_info *wi) 15849 This function is used to walk the current statement in 'GSI', 15850 optionally using traversal state stored in 'WI'. If 'WI' is 15851 'NULL', no state is kept during the traversal. 15852 15853 The callback 'CALLBACK_STMT' is called. If 'CALLBACK_STMT' returns 15854 true, it means that the callback function has handled all the 15855 operands of the statement and it is not necessary to walk its 15856 operands. 15857 15858 If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is 15859 called on each operand of the statement via 'walk_gimple_op'. If 15860 'walk_gimple_op' returns non-'NULL' for any operand, the remaining 15861 operands are not scanned. 15862 15863 The return value is that returned by the last call to 15864 'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified. 15865 15866 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 15867 callback_op, struct walk_stmt_info *wi) 15868 Use this function to walk the operands of statement 'STMT'. Every 15869 operand is walked via 'walk_tree' with optional state information 15870 in 'WI'. 15871 15872 'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'. 15873 Additional parameters to 'walk_tree' must be stored in 'WI'. For 15874 each operand 'OP', 'walk_tree' is called as: 15875 15876 walk_tree (&OP, CALLBACK_OP, WI, PSET) 15877 15878 If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining 15879 operands are not scanned. The return value is that returned by the 15880 last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is 15881 specified. 15882 15883 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 15884 callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info 15885 *wi) 15886 This function walks all the statements in the sequence 'SEQ' 15887 calling 'walk_gimple_stmt' on each one. 'WI' is as in 15888 'walk_gimple_stmt'. If 'walk_gimple_stmt' returns non-'NULL', the 15889 walk is stopped and the value returned. Otherwise, all the 15890 statements are walked and 'NULL_TREE' returned. 15891 15892 15893 File: gccint.info, Node: Tree SSA, Next: Loop Analysis and Representation, Prev: GIMPLE, Up: Top 15894 15895 13 Analysis and Optimization of GIMPLE tuples 15896 ********************************************* 15897 15898 GCC uses three main intermediate languages to represent the program 15899 during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 15900 language-independent representation generated by each front end. It is 15901 used to serve as an interface between the parser and optimizer. GENERIC 15902 is a common representation that is able to represent programs written in 15903 all the languages supported by GCC. 15904 15905 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 15906 target and language independent optimizations (e.g., inlining, constant 15907 propagation, tail call elimination, redundancy elimination, etc). Much 15908 like GENERIC, GIMPLE is a language independent, tree based 15909 representation. However, it differs from GENERIC in that the GIMPLE 15910 grammar is more restrictive: expressions contain no more than 3 operands 15911 (except function calls), it has no control flow structures and 15912 expressions with side-effects are only allowed on the right hand side of 15913 assignments. See the chapter describing GENERIC and GIMPLE for more 15914 details. 15915 15916 This chapter describes the data structures and functions used in the 15917 GIMPLE optimizers (also known as "tree optimizers" or "middle end"). In 15918 particular, it focuses on all the macros, data structures, functions and 15919 programming constructs needed to implement optimization passes for 15920 GIMPLE. 15921 15922 * Menu: 15923 15924 * Annotations:: Attributes for variables. 15925 * SSA Operands:: SSA names referenced by GIMPLE statements. 15926 * SSA:: Static Single Assignment representation. 15927 * Alias analysis:: Representing aliased loads and stores. 15928 * Memory model:: Memory model used by the middle-end. 15929 15930 15931 File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 15932 15933 13.1 Annotations 15934 ================ 15935 15936 The optimizers need to associate attributes with variables during the 15937 optimization process. For instance, we need to know whether a variable 15938 has aliases. All these attributes are stored in data structures called 15939 annotations which are then linked to the field 'ann' in 'struct 15940 tree_common'. 15941 15942 Presently, we define annotations for variables ('var_ann_t'). 15943 Annotations are defined and documented in 'tree-flow.h'. 15944 15945 15946 File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 15947 15948 13.2 SSA Operands 15949 ================= 15950 15951 Almost every GIMPLE statement will contain a reference to a variable or 15952 memory location. Since statements come in different shapes and sizes, 15953 their operands are going to be located at various spots inside the 15954 statement's tree. To facilitate access to the statement's operands, 15955 they are organized into lists associated inside each statement's 15956 annotation. Each element in an operand list is a pointer to a 15957 'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node. This provides a very 15958 convenient way of examining and replacing operands. 15959 15960 Data flow analysis and optimization is done on all tree nodes 15961 representing variables. Any node for which 'SSA_VAR_P' returns nonzero 15962 is considered when scanning statement operands. However, not all 15963 'SSA_VAR_P' variables are processed in the same way. For the purposes 15964 of optimization, we need to distinguish between references to local 15965 scalar variables and references to globals, statics, structures, arrays, 15966 aliased variables, etc. The reason is simple, the compiler can gather 15967 complete data flow information for a local scalar. On the other hand, a 15968 global variable may be modified by a function call, it may not be 15969 possible to keep track of all the elements of an array or the fields of 15970 a structure, etc. 15971 15972 The operand scanner gathers two kinds of operands: "real" and 15973 "virtual". An operand for which 'is_gimple_reg' returns true is 15974 considered real, otherwise it is a virtual operand. We also distinguish 15975 between uses and definitions. An operand is used if its value is loaded 15976 by the statement (e.g., the operand at the RHS of an assignment). If 15977 the statement assigns a new value to the operand, the operand is 15978 considered a definition (e.g., the operand at the LHS of an assignment). 15979 15980 Virtual and real operands also have very different data flow 15981 properties. Real operands are unambiguous references to the full object 15982 that they represent. For instance, given 15983 15984 { 15985 int a, b; 15986 a = b 15987 } 15988 15989 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will 15990 have one real definition and one real use because variable 'a' is 15991 completely modified with the contents of variable 'b'. Real definition 15992 are also known as "killing definitions". Similarly, the use of 'b' 15993 reads all its bits. 15994 15995 In contrast, virtual operands are used with variables that can have a 15996 partial or ambiguous reference. This includes structures, arrays, 15997 globals, and aliased variables. In these cases, we have two types of 15998 definitions. For globals, structures, and arrays, we can determine from 15999 a statement whether a variable of these types has a killing definition. 16000 If the variable does, then the statement is marked as having a "must 16001 definition" of that variable. However, if a statement is only defining 16002 a part of the variable (i.e. a field in a structure), or if we know that 16003 a statement might define the variable but we cannot say for sure, then 16004 we mark that statement as having a "may definition". For instance, 16005 given 16006 16007 { 16008 int a, b, *p; 16009 16010 if (...) 16011 p = &a; 16012 else 16013 p = &b; 16014 *p = 5; 16015 return *p; 16016 } 16017 16018 The assignment '*p = 5' may be a definition of 'a' or 'b'. If we 16019 cannot determine statically where 'p' is pointing to at the time of the 16020 store operation, we create virtual definitions to mark that statement as 16021 a potential definition site for 'a' and 'b'. Memory loads are similarly 16022 marked with virtual use operands. Virtual operands are shown in tree 16023 dumps right before the statement that contains them. To request a tree 16024 dump with virtual operands, use the '-vops' option to '-fdump-tree': 16025 16026 { 16027 int a, b, *p; 16028 16029 if (...) 16030 p = &a; 16031 else 16032 p = &b; 16033 # a = VDEF <a> 16034 # b = VDEF <b> 16035 *p = 5; 16036 16037 # VUSE <a> 16038 # VUSE <b> 16039 return *p; 16040 } 16041 16042 Notice that 'VDEF' operands have two copies of the referenced variable. 16043 This indicates that this is not a killing definition of that variable. 16044 In this case we refer to it as a "may definition" or "aliased store". 16045 The presence of the second copy of the variable in the 'VDEF' operand 16046 will become important when the function is converted into SSA form. 16047 This will be used to link all the non-killing definitions to prevent 16048 optimizations from making incorrect assumptions about them. 16049 16050 Operands are updated as soon as the statement is finished via a call to 16051 'update_stmt'. If statement elements are changed via 'SET_USE' or 16052 'SET_DEF', then no further action is required (i.e., those macros take 16053 care of updating the statement). If changes are made by manipulating 16054 the statement's tree directly, then a call must be made to 'update_stmt' 16055 when complete. Calling one of the 'bsi_insert' routines or 16056 'bsi_replace' performs an implicit call to 'update_stmt'. 16057 16058 13.2.1 Operand Iterators And Access Routines 16059 -------------------------------------------- 16060 16061 Operands are collected by 'tree-ssa-operands.c'. They are stored inside 16062 each statement's annotation and can be accessed through either the 16063 operand iterators or an access routine. 16064 16065 The following access routines are available for examining operands: 16066 16067 1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 16068 NULL unless there is exactly one operand matching the specified 16069 flags. If there is exactly one operand, the operand is returned as 16070 either a 'tree', 'def_operand_p', or 'use_operand_p'. 16071 16072 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 16073 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 16074 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 16075 16076 2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no 16077 operands matching the specified flags. 16078 16079 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 16080 return; 16081 16082 3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands 16083 matching 'flags'. This actually executes a loop to perform the 16084 count, so only use this if it is really needed. 16085 16086 int count = NUM_SSA_OPERANDS (stmt, flags) 16087 16088 If you wish to iterate over some or all operands, use the 16089 'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 16090 all the operands for a statement: 16091 16092 void 16093 print_ops (tree stmt) 16094 { 16095 ssa_op_iter; 16096 tree var; 16097 16098 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 16099 print_generic_expr (stderr, var, TDF_SLIM); 16100 } 16101 16102 How to choose the appropriate iterator: 16103 16104 1. Determine whether you are need to see the operand pointers, or just 16105 the trees, and choose the appropriate macro: 16106 16107 Need Macro: 16108 ---- ------- 16109 use_operand_p FOR_EACH_SSA_USE_OPERAND 16110 def_operand_p FOR_EACH_SSA_DEF_OPERAND 16111 tree FOR_EACH_SSA_TREE_OPERAND 16112 16113 2. You need to declare a variable of the type you are interested in, 16114 and an ssa_op_iter structure which serves as the loop controlling 16115 variable. 16116 16117 3. Determine which operands you wish to use, and specify the flags of 16118 those you are interested in. They are documented in 16119 'tree-ssa-operands.h': 16120 16121 #define SSA_OP_USE 0x01 /* Real USE operands. */ 16122 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 16123 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 16124 #define SSA_OP_VMAYUSE 0x08 /* USE portion of VDEFS. */ 16125 #define SSA_OP_VDEF 0x10 /* DEF portion of VDEFS. */ 16126 16127 /* These are commonly grouped operand flags. */ 16128 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) 16129 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 16130 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 16131 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 16132 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 16133 16134 So if you want to look at the use pointers for all the 'USE' and 'VUSE' 16135 operands, you would do something like: 16136 16137 use_operand_p use_p; 16138 ssa_op_iter iter; 16139 16140 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 16141 { 16142 process_use_ptr (use_p); 16143 } 16144 16145 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros, 16146 only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and 16147 'DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use and 16148 defs flags can be mixed. 16149 16150 tree var; 16151 ssa_op_iter iter; 16152 16153 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 16154 { 16155 print_generic_expr (stderr, var, TDF_SLIM); 16156 } 16157 16158 'VDEF's are broken into two flags, one for the 'DEF' portion 16159 ('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VMAYUSE'). If all 16160 you want to look at are the 'VDEF's together, there is a fourth iterator 16161 macro for this, which returns both a def_operand_p and a use_operand_p 16162 for each 'VDEF' in the statement. Note that you don't need any flags 16163 for this one. 16164 16165 use_operand_p use_p; 16166 def_operand_p def_p; 16167 ssa_op_iter iter; 16168 16169 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) 16170 { 16171 my_code; 16172 } 16173 16174 There are many examples in the code as well, as well as the 16175 documentation in 'tree-ssa-operands.h'. 16176 16177 There are also a couple of variants on the stmt iterators regarding PHI 16178 nodes. 16179 16180 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND', 16181 except it works over 'PHI' arguments instead of statement operands. 16182 16183 /* Look at every virtual PHI use. */ 16184 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 16185 { 16186 my_code; 16187 } 16188 16189 /* Look at every real PHI use. */ 16190 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 16191 my_code; 16192 16193 /* Look at every PHI use. */ 16194 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 16195 my_code; 16196 16197 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 16198 'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 16199 statement or a 'PHI' node. These should be used when it is appropriate 16200 but they are not quite as efficient as the individual 'FOR_EACH_PHI' and 16201 'FOR_EACH_SSA' routines. 16202 16203 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 16204 { 16205 my_code; 16206 } 16207 16208 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 16209 { 16210 my_code; 16211 } 16212 16213 13.2.2 Immediate Uses 16214 --------------------- 16215 16216 Immediate use information is now always available. Using the immediate 16217 use iterators, you may examine every use of any 'SSA_NAME'. For 16218 instance, to change each use of 'ssa_var' to 'ssa_var2' and call 16219 fold_stmt on each stmt after that is done: 16220 16221 use_operand_p imm_use_p; 16222 imm_use_iterator iterator; 16223 tree ssa_var, stmt; 16224 16225 16226 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 16227 { 16228 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 16229 SET_USE (imm_use_p, ssa_var_2); 16230 fold_stmt (stmt); 16231 } 16232 16233 There are 2 iterators which can be used. 'FOR_EACH_IMM_USE_FAST' is 16234 used when the immediate uses are not changed, i.e., you are looking at 16235 the uses, but not setting them. 16236 16237 If they do get changed, then care must be taken that things are not 16238 changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and 16239 'FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 16240 sanity of the use list by moving all the uses for a statement into a 16241 controlled position, and then iterating over those uses. Then the 16242 optimization can manipulate the stmt when all the uses have been 16243 processed. This is a little slower than the FAST version since it adds 16244 a placeholder element and must sort through the list a bit for each 16245 statement. This placeholder element must be also be removed if the loop 16246 is terminated early. The macro 'BREAK_FROM_IMM_USE_SAFE' is provided to 16247 do this : 16248 16249 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 16250 { 16251 if (stmt == last_stmt) 16252 BREAK_FROM_SAFE_IMM_USE (iter); 16253 16254 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 16255 SET_USE (imm_use_p, ssa_var_2); 16256 fold_stmt (stmt); 16257 } 16258 16259 There are checks in 'verify_ssa' which verify that the immediate use 16260 list is up to date, as well as checking that an optimization didn't 16261 break from the loop without using this macro. It is safe to simply 16262 'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse. 16263 16264 Some useful functions and macros: 16265 1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of 16266 'ssa_var'. 16267 2. 'has_single_use (ssa_var)' : Returns true if there is only a single 16268 use of 'ssa_var'. 16269 3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 16270 Returns true if there is only a single use of 'ssa_var', and also 16271 returns the use pointer and statement it occurs in, in the second 16272 and third parameters. 16273 4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of 16274 'ssa_var'. It is better not to use this if possible since it 16275 simply utilizes a loop to count the uses. 16276 5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node, 16277 return the index number for the use. An assert is triggered if the 16278 use isn't located in a 'PHI' node. 16279 6. 'USE_STMT (use_p)' : Return the statement a use occurs in. 16280 16281 Note that uses are not put into an immediate use list until their 16282 statement is actually inserted into the instruction stream via a 'bsi_*' 16283 routine. 16284 16285 It is also still possible to utilize lazy updating of statements, but 16286 this should be used only when absolutely required. Both alias analysis 16287 and the dominator optimizations currently do this. 16288 16289 When lazy updating is being used, the immediate use information is out 16290 of date and cannot be used reliably. Lazy updating is achieved by 16291 simply marking statements modified via calls to 'mark_stmt_modified' 16292 instead of 'update_stmt'. When lazy updating is no longer required, all 16293 the modified statements must have 'update_stmt' called in order to bring 16294 them up to date. This must be done before the optimization is finished, 16295 or 'verify_ssa' will trigger an abort. 16296 16297 This is done with a simple loop over the instruction stream: 16298 block_stmt_iterator bsi; 16299 basic_block bb; 16300 FOR_EACH_BB (bb) 16301 { 16302 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 16303 update_stmt_if_modified (bsi_stmt (bsi)); 16304 } 16305 16306 16307 File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 16308 16309 13.3 Static Single Assignment 16310 ============================= 16311 16312 Most of the tree optimizers rely on the data flow information provided 16313 by the Static Single Assignment (SSA) form. We implement the SSA form 16314 as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 16315 Zadeck. Efficiently Computing Static Single Assignment Form and the 16316 Control Dependence Graph. ACM Transactions on Programming Languages and 16317 Systems, 13(4):451-490, October 1991'. 16318 16319 The SSA form is based on the premise that program variables are 16320 assigned in exactly one location in the program. Multiple assignments 16321 to the same variable create new versions of that variable. Naturally, 16322 actual programs are seldom in SSA form initially because variables tend 16323 to be assigned multiple times. The compiler modifies the program 16324 representation so that every time a variable is assigned in the code, a 16325 new version of the variable is created. Different versions of the same 16326 variable are distinguished by subscripting the variable name with its 16327 version number. Variables used in the right-hand side of expressions 16328 are renamed so that their version number matches that of the most recent 16329 assignment. 16330 16331 We represent variable versions using 'SSA_NAME' nodes. The renaming 16332 process in 'tree-ssa.c' wraps every real and virtual operand with an 16333 'SSA_NAME' node which contains the version number and the statement that 16334 created the 'SSA_NAME'. Only definitions and virtual definitions may 16335 create new 'SSA_NAME' nodes. 16336 16337 Sometimes, flow of control makes it impossible to determine the most 16338 recent version of a variable. In these cases, the compiler inserts an 16339 artificial definition for that variable called "PHI function" or "PHI 16340 node". This new definition merges all the incoming versions of the 16341 variable to create a new name for it. For instance, 16342 16343 if (...) 16344 a_1 = 5; 16345 else if (...) 16346 a_2 = 2; 16347 else 16348 a_3 = 13; 16349 16350 # a_4 = PHI <a_1, a_2, a_3> 16351 return a_4; 16352 16353 Since it is not possible to determine which of the three branches will 16354 be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use 16355 at the return statement. So, the SSA renamer creates a new version 16356 'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'. 16357 Hence, PHI nodes mean "one of these operands. I don't know which". 16358 16359 The following macros can be used to examine PHI nodes 16360 16361 -- Macro: PHI_RESULT (PHI) 16362 Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 16363 16364 -- Macro: PHI_NUM_ARGS (PHI) 16365 Returns the number of arguments in PHI. This number is exactly the 16366 number of incoming edges to the basic block holding PHI. 16367 16368 -- Macro: PHI_ARG_ELT (PHI, I) 16369 Returns a tuple representing the Ith argument of PHI. Each element 16370 of this tuple contains an 'SSA_NAME' VAR and the incoming edge 16371 through which VAR flows. 16372 16373 -- Macro: PHI_ARG_EDGE (PHI, I) 16374 Returns the incoming edge for the Ith argument of PHI. 16375 16376 -- Macro: PHI_ARG_DEF (PHI, I) 16377 Returns the 'SSA_NAME' for the Ith argument of PHI. 16378 16379 13.3.1 Preserving the SSA form 16380 ------------------------------ 16381 16382 Some optimization passes make changes to the function that invalidate 16383 the SSA property. This can happen when a pass has added new symbols or 16384 changed the program so that variables that were previously aliased 16385 aren't anymore. Whenever something like this happens, the affected 16386 symbols must be renamed into SSA form again. Transformations that emit 16387 new code or replicate existing statements will also need to update the 16388 SSA form. 16389 16390 Since GCC implements two different SSA forms for register and virtual 16391 variables, keeping the SSA form up to date depends on whether you are 16392 updating register or virtual names. In both cases, the general idea 16393 behind incremental SSA updates is similar: when new SSA names are 16394 created, they typically are meant to replace other existing names in the 16395 program. 16396 16397 For instance, given the following code: 16398 16399 1 L0: 16400 2 x_1 = PHI (0, x_5) 16401 3 if (x_1 < 10) 16402 4 if (x_1 > 7) 16403 5 y_2 = 0 16404 6 else 16405 7 y_3 = x_1 + x_7 16406 8 endif 16407 9 x_5 = x_1 + 1 16408 10 goto L0; 16409 11 endif 16410 16411 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8'). 16412 16413 1 L0: 16414 2 x_1 = PHI (0, x_5) 16415 3 if (x_1 < 10) 16416 4 x_10 = ... 16417 5 if (x_1 > 7) 16418 6 y_2 = 0 16419 7 else 16420 8 x_11 = ... 16421 9 y_3 = x_1 + x_7 16422 10 endif 16423 11 x_5 = x_1 + 1 16424 12 goto L0; 16425 13 endif 16426 16427 We want to replace all the uses of 'x_1' with the new definitions of 16428 'x_10' and 'x_11'. Note that the only uses that should be replaced are 16429 those at lines '5', '9' and '11'. Also, the use of 'x_7' at line '9' 16430 should _not_ be replaced (this is why we cannot just mark symbol 'x' for 16431 renaming). 16432 16433 Additionally, we may need to insert a PHI node at line '11' because 16434 that is a merge point for 'x_10' and 'x_11'. So the use of 'x_1' at 16435 line '11' will be replaced with the new PHI node. The insertion of PHI 16436 nodes is optional. They are not strictly necessary to preserve the SSA 16437 form, and depending on what the caller inserted, they may not even be 16438 useful for the optimizers. 16439 16440 Updating the SSA form is a two step process. First, the pass has to 16441 identify which names need to be updated and/or which symbols need to be 16442 renamed into SSA form for the first time. When new names are introduced 16443 to replace existing names in the program, the mapping between the old 16444 and the new names are registered by calling 'register_new_name_mapping' 16445 (note that if your pass creates new code by duplicating basic blocks, 16446 the call to 'tree_duplicate_bb' will set up the necessary mappings 16447 automatically). 16448 16449 After the replacement mappings have been registered and new symbols 16450 marked for renaming, a call to 'update_ssa' makes the registered 16451 changes. This can be done with an explicit call or by creating 'TODO' 16452 flags in the 'tree_opt_pass' structure for your pass. There are several 16453 'TODO' flags that control the behavior of 'update_ssa': 16454 16455 * 'TODO_update_ssa'. Update the SSA form inserting PHI nodes for 16456 newly exposed symbols and virtual names marked for updating. When 16457 updating real names, only insert PHI nodes for a real name 'O_j' in 16458 blocks reached by all the new and old definitions for 'O_j'. If 16459 the iterated dominance frontier for 'O_j' is not pruned, we may end 16460 up inserting PHI nodes in blocks that have one or more edges with 16461 no incoming definition for 'O_j'. This would lead to uninitialized 16462 warnings for 'O_j''s symbol. 16463 16464 * 'TODO_update_ssa_no_phi'. Update the SSA form without inserting 16465 any new PHI nodes at all. This is used by passes that have either 16466 inserted all the PHI nodes themselves or passes that need only to 16467 patch use-def and def-def chains for virtuals (e.g., DCE). 16468 16469 * 'TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 16470 needed. No pruning of the IDF is done. This is used by passes 16471 that need the PHI nodes for 'O_j' even if it means that some 16472 arguments will come from the default definition of 'O_j''s symbol 16473 (e.g., 'pass_linear_transform'). 16474 16475 WARNING: If you need to use this flag, chances are that your pass 16476 may be doing something wrong. Inserting PHI nodes for an old name 16477 where not all edges carry a new replacement may lead to silent 16478 codegen errors or spurious uninitialized warnings. 16479 16480 * 'TODO_update_ssa_only_virtuals'. Passes that update the SSA form 16481 on their own may want to delegate the updating of virtual names to 16482 the generic updater. Since FUD chains are easier to maintain, this 16483 simplifies the work they need to do. NOTE: If this flag is used, 16484 any OLD->NEW mappings for real names are explicitly destroyed and 16485 only the symbols marked for renaming are processed. 16486 16487 13.3.2 Preserving the virtual SSA form 16488 -------------------------------------- 16489 16490 The virtual SSA form is harder to preserve than the non-virtual SSA form 16491 mainly because the set of virtual operands for a statement may change at 16492 what some would consider unexpected times. In general, statement 16493 modifications should be bracketed between calls to 'push_stmt_changes' 16494 and 'pop_stmt_changes'. For example, 16495 16496 munge_stmt (tree stmt) 16497 { 16498 push_stmt_changes (&stmt); 16499 ... rewrite STMT ... 16500 pop_stmt_changes (&stmt); 16501 } 16502 16503 The call to 'push_stmt_changes' saves the current state of the 16504 statement operands and the call to 'pop_stmt_changes' compares the saved 16505 state with the current one and does the appropriate symbol marking for 16506 the SSA renamer. 16507 16508 It is possible to modify several statements at a time, provided that 16509 'push_stmt_changes' and 'pop_stmt_changes' are called in LIFO order, as 16510 when processing a stack of statements. 16511 16512 Additionally, if the pass discovers that it did not need to make 16513 changes to the statement after calling 'push_stmt_changes', it can 16514 simply discard the topmost change buffer by calling 16515 'discard_stmt_changes'. This will avoid the expensive operand re-scan 16516 operation and the buffer comparison that determines if symbols need to 16517 be marked for renaming. 16518 16519 13.3.3 Examining 'SSA_NAME' nodes 16520 --------------------------------- 16521 16522 The following macros can be used to examine 'SSA_NAME' nodes 16523 16524 -- Macro: SSA_NAME_DEF_STMT (VAR) 16525 Returns the statement S that creates the 'SSA_NAME' VAR. If S is 16526 an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it 16527 means that the first reference to this variable is a USE or a VUSE. 16528 16529 -- Macro: SSA_NAME_VERSION (VAR) 16530 Returns the version number of the 'SSA_NAME' object VAR. 16531 16532 13.3.4 Walking use-def chains 16533 ----------------------------- 16534 16535 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA) 16536 16537 Walks use-def chains starting at the 'SSA_NAME' node VAR. Calls 16538 function FN at each reaching definition found. Function FN takes 16539 three arguments: VAR, its defining statement (DEF_STMT) and a 16540 generic pointer to whatever state information that FN may want to 16541 maintain (DATA). Function FN is able to stop the walk by returning 16542 'true', otherwise in order to continue the walk, FN should return 16543 'false'. 16544 16545 Note, that if DEF_STMT is a 'PHI' node, the semantics are slightly 16546 different. For each argument ARG of the PHI node, this function 16547 will: 16548 16549 1. Walk the use-def chains for ARG. 16550 2. Call 'FN (ARG, PHI, DATA)'. 16551 16552 Note how the first argument to FN is no longer the original 16553 variable VAR, but the PHI argument currently being examined. If FN 16554 wants to get at VAR, it should call 'PHI_RESULT' (PHI). 16555 16556 13.3.5 Walking the dominator tree 16557 --------------------------------- 16558 16559 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 16560 16561 This function walks the dominator tree for the current CFG calling 16562 a set of callback functions defined in STRUCT DOM_WALK_DATA in 16563 'domwalk.h'. The call back functions you need to define give you 16564 hooks to execute custom code at various points during traversal: 16565 16566 1. Once to initialize any local data needed while processing BB 16567 and its children. This local data is pushed into an internal 16568 stack which is automatically pushed and popped as the walker 16569 traverses the dominator tree. 16570 16571 2. Once before traversing all the statements in the BB. 16572 16573 3. Once for every statement inside BB. 16574 16575 4. Once after traversing all the statements and before recursing 16576 into BB's dominator children. 16577 16578 5. It then recurses into all the dominator children of BB. 16579 16580 6. After recursing into all the dominator children of BB it can, 16581 optionally, traverse every statement in BB again (i.e., 16582 repeating steps 2 and 3). 16583 16584 7. Once after walking the statements in BB and BB's dominator 16585 children. At this stage, the block local data stack is 16586 popped. 16587 16588 16589 File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 16590 16591 13.4 Alias analysis 16592 =================== 16593 16594 Alias analysis in GIMPLE SSA form consists of two pieces. First the 16595 virtual SSA web ties conflicting memory accesses and provides a SSA 16596 use-def chain and SSA immediate-use chains for walking possibly 16597 dependent memory accesses. Second an alias-oracle can be queried to 16598 disambiguate explicit and implicit memory references. 16599 16600 1. Memory SSA form. 16601 16602 All statements that may use memory have exactly one accompanied use 16603 of a virtual SSA name that represents the state of memory at the 16604 given point in the IL. 16605 16606 All statements that may define memory have exactly one accompanied 16607 definition of a virtual SSA name using the previous state of memory 16608 and defining the new state of memory after the given point in the 16609 IL. 16610 16611 int i; 16612 int foo (void) 16613 { 16614 # .MEM_3 = VDEF <.MEM_2(D)> 16615 i = 1; 16616 # VUSE <.MEM_3> 16617 return i; 16618 } 16619 16620 The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'. 16621 The store to the global variable 'i' defines '.MEM_3' invalidating 16622 '.MEM_2(D)'. The load from 'i' uses that new state '.MEM_3'. 16623 16624 The virtual SSA web serves as constraints to SSA optimizers 16625 preventing illegitimate code-motion and optimization. It also 16626 provides a way to walk related memory statements. 16627 16628 2. Points-to and escape analysis. 16629 16630 Points-to analysis builds a set of constraints from the GIMPLE SSA 16631 IL representing all pointer operations and facts we do or do not 16632 know about pointers. Solving this set of constraints yields a 16633 conservatively correct solution for each pointer variable in the 16634 program (though we are only interested in SSA name pointers) as to 16635 what it may possibly point to. 16636 16637 This points-to solution for a given SSA name pointer is stored in 16638 the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record. 16639 The following accessor functions are available: 16640 16641 * 'pt_solution_includes' 16642 * 'pt_solutions_intersect' 16643 16644 Points-to analysis also computes the solution for two special set 16645 of pointers, 'ESCAPED' and 'CALLUSED'. Those represent all memory 16646 that has escaped the scope of analysis or that is used by pure or 16647 nested const calls. 16648 16649 3. Type-based alias analysis 16650 16651 Type-based alias analysis is frontend dependent though generic 16652 support is provided by the middle-end in 'alias.c'. TBAA code is 16653 used by both tree optimizers and RTL optimizers. 16654 16655 Every language that wishes to perform language-specific alias 16656 analysis should define a function that computes, given a 'tree' 16657 node, an alias set for the node. Nodes in different alias sets are 16658 not allowed to alias. For an example, see the C front-end function 16659 'c_get_alias_set'. 16660 16661 4. Tree alias-oracle 16662 16663 The tree alias-oracle provides means to disambiguate two memory 16664 references and memory references against statements. The following 16665 queries are available: 16666 16667 * 'refs_may_alias_p' 16668 * 'ref_maybe_used_by_stmt_p' 16669 * 'stmt_may_clobber_ref_p' 16670 16671 In addition to those two kind of statement walkers are available 16672 walking statements related to a reference ref. 16673 'walk_non_aliased_vuses' walks over dominating memory defining 16674 statements and calls back if the statement does not clobber ref 16675 providing the non-aliased VUSE. The walk stops at the first 16676 clobbering statement or if asked to. 'walk_aliased_vdefs' walks 16677 over dominating memory defining statements and calls back on each 16678 statement clobbering ref providing its aliasing VDEF. The walk 16679 stops if asked to. 16680 16681 16682 File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 16683 16684 13.5 Memory model 16685 ================= 16686 16687 The memory model used by the middle-end models that of the C/C++ 16688 languages. The middle-end has the notion of an effective type of a 16689 memory region which is used for type-based alias analysis. 16690 16691 The following is a refinement of ISO C99 6.5/6, clarifying the block 16692 copy case to follow common sense and extending the concept of a dynamic 16693 effective type to objects with a declared type as required for C++. 16694 16695 The effective type of an object for an access to its stored value is 16696 the declared type of the object or the effective type determined by 16697 a previous store to it. If a value is stored into an object through 16698 an lvalue having a type that is not a character type, then the 16699 type of the lvalue becomes the effective type of the object for that 16700 access and for subsequent accesses that do not modify the stored value. 16701 If a value is copied into an object using memcpy or memmove, 16702 or is copied as an array of character type, then the effective type 16703 of the modified object for that access and for subsequent accesses that 16704 do not modify the value is undetermined. For all other accesses to an 16705 object, the effective type of the object is simply the type of the 16706 lvalue used for the access. 16707 16708 16709 File: gccint.info, Node: Loop Analysis and Representation, Next: Control Flow, Prev: Tree SSA, Up: Top 16710 16711 14 Analysis and Representation of Loops 16712 *************************************** 16713 16714 GCC provides extensive infrastructure for work with natural loops, i.e., 16715 strongly connected components of CFG with only one entry block. This 16716 chapter describes representation of loops in GCC, both on GIMPLE and in 16717 RTL, as well as the interfaces to loop-related analyses (induction 16718 variable analysis and number of iterations analysis). 16719 16720 * Menu: 16721 16722 * Loop representation:: Representation and analysis of loops. 16723 * Loop querying:: Getting information about loops. 16724 * Loop manipulation:: Loop manipulation functions. 16725 * LCSSA:: Loop-closed SSA form. 16726 * Scalar evolutions:: Induction variables on GIMPLE. 16727 * loop-iv:: Induction variables on RTL. 16728 * Number of iterations:: Number of iterations analysis. 16729 * Dependency analysis:: Data dependency analysis. 16730 * Lambda:: Linear loop transformations framework. 16731 * Omega:: A solver for linear programming problems. 16732 16733 16734 File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 16735 16736 14.1 Loop representation 16737 ======================== 16738 16739 This chapter describes the representation of loops in GCC, and functions 16740 that can be used to build, modify and analyze this representation. Most 16741 of the interfaces and data structures are declared in 'cfgloop.h'. At 16742 the moment, loop structures are analyzed and this information is updated 16743 only by the optimization passes that deal with loops, but some efforts 16744 are being made to make it available throughout most of the optimization 16745 passes. 16746 16747 In general, a natural loop has one entry block (header) and possibly 16748 several back edges (latches) leading to the header from the inside of 16749 the loop. Loops with several latches may appear if several loops share 16750 a single header, or if there is a branching in the middle of the loop. 16751 The representation of loops in GCC however allows only loops with a 16752 single latch. During loop analysis, headers of such loops are split and 16753 forwarder blocks are created in order to disambiguate their structures. 16754 Heuristic based on profile information and structure of the induction 16755 variables in the loops is used to determine whether the latches 16756 correspond to sub-loops or to control flow in a single loop. This means 16757 that the analysis sometimes changes the CFG, and if you run it in the 16758 middle of an optimization pass, you must be able to deal with the new 16759 blocks. You may avoid CFG changes by passing 16760 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 16761 however that most other loop manipulation functions will not work 16762 correctly for loops with multiple latch edges (the functions that only 16763 query membership of blocks to loops and subloop relationships, or 16764 enumerate and test loop exits, can be expected to work). 16765 16766 Body of the loop is the set of blocks that are dominated by its header, 16767 and reachable from its latch against the direction of edges in CFG. The 16768 loops are organized in a containment hierarchy (tree) such that all the 16769 loops immediately contained inside loop L are the children of L in the 16770 tree. This tree is represented by the 'struct loops' structure. The 16771 root of this tree is a fake loop that contains all blocks in the 16772 function. Each of the loops is represented in a 'struct loop' 16773 structure. Each loop is assigned an index ('num' field of the 'struct 16774 loop' structure), and the pointer to the loop is stored in the 16775 corresponding field of the 'larray' vector in the loops structure. The 16776 indices do not have to be continuous, there may be empty ('NULL') 16777 entries in the 'larray' created by deleting loops. Also, there is no 16778 guarantee on the relative order of a loop and its subloops in the 16779 numbering. The index of a loop never changes. 16780 16781 The entries of the 'larray' field should not be accessed directly. The 16782 function 'get_loop' returns the loop description for a loop with the 16783 given index. 'number_of_loops' function returns number of loops in the 16784 function. To traverse all loops, use 'FOR_EACH_LOOP' macro. The 16785 'flags' argument of the macro is used to determine the direction of 16786 traversal and the set of loops visited. Each loop is guaranteed to be 16787 visited exactly once, regardless of the changes to the loop tree, and 16788 the loops may be removed during the traversal. The newly created loops 16789 are never traversed, if they need to be visited, this must be done 16790 separately after their creation. The 'FOR_EACH_LOOP' macro allocates 16791 temporary variables. If the 'FOR_EACH_LOOP' loop were ended using break 16792 or goto, they would not be released; 'FOR_EACH_LOOP_BREAK' macro must be 16793 used instead. 16794 16795 Each basic block contains the reference to the innermost loop it 16796 belongs to ('loop_father'). For this reason, it is only possible to 16797 have one 'struct loops' structure initialized at the same time for each 16798 CFG. The global variable 'current_loops' contains the 'struct loops' 16799 structure. Many of the loop manipulation functions assume that 16800 dominance information is up-to-date. 16801 16802 The loops are analyzed through 'loop_optimizer_init' function. The 16803 argument of this function is a set of flags represented in an integer 16804 bitmask. These flags specify what other properties of the loop 16805 structures should be calculated/enforced and preserved later: 16806 16807 * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 16808 to CFG will be performed in the loop analysis, in particular, loops 16809 with multiple latch edges will not be disambiguated. If a loop has 16810 multiple latches, its latch block is set to NULL. Most of the loop 16811 manipulation functions will not work for loops in this shape. No 16812 other flags that require CFG changes can be passed to 16813 loop_optimizer_init. 16814 * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way 16815 that each loop has only one entry edge, and additionally, the 16816 source block of this entry edge has only one successor. This 16817 creates a natural place where the code can be moved out of the 16818 loop, and ensures that the entry edge of the loop leads from its 16819 immediate super-loop. 16820 * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 16821 the latch block of each loop to have only one successor. This 16822 ensures that the latch of the loop does not belong to any of its 16823 sub-loops, and makes manipulation with the loops significantly 16824 easier. Most of the loop manipulation functions assume that the 16825 loops are in this shape. Note that with this flag, the "normal" 16826 loop without any control flow inside and with one exit consists of 16827 two basic blocks. 16828 * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 16829 the strongly connected components that are not natural loops (have 16830 more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP' 16831 and 'EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 16832 and edges that belong to natural loops that are in such an 16833 irreducible region (but it is set for the entry and exit edges of 16834 such a loop, if they lead to/from this region). 16835 * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 16836 updated for each loop. This makes some functions (e.g., 16837 'get_loop_exit_edges') more efficient. Some functions (e.g., 16838 'single_exit') can be used only if the lists of exits are recorded. 16839 16840 These properties may also be computed/enforced later, using functions 16841 'create_preheaders', 'force_single_succ_latches', 16842 'mark_irreducible_loops' and 'record_loop_exits'. 16843 16844 The memory occupied by the loops structures should be freed with 16845 'loop_optimizer_finalize' function. 16846 16847 The CFG manipulation functions in general do not update loop 16848 structures. Specialized versions that additionally do so are provided 16849 for the most common tasks. On GIMPLE, 'cleanup_tree_cfg_loop' function 16850 can be used to cleanup CFG while updating the loops structures if 16851 'current_loops' is set. 16852 16853 16854 File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 16855 16856 14.2 Loop querying 16857 ================== 16858 16859 The functions to query the information about loops are declared in 16860 'cfgloop.h'. Some of the information can be taken directly from the 16861 structures. 'loop_father' field of each basic block contains the 16862 innermost loop to that the block belongs. The most useful fields of 16863 loop structure (that are kept up-to-date at all times) are: 16864 16865 * 'header', 'latch': Header and latch basic blocks of the loop. 16866 * 'num_nodes': Number of basic blocks in the loop (including the 16867 basic blocks of the sub-loops). 16868 * 'depth': The depth of the loop in the loops tree, i.e., the number 16869 of super-loops of the loop. 16870 * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and 16871 the sibling of the loop in the loops tree. 16872 16873 There are other fields in the loop structures, many of them used only 16874 by some of the passes, or not updated during CFG changes; in general, 16875 they should not be accessed directly. 16876 16877 The most important functions to query loop structures are: 16878 16879 * 'flow_loops_dump': Dumps the information about loops to a file. 16880 * 'verify_loop_structure': Checks consistency of the loop structures. 16881 * 'loop_latch_edge': Returns the latch edge of a loop. 16882 * 'loop_preheader_edge': If loops have preheaders, returns the 16883 preheader edge of a loop. 16884 * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another 16885 loop. 16886 * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a 16887 loop (including its sub-loops). 16888 * 'find_common_loop': Finds the common super-loop of two loops. 16889 * 'superloop_at_depth': Returns the super-loop of a loop with the 16890 given depth. 16891 * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of 16892 insns in the loop, on GIMPLE and on RTL. 16893 * 'loop_exit_edge_p': Tests whether edge is an exit from a loop. 16894 * 'mark_loop_exit_edges': Marks all exit edges of all loops with 16895 'EDGE_LOOP_EXIT' flag. 16896 * 'get_loop_body', 'get_loop_body_in_dom_order', 16897 'get_loop_body_in_bfs_order': Enumerates the basic blocks in the 16898 loop in depth-first search order in reversed CFG, ordered by 16899 dominance relation, and breath-first search order, respectively. 16900 * 'single_exit': Returns the single exit edge of the loop, or 'NULL' 16901 if the loop has more than one exit. You can only use this function 16902 if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 16903 * 'get_loop_exit_edges': Enumerates the exit edges of a loop. 16904 * 'just_once_each_iteration_p': Returns true if the basic block is 16905 executed exactly once during each iteration of a loop (that is, it 16906 does not belong to a sub-loop, and it dominates the latch of the 16907 loop). 16908 16909 16910 File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 16911 16912 14.3 Loop manipulation 16913 ====================== 16914 16915 The loops tree can be manipulated using the following functions: 16916 16917 * 'flow_loop_tree_node_add': Adds a node to the tree. 16918 * 'flow_loop_tree_node_remove': Removes a node from the tree. 16919 * 'add_bb_to_loop': Adds a basic block to a loop. 16920 * 'remove_bb_from_loops': Removes a basic block from loops. 16921 16922 Most low-level CFG functions update loops automatically. The following 16923 functions handle some more complicated cases of CFG manipulations: 16924 16925 * 'remove_path': Removes an edge and all blocks it dominates. 16926 * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that 16927 PHI node arguments remain in the loop (this ensures that 16928 loop-closed SSA form is preserved). Only useful on GIMPLE. 16929 16930 Finally, there are some higher-level loop transformations implemented. 16931 While some of them are written so that they should work on non-innermost 16932 loops, they are mostly untested in that case, and at the moment, they 16933 are only reliable for the innermost loops: 16934 16935 * 'create_iv': Creates a new induction variable. Only works on 16936 GIMPLE. 'standard_iv_increment_position' can be used to find a 16937 suitable place for the iv increment. 16938 * 'duplicate_loop_to_header_edge', 16939 'tree_duplicate_loop_to_header_edge': These functions (on RTL and 16940 on GIMPLE) duplicate the body of the loop prescribed number of 16941 times on one of the edges entering loop header, thus performing 16942 either loop unrolling or loop peeling. 'can_duplicate_loop_p' 16943 ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated 16944 loop. 16945 * 'loop_version', 'tree_ssa_loop_version': These function create a 16946 copy of a loop, and a branch before them that selects one of them 16947 depending on the prescribed condition. This is useful for 16948 optimizations that need to verify some assumptions in runtime (one 16949 of the copies of the loop is usually left unchanged, while the 16950 other one is transformed in some way). 16951 * 'tree_unroll_loop': Unrolls the loop, including peeling the extra 16952 iterations to make the number of iterations divisible by unroll 16953 factor, updating the exit condition, and removing the exits that 16954 now cannot be taken. Works only on GIMPLE. 16955 16956 16957 File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 16958 16959 14.4 Loop-closed SSA form 16960 ========================= 16961 16962 Throughout the loop optimizations on tree level, one extra condition is 16963 enforced on the SSA form: No SSA name is used outside of the loop in 16964 that it is defined. The SSA form satisfying this condition is called 16965 "loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 16966 created at the exits of the loops for the SSA names that are used 16967 outside of them. Only the real operands (not virtual SSA names) are 16968 held in LCSSA, in order to save memory. 16969 16970 There are various benefits of LCSSA: 16971 16972 * Many optimizations (value range analysis, final value replacement) 16973 are interested in the values that are defined in the loop and used 16974 outside of it, i.e., exactly those for that we create new PHI 16975 nodes. 16976 * In induction variable analysis, it is not necessary to specify the 16977 loop in that the analysis should be performed - the scalar 16978 evolution analysis always returns the results with respect to the 16979 loop in that the SSA name is defined. 16980 * It makes updating of SSA form during loop transformations simpler. 16981 Without LCSSA, operations like loop unrolling may force creation of 16982 PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA 16983 form can be updated locally. However, since we only keep real 16984 operands in LCSSA, we cannot use this advantage (we could have 16985 local updating of real operands, but it is not much more efficient 16986 than to use generic SSA form updating for it as well; the amount of 16987 changes to SSA is the same). 16988 16989 However, it also means LCSSA must be updated. This is usually 16990 straightforward, unless you create a new value in loop and use it 16991 outside, or unless you manipulate loop exit edges (functions are 16992 provided to make these manipulations simple). 16993 'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and 16994 'verify_loop_closed_ssa' to check that the invariant of LCSSA is 16995 preserved. 16996 16997 16998 File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 16999 17000 14.5 Scalar evolutions 17001 ====================== 17002 17003 Scalar evolutions (SCEV) are used to represent results of induction 17004 variable analysis on GIMPLE. They enable us to represent variables with 17005 complicated behavior in a simple and consistent way (we only use it to 17006 express values of polynomial induction variables, but it is possible to 17007 extend it). The interfaces to SCEV analysis are declared in 17008 'tree-scalar-evolution.h'. To use scalar evolutions analysis, 17009 'scev_initialize' must be used. To stop using SCEV, 'scev_finalize' 17010 should be used. SCEV analysis caches results in order to save time and 17011 memory. This cache however is made invalid by most of the loop 17012 transformations, including removal of code. If such a transformation is 17013 performed, 'scev_reset' must be called to clean the caches. 17014 17015 Given an SSA name, its behavior in loops can be analyzed using the 17016 'analyze_scalar_evolution' function. The returned SCEV however does not 17017 have to be fully analyzed and it may contain references to other SSA 17018 names defined in the loop. To resolve these (potentially recursive) 17019 references, 'instantiate_parameters' or 'resolve_mixers' functions must 17020 be used. 'instantiate_parameters' is useful when you use the results of 17021 SCEV only for some analysis, and when you work with whole nest of loops 17022 at once. It will try replacing all SSA names by their SCEV in all 17023 loops, including the super-loops of the current loop, thus providing a 17024 complete information about the behavior of the variable in the loop 17025 nest. 'resolve_mixers' is useful if you work with only one loop at a 17026 time, and if you possibly need to create code based on the value of the 17027 induction variable. It will only resolve the SSA names defined in the 17028 current loop, leaving the SSA names defined outside unchanged, even if 17029 their evolution in the outer loops is known. 17030 17031 The SCEV is a normal tree expression, except for the fact that it may 17032 contain several special tree nodes. One of them is 'SCEV_NOT_KNOWN', 17033 used for SSA names whose value cannot be expressed. The other one is 17034 'POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 17035 and loop (both base and step may contain further polynomial chrecs). 17036 Type of the expression and of base and step must be the same. A 17037 variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in 17038 the specified loop) equivalent to 'x_1' in the following example 17039 17040 while (...) 17041 { 17042 x_1 = phi (base, x_2); 17043 x_2 = x_1 + step; 17044 } 17045 17046 Note that this includes the language restrictions on the operations. 17047 For example, if we compile C code and 'x' has signed type, then the 17048 overflow in addition would cause undefined behavior, and we may assume 17049 that this does not happen. Hence, the value with this SCEV cannot 17050 overflow (which restricts the number of iterations of such a loop). 17051 17052 In many cases, one wants to restrict the attention just to affine 17053 induction variables. In this case, the extra expressive power of SCEV 17054 is not useful, and may complicate the optimizations. In this case, 17055 'simple_iv' function may be used to analyze a value - the result is a 17056 loop-invariant base and step. 17057 17058 17059 File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 17060 17061 14.6 IV analysis on RTL 17062 ======================= 17063 17064 The induction variable on RTL is simple and only allows analysis of 17065 affine induction variables, and only in one loop at once. The interface 17066 is declared in 'cfgloop.h'. Before analyzing induction variables in a 17067 loop L, 'iv_analysis_loop_init' function must be called on L. After the 17068 analysis (possibly calling 'iv_analysis_loop_init' for several loops) is 17069 finished, 'iv_analysis_done' should be called. The following functions 17070 can be used to access the results of the analysis: 17071 17072 * 'iv_analyze': Analyzes a single register used in the given insn. 17073 If no use of the register in this insn is found, the following 17074 insns are scanned, so that this function can be called on the insn 17075 returned by get_condition. 17076 * 'iv_analyze_result': Analyzes result of the assignment in the given 17077 insn. 17078 * 'iv_analyze_expr': Analyzes a more complicated expression. All its 17079 operands are analyzed by 'iv_analyze', and hence they must be used 17080 in the specified insn or one of the following insns. 17081 17082 The description of the induction variable is provided in 'struct 17083 rtx_iv'. In order to handle subregs, the representation is a bit 17084 complicated; if the value of the 'extend' field is not 'UNKNOWN', the 17085 value of the induction variable in the i-th iteration is 17086 17087 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 17088 17089 with the following exception: if 'first_special' is true, then the 17090 value in the first iteration (when 'i' is zero) is 'delta + mult * 17091 base'. However, if 'extend' is equal to 'UNKNOWN', then 'first_special' 17092 must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration 17093 is 17094 17095 subreg_{mode} (base + i * step) 17096 17097 The function 'get_iv_value' can be used to perform these calculations. 17098 17099 17100 File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 17101 17102 14.7 Number of iterations analysis 17103 ================================== 17104 17105 Both on GIMPLE and on RTL, there are functions available to determine 17106 the number of iterations of a loop, with a similar interface. The 17107 number of iterations of a loop in GCC is defined as the number of 17108 executions of the loop latch. In many cases, it is not possible to 17109 determine the number of iterations unconditionally - the determined 17110 number is correct only if some assumptions are satisfied. The analysis 17111 tries to verify these conditions using the information contained in the 17112 program; if it fails, the conditions are returned together with the 17113 result. The following information and conditions are provided by the 17114 analysis: 17115 17116 * 'assumptions': If this condition is false, the rest of the 17117 information is invalid. 17118 * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this 17119 condition is true, the loop exits in the first iteration. 17120 * 'infinite': If this condition is true, the loop is infinite. This 17121 condition is only available on RTL. On GIMPLE, conditions for 17122 finiteness of the loop are included in 'assumptions'. 17123 * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives 17124 number of iterations. The number of iterations is defined as the 17125 number of executions of the loop latch. 17126 17127 Both on GIMPLE and on RTL, it necessary for the induction variable 17128 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 17129 On GIMPLE, the results are stored to 'struct tree_niter_desc' structure. 17130 Number of iterations before the loop is exited through a given exit can 17131 be determined using 'number_of_iterations_exit' function. On RTL, the 17132 results are returned in 'struct niter_desc' structure. The 17133 corresponding function is named 'check_simple_exit'. There are also 17134 functions that pass through all the exits of a loop and try to find one 17135 with easy to determine number of iterations - 'find_loop_niter' on 17136 GIMPLE and 'find_simple_exit' on RTL. Finally, there are functions that 17137 provide the same information, but additionally cache it, so that 17138 repeated calls to number of iterations are not so costly - 17139 'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on 17140 RTL. 17141 17142 Note that some of these functions may behave slightly differently than 17143 others - some of them return only the expression for the number of 17144 iterations, and fail if there are some assumptions. The function 17145 'number_of_latch_executions' works only for single-exit loops. The 17146 function 'number_of_cond_exit_executions' can be used to determine 17147 number of executions of the exit condition of a single-exit loop (i.e., 17148 the 'number_of_latch_executions' increased by one). 17149 17150 17151 File: gccint.info, Node: Dependency analysis, Next: Lambda, Prev: Number of iterations, Up: Loop Analysis and Representation 17152 17153 14.8 Data Dependency Analysis 17154 ============================= 17155 17156 The code for the data dependence analysis can be found in 17157 'tree-data-ref.c' and its interface and data structures are described in 17158 'tree-data-ref.h'. The function that computes the data dependences for 17159 all the array and pointer references for a given loop is 17160 'compute_data_dependences_for_loop'. This function is currently used by 17161 the linear loop transform and the vectorization passes. Before calling 17162 this function, one has to allocate two vectors: a first vector will 17163 contain the set of data references that are contained in the analyzed 17164 loop body, and the second vector will contain the dependence relations 17165 between the data references. Thus if the vector of data references is 17166 of size 'n', the vector containing the dependence relations will contain 17167 'n*n' elements. However if the analyzed loop contains side effects, 17168 such as calls that potentially can interfere with the data references in 17169 the current analyzed loop, the analysis stops while scanning the loop 17170 body for data references, and inserts a single 'chrec_dont_know' in the 17171 dependence relation array. 17172 17173 The data references are discovered in a particular order during the 17174 scanning of the loop body: the loop body is analyzed in execution order, 17175 and the data references of each statement are pushed at the end of the 17176 data reference array. Two data references syntactically occur in the 17177 program in the same order as in the array of data references. This 17178 syntactic order is important in some classical data dependence tests, 17179 and mapping this order to the elements of this array avoids costly 17180 queries to the loop body representation. 17181 17182 Three types of data references are currently handled: ARRAY_REF, 17183 INDIRECT_REF and COMPONENT_REF. The data structure for the data 17184 reference is 'data_reference', where 'data_reference_p' is a name of a 17185 pointer to the data reference structure. The structure contains the 17186 following elements: 17187 17188 * 'base_object_info': Provides information about the base object of 17189 the data reference and its access functions. These access 17190 functions represent the evolution of the data reference in the loop 17191 relative to its base, in keeping with the classical meaning of the 17192 data reference access function for the support of arrays. For 17193 example, for a reference 'a.b[i][j]', the base object is 'a.b' and 17194 the access functions, one for each array subscript, are: '{i_init, 17195 + i_step}_1, {j_init, +, j_step}_2'. 17196 17197 * 'first_location_in_loop': Provides information about the first 17198 location accessed by the data reference in the loop and about the 17199 access function used to represent evolution relative to this 17200 location. This data is used to support pointers, and is not used 17201 for arrays (for which we have base objects). Pointer accesses are 17202 represented as a one-dimensional access that starts from the first 17203 location accessed in the loop. For example: 17204 17205 for1 i 17206 for2 j 17207 *((int *)p + i + j) = a[i][j]; 17208 17209 The access function of the pointer access is '{0, + 4B}_for2' 17210 relative to 'p + i'. The access functions of the array are 17211 '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative 17212 to 'a'. 17213 17214 Usually, the object the pointer refers to is either unknown, or we 17215 can't prove that the access is confined to the boundaries of a 17216 certain object. 17217 17218 Two data references can be compared only if at least one of these 17219 two representations has all its fields filled for both data 17220 references. 17221 17222 The current strategy for data dependence tests is as follows: If 17223 both 'a' and 'b' are represented as arrays, compare 'a.base_object' 17224 and 'b.base_object'; if they are equal, apply dependence tests (use 17225 access functions based on base_objects). Else if both 'a' and 'b' 17226 are represented as pointers, compare 'a.first_location' and 17227 'b.first_location'; if they are equal, apply dependence tests (use 17228 access functions based on first location). However, if 'a' and 'b' 17229 are represented differently, only try to prove that the bases are 17230 definitely different. 17231 17232 * Aliasing information. 17233 * Alignment information. 17234 17235 The structure describing the relation between two data references is 17236 'data_dependence_relation' and the shorter name for a pointer to such a 17237 structure is 'ddr_p'. This structure contains: 17238 17239 * a pointer to each data reference, 17240 * a tree node 'are_dependent' that is set to 'chrec_known' if the 17241 analysis has proved that there is no dependence between these two 17242 data references, 'chrec_dont_know' if the analysis was not able to 17243 determine any useful result and potentially there could exist a 17244 dependence between these data references, and 'are_dependent' is 17245 set to 'NULL_TREE' if there exist a dependence relation between the 17246 data references, and the description of this dependence relation is 17247 given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays, 17248 * a boolean that determines whether the dependence relation can be 17249 represented by a classical distance vector, 17250 * an array 'subscripts' that contains a description of each subscript 17251 of the data references. Given two array accesses a subscript is 17252 the tuple composed of the access functions for a given dimension. 17253 For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are 17254 three subscripts: '(f1, g1), (f2, g2), (f3, g3)'. 17255 * two arrays 'dir_vects' and 'dist_vects' that contain classical 17256 representations of the data dependences under the form of direction 17257 and distance dependence vectors, 17258 * an array of loops 'loop_nest' that contains the loops to which the 17259 distance and direction vectors refer to. 17260 17261 Several functions for pretty printing the information extracted by the 17262 data dependence analysis are available: 'dump_ddrs' prints with a 17263 maximum verbosity the details of a data dependence relations array, 17264 'dump_dist_dir_vectors' prints only the classical distance and direction 17265 vectors for a data dependence relations array, and 17266 'dump_data_references' prints the details of the data references 17267 contained in a data reference array. 17268 17269 17270 File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation 17271 17272 14.9 Linear loop transformations framework 17273 ========================================== 17274 17275 Lambda is a framework that allows transformations of loops using 17276 non-singular matrix based transformations of the iteration space and 17277 loop bounds. This allows compositions of skewing, scaling, interchange, 17278 and reversal transformations. These transformations are often used to 17279 improve cache behavior or remove inner loop dependencies to allow 17280 parallelization and vectorization to take place. 17281 17282 To perform these transformations, Lambda requires that the loopnest be 17283 converted into an internal form that can be matrix transformed easily. 17284 To do this conversion, the function 'gcc_loopnest_to_lambda_loopnest' is 17285 provided. If the loop cannot be transformed using lambda, this function 17286 will return NULL. 17287 17288 Once a 'lambda_loopnest' is obtained from the conversion function, it 17289 can be transformed by using 'lambda_loopnest_transform', which takes a 17290 transformation matrix to apply. Note that it is up to the caller to 17291 verify that the transformation matrix is legal to apply to the loop 17292 (dependence respecting, etc). Lambda simply applies whatever matrix it 17293 is told to provide. It can be extended to make legal matrices out of 17294 any non-singular matrix, but this is not currently implemented. 17295 Legality of a matrix for a given loopnest can be verified using 17296 'lambda_transform_legal_p'. 17297 17298 Given a transformed loopnest, conversion back into gcc IR is done by 17299 'lambda_loopnest_to_gcc_loopnest'. This function will modify the loops 17300 so that they match the transformed loopnest. 17301 17302 17303 File: gccint.info, Node: Omega, Prev: Lambda, Up: Loop Analysis and Representation 17304 17305 14.10 Omega a solver for linear programming problems 17306 ==================================================== 17307 17308 The data dependence analysis contains several solvers triggered 17309 sequentially from the less complex ones to the more sophisticated. For 17310 ensuring the consistency of the results of these solvers, a data 17311 dependence check pass has been implemented based on two different 17312 solvers. The second method that has been integrated to GCC is based on 17313 the Omega dependence solver, written in the 1990's by William Pugh and 17314 David Wonnacott. Data dependence tests can be formulated using a subset 17315 of the Presburger arithmetics that can be translated to linear 17316 constraint systems. These linear constraint systems can then be solved 17317 using the Omega solver. 17318 17319 The Omega solver is using Fourier-Motzkin's algorithm for variable 17320 elimination: a linear constraint system containing 'n' variables is 17321 reduced to a linear constraint system with 'n-1' variables. The Omega 17322 solver can also be used for solving other problems that can be expressed 17323 under the form of a system of linear equalities and inequalities. The 17324 Omega solver is known to have an exponential worst case, also known 17325 under the name of "omega nightmare" in the literature, but in practice, 17326 the omega test is known to be efficient for the common data dependence 17327 tests. 17328 17329 The interface used by the Omega solver for describing the linear 17330 programming problems is described in 'omega.h', and the solver is 17331 'omega_solve_problem'. 17332 17333 17334 File: gccint.info, Node: Control Flow, Next: Machine Desc, Prev: Loop Analysis and Representation, Up: Top 17335 17336 15 Control Flow Graph 17337 ********************* 17338 17339 A control flow graph (CFG) is a data structure built on top of the 17340 intermediate code representation (the RTL or 'GIMPLE' instruction 17341 stream) abstracting the control flow behavior of a function that is 17342 being compiled. The CFG is a directed graph where the vertices 17343 represent basic blocks and edges represent possible transfer of control 17344 flow from one basic block to another. The data structures used to 17345 represent the control flow graph are defined in 'basic-block.h'. 17346 17347 In GCC, the representation of control flow is maintained throughout the 17348 compilation process, from constructing the CFG early in 'pass_build_cfg' 17349 to 'pass_free_cfg' (see 'passes.c'). The CFG takes various different 17350 modes and may undergo extensive manipulations, but the graph is always 17351 valid between its construction and its release. This way, transfer of 17352 information such as data flow, a measured profile, or the loop tree, can 17353 be propagated through the passes pipeline, and even from 'GIMPLE' to 17354 'RTL'. 17355 17356 Often the CFG may be better viewed as integral part of instruction 17357 chain, than structure built on the top of it. Updating the compiler's 17358 intermediate representation for instructions can not be easily done 17359 without proper maintenance of the CFG simultaneously. 17360 17361 * Menu: 17362 17363 * Basic Blocks:: The definition and representation of basic blocks. 17364 * Edges:: Types of edges and their representation. 17365 * Profile information:: Representation of frequencies and probabilities. 17366 * Maintaining the CFG:: Keeping the control flow graph and up to date. 17367 * Liveness information:: Using and maintaining liveness information. 17368 17369 17370 File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 17371 17372 15.1 Basic Blocks 17373 ================= 17374 17375 A basic block is a straight-line sequence of code with only one entry 17376 point and only one exit. In GCC, basic blocks are represented using the 17377 'basic_block' data type. 17378 17379 Special basic blocks represent possible entry and exit points of a 17380 function. These blocks are called 'ENTRY_BLOCK_PTR' and 17381 'EXIT_BLOCK_PTR'. These blocks do not contain any code. 17382 17383 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified 17384 order. Each 'basic_block' structure has a field that holds a unique 17385 integer identifier 'index' that is the index of the block in the 17386 'BASIC_BLOCK' array. The total number of basic blocks in the function 17387 is 'n_basic_blocks'. Both the basic block indices and the total number 17388 of basic blocks may vary during the compilation process, as passes 17389 reorder, create, duplicate, and destroy basic blocks. The index for any 17390 block should never be greater than 'last_basic_block'. The indices 0 17391 and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the 17392 indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'. 17393 17394 Two pointer members of the 'basic_block' structure are the pointers 17395 'next_bb' and 'prev_bb'. These are used to keep doubly linked chain of 17396 basic blocks in the same order as the underlying instruction stream. 17397 The chain of basic blocks is updated transparently by the provided API 17398 for manipulating the CFG. The macro 'FOR_EACH_BB' can be used to visit 17399 all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and 17400 'EXIT_BLOCK'. The macro 'FOR_ALL_BB' also visits all basic blocks in 17401 lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'. 17402 17403 The functions 'post_order_compute' and 'inverted_post_order_compute' 17404 can be used to compute topological orders of the CFG. The orders are 17405 stored as vectors of basic block indices. The 'BASIC_BLOCK' array can 17406 be used to iterate each basic block by index. Dominator traversals are 17407 also possible using 'walk_dominator_tree'. Given two basic blocks A and 17408 B, block A dominates block B if A is _always_ executed before B. 17409 17410 Each 'basic_block' also contains pointers to the first instruction (the 17411 "head") and the last instruction (the "tail") or "end" of the 17412 instruction stream contained in a basic block. In fact, since the 17413 'basic_block' data type is used to represent blocks in both major 17414 intermediate representations of GCC ('GIMPLE' and RTL), there are 17415 pointers to the head and end of a basic block for both representations, 17416 stored in intermediate representation specific data in the 'il' field of 17417 'struct basic_block_def'. 17418 17419 For RTL, these pointers are 'BB_HEAD' and 'BB_END'. 17420 17421 In the RTL representation of a function, the instruction stream 17422 contains not only the "real" instructions, but also "notes" or "insn 17423 notes" (to distinguish them from "reg notes"). Any function that moves 17424 or duplicates the basic blocks needs to take care of updating of these 17425 notes. Many of these notes expect that the instruction stream consists 17426 of linear regions, so updating can sometimes be tedious. All types of 17427 insn notes are defined in 'insn-notes.def'. 17428 17429 In the RTL function representation, the instructions contained in a 17430 basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more 17431 'CODE_LABEL' nodes can precede the block note. A basic block ends with 17432 a control flow instruction or with the last instruction before the next 17433 'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'. By definition, a 'CODE_LABEL' 17434 cannot appear in the middle of the instruction stream of a basic block. 17435 17436 In addition to notes, the jump table vectors are also represented as 17437 "pseudo-instructions" inside the insn stream. These vectors never 17438 appear in the basic block and should always be placed just after the 17439 table jump instructions referencing them. After removing the table-jump 17440 it is often difficult to eliminate the code computing the address and 17441 referencing the vector, so cleaning up these vectors is postponed until 17442 after liveness analysis. Thus the jump table vectors may appear in the 17443 insn stream unreferenced and without any purpose. Before any edge is 17444 made "fall-thru", the existence of such construct in the way needs to be 17445 checked by calling 'can_fallthru' function. 17446 17447 For the 'GIMPLE' representation, the PHI nodes and statements contained 17448 in a basic block are in a 'gimple_seq' pointed to by the basic block 17449 intermediate language specific pointers. Abstract containers and 17450 iterators are used to access the PHI nodes and statements in a basic 17451 blocks. These iterators are called "GIMPLE statement iterators" (GSIs). 17452 Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files. The 17453 following snippet will pretty-print all PHI nodes the statements of the 17454 current function in the GIMPLE representation. 17455 17456 basic_block bb; 17457 17458 FOR_EACH_BB (bb) 17459 { 17460 gimple_stmt_iterator si; 17461 17462 for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) 17463 { 17464 gimple phi = gsi_stmt (si); 17465 print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); 17466 } 17467 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 17468 { 17469 gimple stmt = gsi_stmt (si); 17470 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); 17471 } 17472 } 17473 17474 17475 File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 17476 17477 15.2 Edges 17478 ========== 17479 17480 Edges represent possible control flow transfers from the end of some 17481 basic block A to the head of another basic block B. We say that A is a 17482 predecessor of B, and B is a successor of A. Edges are represented in 17483 GCC with the 'edge' data type. Each 'edge' acts as a link between two 17484 basic blocks: The 'src' member of an edge points to the predecessor 17485 basic block of the 'dest' basic block. The members 'preds' and 'succs' 17486 of the 'basic_block' data type point to type-safe vectors of edges to 17487 the predecessors and successors of the block. 17488 17489 When walking the edges in an edge vector, "edge iterators" should be 17490 used. Edge iterators are constructed using the 'edge_iterator' data 17491 structure and several methods are available to operate on them: 17492 17493 'ei_start' 17494 This function initializes an 'edge_iterator' that points to the 17495 first edge in a vector of edges. 17496 17497 'ei_last' 17498 This function initializes an 'edge_iterator' that points to the 17499 last edge in a vector of edges. 17500 17501 'ei_end_p' 17502 This predicate is 'true' if an 'edge_iterator' represents the last 17503 edge in an edge vector. 17504 17505 'ei_one_before_end_p' 17506 This predicate is 'true' if an 'edge_iterator' represents the 17507 second last edge in an edge vector. 17508 17509 'ei_next' 17510 This function takes a pointer to an 'edge_iterator' and makes it 17511 point to the next edge in the sequence. 17512 17513 'ei_prev' 17514 This function takes a pointer to an 'edge_iterator' and makes it 17515 point to the previous edge in the sequence. 17516 17517 'ei_edge' 17518 This function returns the 'edge' currently pointed to by an 17519 'edge_iterator'. 17520 17521 'ei_safe_safe' 17522 This function returns the 'edge' currently pointed to by an 17523 'edge_iterator', but returns 'NULL' if the iterator is pointing at 17524 the end of the sequence. This function has been provided for 17525 existing code makes the assumption that a 'NULL' edge indicates the 17526 end of the sequence. 17527 17528 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the 17529 edges in a sequence of predecessor or successor edges. It must not be 17530 used when an element might be removed during the traversal, otherwise 17531 elements will be missed. Here is an example of how to use the macro: 17532 17533 edge e; 17534 edge_iterator ei; 17535 17536 FOR_EACH_EDGE (e, ei, bb->succs) 17537 { 17538 if (e->flags & EDGE_FALLTHRU) 17539 break; 17540 } 17541 17542 There are various reasons why control flow may transfer from one block 17543 to another. One possibility is that some instruction, for example a 17544 'CODE_LABEL', in a linearized instruction stream just always starts a 17545 new basic block. In this case a "fall-thru" edge links the basic block 17546 to the first following basic block. But there are several other reasons 17547 why edges may be created. The 'flags' field of the 'edge' data type is 17548 used to store information about the type of edge we are dealing with. 17549 Each edge is of one of the following types: 17550 17551 _jump_ 17552 No type flags are set for edges corresponding to jump instructions. 17553 These edges are used for unconditional or conditional jumps and in 17554 RTL also for table jumps. They are the easiest to manipulate as 17555 they may be freely redirected when the flow graph is not in SSA 17556 form. 17557 17558 _fall-thru_ 17559 Fall-thru edges are present in case where the basic block may 17560 continue execution to the following one without branching. These 17561 edges have the 'EDGE_FALLTHRU' flag set. Unlike other types of 17562 edges, these edges must come into the basic block immediately 17563 following in the instruction stream. The function 17564 'force_nonfallthru' is available to insert an unconditional jump in 17565 the case that redirection is needed. Note that this may require 17566 creation of a new basic block. 17567 17568 _exception handling_ 17569 Exception handling edges represent possible control transfers from 17570 a trapping instruction to an exception handler. The definition of 17571 "trapping" varies. In C++, only function calls can throw, but for 17572 Java and Ada, exceptions like division by zero or segmentation 17573 fault are defined and thus each instruction possibly throwing this 17574 kind of exception needs to be handled as control flow instruction. 17575 Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set. 17576 17577 When updating the instruction stream it is easy to change possibly 17578 trapping instruction to non-trapping, by simply removing the 17579 exception edge. The opposite conversion is difficult, but should 17580 not happen anyway. The edges can be eliminated via 17581 'purge_dead_edges' call. 17582 17583 In the RTL representation, the destination of an exception edge is 17584 specified by 'REG_EH_REGION' note attached to the insn. In case of 17585 a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too. In the 17586 'GIMPLE' representation, this extra flag is not set. 17587 17588 In the RTL representation, the predicate 'may_trap_p' may be used 17589 to check whether instruction still may trap or not. For the tree 17590 representation, the 'tree_could_trap_p' predicate is available, but 17591 this predicate only checks for possible memory traps, as in 17592 dereferencing an invalid pointer location. 17593 17594 _sibling calls_ 17595 Sibling calls or tail calls terminate the function in a 17596 non-standard way and thus an edge to the exit must be present. 17597 'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case. These 17598 edges only exist in the RTL representation. 17599 17600 _computed jumps_ 17601 Computed jumps contain edges to all labels in the function 17602 referenced from the code. All those edges have 'EDGE_ABNORMAL' 17603 flag set. The edges used to represent computed jumps often cause 17604 compile time performance problems, since functions consisting of 17605 many taken labels and many computed jumps may have _very_ dense 17606 flow graphs, so these edges need to be handled with special care. 17607 During the earlier stages of the compilation process, GCC tries to 17608 avoid such dense flow graphs by factoring computed jumps. For 17609 example, given the following series of jumps, 17610 17611 goto *x; 17612 [ ... ] 17613 17614 goto *x; 17615 [ ... ] 17616 17617 goto *x; 17618 [ ... ] 17619 17620 factoring the computed jumps results in the following code sequence 17621 which has a much simpler flow graph: 17622 17623 goto y; 17624 [ ... ] 17625 17626 goto y; 17627 [ ... ] 17628 17629 goto y; 17630 [ ... ] 17631 17632 y: 17633 goto *x; 17634 17635 However, the classic problem with this transformation is that it 17636 has a runtime cost in there resulting code: An extra jump. 17637 Therefore, the computed jumps are un-factored in the later passes 17638 of the compiler (in the pass called 17639 'pass_duplicate_computed_gotos'). Be aware of that when you work 17640 on passes in that area. There have been numerous examples already 17641 where the compile time for code with unfactored computed jumps 17642 caused some serious headaches. 17643 17644 _nonlocal goto handlers_ 17645 GCC allows nested functions to return into caller using a 'goto' to 17646 a label passed to as an argument to the callee. The labels passed 17647 to nested functions contain special code to cleanup after function 17648 call. Such sections of code are referred to as "nonlocal goto 17649 receivers". If a function contains such nonlocal goto receivers, 17650 an edge from the call to the label is created with the 17651 'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set. 17652 17653 _function entry points_ 17654 By definition, execution of function starts at basic block 0, so 17655 there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block 17656 0. There is no 'GIMPLE' representation for alternate entry points 17657 at this moment. In RTL, alternate entry points are specified by 17658 'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined. This feature is 17659 currently used for multiple entry point prologues and is limited to 17660 post-reload passes only. This can be used by back-ends to emit 17661 alternate prologues for functions called from different contexts. 17662 In future full support for multiple entry functions defined by 17663 Fortran 90 needs to be implemented. 17664 17665 _function exits_ 17666 In the pre-reload representation a function terminates after the 17667 last instruction in the insn chain and no explicit return 17668 instructions are used. This corresponds to the fall-thru edge into 17669 exit block. After reload, optimal RTL epilogues are used that use 17670 explicit (conditional) return instructions that are represented by 17671 edges with no flags set. 17672 17673 17674 File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 17675 17676 15.3 Profile information 17677 ======================== 17678 17679 In many cases a compiler must make a choice whether to trade speed in 17680 one part of code for speed in another, or to trade code size for code 17681 speed. In such cases it is useful to know information about how often 17682 some given block will be executed. That is the purpose for maintaining 17683 profile within the flow graph. GCC can handle profile information 17684 obtained through "profile feedback", but it can also estimate branch 17685 probabilities based on statics and heuristics. 17686 17687 The feedback based profile is produced by compiling the program with 17688 instrumentation, executing it on a train run and reading the numbers of 17689 executions of basic blocks and edges back to the compiler while 17690 re-compiling the program to produce the final executable. This method 17691 provides very accurate information about where a program spends most of 17692 its time on the train run. Whether it matches the average run of course 17693 depends on the choice of train data set, but several studies have shown 17694 that the behavior of a program usually changes just marginally over 17695 different data sets. 17696 17697 When profile feedback is not available, the compiler may be asked to 17698 attempt to predict the behavior of each branch in the program using a 17699 set of heuristics (see 'predict.def' for details) and compute estimated 17700 frequencies of each basic block by propagating the probabilities over 17701 the graph. 17702 17703 Each 'basic_block' contains two integer fields to represent profile 17704 information: 'frequency' and 'count'. The 'frequency' is an estimation 17705 how often is basic block executed within a function. It is represented 17706 as an integer scaled in the range from 0 to 'BB_FREQ_BASE'. The most 17707 frequently executed basic block in function is initially set to 17708 'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 17709 During optimization, the frequency of the most frequent basic block can 17710 both decrease (for instance by loop unrolling) or grow (for instance by 17711 cross-jumping optimization), so scaling sometimes has to be performed 17712 multiple times. 17713 17714 The 'count' contains hard-counted numbers of execution measured during 17715 training runs and is nonzero only when profile feedback is available. 17716 This value is represented as the host's widest integer (typically a 64 17717 bit integer) of the special type 'gcov_type'. 17718 17719 Most optimization passes can use only the frequency information of a 17720 basic block, but a few passes may want to know hard execution counts. 17721 The frequencies should always match the counts after scaling, however 17722 during updating of the profile information numerical error may 17723 accumulate into quite large errors. 17724 17725 Each edge also contains a branch probability field: an integer in the 17726 range from 0 to 'REG_BR_PROB_BASE'. It represents probability of 17727 passing control from the end of the 'src' basic block to the 'dest' 17728 basic block, i.e. the probability that control will flow along this 17729 edge. The 'EDGE_FREQUENCY' macro is available to compute how frequently 17730 a given edge is taken. There is a 'count' field for each edge as well, 17731 representing same information as for a basic block. 17732 17733 The basic block frequencies are not represented in the instruction 17734 stream, but in the RTL representation the edge frequencies are 17735 represented for conditional jumps (via the 'REG_BR_PROB' macro) since 17736 they are used when instructions are output to the assembly file and the 17737 flow graph is no longer maintained. 17738 17739 The probability that control flow arrives via a given edge to its 17740 destination basic block is called "reverse probability" and is not 17741 directly represented, but it may be easily computed from frequencies of 17742 basic blocks. 17743 17744 Updating profile information is a delicate task that can unfortunately 17745 not be easily integrated with the CFG manipulation API. Many of the 17746 functions and hooks to modify the CFG, such as 17747 'redirect_edge_and_branch', do not have enough information to easily 17748 update the profile, so updating it is in the majority of cases left up 17749 to the caller. It is difficult to uncover bugs in the profile updating 17750 code, because they manifest themselves only by producing worse code, and 17751 checking profile consistency is not possible because of numeric error 17752 accumulation. Hence special attention needs to be given to this issue 17753 in each pass that modifies the CFG. 17754 17755 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE' 17756 are both set low enough to be possible to compute second power of any 17757 frequency or probability in the flow graph, it is not possible to even 17758 square the 'count' field, as modern CPUs are fast enough to execute 17759 $2^32$ operations quickly. 17760 17761 17762 File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 17763 17764 15.4 Maintaining the CFG 17765 ======================== 17766 17767 An important task of each compiler pass is to keep both the control flow 17768 graph and all profile information up-to-date. Reconstruction of the 17769 control flow graph after each pass is not an option, since it may be 17770 very expensive and lost profile information cannot be reconstructed at 17771 all. 17772 17773 GCC has two major intermediate representations, and both use the 17774 'basic_block' and 'edge' data types to represent control flow. Both 17775 representations share as much of the CFG maintenance code as possible. 17776 For each representation, a set of "hooks" is defined so that each 17777 representation can provide its own implementation of CFG manipulation 17778 routines when necessary. These hooks are defined in 'cfghooks.h'. 17779 There are hooks for almost all common CFG manipulations, including block 17780 splitting and merging, edge redirection and creating and deleting basic 17781 blocks. These hooks should provide everything you need to maintain and 17782 manipulate the CFG in both the RTL and 'GIMPLE' representation. 17783 17784 At the moment, the basic block boundaries are maintained transparently 17785 when modifying instructions, so there rarely is a need to move them 17786 manually (such as in case someone wants to output instruction outside 17787 basic block explicitly). 17788 17789 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN' 17790 value that represents pointer to the basic block that contains the 17791 instruction. In the 'GIMPLE' representation, the function 'gimple_bb' 17792 returns a pointer to the basic block containing the queried statement. 17793 17794 When changes need to be applied to a function in its 'GIMPLE' 17795 representation, "GIMPLE statement iterators" should be used. These 17796 iterators provide an integrated abstraction of the flow graph and the 17797 instruction stream. Block statement iterators are constructed using the 17798 'gimple_stmt_iterator' data structure and several modifier are 17799 available, including the following: 17800 17801 'gsi_start' 17802 This function initializes a 'gimple_stmt_iterator' that points to 17803 the first non-empty statement in a basic block. 17804 17805 'gsi_last' 17806 This function initializes a 'gimple_stmt_iterator' that points to 17807 the last statement in a basic block. 17808 17809 'gsi_end_p' 17810 This predicate is 'true' if a 'gimple_stmt_iterator' represents the 17811 end of a basic block. 17812 17813 'gsi_next' 17814 This function takes a 'gimple_stmt_iterator' and makes it point to 17815 its successor. 17816 17817 'gsi_prev' 17818 This function takes a 'gimple_stmt_iterator' and makes it point to 17819 its predecessor. 17820 17821 'gsi_insert_after' 17822 This function inserts a statement after the 'gimple_stmt_iterator' 17823 passed in. The final parameter determines whether the statement 17824 iterator is updated to point to the newly inserted statement, or 17825 left pointing to the original statement. 17826 17827 'gsi_insert_before' 17828 This function inserts a statement before the 'gimple_stmt_iterator' 17829 passed in. The final parameter determines whether the statement 17830 iterator is updated to point to the newly inserted statement, or 17831 left pointing to the original statement. 17832 17833 'gsi_remove' 17834 This function removes the 'gimple_stmt_iterator' passed in and 17835 rechains the remaining statements in a basic block, if any. 17836 17837 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be 17838 used to get the head and end 'rtx' of a basic block. No abstract 17839 iterators are defined for traversing the insn chain, but you can just 17840 use 'NEXT_INSN' and 'PREV_INSN' instead. *Note Insns::. 17841 17842 Usually a code manipulating pass simplifies the instruction stream and 17843 the flow of control, possibly eliminating some edges. This may for 17844 example happen when a conditional jump is replaced with an unconditional 17845 jump, but also when simplifying possibly trapping instruction to 17846 non-trapping while compiling Java. Updating of edges is not transparent 17847 and each optimization pass is required to do so manually. However only 17848 few cases occur in practice. The pass may call 'purge_dead_edges' on a 17849 given basic block to remove superfluous edges, if any. 17850 17851 Another common scenario is redirection of branch instructions, but this 17852 is best modeled as redirection of edges in the control flow graph and 17853 thus use of 'redirect_edge_and_branch' is preferred over more low level 17854 functions, such as 'redirect_jump' that operate on RTL chain only. The 17855 CFG hooks defined in 'cfghooks.h' should provide the complete API 17856 required for manipulating and maintaining the CFG. 17857 17858 It is also possible that a pass has to insert control flow instruction 17859 into the middle of a basic block, thus creating an entry point in the 17860 middle of the basic block, which is impossible by definition: The block 17861 must be split to make sure it only has one entry point, i.e. the head of 17862 the basic block. The CFG hook 'split_block' may be used when an 17863 instruction in the middle of a basic block has to become the target of a 17864 jump or branch instruction. 17865 17866 For a global optimizer, a common operation is to split edges in the 17867 flow graph and insert instructions on them. In the RTL representation, 17868 this can be easily done using the 'insert_insn_on_edge' function that 17869 emits an instruction "on the edge", caching it for a later 17870 'commit_edge_insertions' call that will take care of moving the inserted 17871 instructions off the edge into the instruction stream contained in a 17872 basic block. This includes the creation of new basic blocks where 17873 needed. In the 'GIMPLE' representation, the equivalent functions are 17874 'gsi_insert_on_edge' which inserts a block statement iterator on an 17875 edge, and 'gsi_commit_edge_inserts' which flushes the instruction to 17876 actual instruction stream. 17877 17878 While debugging the optimization pass, the 'verify_flow_info' function 17879 may be useful to find bugs in the control flow graph updating code. 17880 17881 17882 File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 17883 17884 15.5 Liveness information 17885 ========================= 17886 17887 Liveness information is useful to determine whether some register is 17888 "live" at given point of program, i.e. that it contains a value that may 17889 be used at a later point in the program. This information is used, for 17890 instance, during register allocation, as the pseudo registers only need 17891 to be assigned to a unique hard register or to a stack slot if they are 17892 live. The hard registers and stack slots may be freely reused for other 17893 values when a register is dead. 17894 17895 Liveness information is available in the back end starting with 17896 'pass_df_initialize' and ending with 'pass_df_finish'. Three flavors of 17897 live analysis are available: With 'LR', it is possible to determine at 17898 any point 'P' in the function if the register may be used on some path 17899 from 'P' to the end of the function. With 'UR', it is possible to 17900 determine if there is a path from the beginning of the function to 'P' 17901 that defines the variable. 'LIVE' is the intersection of the 'LR' and 17902 'UR' and a variable is live at 'P' if there is both an assignment that 17903 reaches it from the beginning of the function and a use that can be 17904 reached on some path from 'P' to the end of the function. 17905 17906 In general 'LIVE' is the most useful of the three. The macros 17907 'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 17908 macros take a basic block number and return a bitmap that is indexed by 17909 the register number. This information is only guaranteed to be up to 17910 date after calls are made to 'df_analyze'. See the file 'df-core.c' for 17911 details on using the dataflow. 17912 17913 The liveness information is stored partly in the RTL instruction stream 17914 and partly in the flow graph. Local information is stored in the 17915 instruction stream: Each instruction may contain 'REG_DEAD' notes 17916 representing that the value of a given register is no longer needed, or 17917 'REG_UNUSED' notes representing that the value computed by the 17918 instruction is never used. The second is useful for instructions 17919 computing multiple values at once. 17920 17921 17922 File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Control Flow, Up: Top 17923 17924 16 Machine Descriptions 17925 *********************** 17926 17927 A machine description has two parts: a file of instruction patterns 17928 ('.md' file) and a C header file of macro definitions. 17929 17930 The '.md' file for a target machine contains a pattern for each 17931 instruction that the target machine supports (or at least each 17932 instruction that is worth telling the compiler about). It may also 17933 contain comments. A semicolon causes the rest of the line to be a 17934 comment, unless the semicolon is inside a quoted string. 17935 17936 See the next chapter for information on the C header file. 17937 17938 * Menu: 17939 17940 * Overview:: How the machine description is used. 17941 * Patterns:: How to write instruction patterns. 17942 * Example:: An explained example of a 'define_insn' pattern. 17943 * RTL Template:: The RTL template defines what insns match a pattern. 17944 * Output Template:: The output template says how to make assembler code 17945 from such an insn. 17946 * Output Statement:: For more generality, write C code to output 17947 the assembler code. 17948 * Predicates:: Controlling what kinds of operands can be used 17949 for an insn. 17950 * Constraints:: Fine-tuning operand selection. 17951 * Standard Names:: Names mark patterns to use for code generation. 17952 * Pattern Ordering:: When the order of patterns makes a difference. 17953 * Dependent Patterns:: Having one pattern may make you need another. 17954 * Jump Patterns:: Special considerations for patterns for jump insns. 17955 * Looping Patterns:: How to define patterns for special looping insns. 17956 * Insn Canonicalizations::Canonicalization of Instructions 17957 * Expander Definitions::Generating a sequence of several RTL insns 17958 for a standard operation. 17959 * Insn Splitting:: Splitting Instructions into Multiple Instructions. 17960 * Including Patterns:: Including Patterns in Machine Descriptions. 17961 * Peephole Definitions::Defining machine-specific peephole optimizations. 17962 * Insn Attributes:: Specifying the value of attributes for generated insns. 17963 * Conditional Execution::Generating 'define_insn' patterns for 17964 predication. 17965 * Define Subst:: Generating 'define_insn' and 'define_expand' 17966 patterns from other patterns. 17967 * Constant Definitions::Defining symbolic constants that can be used in the 17968 md file. 17969 * Iterators:: Using iterators to generate patterns from a template. 17970 17971 17972 File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 17973 17974 16.1 Overview of How the Machine Description is Used 17975 ==================================================== 17976 17977 There are three main conversions that happen in the compiler: 17978 17979 1. The front end reads the source code and builds a parse tree. 17980 17981 2. The parse tree is used to generate an RTL insn list based on named 17982 instruction patterns. 17983 17984 3. The insn list is matched against the RTL templates to produce 17985 assembler code. 17986 17987 For the generate pass, only the names of the insns matter, from either 17988 a named 'define_insn' or a 'define_expand'. The compiler will choose 17989 the pattern with the right name and apply the operands according to the 17990 documentation later in this chapter, without regard for the RTL template 17991 or operand constraints. Note that the names the compiler looks for are 17992 hard-coded in the compiler--it will ignore unnamed patterns and patterns 17993 with names it doesn't know about, but if you don't provide a named 17994 pattern it needs, it will abort. 17995 17996 If a 'define_insn' is used, the template given is inserted into the 17997 insn list. If a 'define_expand' is used, one of three things happens, 17998 based on the condition logic. The condition logic may manually create 17999 new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'. 18000 For certain named patterns, it may invoke 'FAIL' to tell the compiler to 18001 use an alternate way of performing that task. If it invokes neither 18002 'DONE' nor 'FAIL', the template given in the pattern is inserted, as if 18003 the 'define_expand' were a 'define_insn'. 18004 18005 Once the insn list is generated, various optimization passes convert, 18006 replace, and rearrange the insns in the insn list. This is where the 18007 'define_split' and 'define_peephole' patterns get used, for example. 18008 18009 Finally, the insn list's RTL is matched up with the RTL templates in 18010 the 'define_insn' patterns, and those patterns are used to emit the 18011 final assembly code. For this purpose, each named 'define_insn' acts 18012 like it's unnamed, since the names are ignored. 18013 18014 18015 File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 18016 18017 16.2 Everything about Instruction Patterns 18018 ========================================== 18019 18020 Each instruction pattern contains an incomplete RTL expression, with 18021 pieces to be filled in later, operand constraints that restrict how the 18022 pieces can be filled in, and an output pattern or C code to generate the 18023 assembler output, all wrapped up in a 'define_insn' expression. 18024 18025 A 'define_insn' is an RTL expression containing four or five operands: 18026 18027 1. An optional name. The presence of a name indicate that this 18028 instruction pattern can perform a certain standard job for the 18029 RTL-generation pass of the compiler. This pass knows certain names 18030 and will use the instruction patterns with those names, if the 18031 names are defined in the machine description. 18032 18033 The absence of a name is indicated by writing an empty string where 18034 the name should go. Nameless instruction patterns are never used 18035 for generating RTL code, but they may permit several simpler insns 18036 to be combined later on. 18037 18038 Names that are not thus known and used in RTL-generation have no 18039 effect; they are equivalent to no name at all. 18040 18041 For the purpose of debugging the compiler, you may also specify a 18042 name beginning with the '*' character. Such a name is used only 18043 for identifying the instruction in RTL dumps; it is entirely 18044 equivalent to having a nameless pattern for all other purposes. 18045 18046 2. The "RTL template" (*note RTL Template::) is a vector of incomplete 18047 RTL expressions which show what the instruction should look like. 18048 It is incomplete because it may contain 'match_operand', 18049 'match_operator', and 'match_dup' expressions that stand for 18050 operands of the instruction. 18051 18052 If the vector has only one element, that element is the template 18053 for the instruction pattern. If the vector has multiple elements, 18054 then the instruction pattern is a 'parallel' expression containing 18055 the elements described. 18056 18057 3. A condition. This is a string which contains a C expression that 18058 is the final test to decide whether an insn body matches this 18059 pattern. 18060 18061 For a named pattern, the condition (if present) may not depend on 18062 the data in the insn being matched, but only the 18063 target-machine-type flags. The compiler needs to test these 18064 conditions during initialization in order to learn exactly which 18065 named instructions are available in a particular run. 18066 18067 For nameless patterns, the condition is applied only when matching 18068 an individual insn, and only after the insn has matched the 18069 pattern's recognition template. The insn's operands may be found 18070 in the vector 'operands'. For an insn where the condition has once 18071 matched, it can't be used to control register allocation, for 18072 example by excluding certain hard registers or hard register 18073 combinations. 18074 18075 4. The "output template": a string that says how to output matching 18076 insns as assembler code. '%' in this string specifies where to 18077 substitute the value of an operand. *Note Output Template::. 18078 18079 When simple substitution isn't general enough, you can specify a 18080 piece of C code to compute the output. *Note Output Statement::. 18081 18082 5. Optionally, a vector containing the values of attributes for insns 18083 matching this pattern. *Note Insn Attributes::. 18084 18085 18086 File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 18087 18088 16.3 Example of 'define_insn' 18089 ============================= 18090 18091 Here is an actual example of an instruction pattern, for the 18092 68000/68020. 18093 18094 (define_insn "tstsi" 18095 [(set (cc0) 18096 (match_operand:SI 0 "general_operand" "rm"))] 18097 "" 18098 "* 18099 { 18100 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18101 return \"tstl %0\"; 18102 return \"cmpl #0,%0\"; 18103 }") 18104 18105 This can also be written using braced strings: 18106 18107 (define_insn "tstsi" 18108 [(set (cc0) 18109 (match_operand:SI 0 "general_operand" "rm"))] 18110 "" 18111 { 18112 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18113 return "tstl %0"; 18114 return "cmpl #0,%0"; 18115 }) 18116 18117 This is an instruction that sets the condition codes based on the value 18118 of a general operand. It has no condition, so any insn whose RTL 18119 description has the form shown may be handled according to this pattern. 18120 The name 'tstsi' means "test a 'SImode' value" and tells the RTL 18121 generation pass that, when it is necessary to test such a value, an insn 18122 to do so can be constructed using this pattern. 18123 18124 The output control string is a piece of C code which chooses which 18125 output template to return based on the kind of operand and the specific 18126 type of CPU for which code is being generated. 18127 18128 '"rm"' is an operand constraint. Its meaning is explained below. 18129 18130 18131 File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 18132 18133 16.4 RTL Template 18134 ================= 18135 18136 The RTL template is used to define which insns match the particular 18137 pattern and how to find their operands. For named patterns, the RTL 18138 template also says how to construct an insn from specified operands. 18139 18140 Construction involves substituting specified operands into a copy of 18141 the template. Matching involves determining the values that serve as 18142 the operands in the insn being matched. Both of these activities are 18143 controlled by special expression types that direct matching and 18144 substitution of the operands. 18145 18146 '(match_operand:M N PREDICATE CONSTRAINT)' 18147 This expression is a placeholder for operand number N of the insn. 18148 When constructing an insn, operand number N will be substituted at 18149 this point. When matching an insn, whatever appears at this 18150 position in the insn will be taken as operand number N; but it must 18151 satisfy PREDICATE or this instruction pattern will not match at 18152 all. 18153 18154 Operand numbers must be chosen consecutively counting from zero in 18155 each instruction pattern. There may be only one 'match_operand' 18156 expression in the pattern for each operand number. Usually 18157 operands are numbered in the order of appearance in 'match_operand' 18158 expressions. In the case of a 'define_expand', any operand numbers 18159 used only in 'match_dup' expressions have higher values than all 18160 other operand numbers. 18161 18162 PREDICATE is a string that is the name of a function that accepts 18163 two arguments, an expression and a machine mode. *Note 18164 Predicates::. During matching, the function will be called with 18165 the putative operand as the expression and M as the mode argument 18166 (if M is not specified, 'VOIDmode' will be used, which normally 18167 causes PREDICATE to accept any mode). If it returns zero, this 18168 instruction pattern fails to match. PREDICATE may be an empty 18169 string; then it means no test is to be done on the operand, so 18170 anything which occurs in this position is valid. 18171 18172 Most of the time, PREDICATE will reject modes other than M--but not 18173 always. For example, the predicate 'address_operand' uses M as the 18174 mode of memory ref that the address should be valid for. Many 18175 predicates accept 'const_int' nodes even though their mode is 18176 'VOIDmode'. 18177 18178 CONSTRAINT controls reloading and the choice of the best register 18179 class to use for a value, as explained later (*note Constraints::). 18180 If the constraint would be an empty string, it can be omitted. 18181 18182 People are often unclear on the difference between the constraint 18183 and the predicate. The predicate helps decide whether a given insn 18184 matches the pattern. The constraint plays no role in this 18185 decision; instead, it controls various decisions in the case of an 18186 insn which does match. 18187 18188 '(match_scratch:M N CONSTRAINT)' 18189 This expression is also a placeholder for operand number N and 18190 indicates that operand must be a 'scratch' or 'reg' expression. 18191 18192 When matching patterns, this is equivalent to 18193 18194 (match_operand:M N "scratch_operand" PRED) 18195 18196 but, when generating RTL, it produces a ('scratch':M) expression. 18197 18198 If the last few expressions in a 'parallel' are 'clobber' 18199 expressions whose operands are either a hard register or 18200 'match_scratch', the combiner can add or delete them when 18201 necessary. *Note Side Effects::. 18202 18203 '(match_dup N)' 18204 This expression is also a placeholder for operand number N. It is 18205 used when the operand needs to appear more than once in the insn. 18206 18207 In construction, 'match_dup' acts just like 'match_operand': the 18208 operand is substituted into the insn being constructed. But in 18209 matching, 'match_dup' behaves differently. It assumes that operand 18210 number N has already been determined by a 'match_operand' appearing 18211 earlier in the recognition template, and it matches only an 18212 identical-looking expression. 18213 18214 Note that 'match_dup' should not be used to tell the compiler that 18215 a particular register is being used for two operands (example: 18216 'add' that adds one register to another; the second register is 18217 both an input operand and the output operand). Use a matching 18218 constraint (*note Simple Constraints::) for those. 'match_dup' is 18219 for the cases where one operand is used in two places in the 18220 template, such as an instruction that computes both a quotient and 18221 a remainder, where the opcode takes two input operands but the RTL 18222 template has to refer to each of those twice; once for the quotient 18223 pattern and once for the remainder pattern. 18224 18225 '(match_operator:M N PREDICATE [OPERANDS...])' 18226 This pattern is a kind of placeholder for a variable RTL expression 18227 code. 18228 18229 When constructing an insn, it stands for an RTL expression whose 18230 expression code is taken from that of operand N, and whose operands 18231 are constructed from the patterns OPERANDS. 18232 18233 When matching an expression, it matches an expression if the 18234 function PREDICATE returns nonzero on that expression _and_ the 18235 patterns OPERANDS match the operands of the expression. 18236 18237 Suppose that the function 'commutative_operator' is defined as 18238 follows, to match any expression whose operator is one of the 18239 commutative arithmetic operators of RTL and whose mode is MODE: 18240 18241 int 18242 commutative_integer_operator (x, mode) 18243 rtx x; 18244 enum machine_mode mode; 18245 { 18246 enum rtx_code code = GET_CODE (x); 18247 if (GET_MODE (x) != mode) 18248 return 0; 18249 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 18250 || code == EQ || code == NE); 18251 } 18252 18253 Then the following pattern will match any RTL expression consisting 18254 of a commutative operator applied to two general operands: 18255 18256 (match_operator:SI 3 "commutative_operator" 18257 [(match_operand:SI 1 "general_operand" "g") 18258 (match_operand:SI 2 "general_operand" "g")]) 18259 18260 Here the vector '[OPERANDS...]' contains two patterns because the 18261 expressions to be matched all contain two operands. 18262 18263 When this pattern does match, the two operands of the commutative 18264 operator are recorded as operands 1 and 2 of the insn. (This is 18265 done by the two instances of 'match_operand'.) Operand 3 of the 18266 insn will be the entire commutative expression: use 'GET_CODE 18267 (operands[3])' to see which commutative operator was used. 18268 18269 The machine mode M of 'match_operator' works like that of 18270 'match_operand': it is passed as the second argument to the 18271 predicate function, and that function is solely responsible for 18272 deciding whether the expression to be matched "has" that mode. 18273 18274 When constructing an insn, argument 3 of the gen-function will 18275 specify the operation (i.e. the expression code) for the expression 18276 to be made. It should be an RTL expression, whose expression code 18277 is copied into a new expression whose operands are arguments 1 and 18278 2 of the gen-function. The subexpressions of argument 3 are not 18279 used; only its expression code matters. 18280 18281 When 'match_operator' is used in a pattern for matching an insn, it 18282 usually best if the operand number of the 'match_operator' is 18283 higher than that of the actual operands of the insn. This improves 18284 register allocation because the register allocator often looks at 18285 operands 1 and 2 of insns to see if it can do register tying. 18286 18287 There is no way to specify constraints in 'match_operator'. The 18288 operand of the insn which corresponds to the 'match_operator' never 18289 has any constraints because it is never reloaded as a whole. 18290 However, if parts of its OPERANDS are matched by 'match_operand' 18291 patterns, those parts may have constraints of their own. 18292 18293 '(match_op_dup:M N[OPERANDS...])' 18294 Like 'match_dup', except that it applies to operators instead of 18295 operands. When constructing an insn, operand number N will be 18296 substituted at this point. But in matching, 'match_op_dup' behaves 18297 differently. It assumes that operand number N has already been 18298 determined by a 'match_operator' appearing earlier in the 18299 recognition template, and it matches only an identical-looking 18300 expression. 18301 18302 '(match_parallel N PREDICATE [SUBPAT...])' 18303 This pattern is a placeholder for an insn that consists of a 18304 'parallel' expression with a variable number of elements. This 18305 expression should only appear at the top level of an insn pattern. 18306 18307 When constructing an insn, operand number N will be substituted at 18308 this point. When matching an insn, it matches if the body of the 18309 insn is a 'parallel' expression with at least as many elements as 18310 the vector of SUBPAT expressions in the 'match_parallel', if each 18311 SUBPAT matches the corresponding element of the 'parallel', _and_ 18312 the function PREDICATE returns nonzero on the 'parallel' that is 18313 the body of the insn. It is the responsibility of the predicate to 18314 validate elements of the 'parallel' beyond those listed in the 18315 'match_parallel'. 18316 18317 A typical use of 'match_parallel' is to match load and store 18318 multiple expressions, which can contain a variable number of 18319 elements in a 'parallel'. For example, 18320 18321 (define_insn "" 18322 [(match_parallel 0 "load_multiple_operation" 18323 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 18324 (match_operand:SI 2 "memory_operand" "m")) 18325 (use (reg:SI 179)) 18326 (clobber (reg:SI 179))])] 18327 "" 18328 "loadm 0,0,%1,%2") 18329 18330 This example comes from 'a29k.md'. The function 18331 'load_multiple_operation' is defined in 'a29k.c' and checks that 18332 subsequent elements in the 'parallel' are the same as the 'set' in 18333 the pattern, except that they are referencing subsequent registers 18334 and memory locations. 18335 18336 An insn that matches this pattern might look like: 18337 18338 (parallel 18339 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 18340 (use (reg:SI 179)) 18341 (clobber (reg:SI 179)) 18342 (set (reg:SI 21) 18343 (mem:SI (plus:SI (reg:SI 100) 18344 (const_int 4)))) 18345 (set (reg:SI 22) 18346 (mem:SI (plus:SI (reg:SI 100) 18347 (const_int 8))))]) 18348 18349 '(match_par_dup N [SUBPAT...])' 18350 Like 'match_op_dup', but for 'match_parallel' instead of 18351 'match_operator'. 18352 18353 18354 File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 18355 18356 16.5 Output Templates and Operand Substitution 18357 ============================================== 18358 18359 The "output template" is a string which specifies how to output the 18360 assembler code for an instruction pattern. Most of the template is a 18361 fixed string which is output literally. The character '%' is used to 18362 specify where to substitute an operand; it can also be used to identify 18363 places where different variants of the assembler require different 18364 syntax. 18365 18366 In the simplest case, a '%' followed by a digit N says to output 18367 operand N at that point in the string. 18368 18369 '%' followed by a letter and a digit says to output an operand in an 18370 alternate fashion. Four letters have standard, built-in meanings 18371 described below. The machine description macro 'PRINT_OPERAND' can 18372 define additional letters with nonstandard meanings. 18373 18374 '%cDIGIT' can be used to substitute an operand that is a constant value 18375 without the syntax that normally indicates an immediate operand. 18376 18377 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is 18378 negated before printing. 18379 18380 '%aDIGIT' can be used to substitute an operand as if it were a memory 18381 reference, with the actual operand treated as the address. This may be 18382 useful when outputting a "load address" instruction, because often the 18383 assembler syntax for such an instruction requires you to write the 18384 operand as if it were a memory reference. 18385 18386 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction. 18387 18388 '%=' outputs a number which is unique to each instruction in the entire 18389 compilation. This is useful for making local labels to be referred to 18390 more than once in a single template that generates multiple assembler 18391 instructions. 18392 18393 '%' followed by a punctuation character specifies a substitution that 18394 does not use an operand. Only one case is standard: '%%' outputs a '%' 18395 into the assembler code. Other nonstandard cases can be defined in the 18396 'PRINT_OPERAND' macro. You must also define which punctuation 18397 characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro. 18398 18399 The template may generate multiple assembler instructions. Write the 18400 text for the instructions, with '\;' between them. 18401 18402 When the RTL contains two operands which are required by constraint to 18403 match each other, the output template must refer only to the 18404 lower-numbered operand. Matching operands are not always identical, and 18405 the rest of the compiler arranges to put the proper RTL expression for 18406 printing into the lower-numbered operand. 18407 18408 One use of nonstandard letters or punctuation following '%' is to 18409 distinguish between different assembler languages for the same machine; 18410 for example, Motorola syntax versus MIT syntax for the 68000. Motorola 18411 syntax requires periods in most opcode names, while MIT syntax does not. 18412 For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola 18413 syntax. The same file of patterns is used for both kinds of output 18414 syntax, but the character sequence '%.' is used in each place where 18415 Motorola syntax wants a period. The 'PRINT_OPERAND' macro for Motorola 18416 syntax defines the sequence to output a period; the macro for MIT syntax 18417 defines it to do nothing. 18418 18419 As a special case, a template consisting of the single character '#' 18420 instructs the compiler to first split the insn, and then output the 18421 resulting instructions separately. This helps eliminate redundancy in 18422 the output templates. If you have a 'define_insn' that needs to emit 18423 multiple assembler instructions, and there is a matching 'define_split' 18424 already defined, then you can simply use '#' as the output template 18425 instead of writing an output template that emits the multiple assembler 18426 instructions. 18427 18428 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of 18429 the form '{option0|option1|option2}' in the templates. These describe 18430 multiple variants of assembler language syntax. *Note Instruction 18431 Output::. 18432 18433 18434 File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 18435 18436 16.6 C Statements for Assembler Output 18437 ====================================== 18438 18439 Often a single fixed template string cannot produce correct and 18440 efficient assembler code for all the cases that are recognized by a 18441 single instruction pattern. For example, the opcodes may depend on the 18442 kinds of operands; or some unfortunate combinations of operands may 18443 require extra machine instructions. 18444 18445 If the output control string starts with a '@', then it is actually a 18446 series of templates, each on a separate line. (Blank lines and leading 18447 spaces and tabs are ignored.) The templates correspond to the pattern's 18448 constraint alternatives (*note Multi-Alternative::). For example, if a 18449 target machine has a two-address add instruction 'addr' to add into a 18450 register and another 'addm' to add a register to memory, you might write 18451 this pattern: 18452 18453 (define_insn "addsi3" 18454 [(set (match_operand:SI 0 "general_operand" "=r,m") 18455 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 18456 (match_operand:SI 2 "general_operand" "g,r")))] 18457 "" 18458 "@ 18459 addr %2,%0 18460 addm %2,%0") 18461 18462 If the output control string starts with a '*', then it is not an 18463 output template but rather a piece of C program that should compute a 18464 template. It should execute a 'return' statement to return the 18465 template-string you want. Most such templates use C string literals, 18466 which require doublequote characters to delimit them. To include these 18467 doublequote characters in the string, prefix each one with '\'. 18468 18469 If the output control string is written as a brace block instead of a 18470 double-quoted string, it is automatically assumed to be C code. In that 18471 case, it is not necessary to put in a leading asterisk, or to escape the 18472 doublequotes surrounding C string literals. 18473 18474 The operands may be found in the array 'operands', whose C data type is 18475 'rtx []'. 18476 18477 It is very common to select different ways of generating assembler code 18478 based on whether an immediate operand is within a certain range. Be 18479 careful when doing this, because the result of 'INTVAL' is an integer on 18480 the host machine. If the host machine has more bits in an 'int' than 18481 the target machine has in the mode in which the constant will be used, 18482 then some of the bits you get from 'INTVAL' will be superfluous. For 18483 proper results, you must carefully disregard the values of those bits. 18484 18485 It is possible to output an assembler instruction and then go on to 18486 output or compute more of them, using the subroutine 'output_asm_insn'. 18487 This receives two arguments: a template-string and a vector of operands. 18488 The vector may be 'operands', or it may be another array of 'rtx' that 18489 you declare locally and initialize yourself. 18490 18491 When an insn pattern has multiple alternatives in its constraints, 18492 often the appearance of the assembler code is determined mostly by which 18493 alternative was matched. When this is so, the C code can test the 18494 variable 'which_alternative', which is the ordinal number of the 18495 alternative that was actually satisfied (0 for the first, 1 for the 18496 second alternative, etc.). 18497 18498 For example, suppose there are two opcodes for storing zero, 'clrreg' 18499 for registers and 'clrmem' for memory locations. Here is how a pattern 18500 could use 'which_alternative' to choose between them: 18501 18502 (define_insn "" 18503 [(set (match_operand:SI 0 "general_operand" "=r,m") 18504 (const_int 0))] 18505 "" 18506 { 18507 return (which_alternative == 0 18508 ? "clrreg %0" : "clrmem %0"); 18509 }) 18510 18511 The example above, where the assembler code to generate was _solely_ 18512 determined by the alternative, could also have been specified as 18513 follows, having the output control string start with a '@': 18514 18515 (define_insn "" 18516 [(set (match_operand:SI 0 "general_operand" "=r,m") 18517 (const_int 0))] 18518 "" 18519 "@ 18520 clrreg %0 18521 clrmem %0") 18522 18523 If you just need a little bit of C code in one (or a few) alternatives, 18524 you can use '*' inside of a '@' multi-alternative template: 18525 18526 (define_insn "" 18527 [(set (match_operand:SI 0 "general_operand" "=r,<,m") 18528 (const_int 0))] 18529 "" 18530 "@ 18531 clrreg %0 18532 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\"; 18533 clrmem %0") 18534 18535 18536 File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 18537 18538 16.7 Predicates 18539 =============== 18540 18541 A predicate determines whether a 'match_operand' or 'match_operator' 18542 expression matches, and therefore whether the surrounding instruction 18543 pattern will be used for that combination of operands. GCC has a number 18544 of machine-independent predicates, and you can define machine-specific 18545 predicates as needed. By convention, predicates used with 18546 'match_operand' have names that end in '_operand', and those used with 18547 'match_operator' have names that end in '_operator'. 18548 18549 All predicates are Boolean functions (in the mathematical sense) of two 18550 arguments: the RTL expression that is being considered at that position 18551 in the instruction pattern, and the machine mode that the 18552 'match_operand' or 'match_operator' specifies. In this section, the 18553 first argument is called OP and the second argument MODE. Predicates 18554 can be called from C as ordinary two-argument functions; this can be 18555 useful in output templates or other machine-specific code. 18556 18557 Operand predicates can allow operands that are not actually acceptable 18558 to the hardware, as long as the constraints give reload the ability to 18559 fix them up (*note Constraints::). However, GCC will usually generate 18560 better code if the predicates specify the requirements of the machine 18561 instructions as closely as possible. Reload cannot fix up operands that 18562 must be constants ("immediate operands"); you must use a predicate that 18563 allows only constants, or else enforce the requirement in the extra 18564 condition. 18565 18566 Most predicates handle their MODE argument in a uniform manner. If 18567 MODE is 'VOIDmode' (unspecified), then OP can have any mode. If MODE is 18568 anything else, then OP must have the same mode, unless OP is a 18569 'CONST_INT' or integer 'CONST_DOUBLE'. These RTL expressions always 18570 have 'VOIDmode', so it would be counterproductive to check that their 18571 mode matches. Instead, predicates that accept 'CONST_INT' and/or 18572 integer 'CONST_DOUBLE' check that the value stored in the constant will 18573 fit in the requested mode. 18574 18575 Predicates with this behavior are called "normal". 'genrecog' can 18576 optimize the instruction recognizer based on knowledge of how normal 18577 predicates treat modes. It can also diagnose certain kinds of common 18578 errors in the use of normal predicates; for instance, it is almost 18579 always an error to use a normal predicate without specifying a mode. 18580 18581 Predicates that do something different with their MODE argument are 18582 called "special". The generic predicates 'address_operand' and 18583 'pmode_register_operand' are special predicates. 'genrecog' does not do 18584 any optimizations or diagnosis when special predicates are used. 18585 18586 * Menu: 18587 18588 * Machine-Independent Predicates:: Predicates available to all back ends. 18589 * Defining Predicates:: How to write machine-specific predicate 18590 functions. 18591 18592 18593 File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 18594 18595 16.7.1 Machine-Independent Predicates 18596 ------------------------------------- 18597 18598 These are the generic predicates available to all back ends. They are 18599 defined in 'recog.c'. The first category of predicates allow only 18600 constant, or "immediate", operands. 18601 18602 -- Function: immediate_operand 18603 This predicate allows any sort of constant that fits in MODE. It 18604 is an appropriate choice for instructions that take operands that 18605 must be constant. 18606 18607 -- Function: const_int_operand 18608 This predicate allows any 'CONST_INT' expression that fits in MODE. 18609 It is an appropriate choice for an immediate operand that does not 18610 allow a symbol or label. 18611 18612 -- Function: const_double_operand 18613 This predicate accepts any 'CONST_DOUBLE' expression that has 18614 exactly MODE. If MODE is 'VOIDmode', it will also accept 18615 'CONST_INT'. It is intended for immediate floating point 18616 constants. 18617 18618 The second category of predicates allow only some kind of machine 18619 register. 18620 18621 -- Function: register_operand 18622 This predicate allows any 'REG' or 'SUBREG' expression that is 18623 valid for MODE. It is often suitable for arithmetic instruction 18624 operands on a RISC machine. 18625 18626 -- Function: pmode_register_operand 18627 This is a slight variant on 'register_operand' which works around a 18628 limitation in the machine-description reader. 18629 18630 (match_operand N "pmode_register_operand" CONSTRAINT) 18631 18632 means exactly what 18633 18634 (match_operand:P N "register_operand" CONSTRAINT) 18635 18636 would mean, if the machine-description reader accepted ':P' mode 18637 suffixes. Unfortunately, it cannot, because 'Pmode' is an alias 18638 for some other mode, and might vary with machine-specific options. 18639 *Note Misc::. 18640 18641 -- Function: scratch_operand 18642 This predicate allows hard registers and 'SCRATCH' expressions, but 18643 not pseudo-registers. It is used internally by 'match_scratch'; it 18644 should not be used directly. 18645 18646 The third category of predicates allow only some kind of memory 18647 reference. 18648 18649 -- Function: memory_operand 18650 This predicate allows any valid reference to a quantity of mode 18651 MODE in memory, as determined by the weak form of 18652 'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 18653 18654 -- Function: address_operand 18655 This predicate is a little unusual; it allows any operand that is a 18656 valid expression for the _address_ of a quantity of mode MODE, 18657 again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'. 18658 To first order, if '(mem:MODE (EXP))' is acceptable to 18659 'memory_operand', then EXP is acceptable to 'address_operand'. 18660 Note that EXP does not necessarily have the mode MODE. 18661 18662 -- Function: indirect_operand 18663 This is a stricter form of 'memory_operand' which allows only 18664 memory references with a 'general_operand' as the address 18665 expression. New uses of this predicate are discouraged, because 18666 'general_operand' is very permissive, so it's hard to tell what an 18667 'indirect_operand' does or does not allow. If a target has 18668 different requirements for memory operands for different 18669 instructions, it is better to define target-specific predicates 18670 which enforce the hardware's requirements explicitly. 18671 18672 -- Function: push_operand 18673 This predicate allows a memory reference suitable for pushing a 18674 value onto the stack. This will be a 'MEM' which refers to 18675 'stack_pointer_rtx', with a side-effect in its address expression 18676 (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE' 18677 macro (*note Frame Layout::). 18678 18679 -- Function: pop_operand 18680 This predicate allows a memory reference suitable for popping a 18681 value off the stack. Again, this will be a 'MEM' referring to 18682 'stack_pointer_rtx', with a side-effect in its address expression. 18683 However, this time 'STACK_POP_CODE' is expected. 18684 18685 The fourth category of predicates allow some combination of the above 18686 operands. 18687 18688 -- Function: nonmemory_operand 18689 This predicate allows any immediate or register operand valid for 18690 MODE. 18691 18692 -- Function: nonimmediate_operand 18693 This predicate allows any register or memory operand valid for 18694 MODE. 18695 18696 -- Function: general_operand 18697 This predicate allows any immediate, register, or memory operand 18698 valid for MODE. 18699 18700 Finally, there are two generic operator predicates. 18701 18702 -- Function: comparison_operator 18703 This predicate matches any expression which performs an arithmetic 18704 comparison in MODE; that is, 'COMPARISON_P' is true for the 18705 expression code. 18706 18707 -- Function: ordered_comparison_operator 18708 This predicate matches any expression which performs an arithmetic 18709 comparison in MODE and whose expression code is valid for integer 18710 modes; that is, the expression code will be one of 'eq', 'ne', 18711 'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'. 18712 18713 18714 File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 18715 18716 16.7.2 Defining Machine-Specific Predicates 18717 ------------------------------------------- 18718 18719 Many machines have requirements for their operands that cannot be 18720 expressed precisely using the generic predicates. You can define 18721 additional predicates using 'define_predicate' and 18722 'define_special_predicate' expressions. These expressions have three 18723 operands: 18724 18725 * The name of the predicate, as it will be referred to in 18726 'match_operand' or 'match_operator' expressions. 18727 18728 * An RTL expression which evaluates to true if the predicate allows 18729 the operand OP, false if it does not. This expression can only use 18730 the following RTL codes: 18731 18732 'MATCH_OPERAND' 18733 When written inside a predicate expression, a 'MATCH_OPERAND' 18734 expression evaluates to true if the predicate it names would 18735 allow OP. The operand number and constraint are ignored. Due 18736 to limitations in 'genrecog', you can only refer to generic 18737 predicates and predicates that have already been defined. 18738 18739 'MATCH_CODE' 18740 This expression evaluates to true if OP or a specified 18741 subexpression of OP has one of a given list of RTX codes. 18742 18743 The first operand of this expression is a string constant 18744 containing a comma-separated list of RTX code names (in lower 18745 case). These are the codes for which the 'MATCH_CODE' will be 18746 true. 18747 18748 The second operand is a string constant which indicates what 18749 subexpression of OP to examine. If it is absent or the empty 18750 string, OP itself is examined. Otherwise, the string constant 18751 must be a sequence of digits and/or lowercase letters. Each 18752 character indicates a subexpression to extract from the 18753 current expression; for the first character this is OP, for 18754 the second and subsequent characters it is the result of the 18755 previous character. A digit N extracts 'XEXP (E, N)'; a 18756 letter L extracts 'XVECEXP (E, 0, N)' where N is the 18757 alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on). 18758 The 'MATCH_CODE' then examines the RTX code of the 18759 subexpression extracted by the complete string. It is not 18760 possible to extract components of an 'rtvec' that is not at 18761 position 0 within its RTX object. 18762 18763 'MATCH_TEST' 18764 This expression has one operand, a string constant containing 18765 a C expression. The predicate's arguments, OP and MODE, are 18766 available with those names in the C expression. The 18767 'MATCH_TEST' evaluates to true if the C expression evaluates 18768 to a nonzero value. 'MATCH_TEST' expressions must not have 18769 side effects. 18770 18771 'AND' 18772 'IOR' 18773 'NOT' 18774 'IF_THEN_ELSE' 18775 The basic 'MATCH_' expressions can be combined using these 18776 logical operators, which have the semantics of the C operators 18777 '&&', '||', '!', and '? :' respectively. As in Common Lisp, 18778 you may give an 'AND' or 'IOR' expression an arbitrary number 18779 of arguments; this has exactly the same effect as writing a 18780 chain of two-argument 'AND' or 'IOR' expressions. 18781 18782 * An optional block of C code, which should execute 'return true' if 18783 the predicate is found to match and 'return false' if it does not. 18784 It must not have any side effects. The predicate arguments, OP and 18785 MODE, are available with those names. 18786 18787 If a code block is present in a predicate definition, then the RTL 18788 expression must evaluate to true _and_ the code block must execute 18789 'return true' for the predicate to allow the operand. The RTL 18790 expression is evaluated first; do not re-check anything in the code 18791 block that was checked in the RTL expression. 18792 18793 The program 'genrecog' scans 'define_predicate' and 18794 'define_special_predicate' expressions to determine which RTX codes are 18795 possibly allowed. You should always make this explicit in the RTL 18796 predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'. 18797 18798 Here is an example of a simple predicate definition, from the IA64 18799 machine description: 18800 18801 ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section. 18802 (define_predicate "small_addr_symbolic_operand" 18803 (and (match_code "symbol_ref") 18804 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 18805 18806 And here is another, showing the use of the C block. 18807 18808 ;; True if OP is a register operand that is (or could be) a GR reg. 18809 (define_predicate "gr_register_operand" 18810 (match_operand 0 "register_operand") 18811 { 18812 unsigned int regno; 18813 if (GET_CODE (op) == SUBREG) 18814 op = SUBREG_REG (op); 18815 18816 regno = REGNO (op); 18817 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 18818 }) 18819 18820 Predicates written with 'define_predicate' automatically include a test 18821 that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a 18822 'CONST_INT' or 'CONST_DOUBLE'. They do _not_ check specifically for 18823 integer 'CONST_DOUBLE', nor do they test that the value of either kind 18824 of constant fits in the requested mode. This is because target-specific 18825 predicates that take constants usually have to do more stringent value 18826 checks anyway. If you need the exact same treatment of 'CONST_INT' or 18827 'CONST_DOUBLE' that the generic predicates provide, use a 18828 'MATCH_OPERAND' subexpression to call 'const_int_operand', 18829 'const_double_operand', or 'immediate_operand'. 18830 18831 Predicates written with 'define_special_predicate' do not get any 18832 automatic mode checks, and are treated as having special mode handling 18833 by 'genrecog'. 18834 18835 The program 'genpreds' is responsible for generating code to test 18836 predicates. It also writes a header file containing function 18837 declarations for all machine-specific predicates. It is not necessary 18838 to declare these predicates in 'CPU-protos.h'. 18839 18840 18841 File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 18842 18843 16.8 Operand Constraints 18844 ======================== 18845 18846 Each 'match_operand' in an instruction pattern can specify constraints 18847 for the operands allowed. The constraints allow you to fine-tune 18848 matching within the set of operands allowed by the predicate. 18849 18850 Constraints can say whether an operand may be in a register, and which 18851 kinds of register; whether the operand can be a memory reference, and 18852 which kinds of address; whether the operand may be an immediate 18853 constant, and which possible values it may have. Constraints can also 18854 require two operands to match. Side-effects aren't allowed in operands 18855 of inline 'asm', unless '<' or '>' constraints are used, because there 18856 is no guarantee that the side-effects will happen exactly once in an 18857 instruction that can update the addressing register. 18858 18859 * Menu: 18860 18861 * Simple Constraints:: Basic use of constraints. 18862 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 18863 * Class Preferences:: Constraints guide which hard register to put things in. 18864 * Modifiers:: More precise control over effects of constraints. 18865 * Machine Constraints:: Existing constraints for some particular machines. 18866 * Disable Insn Alternatives:: Disable insn alternatives using the 'enabled' attribute. 18867 * Define Constraints:: How to define machine-specific constraints. 18868 * C Constraint Interface:: How to test constraints from C code. 18869 18870 18871 File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 18872 18873 16.8.1 Simple Constraints 18874 ------------------------- 18875 18876 The simplest kind of constraint is a string full of letters, each of 18877 which describes one kind of operand that is permitted. Here are the 18878 letters that are allowed: 18879 18880 whitespace 18881 Whitespace characters are ignored and can be inserted at any 18882 position except the first. This enables each alternative for 18883 different operands to be visually aligned in the machine 18884 description even if they have different number of constraints and 18885 modifiers. 18886 18887 'm' 18888 A memory operand is allowed, with any kind of address that the 18889 machine supports in general. Note that the letter used for the 18890 general memory constraint can be re-defined by a back end using the 18891 'TARGET_MEM_CONSTRAINT' macro. 18892 18893 'o' 18894 A memory operand is allowed, but only if the address is 18895 "offsettable". This means that adding a small integer (actually, 18896 the width in bytes of the operand, as determined by its machine 18897 mode) may be added to the address and the result is also a valid 18898 memory address. 18899 18900 For example, an address which is constant is offsettable; so is an 18901 address that is the sum of a register and a constant (as long as a 18902 slightly larger constant is also within the range of 18903 address-offsets supported by the machine); but an autoincrement or 18904 autodecrement address is not offsettable. More complicated 18905 indirect/indexed addresses may or may not be offsettable depending 18906 on the other addressing modes that the machine supports. 18907 18908 Note that in an output operand which can be matched by another 18909 operand, the constraint letter 'o' is valid only when accompanied 18910 by both '<' (if the target machine has predecrement addressing) and 18911 '>' (if the target machine has preincrement addressing). 18912 18913 'V' 18914 A memory operand that is not offsettable. In other words, anything 18915 that would fit the 'm' constraint but not the 'o' constraint. 18916 18917 '<' 18918 A memory operand with autodecrement addressing (either predecrement 18919 or postdecrement) is allowed. In inline 'asm' this constraint is 18920 only allowed if the operand is used exactly once in an instruction 18921 that can handle the side-effects. Not using an operand with '<' in 18922 constraint string in the inline 'asm' pattern at all or using it in 18923 multiple instructions isn't valid, because the side-effects 18924 wouldn't be performed or would be performed more than once. 18925 Furthermore, on some targets the operand with '<' in constraint 18926 string must be accompanied by special instruction suffixes like 18927 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 18928 18929 '>' 18930 A memory operand with autoincrement addressing (either preincrement 18931 or postincrement) is allowed. In inline 'asm' the same 18932 restrictions as for '<' apply. 18933 18934 'r' 18935 A register operand is allowed provided that it is in a general 18936 register. 18937 18938 'i' 18939 An immediate integer operand (one with constant value) is allowed. 18940 This includes symbolic constants whose values will be known only at 18941 assembly time or later. 18942 18943 'n' 18944 An immediate integer operand with a known numeric value is allowed. 18945 Many systems cannot support assembly-time constants for operands 18946 less than a word wide. Constraints for these operands should use 18947 'n' rather than 'i'. 18948 18949 'I', 'J', 'K', ... 'P' 18950 Other letters in the range 'I' through 'P' may be defined in a 18951 machine-dependent fashion to permit immediate integer operands with 18952 explicit integer values in specified ranges. For example, on the 18953 68000, 'I' is defined to stand for the range of values 1 to 8. 18954 This is the range permitted as a shift count in the shift 18955 instructions. 18956 18957 'E' 18958 An immediate floating operand (expression code 'const_double') is 18959 allowed, but only if the target floating point format is the same 18960 as that of the host machine (on which the compiler is running). 18961 18962 'F' 18963 An immediate floating operand (expression code 'const_double' or 18964 'const_vector') is allowed. 18965 18966 'G', 'H' 18967 'G' and 'H' may be defined in a machine-dependent fashion to permit 18968 immediate floating operands in particular ranges of values. 18969 18970 's' 18971 An immediate integer operand whose value is not an explicit integer 18972 is allowed. 18973 18974 This might appear strange; if an insn allows a constant operand 18975 with a value not known at compile time, it certainly must allow any 18976 known value. So why use 's' instead of 'i'? Sometimes it allows 18977 better code to be generated. 18978 18979 For example, on the 68000 in a fullword instruction it is possible 18980 to use an immediate operand; but if the immediate value is between 18981 -128 and 127, better code results from loading the value into a 18982 register and using the register. This is because the load into the 18983 register can be done with a 'moveq' instruction. We arrange for 18984 this to happen by defining the letter 'K' to mean "any integer 18985 outside the range -128 to 127", and then specifying 'Ks' in the 18986 operand constraints. 18987 18988 'g' 18989 Any register, memory or immediate integer operand is allowed, 18990 except for registers that are not general registers. 18991 18992 'X' 18993 Any operand whatsoever is allowed, even if it does not satisfy 18994 'general_operand'. This is normally used in the constraint of a 18995 'match_scratch' when certain alternatives will not actually require 18996 a scratch register. 18997 18998 '0', '1', '2', ... '9' 18999 An operand that matches the specified operand number is allowed. 19000 If a digit is used together with letters within the same 19001 alternative, the digit should come last. 19002 19003 This number is allowed to be more than a single digit. If multiple 19004 digits are encountered consecutively, they are interpreted as a 19005 single decimal integer. There is scant chance for ambiguity, since 19006 to-date it has never been desirable that '10' be interpreted as 19007 matching either operand 1 _or_ operand 0. Should this be desired, 19008 one can use multiple alternatives instead. 19009 19010 This is called a "matching constraint" and what it really means is 19011 that the assembler has only a single operand that fills two roles 19012 considered separate in the RTL insn. For example, an add insn has 19013 two input operands and one output operand in the RTL, but on most 19014 CISC machines an add instruction really has only two operands, one 19015 of them an input-output operand: 19016 19017 addl #35,r12 19018 19019 Matching constraints are used in these circumstances. More 19020 precisely, the two operands that match must include one input-only 19021 operand and one output-only operand. Moreover, the digit must be a 19022 smaller number than the number of the operand that uses it in the 19023 constraint. 19024 19025 For operands to match in a particular case usually means that they 19026 are identical-looking RTL expressions. But in a few special cases 19027 specific kinds of dissimilarity are allowed. For example, '*x' as 19028 an input operand will match '*x++' as an output operand. For 19029 proper results in such cases, the output template should always use 19030 the output-operand's number when printing the operand. 19031 19032 'p' 19033 An operand that is a valid memory address is allowed. This is for 19034 "load address" and "push address" instructions. 19035 19036 'p' in the constraint must be accompanied by 'address_operand' as 19037 the predicate in the 'match_operand'. This predicate interprets 19038 the mode specified in the 'match_operand' as the mode of the memory 19039 reference for which the address would be valid. 19040 19041 OTHER-LETTERS 19042 Other letters can be defined in machine-dependent fashion to stand 19043 for particular classes of registers or other arbitrary operand 19044 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 19045 for data, address and floating point registers. 19046 19047 In order to have valid assembler code, each operand must satisfy its 19048 constraint. But a failure to do so does not prevent the pattern from 19049 applying to an insn. Instead, it directs the compiler to modify the 19050 code so that the constraint will be satisfied. Usually this is done by 19051 copying an operand into a register. 19052 19053 Contrast, therefore, the two instruction patterns that follow: 19054 19055 (define_insn "" 19056 [(set (match_operand:SI 0 "general_operand" "=r") 19057 (plus:SI (match_dup 0) 19058 (match_operand:SI 1 "general_operand" "r")))] 19059 "" 19060 "...") 19061 19062 which has two operands, one of which must appear in two places, and 19063 19064 (define_insn "" 19065 [(set (match_operand:SI 0 "general_operand" "=r") 19066 (plus:SI (match_operand:SI 1 "general_operand" "0") 19067 (match_operand:SI 2 "general_operand" "r")))] 19068 "" 19069 "...") 19070 19071 which has three operands, two of which are required by a constraint to 19072 be identical. If we are considering an insn of the form 19073 19074 (insn N PREV NEXT 19075 (set (reg:SI 3) 19076 (plus:SI (reg:SI 6) (reg:SI 109))) 19077 ...) 19078 19079 the first pattern would not apply at all, because this insn does not 19080 contain two identical subexpressions in the right place. The pattern 19081 would say, "That does not look like an add instruction; try other 19082 patterns". The second pattern would say, "Yes, that's an add 19083 instruction, but there is something wrong with it". It would direct the 19084 reload pass of the compiler to generate additional insns to make the 19085 constraint true. The results might look like this: 19086 19087 (insn N2 PREV N 19088 (set (reg:SI 3) (reg:SI 6)) 19089 ...) 19090 19091 (insn N N2 NEXT 19092 (set (reg:SI 3) 19093 (plus:SI (reg:SI 3) (reg:SI 109))) 19094 ...) 19095 19096 It is up to you to make sure that each operand, in each pattern, has 19097 constraints that can handle any RTL expression that could be present for 19098 that operand. (When multiple alternatives are in use, each pattern 19099 must, for each possible combination of operand expressions, have at 19100 least one alternative which can handle that combination of operands.) 19101 The constraints don't need to _allow_ any possible operand--when this is 19102 the case, they do not constrain--but they must at least point the way to 19103 reloading any possible operand so that it will fit. 19104 19105 * If the constraint accepts whatever operands the predicate permits, 19106 there is no problem: reloading is never necessary for this operand. 19107 19108 For example, an operand whose constraints permit everything except 19109 registers is safe provided its predicate rejects registers. 19110 19111 An operand whose predicate accepts only constant values is safe 19112 provided its constraints include the letter 'i'. If any possible 19113 constant value is accepted, then nothing less than 'i' will do; if 19114 the predicate is more selective, then the constraints may also be 19115 more selective. 19116 19117 * Any operand expression can be reloaded by copying it into a 19118 register. So if an operand's constraints allow some kind of 19119 register, it is certain to be safe. It need not permit all classes 19120 of registers; the compiler knows how to copy a register into 19121 another register of the proper class in order to make an 19122 instruction valid. 19123 19124 * A nonoffsettable memory reference can be reloaded by copying the 19125 address into a register. So if the constraint uses the letter 'o', 19126 all memory references are taken care of. 19127 19128 * A constant operand can be reloaded by allocating space in memory to 19129 hold it as preinitialized data. Then the memory reference can be 19130 used in place of the constant. So if the constraint uses the 19131 letters 'o' or 'm', constant operands are not a problem. 19132 19133 * If the constraint permits a constant and a pseudo register used in 19134 an insn was not allocated to a hard register and is equivalent to a 19135 constant, the register will be replaced with the constant. If the 19136 predicate does not permit a constant and the insn is re-recognized 19137 for some reason, the compiler will crash. Thus the predicate must 19138 always recognize any objects allowed by the constraint. 19139 19140 If the operand's predicate can recognize registers, but the constraint 19141 does not permit them, it can make the compiler crash. When this operand 19142 happens to be a register, the reload pass will be stymied, because it 19143 does not know how to copy a register temporarily into memory. 19144 19145 If the predicate accepts a unary operator, the constraint applies to 19146 the operand. For example, the MIPS processor at ISA level 3 supports an 19147 instruction which adds two registers in 'SImode' to produce a 'DImode' 19148 result, but only if the registers are correctly sign extended. This 19149 predicate for the input operands accepts a 'sign_extend' of an 'SImode' 19150 register. Write the constraint to indicate the type of register that is 19151 required for the operand of the 'sign_extend'. 19152 19153 19154 File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 19155 19156 16.8.2 Multiple Alternative Constraints 19157 --------------------------------------- 19158 19159 Sometimes a single instruction has multiple alternative sets of possible 19160 operands. For example, on the 68000, a logical-or instruction can 19161 combine register or an immediate value into memory, or it can combine 19162 any kind of operand into a register; but it cannot combine one memory 19163 location into another. 19164 19165 These constraints are represented as multiple alternatives. An 19166 alternative can be described by a series of letters for each operand. 19167 The overall constraint for an operand is made from the letters for this 19168 operand from the first alternative, a comma, the letters for this 19169 operand from the second alternative, a comma, and so on until the last 19170 alternative. Here is how it is done for fullword logical-or on the 19171 68000: 19172 19173 (define_insn "iorsi3" 19174 [(set (match_operand:SI 0 "general_operand" "=m,d") 19175 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 19176 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 19177 ...) 19178 19179 The first alternative has 'm' (memory) for operand 0, '0' for operand 1 19180 (meaning it must match operand 0), and 'dKs' for operand 2. The second 19181 alternative has 'd' (data register) for operand 0, '0' for operand 1, 19182 and 'dmKs' for operand 2. The '=' and '%' in the constraints apply to 19183 all the alternatives; their meaning is explained in the next section 19184 (*note Class Preferences::). 19185 19186 If all the operands fit any one alternative, the instruction is valid. 19187 Otherwise, for each alternative, the compiler counts how many 19188 instructions must be added to copy the operands so that that alternative 19189 applies. The alternative requiring the least copying is chosen. If two 19190 alternatives need the same amount of copying, the one that comes first 19191 is chosen. These choices can be altered with the '?' and '!' 19192 characters: 19193 19194 '?' 19195 Disparage slightly the alternative that the '?' appears in, as a 19196 choice when no alternative applies exactly. The compiler regards 19197 this alternative as one unit more costly for each '?' that appears 19198 in it. 19199 19200 '!' 19201 Disparage severely the alternative that the '!' appears in. This 19202 alternative can still be used if it fits without reloading, but if 19203 reloading is needed, some other alternative will be used. 19204 19205 When an insn pattern has multiple alternatives in its constraints, 19206 often the appearance of the assembler code is determined mostly by which 19207 alternative was matched. When this is so, the C code for writing the 19208 assembler code can use the variable 'which_alternative', which is the 19209 ordinal number of the alternative that was actually satisfied (0 for the 19210 first, 1 for the second alternative, etc.). *Note Output Statement::. 19211 19212 19213 File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 19214 19215 16.8.3 Register Class Preferences 19216 --------------------------------- 19217 19218 The operand constraints have another function: they enable the compiler 19219 to decide which kind of hardware register a pseudo register is best 19220 allocated to. The compiler examines the constraints that apply to the 19221 insns that use the pseudo register, looking for the machine-dependent 19222 letters such as 'd' and 'a' that specify classes of registers. The 19223 pseudo register is put in whichever class gets the most "votes". The 19224 constraint letters 'g' and 'r' also vote: they vote in favor of a 19225 general register. The machine description says which registers are 19226 considered general. 19227 19228 Of course, on some machines all registers are equivalent, and no 19229 register classes are defined. Then none of this complexity is relevant. 19230 19231 19232 File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 19233 19234 16.8.4 Constraint Modifier Characters 19235 ------------------------------------- 19236 19237 Here are constraint modifier characters. 19238 19239 '=' 19240 Means that this operand is write-only for this instruction: the 19241 previous value is discarded and replaced by output data. 19242 19243 '+' 19244 Means that this operand is both read and written by the 19245 instruction. 19246 19247 When the compiler fixes up the operands to satisfy the constraints, 19248 it needs to know which operands are inputs to the instruction and 19249 which are outputs from it. '=' identifies an output; '+' 19250 identifies an operand that is both input and output; all other 19251 operands are assumed to be input only. 19252 19253 If you specify '=' or '+' in a constraint, you put it in the first 19254 character of the constraint string. 19255 19256 '&' 19257 Means (in a particular alternative) that this operand is an 19258 "earlyclobber" operand, which is modified before the instruction is 19259 finished using the input operands. Therefore, this operand may not 19260 lie in a register that is used as an input operand or as part of 19261 any memory address. 19262 19263 '&' applies only to the alternative in which it is written. In 19264 constraints with multiple alternatives, sometimes one alternative 19265 requires '&' while others do not. See, for example, the 'movdf' 19266 insn of the 68000. 19267 19268 An input operand can be tied to an earlyclobber operand if its only 19269 use as an input occurs before the early result is written. Adding 19270 alternatives of this form often allows GCC to produce better code 19271 when only some of the inputs can be affected by the earlyclobber. 19272 See, for example, the 'mulsi3' insn of the ARM. 19273 19274 '&' does not obviate the need to write '='. 19275 19276 '%' 19277 Declares the instruction to be commutative for this operand and the 19278 following operand. This means that the compiler may interchange 19279 the two operands if that is the cheapest way to make all operands 19280 fit the constraints. This is often used in patterns for addition 19281 instructions that really have only two operands: the result must go 19282 in one of the arguments. Here for example, is how the 68000 19283 halfword-add instruction is defined: 19284 19285 (define_insn "addhi3" 19286 [(set (match_operand:HI 0 "general_operand" "=m,r") 19287 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 19288 (match_operand:HI 2 "general_operand" "di,g")))] 19289 ...) 19290 GCC can only handle one commutative pair in an asm; if you use 19291 more, the compiler may fail. Note that you need not use the 19292 modifier if the two alternatives are strictly identical; this would 19293 only waste time in the reload pass. The modifier is not 19294 operational after register allocation, so the result of 19295 'define_peephole2' and 'define_split's performed after reload 19296 cannot rely on '%' to make the intended insn match. 19297 19298 '#' 19299 Says that all following characters, up to the next comma, are to be 19300 ignored as a constraint. They are significant only for choosing 19301 register preferences. 19302 19303 '*' 19304 Says that the following character should be ignored when choosing 19305 register preferences. '*' has no effect on the meaning of the 19306 constraint as a constraint, and no effect on reloading. For LRA 19307 '*' additionally disparages slightly the alternative if the 19308 following character matches the operand. 19309 19310 Here is an example: the 68000 has an instruction to sign-extend a 19311 halfword in a data register, and can also sign-extend a value by 19312 copying it into an address register. While either kind of register 19313 is acceptable, the constraints on an address-register destination 19314 are less strict, so it is best if register allocation makes an 19315 address register its goal. Therefore, '*' is used so that the 'd' 19316 constraint letter (for data register) is ignored when computing 19317 register preferences. 19318 19319 (define_insn "extendhisi2" 19320 [(set (match_operand:SI 0 "general_operand" "=*d,a") 19321 (sign_extend:SI 19322 (match_operand:HI 1 "general_operand" "0,g")))] 19323 ...) 19324 19325 19326 File: gccint.info, Node: Machine Constraints, Next: Disable Insn Alternatives, Prev: Modifiers, Up: Constraints 19327 19328 16.8.5 Constraints for Particular Machines 19329 ------------------------------------------ 19330 19331 Whenever possible, you should use the general-purpose constraint letters 19332 in 'asm' arguments, since they will convey meaning more readily to 19333 people reading your code. Failing that, use the constraint letters that 19334 usually have very similar meanings across architectures. The most 19335 commonly used constraints are 'm' and 'r' (for memory and 19336 general-purpose registers respectively; *note Simple Constraints::), and 19337 'I', usually the letter indicating the most common immediate-constant 19338 format. 19339 19340 Each architecture defines additional constraints. These constraints 19341 are used by the compiler itself for instruction generation, as well as 19342 for 'asm' statements; therefore, some of the constraints are not 19343 particularly useful for 'asm'. Here is a summary of some of the 19344 machine-dependent constraints available on some particular machines; it 19345 includes both constraints that are useful for 'asm' and constraints that 19346 aren't. The compiler source file mentioned in the table heading for 19347 each architecture is the definitive reference for the meanings of that 19348 architecture's constraints. 19349 19350 _AArch64 family--'config/aarch64/constraints.md'_ 19351 'k' 19352 The stack pointer register ('SP') 19353 19354 'w' 19355 Floating point or SIMD vector register 19356 19357 'I' 19358 Integer constant that is valid as an immediate operand in an 19359 'ADD' instruction 19360 19361 'J' 19362 Integer constant that is valid as an immediate operand in a 19363 'SUB' instruction (once negated) 19364 19365 'K' 19366 Integer constant that can be used with a 32-bit logical 19367 instruction 19368 19369 'L' 19370 Integer constant that can be used with a 64-bit logical 19371 instruction 19372 19373 'M' 19374 Integer constant that is valid as an immediate operand in a 19375 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 19376 to one of several different machine instructions depending on 19377 the value 19378 19379 'N' 19380 Integer constant that is valid as an immediate operand in a 19381 64-bit 'MOV' pseudo instruction 19382 19383 'S' 19384 An absolute symbolic address or a label reference 19385 19386 'Y' 19387 Floating point constant zero 19388 19389 'Z' 19390 Integer constant zero 19391 19392 'Usa' 19393 An absolute symbolic address 19394 19395 'Ush' 19396 The high part (bits 12 and upwards) of the pc-relative address 19397 of a symbol within 4GB of the instruction 19398 19399 'Q' 19400 A memory address which uses a single base register with no 19401 offset 19402 19403 'Ump' 19404 A memory address suitable for a load/store pair instruction in 19405 SI, DI, SF and DF modes 19406 19407 _ARM family--'config/arm/constraints.md'_ 19408 'w' 19409 VFP floating-point register 19410 19411 'G' 19412 The floating-point constant 0.0 19413 19414 'I' 19415 Integer that is valid as an immediate operand in a data 19416 processing instruction. That is, an integer in the range 0 to 19417 255 rotated by a multiple of 2 19418 19419 'J' 19420 Integer in the range -4095 to 4095 19421 19422 'K' 19423 Integer that satisfies constraint 'I' when inverted (ones 19424 complement) 19425 19426 'L' 19427 Integer that satisfies constraint 'I' when negated (twos 19428 complement) 19429 19430 'M' 19431 Integer in the range 0 to 32 19432 19433 'Q' 19434 A memory reference where the exact address is in a single 19435 register (''m'' is preferable for 'asm' statements) 19436 19437 'R' 19438 An item in the constant pool 19439 19440 'S' 19441 A symbol in the text segment of the current file 19442 19443 'Uv' 19444 A memory reference suitable for VFP load/store insns 19445 (reg+constant offset) 19446 19447 'Uy' 19448 A memory reference suitable for iWMMXt load/store 19449 instructions. 19450 19451 'Uq' 19452 A memory reference suitable for the ARMv4 ldrsb instruction. 19453 19454 _AVR family--'config/avr/constraints.md'_ 19455 'l' 19456 Registers from r0 to r15 19457 19458 'a' 19459 Registers from r16 to r23 19460 19461 'd' 19462 Registers from r16 to r31 19463 19464 'w' 19465 Registers from r24 to r31. These registers can be used in 19466 'adiw' command 19467 19468 'e' 19469 Pointer register (r26-r31) 19470 19471 'b' 19472 Base pointer register (r28-r31) 19473 19474 'q' 19475 Stack pointer register (SPH:SPL) 19476 19477 't' 19478 Temporary register r0 19479 19480 'x' 19481 Register pair X (r27:r26) 19482 19483 'y' 19484 Register pair Y (r29:r28) 19485 19486 'z' 19487 Register pair Z (r31:r30) 19488 19489 'I' 19490 Constant greater than -1, less than 64 19491 19492 'J' 19493 Constant greater than -64, less than 1 19494 19495 'K' 19496 Constant integer 2 19497 19498 'L' 19499 Constant integer 0 19500 19501 'M' 19502 Constant that fits in 8 bits 19503 19504 'N' 19505 Constant integer -1 19506 19507 'O' 19508 Constant integer 8, 16, or 24 19509 19510 'P' 19511 Constant integer 1 19512 19513 'G' 19514 A floating point constant 0.0 19515 19516 'Q' 19517 A memory address based on Y or Z pointer with displacement. 19518 19519 _Epiphany--'config/epiphany/constraints.md'_ 19520 'U16' 19521 An unsigned 16-bit constant. 19522 19523 'K' 19524 An unsigned 5-bit constant. 19525 19526 'L' 19527 A signed 11-bit constant. 19528 19529 'Cm1' 19530 A signed 11-bit constant added to -1. Can only match when the 19531 '-m1reg-REG' option is active. 19532 19533 'Cl1' 19534 Left-shift of -1, i.e., a bit mask with a block of leading 19535 ones, the rest being a block of trailing zeroes. Can only 19536 match when the '-m1reg-REG' option is active. 19537 19538 'Cr1' 19539 Right-shift of -1, i.e., a bit mask with a trailing block of 19540 ones, the rest being zeroes. Or to put it another way, one 19541 less than a power of two. Can only match when the 19542 '-m1reg-REG' option is active. 19543 19544 'Cal' 19545 Constant for arithmetic/logical operations. This is like 'i', 19546 except that for position independent code, no symbols / 19547 expressions needing relocations are allowed. 19548 19549 'Csy' 19550 Symbolic constant for call/jump instruction. 19551 19552 'Rcs' 19553 The register class usable in short insns. This is a register 19554 class constraint, and can thus drive register allocation. 19555 This constraint won't match unless '-mprefer-short-insn-regs' 19556 is in effect. 19557 19558 'Rsc' 19559 The the register class of registers that can be used to hold a 19560 sibcall call address. I.e., a caller-saved register. 19561 19562 'Rct' 19563 Core control register class. 19564 19565 'Rgs' 19566 The register group usable in short insns. This constraint 19567 does not use a register class, so that it only passively 19568 matches suitable registers, and doesn't drive register 19569 allocation. 19570 19571 'Car' 19572 Constant suitable for the addsi3_r pattern. This is a valid 19573 offset For byte, halfword, or word addressing. 19574 19575 'Rra' 19576 Matches the return address if it can be replaced with the link 19577 register. 19578 19579 'Rcc' 19580 Matches the integer condition code register. 19581 19582 'Sra' 19583 Matches the return address if it is in a stack slot. 19584 19585 'Cfm' 19586 Matches control register values to switch fp mode, which are 19587 encapsulated in 'UNSPEC_FP_MODE'. 19588 19589 _CR16 Architecture--'config/cr16/cr16.h'_ 19590 19591 'b' 19592 Registers from r0 to r14 (registers without stack pointer) 19593 19594 't' 19595 Register from r0 to r11 (all 16-bit registers) 19596 19597 'p' 19598 Register from r12 to r15 (all 32-bit registers) 19599 19600 'I' 19601 Signed constant that fits in 4 bits 19602 19603 'J' 19604 Signed constant that fits in 5 bits 19605 19606 'K' 19607 Signed constant that fits in 6 bits 19608 19609 'L' 19610 Unsigned constant that fits in 4 bits 19611 19612 'M' 19613 Signed constant that fits in 32 bits 19614 19615 'N' 19616 Check for 64 bits wide constants for add/sub instructions 19617 19618 'G' 19619 Floating point constant that is legal for store immediate 19620 19621 _Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 19622 'a' 19623 General register 1 19624 19625 'f' 19626 Floating point register 19627 19628 'q' 19629 Shift amount register 19630 19631 'x' 19632 Floating point register (deprecated) 19633 19634 'y' 19635 Upper floating point register (32-bit), floating point 19636 register (64-bit) 19637 19638 'Z' 19639 Any register 19640 19641 'I' 19642 Signed 11-bit integer constant 19643 19644 'J' 19645 Signed 14-bit integer constant 19646 19647 'K' 19648 Integer constant that can be deposited with a 'zdepi' 19649 instruction 19650 19651 'L' 19652 Signed 5-bit integer constant 19653 19654 'M' 19655 Integer constant 0 19656 19657 'N' 19658 Integer constant that can be loaded with a 'ldil' instruction 19659 19660 'O' 19661 Integer constant whose value plus one is a power of 2 19662 19663 'P' 19664 Integer constant that can be used for 'and' operations in 19665 'depi' and 'extru' instructions 19666 19667 'S' 19668 Integer constant 31 19669 19670 'U' 19671 Integer constant 63 19672 19673 'G' 19674 Floating-point constant 0.0 19675 19676 'A' 19677 A 'lo_sum' data-linkage-table memory operand 19678 19679 'Q' 19680 A memory operand that can be used as the destination operand 19681 of an integer store instruction 19682 19683 'R' 19684 A scaled or unscaled indexed memory operand 19685 19686 'T' 19687 A memory operand for floating-point loads and stores 19688 19689 'W' 19690 A register indirect memory operand 19691 19692 _picoChip family--'picochip.h'_ 19693 'k' 19694 Stack register. 19695 19696 'f' 19697 Pointer register. A register which can be used to access 19698 memory without supplying an offset. Any other register can be 19699 used to access memory, but will need a constant offset. In 19700 the case of the offset being zero, it is more efficient to use 19701 a pointer register, since this reduces code size. 19702 19703 't' 19704 A twin register. A register which may be paired with an 19705 adjacent register to create a 32-bit register. 19706 19707 'a' 19708 Any absolute memory address (e.g., symbolic constant, symbolic 19709 constant + offset). 19710 19711 'I' 19712 4-bit signed integer. 19713 19714 'J' 19715 4-bit unsigned integer. 19716 19717 'K' 19718 8-bit signed integer. 19719 19720 'M' 19721 Any constant whose absolute value is no greater than 4-bits. 19722 19723 'N' 19724 10-bit signed integer 19725 19726 'O' 19727 16-bit signed integer. 19728 19729 _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 19730 'b' 19731 Address base register 19732 19733 'd' 19734 Floating point register (containing 64-bit value) 19735 19736 'f' 19737 Floating point register (containing 32-bit value) 19738 19739 'v' 19740 Altivec vector register 19741 19742 'wa' 19743 Any VSX register if the -mvsx option was used or NO_REGS. 19744 19745 'wd' 19746 VSX vector register to hold vector double data or NO_REGS. 19747 19748 'wf' 19749 VSX vector register to hold vector float data or NO_REGS. 19750 19751 'wg' 19752 If '-mmfpgpr' was used, a floating point register or NO_REGS. 19753 19754 'wl' 19755 Floating point register if the LFIWAX instruction is enabled 19756 or NO_REGS. 19757 19758 'wm' 19759 VSX register if direct move instructions are enabled, or 19760 NO_REGS. 19761 19762 'wn' 19763 No register (NO_REGS). 19764 19765 'wr' 19766 General purpose register if 64-bit instructions are enabled or 19767 NO_REGS. 19768 19769 'ws' 19770 VSX vector register to hold scalar double values or NO_REGS. 19771 19772 'wt' 19773 VSX vector register to hold 128 bit integer or NO_REGS. 19774 19775 'wu' 19776 Altivec register to use for float/32-bit int loads/stores or 19777 NO_REGS. 19778 19779 'wv' 19780 Altivec register to use for double loads/stores or NO_REGS. 19781 19782 'ww' 19783 FP or VSX register to perform float operations under '-mvsx' 19784 or NO_REGS. 19785 19786 'wx' 19787 Floating point register if the STFIWX instruction is enabled 19788 or NO_REGS. 19789 19790 'wy' 19791 VSX vector register to hold scalar float values or NO_REGS. 19792 19793 'wz' 19794 Floating point register if the LFIWZX instruction is enabled 19795 or NO_REGS. 19796 19797 'wQ' 19798 A memory address that will work with the 'lq' and 'stq' 19799 instructions. 19800 19801 'h' 19802 'MQ', 'CTR', or 'LINK' register 19803 19804 'q' 19805 'MQ' register 19806 19807 'c' 19808 'CTR' register 19809 19810 'l' 19811 'LINK' register 19812 19813 'x' 19814 'CR' register (condition register) number 0 19815 19816 'y' 19817 'CR' register (condition register) 19818 19819 'z' 19820 'XER[CA]' carry bit (part of the XER register) 19821 19822 'I' 19823 Signed 16-bit constant 19824 19825 'J' 19826 Unsigned 16-bit constant shifted left 16 bits (use 'L' instead 19827 for 'SImode' constants) 19828 19829 'K' 19830 Unsigned 16-bit constant 19831 19832 'L' 19833 Signed 16-bit constant shifted left 16 bits 19834 19835 'M' 19836 Constant larger than 31 19837 19838 'N' 19839 Exact power of 2 19840 19841 'O' 19842 Zero 19843 19844 'P' 19845 Constant whose negation is a signed 16-bit constant 19846 19847 'G' 19848 Floating point constant that can be loaded into a register 19849 with one instruction per word 19850 19851 'H' 19852 Integer/Floating point constant that can be loaded into a 19853 register using three instructions 19854 19855 'm' 19856 Memory operand. Normally, 'm' does not allow addresses that 19857 update the base register. If '<' or '>' constraint is also 19858 used, they are allowed and therefore on PowerPC targets in 19859 that case it is only safe to use 'm<>' in an 'asm' statement 19860 if that 'asm' statement accesses the operand exactly once. 19861 The 'asm' statement must also use '%U<OPNO>' as a placeholder 19862 for the "update" flag in the corresponding load or store 19863 instruction. For example: 19864 19865 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 19866 19867 is correct but: 19868 19869 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 19870 19871 is not. 19872 19873 'es' 19874 A "stable" memory operand; that is, one which does not include 19875 any automodification of the base register. This used to be 19876 useful when 'm' allowed automodification of the base register, 19877 but as those are now only allowed when '<' or '>' is used, 19878 'es' is basically the same as 'm' without '<' and '>'. 19879 19880 'Q' 19881 Memory operand that is an offset from a register (it is 19882 usually better to use 'm' or 'es' in 'asm' statements) 19883 19884 'Z' 19885 Memory operand that is an indexed or indirect from a register 19886 (it is usually better to use 'm' or 'es' in 'asm' statements) 19887 19888 'R' 19889 AIX TOC entry 19890 19891 'a' 19892 Address operand that is an indexed or indirect from a register 19893 ('p' is preferable for 'asm' statements) 19894 19895 'S' 19896 Constant suitable as a 64-bit mask operand 19897 19898 'T' 19899 Constant suitable as a 32-bit mask operand 19900 19901 'U' 19902 System V Release 4 small data area reference 19903 19904 't' 19905 AND masks that can be performed by two rldic{l, r} 19906 instructions 19907 19908 'W' 19909 Vector constant that does not require memory 19910 19911 'j' 19912 Vector constant that is all zeros. 19913 19914 _Intel 386--'config/i386/constraints.md'_ 19915 'R' 19916 Legacy register--the eight integer registers available on all 19917 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 19918 19919 'q' 19920 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 19921 'c', and 'd'; in 64-bit mode, any integer register. 19922 19923 'Q' 19924 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 19925 19926 'l' 19927 Any register that can be used as the index in a base+index 19928 memory access: that is, any general register except the stack 19929 pointer. 19930 19931 'a' 19932 The 'a' register. 19933 19934 'b' 19935 The 'b' register. 19936 19937 'c' 19938 The 'c' register. 19939 19940 'd' 19941 The 'd' register. 19942 19943 'S' 19944 The 'si' register. 19945 19946 'D' 19947 The 'di' register. 19948 19949 'A' 19950 The 'a' and 'd' registers. This class is used for 19951 instructions that return double word results in the 'ax:dx' 19952 register pair. Single word values will be allocated either in 19953 'ax' or 'dx'. For example on i386 the following implements 19954 'rdtsc': 19955 19956 unsigned long long rdtsc (void) 19957 { 19958 unsigned long long tick; 19959 __asm__ __volatile__("rdtsc":"=A"(tick)); 19960 return tick; 19961 } 19962 19963 This is not correct on x86_64 as it would allocate tick in 19964 either 'ax' or 'dx'. You have to use the following variant 19965 instead: 19966 19967 unsigned long long rdtsc (void) 19968 { 19969 unsigned int tickl, tickh; 19970 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 19971 return ((unsigned long long)tickh << 32)|tickl; 19972 } 19973 19974 'f' 19975 Any 80387 floating-point (stack) register. 19976 19977 't' 19978 Top of 80387 floating-point stack ('%st(0)'). 19979 19980 'u' 19981 Second from top of 80387 floating-point stack ('%st(1)'). 19982 19983 'y' 19984 Any MMX register. 19985 19986 'x' 19987 Any SSE register. 19988 19989 'Yz' 19990 First SSE register ('%xmm0'). 19991 19992 'Y2' 19993 Any SSE register, when SSE2 is enabled. 19994 19995 'Yi' 19996 Any SSE register, when SSE2 and inter-unit moves are enabled. 19997 19998 'Ym' 19999 Any MMX register, when inter-unit moves are enabled. 20000 20001 'I' 20002 Integer constant in the range 0 ... 31, for 32-bit shifts. 20003 20004 'J' 20005 Integer constant in the range 0 ... 63, for 64-bit shifts. 20006 20007 'K' 20008 Signed 8-bit integer constant. 20009 20010 'L' 20011 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 20012 20013 'M' 20014 0, 1, 2, or 3 (shifts for the 'lea' instruction). 20015 20016 'N' 20017 Unsigned 8-bit integer constant (for 'in' and 'out' 20018 instructions). 20019 20020 'O' 20021 Integer constant in the range 0 ... 127, for 128-bit shifts. 20022 20023 'G' 20024 Standard 80387 floating point constant. 20025 20026 'C' 20027 Standard SSE floating point constant. 20028 20029 'e' 20030 32-bit signed integer constant, or a symbolic reference known 20031 to fit that range (for immediate operands in sign-extending 20032 x86-64 instructions). 20033 20034 'Z' 20035 32-bit unsigned integer constant, or a symbolic reference 20036 known to fit that range (for immediate operands in 20037 zero-extending x86-64 instructions). 20038 20039 _Intel IA-64--'config/ia64/ia64.h'_ 20040 'a' 20041 General register 'r0' to 'r3' for 'addl' instruction 20042 20043 'b' 20044 Branch register 20045 20046 'c' 20047 Predicate register ('c' as in "conditional") 20048 20049 'd' 20050 Application register residing in M-unit 20051 20052 'e' 20053 Application register residing in I-unit 20054 20055 'f' 20056 Floating-point register 20057 20058 'm' 20059 Memory operand. If used together with '<' or '>', the operand 20060 can have postincrement and postdecrement which require 20061 printing with '%Pn' on IA-64. 20062 20063 'G' 20064 Floating-point constant 0.0 or 1.0 20065 20066 'I' 20067 14-bit signed integer constant 20068 20069 'J' 20070 22-bit signed integer constant 20071 20072 'K' 20073 8-bit signed integer constant for logical instructions 20074 20075 'L' 20076 8-bit adjusted signed integer constant for compare pseudo-ops 20077 20078 'M' 20079 6-bit unsigned integer constant for shift counts 20080 20081 'N' 20082 9-bit signed integer constant for load and store 20083 postincrements 20084 20085 'O' 20086 The constant zero 20087 20088 'P' 20089 0 or -1 for 'dep' instruction 20090 20091 'Q' 20092 Non-volatile memory for floating-point loads and stores 20093 20094 'R' 20095 Integer constant in the range 1 to 4 for 'shladd' instruction 20096 20097 'S' 20098 Memory operand except postincrement and postdecrement. This 20099 is now roughly the same as 'm' when not used together with '<' 20100 or '>'. 20101 20102 _FRV--'config/frv/frv.h'_ 20103 'a' 20104 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 20105 20106 'b' 20107 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 20108 20109 'c' 20110 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 20111 to 'icc3'). 20112 20113 'd' 20114 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 20115 20116 'e' 20117 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 20118 registers are excluded not in the class but through the use of 20119 a machine mode larger than 4 bytes. 20120 20121 'f' 20122 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 20123 20124 'h' 20125 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 20126 registers are excluded not in the class but through the use of 20127 a machine mode larger than 4 bytes. 20128 20129 'l' 20130 Register in the class 'LR_REG' (the 'lr' register). 20131 20132 'q' 20133 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 20134 numbers not divisible by 4 are excluded not in the class but 20135 through the use of a machine mode larger than 8 bytes. 20136 20137 't' 20138 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 20139 20140 'u' 20141 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 20142 20143 'v' 20144 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 20145 20146 'w' 20147 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 20148 20149 'x' 20150 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 20151 Register numbers not divisible by 4 are excluded not in the 20152 class but through the use of a machine mode larger than 8 20153 bytes. 20154 20155 'z' 20156 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 20157 20158 'A' 20159 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 20160 20161 'B' 20162 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 20163 20164 'C' 20165 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 20166 20167 'G' 20168 Floating point constant zero 20169 20170 'I' 20171 6-bit signed integer constant 20172 20173 'J' 20174 10-bit signed integer constant 20175 20176 'L' 20177 16-bit signed integer constant 20178 20179 'M' 20180 16-bit unsigned integer constant 20181 20182 'N' 20183 12-bit signed integer constant that is negative--i.e. in the 20184 range of -2048 to -1 20185 20186 'O' 20187 Constant zero 20188 20189 'P' 20190 12-bit signed integer constant that is greater than zero--i.e. 20191 in the range of 1 to 2047. 20192 20193 _Blackfin family--'config/bfin/constraints.md'_ 20194 'a' 20195 P register 20196 20197 'd' 20198 D register 20199 20200 'z' 20201 A call clobbered P register. 20202 20203 'qN' 20204 A single register. If N is in the range 0 to 7, the 20205 corresponding D register. If it is 'A', then the register P0. 20206 20207 'D' 20208 Even-numbered D register 20209 20210 'W' 20211 Odd-numbered D register 20212 20213 'e' 20214 Accumulator register. 20215 20216 'A' 20217 Even-numbered accumulator register. 20218 20219 'B' 20220 Odd-numbered accumulator register. 20221 20222 'b' 20223 I register 20224 20225 'v' 20226 B register 20227 20228 'f' 20229 M register 20230 20231 'c' 20232 Registers used for circular buffering, i.e. I, B, or L 20233 registers. 20234 20235 'C' 20236 The CC register. 20237 20238 't' 20239 LT0 or LT1. 20240 20241 'k' 20242 LC0 or LC1. 20243 20244 'u' 20245 LB0 or LB1. 20246 20247 'x' 20248 Any D, P, B, M, I or L register. 20249 20250 'y' 20251 Additional registers typically used only in prologues and 20252 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 20253 USP. 20254 20255 'w' 20256 Any register except accumulators or CC. 20257 20258 'Ksh' 20259 Signed 16 bit integer (in the range -32768 to 32767) 20260 20261 'Kuh' 20262 Unsigned 16 bit integer (in the range 0 to 65535) 20263 20264 'Ks7' 20265 Signed 7 bit integer (in the range -64 to 63) 20266 20267 'Ku7' 20268 Unsigned 7 bit integer (in the range 0 to 127) 20269 20270 'Ku5' 20271 Unsigned 5 bit integer (in the range 0 to 31) 20272 20273 'Ks4' 20274 Signed 4 bit integer (in the range -8 to 7) 20275 20276 'Ks3' 20277 Signed 3 bit integer (in the range -3 to 4) 20278 20279 'Ku3' 20280 Unsigned 3 bit integer (in the range 0 to 7) 20281 20282 'PN' 20283 Constant N, where N is a single-digit constant in the range 0 20284 to 4. 20285 20286 'PA' 20287 An integer equal to one of the MACFLAG_XXX constants that is 20288 suitable for use with either accumulator. 20289 20290 'PB' 20291 An integer equal to one of the MACFLAG_XXX constants that is 20292 suitable for use only with accumulator A1. 20293 20294 'M1' 20295 Constant 255. 20296 20297 'M2' 20298 Constant 65535. 20299 20300 'J' 20301 An integer constant with exactly a single bit set. 20302 20303 'L' 20304 An integer constant with all bits set except exactly one. 20305 20306 'H' 20307 20308 'Q' 20309 Any SYMBOL_REF. 20310 20311 _M32C--'config/m32c/m32c.c'_ 20312 'Rsp' 20313 'Rfb' 20314 'Rsb' 20315 '$sp', '$fb', '$sb'. 20316 20317 'Rcr' 20318 Any control register, when they're 16 bits wide (nothing if 20319 control registers are 24 bits wide) 20320 20321 'Rcl' 20322 Any control register, when they're 24 bits wide. 20323 20324 'R0w' 20325 'R1w' 20326 'R2w' 20327 'R3w' 20328 $r0, $r1, $r2, $r3. 20329 20330 'R02' 20331 $r0 or $r2, or $r2r0 for 32 bit values. 20332 20333 'R13' 20334 $r1 or $r3, or $r3r1 for 32 bit values. 20335 20336 'Rdi' 20337 A register that can hold a 64 bit value. 20338 20339 'Rhl' 20340 $r0 or $r1 (registers with addressable high/low bytes) 20341 20342 'R23' 20343 $r2 or $r3 20344 20345 'Raa' 20346 Address registers 20347 20348 'Raw' 20349 Address registers when they're 16 bits wide. 20350 20351 'Ral' 20352 Address registers when they're 24 bits wide. 20353 20354 'Rqi' 20355 Registers that can hold QI values. 20356 20357 'Rad' 20358 Registers that can be used with displacements ($a0, $a1, $sb). 20359 20360 'Rsi' 20361 Registers that can hold 32 bit values. 20362 20363 'Rhi' 20364 Registers that can hold 16 bit values. 20365 20366 'Rhc' 20367 Registers chat can hold 16 bit values, including all control 20368 registers. 20369 20370 'Rra' 20371 $r0 through R1, plus $a0 and $a1. 20372 20373 'Rfl' 20374 The flags register. 20375 20376 'Rmm' 20377 The memory-based pseudo-registers $mem0 through $mem15. 20378 20379 'Rpi' 20380 Registers that can hold pointers (16 bit registers for r8c, 20381 m16c; 24 bit registers for m32cm, m32c). 20382 20383 'Rpa' 20384 Matches multiple registers in a PARALLEL to form a larger 20385 register. Used to match function return values. 20386 20387 'Is3' 20388 -8 ... 7 20389 20390 'IS1' 20391 -128 ... 127 20392 20393 'IS2' 20394 -32768 ... 32767 20395 20396 'IU2' 20397 0 ... 65535 20398 20399 'In4' 20400 -8 ... -1 or 1 ... 8 20401 20402 'In5' 20403 -16 ... -1 or 1 ... 16 20404 20405 'In6' 20406 -32 ... -1 or 1 ... 32 20407 20408 'IM2' 20409 -65536 ... -1 20410 20411 'Ilb' 20412 An 8 bit value with exactly one bit set. 20413 20414 'Ilw' 20415 A 16 bit value with exactly one bit set. 20416 20417 'Sd' 20418 The common src/dest memory addressing modes. 20419 20420 'Sa' 20421 Memory addressed using $a0 or $a1. 20422 20423 'Si' 20424 Memory addressed with immediate addresses. 20425 20426 'Ss' 20427 Memory addressed using the stack pointer ($sp). 20428 20429 'Sf' 20430 Memory addressed using the frame base register ($fb). 20431 20432 'Ss' 20433 Memory addressed using the small base register ($sb). 20434 20435 'S1' 20436 $r1h 20437 20438 _MeP--'config/mep/constraints.md'_ 20439 20440 'a' 20441 The $sp register. 20442 20443 'b' 20444 The $tp register. 20445 20446 'c' 20447 Any control register. 20448 20449 'd' 20450 Either the $hi or the $lo register. 20451 20452 'em' 20453 Coprocessor registers that can be directly loaded ($c0-$c15). 20454 20455 'ex' 20456 Coprocessor registers that can be moved to each other. 20457 20458 'er' 20459 Coprocessor registers that can be moved to core registers. 20460 20461 'h' 20462 The $hi register. 20463 20464 'j' 20465 The $rpc register. 20466 20467 'l' 20468 The $lo register. 20469 20470 't' 20471 Registers which can be used in $tp-relative addressing. 20472 20473 'v' 20474 The $gp register. 20475 20476 'x' 20477 The coprocessor registers. 20478 20479 'y' 20480 The coprocessor control registers. 20481 20482 'z' 20483 The $0 register. 20484 20485 'A' 20486 User-defined register set A. 20487 20488 'B' 20489 User-defined register set B. 20490 20491 'C' 20492 User-defined register set C. 20493 20494 'D' 20495 User-defined register set D. 20496 20497 'I' 20498 Offsets for $gp-rel addressing. 20499 20500 'J' 20501 Constants that can be used directly with boolean insns. 20502 20503 'K' 20504 Constants that can be moved directly to registers. 20505 20506 'L' 20507 Small constants that can be added to registers. 20508 20509 'M' 20510 Long shift counts. 20511 20512 'N' 20513 Small constants that can be compared to registers. 20514 20515 'O' 20516 Constants that can be loaded into the top half of registers. 20517 20518 'S' 20519 Signed 8-bit immediates. 20520 20521 'T' 20522 Symbols encoded for $tp-rel or $gp-rel addressing. 20523 20524 'U' 20525 Non-constant addresses for loading/saving coprocessor 20526 registers. 20527 20528 'W' 20529 The top half of a symbol's value. 20530 20531 'Y' 20532 A register indirect address without offset. 20533 20534 'Z' 20535 Symbolic references to the control bus. 20536 20537 _MicroBlaze--'config/microblaze/constraints.md'_ 20538 'd' 20539 A general register ('r0' to 'r31'). 20540 20541 'z' 20542 A status register ('rmsr', '$fcc1' to '$fcc7'). 20543 20544 _MIPS--'config/mips/constraints.md'_ 20545 'd' 20546 An address register. This is equivalent to 'r' unless 20547 generating MIPS16 code. 20548 20549 'f' 20550 A floating-point register (if available). 20551 20552 'h' 20553 Formerly the 'hi' register. This constraint is no longer 20554 supported. 20555 20556 'l' 20557 The 'lo' register. Use this register to store values that are 20558 no bigger than a word. 20559 20560 'x' 20561 The concatenated 'hi' and 'lo' registers. Use this register 20562 to store doubleword values. 20563 20564 'c' 20565 A register suitable for use in an indirect jump. This will 20566 always be '$25' for '-mabicalls'. 20567 20568 'v' 20569 Register '$3'. Do not use this constraint in new code; it is 20570 retained only for compatibility with glibc. 20571 20572 'y' 20573 Equivalent to 'r'; retained for backwards compatibility. 20574 20575 'z' 20576 A floating-point condition code register. 20577 20578 'I' 20579 A signed 16-bit constant (for arithmetic instructions). 20580 20581 'J' 20582 Integer zero. 20583 20584 'K' 20585 An unsigned 16-bit constant (for logic instructions). 20586 20587 'L' 20588 A signed 32-bit constant in which the lower 16 bits are zero. 20589 Such constants can be loaded using 'lui'. 20590 20591 'M' 20592 A constant that cannot be loaded using 'lui', 'addiu' or 20593 'ori'. 20594 20595 'N' 20596 A constant in the range -65535 to -1 (inclusive). 20597 20598 'O' 20599 A signed 15-bit constant. 20600 20601 'P' 20602 A constant in the range 1 to 65535 (inclusive). 20603 20604 'G' 20605 Floating-point zero. 20606 20607 'R' 20608 An address that can be used in a non-macro load or store. 20609 20610 _Motorola 680x0--'config/m68k/constraints.md'_ 20611 'a' 20612 Address register 20613 20614 'd' 20615 Data register 20616 20617 'f' 20618 68881 floating-point register, if available 20619 20620 'I' 20621 Integer in the range 1 to 8 20622 20623 'J' 20624 16-bit signed number 20625 20626 'K' 20627 Signed number whose magnitude is greater than 0x80 20628 20629 'L' 20630 Integer in the range -8 to -1 20631 20632 'M' 20633 Signed number whose magnitude is greater than 0x100 20634 20635 'N' 20636 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20637 20638 'O' 20639 16 (for rotate using swap) 20640 20641 'P' 20642 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20643 20644 'R' 20645 Numbers that mov3q can handle 20646 20647 'G' 20648 Floating point constant that is not a 68881 constant 20649 20650 'S' 20651 Operands that satisfy 'm' when -mpcrel is in effect 20652 20653 'T' 20654 Operands that satisfy 's' when -mpcrel is not in effect 20655 20656 'Q' 20657 Address register indirect addressing mode 20658 20659 'U' 20660 Register offset addressing 20661 20662 'W' 20663 const_call_operand 20664 20665 'Cs' 20666 symbol_ref or const 20667 20668 'Ci' 20669 const_int 20670 20671 'C0' 20672 const_int 0 20673 20674 'Cj' 20675 Range of signed numbers that don't fit in 16 bits 20676 20677 'Cmvq' 20678 Integers valid for mvq 20679 20680 'Capsw' 20681 Integers valid for a moveq followed by a swap 20682 20683 'Cmvz' 20684 Integers valid for mvz 20685 20686 'Cmvs' 20687 Integers valid for mvs 20688 20689 'Ap' 20690 push_operand 20691 20692 'Ac' 20693 Non-register operands allowed in clr 20694 20695 _Moxie--'config/moxie/constraints.md'_ 20696 'A' 20697 An absolute address 20698 20699 'B' 20700 An offset address 20701 20702 'W' 20703 A register indirect memory operand 20704 20705 'I' 20706 A constant in the range of 0 to 255. 20707 20708 'N' 20709 A constant in the range of 0 to -255. 20710 20711 _PDP-11--'config/pdp11/constraints.md'_ 20712 'a' 20713 Floating point registers AC0 through AC3. These can be loaded 20714 from/to memory with a single instruction. 20715 20716 'd' 20717 Odd numbered general registers (R1, R3, R5). These are used 20718 for 16-bit multiply operations. 20719 20720 'f' 20721 Any of the floating point registers (AC0 through AC5). 20722 20723 'G' 20724 Floating point constant 0. 20725 20726 'I' 20727 An integer constant that fits in 16 bits. 20728 20729 'J' 20730 An integer constant whose low order 16 bits are zero. 20731 20732 'K' 20733 An integer constant that does not meet the constraints for 20734 codes 'I' or 'J'. 20735 20736 'L' 20737 The integer constant 1. 20738 20739 'M' 20740 The integer constant -1. 20741 20742 'N' 20743 The integer constant 0. 20744 20745 'O' 20746 Integer constants -4 through -1 and 1 through 4; shifts by 20747 these amounts are handled as multiple single-bit shifts rather 20748 than a single variable-length shift. 20749 20750 'Q' 20751 A memory reference which requires an additional word (address 20752 or offset) after the opcode. 20753 20754 'R' 20755 A memory reference that is encoded within the opcode. 20756 20757 _RL78--'config/rl78/constraints.md'_ 20758 20759 'Int3' 20760 An integer constant in the range 1 ... 7. 20761 'Int8' 20762 An integer constant in the range 0 ... 255. 20763 'J' 20764 An integer constant in the range -255 ... 0 20765 'K' 20766 The integer constant 1. 20767 'L' 20768 The integer constant -1. 20769 'M' 20770 The integer constant 0. 20771 'N' 20772 The integer constant 2. 20773 'O' 20774 The integer constant -2. 20775 'P' 20776 An integer constant in the range 1 ... 15. 20777 'Qbi' 20778 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 20779 'Qsc' 20780 The synthetic compare types-gt, lt, ge, and le. 20781 'Wab' 20782 A memory reference with an absolute address. 20783 'Wbc' 20784 A memory reference using 'BC' as a base register, with an 20785 optional offset. 20786 'Wca' 20787 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 20788 address, for calls. 20789 'Wcv' 20790 A memory reference using any 16-bit register pair for the 20791 address, for calls. 20792 'Wd2' 20793 A memory reference using 'DE' as a base register, with an 20794 optional offset. 20795 'Wde' 20796 A memory reference using 'DE' as a base register, without any 20797 offset. 20798 'Wfr' 20799 Any memory reference to an address in the far address space. 20800 'Wh1' 20801 A memory reference using 'HL' as a base register, with an 20802 optional one-byte offset. 20803 'Whb' 20804 A memory reference using 'HL' as a base register, with 'B' or 20805 'C' as the index register. 20806 'Whl' 20807 A memory reference using 'HL' as a base register, without any 20808 offset. 20809 'Ws1' 20810 A memory reference using 'SP' as a base register, with an 20811 optional one-byte offset. 20812 'Y' 20813 Any memory reference to an address in the near address space. 20814 'A' 20815 The 'AX' register. 20816 'B' 20817 The 'BC' register. 20818 'D' 20819 The 'DE' register. 20820 'R' 20821 'A' through 'L' registers. 20822 'S' 20823 The 'SP' register. 20824 'T' 20825 The 'HL' register. 20826 'Z08W' 20827 The 16-bit 'R8' register. 20828 'Z10W' 20829 The 16-bit 'R10' register. 20830 'Zint' 20831 The registers reserved for interrupts ('R24' to 'R31'). 20832 'a' 20833 The 'A' register. 20834 'b' 20835 The 'B' register. 20836 'c' 20837 The 'C' register. 20838 'd' 20839 The 'D' register. 20840 'e' 20841 The 'E' register. 20842 'h' 20843 The 'H' register. 20844 'l' 20845 The 'L' register. 20846 'v' 20847 The virtual registers. 20848 'w' 20849 The 'PSW' register. 20850 'x' 20851 The 'X' register. 20852 20853 _RX--'config/rx/constraints.md'_ 20854 'Q' 20855 An address which does not involve register indirect addressing 20856 or pre/post increment/decrement addressing. 20857 20858 'Symbol' 20859 A symbol reference. 20860 20861 'Int08' 20862 A constant in the range -256 to 255, inclusive. 20863 20864 'Sint08' 20865 A constant in the range -128 to 127, inclusive. 20866 20867 'Sint16' 20868 A constant in the range -32768 to 32767, inclusive. 20869 20870 'Sint24' 20871 A constant in the range -8388608 to 8388607, inclusive. 20872 20873 'Uint04' 20874 A constant in the range 0 to 15, inclusive. 20875 20876 _SPARC--'config/sparc/sparc.h'_ 20877 'f' 20878 Floating-point register on the SPARC-V8 architecture and lower 20879 floating-point register on the SPARC-V9 architecture. 20880 20881 'e' 20882 Floating-point register. It is equivalent to 'f' on the 20883 SPARC-V8 architecture and contains both lower and upper 20884 floating-point registers on the SPARC-V9 architecture. 20885 20886 'c' 20887 Floating-point condition code register. 20888 20889 'd' 20890 Lower floating-point register. It is only valid on the 20891 SPARC-V9 architecture when the Visual Instruction Set is 20892 available. 20893 20894 'b' 20895 Floating-point register. It is only valid on the SPARC-V9 20896 architecture when the Visual Instruction Set is available. 20897 20898 'h' 20899 64-bit global or out register for the SPARC-V8+ architecture. 20900 20901 'C' 20902 The constant all-ones, for floating-point. 20903 20904 'A' 20905 Signed 5-bit constant 20906 20907 'D' 20908 A vector constant 20909 20910 'I' 20911 Signed 13-bit constant 20912 20913 'J' 20914 Zero 20915 20916 'K' 20917 32-bit constant with the low 12 bits clear (a constant that 20918 can be loaded with the 'sethi' instruction) 20919 20920 'L' 20921 A constant in the range supported by 'movcc' instructions 20922 (11-bit signed immediate) 20923 20924 'M' 20925 A constant in the range supported by 'movrcc' instructions 20926 (10-bit signed immediate) 20927 20928 'N' 20929 Same as 'K', except that it verifies that bits that are not in 20930 the lower 32-bit range are all zero. Must be used instead of 20931 'K' for modes wider than 'SImode' 20932 20933 'O' 20934 The constant 4096 20935 20936 'G' 20937 Floating-point zero 20938 20939 'H' 20940 Signed 13-bit constant, sign-extended to 32 or 64 bits 20941 20942 'P' 20943 The constant -1 20944 20945 'Q' 20946 Floating-point constant whose integral representation can be 20947 moved into an integer register using a single sethi 20948 instruction 20949 20950 'R' 20951 Floating-point constant whose integral representation can be 20952 moved into an integer register using a single mov instruction 20953 20954 'S' 20955 Floating-point constant whose integral representation can be 20956 moved into an integer register using a high/lo_sum instruction 20957 sequence 20958 20959 'T' 20960 Memory address aligned to an 8-byte boundary 20961 20962 'U' 20963 Even register 20964 20965 'W' 20966 Memory address for 'e' constraint registers 20967 20968 'w' 20969 Memory address with only a base register 20970 20971 'Y' 20972 Vector zero 20973 20974 _SPU--'config/spu/spu.h'_ 20975 'a' 20976 An immediate which can be loaded with the il/ila/ilh/ilhu 20977 instructions. const_int is treated as a 64 bit value. 20978 20979 'c' 20980 An immediate for and/xor/or instructions. const_int is 20981 treated as a 64 bit value. 20982 20983 'd' 20984 An immediate for the 'iohl' instruction. const_int is treated 20985 as a 64 bit value. 20986 20987 'f' 20988 An immediate which can be loaded with 'fsmbi'. 20989 20990 'A' 20991 An immediate which can be loaded with the il/ila/ilh/ilhu 20992 instructions. const_int is treated as a 32 bit value. 20993 20994 'B' 20995 An immediate for most arithmetic instructions. const_int is 20996 treated as a 32 bit value. 20997 20998 'C' 20999 An immediate for and/xor/or instructions. const_int is 21000 treated as a 32 bit value. 21001 21002 'D' 21003 An immediate for the 'iohl' instruction. const_int is treated 21004 as a 32 bit value. 21005 21006 'I' 21007 A constant in the range [-64, 63] for shift/rotate 21008 instructions. 21009 21010 'J' 21011 An unsigned 7-bit constant for conversion/nop/channel 21012 instructions. 21013 21014 'K' 21015 A signed 10-bit constant for most arithmetic instructions. 21016 21017 'M' 21018 A signed 16 bit immediate for 'stop'. 21019 21020 'N' 21021 An unsigned 16-bit constant for 'iohl' and 'fsmbi'. 21022 21023 'O' 21024 An unsigned 7-bit constant whose 3 least significant bits are 21025 0. 21026 21027 'P' 21028 An unsigned 3-bit constant for 16-byte rotates and shifts 21029 21030 'R' 21031 Call operand, reg, for indirect calls 21032 21033 'S' 21034 Call operand, symbol, for relative calls. 21035 21036 'T' 21037 Call operand, const_int, for absolute calls. 21038 21039 'U' 21040 An immediate which can be loaded with the il/ila/ilh/ilhu 21041 instructions. const_int is sign extended to 128 bit. 21042 21043 'W' 21044 An immediate for shift and rotate instructions. const_int is 21045 treated as a 32 bit value. 21046 21047 'Y' 21048 An immediate for and/xor/or instructions. const_int is sign 21049 extended as a 128 bit. 21050 21051 'Z' 21052 An immediate for the 'iohl' instruction. const_int is sign 21053 extended to 128 bit. 21054 21055 _S/390 and zSeries--'config/s390/s390.h'_ 21056 'a' 21057 Address register (general purpose register except r0) 21058 21059 'c' 21060 Condition code register 21061 21062 'd' 21063 Data register (arbitrary general purpose register) 21064 21065 'f' 21066 Floating-point register 21067 21068 'I' 21069 Unsigned 8-bit constant (0-255) 21070 21071 'J' 21072 Unsigned 12-bit constant (0-4095) 21073 21074 'K' 21075 Signed 16-bit constant (-32768-32767) 21076 21077 'L' 21078 Value appropriate as displacement. 21079 '(0..4095)' 21080 for short displacement 21081 '(-524288..524287)' 21082 for long displacement 21083 21084 'M' 21085 Constant integer with a value of 0x7fffffff. 21086 21087 'N' 21088 Multiple letter constraint followed by 4 parameter letters. 21089 '0..9:' 21090 number of the part counting from most to least 21091 significant 21092 'H,Q:' 21093 mode of the part 21094 'D,S,H:' 21095 mode of the containing operand 21096 '0,F:' 21097 value of the other parts (F--all bits set) 21098 The constraint matches if the specified part of a constant has 21099 a value different from its other parts. 21100 21101 'Q' 21102 Memory reference without index register and with short 21103 displacement. 21104 21105 'R' 21106 Memory reference with index register and short displacement. 21107 21108 'S' 21109 Memory reference without index register but with long 21110 displacement. 21111 21112 'T' 21113 Memory reference with index register and long displacement. 21114 21115 'U' 21116 Pointer with short displacement. 21117 21118 'W' 21119 Pointer with long displacement. 21120 21121 'Y' 21122 Shift count operand. 21123 21124 _Score family--'config/score/score.h'_ 21125 'd' 21126 Registers from r0 to r32. 21127 21128 'e' 21129 Registers from r0 to r16. 21130 21131 't' 21132 r8--r11 or r22--r27 registers. 21133 21134 'h' 21135 hi register. 21136 21137 'l' 21138 lo register. 21139 21140 'x' 21141 hi + lo register. 21142 21143 'q' 21144 cnt register. 21145 21146 'y' 21147 lcb register. 21148 21149 'z' 21150 scb register. 21151 21152 'a' 21153 cnt + lcb + scb register. 21154 21155 'c' 21156 cr0--cr15 register. 21157 21158 'b' 21159 cp1 registers. 21160 21161 'f' 21162 cp2 registers. 21163 21164 'i' 21165 cp3 registers. 21166 21167 'j' 21168 cp1 + cp2 + cp3 registers. 21169 21170 'I' 21171 High 16-bit constant (32-bit constant with 16 LSBs zero). 21172 21173 'J' 21174 Unsigned 5 bit integer (in the range 0 to 31). 21175 21176 'K' 21177 Unsigned 16 bit integer (in the range 0 to 65535). 21178 21179 'L' 21180 Signed 16 bit integer (in the range -32768 to 32767). 21181 21182 'M' 21183 Unsigned 14 bit integer (in the range 0 to 16383). 21184 21185 'N' 21186 Signed 14 bit integer (in the range -8192 to 8191). 21187 21188 'Z' 21189 Any SYMBOL_REF. 21190 21191 _Xstormy16--'config/stormy16/stormy16.h'_ 21192 'a' 21193 Register r0. 21194 21195 'b' 21196 Register r1. 21197 21198 'c' 21199 Register r2. 21200 21201 'd' 21202 Register r8. 21203 21204 'e' 21205 Registers r0 through r7. 21206 21207 't' 21208 Registers r0 and r1. 21209 21210 'y' 21211 The carry register. 21212 21213 'z' 21214 Registers r8 and r9. 21215 21216 'I' 21217 A constant between 0 and 3 inclusive. 21218 21219 'J' 21220 A constant that has exactly one bit set. 21221 21222 'K' 21223 A constant that has exactly one bit clear. 21224 21225 'L' 21226 A constant between 0 and 255 inclusive. 21227 21228 'M' 21229 A constant between -255 and 0 inclusive. 21230 21231 'N' 21232 A constant between -3 and 0 inclusive. 21233 21234 'O' 21235 A constant between 1 and 4 inclusive. 21236 21237 'P' 21238 A constant between -4 and -1 inclusive. 21239 21240 'Q' 21241 A memory reference that is a stack push. 21242 21243 'R' 21244 A memory reference that is a stack pop. 21245 21246 'S' 21247 A memory reference that refers to a constant address of known 21248 value. 21249 21250 'T' 21251 The register indicated by Rx (not implemented yet). 21252 21253 'U' 21254 A constant that is not between 2 and 15 inclusive. 21255 21256 'Z' 21257 The constant 0. 21258 21259 _TI C6X family--'config/c6x/constraints.md'_ 21260 'a' 21261 Register file A (A0-A31). 21262 21263 'b' 21264 Register file B (B0-B31). 21265 21266 'A' 21267 Predicate registers in register file A (A0-A2 on C64X and 21268 higher, A1 and A2 otherwise). 21269 21270 'B' 21271 Predicate registers in register file B (B0-B2). 21272 21273 'C' 21274 A call-used register in register file B (B0-B9, B16-B31). 21275 21276 'Da' 21277 Register file A, excluding predicate registers (A3-A31, plus 21278 A0 if not C64X or higher). 21279 21280 'Db' 21281 Register file B, excluding predicate registers (B3-B31). 21282 21283 'Iu4' 21284 Integer constant in the range 0 ... 15. 21285 21286 'Iu5' 21287 Integer constant in the range 0 ... 31. 21288 21289 'In5' 21290 Integer constant in the range -31 ... 0. 21291 21292 'Is5' 21293 Integer constant in the range -16 ... 15. 21294 21295 'I5x' 21296 Integer constant that can be the operand of an ADDA or a SUBA 21297 insn. 21298 21299 'IuB' 21300 Integer constant in the range 0 ... 65535. 21301 21302 'IsB' 21303 Integer constant in the range -32768 ... 32767. 21304 21305 'IsC' 21306 Integer constant in the range -2^{20} ... 2^{20} - 1. 21307 21308 'Jc' 21309 Integer constant that is a valid mask for the clr instruction. 21310 21311 'Js' 21312 Integer constant that is a valid mask for the set instruction. 21313 21314 'Q' 21315 Memory location with A base register. 21316 21317 'R' 21318 Memory location with B base register. 21319 21320 'S0' 21321 On C64x+ targets, a GP-relative small data reference. 21322 21323 'S1' 21324 Any kind of 'SYMBOL_REF', for use in a call address. 21325 21326 'Si' 21327 Any kind of immediate operand, unless it matches the S0 21328 constraint. 21329 21330 'T' 21331 Memory location with B base register, but not using a long 21332 offset. 21333 21334 'W' 21335 A memory operand with an address that can't be used in an 21336 unaligned access. 21337 21338 'Z' 21339 Register B14 (aka DP). 21340 21341 _TILE-Gx--'config/tilegx/constraints.md'_ 21342 'R00' 21343 'R01' 21344 'R02' 21345 'R03' 21346 'R04' 21347 'R05' 21348 'R06' 21349 'R07' 21350 'R08' 21351 'R09' 21352 'R10' 21353 Each of these represents a register constraint for an 21354 individual register, from r0 to r10. 21355 21356 'I' 21357 Signed 8-bit integer constant. 21358 21359 'J' 21360 Signed 16-bit integer constant. 21361 21362 'K' 21363 Unsigned 16-bit integer constant. 21364 21365 'L' 21366 Integer constant that fits in one signed byte when incremented 21367 by one (-129 ... 126). 21368 21369 'm' 21370 Memory operand. If used together with '<' or '>', the operand 21371 can have postincrement which requires printing with '%In' and 21372 '%in' on TILE-Gx. For example: 21373 21374 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 21375 21376 'M' 21377 A bit mask suitable for the BFINS instruction. 21378 21379 'N' 21380 Integer constant that is a byte tiled out eight times. 21381 21382 'O' 21383 The integer zero constant. 21384 21385 'P' 21386 Integer constant that is a sign-extended byte tiled out as 21387 four shorts. 21388 21389 'Q' 21390 Integer constant that fits in one signed byte when incremented 21391 (-129 ... 126), but excluding -1. 21392 21393 'S' 21394 Integer constant that has all 1 bits consecutive and starting 21395 at bit 0. 21396 21397 'T' 21398 A 16-bit fragment of a got, tls, or pc-relative reference. 21399 21400 'U' 21401 Memory operand except postincrement. This is roughly the same 21402 as 'm' when not used together with '<' or '>'. 21403 21404 'W' 21405 An 8-element vector constant with identical elements. 21406 21407 'Y' 21408 A 4-element vector constant with identical elements. 21409 21410 'Z0' 21411 The integer constant 0xffffffff. 21412 21413 'Z1' 21414 The integer constant 0xffffffff00000000. 21415 21416 _TILEPro--'config/tilepro/constraints.md'_ 21417 'R00' 21418 'R01' 21419 'R02' 21420 'R03' 21421 'R04' 21422 'R05' 21423 'R06' 21424 'R07' 21425 'R08' 21426 'R09' 21427 'R10' 21428 Each of these represents a register constraint for an 21429 individual register, from r0 to r10. 21430 21431 'I' 21432 Signed 8-bit integer constant. 21433 21434 'J' 21435 Signed 16-bit integer constant. 21436 21437 'K' 21438 Nonzero integer constant with low 16 bits zero. 21439 21440 'L' 21441 Integer constant that fits in one signed byte when incremented 21442 by one (-129 ... 126). 21443 21444 'm' 21445 Memory operand. If used together with '<' or '>', the operand 21446 can have postincrement which requires printing with '%In' and 21447 '%in' on TILEPro. For example: 21448 21449 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 21450 21451 'M' 21452 A bit mask suitable for the MM instruction. 21453 21454 'N' 21455 Integer constant that is a byte tiled out four times. 21456 21457 'O' 21458 The integer zero constant. 21459 21460 'P' 21461 Integer constant that is a sign-extended byte tiled out as two 21462 shorts. 21463 21464 'Q' 21465 Integer constant that fits in one signed byte when incremented 21466 (-129 ... 126), but excluding -1. 21467 21468 'T' 21469 A symbolic operand, or a 16-bit fragment of a got, tls, or 21470 pc-relative reference. 21471 21472 'U' 21473 Memory operand except postincrement. This is roughly the same 21474 as 'm' when not used together with '<' or '>'. 21475 21476 'W' 21477 A 4-element vector constant with identical elements. 21478 21479 'Y' 21480 A 2-element vector constant with identical elements. 21481 21482 _Xtensa--'config/xtensa/constraints.md'_ 21483 'a' 21484 General-purpose 32-bit register 21485 21486 'b' 21487 One-bit boolean register 21488 21489 'A' 21490 MAC16 40-bit accumulator register 21491 21492 'I' 21493 Signed 12-bit integer constant, for use in MOVI instructions 21494 21495 'J' 21496 Signed 8-bit integer constant, for use in ADDI instructions 21497 21498 'K' 21499 Integer constant valid for BccI instructions 21500 21501 'L' 21502 Unsigned constant valid for BccUI instructions 21503 21504 21505 File: gccint.info, Node: Disable Insn Alternatives, Next: Define Constraints, Prev: Machine Constraints, Up: Constraints 21506 21507 16.8.6 Disable insn alternatives using the 'enabled' attribute 21508 -------------------------------------------------------------- 21509 21510 The 'enabled' insn attribute may be used to disable certain insn 21511 alternatives for machine-specific reasons. This is useful when adding 21512 new instructions to an existing pattern which are only available for 21513 certain cpu architecture levels as specified with the '-march=' option. 21514 21515 If an insn alternative is disabled, then it will never be used. The 21516 compiler treats the constraints for the disabled alternative as 21517 unsatisfiable. 21518 21519 In order to make use of the 'enabled' attribute a back end has to add 21520 in the machine description files: 21521 21522 1. A definition of the 'enabled' insn attribute. The attribute is 21523 defined as usual using the 'define_attr' command. This definition 21524 should be based on other insn attributes and/or target flags. The 21525 'enabled' attribute is a numeric attribute and should evaluate to 21526 '(const_int 1)' for an enabled alternative and to '(const_int 0)' 21527 otherwise. 21528 2. A definition of another insn attribute used to describe for what 21529 reason an insn alternative might be available or not. E.g. 21530 'cpu_facility' as in the example below. 21531 3. An assignment for the second attribute to each insn definition 21532 combining instructions which are not all available under the same 21533 circumstances. (Note: It obviously only makes sense for 21534 definitions with more than one alternative. Otherwise the insn 21535 pattern should be disabled or enabled using the insn condition.) 21536 21537 E.g. the following two patterns could easily be merged using the 21538 'enabled' attribute: 21539 21540 21541 (define_insn "*movdi_old" 21542 [(set (match_operand:DI 0 "register_operand" "=d") 21543 (match_operand:DI 1 "register_operand" " d"))] 21544 "!TARGET_NEW" 21545 "lgr %0,%1") 21546 21547 (define_insn "*movdi_new" 21548 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 21549 (match_operand:DI 1 "register_operand" " d,d,f"))] 21550 "TARGET_NEW" 21551 "@ 21552 lgr %0,%1 21553 ldgr %0,%1 21554 lgdr %0,%1") 21555 21556 21557 to: 21558 21559 21560 (define_insn "*movdi_combined" 21561 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 21562 (match_operand:DI 1 "register_operand" " d,d,f"))] 21563 "" 21564 "@ 21565 lgr %0,%1 21566 ldgr %0,%1 21567 lgdr %0,%1" 21568 [(set_attr "cpu_facility" "*,new,new")]) 21569 21570 21571 with the 'enabled' attribute defined like this: 21572 21573 21574 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 21575 21576 (define_attr "enabled" "" 21577 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 21578 (and (eq_attr "cpu_facility" "new") 21579 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 21580 (const_int 1)] 21581 (const_int 0))) 21582 21583 21584 21585 File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Disable Insn Alternatives, Up: Constraints 21586 21587 16.8.7 Defining Machine-Specific Constraints 21588 -------------------------------------------- 21589 21590 Machine-specific constraints fall into two categories: register and 21591 non-register constraints. Within the latter category, constraints which 21592 allow subsets of all possible memory or address operands should be 21593 specially marked, to give 'reload' more information. 21594 21595 Machine-specific constraints can be given names of arbitrary length, 21596 but they must be entirely composed of letters, digits, underscores 21597 ('_'), and angle brackets ('< >'). Like C identifiers, they must begin 21598 with a letter or underscore. 21599 21600 In order to avoid ambiguity in operand constraint strings, no 21601 constraint can have a name that begins with any other constraint's name. 21602 For example, if 'x' is defined as a constraint name, 'xy' may not be, 21603 and vice versa. As a consequence of this rule, no constraint may begin 21604 with one of the generic constraint letters: 'E F V X g i m n o p r s'. 21605 21606 Register constraints correspond directly to register classes. *Note 21607 Register Classes::. There is thus not much flexibility in their 21608 definitions. 21609 21610 -- MD Expression: define_register_constraint name regclass docstring 21611 All three arguments are string constants. NAME is the name of the 21612 constraint, as it will appear in 'match_operand' expressions. If 21613 NAME is a multi-letter constraint its length shall be the same for 21614 all constraints starting with the same letter. REGCLASS can be 21615 either the name of the corresponding register class (*note Register 21616 Classes::), or a C expression which evaluates to the appropriate 21617 register class. If it is an expression, it must have no side 21618 effects, and it cannot look at the operand. The usual use of 21619 expressions is to map some register constraints to 'NO_REGS' when 21620 the register class is not available on a given subarchitecture. 21621 21622 DOCSTRING is a sentence documenting the meaning of the constraint. 21623 Docstrings are explained further below. 21624 21625 Non-register constraints are more like predicates: the constraint 21626 definition gives a Boolean expression which indicates whether the 21627 constraint matches. 21628 21629 -- MD Expression: define_constraint name docstring exp 21630 The NAME and DOCSTRING arguments are the same as for 21631 'define_register_constraint', but note that the docstring comes 21632 immediately after the name for these expressions. EXP is an RTL 21633 expression, obeying the same rules as the RTL expressions in 21634 predicate definitions. *Note Defining Predicates::, for details. 21635 If it evaluates true, the constraint matches; if it evaluates 21636 false, it doesn't. Constraint expressions should indicate which 21637 RTL codes they might match, just like predicate expressions. 21638 21639 'match_test' C expressions have access to the following variables: 21640 21641 OP 21642 The RTL object defining the operand. 21643 MODE 21644 The machine mode of OP. 21645 IVAL 21646 'INTVAL (OP)', if OP is a 'const_int'. 21647 HVAL 21648 'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'. 21649 LVAL 21650 'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'. 21651 RVAL 21652 'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 21653 'const_double'. 21654 21655 The *VAL variables should only be used once another piece of the 21656 expression has verified that OP is the appropriate kind of RTL 21657 object. 21658 21659 Most non-register constraints should be defined with 21660 'define_constraint'. The remaining two definition expressions are only 21661 appropriate for constraints that should be handled specially by 'reload' 21662 if they fail to match. 21663 21664 -- MD Expression: define_memory_constraint name docstring exp 21665 Use this expression for constraints that match a subset of all 21666 memory operands: that is, 'reload' can make them match by 21667 converting the operand to the form '(mem (reg X))', where X is a 21668 base register (from the register class specified by 21669 'BASE_REG_CLASS', *note Register Classes::). 21670 21671 For example, on the S/390, some instructions do not accept 21672 arbitrary memory references, but only those that do not make use of 21673 an index register. The constraint letter 'Q' is defined to 21674 represent a memory address of this type. If 'Q' is defined with 21675 'define_memory_constraint', a 'Q' constraint can handle any memory 21676 operand, because 'reload' knows it can simply copy the memory 21677 address into a base register if required. This is analogous to the 21678 way an 'o' constraint can handle any memory operand. 21679 21680 The syntax and semantics are otherwise identical to 21681 'define_constraint'. 21682 21683 -- MD Expression: define_address_constraint name docstring exp 21684 Use this expression for constraints that match a subset of all 21685 address operands: that is, 'reload' can make the constraint match 21686 by converting the operand to the form '(reg X)', again with X a 21687 base register. 21688 21689 Constraints defined with 'define_address_constraint' can only be 21690 used with the 'address_operand' predicate, or machine-specific 21691 predicates that work the same way. They are treated analogously to 21692 the generic 'p' constraint. 21693 21694 The syntax and semantics are otherwise identical to 21695 'define_constraint'. 21696 21697 For historical reasons, names beginning with the letters 'G H' are 21698 reserved for constraints that match only 'const_double's, and names 21699 beginning with the letters 'I J K L M N O P' are reserved for 21700 constraints that match only 'const_int's. This may change in the 21701 future. For the time being, constraints with these names must be 21702 written in a stylized form, so that 'genpreds' can tell you did it 21703 correctly: 21704 21705 (define_constraint "[GHIJKLMNOP]..." 21706 "DOC..." 21707 (and (match_code "const_int") ; 'const_double' for G/H 21708 CONDITION...)) ; usually a 'match_test' 21709 21710 It is fine to use names beginning with other letters for constraints 21711 that match 'const_double's or 'const_int's. 21712 21713 Each docstring in a constraint definition should be one or more 21714 complete sentences, marked up in Texinfo format. _They are currently 21715 unused._ In the future they will be copied into the GCC manual, in 21716 *note Machine Constraints::, replacing the hand-maintained tables 21717 currently found in that section. Also, in the future the compiler may 21718 use this to give more helpful diagnostics when poor choice of 'asm' 21719 constraints causes a reload failure. 21720 21721 If you put the pseudo-Texinfo directive '@internal' at the beginning of 21722 a docstring, then (in the future) it will appear only in the internals 21723 manual's version of the machine-specific constraint tables. Use this 21724 for constraints that should not appear in 'asm' statements. 21725 21726 21727 File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 21728 21729 16.8.8 Testing constraints from C 21730 --------------------------------- 21731 21732 It is occasionally useful to test a constraint from C code rather than 21733 implicitly via the constraint string in a 'match_operand'. The 21734 generated file 'tm_p.h' declares a few interfaces for working with 21735 machine-specific constraints. None of these interfaces work with the 21736 generic constraints described in *note Simple Constraints::. This may 21737 change in the future. 21738 21739 *Warning:* 'tm_p.h' may declare other functions that operate on 21740 constraints, besides the ones documented here. Do not use those 21741 functions from machine-dependent code. They exist to implement the old 21742 constraint interface that machine-independent components of the compiler 21743 still expect. They will change or disappear in the future. 21744 21745 Some valid constraint names are not valid C identifiers, so there is a 21746 mangling scheme for referring to them from C. Constraint names that do 21747 not contain angle brackets or underscores are left unchanged. 21748 Underscores are doubled, each '<' is replaced with '_l', and each '>' 21749 with '_g'. Here are some examples: 21750 21751 *Original* *Mangled* 21752 x x 21753 P42x P42x 21754 P4_x P4__x 21755 P4>x P4_gx 21756 P4>> P4_g_g 21757 P4_g> P4__g_g 21758 21759 Throughout this section, the variable C is either a constraint in the 21760 abstract sense, or a constant from 'enum constraint_num'; the variable M 21761 is a mangled constraint name (usually as part of a larger identifier). 21762 21763 -- Enum: constraint_num 21764 For each machine-specific constraint, there is a corresponding 21765 enumeration constant: 'CONSTRAINT_' plus the mangled name of the 21766 constraint. Functions that take an 'enum constraint_num' as an 21767 argument expect one of these constants. 21768 21769 Machine-independent constraints do not have associated constants. 21770 This may change in the future. 21771 21772 -- Function: inline bool satisfies_constraint_ M (rtx EXP) 21773 For each machine-specific, non-register constraint M, there is one 21774 of these functions; it returns 'true' if EXP satisfies the 21775 constraint. These functions are only visible if 'rtl.h' was 21776 included before 'tm_p.h'. 21777 21778 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 21779 C) 21780 Like the 'satisfies_constraint_M' functions, but the constraint to 21781 test is given as an argument, C. If C specifies a register 21782 constraint, this function will always return 'false'. 21783 21784 -- Function: enum reg_class regclass_for_constraint (enum 21785 constraint_num C) 21786 Returns the register class associated with C. If C is not a 21787 register constraint, or those registers are not available for the 21788 currently selected subtarget, returns 'NO_REGS'. 21789 21790 Here is an example use of 'satisfies_constraint_M'. In peephole 21791 optimizations (*note Peephole Definitions::), operand constraint strings 21792 are ignored, so if there are relevant constraints, they must be tested 21793 in the C condition. In the example, the optimization is applied if 21794 operand 2 does _not_ satisfy the 'K' constraint. (This is a simplified 21795 version of a peephole definition from the i386 machine description.) 21796 21797 (define_peephole2 21798 [(match_scratch:SI 3 "r") 21799 (set (match_operand:SI 0 "register_operand" "") 21800 (mult:SI (match_operand:SI 1 "memory_operand" "") 21801 (match_operand:SI 2 "immediate_operand" "")))] 21802 21803 "!satisfies_constraint_K (operands[2])" 21804 21805 [(set (match_dup 3) (match_dup 1)) 21806 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 21807 21808 "") 21809 21810 21811 File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 21812 21813 16.9 Standard Pattern Names For Generation 21814 ========================================== 21815 21816 Here is a table of the instruction names that are meaningful in the RTL 21817 generation pass of the compiler. Giving one of these names to an 21818 instruction pattern tells the RTL generation pass that it can use the 21819 pattern to accomplish a certain task. 21820 21821 'movM' 21822 Here M stands for a two-letter machine mode name, in lowercase. 21823 This instruction pattern moves data with that machine mode from 21824 operand 1 to operand 0. For example, 'movsi' moves full-word data. 21825 21826 If operand 0 is a 'subreg' with mode M of a register whose own mode 21827 is wider than M, the effect of this instruction is to store the 21828 specified value in the part of the register that corresponds to 21829 mode M. Bits outside of M, but which are within the same target 21830 word as the 'subreg' are undefined. Bits which are outside the 21831 target word are left unchanged. 21832 21833 This class of patterns is special in several ways. First of all, 21834 each of these names up to and including full word size _must_ be 21835 defined, because there is no other way to copy a datum from one 21836 place to another. If there are patterns accepting operands in 21837 larger modes, 'movM' must be defined for integer modes of those 21838 sizes. 21839 21840 Second, these patterns are not used solely in the RTL generation 21841 pass. Even the reload pass can generate move insns to copy values 21842 from stack slots into temporary registers. When it does so, one of 21843 the operands is a hard register and the other is an operand that 21844 can need to be reloaded into a register. 21845 21846 Therefore, when given such a pair of operands, the pattern must 21847 generate RTL which needs no reloading and needs no temporary 21848 registers--no registers other than the operands. For example, if 21849 you support the pattern with a 'define_expand', then in such a case 21850 the 'define_expand' mustn't call 'force_reg' or any other such 21851 function which might generate new pseudo registers. 21852 21853 This requirement exists even for subword modes on a RISC machine 21854 where fetching those modes from memory normally requires several 21855 insns and some temporary registers. 21856 21857 During reload a memory reference with an invalid address may be 21858 passed as an operand. Such an address will be replaced with a 21859 valid address later in the reload pass. In this case, nothing may 21860 be done with the address except to use it as it stands. If it is 21861 copied, it will not be replaced with a valid address. No attempt 21862 should be made to make such an address into a valid address and no 21863 routine (such as 'change_address') that will do so may be called. 21864 Note that 'general_operand' will fail when applied to such an 21865 address. 21866 21867 The global variable 'reload_in_progress' (which must be explicitly 21868 declared if required) can be used to determine whether such special 21869 handling is required. 21870 21871 The variety of operands that have reloads depends on the rest of 21872 the machine description, but typically on a RISC machine these can 21873 only be pseudo registers that did not get hard registers, while on 21874 other machines explicit memory references will get optional 21875 reloads. 21876 21877 If a scratch register is required to move an object to or from 21878 memory, it can be allocated using 'gen_reg_rtx' prior to life 21879 analysis. 21880 21881 If there are cases which need scratch registers during or after 21882 reload, you must provide an appropriate secondary_reload target 21883 hook. 21884 21885 The macro 'can_create_pseudo_p' can be used to determine if it is 21886 unsafe to create new pseudo registers. If this variable is 21887 nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new 21888 pseudo. 21889 21890 The constraints on a 'movM' must permit moving any hard register to 21891 any other hard register provided that 'HARD_REGNO_MODE_OK' permits 21892 mode M in both registers and 'TARGET_REGISTER_MOVE_COST' applied to 21893 their classes returns a value of 2. 21894 21895 It is obligatory to support floating point 'movM' instructions into 21896 and out of any registers that can hold fixed point values, because 21897 unions and structures (which have modes 'SImode' or 'DImode') can 21898 be in those registers and they may have floating point members. 21899 21900 There may also be a need to support fixed point 'movM' instructions 21901 in and out of floating point registers. Unfortunately, I have 21902 forgotten why this was so, and I don't know whether it is still 21903 true. If 'HARD_REGNO_MODE_OK' rejects fixed point values in 21904 floating point registers, then the constraints of the fixed point 21905 'movM' instructions must be designed to avoid ever trying to reload 21906 into a floating point register. 21907 21908 'reload_inM' 21909 'reload_outM' 21910 These named patterns have been obsoleted by the target hook 21911 'secondary_reload'. 21912 21913 Like 'movM', but used when a scratch register is required to move 21914 between operand 0 and operand 1. Operand 2 describes the scratch 21915 register. See the discussion of the 'SECONDARY_RELOAD_CLASS' macro 21916 in *note Register Classes::. 21917 21918 There are special restrictions on the form of the 'match_operand's 21919 used in these patterns. First, only the predicate for the reload 21920 operand is examined, i.e., 'reload_in' examines operand 1, but not 21921 the predicates for operand 0 or 2. Second, there may be only one 21922 alternative in the constraints. Third, only a single register 21923 class letter may be used for the constraint; subsequent constraint 21924 letters are ignored. As a special exception, an empty constraint 21925 string matches the 'ALL_REGS' register class. This may relieve 21926 ports of the burden of defining an 'ALL_REGS' constraint letter 21927 just for these patterns. 21928 21929 'movstrictM' 21930 Like 'movM' except that if operand 0 is a 'subreg' with mode M of a 21931 register whose natural mode is wider, the 'movstrictM' instruction 21932 is guaranteed not to alter any of the register except the part 21933 which belongs to mode M. 21934 21935 'movmisalignM' 21936 This variant of a move pattern is designed to load or store a value 21937 from a memory address that is not naturally aligned for its mode. 21938 For a store, the memory will be in operand 0; for a load, the 21939 memory will be in operand 1. The other operand is guaranteed not 21940 to be a memory, so that it's easy to tell whether this is a load or 21941 store. 21942 21943 This pattern is used by the autovectorizer, and when expanding a 21944 'MISALIGNED_INDIRECT_REF' expression. 21945 21946 'load_multiple' 21947 Load several consecutive memory locations into consecutive 21948 registers. Operand 0 is the first of the consecutive registers, 21949 operand 1 is the first memory location, and operand 2 is a 21950 constant: the number of consecutive registers. 21951 21952 Define this only if the target machine really has such an 21953 instruction; do not define this if the most efficient way of 21954 loading consecutive registers from memory is to do them one at a 21955 time. 21956 21957 On some machines, there are restrictions as to which consecutive 21958 registers can be stored into memory, such as particular starting or 21959 ending register numbers or only a range of valid counts. For those 21960 machines, use a 'define_expand' (*note Expander Definitions::) and 21961 make the pattern fail if the restrictions are not met. 21962 21963 Write the generated insn as a 'parallel' with elements being a 21964 'set' of one register from the appropriate memory location (you may 21965 also need 'use' or 'clobber' elements). Use a 'match_parallel' 21966 (*note RTL Template::) to recognize the insn. See 'rs6000.md' for 21967 examples of the use of this insn pattern. 21968 21969 'store_multiple' 21970 Similar to 'load_multiple', but store several consecutive registers 21971 into consecutive memory locations. Operand 0 is the first of the 21972 consecutive memory locations, operand 1 is the first register, and 21973 operand 2 is a constant: the number of consecutive registers. 21974 21975 'vec_load_lanesMN' 21976 Perform an interleaved load of several vectors from memory operand 21977 1 into register operand 0. Both operands have mode M. The 21978 register operand is viewed as holding consecutive vectors of mode 21979 N, while the memory operand is a flat array that contains the same 21980 number of elements. The operation is equivalent to: 21981 21982 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 21983 for (j = 0; j < GET_MODE_NUNITS (N); j++) 21984 for (i = 0; i < c; i++) 21985 operand0[i][j] = operand1[j * c + i]; 21986 21987 For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from 21988 memory into a register of mode 'TI'. The register contains two 21989 consecutive vectors of mode 'V4HI'. 21990 21991 This pattern can only be used if: 21992 TARGET_ARRAY_MODE_SUPPORTED_P (N, C) 21993 is true. GCC assumes that, if a target supports this kind of 21994 instruction for some mode N, it also supports unaligned loads for 21995 vectors of mode N. 21996 21997 'vec_store_lanesMN' 21998 Equivalent to 'vec_load_lanesMN', with the memory and register 21999 operands reversed. That is, the instruction is equivalent to: 22000 22001 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22002 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22003 for (i = 0; i < c; i++) 22004 operand0[j * c + i] = operand1[i][j]; 22005 22006 for a memory operand 0 and register operand 1. 22007 22008 'vec_setM' 22009 Set given field in the vector value. Operand 0 is the vector to 22010 modify, operand 1 is new value of field and operand 2 specify the 22011 field index. 22012 22013 'vec_extractM' 22014 Extract given field from the vector value. Operand 1 is the 22015 vector, operand 2 specify field index and operand 0 place to store 22016 value into. 22017 22018 'vec_initM' 22019 Initialize the vector to given values. Operand 0 is the vector to 22020 initialize and operand 1 is parallel containing values for 22021 individual fields. 22022 22023 'vcondMN' 22024 Output a conditional vector move. Operand 0 is the destination to 22025 receive a combination of operand 1 and operand 2, which are of mode 22026 M, dependent on the outcome of the predicate in operand 3 which is 22027 a vector comparison with operands of mode N in operands 4 and 5. 22028 The modes M and N should have the same size. Operand 0 will be set 22029 to the value OP1 & MSK | OP2 & ~MSK where MSK is computed by 22030 element-wise evaluation of the vector comparison with a truth value 22031 of all-ones and a false value of all-zeros. 22032 22033 'vec_permM' 22034 Output a (variable) vector permutation. Operand 0 is the 22035 destination to receive elements from operand 1 and operand 2, which 22036 are of mode M. Operand 3 is the "selector". It is an integral 22037 mode vector of the same width and number of elements as mode M. 22038 22039 The input elements are numbered from 0 in operand 1 through 2*N-1 22040 in operand 2. The elements of the selector must be computed modulo 22041 2*N. Note that if 'rtx_equal_p(operand1, operand2)', this can be 22042 implemented with just operand 1 and selector elements modulo N. 22043 22044 In order to make things easy for a number of targets, if there is 22045 no 'vec_perm' pattern for mode M, but there is for mode Q where Q 22046 is a vector of 'QImode' of the same width as M, the middle-end will 22047 lower the mode M 'VEC_PERM_EXPR' to mode Q. 22048 22049 'vec_perm_constM' 22050 Like 'vec_perm' except that the permutation is a compile-time 22051 constant. That is, operand 3, the "selector", is a 'CONST_VECTOR'. 22052 22053 Some targets cannot perform a permutation with a variable selector, 22054 but can efficiently perform a constant permutation. Further, the 22055 target hook 'vec_perm_ok' is queried to determine if the specific 22056 constant permutation is available efficiently; the named pattern is 22057 never expanded without 'vec_perm_ok' returning true. 22058 22059 There is no need for a target to supply both 'vec_permM' and 22060 'vec_perm_constM' if the former can trivially implement the 22061 operation with, say, the vector constant loaded into a register. 22062 22063 'pushM1' 22064 Output a push instruction. Operand 0 is value to push. Used only 22065 when 'PUSH_ROUNDING' is defined. For historical reason, this 22066 pattern may be missing and in such case an 'mov' expander is used 22067 instead, with a 'MEM' expression forming the push operation. The 22068 'mov' expander method is deprecated. 22069 22070 'addM3' 22071 Add operand 2 and operand 1, storing the result in operand 0. All 22072 operands must have mode M. This can be used even on two-address 22073 machines, by means of constraints requiring operands 1 and 0 to be 22074 the same location. 22075 22076 'ssaddM3', 'usaddM3' 22077 'subM3', 'sssubM3', 'ussubM3' 22078 'mulM3', 'ssmulM3', 'usmulM3' 22079 'divM3', 'ssdivM3' 22080 'udivM3', 'usdivM3' 22081 'modM3', 'umodM3' 22082 'uminM3', 'umaxM3' 22083 'andM3', 'iorM3', 'xorM3' 22084 Similar, for other arithmetic operations. 22085 22086 'fmaM4' 22087 Multiply operand 2 and operand 1, then add operand 3, storing the 22088 result in operand 0 without doing an intermediate rounding step. 22089 All operands must have mode M. This pattern is used to implement 22090 the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99 22091 standard. 22092 22093 'fmsM4' 22094 Like 'fmaM4', except operand 3 subtracted from the product instead 22095 of added to the product. This is represented in the rtl as 22096 22097 (fma:M OP1 OP2 (neg:M OP3)) 22098 22099 'fnmaM4' 22100 Like 'fmaM4' except that the intermediate product is negated before 22101 being added to operand 3. This is represented in the rtl as 22102 22103 (fma:M (neg:M OP1) OP2 OP3) 22104 22105 'fnmsM4' 22106 Like 'fmsM4' except that the intermediate product is negated before 22107 subtracting operand 3. This is represented in the rtl as 22108 22109 (fma:M (neg:M OP1) OP2 (neg:M OP3)) 22110 22111 'sminM3', 'smaxM3' 22112 Signed minimum and maximum operations. When used with floating 22113 point, if both operands are zeros, or if either operand is 'NaN', 22114 then it is unspecified which of the two operands is returned as the 22115 result. 22116 22117 'reduc_smin_M', 'reduc_smax_M' 22118 Find the signed minimum/maximum of the elements of a vector. The 22119 vector is operand 1, and the scalar result is stored in the least 22120 significant bits of operand 0 (also a vector). The output and 22121 input vector should have the same modes. 22122 22123 'reduc_umin_M', 'reduc_umax_M' 22124 Find the unsigned minimum/maximum of the elements of a vector. The 22125 vector is operand 1, and the scalar result is stored in the least 22126 significant bits of operand 0 (also a vector). The output and 22127 input vector should have the same modes. 22128 22129 'reduc_splus_M' 22130 Compute the sum of the signed elements of a vector. The vector is 22131 operand 1, and the scalar result is stored in the least significant 22132 bits of operand 0 (also a vector). The output and input vector 22133 should have the same modes. 22134 22135 'reduc_uplus_M' 22136 Compute the sum of the unsigned elements of a vector. The vector 22137 is operand 1, and the scalar result is stored in the least 22138 significant bits of operand 0 (also a vector). The output and 22139 input vector should have the same modes. 22140 22141 'sdot_prodM' 22142 'udot_prodM' 22143 Compute the sum of the products of two signed/unsigned elements. 22144 Operand 1 and operand 2 are of the same mode. Their product, which 22145 is of a wider mode, is computed and added to operand 3. Operand 3 22146 is of a mode equal or wider than the mode of the product. The 22147 result is placed in operand 0, which is of the same mode as operand 22148 3. 22149 22150 'ssum_widenM3' 22151 'usum_widenM3' 22152 Operands 0 and 2 are of the same mode, which is wider than the mode 22153 of operand 1. Add operand 1 to operand 2 and place the widened 22154 result in operand 0. (This is used express accumulation of 22155 elements into an accumulator of a wider mode.) 22156 22157 'vec_shl_M', 'vec_shr_M' 22158 Whole vector left/right shift in bits. Operand 1 is a vector to be 22159 shifted. Operand 2 is an integer shift amount in bits. Operand 0 22160 is where the resulting shifted vector is stored. The output and 22161 input vectors should have the same modes. 22162 22163 'vec_pack_trunc_M' 22164 Narrow (demote) and merge the elements of two vectors. Operands 1 22165 and 2 are vectors of the same mode having N integral or floating 22166 point elements of size S. Operand 0 is the resulting vector in 22167 which 2*N elements of size N/2 are concatenated after narrowing 22168 them down using truncation. 22169 22170 'vec_pack_ssat_M', 'vec_pack_usat_M' 22171 Narrow (demote) and merge the elements of two vectors. Operands 1 22172 and 2 are vectors of the same mode having N integral elements of 22173 size S. Operand 0 is the resulting vector in which the elements of 22174 the two input vectors are concatenated after narrowing them down 22175 using signed/unsigned saturating arithmetic. 22176 22177 'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M' 22178 Narrow, convert to signed/unsigned integral type and merge the 22179 elements of two vectors. Operands 1 and 2 are vectors of the same 22180 mode having N floating point elements of size S. Operand 0 is the 22181 resulting vector in which 2*N elements of size N/2 are 22182 concatenated. 22183 22184 'vec_unpacks_hi_M', 'vec_unpacks_lo_M' 22185 Extract and widen (promote) the high/low part of a vector of signed 22186 integral or floating point elements. The input vector (operand 1) 22187 has N elements of size S. Widen (promote) the high/low elements of 22188 the vector using signed or floating point extension and place the 22189 resulting N/2 values of size 2*S in the output vector (operand 0). 22190 22191 'vec_unpacku_hi_M', 'vec_unpacku_lo_M' 22192 Extract and widen (promote) the high/low part of a vector of 22193 unsigned integral elements. The input vector (operand 1) has N 22194 elements of size S. Widen (promote) the high/low elements of the 22195 vector using zero extension and place the resulting N/2 values of 22196 size 2*S in the output vector (operand 0). 22197 22198 'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M' 22199 'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M' 22200 Extract, convert to floating point type and widen the high/low part 22201 of a vector of signed/unsigned integral elements. The input vector 22202 (operand 1) has N elements of size S. Convert the high/low 22203 elements of the vector using floating point conversion and place 22204 the resulting N/2 values of size 2*S in the output vector (operand 22205 0). 22206 22207 'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M' 22208 'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M' 22209 'vec_widen_umult_even_M', 'vec_widen_umult_odd_M' 22210 'vec_widen_smult_even_M', 'vec_widen_smult_odd_M' 22211 Signed/Unsigned widening multiplication. The two inputs (operands 22212 1 and 2) are vectors with N signed/unsigned elements of size S. 22213 Multiply the high/low or even/odd elements of the two vectors, and 22214 put the N/2 products of size 2*S in the output vector (operand 0). 22215 22216 'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M' 22217 'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M' 22218 Signed/Unsigned widening shift left. The first input (operand 1) 22219 is a vector with N signed/unsigned elements of size S. Operand 2 22220 is a constant. Shift the high/low elements of operand 1, and put 22221 the N/2 results of size 2*S in the output vector (operand 0). 22222 22223 'mulhisi3' 22224 Multiply operands 1 and 2, which have mode 'HImode', and store a 22225 'SImode' product in operand 0. 22226 22227 'mulqihi3', 'mulsidi3' 22228 Similar widening-multiplication instructions of other widths. 22229 22230 'umulqihi3', 'umulhisi3', 'umulsidi3' 22231 Similar widening-multiplication instructions that do unsigned 22232 multiplication. 22233 22234 'usmulqihi3', 'usmulhisi3', 'usmulsidi3' 22235 Similar widening-multiplication instructions that interpret the 22236 first operand as unsigned and the second operand as signed, then do 22237 a signed multiplication. 22238 22239 'smulM3_highpart' 22240 Perform a signed multiplication of operands 1 and 2, which have 22241 mode M, and store the most significant half of the product in 22242 operand 0. The least significant half of the product is discarded. 22243 22244 'umulM3_highpart' 22245 Similar, but the multiplication is unsigned. 22246 22247 'maddMN4' 22248 Multiply operands 1 and 2, sign-extend them to mode N, add operand 22249 3, and store the result in operand 0. Operands 1 and 2 have mode M 22250 and operands 0 and 3 have mode N. Both modes must be integer or 22251 fixed-point modes and N must be twice the size of M. 22252 22253 In other words, 'maddMN4' is like 'mulMN3' except that it also adds 22254 operand 3. 22255 22256 These instructions are not allowed to 'FAIL'. 22257 22258 'umaddMN4' 22259 Like 'maddMN4', but zero-extend the multiplication operands instead 22260 of sign-extending them. 22261 22262 'ssmaddMN4' 22263 Like 'maddMN4', but all involved operations must be 22264 signed-saturating. 22265 22266 'usmaddMN4' 22267 Like 'umaddMN4', but all involved operations must be 22268 unsigned-saturating. 22269 22270 'msubMN4' 22271 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 22272 result from operand 3, and store the result in operand 0. Operands 22273 1 and 2 have mode M and operands 0 and 3 have mode N. Both modes 22274 must be integer or fixed-point modes and N must be twice the size 22275 of M. 22276 22277 In other words, 'msubMN4' is like 'mulMN3' except that it also 22278 subtracts the result from operand 3. 22279 22280 These instructions are not allowed to 'FAIL'. 22281 22282 'umsubMN4' 22283 Like 'msubMN4', but zero-extend the multiplication operands instead 22284 of sign-extending them. 22285 22286 'ssmsubMN4' 22287 Like 'msubMN4', but all involved operations must be 22288 signed-saturating. 22289 22290 'usmsubMN4' 22291 Like 'umsubMN4', but all involved operations must be 22292 unsigned-saturating. 22293 22294 'divmodM4' 22295 Signed division that produces both a quotient and a remainder. 22296 Operand 1 is divided by operand 2 to produce a quotient stored in 22297 operand 0 and a remainder stored in operand 3. 22298 22299 For machines with an instruction that produces both a quotient and 22300 a remainder, provide a pattern for 'divmodM4' but do not provide 22301 patterns for 'divM3' and 'modM3'. This allows optimization in the 22302 relatively common case when both the quotient and remainder are 22303 computed. 22304 22305 If an instruction that just produces a quotient or just a remainder 22306 exists and is more efficient than the instruction that produces 22307 both, write the output routine of 'divmodM4' to call 22308 'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or 22309 remainder and generate the appropriate instruction. 22310 22311 'udivmodM4' 22312 Similar, but does unsigned division. 22313 22314 'ashlM3', 'ssashlM3', 'usashlM3' 22315 Arithmetic-shift operand 1 left by a number of bits specified by 22316 operand 2, and store the result in operand 0. Here M is the mode 22317 of operand 0 and operand 1; operand 2's mode is specified by the 22318 instruction pattern, and the compiler will convert the operand to 22319 that mode before generating the instruction. The meaning of 22320 out-of-range shift counts can optionally be specified by 22321 'TARGET_SHIFT_TRUNCATION_MASK'. *Note 22322 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 22323 22324 'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3' 22325 Other shift and rotate instructions, analogous to the 'ashlM3' 22326 instructions. Operand 2 is always a scalar type. 22327 22328 'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3' 22329 Vector shift and rotate instructions that take vectors as operand 2 22330 instead of a scalar type. 22331 22332 'bswapM2' 22333 Reverse the order of bytes of operand 1 and store the result in 22334 operand 0. 22335 22336 'negM2', 'ssnegM2', 'usnegM2' 22337 Negate operand 1 and store the result in operand 0. 22338 22339 'absM2' 22340 Store the absolute value of operand 1 into operand 0. 22341 22342 'sqrtM2' 22343 Store the square root of operand 1 into operand 0. 22344 22345 The 'sqrt' built-in function of C always uses the mode which 22346 corresponds to the C data type 'double' and the 'sqrtf' built-in 22347 function uses the mode which corresponds to the C data type 22348 'float'. 22349 22350 'fmodM3' 22351 Store the remainder of dividing operand 1 by operand 2 into operand 22352 0, rounded towards zero to an integer. 22353 22354 The 'fmod' built-in function of C always uses the mode which 22355 corresponds to the C data type 'double' and the 'fmodf' built-in 22356 function uses the mode which corresponds to the C data type 22357 'float'. 22358 22359 'remainderM3' 22360 Store the remainder of dividing operand 1 by operand 2 into operand 22361 0, rounded to the nearest integer. 22362 22363 The 'remainder' built-in function of C always uses the mode which 22364 corresponds to the C data type 'double' and the 'remainderf' 22365 built-in function uses the mode which corresponds to the C data 22366 type 'float'. 22367 22368 'cosM2' 22369 Store the cosine of operand 1 into operand 0. 22370 22371 The 'cos' built-in function of C always uses the mode which 22372 corresponds to the C data type 'double' and the 'cosf' built-in 22373 function uses the mode which corresponds to the C data type 22374 'float'. 22375 22376 'sinM2' 22377 Store the sine of operand 1 into operand 0. 22378 22379 The 'sin' built-in function of C always uses the mode which 22380 corresponds to the C data type 'double' and the 'sinf' built-in 22381 function uses the mode which corresponds to the C data type 22382 'float'. 22383 22384 'sincosM3' 22385 Store the cosine of operand 2 into operand 0 and the sine of 22386 operand 2 into operand 1. 22387 22388 The 'sin' and 'cos' built-in functions of C always use the mode 22389 which corresponds to the C data type 'double' and the 'sinf' and 22390 'cosf' built-in function use the mode which corresponds to the C 22391 data type 'float'. Targets that can calculate the sine and cosine 22392 simultaneously can implement this pattern as opposed to 22393 implementing individual 'sinM2' and 'cosM2' patterns. The 'sin' 22394 and 'cos' built-in functions will then be expanded to the 22395 'sincosM3' pattern, with one of the output values left unused. 22396 22397 'expM2' 22398 Store the exponential of operand 1 into operand 0. 22399 22400 The 'exp' built-in function of C always uses the mode which 22401 corresponds to the C data type 'double' and the 'expf' built-in 22402 function uses the mode which corresponds to the C data type 22403 'float'. 22404 22405 'logM2' 22406 Store the natural logarithm of operand 1 into operand 0. 22407 22408 The 'log' built-in function of C always uses the mode which 22409 corresponds to the C data type 'double' and the 'logf' built-in 22410 function uses the mode which corresponds to the C data type 22411 'float'. 22412 22413 'powM3' 22414 Store the value of operand 1 raised to the exponent operand 2 into 22415 operand 0. 22416 22417 The 'pow' built-in function of C always uses the mode which 22418 corresponds to the C data type 'double' and the 'powf' built-in 22419 function uses the mode which corresponds to the C data type 22420 'float'. 22421 22422 'atan2M3' 22423 Store the arc tangent (inverse tangent) of operand 1 divided by 22424 operand 2 into operand 0, using the signs of both arguments to 22425 determine the quadrant of the result. 22426 22427 The 'atan2' built-in function of C always uses the mode which 22428 corresponds to the C data type 'double' and the 'atan2f' built-in 22429 function uses the mode which corresponds to the C data type 22430 'float'. 22431 22432 'floorM2' 22433 Store the largest integral value not greater than argument. 22434 22435 The 'floor' built-in function of C always uses the mode which 22436 corresponds to the C data type 'double' and the 'floorf' built-in 22437 function uses the mode which corresponds to the C data type 22438 'float'. 22439 22440 'btruncM2' 22441 Store the argument rounded to integer towards zero. 22442 22443 The 'trunc' built-in function of C always uses the mode which 22444 corresponds to the C data type 'double' and the 'truncf' built-in 22445 function uses the mode which corresponds to the C data type 22446 'float'. 22447 22448 'roundM2' 22449 Store the argument rounded to integer away from zero. 22450 22451 The 'round' built-in function of C always uses the mode which 22452 corresponds to the C data type 'double' and the 'roundf' built-in 22453 function uses the mode which corresponds to the C data type 22454 'float'. 22455 22456 'ceilM2' 22457 Store the argument rounded to integer away from zero. 22458 22459 The 'ceil' built-in function of C always uses the mode which 22460 corresponds to the C data type 'double' and the 'ceilf' built-in 22461 function uses the mode which corresponds to the C data type 22462 'float'. 22463 22464 'nearbyintM2' 22465 Store the argument rounded according to the default rounding mode 22466 22467 The 'nearbyint' built-in function of C always uses the mode which 22468 corresponds to the C data type 'double' and the 'nearbyintf' 22469 built-in function uses the mode which corresponds to the C data 22470 type 'float'. 22471 22472 'rintM2' 22473 Store the argument rounded according to the default rounding mode 22474 and raise the inexact exception when the result differs in value 22475 from the argument 22476 22477 The 'rint' built-in function of C always uses the mode which 22478 corresponds to the C data type 'double' and the 'rintf' built-in 22479 function uses the mode which corresponds to the C data type 22480 'float'. 22481 22482 'lrintMN2' 22483 Convert operand 1 (valid for floating point mode M) to fixed point 22484 mode N as a signed number according to the current rounding mode 22485 and store in operand 0 (which has mode N). 22486 22487 'lroundMN2' 22488 Convert operand 1 (valid for floating point mode M) to fixed point 22489 mode N as a signed number rounding to nearest and away from zero 22490 and store in operand 0 (which has mode N). 22491 22492 'lfloorMN2' 22493 Convert operand 1 (valid for floating point mode M) to fixed point 22494 mode N as a signed number rounding down and store in operand 0 22495 (which has mode N). 22496 22497 'lceilMN2' 22498 Convert operand 1 (valid for floating point mode M) to fixed point 22499 mode N as a signed number rounding up and store in operand 0 (which 22500 has mode N). 22501 22502 'copysignM3' 22503 Store a value with the magnitude of operand 1 and the sign of 22504 operand 2 into operand 0. 22505 22506 The 'copysign' built-in function of C always uses the mode which 22507 corresponds to the C data type 'double' and the 'copysignf' 22508 built-in function uses the mode which corresponds to the C data 22509 type 'float'. 22510 22511 'ffsM2' 22512 Store into operand 0 one plus the index of the least significant 22513 1-bit of operand 1. If operand 1 is zero, store zero. M is the 22514 mode of operand 0; operand 1's mode is specified by the instruction 22515 pattern, and the compiler will convert the operand to that mode 22516 before generating the instruction. 22517 22518 The 'ffs' built-in function of C always uses the mode which 22519 corresponds to the C data type 'int'. 22520 22521 'clzM2' 22522 Store into operand 0 the number of leading 0-bits in X, starting at 22523 the most significant bit position. If X is 0, the 22524 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 22525 result is undefined or has a useful value. M is the mode of 22526 operand 0; operand 1's mode is specified by the instruction 22527 pattern, and the compiler will convert the operand to that mode 22528 before generating the instruction. 22529 22530 'ctzM2' 22531 Store into operand 0 the number of trailing 0-bits in X, starting 22532 at the least significant bit position. If X is 0, the 22533 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 22534 result is undefined or has a useful value. M is the mode of 22535 operand 0; operand 1's mode is specified by the instruction 22536 pattern, and the compiler will convert the operand to that mode 22537 before generating the instruction. 22538 22539 'popcountM2' 22540 Store into operand 0 the number of 1-bits in X. M is the mode of 22541 operand 0; operand 1's mode is specified by the instruction 22542 pattern, and the compiler will convert the operand to that mode 22543 before generating the instruction. 22544 22545 'parityM2' 22546 Store into operand 0 the parity of X, i.e. the number of 1-bits in 22547 X modulo 2. M is the mode of operand 0; operand 1's mode is 22548 specified by the instruction pattern, and the compiler will convert 22549 the operand to that mode before generating the instruction. 22550 22551 'one_cmplM2' 22552 Store the bitwise-complement of operand 1 into operand 0. 22553 22554 'movmemM' 22555 Block move instruction. The destination and source blocks of 22556 memory are the first two operands, and both are 'mem:BLK's with an 22557 address in mode 'Pmode'. 22558 22559 The number of bytes to move is the third operand, in mode M. 22560 Usually, you specify 'word_mode' for M. However, if you can 22561 generate better code knowing the range of valid lengths is smaller 22562 than those representable in a full word, you should provide a 22563 pattern with a mode corresponding to the range of values you can 22564 handle efficiently (e.g., 'QImode' for values in the range 0-127; 22565 note we avoid numbers that appear negative) and also a pattern with 22566 'word_mode'. 22567 22568 The fourth operand is the known shared alignment of the source and 22569 destination, in the form of a 'const_int' rtx. Thus, if the 22570 compiler knows that both source and destination are word-aligned, 22571 it may provide the value 4 for this operand. 22572 22573 Optional operands 5 and 6 specify expected alignment and size of 22574 block respectively. The expected alignment differs from alignment 22575 in operand 4 in a way that the blocks are not required to be 22576 aligned according to it in all cases. This expected alignment is 22577 also in bytes, just like operand 4. Expected size, when unknown, 22578 is set to '(const_int -1)'. 22579 22580 Descriptions of multiple 'movmemM' patterns can only be beneficial 22581 if the patterns for smaller modes have fewer restrictions on their 22582 first, second and fourth operands. Note that the mode M in 22583 'movmemM' does not impose any restriction on the mode of 22584 individually moved data units in the block. 22585 22586 These patterns need not give special consideration to the 22587 possibility that the source and destination strings might overlap. 22588 22589 'movstr' 22590 String copy instruction, with 'stpcpy' semantics. Operand 0 is an 22591 output operand in mode 'Pmode'. The addresses of the destination 22592 and source strings are operands 1 and 2, and both are 'mem:BLK's 22593 with addresses in mode 'Pmode'. The execution of the expansion of 22594 this pattern should store in operand 0 the address in which the 22595 'NUL' terminator was stored in the destination string. 22596 22597 'setmemM' 22598 Block set instruction. The destination string is the first 22599 operand, given as a 'mem:BLK' whose address is in mode 'Pmode'. 22600 The number of bytes to set is the second operand, in mode M. The 22601 value to initialize the memory with is the third operand. Targets 22602 that only support the clearing of memory should reject any value 22603 that is not the constant 0. See 'movmemM' for a discussion of the 22604 choice of mode. 22605 22606 The fourth operand is the known alignment of the destination, in 22607 the form of a 'const_int' rtx. Thus, if the compiler knows that 22608 the destination is word-aligned, it may provide the value 4 for 22609 this operand. 22610 22611 Optional operands 5 and 6 specify expected alignment and size of 22612 block respectively. The expected alignment differs from alignment 22613 in operand 4 in a way that the blocks are not required to be 22614 aligned according to it in all cases. This expected alignment is 22615 also in bytes, just like operand 4. Expected size, when unknown, 22616 is set to '(const_int -1)'. 22617 22618 The use for multiple 'setmemM' is as for 'movmemM'. 22619 22620 'cmpstrnM' 22621 String compare instruction, with five operands. Operand 0 is the 22622 output; it has mode M. The remaining four operands are like the 22623 operands of 'movmemM'. The two memory blocks specified are 22624 compared byte by byte in lexicographic order starting at the 22625 beginning of each string. The instruction is not allowed to 22626 prefetch more than one byte at a time since either string may end 22627 in the first byte and reading past that may access an invalid page 22628 or segment and cause a fault. The comparison terminates early if 22629 the fetched bytes are different or if they are equal to zero. The 22630 effect of the instruction is to store a value in operand 0 whose 22631 sign indicates the result of the comparison. 22632 22633 'cmpstrM' 22634 String compare instruction, without known maximum length. Operand 22635 0 is the output; it has mode M. The second and third operand are 22636 the blocks of memory to be compared; both are 'mem:BLK' with an 22637 address in mode 'Pmode'. 22638 22639 The fourth operand is the known shared alignment of the source and 22640 destination, in the form of a 'const_int' rtx. Thus, if the 22641 compiler knows that both source and destination are word-aligned, 22642 it may provide the value 4 for this operand. 22643 22644 The two memory blocks specified are compared byte by byte in 22645 lexicographic order starting at the beginning of each string. The 22646 instruction is not allowed to prefetch more than one byte at a time 22647 since either string may end in the first byte and reading past that 22648 may access an invalid page or segment and cause a fault. The 22649 comparison will terminate when the fetched bytes are different or 22650 if they are equal to zero. The effect of the instruction is to 22651 store a value in operand 0 whose sign indicates the result of the 22652 comparison. 22653 22654 'cmpmemM' 22655 Block compare instruction, with five operands like the operands of 22656 'cmpstrM'. The two memory blocks specified are compared byte by 22657 byte in lexicographic order starting at the beginning of each 22658 block. Unlike 'cmpstrM' the instruction can prefetch any bytes in 22659 the two memory blocks. Also unlike 'cmpstrM' the comparison will 22660 not stop if both bytes are zero. The effect of the instruction is 22661 to store a value in operand 0 whose sign indicates the result of 22662 the comparison. 22663 22664 'strlenM' 22665 Compute the length of a string, with three operands. Operand 0 is 22666 the result (of mode M), operand 1 is a 'mem' referring to the first 22667 character of the string, operand 2 is the character to search for 22668 (normally zero), and operand 3 is a constant describing the known 22669 alignment of the beginning of the string. 22670 22671 'floatMN2' 22672 Convert signed integer operand 1 (valid for fixed point mode M) to 22673 floating point mode N and store in operand 0 (which has mode N). 22674 22675 'floatunsMN2' 22676 Convert unsigned integer operand 1 (valid for fixed point mode M) 22677 to floating point mode N and store in operand 0 (which has mode N). 22678 22679 'fixMN2' 22680 Convert operand 1 (valid for floating point mode M) to fixed point 22681 mode N as a signed number and store in operand 0 (which has mode 22682 N). This instruction's result is defined only when the value of 22683 operand 1 is an integer. 22684 22685 If the machine description defines this pattern, it also needs to 22686 define the 'ftrunc' pattern. 22687 22688 'fixunsMN2' 22689 Convert operand 1 (valid for floating point mode M) to fixed point 22690 mode N as an unsigned number and store in operand 0 (which has mode 22691 N). This instruction's result is defined only when the value of 22692 operand 1 is an integer. 22693 22694 'ftruncM2' 22695 Convert operand 1 (valid for floating point mode M) to an integer 22696 value, still represented in floating point mode M, and store it in 22697 operand 0 (valid for floating point mode M). 22698 22699 'fix_truncMN2' 22700 Like 'fixMN2' but works for any floating point value of mode M by 22701 converting the value to an integer. 22702 22703 'fixuns_truncMN2' 22704 Like 'fixunsMN2' but works for any floating point value of mode M 22705 by converting the value to an integer. 22706 22707 'truncMN2' 22708 Truncate operand 1 (valid for mode M) to mode N and store in 22709 operand 0 (which has mode N). Both modes must be fixed point or 22710 both floating point. 22711 22712 'extendMN2' 22713 Sign-extend operand 1 (valid for mode M) to mode N and store in 22714 operand 0 (which has mode N). Both modes must be fixed point or 22715 both floating point. 22716 22717 'zero_extendMN2' 22718 Zero-extend operand 1 (valid for mode M) to mode N and store in 22719 operand 0 (which has mode N). Both modes must be fixed point. 22720 22721 'fractMN2' 22722 Convert operand 1 of mode M to mode N and store in operand 0 (which 22723 has mode N). Mode M and mode N could be fixed-point to 22724 fixed-point, signed integer to fixed-point, fixed-point to signed 22725 integer, floating-point to fixed-point, or fixed-point to 22726 floating-point. When overflows or underflows happen, the results 22727 are undefined. 22728 22729 'satfractMN2' 22730 Convert operand 1 of mode M to mode N and store in operand 0 (which 22731 has mode N). Mode M and mode N could be fixed-point to 22732 fixed-point, signed integer to fixed-point, or floating-point to 22733 fixed-point. When overflows or underflows happen, the instruction 22734 saturates the results to the maximum or the minimum. 22735 22736 'fractunsMN2' 22737 Convert operand 1 of mode M to mode N and store in operand 0 (which 22738 has mode N). Mode M and mode N could be unsigned integer to 22739 fixed-point, or fixed-point to unsigned integer. When overflows or 22740 underflows happen, the results are undefined. 22741 22742 'satfractunsMN2' 22743 Convert unsigned integer operand 1 of mode M to fixed-point mode N 22744 and store in operand 0 (which has mode N). When overflows or 22745 underflows happen, the instruction saturates the results to the 22746 maximum or the minimum. 22747 22748 'extvM' 22749 Extract a bit-field from register operand 1, sign-extend it, and 22750 store it in operand 0. Operand 2 specifies the width of the field 22751 in bits and operand 3 the starting bit, which counts from the most 22752 significant bit if 'BITS_BIG_ENDIAN' is true and from the least 22753 significant bit otherwise. 22754 22755 Operands 0 and 1 both have mode M. Operands 2 and 3 have a 22756 target-specific mode. 22757 22758 'extvmisalignM' 22759 Extract a bit-field from memory operand 1, sign extend it, and 22760 store it in operand 0. Operand 2 specifies the width in bits and 22761 operand 3 the starting bit. The starting bit is always somewhere 22762 in the first byte of operand 1; it counts from the most significant 22763 bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit 22764 otherwise. 22765 22766 Operand 0 has mode M while operand 1 has 'BLK' mode. Operands 2 22767 and 3 have a target-specific mode. 22768 22769 The instruction must not read beyond the last byte of the 22770 bit-field. 22771 22772 'extzvM' 22773 Like 'extvM' except that the bit-field value is zero-extended. 22774 22775 'extzvmisalignM' 22776 Like 'extvmisalignM' except that the bit-field value is 22777 zero-extended. 22778 22779 'insvM' 22780 Insert operand 3 into a bit-field of register operand 0. Operand 1 22781 specifies the width of the field in bits and operand 2 the starting 22782 bit, which counts from the most significant bit if 22783 'BITS_BIG_ENDIAN' is true and from the least significant bit 22784 otherwise. 22785 22786 Operands 0 and 3 both have mode M. Operands 1 and 2 have a 22787 target-specific mode. 22788 22789 'insvmisalignM' 22790 Insert operand 3 into a bit-field of memory operand 0. Operand 1 22791 specifies the width of the field in bits and operand 2 the starting 22792 bit. The starting bit is always somewhere in the first byte of 22793 operand 0; it counts from the most significant bit if 22794 'BITS_BIG_ENDIAN' is true and from the least significant bit 22795 otherwise. 22796 22797 Operand 3 has mode M while operand 0 has 'BLK' mode. Operands 1 22798 and 2 have a target-specific mode. 22799 22800 The instruction must not read or write beyond the last byte of the 22801 bit-field. 22802 22803 'extv' 22804 Extract a bit-field from operand 1 (a register or memory operand), 22805 where operand 2 specifies the width in bits and operand 3 the 22806 starting bit, and store it in operand 0. Operand 0 must have mode 22807 'word_mode'. Operand 1 may have mode 'byte_mode' or 'word_mode'; 22808 often 'word_mode' is allowed only for registers. Operands 2 and 3 22809 must be valid for 'word_mode'. 22810 22811 The RTL generation pass generates this instruction only with 22812 constants for operands 2 and 3 and the constant is never zero for 22813 operand 2. 22814 22815 The bit-field value is sign-extended to a full word integer before 22816 it is stored in operand 0. 22817 22818 This pattern is deprecated; please use 'extvM' and 'extvmisalignM' 22819 instead. 22820 22821 'extzv' 22822 Like 'extv' except that the bit-field value is zero-extended. 22823 22824 This pattern is deprecated; please use 'extzvM' and 22825 'extzvmisalignM' instead. 22826 22827 'insv' 22828 Store operand 3 (which must be valid for 'word_mode') into a 22829 bit-field in operand 0, where operand 1 specifies the width in bits 22830 and operand 2 the starting bit. Operand 0 may have mode 22831 'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for 22832 registers. Operands 1 and 2 must be valid for 'word_mode'. 22833 22834 The RTL generation pass generates this instruction only with 22835 constants for operands 1 and 2 and the constant is never zero for 22836 operand 1. 22837 22838 This pattern is deprecated; please use 'insvM' and 'insvmisalignM' 22839 instead. 22840 22841 'movMODEcc' 22842 Conditionally move operand 2 or operand 3 into operand 0 according 22843 to the comparison in operand 1. If the comparison is true, operand 22844 2 is moved into operand 0, otherwise operand 3 is moved. 22845 22846 The mode of the operands being compared need not be the same as the 22847 operands being moved. Some machines, sparc64 for example, have 22848 instructions that conditionally move an integer value based on the 22849 floating point condition codes and vice versa. 22850 22851 If the machine does not have conditional move instructions, do not 22852 define these patterns. 22853 22854 'addMODEcc' 22855 Similar to 'movMODEcc' but for conditional addition. Conditionally 22856 move operand 2 or (operands 2 + operand 3) into operand 0 according 22857 to the comparison in operand 1. If the comparison is false, 22858 operand 2 is moved into operand 0, otherwise (operand 2 + operand 22859 3) is moved. 22860 22861 'cstoreMODE4' 22862 Store zero or nonzero in operand 0 according to whether a 22863 comparison is true. Operand 1 is a comparison operator. Operand 2 22864 and operand 3 are the first and second operand of the comparison, 22865 respectively. You specify the mode that operand 0 must have when 22866 you write the 'match_operand' expression. The compiler 22867 automatically sees which mode you have used and supplies an operand 22868 of that mode. 22869 22870 The value stored for a true condition must have 1 as its low bit, 22871 or else must be negative. Otherwise the instruction is not 22872 suitable and you should omit it from the machine description. You 22873 describe to the compiler exactly which value is stored by defining 22874 the macro 'STORE_FLAG_VALUE' (*note Misc::). If a description 22875 cannot be found that can be used for all the possible comparison 22876 operators, you should pick one and use a 'define_expand' to map all 22877 results onto the one you chose. 22878 22879 These operations may 'FAIL', but should do so only in relatively 22880 uncommon cases; if they would 'FAIL' for common cases involving 22881 integer comparisons, it is best to restrict the predicates to not 22882 allow these operands. Likewise if a given comparison operator will 22883 always fail, independent of the operands (for floating-point modes, 22884 the 'ordered_comparison_operator' predicate is often useful in this 22885 case). 22886 22887 If this pattern is omitted, the compiler will generate a 22888 conditional branch--for example, it may copy a constant one to the 22889 target and branching around an assignment of zero to the target--or 22890 a libcall. If the predicate for operand 1 only rejects some 22891 operators, it will also try reordering the operands and/or 22892 inverting the result value (e.g. by an exclusive OR). These 22893 possibilities could be cheaper or equivalent to the instructions 22894 used for the 'cstoreMODE4' pattern followed by those required to 22895 convert a positive result from 'STORE_FLAG_VALUE' to 1; in this 22896 case, you can and should make operand 1's predicate reject some 22897 operators in the 'cstoreMODE4' pattern, or remove the pattern 22898 altogether from the machine description. 22899 22900 'cbranchMODE4' 22901 Conditional branch instruction combined with a compare instruction. 22902 Operand 0 is a comparison operator. Operand 1 and operand 2 are 22903 the first and second operands of the comparison, respectively. 22904 Operand 3 is a 'label_ref' that refers to the label to jump to. 22905 22906 'jump' 22907 A jump inside a function; an unconditional branch. Operand 0 is 22908 the 'label_ref' of the label to jump to. This pattern name is 22909 mandatory on all machines. 22910 22911 'call' 22912 Subroutine call instruction returning no value. Operand 0 is the 22913 function to call; operand 1 is the number of bytes of arguments 22914 pushed as a 'const_int'; operand 2 is the number of registers used 22915 as operands. 22916 22917 On most machines, operand 2 is not actually stored into the RTL 22918 pattern. It is supplied for the sake of some RISC machines which 22919 need to put this information into the assembler code; they can put 22920 it in the RTL instead of operand 1. 22921 22922 Operand 0 should be a 'mem' RTX whose address is the address of the 22923 function. Note, however, that this address can be a 'symbol_ref' 22924 expression even if it would not be a legitimate memory address on 22925 the target machine. If it is also not a valid argument for a call 22926 instruction, the pattern for this operation should be a 22927 'define_expand' (*note Expander Definitions::) that places the 22928 address into a register and uses that register in the call 22929 instruction. 22930 22931 'call_value' 22932 Subroutine call instruction returning a value. Operand 0 is the 22933 hard register in which the value is returned. There are three more 22934 operands, the same as the three operands of the 'call' instruction 22935 (but with numbers increased by one). 22936 22937 Subroutines that return 'BLKmode' objects use the 'call' insn. 22938 22939 'call_pop', 'call_value_pop' 22940 Similar to 'call' and 'call_value', except used if defined and if 22941 'RETURN_POPS_ARGS' is nonzero. They should emit a 'parallel' that 22942 contains both the function call and a 'set' to indicate the 22943 adjustment made to the frame pointer. 22944 22945 For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of 22946 these patterns increases the number of functions for which the 22947 frame pointer can be eliminated, if desired. 22948 22949 'untyped_call' 22950 Subroutine call instruction returning a value of any type. Operand 22951 0 is the function to call; operand 1 is a memory location where the 22952 result of calling the function is to be stored; operand 2 is a 22953 'parallel' expression where each element is a 'set' expression that 22954 indicates the saving of a function return value into the result 22955 block. 22956 22957 This instruction pattern should be defined to support 22958 '__builtin_apply' on machines where special instructions are needed 22959 to call a subroutine with arbitrary arguments or to save the value 22960 returned. This instruction pattern is required on machines that 22961 have multiple registers that can hold a return value (i.e. 22962 'FUNCTION_VALUE_REGNO_P' is true for more than one register). 22963 22964 'return' 22965 Subroutine return instruction. This instruction pattern name 22966 should be defined only if a single instruction can do all the work 22967 of returning from a function. 22968 22969 Like the 'movM' patterns, this pattern is also used after the RTL 22970 generation phase. In this case it is to support machines where 22971 multiple instructions are usually needed to return from a function, 22972 but some class of functions only requires one instruction to 22973 implement a return. Normally, the applicable functions are those 22974 which do not need to save any registers or allocate stack space. 22975 22976 It is valid for this pattern to expand to an instruction using 22977 'simple_return' if no epilogue is required. 22978 22979 'simple_return' 22980 Subroutine return instruction. This instruction pattern name 22981 should be defined only if a single instruction can do all the work 22982 of returning from a function on a path where no epilogue is 22983 required. This pattern is very similar to the 'return' instruction 22984 pattern, but it is emitted only by the shrink-wrapping optimization 22985 on paths where the function prologue has not been executed, and a 22986 function return should occur without any of the effects of the 22987 epilogue. Additional uses may be introduced on paths where both 22988 the prologue and the epilogue have executed. 22989 22990 For such machines, the condition specified in this pattern should 22991 only be true when 'reload_completed' is nonzero and the function's 22992 epilogue would only be a single instruction. For machines with 22993 register windows, the routine 'leaf_function_p' may be used to 22994 determine if a register window push is required. 22995 22996 Machines that have conditional return instructions should define 22997 patterns such as 22998 22999 (define_insn "" 23000 [(set (pc) 23001 (if_then_else (match_operator 23002 0 "comparison_operator" 23003 [(cc0) (const_int 0)]) 23004 (return) 23005 (pc)))] 23006 "CONDITION" 23007 "...") 23008 23009 where CONDITION would normally be the same condition specified on 23010 the named 'return' pattern. 23011 23012 'untyped_return' 23013 Untyped subroutine return instruction. This instruction pattern 23014 should be defined to support '__builtin_return' on machines where 23015 special instructions are needed to return a value of any type. 23016 23017 Operand 0 is a memory location where the result of calling a 23018 function with '__builtin_apply' is stored; operand 1 is a 23019 'parallel' expression where each element is a 'set' expression that 23020 indicates the restoring of a function return value from the result 23021 block. 23022 23023 'nop' 23024 No-op instruction. This instruction pattern name should always be 23025 defined to output a no-op in assembler code. '(const_int 0)' will 23026 do as an RTL pattern. 23027 23028 'indirect_jump' 23029 An instruction to jump to an address which is operand zero. This 23030 pattern name is mandatory on all machines. 23031 23032 'casesi' 23033 Instruction to jump through a dispatch table, including bounds 23034 checking. This instruction takes five operands: 23035 23036 1. The index to dispatch on, which has mode 'SImode'. 23037 23038 2. The lower bound for indices in the table, an integer constant. 23039 23040 3. The total range of indices in the table--the largest index 23041 minus the smallest one (both inclusive). 23042 23043 4. A label that precedes the table itself. 23044 23045 5. A label to jump to if the index has a value outside the 23046 bounds. 23047 23048 The table is an 'addr_vec' or 'addr_diff_vec' inside of a 23049 'jump_insn'. The number of elements in the table is one plus the 23050 difference between the upper bound and the lower bound. 23051 23052 'tablejump' 23053 Instruction to jump to a variable address. This is a low-level 23054 capability which can be used to implement a dispatch table when 23055 there is no 'casesi' pattern. 23056 23057 This pattern requires two operands: the address or offset, and a 23058 label which should immediately precede the jump table. If the 23059 macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 23060 the first operand is an offset which counts from the address of the 23061 table; otherwise, it is an absolute address to jump to. In either 23062 case, the first operand has mode 'Pmode'. 23063 23064 The 'tablejump' insn is always the last insn before the jump table 23065 it uses. Its assembler code normally has no need to use the second 23066 operand, but you should incorporate it in the RTL pattern so that 23067 the jump optimizer will not delete the table as unreachable code. 23068 23069 'decrement_and_branch_until_zero' 23070 Conditional branch instruction that decrements a register and jumps 23071 if the register is nonzero. Operand 0 is the register to decrement 23072 and test; operand 1 is the label to jump to if the register is 23073 nonzero. *Note Looping Patterns::. 23074 23075 This optional instruction pattern is only used by the combiner, 23076 typically for loops reversed by the loop optimizer when strength 23077 reduction is enabled. 23078 23079 'doloop_end' 23080 Conditional branch instruction that decrements a register and jumps 23081 if the register is nonzero. This instruction takes five operands: 23082 Operand 0 is the register to decrement and test; operand 1 is the 23083 number of loop iterations as a 'const_int' or 'const0_rtx' if this 23084 cannot be determined until run-time; operand 2 is the actual or 23085 estimated maximum number of iterations as a 'const_int'; operand 3 23086 is the number of enclosed loops as a 'const_int' (an innermost loop 23087 has a value of 1); operand 4 is the label to jump to if the 23088 register is nonzero; operand 5 is const1_rtx if the loop in entered 23089 at its top, const0_rtx otherwise. *Note Looping Patterns::. 23090 23091 This optional instruction pattern should be defined for machines 23092 with low-overhead looping instructions as the loop optimizer will 23093 try to modify suitable loops to utilize it. If nested low-overhead 23094 looping is not supported, use a 'define_expand' (*note Expander 23095 Definitions::) and make the pattern fail if operand 3 is not 23096 'const1_rtx'. Similarly, if the actual or estimated maximum number 23097 of iterations is too large for this instruction, make it fail. 23098 23099 'doloop_begin' 23100 Companion instruction to 'doloop_end' required for machines that 23101 need to perform some initialization, such as loading special 23102 registers used by a low-overhead looping instruction. If 23103 initialization insns do not always need to be emitted, use a 23104 'define_expand' (*note Expander Definitions::) and make it fail. 23105 23106 'canonicalize_funcptr_for_compare' 23107 Canonicalize the function pointer in operand 1 and store the result 23108 into operand 0. 23109 23110 Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be 23111 a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode 23112 'Pmode'. 23113 23114 Canonicalization of a function pointer usually involves computing 23115 the address of the function which would be called if the function 23116 pointer were used in an indirect call. 23117 23118 Only define this pattern if function pointers on the target machine 23119 can have different values but still call the same function when 23120 used in an indirect call. 23121 23122 'save_stack_block' 23123 'save_stack_function' 23124 'save_stack_nonlocal' 23125 'restore_stack_block' 23126 'restore_stack_function' 23127 'restore_stack_nonlocal' 23128 Most machines save and restore the stack pointer by copying it to 23129 or from an object of mode 'Pmode'. Do not define these patterns on 23130 such machines. 23131 23132 Some machines require special handling for stack pointer saves and 23133 restores. On those machines, define the patterns corresponding to 23134 the non-standard cases by using a 'define_expand' (*note Expander 23135 Definitions::) that produces the required insns. The three types 23136 of saves and restores are: 23137 23138 1. 'save_stack_block' saves the stack pointer at the start of a 23139 block that allocates a variable-sized object, and 23140 'restore_stack_block' restores the stack pointer when the 23141 block is exited. 23142 23143 2. 'save_stack_function' and 'restore_stack_function' do a 23144 similar job for the outermost block of a function and are used 23145 when the function allocates variable-sized objects or calls 23146 'alloca'. Only the epilogue uses the restored stack pointer, 23147 allowing a simpler save or restore sequence on some machines. 23148 23149 3. 'save_stack_nonlocal' is used in functions that contain labels 23150 branched to by nested functions. It saves the stack pointer 23151 in such a way that the inner function can use 23152 'restore_stack_nonlocal' to restore the stack pointer. The 23153 compiler generates code to restore the frame and argument 23154 pointer registers, but some machines require saving and 23155 restoring additional data such as register window information 23156 or stack backchains. Place insns in these patterns to save 23157 and restore any such required data. 23158 23159 When saving the stack pointer, operand 0 is the save area and 23160 operand 1 is the stack pointer. The mode used to allocate the save 23161 area defaults to 'Pmode' but you can override that choice by 23162 defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 23163 You must specify an integral mode, or 'VOIDmode' if no save area is 23164 needed for a particular type of save (either because no save is 23165 needed or because a machine-specific save area can be used). 23166 Operand 0 is the stack pointer and operand 1 is the save area for 23167 restore operations. If 'save_stack_block' is defined, operand 0 23168 must not be 'VOIDmode' since these saves can be arbitrarily nested. 23169 23170 A save area is a 'mem' that is at a constant offset from 23171 'virtual_stack_vars_rtx' when the stack pointer is saved for use by 23172 nonlocal gotos and a 'reg' in the other two cases. 23173 23174 'allocate_stack' 23175 Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1 23176 from the stack pointer to create space for dynamically allocated 23177 data. 23178 23179 Store the resultant pointer to this space into operand 0. If you 23180 are allocating space from the main stack, do this by emitting a 23181 move insn to copy 'virtual_stack_dynamic_rtx' to operand 0. If you 23182 are allocating the space elsewhere, generate code to copy the 23183 location of the space to operand 0. In the latter case, you must 23184 ensure this space gets freed when the corresponding space on the 23185 main stack is free. 23186 23187 Do not define this pattern if all that must be done is the 23188 subtraction. Some machines require other operations such as stack 23189 probes or maintaining the back chain. Define this pattern to emit 23190 those operations in addition to updating the stack pointer. 23191 23192 'check_stack' 23193 If stack checking (*note Stack Checking::) cannot be done on your 23194 system by probing the stack, define this pattern to perform the 23195 needed check and signal an error if the stack has overflowed. The 23196 single operand is the address in the stack farthest from the 23197 current stack pointer that you need to validate. Normally, on 23198 platforms where this pattern is needed, you would obtain the stack 23199 limit from a global or thread-specific variable or register. 23200 23201 'probe_stack_address' 23202 If stack checking (*note Stack Checking::) can be done on your 23203 system by probing the stack but without the need to actually access 23204 it, define this pattern and signal an error if the stack has 23205 overflowed. The single operand is the memory address in the stack 23206 that needs to be probed. 23207 23208 'probe_stack' 23209 If stack checking (*note Stack Checking::) can be done on your 23210 system by probing the stack but doing it with a "store zero" 23211 instruction is not valid or optimal, define this pattern to do the 23212 probing differently and signal an error if the stack has 23213 overflowed. The single operand is the memory reference in the 23214 stack that needs to be probed. 23215 23216 'nonlocal_goto' 23217 Emit code to generate a non-local goto, e.g., a jump from one 23218 function to a label in an outer function. This pattern has four 23219 arguments, each representing a value to be used in the jump. The 23220 first argument is to be loaded into the frame pointer, the second 23221 is the address to branch to (code to dispatch to the actual label), 23222 the third is the address of a location where the stack is saved, 23223 and the last is the address of the label, to be placed in the 23224 location for the incoming static chain. 23225 23226 On most machines you need not define this pattern, since GCC will 23227 already generate the correct code, which is to load the frame 23228 pointer and static chain, restore the stack (using the 23229 'restore_stack_nonlocal' pattern, if defined), and jump indirectly 23230 to the dispatcher. You need only define this pattern if this code 23231 will not work on your machine. 23232 23233 'nonlocal_goto_receiver' 23234 This pattern, if defined, contains code needed at the target of a 23235 nonlocal goto after the code already generated by GCC. You will 23236 not normally need to define this pattern. A typical reason why you 23237 might need this pattern is if some value, such as a pointer to a 23238 global table, must be restored when the frame pointer is restored. 23239 Note that a nonlocal goto only occurs within a unit-of-translation, 23240 so a global table pointer that is shared by all functions of a 23241 given module need not be restored. There are no arguments. 23242 23243 'exception_receiver' 23244 This pattern, if defined, contains code needed at the site of an 23245 exception handler that isn't needed at the site of a nonlocal goto. 23246 You will not normally need to define this pattern. A typical 23247 reason why you might need this pattern is if some value, such as a 23248 pointer to a global table, must be restored after control flow is 23249 branched to the handler of an exception. There are no arguments. 23250 23251 'builtin_setjmp_setup' 23252 This pattern, if defined, contains additional code needed to 23253 initialize the 'jmp_buf'. You will not normally need to define 23254 this pattern. A typical reason why you might need this pattern is 23255 if some value, such as a pointer to a global table, must be 23256 restored. Though it is preferred that the pointer value be 23257 recalculated if possible (given the address of a label for 23258 instance). The single argument is a pointer to the 'jmp_buf'. 23259 Note that the buffer is five words long and that the first three 23260 are normally used by the generic mechanism. 23261 23262 'builtin_setjmp_receiver' 23263 This pattern, if defined, contains code needed at the site of a 23264 built-in setjmp that isn't needed at the site of a nonlocal goto. 23265 You will not normally need to define this pattern. A typical 23266 reason why you might need this pattern is if some value, such as a 23267 pointer to a global table, must be restored. It takes one 23268 argument, which is the label to which builtin_longjmp transferred 23269 control; this pattern may be emitted at a small offset from that 23270 label. 23271 23272 'builtin_longjmp' 23273 This pattern, if defined, performs the entire action of the 23274 longjmp. You will not normally need to define this pattern unless 23275 you also define 'builtin_setjmp_setup'. The single argument is a 23276 pointer to the 'jmp_buf'. 23277 23278 'eh_return' 23279 This pattern, if defined, affects the way '__builtin_eh_return', 23280 and thence the call frame exception handling library routines, are 23281 built. It is intended to handle non-trivial actions needed along 23282 the abnormal return path. 23283 23284 The address of the exception handler to which the function should 23285 return is passed as operand to this pattern. It will normally need 23286 to copied by the pattern to some special register or memory 23287 location. If the pattern needs to determine the location of the 23288 target call frame in order to do so, it may use 23289 'EH_RETURN_STACKADJ_RTX', if defined; it will have already been 23290 assigned. 23291 23292 If this pattern is not defined, the default action will be to 23293 simply copy the return address to 'EH_RETURN_HANDLER_RTX'. Either 23294 that macro or this pattern needs to be defined if call frame 23295 exception handling is to be used. 23296 23297 'prologue' 23298 This pattern, if defined, emits RTL for entry to a function. The 23299 function entry is responsible for setting up the stack frame, 23300 initializing the frame pointer register, saving callee saved 23301 registers, etc. 23302 23303 Using a prologue pattern is generally preferred over defining 23304 'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 23305 prologue. 23306 23307 The 'prologue' pattern is particularly useful for targets which 23308 perform instruction scheduling. 23309 23310 'window_save' 23311 This pattern, if defined, emits RTL for a register window save. It 23312 should be defined if the target machine has register windows but 23313 the window events are decoupled from calls to subroutines. The 23314 canonical example is the SPARC architecture. 23315 23316 'epilogue' 23317 This pattern emits RTL for exit from a function. The function exit 23318 is responsible for deallocating the stack frame, restoring callee 23319 saved registers and emitting the return instruction. 23320 23321 Using an epilogue pattern is generally preferred over defining 23322 'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 23323 epilogue. 23324 23325 The 'epilogue' pattern is particularly useful for targets which 23326 perform instruction scheduling or which have delay slots for their 23327 return instruction. 23328 23329 'sibcall_epilogue' 23330 This pattern, if defined, emits RTL for exit from a function 23331 without the final branch back to the calling function. This 23332 pattern will be emitted before any sibling call (aka tail call) 23333 sites. 23334 23335 The 'sibcall_epilogue' pattern must not clobber any arguments used 23336 for parameter passing or any stack slots for arguments passed to 23337 the current function. 23338 23339 'trap' 23340 This pattern, if defined, signals an error, typically by causing 23341 some kind of signal to be raised. Among other places, it is used 23342 by the Java front end to signal 'invalid array index' exceptions. 23343 23344 'ctrapMM4' 23345 Conditional trap instruction. Operand 0 is a piece of RTL which 23346 performs a comparison, and operands 1 and 2 are the arms of the 23347 comparison. Operand 3 is the trap code, an integer. 23348 23349 A typical 'ctrap' pattern looks like 23350 23351 (define_insn "ctrapsi4" 23352 [(trap_if (match_operator 0 "trap_operator" 23353 [(match_operand 1 "register_operand") 23354 (match_operand 2 "immediate_operand")]) 23355 (match_operand 3 "const_int_operand" "i"))] 23356 "" 23357 "...") 23358 23359 'prefetch' 23360 23361 This pattern, if defined, emits code for a non-faulting data 23362 prefetch instruction. Operand 0 is the address of the memory to 23363 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 23364 for a write to the memory address, or a constant 0 otherwise. 23365 Operand 2 is the expected degree of temporal locality of the data 23366 and is a value between 0 and 3, inclusive; 0 means that the data 23367 has no temporal locality, so it need not be left in the cache after 23368 the access; 3 means that the data has a high degree of temporal 23369 locality and should be left in all levels of cache possible; 1 and 23370 2 mean, respectively, a low or moderate degree of temporal 23371 locality. 23372 23373 Targets that do not support write prefetches or locality hints can 23374 ignore the values of operands 1 and 2. 23375 23376 'blockage' 23377 23378 This pattern defines a pseudo insn that prevents the instruction 23379 scheduler and other passes from moving instructions and using 23380 register equivalences across the boundary defined by the blockage 23381 insn. This needs to be an UNSPEC_VOLATILE pattern or a volatile 23382 ASM. 23383 23384 'memory_barrier' 23385 23386 If the target memory model is not fully synchronous, then this 23387 pattern should be defined to an instruction that orders both loads 23388 and stores before the instruction with respect to loads and stores 23389 after the instruction. This pattern has no operands. 23390 23391 'sync_compare_and_swapMODE' 23392 23393 This pattern, if defined, emits code for an atomic compare-and-swap 23394 operation. Operand 1 is the memory on which the atomic operation 23395 is performed. Operand 2 is the "old" value to be compared against 23396 the current contents of the memory location. Operand 3 is the 23397 "new" value to store in the memory if the compare succeeds. 23398 Operand 0 is the result of the operation; it should contain the 23399 contents of the memory before the operation. If the compare 23400 succeeds, this should obviously be a copy of operand 2. 23401 23402 This pattern must show that both operand 0 and operand 1 are 23403 modified. 23404 23405 This pattern must issue any memory barrier instructions such that 23406 all memory operations before the atomic operation occur before the 23407 atomic operation and all memory operations after the atomic 23408 operation occur after the atomic operation. 23409 23410 For targets where the success or failure of the compare-and-swap 23411 operation is available via the status flags, it is possible to 23412 avoid a separate compare operation and issue the subsequent branch 23413 or store-flag operation immediately after the compare-and-swap. To 23414 this end, GCC will look for a 'MODE_CC' set in the output of 23415 'sync_compare_and_swapMODE'; if the machine description includes 23416 such a set, the target should also define special 'cbranchcc4' 23417 and/or 'cstorecc4' instructions. GCC will then be able to take the 23418 destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or 23419 'cstorecc4' pattern as the first operand of the comparison (the 23420 second will be '(const_int 0)'). 23421 23422 For targets where the operating system may provide support for this 23423 operation via library calls, the 'sync_compare_and_swap_optab' may 23424 be initialized to a function with the same interface as the 23425 '__sync_val_compare_and_swap_N' built-in. If the entire set of 23426 __SYNC builtins are supported via library calls, the target can 23427 initialize all of the optabs at once with 'init_sync_libfuncs'. 23428 For the purposes of C++11 'std::atomic::is_lock_free', it is 23429 assumed that these library calls do _not_ use any kind of 23430 interruptable locking. 23431 23432 'sync_addMODE', 'sync_subMODE' 23433 'sync_iorMODE', 'sync_andMODE' 23434 'sync_xorMODE', 'sync_nandMODE' 23435 23436 These patterns emit code for an atomic operation on memory. 23437 Operand 0 is the memory on which the atomic operation is performed. 23438 Operand 1 is the second operand to the binary operator. 23439 23440 This pattern must issue any memory barrier instructions such that 23441 all memory operations before the atomic operation occur before the 23442 atomic operation and all memory operations after the atomic 23443 operation occur after the atomic operation. 23444 23445 If these patterns are not defined, the operation will be 23446 constructed from a compare-and-swap operation, if defined. 23447 23448 'sync_old_addMODE', 'sync_old_subMODE' 23449 'sync_old_iorMODE', 'sync_old_andMODE' 23450 'sync_old_xorMODE', 'sync_old_nandMODE' 23451 23452 These patterns emit code for an atomic operation on memory, and 23453 return the value that the memory contained before the operation. 23454 Operand 0 is the result value, operand 1 is the memory on which the 23455 atomic operation is performed, and operand 2 is the second operand 23456 to the binary operator. 23457 23458 This pattern must issue any memory barrier instructions such that 23459 all memory operations before the atomic operation occur before the 23460 atomic operation and all memory operations after the atomic 23461 operation occur after the atomic operation. 23462 23463 If these patterns are not defined, the operation will be 23464 constructed from a compare-and-swap operation, if defined. 23465 23466 'sync_new_addMODE', 'sync_new_subMODE' 23467 'sync_new_iorMODE', 'sync_new_andMODE' 23468 'sync_new_xorMODE', 'sync_new_nandMODE' 23469 23470 These patterns are like their 'sync_old_OP' counterparts, except 23471 that they return the value that exists in the memory location after 23472 the operation, rather than before the operation. 23473 23474 'sync_lock_test_and_setMODE' 23475 23476 This pattern takes two forms, based on the capabilities of the 23477 target. In either case, operand 0 is the result of the operand, 23478 operand 1 is the memory on which the atomic operation is performed, 23479 and operand 2 is the value to set in the lock. 23480 23481 In the ideal case, this operation is an atomic exchange operation, 23482 in which the previous value in memory operand is copied into the 23483 result operand, and the value operand is stored in the memory 23484 operand. 23485 23486 For less capable targets, any value operand that is not the 23487 constant 1 should be rejected with 'FAIL'. In this case the target 23488 may use an atomic test-and-set bit operation. The result operand 23489 should contain 1 if the bit was previously set and 0 if the bit was 23490 previously clear. The true contents of the memory operand are 23491 implementation defined. 23492 23493 This pattern must issue any memory barrier instructions such that 23494 the pattern as a whole acts as an acquire barrier, that is all 23495 memory operations after the pattern do not occur until the lock is 23496 acquired. 23497 23498 If this pattern is not defined, the operation will be constructed 23499 from a compare-and-swap operation, if defined. 23500 23501 'sync_lock_releaseMODE' 23502 23503 This pattern, if defined, releases a lock set by 23504 'sync_lock_test_and_setMODE'. Operand 0 is the memory that 23505 contains the lock; operand 1 is the value to store in the lock. 23506 23507 If the target doesn't implement full semantics for 23508 'sync_lock_test_and_setMODE', any value operand which is not the 23509 constant 0 should be rejected with 'FAIL', and the true contents of 23510 the memory operand are implementation defined. 23511 23512 This pattern must issue any memory barrier instructions such that 23513 the pattern as a whole acts as a release barrier, that is the lock 23514 is released only after all previous memory operations have 23515 completed. 23516 23517 If this pattern is not defined, then a 'memory_barrier' pattern 23518 will be emitted, followed by a store of the value to the memory 23519 operand. 23520 23521 'atomic_compare_and_swapMODE' 23522 This pattern, if defined, emits code for an atomic compare-and-swap 23523 operation with memory model semantics. Operand 2 is the memory on 23524 which the atomic operation is performed. Operand 0 is an output 23525 operand which is set to true or false based on whether the 23526 operation succeeded. Operand 1 is an output operand which is set 23527 to the contents of the memory before the operation was attempted. 23528 Operand 3 is the value that is expected to be in memory. Operand 4 23529 is the value to put in memory if the expected value is found there. 23530 Operand 5 is set to 1 if this compare and swap is to be treated as 23531 a weak operation. Operand 6 is the memory model to be used if the 23532 operation is a success. Operand 7 is the memory model to be used 23533 if the operation fails. 23534 23535 If memory referred to in operand 2 contains the value in operand 3, 23536 then operand 4 is stored in memory pointed to by operand 2 and 23537 fencing based on the memory model in operand 6 is issued. 23538 23539 If memory referred to in operand 2 does not contain the value in 23540 operand 3, then fencing based on the memory model in operand 7 is 23541 issued. 23542 23543 If a target does not support weak compare-and-swap operations, or 23544 the port elects not to implement weak operations, the argument in 23545 operand 5 can be ignored. Note a strong implementation must be 23546 provided. 23547 23548 If this pattern is not provided, the '__atomic_compare_exchange' 23549 built-in functions will utilize the legacy 'sync_compare_and_swap' 23550 pattern with an '__ATOMIC_SEQ_CST' memory model. 23551 23552 'atomic_loadMODE' 23553 This pattern implements an atomic load operation with memory model 23554 semantics. Operand 1 is the memory address being loaded from. 23555 Operand 0 is the result of the load. Operand 2 is the memory model 23556 to be used for the load operation. 23557 23558 If not present, the '__atomic_load' built-in function will either 23559 resort to a normal load with memory barriers, or a compare-and-swap 23560 operation if a normal load would not be atomic. 23561 23562 'atomic_storeMODE' 23563 This pattern implements an atomic store operation with memory model 23564 semantics. Operand 0 is the memory address being stored to. 23565 Operand 1 is the value to be written. Operand 2 is the memory 23566 model to be used for the operation. 23567 23568 If not present, the '__atomic_store' built-in function will attempt 23569 to perform a normal store and surround it with any required memory 23570 fences. If the store would not be atomic, then an 23571 '__atomic_exchange' is attempted with the result being ignored. 23572 23573 'atomic_exchangeMODE' 23574 This pattern implements an atomic exchange operation with memory 23575 model semantics. Operand 1 is the memory location the operation is 23576 performed on. Operand 0 is an output operand which is set to the 23577 original value contained in the memory pointed to by operand 1. 23578 Operand 2 is the value to be stored. Operand 3 is the memory model 23579 to be used. 23580 23581 If this pattern is not present, the built-in function 23582 '__atomic_exchange' will attempt to preform the operation with a 23583 compare and swap loop. 23584 23585 'atomic_addMODE', 'atomic_subMODE' 23586 'atomic_orMODE', 'atomic_andMODE' 23587 'atomic_xorMODE', 'atomic_nandMODE' 23588 23589 These patterns emit code for an atomic operation on memory with 23590 memory model semantics. Operand 0 is the memory on which the 23591 atomic operation is performed. Operand 1 is the second operand to 23592 the binary operator. Operand 2 is the memory model to be used by 23593 the operation. 23594 23595 If these patterns are not defined, attempts will be made to use 23596 legacy 'sync' patterns, or equivalent patterns which return a 23597 result. If none of these are available a compare-and-swap loop 23598 will be used. 23599 23600 'atomic_fetch_addMODE', 'atomic_fetch_subMODE' 23601 'atomic_fetch_orMODE', 'atomic_fetch_andMODE' 23602 'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE' 23603 23604 These patterns emit code for an atomic operation on memory with 23605 memory model semantics, and return the original value. Operand 0 23606 is an output operand which contains the value of the memory 23607 location before the operation was performed. Operand 1 is the 23608 memory on which the atomic operation is performed. Operand 2 is 23609 the second operand to the binary operator. Operand 3 is the memory 23610 model to be used by the operation. 23611 23612 If these patterns are not defined, attempts will be made to use 23613 legacy 'sync' patterns. If none of these are available a 23614 compare-and-swap loop will be used. 23615 23616 'atomic_add_fetchMODE', 'atomic_sub_fetchMODE' 23617 'atomic_or_fetchMODE', 'atomic_and_fetchMODE' 23618 'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE' 23619 23620 These patterns emit code for an atomic operation on memory with 23621 memory model semantics and return the result after the operation is 23622 performed. Operand 0 is an output operand which contains the value 23623 after the operation. Operand 1 is the memory on which the atomic 23624 operation is performed. Operand 2 is the second operand to the 23625 binary operator. Operand 3 is the memory model to be used by the 23626 operation. 23627 23628 If these patterns are not defined, attempts will be made to use 23629 legacy 'sync' patterns, or equivalent patterns which return the 23630 result before the operation followed by the arithmetic operation 23631 required to produce the result. If none of these are available a 23632 compare-and-swap loop will be used. 23633 23634 'atomic_test_and_set' 23635 23636 This pattern emits code for '__builtin_atomic_test_and_set'. 23637 Operand 0 is an output operand which is set to true if the previous 23638 previous contents of the byte was "set", and false otherwise. 23639 Operand 1 is the 'QImode' memory to be modified. Operand 2 is the 23640 memory model to be used. 23641 23642 The specific value that defines "set" is implementation defined, 23643 and is normally based on what is performed by the native atomic 23644 test and set instruction. 23645 23646 'mem_thread_fenceMODE' 23647 This pattern emits code required to implement a thread fence with 23648 memory model semantics. Operand 0 is the memory model to be used. 23649 23650 If this pattern is not specified, all memory models except 23651 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 23652 barrier pattern. 23653 23654 'mem_signal_fenceMODE' 23655 This pattern emits code required to implement a signal fence with 23656 memory model semantics. Operand 0 is the memory model to be used. 23657 23658 This pattern should impact the compiler optimizers the same way 23659 that mem_signal_fence does, but it does not need to issue any 23660 barrier instructions. 23661 23662 If this pattern is not specified, all memory models except 23663 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 23664 barrier pattern. 23665 23666 'get_thread_pointerMODE' 23667 'set_thread_pointerMODE' 23668 These patterns emit code that reads/sets the TLS thread pointer. 23669 Currently, these are only needed if the target needs to support the 23670 '__builtin_thread_pointer' and '__builtin_set_thread_pointer' 23671 builtins. 23672 23673 The get/set patterns have a single output/input operand 23674 respectively, with MODE intended to be 'Pmode'. 23675 23676 'stack_protect_set' 23677 23678 This pattern, if defined, moves a 'ptr_mode' value from the memory 23679 in operand 1 to the memory in operand 0 without leaving the value 23680 in a register afterward. This is to avoid leaking the value some 23681 place that an attacker might use to rewrite the stack guard slot 23682 after having clobbered it. 23683 23684 If this pattern is not defined, then a plain move pattern is 23685 generated. 23686 23687 'stack_protect_test' 23688 23689 This pattern, if defined, compares a 'ptr_mode' value from the 23690 memory in operand 1 with the memory in operand 0 without leaving 23691 the value in a register afterward and branches to operand 2 if the 23692 values were equal. 23693 23694 If this pattern is not defined, then a plain compare pattern and 23695 conditional branch pattern is used. 23696 23697 'clear_cache' 23698 23699 This pattern, if defined, flushes the instruction cache for a 23700 region of memory. The region is bounded to by the Pmode pointers 23701 in operand 0 inclusive and operand 1 exclusive. 23702 23703 If this pattern is not defined, a call to the library function 23704 '__clear_cache' is used. 23705 23706 23707 File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 23708 23709 16.10 When the Order of Patterns Matters 23710 ======================================== 23711 23712 Sometimes an insn can match more than one instruction pattern. Then the 23713 pattern that appears first in the machine description is the one used. 23714 Therefore, more specific patterns (patterns that will match fewer 23715 things) and faster instructions (those that will produce better code 23716 when they do match) should usually go first in the description. 23717 23718 In some cases the effect of ordering the patterns can be used to hide a 23719 pattern when it is not valid. For example, the 68000 has an instruction 23720 for converting a fullword to floating point and another for converting a 23721 byte to floating point. An instruction converting an integer to 23722 floating point could match either one. We put the pattern to convert 23723 the fullword first to make sure that one will be used rather than the 23724 other. (Otherwise a large integer might be generated as a single-byte 23725 immediate quantity, which would not work.) Instead of using this 23726 pattern ordering it would be possible to make the pattern for 23727 convert-a-byte smart enough to deal properly with any constant value. 23728 23729 23730 File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 23731 23732 16.11 Interdependence of Patterns 23733 ================================= 23734 23735 In some cases machines support instructions identical except for the 23736 machine mode of one or more operands. For example, there may be 23737 "sign-extend halfword" and "sign-extend byte" instructions whose 23738 patterns are 23739 23740 (set (match_operand:SI 0 ...) 23741 (extend:SI (match_operand:HI 1 ...))) 23742 23743 (set (match_operand:SI 0 ...) 23744 (extend:SI (match_operand:QI 1 ...))) 23745 23746 Constant integers do not specify a machine mode, so an instruction to 23747 extend a constant value could match either pattern. The pattern it 23748 actually will match is the one that appears first in the file. For 23749 correct results, this must be the one for the widest possible mode 23750 ('HImode', here). If the pattern matches the 'QImode' instruction, the 23751 results will be incorrect if the constant value does not actually fit 23752 that mode. 23753 23754 Such instructions to extend constants are rarely generated because they 23755 are optimized away, but they do occasionally happen in nonoptimized 23756 compilations. 23757 23758 If a constraint in a pattern allows a constant, the reload pass may 23759 replace a register with a constant permitted by the constraint in some 23760 cases. Similarly for memory references. Because of this substitution, 23761 you should not provide separate patterns for increment and decrement 23762 instructions. Instead, they should be generated from the same pattern 23763 that supports register-register add insns by examining the operands and 23764 generating the appropriate machine instruction. 23765 23766 23767 File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 23768 23769 16.12 Defining Jump Instruction Patterns 23770 ======================================== 23771 23772 GCC does not assume anything about how the machine realizes jumps. The 23773 machine description should define a single pattern, usually a 23774 'define_expand', which expands to all the required insns. 23775 23776 Usually, this would be a comparison insn to set the condition code and 23777 a separate branch insn testing the condition code and branching or not 23778 according to its value. For many machines, however, separating compares 23779 and branches is limiting, which is why the more flexible approach with 23780 one 'define_expand' is used in GCC. The machine description becomes 23781 clearer for architectures that have compare-and-branch instructions but 23782 no condition code. It also works better when different sets of 23783 comparison operators are supported by different kinds of conditional 23784 branches (e.g. integer vs. floating-point), or by conditional branches 23785 with respect to conditional stores. 23786 23787 Two separate insns are always used if the machine description 23788 represents a condition code register using the legacy RTL expression 23789 '(cc0)', and on most machines that use a separate condition code 23790 register (*note Condition Code::). For machines that use '(cc0)', in 23791 fact, the set and use of the condition code must be separate and 23792 adjacent(1), thus allowing flags in 'cc_status' to be used (*note 23793 Condition Code::) and so that the comparison and branch insns could be 23794 located from each other by using the functions 'prev_cc0_setter' and 23795 'next_cc0_user'. 23796 23797 Even in this case having a single entry point for conditional branches 23798 is advantageous, because it handles equally well the case where a single 23799 comparison instruction records the results of both signed and unsigned 23800 comparison of the given operands (with the branch insns coming in 23801 distinct signed and unsigned flavors) as in the x86 or SPARC, and the 23802 case where there are distinct signed and unsigned compare instructions 23803 and only one set of conditional branch instructions as in the PowerPC. 23804 23805 ---------- Footnotes ---------- 23806 23807 (1) 'note' insns can separate them, though. 23808 23809 23810 File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 23811 23812 16.13 Defining Looping Instruction Patterns 23813 =========================================== 23814 23815 Some machines have special jump instructions that can be utilized to 23816 make loops more efficient. A common example is the 68000 'dbra' 23817 instruction which performs a decrement of a register and a branch if the 23818 result was greater than zero. Other machines, in particular digital 23819 signal processors (DSPs), have special block repeat instructions to 23820 provide low-overhead loop support. For example, the TI TMS320C3x/C4x 23821 DSPs have a block repeat instruction that loads special registers to 23822 mark the top and end of a loop and to count the number of loop 23823 iterations. This avoids the need for fetching and executing a 23824 'dbra'-like instruction and avoids pipeline stalls associated with the 23825 jump. 23826 23827 GCC has three special named patterns to support low overhead looping. 23828 They are 'decrement_and_branch_until_zero', 'doloop_begin', and 23829 'doloop_end'. The first pattern, 'decrement_and_branch_until_zero', is 23830 not emitted during RTL generation but may be emitted during the 23831 instruction combination phase. This requires the assistance of the loop 23832 optimizer, using information collected during strength reduction, to 23833 reverse a loop to count down to zero. Some targets also require the 23834 loop optimizer to add a 'REG_NONNEG' note to indicate that the iteration 23835 count is always positive. This is needed if the target performs a 23836 signed loop termination test. For example, the 68000 uses a pattern 23837 similar to the following for its 'dbra' instruction: 23838 23839 (define_insn "decrement_and_branch_until_zero" 23840 [(set (pc) 23841 (if_then_else 23842 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 23843 (const_int -1)) 23844 (const_int 0)) 23845 (label_ref (match_operand 1 "" "")) 23846 (pc))) 23847 (set (match_dup 0) 23848 (plus:SI (match_dup 0) 23849 (const_int -1)))] 23850 "find_reg_note (insn, REG_NONNEG, 0)" 23851 "...") 23852 23853 Note that since the insn is both a jump insn and has an output, it must 23854 deal with its own reloads, hence the 'm' constraints. Also note that 23855 since this insn is generated by the instruction combination phase 23856 combining two sequential insns together into an implicit parallel insn, 23857 the iteration counter needs to be biased by the same amount as the 23858 decrement operation, in this case -1. Note that the following similar 23859 pattern will not be matched by the combiner. 23860 23861 (define_insn "decrement_and_branch_until_zero" 23862 [(set (pc) 23863 (if_then_else 23864 (ge (match_operand:SI 0 "general_operand" "+d*am") 23865 (const_int 1)) 23866 (label_ref (match_operand 1 "" "")) 23867 (pc))) 23868 (set (match_dup 0) 23869 (plus:SI (match_dup 0) 23870 (const_int -1)))] 23871 "find_reg_note (insn, REG_NONNEG, 0)" 23872 "...") 23873 23874 The other two special looping patterns, 'doloop_begin' and 23875 'doloop_end', are emitted by the loop optimizer for certain well-behaved 23876 loops with a finite number of loop iterations using information 23877 collected during strength reduction. 23878 23879 The 'doloop_end' pattern describes the actual looping instruction (or 23880 the implicit looping operation) and the 'doloop_begin' pattern is an 23881 optional companion pattern that can be used for initialization needed 23882 for some low-overhead looping instructions. 23883 23884 Note that some machines require the actual looping instruction to be 23885 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 23886 the true RTL for a looping instruction at the top of the loop can cause 23887 problems with flow analysis. So instead, a dummy 'doloop' insn is 23888 emitted at the end of the loop. The machine dependent reorg pass checks 23889 for the presence of this 'doloop' insn and then searches back to the top 23890 of the loop, where it inserts the true looping insn (provided there are 23891 no instructions in the loop which would cause problems). Any additional 23892 labels can be emitted at this point. In addition, if the desired 23893 special iteration counter register was not allocated, this machine 23894 dependent reorg pass could emit a traditional compare and jump 23895 instruction pair. 23896 23897 The essential difference between the 'decrement_and_branch_until_zero' 23898 and the 'doloop_end' patterns is that the loop optimizer allocates an 23899 additional pseudo register for the latter as an iteration counter. This 23900 pseudo register cannot be used within the loop (i.e., general induction 23901 variables cannot be derived from it), however, in many cases the loop 23902 induction variable may become redundant and removed by the flow pass. 23903 23904 23905 File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 23906 23907 16.14 Canonicalization of Instructions 23908 ====================================== 23909 23910 There are often cases where multiple RTL expressions could represent an 23911 operation performed by a single machine instruction. This situation is 23912 most commonly encountered with logical, branch, and multiply-accumulate 23913 instructions. In such cases, the compiler attempts to convert these 23914 multiple RTL expressions into a single canonical form to reduce the 23915 number of insn patterns required. 23916 23917 In addition to algebraic simplifications, following canonicalizations 23918 are performed: 23919 23920 * For commutative and comparison operators, a constant is always made 23921 the second operand. If a machine only supports a constant as the 23922 second operand, only patterns that match a constant in the second 23923 operand need be supplied. 23924 23925 * For associative operators, a sequence of operators will always 23926 chain to the left; for instance, only the left operand of an 23927 integer 'plus' can itself be a 'plus'. 'and', 'ior', 'xor', 23928 'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative 23929 when applied to integers, and sometimes to floating-point. 23930 23931 * For these operators, if only one operand is a 'neg', 'not', 'mult', 23932 'plus', or 'minus' expression, it will be the first operand. 23933 23934 * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg' 23935 operations (if any) will be moved inside the operations as far as 23936 possible. For instance, '(neg (mult A B))' is canonicalized as 23937 '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is 23938 canonicalized as '(minus A (mult B C))'. 23939 23940 * For the 'compare' operator, a constant is always the second operand 23941 if the first argument is a condition code register or '(cc0)'. 23942 23943 * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the 23944 first operand under the same conditions as above. 23945 23946 * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'. 23947 Likewise with 'geu' instead of 'ltu'. 23948 23949 * '(minus X (const_int N))' is converted to '(plus X (const_int 23950 -N))'. 23951 23952 * Within address computations (i.e., inside 'mem'), a left shift is 23953 converted into the appropriate multiplication by a power of two. 23954 23955 * De Morgan's Law is used to move bitwise negation inside a bitwise 23956 logical-and or logical-or operation. If this results in only one 23957 operand being a 'not' expression, it will be the first one. 23958 23959 A machine that has an instruction that performs a bitwise 23960 logical-and of one operand with the bitwise negation of the other 23961 should specify the pattern for that instruction as 23962 23963 (define_insn "" 23964 [(set (match_operand:M 0 ...) 23965 (and:M (not:M (match_operand:M 1 ...)) 23966 (match_operand:M 2 ...)))] 23967 "..." 23968 "...") 23969 23970 Similarly, a pattern for a "NAND" instruction should be written 23971 23972 (define_insn "" 23973 [(set (match_operand:M 0 ...) 23974 (ior:M (not:M (match_operand:M 1 ...)) 23975 (not:M (match_operand:M 2 ...))))] 23976 "..." 23977 "...") 23978 23979 In both cases, it is not necessary to include patterns for the many 23980 logically equivalent RTL expressions. 23981 23982 * The only possible RTL expressions involving both bitwise 23983 exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M 23984 (xor:M X Y))'. 23985 23986 * The sum of three items, one of which is a constant, will only 23987 appear in the form 23988 23989 (plus:M (plus:M X Y) CONSTANT) 23990 23991 * Equality comparisons of a group of bits (usually a single bit) with 23992 zero will be written using 'zero_extract' rather than the 23993 equivalent 'and' or 'sign_extract' operations. 23994 23995 * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))' 23996 is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))', 23997 and likewise for 'zero_extend'. 23998 23999 * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))' 24000 is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S)) 24001 (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend' 24002 and 'lshiftrt'. If the second operand of 'mult' is also a shift, 24003 then that is extended also. This transformation is only applied 24004 when it can be proven that the original operation had sufficient 24005 precision to prevent overflow. 24006 24007 Further canonicalization rules are defined in the function 24008 'commutative_operand_precedence' in 'gcc/rtlanal.c'. 24009 24010 24011 File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 24012 24013 16.15 Defining RTL Sequences for Code Generation 24014 ================================================ 24015 24016 On some target machines, some standard pattern names for RTL generation 24017 cannot be handled with single insn, but a sequence of RTL insns can 24018 represent them. For these target machines, you can write a 24019 'define_expand' to specify how to generate the sequence of RTL. 24020 24021 A 'define_expand' is an RTL expression that looks almost like a 24022 'define_insn'; but, unlike the latter, a 'define_expand' is used only 24023 for RTL generation and it can produce more than one RTL insn. 24024 24025 A 'define_expand' RTX has four operands: 24026 24027 * The name. Each 'define_expand' must have a name, since the only 24028 use for it is to refer to it by name. 24029 24030 * The RTL template. This is a vector of RTL expressions representing 24031 a sequence of separate instructions. Unlike 'define_insn', there 24032 is no implicit surrounding 'PARALLEL'. 24033 24034 * The condition, a string containing a C expression. This expression 24035 is used to express how the availability of this pattern depends on 24036 subclasses of target machine, selected by command-line options when 24037 GCC is run. This is just like the condition of a 'define_insn' 24038 that has a standard name. Therefore, the condition (if present) 24039 may not depend on the data in the insn being matched, but only the 24040 target-machine-type flags. The compiler needs to test these 24041 conditions during initialization in order to learn exactly which 24042 named instructions are available in a particular run. 24043 24044 * The preparation statements, a string containing zero or more C 24045 statements which are to be executed before RTL code is generated 24046 from the RTL template. 24047 24048 Usually these statements prepare temporary registers for use as 24049 internal operands in the RTL template, but they can also generate 24050 RTL insns directly by calling routines such as 'emit_insn', etc. 24051 Any such insns precede the ones that come from the RTL template. 24052 24053 * Optionally, a vector containing the values of attributes. *Note 24054 Insn Attributes::. 24055 24056 Every RTL insn emitted by a 'define_expand' must match some 24057 'define_insn' in the machine description. Otherwise, the compiler will 24058 crash when trying to generate code for the insn or trying to optimize 24059 it. 24060 24061 The RTL template, in addition to controlling generation of RTL insns, 24062 also describes the operands that need to be specified when this pattern 24063 is used. In particular, it gives a predicate for each operand. 24064 24065 A true operand, which needs to be specified in order to generate RTL 24066 from the pattern, should be described with a 'match_operand' in its 24067 first occurrence in the RTL template. This enters information on the 24068 operand's predicate into the tables that record such things. GCC uses 24069 the information to preload the operand into a register if that is 24070 required for valid RTL code. If the operand is referred to more than 24071 once, subsequent references should use 'match_dup'. 24072 24073 The RTL template may also refer to internal "operands" which are 24074 temporary registers or labels used only within the sequence made by the 24075 'define_expand'. Internal operands are substituted into the RTL 24076 template with 'match_dup', never with 'match_operand'. The values of 24077 the internal operands are not passed in as arguments by the compiler 24078 when it requests use of this pattern. Instead, they are computed within 24079 the pattern, in the preparation statements. These statements compute 24080 the values and store them into the appropriate elements of 'operands' so 24081 that 'match_dup' can find them. 24082 24083 There are two special macros defined for use in the preparation 24084 statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 24085 a statement. 24086 24087 'DONE' 24088 Use the 'DONE' macro to end RTL generation for the pattern. The 24089 only RTL insns resulting from the pattern on this occasion will be 24090 those already emitted by explicit calls to 'emit_insn' within the 24091 preparation statements; the RTL template will not be generated. 24092 24093 'FAIL' 24094 Make the pattern fail on this occasion. When a pattern fails, it 24095 means that the pattern was not truly available. The calling 24096 routines in the compiler will try other strategies for code 24097 generation using other patterns. 24098 24099 Failure is currently supported only for binary (addition, 24100 multiplication, shifting, etc.) and bit-field ('extv', 'extzv', 24101 and 'insv') operations. 24102 24103 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 24104 then the 'define_expand' acts like a 'define_insn' in that the RTL 24105 template is used to generate the insn. 24106 24107 The RTL template is not used for matching, only for generating the 24108 initial insn list. If the preparation statement always invokes 'DONE' 24109 or 'FAIL', the RTL template may be reduced to a simple list of operands, 24110 such as this example: 24111 24112 (define_expand "addsi3" 24113 [(match_operand:SI 0 "register_operand" "") 24114 (match_operand:SI 1 "register_operand" "") 24115 (match_operand:SI 2 "register_operand" "")] 24116 "" 24117 " 24118 { 24119 handle_add (operands[0], operands[1], operands[2]); 24120 DONE; 24121 }") 24122 24123 Here is an example, the definition of left-shift for the SPUR chip: 24124 24125 (define_expand "ashlsi3" 24126 [(set (match_operand:SI 0 "register_operand" "") 24127 (ashift:SI 24128 (match_operand:SI 1 "register_operand" "") 24129 (match_operand:SI 2 "nonmemory_operand" "")))] 24130 "" 24131 " 24132 24133 { 24134 if (GET_CODE (operands[2]) != CONST_INT 24135 || (unsigned) INTVAL (operands[2]) > 3) 24136 FAIL; 24137 }") 24138 24139 This example uses 'define_expand' so that it can generate an RTL insn 24140 for shifting when the shift-count is in the supported range of 0 to 3 24141 but fail in other cases where machine insns aren't available. When it 24142 fails, the compiler tries another strategy using different patterns 24143 (such as, a library call). 24144 24145 If the compiler were able to handle nontrivial condition-strings in 24146 patterns with names, then it would be possible to use a 'define_insn' in 24147 that case. Here is another case (zero-extension on the 68000) which 24148 makes more use of the power of 'define_expand': 24149 24150 (define_expand "zero_extendhisi2" 24151 [(set (match_operand:SI 0 "general_operand" "") 24152 (const_int 0)) 24153 (set (strict_low_part 24154 (subreg:HI 24155 (match_dup 0) 24156 0)) 24157 (match_operand:HI 1 "general_operand" ""))] 24158 "" 24159 "operands[1] = make_safe_from (operands[1], operands[0]);") 24160 24161 Here two RTL insns are generated, one to clear the entire output operand 24162 and the other to copy the input operand into its low half. This 24163 sequence is incorrect if the input operand refers to [the old value of] 24164 the output operand, so the preparation statement makes sure this isn't 24165 so. The function 'make_safe_from' copies the 'operands[1]' into a 24166 temporary register if it refers to 'operands[0]'. It does this by 24167 emitting another RTL insn. 24168 24169 Finally, a third example shows the use of an internal operand. 24170 Zero-extension on the SPUR chip is done by 'and'-ing the result against 24171 a halfword mask. But this mask cannot be represented by a 'const_int' 24172 because the constant value is too large to be legitimate on this 24173 machine. So it must be copied into a register with 'force_reg' and then 24174 the register used in the 'and'. 24175 24176 (define_expand "zero_extendhisi2" 24177 [(set (match_operand:SI 0 "register_operand" "") 24178 (and:SI (subreg:SI 24179 (match_operand:HI 1 "register_operand" "") 24180 0) 24181 (match_dup 2)))] 24182 "" 24183 "operands[2] 24184 = force_reg (SImode, GEN_INT (65535)); ") 24185 24186 _Note:_ If the 'define_expand' is used to serve a standard binary or 24187 unary arithmetic operation or a bit-field operation, then the last insn 24188 it generates must not be a 'code_label', 'barrier' or 'note'. It must 24189 be an 'insn', 'jump_insn' or 'call_insn'. If you don't need a real insn 24190 at the end, emit an insn to copy the result of the operation into 24191 itself. Such an insn will generate no code, but it can avoid problems 24192 in the compiler. 24193 24194 24195 File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 24196 24197 16.16 Defining How to Split Instructions 24198 ======================================== 24199 24200 There are two cases where you should specify how to split a pattern into 24201 multiple insns. On machines that have instructions requiring delay 24202 slots (*note Delay Slots::) or that have instructions whose output is 24203 not available for multiple cycles (*note Processor pipeline 24204 description::), the compiler phases that optimize these cases need to be 24205 able to move insns into one-instruction delay slots. However, some 24206 insns may generate more than one machine instruction. These insns 24207 cannot be placed into a delay slot. 24208 24209 Often you can rewrite the single insn as a list of individual insns, 24210 each corresponding to one machine instruction. The disadvantage of 24211 doing so is that it will cause the compilation to be slower and require 24212 more space. If the resulting insns are too complex, it may also 24213 suppress some optimizations. The compiler splits the insn if there is a 24214 reason to believe that it might improve instruction or delay slot 24215 scheduling. 24216 24217 The insn combiner phase also splits putative insns. If three insns are 24218 merged into one insn with a complex expression that cannot be matched by 24219 some 'define_insn' pattern, the combiner phase attempts to split the 24220 complex pattern into two insns that are recognized. Usually it can 24221 break the complex pattern into two patterns by splitting out some 24222 subexpression. However, in some other cases, such as performing an 24223 addition of a large constant in two insns on a RISC machine, the way to 24224 split the addition into two insns is machine-dependent. 24225 24226 The 'define_split' definition tells the compiler how to split a complex 24227 insn into several simpler insns. It looks like this: 24228 24229 (define_split 24230 [INSN-PATTERN] 24231 "CONDITION" 24232 [NEW-INSN-PATTERN-1 24233 NEW-INSN-PATTERN-2 24234 ...] 24235 "PREPARATION-STATEMENTS") 24236 24237 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 24238 final condition to be tested, as in a 'define_insn'. When an insn 24239 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 24240 in the insn list with the insns given by NEW-INSN-PATTERN-1, 24241 NEW-INSN-PATTERN-2, etc. 24242 24243 The PREPARATION-STATEMENTS are similar to those statements that are 24244 specified for 'define_expand' (*note Expander Definitions::) and are 24245 executed before the new RTL is generated to prepare for the generated 24246 code or emit some insns whose pattern is not fixed. Unlike those in 24247 'define_expand', however, these statements must not generate any new 24248 pseudo-registers. Once reload has completed, they also must not 24249 allocate any space in the stack frame. 24250 24251 Patterns are matched against INSN-PATTERN in two different 24252 circumstances. If an insn needs to be split for delay slot scheduling 24253 or insn scheduling, the insn is already known to be valid, which means 24254 that it must have been matched by some 'define_insn' and, if 24255 'reload_completed' is nonzero, is known to satisfy the constraints of 24256 that 'define_insn'. In that case, the new insn patterns must also be 24257 insns that are matched by some 'define_insn' and, if 'reload_completed' 24258 is nonzero, must also satisfy the constraints of those definitions. 24259 24260 As an example of this usage of 'define_split', consider the following 24261 example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to 24262 'SImode' into a pair of shift insns: 24263 24264 (define_split 24265 [(set (match_operand:SI 0 "gen_reg_operand" "") 24266 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 24267 "" 24268 [(set (match_dup 0) 24269 (ashift:SI (match_dup 1) 24270 (const_int 16))) 24271 (set (match_dup 0) 24272 (ashiftrt:SI (match_dup 0) 24273 (const_int 16)))] 24274 " 24275 { operands[1] = gen_lowpart (SImode, operands[1]); }") 24276 24277 When the combiner phase tries to split an insn pattern, it is always 24278 the case that the pattern is _not_ matched by any 'define_insn'. The 24279 combiner pass first tries to split a single 'set' expression and then 24280 the same 'set' expression inside a 'parallel', but followed by a 24281 'clobber' of a pseudo-reg to use as a scratch register. In these cases, 24282 the combiner expects exactly two new insn patterns to be generated. It 24283 will verify that these patterns match some 'define_insn' definitions, so 24284 you need not do this test in the 'define_split' (of course, there is no 24285 point in writing a 'define_split' that will never produce insns that 24286 match). 24287 24288 Here is an example of this use of 'define_split', taken from 24289 'rs6000.md': 24290 24291 (define_split 24292 [(set (match_operand:SI 0 "gen_reg_operand" "") 24293 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 24294 (match_operand:SI 2 "non_add_cint_operand" "")))] 24295 "" 24296 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 24297 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 24298 " 24299 { 24300 int low = INTVAL (operands[2]) & 0xffff; 24301 int high = (unsigned) INTVAL (operands[2]) >> 16; 24302 24303 if (low & 0x8000) 24304 high++, low |= 0xffff0000; 24305 24306 operands[3] = GEN_INT (high << 16); 24307 operands[4] = GEN_INT (low); 24308 }") 24309 24310 Here the predicate 'non_add_cint_operand' matches any 'const_int' that 24311 is _not_ a valid operand of a single add insn. The add with the smaller 24312 displacement is written so that it can be substituted into the address 24313 of a subsequent operation. 24314 24315 An example that uses a scratch register, from the same file, generates 24316 an equality comparison of a register and a large constant: 24317 24318 (define_split 24319 [(set (match_operand:CC 0 "cc_reg_operand" "") 24320 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 24321 (match_operand:SI 2 "non_short_cint_operand" ""))) 24322 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 24323 "find_single_use (operands[0], insn, 0) 24324 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 24325 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 24326 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 24327 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 24328 " 24329 { 24330 /* Get the constant we are comparing against, C, and see what it 24331 looks like sign-extended to 16 bits. Then see what constant 24332 could be XOR'ed with C to get the sign-extended value. */ 24333 24334 int c = INTVAL (operands[2]); 24335 int sextc = (c << 16) >> 16; 24336 int xorv = c ^ sextc; 24337 24338 operands[4] = GEN_INT (xorv); 24339 operands[5] = GEN_INT (sextc); 24340 }") 24341 24342 To avoid confusion, don't write a single 'define_split' that accepts 24343 some insns that match some 'define_insn' as well as some insns that 24344 don't. Instead, write two separate 'define_split' definitions, one for 24345 the insns that are valid and one for the insns that are not valid. 24346 24347 The splitter is allowed to split jump instructions into sequence of 24348 jumps or create new jumps in while splitting non-jump instructions. As 24349 the central flowgraph and branch prediction information needs to be 24350 updated, several restriction apply. 24351 24352 Splitting of jump instruction into sequence that over by another jump 24353 instruction is always valid, as compiler expect identical behavior of 24354 new jump. When new sequence contains multiple jump instructions or new 24355 labels, more assistance is needed. Splitter is required to create only 24356 unconditional jumps, or simple conditional jump instructions. 24357 Additionally it must attach a 'REG_BR_PROB' note to each conditional 24358 jump. A global variable 'split_branch_probability' holds the 24359 probability of the original branch in case it was a simple conditional 24360 jump, -1 otherwise. To simplify recomputing of edge frequencies, the 24361 new sequence is required to have only forward jumps to the newly created 24362 labels. 24363 24364 For the common case where the pattern of a define_split exactly matches 24365 the pattern of a define_insn, use 'define_insn_and_split'. It looks 24366 like this: 24367 24368 (define_insn_and_split 24369 [INSN-PATTERN] 24370 "CONDITION" 24371 "OUTPUT-TEMPLATE" 24372 "SPLIT-CONDITION" 24373 [NEW-INSN-PATTERN-1 24374 NEW-INSN-PATTERN-2 24375 ...] 24376 "PREPARATION-STATEMENTS" 24377 [INSN-ATTRIBUTES]) 24378 24379 24380 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 24381 as in 'define_insn'. The NEW-INSN-PATTERN vector and the 24382 PREPARATION-STATEMENTS are used as in a 'define_split'. The 24383 SPLIT-CONDITION is also used as in 'define_split', with the additional 24384 behavior that if the condition starts with '&&', the condition used for 24385 the split will be the constructed as a logical "and" of the split 24386 condition with the insn condition. For example, from i386.md: 24387 24388 (define_insn_and_split "zero_extendhisi2_and" 24389 [(set (match_operand:SI 0 "register_operand" "=r") 24390 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 24391 (clobber (reg:CC 17))] 24392 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 24393 "#" 24394 "&& reload_completed" 24395 [(parallel [(set (match_dup 0) 24396 (and:SI (match_dup 0) (const_int 65535))) 24397 (clobber (reg:CC 17))])] 24398 "" 24399 [(set_attr "type" "alu1")]) 24400 24401 24402 In this case, the actual split condition will be 24403 'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 24404 24405 The 'define_insn_and_split' construction provides exactly the same 24406 functionality as two separate 'define_insn' and 'define_split' patterns. 24407 It exists for compactness, and as a maintenance tool to prevent having 24408 to ensure the two patterns' templates match. 24409 24410 24411 File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 24412 24413 16.17 Including Patterns in Machine Descriptions. 24414 ================================================= 24415 24416 The 'include' pattern tells the compiler tools where to look for 24417 patterns that are in files other than in the file '.md'. This is used 24418 only at build time and there is no preprocessing allowed. 24419 24420 It looks like: 24421 24422 24423 (include 24424 PATHNAME) 24425 24426 For example: 24427 24428 24429 (include "filestuff") 24430 24431 24432 Where PATHNAME is a string that specifies the location of the file, 24433 specifies the include file to be in 'gcc/config/target/filestuff'. The 24434 directory 'gcc/config/target' is regarded as the default directory. 24435 24436 Machine descriptions may be split up into smaller more manageable 24437 subsections and placed into subdirectories. 24438 24439 By specifying: 24440 24441 24442 (include "BOGUS/filestuff") 24443 24444 24445 the include file is specified to be in 24446 'gcc/config/TARGET/BOGUS/filestuff'. 24447 24448 Specifying an absolute path for the include file such as; 24449 24450 (include "/u2/BOGUS/filestuff") 24451 24452 is permitted but is not encouraged. 24453 24454 16.17.1 RTL Generation Tool Options for Directory Search 24455 -------------------------------------------------------- 24456 24457 The '-IDIR' option specifies directories to search for machine 24458 descriptions. For example: 24459 24460 24461 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 24462 24463 24464 Add the directory DIR to the head of the list of directories to be 24465 searched for header files. This can be used to override a system 24466 machine definition file, substituting your own version, since these 24467 directories are searched before the default machine description file 24468 directories. If you use more than one '-I' option, the directories are 24469 scanned in left-to-right order; the standard default directory come 24470 after. 24471 24472 24473 File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 24474 24475 16.18 Machine-Specific Peephole Optimizers 24476 ========================================== 24477 24478 In addition to instruction patterns the 'md' file may contain 24479 definitions of machine-specific peephole optimizations. 24480 24481 The combiner does not notice certain peephole optimizations when the 24482 data flow in the program does not suggest that it should try them. For 24483 example, sometimes two consecutive insns related in purpose can be 24484 combined even though the second one does not appear to use a register 24485 computed in the first one. A machine-specific peephole optimizer can 24486 detect such opportunities. 24487 24488 There are two forms of peephole definitions that may be used. The 24489 original 'define_peephole' is run at assembly output time to match insns 24490 and substitute assembly text. Use of 'define_peephole' is deprecated. 24491 24492 A newer 'define_peephole2' matches insns and substitutes new insns. 24493 The 'peephole2' pass is run after register allocation but before 24494 scheduling, which may result in much better code for targets that do 24495 scheduling. 24496 24497 * Menu: 24498 24499 * define_peephole:: RTL to Text Peephole Optimizers 24500 * define_peephole2:: RTL to RTL Peephole Optimizers 24501 24502 24503 File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 24504 24505 16.18.1 RTL to Text Peephole Optimizers 24506 --------------------------------------- 24507 24508 A definition looks like this: 24509 24510 (define_peephole 24511 [INSN-PATTERN-1 24512 INSN-PATTERN-2 24513 ...] 24514 "CONDITION" 24515 "TEMPLATE" 24516 "OPTIONAL-INSN-ATTRIBUTES") 24517 24518 The last string operand may be omitted if you are not using any 24519 machine-specific information in this machine description. If present, 24520 it must obey the same rules as in a 'define_insn'. 24521 24522 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 24523 consecutive insns. The optimization applies to a sequence of insns when 24524 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 24525 and so on. 24526 24527 Each of the insns matched by a peephole must also match a 24528 'define_insn'. Peepholes are checked only at the last stage just before 24529 code generation, and only optionally. Therefore, any insn which would 24530 match a peephole but no 'define_insn' will cause a crash in code 24531 generation in an unoptimized compilation, or at various optimization 24532 stages. 24533 24534 The operands of the insns are matched with 'match_operands', 24535 'match_operator', and 'match_dup', as usual. What is not usual is that 24536 the operand numbers apply to all the insn patterns in the definition. 24537 So, you can check for identical operands in two insns by using 24538 'match_operand' in one insn and 'match_dup' in the other. 24539 24540 The operand constraints used in 'match_operand' patterns do not have 24541 any direct effect on the applicability of the peephole, but they will be 24542 validated afterward, so make sure your constraints are general enough to 24543 apply whenever the peephole matches. If the peephole matches but the 24544 constraints are not satisfied, the compiler will crash. 24545 24546 It is safe to omit constraints in all the operands of the peephole; or 24547 you can write constraints which serve as a double-check on the criteria 24548 previously tested. 24549 24550 Once a sequence of insns matches the patterns, the CONDITION is 24551 checked. This is a C expression which makes the final decision whether 24552 to perform the optimization (we do so if the expression is nonzero). If 24553 CONDITION is omitted (in other words, the string is empty) then the 24554 optimization is applied to every sequence of insns that matches the 24555 patterns. 24556 24557 The defined peephole optimizations are applied after register 24558 allocation is complete. Therefore, the peephole definition can check 24559 which operands have ended up in which kinds of registers, just by 24560 looking at the operands. 24561 24562 The way to refer to the operands in CONDITION is to write 'operands[I]' 24563 for operand number I (as matched by '(match_operand I ...)'). Use the 24564 variable 'insn' to refer to the last of the insns being matched; use 24565 'prev_active_insn' to find the preceding insns. 24566 24567 When optimizing computations with intermediate results, you can use 24568 CONDITION to match only when the intermediate results are not used 24569 elsewhere. Use the C expression 'dead_or_set_p (INSN, OP)', where INSN 24570 is the insn in which you expect the value to be used for the last time 24571 (from the value of 'insn', together with use of 'prev_nonnote_insn'), 24572 and OP is the intermediate value (from 'operands[I]'). 24573 24574 Applying the optimization means replacing the sequence of insns with 24575 one new insn. The TEMPLATE controls ultimate output of assembler code 24576 for this combined insn. It works exactly like the template of a 24577 'define_insn'. Operand numbers in this template are the same ones used 24578 in matching the original sequence of insns. 24579 24580 The result of a defined peephole optimizer does not need to match any 24581 of the insn patterns in the machine description; it does not even have 24582 an opportunity to match them. The peephole optimizer definition itself 24583 serves as the insn pattern to control how the insn is output. 24584 24585 Defined peephole optimizers are run as assembler code is being output, 24586 so the insns they produce are never combined or rearranged in any way. 24587 24588 Here is an example, taken from the 68000 machine description: 24589 24590 (define_peephole 24591 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 24592 (set (match_operand:DF 0 "register_operand" "=f") 24593 (match_operand:DF 1 "register_operand" "ad"))] 24594 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 24595 { 24596 rtx xoperands[2]; 24597 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 24598 #ifdef MOTOROLA 24599 output_asm_insn ("move.l %1,(sp)", xoperands); 24600 output_asm_insn ("move.l %1,-(sp)", operands); 24601 return "fmove.d (sp)+,%0"; 24602 #else 24603 output_asm_insn ("movel %1,sp@", xoperands); 24604 output_asm_insn ("movel %1,sp@-", operands); 24605 return "fmoved sp@+,%0"; 24606 #endif 24607 }) 24608 24609 The effect of this optimization is to change 24610 24611 jbsr _foobar 24612 addql #4,sp 24613 movel d1,sp@- 24614 movel d0,sp@- 24615 fmoved sp@+,fp0 24616 24617 into 24618 24619 jbsr _foobar 24620 movel d1,sp@ 24621 movel d0,sp@- 24622 fmoved sp@+,fp0 24623 24624 INSN-PATTERN-1 and so on look _almost_ like the second operand of 24625 'define_insn'. There is one important difference: the second operand of 24626 'define_insn' consists of one or more RTX's enclosed in square brackets. 24627 Usually, there is only one: then the same action can be written as an 24628 element of a 'define_peephole'. But when there are multiple actions in 24629 a 'define_insn', they are implicitly enclosed in a 'parallel'. Then you 24630 must explicitly write the 'parallel', and the square brackets within it, 24631 in the 'define_peephole'. Thus, if an insn pattern looks like this, 24632 24633 (define_insn "divmodsi4" 24634 [(set (match_operand:SI 0 "general_operand" "=d") 24635 (div:SI (match_operand:SI 1 "general_operand" "0") 24636 (match_operand:SI 2 "general_operand" "dmsK"))) 24637 (set (match_operand:SI 3 "general_operand" "=d") 24638 (mod:SI (match_dup 1) (match_dup 2)))] 24639 "TARGET_68020" 24640 "divsl%.l %2,%3:%0") 24641 24642 then the way to mention this insn in a peephole is as follows: 24643 24644 (define_peephole 24645 [... 24646 (parallel 24647 [(set (match_operand:SI 0 "general_operand" "=d") 24648 (div:SI (match_operand:SI 1 "general_operand" "0") 24649 (match_operand:SI 2 "general_operand" "dmsK"))) 24650 (set (match_operand:SI 3 "general_operand" "=d") 24651 (mod:SI (match_dup 1) (match_dup 2)))]) 24652 ...] 24653 ...) 24654 24655 24656 File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 24657 24658 16.18.2 RTL to RTL Peephole Optimizers 24659 -------------------------------------- 24660 24661 The 'define_peephole2' definition tells the compiler how to substitute 24662 one sequence of instructions for another sequence, what additional 24663 scratch registers may be needed and what their lifetimes must be. 24664 24665 (define_peephole2 24666 [INSN-PATTERN-1 24667 INSN-PATTERN-2 24668 ...] 24669 "CONDITION" 24670 [NEW-INSN-PATTERN-1 24671 NEW-INSN-PATTERN-2 24672 ...] 24673 "PREPARATION-STATEMENTS") 24674 24675 The definition is almost identical to 'define_split' (*note Insn 24676 Splitting::) except that the pattern to match is not a single 24677 instruction, but a sequence of instructions. 24678 24679 It is possible to request additional scratch registers for use in the 24680 output template. If appropriate registers are not free, the pattern 24681 will simply not match. 24682 24683 Scratch registers are requested with a 'match_scratch' pattern at the 24684 top level of the input pattern. The allocated register (initially) will 24685 be dead at the point requested within the original sequence. If the 24686 scratch is used at more than a single point, a 'match_dup' pattern at 24687 the top level of the input pattern marks the last position in the input 24688 sequence at which the register must be available. 24689 24690 Here is an example from the IA-32 machine description: 24691 24692 (define_peephole2 24693 [(match_scratch:SI 2 "r") 24694 (parallel [(set (match_operand:SI 0 "register_operand" "") 24695 (match_operator:SI 3 "arith_or_logical_operator" 24696 [(match_dup 0) 24697 (match_operand:SI 1 "memory_operand" "")])) 24698 (clobber (reg:CC 17))])] 24699 "! optimize_size && ! TARGET_READ_MODIFY" 24700 [(set (match_dup 2) (match_dup 1)) 24701 (parallel [(set (match_dup 0) 24702 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 24703 (clobber (reg:CC 17))])] 24704 "") 24705 24706 This pattern tries to split a load from its use in the hopes that we'll 24707 be able to schedule around the memory load latency. It allocates a 24708 single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to 24709 be live only at the point just before the arithmetic. 24710 24711 A real example requiring extended scratch lifetimes is harder to come 24712 by, so here's a silly made-up example: 24713 24714 (define_peephole2 24715 [(match_scratch:SI 4 "r") 24716 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 24717 (set (match_operand:SI 2 "" "") (match_dup 1)) 24718 (match_dup 4) 24719 (set (match_operand:SI 3 "" "") (match_dup 1))] 24720 "/* determine 1 does not overlap 0 and 2 */" 24721 [(set (match_dup 4) (match_dup 1)) 24722 (set (match_dup 0) (match_dup 4)) 24723 (set (match_dup 2) (match_dup 4))] 24724 (set (match_dup 3) (match_dup 4))] 24725 "") 24726 24727 If we had not added the '(match_dup 4)' in the middle of the input 24728 sequence, it might have been the case that the register we chose at the 24729 beginning of the sequence is killed by the first or second 'set'. 24730 24731 24732 File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 24733 24734 16.19 Instruction Attributes 24735 ============================ 24736 24737 In addition to describing the instruction supported by the target 24738 machine, the 'md' file also defines a group of "attributes" and a set of 24739 values for each. Every generated insn is assigned a value for each 24740 attribute. One possible attribute would be the effect that the insn has 24741 on the machine's condition code. This attribute can then be used by 24742 'NOTICE_UPDATE_CC' to track the condition codes. 24743 24744 * Menu: 24745 24746 * Defining Attributes:: Specifying attributes and their values. 24747 * Expressions:: Valid expressions for attribute values. 24748 * Tagging Insns:: Assigning attribute values to insns. 24749 * Attr Example:: An example of assigning attributes. 24750 * Insn Lengths:: Computing the length of insns. 24751 * Constant Attributes:: Defining attributes that are constant. 24752 * Delay Slots:: Defining delay slots required for a machine. 24753 * Processor pipeline description:: Specifying information for insn scheduling. 24754 24755 24756 File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 24757 24758 16.19.1 Defining Attributes and their Values 24759 -------------------------------------------- 24760 24761 The 'define_attr' expression is used to define each attribute required 24762 by the target machine. It looks like: 24763 24764 (define_attr NAME LIST-OF-VALUES DEFAULT) 24765 24766 NAME is a string specifying the name of the attribute being defined. 24767 Some attributes are used in a special way by the rest of the compiler. 24768 The 'enabled' attribute can be used to conditionally enable or disable 24769 insn alternatives (*note Disable Insn Alternatives::). The 'predicable' 24770 attribute, together with a suitable 'define_cond_exec' (*note 24771 Conditional Execution::), can be used to automatically generate 24772 conditional variants of instruction patterns. The compiler internally 24773 uses the names 'ce_enabled' and 'nonce_enabled', so they should not be 24774 used elsewhere as alternative names. 24775 24776 LIST-OF-VALUES is either a string that specifies a comma-separated list 24777 of values that can be assigned to the attribute, or a null string to 24778 indicate that the attribute takes numeric values. 24779 24780 DEFAULT is an attribute expression that gives the value of this 24781 attribute for insns that match patterns whose definition does not 24782 include an explicit value for this attribute. *Note Attr Example::, for 24783 more information on the handling of defaults. *Note Constant 24784 Attributes::, for information on attributes that do not depend on any 24785 particular insn. 24786 24787 For each defined attribute, a number of definitions are written to the 24788 'insn-attr.h' file. For cases where an explicit set of values is 24789 specified for an attribute, the following are defined: 24790 24791 * A '#define' is written for the symbol 'HAVE_ATTR_NAME'. 24792 24793 * An enumerated class is defined for 'attr_NAME' with elements of the 24794 form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value 24795 are first converted to uppercase. 24796 24797 * A function 'get_attr_NAME' is defined that is passed an insn and 24798 returns the attribute value for that insn. 24799 24800 For example, if the following is present in the 'md' file: 24801 24802 (define_attr "type" "branch,fp,load,store,arith" ...) 24803 24804 the following lines will be written to the file 'insn-attr.h'. 24805 24806 #define HAVE_ATTR_type 1 24807 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 24808 TYPE_STORE, TYPE_ARITH}; 24809 extern enum attr_type get_attr_type (); 24810 24811 If the attribute takes numeric values, no 'enum' type will be defined 24812 and the function to obtain the attribute's value will return 'int'. 24813 24814 There are attributes which are tied to a specific meaning. These 24815 attributes are not free to use for other purposes: 24816 24817 'length' 24818 The 'length' attribute is used to calculate the length of emitted 24819 code chunks. This is especially important when verifying branch 24820 distances. *Note Insn Lengths::. 24821 24822 'enabled' 24823 The 'enabled' attribute can be defined to prevent certain 24824 alternatives of an insn definition from being used during code 24825 generation. *Note Disable Insn Alternatives::. 24826 24827 For each of these special attributes, the corresponding 24828 'HAVE_ATTR_NAME' '#define' is also written when the attribute is not 24829 defined; in that case, it is defined as '0'. 24830 24831 Another way of defining an attribute is to use: 24832 24833 (define_enum_attr "ATTR" "ENUM" DEFAULT) 24834 24835 This works in just the same way as 'define_attr', except that the list 24836 of values is taken from a separate enumeration called ENUM (*note 24837 define_enum::). This form allows you to use the same list of values for 24838 several attributes without having to repeat the list each time. For 24839 example: 24840 24841 (define_enum "processor" [ 24842 model_a 24843 model_b 24844 ... 24845 ]) 24846 (define_enum_attr "arch" "processor" 24847 (const (symbol_ref "target_arch"))) 24848 (define_enum_attr "tune" "processor" 24849 (const (symbol_ref "target_tune"))) 24850 24851 defines the same attributes as: 24852 24853 (define_attr "arch" "model_a,model_b,..." 24854 (const (symbol_ref "target_arch"))) 24855 (define_attr "tune" "model_a,model_b,..." 24856 (const (symbol_ref "target_tune"))) 24857 24858 but without duplicating the processor list. The second example defines 24859 two separate C enums ('attr_arch' and 'attr_tune') whereas the first 24860 defines a single C enum ('processor'). 24861 24862 24863 File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 24864 24865 16.19.2 Attribute Expressions 24866 ----------------------------- 24867 24868 RTL expressions used to define attributes use the codes described above 24869 plus a few specific to attribute definitions, to be discussed below. 24870 Attribute value expressions must have one of the following forms: 24871 24872 '(const_int I)' 24873 The integer I specifies the value of a numeric attribute. I must 24874 be non-negative. 24875 24876 The value of a numeric attribute can be specified either with a 24877 'const_int', or as an integer represented as a string in 24878 'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple 24879 arithmetic expressions, and 'set_attr' overrides on specific 24880 instructions (*note Tagging Insns::). 24881 24882 '(const_string VALUE)' 24883 The string VALUE specifies a constant attribute value. If VALUE is 24884 specified as '"*"', it means that the default value of the 24885 attribute is to be used for the insn containing this expression. 24886 '"*"' obviously cannot be used in the DEFAULT expression of a 24887 'define_attr'. 24888 24889 If the attribute whose value is being specified is numeric, VALUE 24890 must be a string containing a non-negative integer (normally 24891 'const_int' would be used in this case). Otherwise, it must 24892 contain one of the valid values for the attribute. 24893 24894 '(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 24895 TEST specifies an attribute test, whose format is defined below. 24896 The value of this expression is TRUE-VALUE if TEST is true, 24897 otherwise it is FALSE-VALUE. 24898 24899 '(cond [TEST1 VALUE1 ...] DEFAULT)' 24900 The first operand of this expression is a vector containing an even 24901 number of expressions and consisting of pairs of TEST and VALUE 24902 expressions. The value of the 'cond' expression is that of the 24903 VALUE corresponding to the first true TEST expression. If none of 24904 the TEST expressions are true, the value of the 'cond' expression 24905 is that of the DEFAULT expression. 24906 24907 TEST expressions can have one of the following forms: 24908 24909 '(const_int I)' 24910 This test is true if I is nonzero and false otherwise. 24911 24912 '(not TEST)' 24913 '(ior TEST1 TEST2)' 24914 '(and TEST1 TEST2)' 24915 These tests are true if the indicated logical function is true. 24916 24917 '(match_operand:M N PRED CONSTRAINTS)' 24918 This test is true if operand N of the insn whose attribute value is 24919 being determined has mode M (this part of the test is ignored if M 24920 is 'VOIDmode') and the function specified by the string PRED 24921 returns a nonzero value when passed operand N and mode M (this part 24922 of the test is ignored if PRED is the null string). 24923 24924 The CONSTRAINTS operand is ignored and should be the null string. 24925 24926 '(match_test C-EXPR)' 24927 The test is true if C expression C-EXPR is true. In non-constant 24928 attributes, C-EXPR has access to the following variables: 24929 24930 INSN 24931 The rtl instruction under test. 24932 WHICH_ALTERNATIVE 24933 The 'define_insn' alternative that INSN matches. *Note Output 24934 Statement::. 24935 OPERANDS 24936 An array of INSN's rtl operands. 24937 24938 C-EXPR behaves like the condition in a C 'if' statement, so there 24939 is no need to explicitly convert the expression into a boolean 0 or 24940 1 value. For example, the following two tests are equivalent: 24941 24942 (match_test "x & 2") 24943 (match_test "(x & 2) != 0") 24944 24945 '(le ARITH1 ARITH2)' 24946 '(leu ARITH1 ARITH2)' 24947 '(lt ARITH1 ARITH2)' 24948 '(ltu ARITH1 ARITH2)' 24949 '(gt ARITH1 ARITH2)' 24950 '(gtu ARITH1 ARITH2)' 24951 '(ge ARITH1 ARITH2)' 24952 '(geu ARITH1 ARITH2)' 24953 '(ne ARITH1 ARITH2)' 24954 '(eq ARITH1 ARITH2)' 24955 These tests are true if the indicated comparison of the two 24956 arithmetic expressions is true. Arithmetic expressions are formed 24957 with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and', 24958 'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt' 24959 expressions. 24960 24961 'const_int' and 'symbol_ref' are always valid terms (*note Insn 24962 Lengths::,for additional forms). 'symbol_ref' is a string denoting 24963 a C expression that yields an 'int' when evaluated by the 24964 'get_attr_...' routine. It should normally be a global variable. 24965 24966 '(eq_attr NAME VALUE)' 24967 NAME is a string specifying the name of an attribute. 24968 24969 VALUE is a string that is either a valid value for attribute NAME, 24970 a comma-separated list of values, or '!' followed by a value or 24971 list. If VALUE does not begin with a '!', this test is true if the 24972 value of the NAME attribute of the current insn is in the list 24973 specified by VALUE. If VALUE begins with a '!', this test is true 24974 if the attribute's value is _not_ in the specified list. 24975 24976 For example, 24977 24978 (eq_attr "type" "load,store") 24979 24980 is equivalent to 24981 24982 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 24983 24984 If NAME specifies an attribute of 'alternative', it refers to the 24985 value of the compiler variable 'which_alternative' (*note Output 24986 Statement::) and the values must be small integers. For example, 24987 24988 (eq_attr "alternative" "2,3") 24989 24990 is equivalent to 24991 24992 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 24993 (eq (symbol_ref "which_alternative") (const_int 3))) 24994 24995 Note that, for most attributes, an 'eq_attr' test is simplified in 24996 cases where the value of the attribute being tested is known for 24997 all insns matching a particular pattern. This is by far the most 24998 common case. 24999 25000 '(attr_flag NAME)' 25001 The value of an 'attr_flag' expression is true if the flag 25002 specified by NAME is true for the 'insn' currently being scheduled. 25003 25004 NAME is a string specifying one of a fixed set of flags to test. 25005 Test the flags 'forward' and 'backward' to determine the direction 25006 of a conditional branch. 25007 25008 This example describes a conditional branch delay slot which can be 25009 nullified for forward branches that are taken (annul-true) or for 25010 backward branches which are not taken (annul-false). 25011 25012 (define_delay (eq_attr "type" "cbranch") 25013 [(eq_attr "in_branch_delay" "true") 25014 (and (eq_attr "in_branch_delay" "true") 25015 (attr_flag "forward")) 25016 (and (eq_attr "in_branch_delay" "true") 25017 (attr_flag "backward"))]) 25018 25019 The 'forward' and 'backward' flags are false if the current 'insn' 25020 being scheduled is not a conditional branch. 25021 25022 'attr_flag' is only used during delay slot scheduling and has no 25023 meaning to other passes of the compiler. 25024 25025 '(attr NAME)' 25026 The value of another attribute is returned. This is most useful 25027 for numeric attributes, as 'eq_attr' and 'attr_flag' produce more 25028 efficient code for non-numeric attributes. 25029 25030 25031 File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 25032 25033 16.19.3 Assigning Attribute Values to Insns 25034 ------------------------------------------- 25035 25036 The value assigned to an attribute of an insn is primarily determined by 25037 which pattern is matched by that insn (or which 'define_peephole' 25038 generated it). Every 'define_insn' and 'define_peephole' can have an 25039 optional last argument to specify the values of attributes for matching 25040 insns. The value of any attribute not specified in a particular insn is 25041 set to the default value for that attribute, as specified in its 25042 'define_attr'. Extensive use of default values for attributes permits 25043 the specification of the values for only one or two attributes in the 25044 definition of most insn patterns, as seen in the example in the next 25045 section. 25046 25047 The optional last argument of 'define_insn' and 'define_peephole' is a 25048 vector of expressions, each of which defines the value for a single 25049 attribute. The most general way of assigning an attribute's value is to 25050 use a 'set' expression whose first operand is an 'attr' expression 25051 giving the name of the attribute being set. The second operand of the 25052 'set' is an attribute expression (*note Expressions::) giving the value 25053 of the attribute. 25054 25055 When the attribute value depends on the 'alternative' attribute (i.e., 25056 which is the applicable alternative in the constraint of the insn), the 25057 'set_attr_alternative' expression can be used. It allows the 25058 specification of a vector of attribute expressions, one for each 25059 alternative. 25060 25061 When the generality of arbitrary attribute expressions is not required, 25062 the simpler 'set_attr' expression can be used, which allows specifying a 25063 string giving either a single attribute value or a list of attribute 25064 values, one for each alternative. 25065 25066 The form of each of the above specifications is shown below. In each 25067 case, NAME is a string specifying the attribute to be set. 25068 25069 '(set_attr NAME VALUE-STRING)' 25070 VALUE-STRING is either a string giving the desired attribute value, 25071 or a string containing a comma-separated list giving the values for 25072 succeeding alternatives. The number of elements must match the 25073 number of alternatives in the constraint of the insn pattern. 25074 25075 Note that it may be useful to specify '*' for some alternative, in 25076 which case the attribute will assume its default value for insns 25077 matching that alternative. 25078 25079 '(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 25080 Depending on the alternative of the insn, the value will be one of 25081 the specified values. This is a shorthand for using a 'cond' with 25082 tests on the 'alternative' attribute. 25083 25084 '(set (attr NAME) VALUE)' 25085 The first operand of this 'set' must be the special RTL expression 25086 'attr', whose sole operand is a string giving the name of the 25087 attribute being set. VALUE is the value of the attribute. 25088 25089 The following shows three different ways of representing the same 25090 attribute value specification: 25091 25092 (set_attr "type" "load,store,arith") 25093 25094 (set_attr_alternative "type" 25095 [(const_string "load") (const_string "store") 25096 (const_string "arith")]) 25097 25098 (set (attr "type") 25099 (cond [(eq_attr "alternative" "1") (const_string "load") 25100 (eq_attr "alternative" "2") (const_string "store")] 25101 (const_string "arith"))) 25102 25103 The 'define_asm_attributes' expression provides a mechanism to specify 25104 the attributes assigned to insns produced from an 'asm' statement. It 25105 has the form: 25106 25107 (define_asm_attributes [ATTR-SETS]) 25108 25109 where ATTR-SETS is specified the same as for both the 'define_insn' and 25110 the 'define_peephole' expressions. 25111 25112 These values will typically be the "worst case" attribute values. For 25113 example, they might indicate that the condition code will be clobbered. 25114 25115 A specification for a 'length' attribute is handled specially. The way 25116 to compute the length of an 'asm' insn is to multiply the length 25117 specified in the expression 'define_asm_attributes' by the number of 25118 machine instructions specified in the 'asm' statement, determined by 25119 counting the number of semicolons and newlines in the string. 25120 Therefore, the value of the 'length' attribute specified in a 25121 'define_asm_attributes' should be the maximum possible length of a 25122 single machine instruction. 25123 25124 25125 File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 25126 25127 16.19.4 Example of Attribute Specifications 25128 ------------------------------------------- 25129 25130 The judicious use of defaulting is important in the efficient use of 25131 insn attributes. Typically, insns are divided into "types" and an 25132 attribute, customarily called 'type', is used to represent this value. 25133 This attribute is normally used only to define the default value for 25134 other attributes. An example will clarify this usage. 25135 25136 Assume we have a RISC machine with a condition code and in which only 25137 full-word operations are performed in registers. Let us assume that we 25138 can divide all insns into loads, stores, (integer) arithmetic 25139 operations, floating point operations, and branches. 25140 25141 Here we will concern ourselves with determining the effect of an insn 25142 on the condition code and will limit ourselves to the following possible 25143 effects: The condition code can be set unpredictably (clobbered), not be 25144 changed, be set to agree with the results of the operation, or only 25145 changed if the item previously set into the condition code has been 25146 modified. 25147 25148 Here is part of a sample 'md' file for such a machine: 25149 25150 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 25151 25152 (define_attr "cc" "clobber,unchanged,set,change0" 25153 (cond [(eq_attr "type" "load") 25154 (const_string "change0") 25155 (eq_attr "type" "store,branch") 25156 (const_string "unchanged") 25157 (eq_attr "type" "arith") 25158 (if_then_else (match_operand:SI 0 "" "") 25159 (const_string "set") 25160 (const_string "clobber"))] 25161 (const_string "clobber"))) 25162 25163 (define_insn "" 25164 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 25165 (match_operand:SI 1 "general_operand" "r,m,r"))] 25166 "" 25167 "@ 25168 move %0,%1 25169 load %0,%1 25170 store %0,%1" 25171 [(set_attr "type" "arith,load,store")]) 25172 25173 Note that we assume in the above example that arithmetic operations 25174 performed on quantities smaller than a machine word clobber the 25175 condition code since they will set the condition code to a value 25176 corresponding to the full-word result. 25177 25178 25179 File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 25180 25181 16.19.5 Computing the Length of an Insn 25182 --------------------------------------- 25183 25184 For many machines, multiple types of branch instructions are provided, 25185 each for different length branch displacements. In most cases, the 25186 assembler will choose the correct instruction to use. However, when the 25187 assembler cannot do so, GCC can when a special attribute, the 'length' 25188 attribute, is defined. This attribute must be defined to have numeric 25189 values by specifying a null string in its 'define_attr'. 25190 25191 In the case of the 'length' attribute, two additional forms of 25192 arithmetic terms are allowed in test expressions: 25193 25194 '(match_dup N)' 25195 This refers to the address of operand N of the current insn, which 25196 must be a 'label_ref'. 25197 25198 '(pc)' 25199 This refers to the address of the _current_ insn. It might have 25200 been more consistent with other usage to make this the address of 25201 the _next_ insn but this would be confusing because the length of 25202 the current insn is to be computed. 25203 25204 For normal insns, the length will be determined by value of the 25205 'length' attribute. In the case of 'addr_vec' and 'addr_diff_vec' insn 25206 patterns, the length is computed as the number of vectors multiplied by 25207 the size of each vector. 25208 25209 Lengths are measured in addressable storage units (bytes). 25210 25211 The following macros can be used to refine the length computation: 25212 25213 'ADJUST_INSN_LENGTH (INSN, LENGTH)' 25214 If defined, modifies the length assigned to instruction INSN as a 25215 function of the context in which it is used. LENGTH is an lvalue 25216 that contains the initially computed length of the insn and should 25217 be updated with the correct length of the insn. 25218 25219 This macro will normally not be required. A case in which it is 25220 required is the ROMP. On this machine, the size of an 'addr_vec' 25221 insn must be increased by two to compensate for the fact that 25222 alignment may be required. 25223 25224 The routine that returns 'get_attr_length' (the value of the 'length' 25225 attribute) can be used by the output routine to determine the form of 25226 the branch instruction to be written, as the example below illustrates. 25227 25228 As an example of the specification of variable-length branches, 25229 consider the IBM 360. If we adopt the convention that a register will 25230 be set to the starting address of a function, we can jump to labels 25231 within 4k of the start using a four-byte instruction. Otherwise, we 25232 need a six-byte sequence to load the address from memory and then branch 25233 to it. 25234 25235 On such a machine, a pattern for a branch instruction might be 25236 specified as follows: 25237 25238 (define_insn "jump" 25239 [(set (pc) 25240 (label_ref (match_operand 0 "" "")))] 25241 "" 25242 { 25243 return (get_attr_length (insn) == 4 25244 ? "b %l0" : "l r15,=a(%l0); br r15"); 25245 } 25246 [(set (attr "length") 25247 (if_then_else (lt (match_dup 0) (const_int 4096)) 25248 (const_int 4) 25249 (const_int 6)))]) 25250 25251 25252 File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes 25253 25254 16.19.6 Constant Attributes 25255 --------------------------- 25256 25257 A special form of 'define_attr', where the expression for the default 25258 value is a 'const' expression, indicates an attribute that is constant 25259 for a given run of the compiler. Constant attributes may be used to 25260 specify which variety of processor is used. For example, 25261 25262 (define_attr "cpu" "m88100,m88110,m88000" 25263 (const 25264 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 25265 (symbol_ref "TARGET_88110") (const_string "m88110")] 25266 (const_string "m88000")))) 25267 25268 (define_attr "memory" "fast,slow" 25269 (const 25270 (if_then_else (symbol_ref "TARGET_FAST_MEM") 25271 (const_string "fast") 25272 (const_string "slow")))) 25273 25274 The routine generated for constant attributes has no parameters as it 25275 does not depend on any particular insn. RTL expressions used to define 25276 the value of a constant attribute may use the 'symbol_ref' form, but may 25277 not use either the 'match_operand' form or 'eq_attr' forms involving 25278 insn attributes. 25279 25280 25281 File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes 25282 25283 16.19.7 Delay Slot Scheduling 25284 ----------------------------- 25285 25286 The insn attribute mechanism can be used to specify the requirements for 25287 delay slots, if any, on a target machine. An instruction is said to 25288 require a "delay slot" if some instructions that are physically after 25289 the instruction are executed as if they were located before it. Classic 25290 examples are branch and call instructions, which often execute the 25291 following instruction before the branch or call is performed. 25292 25293 On some machines, conditional branch instructions can optionally 25294 "annul" instructions in the delay slot. This means that the instruction 25295 will not be executed for certain branch outcomes. Both instructions 25296 that annul if the branch is true and instructions that annul if the 25297 branch is false are supported. 25298 25299 Delay slot scheduling differs from instruction scheduling in that 25300 determining whether an instruction needs a delay slot is dependent only 25301 on the type of instruction being generated, not on data flow between the 25302 instructions. See the next section for a discussion of data-dependent 25303 instruction scheduling. 25304 25305 The requirement of an insn needing one or more delay slots is indicated 25306 via the 'define_delay' expression. It has the following form: 25307 25308 (define_delay TEST 25309 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 25310 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 25311 ...]) 25312 25313 TEST is an attribute test that indicates whether this 'define_delay' 25314 applies to a particular insn. If so, the number of required delay slots 25315 is determined by the length of the vector specified as the second 25316 argument. An insn placed in delay slot N must satisfy attribute test 25317 DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 25318 may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 25319 specifies which insns in the delay slot may be annulled if the branch is 25320 false. If annulling is not supported for that delay slot, '(nil)' 25321 should be coded. 25322 25323 For example, in the common case where branch and call insns require a 25324 single delay slot, which may contain any insn other than a branch or 25325 call, the following would be placed in the 'md' file: 25326 25327 (define_delay (eq_attr "type" "branch,call") 25328 [(eq_attr "type" "!branch,call") (nil) (nil)]) 25329 25330 Multiple 'define_delay' expressions may be specified. In this case, 25331 each such expression specifies different delay slot requirements and 25332 there must be no insn for which tests in two 'define_delay' expressions 25333 are both true. 25334 25335 For example, if we have a machine that requires one delay slot for 25336 branches but two for calls, no delay slot can contain a branch or call 25337 insn, and any valid insn in the delay slot for the branch can be 25338 annulled if the branch is true, we might represent this as follows: 25339 25340 (define_delay (eq_attr "type" "branch") 25341 [(eq_attr "type" "!branch,call") 25342 (eq_attr "type" "!branch,call") 25343 (nil)]) 25344 25345 (define_delay (eq_attr "type" "call") 25346 [(eq_attr "type" "!branch,call") (nil) (nil) 25347 (eq_attr "type" "!branch,call") (nil) (nil)]) 25348 25349 25350 File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 25351 25352 16.19.8 Specifying processor pipeline description 25353 ------------------------------------------------- 25354 25355 To achieve better performance, most modern processors (super-pipelined, 25356 superscalar RISC, and VLIW processors) have many "functional units" on 25357 which several instructions can be executed simultaneously. An 25358 instruction starts execution if its issue conditions are satisfied. If 25359 not, the instruction is stalled until its conditions are satisfied. 25360 Such "interlock (pipeline) delay" causes interruption of the fetching of 25361 successor instructions (or demands nop instructions, e.g. for some MIPS 25362 processors). 25363 25364 There are two major kinds of interlock delays in modern processors. 25365 The first one is a data dependence delay determining "instruction 25366 latency time". The instruction execution is not started until all 25367 source data have been evaluated by prior instructions (there are more 25368 complex cases when the instruction execution starts even when the data 25369 are not available but will be ready in given time after the instruction 25370 execution start). Taking the data dependence delays into account is 25371 simple. The data dependence (true, output, and anti-dependence) delay 25372 between two instructions is given by a constant. In most cases this 25373 approach is adequate. The second kind of interlock delays is a 25374 reservation delay. The reservation delay means that two instructions 25375 under execution will be in need of shared processors resources, i.e. 25376 buses, internal registers, and/or functional units, which are reserved 25377 for some time. Taking this kind of delay into account is complex 25378 especially for modern RISC processors. 25379 25380 The task of exploiting more processor parallelism is solved by an 25381 instruction scheduler. For a better solution to this problem, the 25382 instruction scheduler has to have an adequate description of the 25383 processor parallelism (or "pipeline description"). GCC machine 25384 descriptions describe processor parallelism and functional unit 25385 reservations for groups of instructions with the aid of "regular 25386 expressions". 25387 25388 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 25389 figure out the possibility of the instruction issue by the processor on 25390 a given simulated processor cycle. The pipeline hazard recognizer is 25391 automatically generated from the processor pipeline description. The 25392 pipeline hazard recognizer generated from the machine description is 25393 based on a deterministic finite state automaton (DFA): the instruction 25394 issue is possible if there is a transition from one automaton state to 25395 another one. This algorithm is very fast, and furthermore, its speed is 25396 not dependent on processor complexity(1). 25397 25398 The rest of this section describes the directives that constitute an 25399 automaton-based processor pipeline description. The order of these 25400 constructions within the machine description file is not important. 25401 25402 The following optional construction describes names of automata 25403 generated and used for the pipeline hazards recognition. Sometimes the 25404 generated finite state automaton used by the pipeline hazard recognizer 25405 is large. If we use more than one automaton and bind functional units 25406 to the automata, the total size of the automata is usually less than the 25407 size of the single automaton. If there is no one such construction, 25408 only one finite state automaton is generated. 25409 25410 (define_automaton AUTOMATA-NAMES) 25411 25412 AUTOMATA-NAMES is a string giving names of the automata. The names are 25413 separated by commas. All the automata should have unique names. The 25414 automaton name is used in the constructions 'define_cpu_unit' and 25415 'define_query_cpu_unit'. 25416 25417 Each processor functional unit used in the description of instruction 25418 reservations should be described by the following construction. 25419 25420 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 25421 25422 UNIT-NAMES is a string giving the names of the functional units 25423 separated by commas. Don't use name 'nothing', it is reserved for other 25424 goals. 25425 25426 AUTOMATON-NAME is a string giving the name of the automaton with which 25427 the unit is bound. The automaton should be described in construction 25428 'define_automaton'. You should give "automaton-name", if there is a 25429 defined automaton. 25430 25431 The assignment of units to automata are constrained by the uses of the 25432 units in insn reservations. The most important constraint is: if a unit 25433 reservation is present on a particular cycle of an alternative for an 25434 insn reservation, then some unit from the same automaton must be present 25435 on the same cycle for the other alternatives of the insn reservation. 25436 The rest of the constraints are mentioned in the description of the 25437 subsequent constructions. 25438 25439 The following construction describes CPU functional units analogously 25440 to 'define_cpu_unit'. The reservation of such units can be queried for 25441 an automaton state. The instruction scheduler never queries reservation 25442 of functional units for given automaton state. So as a rule, you don't 25443 need this construction. This construction could be used for future code 25444 generation goals (e.g. to generate VLIW insn templates). 25445 25446 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 25447 25448 UNIT-NAMES is a string giving names of the functional units separated 25449 by commas. 25450 25451 AUTOMATON-NAME is a string giving the name of the automaton with which 25452 the unit is bound. 25453 25454 The following construction is the major one to describe pipeline 25455 characteristics of an instruction. 25456 25457 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 25458 CONDITION REGEXP) 25459 25460 DEFAULT_LATENCY is a number giving latency time of the instruction. 25461 There is an important difference between the old description and the 25462 automaton based pipeline description. The latency time is used for all 25463 dependencies when we use the old description. In the automaton based 25464 pipeline description, the given latency time is only used for true 25465 dependencies. The cost of anti-dependencies is always zero and the cost 25466 of output dependencies is the difference between latency times of the 25467 producing and consuming insns (if the difference is negative, the cost 25468 is considered to be zero). You can always change the default costs for 25469 any description by using the target hook 'TARGET_SCHED_ADJUST_COST' 25470 (*note Scheduling::). 25471 25472 INSN-NAME is a string giving the internal name of the insn. The 25473 internal names are used in constructions 'define_bypass' and in the 25474 automaton description file generated for debugging. The internal name 25475 has nothing in common with the names in 'define_insn'. It is a good 25476 practice to use insn classes described in the processor manual. 25477 25478 CONDITION defines what RTL insns are described by this construction. 25479 You should remember that you will be in trouble if CONDITION for two or 25480 more different 'define_insn_reservation' constructions is TRUE for an 25481 insn. In this case what reservation will be used for the insn is not 25482 defined. Such cases are not checked during generation of the pipeline 25483 hazards recognizer because in general recognizing that two conditions 25484 may have the same value is quite difficult (especially if the conditions 25485 contain 'symbol_ref'). It is also not checked during the pipeline 25486 hazard recognizer work because it would slow down the recognizer 25487 considerably. 25488 25489 REGEXP is a string describing the reservation of the cpu's functional 25490 units by the instruction. The reservations are described by a regular 25491 expression according to the following syntax: 25492 25493 regexp = regexp "," oneof 25494 | oneof 25495 25496 oneof = oneof "|" allof 25497 | allof 25498 25499 allof = allof "+" repeat 25500 | repeat 25501 25502 repeat = element "*" number 25503 | element 25504 25505 element = cpu_function_unit_name 25506 | reservation_name 25507 | result_name 25508 | "nothing" 25509 | "(" regexp ")" 25510 25511 * ',' is used for describing the start of the next cycle in the 25512 reservation. 25513 25514 * '|' is used for describing a reservation described by the first 25515 regular expression *or* a reservation described by the second 25516 regular expression *or* etc. 25517 25518 * '+' is used for describing a reservation described by the first 25519 regular expression *and* a reservation described by the second 25520 regular expression *and* etc. 25521 25522 * '*' is used for convenience and simply means a sequence in which 25523 the regular expression are repeated NUMBER times with cycle 25524 advancing (see ','). 25525 25526 * 'cpu_function_unit_name' denotes reservation of the named 25527 functional unit. 25528 25529 * 'reservation_name' -- see description of construction 25530 'define_reservation'. 25531 25532 * 'nothing' denotes no unit reservations. 25533 25534 Sometimes unit reservations for different insns contain common parts. 25535 In such case, you can simplify the pipeline description by describing 25536 the common part by the following construction 25537 25538 (define_reservation RESERVATION-NAME REGEXP) 25539 25540 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 25541 names and reservation names are in the same name space. So the 25542 reservation names should be different from the functional unit names and 25543 can not be the reserved name 'nothing'. 25544 25545 The following construction is used to describe exceptions in the 25546 latency time for given instruction pair. This is so called bypasses. 25547 25548 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 25549 [GUARD]) 25550 25551 NUMBER defines when the result generated by the instructions given in 25552 string OUT_INSN_NAMES will be ready for the instructions given in string 25553 IN_INSN_NAMES. Each of these strings is a comma-separated list of 25554 filename-style globs and they refer to the names of 25555 'define_insn_reservation's. For example: 25556 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*") 25557 defines a bypass between instructions that start with 'cpu1_load_' or 25558 'cpu1_store_' and those that start with 'cpu1_load_'. 25559 25560 GUARD is an optional string giving the name of a C function which 25561 defines an additional guard for the bypass. The function will get the 25562 two insns as parameters. If the function returns zero the bypass will 25563 be ignored for this case. The additional guard is necessary to 25564 recognize complicated bypasses, e.g. when the consumer is only an 25565 address of insn 'store' (not a stored value). 25566 25567 If there are more one bypass with the same output and input insns, the 25568 chosen bypass is the first bypass with a guard in description whose 25569 guard function returns nonzero. If there is no such bypass, then bypass 25570 without the guard function is chosen. 25571 25572 The following five constructions are usually used to describe VLIW 25573 processors, or more precisely, to describe a placement of small 25574 instructions into VLIW instruction slots. They can be used for RISC 25575 processors, too. 25576 25577 (exclusion_set UNIT-NAMES UNIT-NAMES) 25578 (presence_set UNIT-NAMES PATTERNS) 25579 (final_presence_set UNIT-NAMES PATTERNS) 25580 (absence_set UNIT-NAMES PATTERNS) 25581 (final_absence_set UNIT-NAMES PATTERNS) 25582 25583 UNIT-NAMES is a string giving names of functional units separated by 25584 commas. 25585 25586 PATTERNS is a string giving patterns of functional units separated by 25587 comma. Currently pattern is one unit or units separated by 25588 white-spaces. 25589 25590 The first construction ('exclusion_set') means that each functional 25591 unit in the first string can not be reserved simultaneously with a unit 25592 whose name is in the second string and vice versa. For example, the 25593 construction is useful for describing processors (e.g. some SPARC 25594 processors) with a fully pipelined floating point functional unit which 25595 can execute simultaneously only single floating point insns or only 25596 double floating point insns. 25597 25598 The second construction ('presence_set') means that each functional 25599 unit in the first string can not be reserved unless at least one of 25600 pattern of units whose names are in the second string is reserved. This 25601 is an asymmetric relation. For example, it is useful for description 25602 that VLIW 'slot1' is reserved after 'slot0' reservation. We could 25603 describe it by the following construction 25604 25605 (presence_set "slot1" "slot0") 25606 25607 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation. 25608 In this case we could write 25609 25610 (presence_set "slot1" "slot0 b0") 25611 25612 The third construction ('final_presence_set') is analogous to 25613 'presence_set'. The difference between them is when checking is done. 25614 When an instruction is issued in given automaton state reflecting all 25615 current and planned unit reservations, the automaton state is changed. 25616 The first state is a source state, the second one is a result state. 25617 Checking for 'presence_set' is done on the source state reservation, 25618 checking for 'final_presence_set' is done on the result reservation. 25619 This construction is useful to describe a reservation which is actually 25620 two subsequent reservations. For example, if we use 25621 25622 (presence_set "slot1" "slot0") 25623 25624 the following insn will be never issued (because 'slot1' requires 25625 'slot0' which is absent in the source state). 25626 25627 (define_reservation "insn_and_nop" "slot0 + slot1") 25628 25629 but it can be issued if we use analogous 'final_presence_set'. 25630 25631 The forth construction ('absence_set') means that each functional unit 25632 in the first string can be reserved only if each pattern of units whose 25633 names are in the second string is not reserved. This is an asymmetric 25634 relation (actually 'exclusion_set' is analogous to this one but it is 25635 symmetric). For example it might be useful in a VLIW description to say 25636 that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have 25637 been reserved. This can be described as: 25638 25639 (absence_set "slot0" "slot1, slot2") 25640 25641 Or 'slot2' can not be reserved if 'slot0' and unit 'b0' are reserved or 25642 'slot1' and unit 'b1' are reserved. In this case we could write 25643 25644 (absence_set "slot2" "slot0 b0, slot1 b1") 25645 25646 All functional units mentioned in a set should belong to the same 25647 automaton. 25648 25649 The last construction ('final_absence_set') is analogous to 25650 'absence_set' but checking is done on the result (state) reservation. 25651 See comments for 'final_presence_set'. 25652 25653 You can control the generator of the pipeline hazard recognizer with 25654 the following construction. 25655 25656 (automata_option OPTIONS) 25657 25658 OPTIONS is a string giving options which affect the generated code. 25659 Currently there are the following options: 25660 25661 * "no-minimization" makes no minimization of the automaton. This is 25662 only worth to do when we are debugging the description and need to 25663 look more accurately at reservations of states. 25664 25665 * "time" means printing time statistics about the generation of 25666 automata. 25667 25668 * "stats" means printing statistics about the generated automata such 25669 as the number of DFA states, NDFA states and arcs. 25670 25671 * "v" means a generation of the file describing the result automata. 25672 The file has suffix '.dfa' and can be used for the description 25673 verification and debugging. 25674 25675 * "w" means a generation of warning instead of error for non-critical 25676 errors. 25677 25678 * "no-comb-vect" prevents the automaton generator from generating two 25679 data structures and comparing them for space efficiency. Using a 25680 comb vector to represent transitions may be better, but it can be 25681 very expensive to construct. This option is useful if the build 25682 process spends an unacceptably long time in genautomata. 25683 25684 * "ndfa" makes nondeterministic finite state automata. This affects 25685 the treatment of operator '|' in the regular expressions. The 25686 usual treatment of the operator is to try the first alternative 25687 and, if the reservation is not possible, the second alternative. 25688 The nondeterministic treatment means trying all alternatives, some 25689 of them may be rejected by reservations in the subsequent insns. 25690 25691 * "collapse-ndfa" modifies the behaviour of the generator when 25692 producing an automaton. An additional state transition to collapse 25693 a nondeterministic NDFA state to a deterministic DFA state is 25694 generated. It can be triggered by passing 'const0_rtx' to 25695 state_transition. In such an automaton, cycle advance transitions 25696 are available only for these collapsed states. This option is 25697 useful for ports that want to use the 'ndfa' option, but also want 25698 to use 'define_query_cpu_unit' to assign units to insns issued in a 25699 cycle. 25700 25701 * "progress" means output of a progress bar showing how many states 25702 were generated so far for automaton being processed. This is 25703 useful during debugging a DFA description. If you see too many 25704 generated states, you could interrupt the generator of the pipeline 25705 hazard recognizer and try to figure out a reason for generation of 25706 the huge automaton. 25707 25708 As an example, consider a superscalar RISC machine which can issue 25709 three insns (two integer insns and one floating point insn) on the cycle 25710 but can finish only two insns. To describe this, we define the 25711 following functional units. 25712 25713 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 25714 (define_cpu_unit "port0, port1") 25715 25716 All simple integer insns can be executed in any integer pipeline and 25717 their result is ready in two cycles. The simple integer insns are 25718 issued into the first pipeline unless it is reserved, otherwise they are 25719 issued into the second pipeline. Integer division and multiplication 25720 insns can be executed only in the second integer pipeline and their 25721 results are ready correspondingly in 8 and 4 cycles. The integer 25722 division is not pipelined, i.e. the subsequent integer division insn can 25723 not be issued until the current division insn finished. Floating point 25724 insns are fully pipelined and their results are ready in 3 cycles. 25725 Where the result of a floating point insn is used by an integer insn, an 25726 additional delay of one cycle is incurred. To describe all of this we 25727 could specify 25728 25729 (define_cpu_unit "div") 25730 25731 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 25732 "(i0_pipeline | i1_pipeline), (port0 | port1)") 25733 25734 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 25735 "i1_pipeline, nothing*2, (port0 | port1)") 25736 25737 (define_insn_reservation "div" 8 (eq_attr "type" "div") 25738 "i1_pipeline, div*7, div + (port0 | port1)") 25739 25740 (define_insn_reservation "float" 3 (eq_attr "type" "float") 25741 "f_pipeline, nothing, (port0 | port1)) 25742 25743 (define_bypass 4 "float" "simple,mult,div") 25744 25745 To simplify the description we could describe the following reservation 25746 25747 (define_reservation "finish" "port0|port1") 25748 25749 and use it in all 'define_insn_reservation' as in the following 25750 construction 25751 25752 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 25753 "(i0_pipeline | i1_pipeline), finish") 25754 25755 ---------- Footnotes ---------- 25756 25757 (1) However, the size of the automaton depends on processor 25758 complexity. To limit this effect, machine descriptions can split 25759 orthogonal parts of the machine description among several automata: but 25760 then, since each of these must be stepped independently, this does cause 25761 a small decrease in the algorithm's performance. 25762 25763 25764 File: gccint.info, Node: Conditional Execution, Next: Define Subst, Prev: Insn Attributes, Up: Machine Desc 25765 25766 16.20 Conditional Execution 25767 =========================== 25768 25769 A number of architectures provide for some form of conditional 25770 execution, or predication. The hallmark of this feature is the ability 25771 to nullify most of the instructions in the instruction set. When the 25772 instruction set is large and not entirely symmetric, it can be quite 25773 tedious to describe these forms directly in the '.md' file. An 25774 alternative is the 'define_cond_exec' template. 25775 25776 (define_cond_exec 25777 [PREDICATE-PATTERN] 25778 "CONDITION" 25779 "OUTPUT-TEMPLATE") 25780 25781 PREDICATE-PATTERN is the condition that must be true for the insn to be 25782 executed at runtime and should match a relational operator. One can use 25783 'match_operator' to match several relational operators at once. Any 25784 'match_operand' operands must have no more than one alternative. 25785 25786 CONDITION is a C expression that must be true for the generated pattern 25787 to match. 25788 25789 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output 25790 template (*note Output Template::), except that the '*' and '@' special 25791 cases do not apply. This is only useful if the assembly text for the 25792 predicate is a simple prefix to the main insn. In order to handle the 25793 general case, there is a global variable 'current_insn_predicate' that 25794 will contain the entire predicate if the current insn is predicated, and 25795 will otherwise be 'NULL'. 25796 25797 When 'define_cond_exec' is used, an implicit reference to the 25798 'predicable' instruction attribute is made. *Note Insn Attributes::. 25799 This attribute must be a boolean (i.e. have exactly two elements in its 25800 LIST-OF-VALUES), with the possible values being 'no' and 'yes'. The 25801 default and all uses in the insns must be a simple constant, not a 25802 complex expressions. It may, however, depend on the alternative, by 25803 using a comma-separated list of values. If that is the case, the port 25804 should also define an 'enabled' attribute (*note Disable Insn 25805 Alternatives::), which should also allow only 'no' and 'yes' as its 25806 values. 25807 25808 For each 'define_insn' for which the 'predicable' attribute is true, a 25809 new 'define_insn' pattern will be generated that matches a predicated 25810 version of the instruction. For example, 25811 25812 (define_insn "addsi" 25813 [(set (match_operand:SI 0 "register_operand" "r") 25814 (plus:SI (match_operand:SI 1 "register_operand" "r") 25815 (match_operand:SI 2 "register_operand" "r")))] 25816 "TEST1" 25817 "add %2,%1,%0") 25818 25819 (define_cond_exec 25820 [(ne (match_operand:CC 0 "register_operand" "c") 25821 (const_int 0))] 25822 "TEST2" 25823 "(%0)") 25824 25825 generates a new pattern 25826 25827 (define_insn "" 25828 [(cond_exec 25829 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 25830 (set (match_operand:SI 0 "register_operand" "r") 25831 (plus:SI (match_operand:SI 1 "register_operand" "r") 25832 (match_operand:SI 2 "register_operand" "r"))))] 25833 "(TEST2) && (TEST1)" 25834 "(%3) add %2,%1,%0") 25835 25836 25837 File: gccint.info, Node: Define Subst, Next: Constant Definitions, Prev: Conditional Execution, Up: Machine Desc 25838 25839 16.21 RTL Templates Transformations 25840 =================================== 25841 25842 For some hardware architectures there are common cases when the RTL 25843 templates for the instructions can be derived from the other RTL 25844 templates using simple transformations. E.g., 'i386.md' contains an RTL 25845 template for the ordinary 'sub' instruction-- '*subsi_1', and for the 25846 'sub' instruction with subsequent zero-extension--'*subsi_1_zext'. Such 25847 cases can be easily implemented by a single meta-template capable of 25848 generating a modified case based on the initial one: 25849 25850 (define_subst "NAME" 25851 [INPUT-TEMPLATE] 25852 "CONDITION" 25853 [OUTPUT-TEMPLATE]) 25854 INPUT-TEMPLATE is a pattern describing the source RTL template, which 25855 will be transformed. 25856 25857 CONDITION is a C expression that is conjunct with the condition from 25858 the input-template to generate a condition to be used in the 25859 output-template. 25860 25861 OUTPUT-TEMPLATE is a pattern that will be used in the resulting 25862 template. 25863 25864 'define_subst' mechanism is tightly coupled with the notion of the 25865 subst attribute (*note Subst Iterators::). The use of 'define_subst' is 25866 triggered by a reference to a subst attribute in the transforming RTL 25867 template. This reference initiates duplication of the source RTL 25868 template and substitution of the attributes with their values. The 25869 source RTL template is left unchanged, while the copy is transformed by 25870 'define_subst'. This transformation can fail in the case when the 25871 source RTL template is not matched against the input-template of the 25872 'define_subst'. In such case the copy is deleted. 25873 25874 'define_subst' can be used only in 'define_insn' and 'define_expand', 25875 it cannot be used in other expressions (e.g. in 25876 'define_insn_and_split'). 25877 25878 * Menu: 25879 25880 * Define Subst Example:: Example of 'define_subst' work. 25881 * Define Subst Pattern Matching:: Process of template comparison. 25882 * Define Subst Output Template:: Generation of output template. 25883 25884 25885 File: gccint.info, Node: Define Subst Example, Next: Define Subst Pattern Matching, Up: Define Subst 25886 25887 16.21.1 'define_subst' Example 25888 ------------------------------ 25889 25890 To illustrate how 'define_subst' works, let us examine a simple template 25891 transformation. 25892 25893 Suppose there are two kinds of instructions: one that touches flags and 25894 the other that does not. The instructions of the second type could be 25895 generated with the following 'define_subst': 25896 25897 (define_subst "add_clobber_subst" 25898 [(set (match_operand:SI 0 "" "") 25899 (match_operand:SI 1 "" ""))] 25900 "" 25901 [(set (match_dup 0) 25902 (match_dup 1)) 25903 (clobber (reg:CC FLAGS_REG))] 25904 25905 This 'define_subst' can be applied to any RTL pattern containing 'set' 25906 of mode SI and generates a copy with clobber when it is applied. 25907 25908 Assume there is an RTL template for a 'max' instruction to be used in 25909 'define_subst' mentioned above: 25910 25911 (define_insn "maxsi" 25912 [(set (match_operand:SI 0 "register_operand" "=r") 25913 (max:SI 25914 (match_operand:SI 1 "register_operand" "r") 25915 (match_operand:SI 2 "register_operand" "r")))] 25916 "" 25917 "max\t{%2, %1, %0|%0, %1, %2}" 25918 [...]) 25919 25920 To mark the RTL template for 'define_subst' application, 25921 subst-attributes are used. They should be declared in advance: 25922 25923 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber") 25924 25925 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is 25926 the name of the corresponding 'define_subst', the third argument 25927 ('_noclobber') is the attribute value that would be substituted into the 25928 unchanged version of the source RTL template, and the last argument 25929 ('_clobber') is the value that would be substituted into the second, 25930 transformed, version of the RTL template. 25931 25932 Once the subst-attribute has been defined, it should be used in RTL 25933 templates which need to be processed by the 'define_subst'. So, the 25934 original RTL template should be changed: 25935 25936 (define_insn "maxsi<add_clobber_name>" 25937 [(set (match_operand:SI 0 "register_operand" "=r") 25938 (max:SI 25939 (match_operand:SI 1 "register_operand" "r") 25940 (match_operand:SI 2 "register_operand" "r")))] 25941 "" 25942 "max\t{%2, %1, %0|%0, %1, %2}" 25943 [...]) 25944 25945 The result of the 'define_subst' usage would look like the following: 25946 25947 (define_insn "maxsi_noclobber" 25948 [(set (match_operand:SI 0 "register_operand" "=r") 25949 (max:SI 25950 (match_operand:SI 1 "register_operand" "r") 25951 (match_operand:SI 2 "register_operand" "r")))] 25952 "" 25953 "max\t{%2, %1, %0|%0, %1, %2}" 25954 [...]) 25955 (define_insn "maxsi_clobber" 25956 [(set (match_operand:SI 0 "register_operand" "=r") 25957 (max:SI 25958 (match_operand:SI 1 "register_operand" "r") 25959 (match_operand:SI 2 "register_operand" "r"))) 25960 (clobber (reg:CC FLAGS_REG))] 25961 "" 25962 "max\t{%2, %1, %0|%0, %1, %2}" 25963 [...]) 25964 25965 25966 File: gccint.info, Node: Define Subst Pattern Matching, Next: Define Subst Output Template, Prev: Define Subst Example, Up: Define Subst 25967 25968 16.21.2 Pattern Matching in 'define_subst' 25969 ------------------------------------------ 25970 25971 All expressions, allowed in 'define_insn' or 'define_expand', are 25972 allowed in the input-template of 'define_subst', except 'match_par_dup', 25973 'match_scratch', 'match_parallel'. The meanings of expressions in the 25974 input-template were changed: 25975 25976 'match_operand' matches any expression (possibly, a subtree in 25977 RTL-template), if modes of the 'match_operand' and this expression are 25978 the same, or mode of the 'match_operand' is 'VOIDmode', or this 25979 expression is 'match_dup', 'match_op_dup'. If the expression is 25980 'match_operand' too, and predicate of 'match_operand' from the input 25981 pattern is not empty, then the predicates are compared. That can be 25982 used for more accurate filtering of accepted RTL-templates. 25983 25984 'match_operator' matches common operators (like 'plus', 'minus'), 25985 'unspec', 'unspec_volatile' operators and 'match_operator's from the 25986 original pattern if the modes match and 'match_operator' from the input 25987 pattern has the same number of operands as the operator from the 25988 original pattern. 25989 25990 25991 File: gccint.info, Node: Define Subst Output Template, Prev: Define Subst Pattern Matching, Up: Define Subst 25992 25993 16.21.3 Generation of output template in 'define_subst' 25994 ------------------------------------------------------- 25995 25996 If all necessary checks for 'define_subst' application pass, a new 25997 RTL-pattern, based on the output-template, is created to replace the old 25998 template. Like in input-patterns, meanings of some RTL expressions are 25999 changed when they are used in output-patterns of a 'define_subst'. 26000 Thus, 'match_dup' is used for copying the whole expression from the 26001 original pattern, which matched corresponding 'match_operand' from the 26002 input pattern. 26003 26004 'match_dup N' is used in the output template to be replaced with the 26005 expression from the original pattern, which matched 'match_operand N' 26006 from the input pattern. As a consequence, 'match_dup' cannot be used to 26007 point to 'match_operand's from the output pattern, it should always 26008 refer to a 'match_operand' from the input pattern. 26009 26010 In the output template one can refer to the expressions from the 26011 original pattern and create new ones. For instance, some operands could 26012 be added by means of standard 'match_operand'. 26013 26014 After replacing 'match_dup' with some RTL-subtree from the original 26015 pattern, it could happen that several 'match_operand's in the output 26016 pattern have the same indexes. It is unknown, how many and what indexes 26017 would be used in the expression which would replace 'match_dup', so such 26018 conflicts in indexes are inevitable. To overcome this issue, 26019 'match_operands' and 'match_operators', which were introduced into the 26020 output pattern, are renumerated when all 'match_dup's are replaced. 26021 26022 Number of alternatives in 'match_operand's introduced into the output 26023 template 'M' could differ from the number of alternatives in the 26024 original pattern 'N', so in the resultant pattern there would be 'N*M' 26025 alternatives. Thus, constraints from the original pattern would be 26026 duplicated 'N' times, constraints from the output pattern would be 26027 duplicated 'M' times, producing all possible combinations. 26028 26029 26030 File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Define Subst, Up: Machine Desc 26031 26032 16.22 Constant Definitions 26033 ========================== 26034 26035 Using literal constants inside instruction patterns reduces legibility 26036 and can be a maintenance problem. 26037 26038 To overcome this problem, you may use the 'define_constants' 26039 expression. It contains a vector of name-value pairs. From that point 26040 on, wherever any of the names appears in the MD file, it is as if the 26041 corresponding value had been written instead. You may use 26042 'define_constants' multiple times; each appearance adds more constants 26043 to the table. It is an error to redefine a constant with a different 26044 value. 26045 26046 To come back to the a29k load multiple example, instead of 26047 26048 (define_insn "" 26049 [(match_parallel 0 "load_multiple_operation" 26050 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26051 (match_operand:SI 2 "memory_operand" "m")) 26052 (use (reg:SI 179)) 26053 (clobber (reg:SI 179))])] 26054 "" 26055 "loadm 0,0,%1,%2") 26056 26057 You could write: 26058 26059 (define_constants [ 26060 (R_BP 177) 26061 (R_FC 178) 26062 (R_CR 179) 26063 (R_Q 180) 26064 ]) 26065 26066 (define_insn "" 26067 [(match_parallel 0 "load_multiple_operation" 26068 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26069 (match_operand:SI 2 "memory_operand" "m")) 26070 (use (reg:SI R_CR)) 26071 (clobber (reg:SI R_CR))])] 26072 "" 26073 "loadm 0,0,%1,%2") 26074 26075 The constants that are defined with a define_constant are also output 26076 in the insn-codes.h header file as #defines. 26077 26078 You can also use the machine description file to define enumerations. 26079 Like the constants defined by 'define_constant', these enumerations are 26080 visible to both the machine description file and the main C code. 26081 26082 The syntax is as follows: 26083 26084 (define_c_enum "NAME" [ 26085 VALUE0 26086 VALUE1 26087 ... 26088 VALUEN 26089 ]) 26090 26091 This definition causes the equivalent of the following C code to appear 26092 in 'insn-constants.h': 26093 26094 enum NAME { 26095 VALUE0 = 0, 26096 VALUE1 = 1, 26097 ... 26098 VALUEN = N 26099 }; 26100 #define NUM_CNAME_VALUES (N + 1) 26101 26102 where CNAME is the capitalized form of NAME. It also makes each VALUEI 26103 available in the machine description file, just as if it had been 26104 declared with: 26105 26106 (define_constants [(VALUEI I)]) 26107 26108 Each VALUEI is usually an upper-case identifier and usually begins with 26109 CNAME. 26110 26111 You can split the enumeration definition into as many statements as you 26112 like. The above example is directly equivalent to: 26113 26114 (define_c_enum "NAME" [VALUE0]) 26115 (define_c_enum "NAME" [VALUE1]) 26116 ... 26117 (define_c_enum "NAME" [VALUEN]) 26118 26119 Splitting the enumeration helps to improve the modularity of each 26120 individual '.md' file. For example, if a port defines its 26121 synchronization instructions in a separate 'sync.md' file, it is 26122 convenient to define all synchronization-specific enumeration values in 26123 'sync.md' rather than in the main '.md' file. 26124 26125 Some enumeration names have special significance to GCC: 26126 26127 'unspecv' 26128 If an enumeration called 'unspecv' is defined, GCC will use it when 26129 printing out 'unspec_volatile' expressions. For example: 26130 26131 (define_c_enum "unspecv" [ 26132 UNSPECV_BLOCKAGE 26133 ]) 26134 26135 causes GCC to print '(unspec_volatile ... 0)' as: 26136 26137 (unspec_volatile ... UNSPECV_BLOCKAGE) 26138 26139 'unspec' 26140 If an enumeration called 'unspec' is defined, GCC will use it when 26141 printing out 'unspec' expressions. GCC will also use it when 26142 printing out 'unspec_volatile' expressions unless an 'unspecv' 26143 enumeration is also defined. You can therefore decide whether to 26144 keep separate enumerations for volatile and non-volatile 26145 expressions or whether to use the same enumeration for both. 26146 26147 Another way of defining an enumeration is to use 'define_enum': 26148 26149 (define_enum "NAME" [ 26150 VALUE0 26151 VALUE1 26152 ... 26153 VALUEN 26154 ]) 26155 26156 This directive implies: 26157 26158 (define_c_enum "NAME" [ 26159 CNAME_CVALUE0 26160 CNAME_CVALUE1 26161 ... 26162 CNAME_CVALUEN 26163 ]) 26164 26165 where CVALUEI is the capitalized form of VALUEI. However, unlike 26166 'define_c_enum', the enumerations defined by 'define_enum' can be used 26167 in attribute specifications (*note define_enum_attr::). 26168 26169 26170 File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 26171 26172 16.23 Iterators 26173 =============== 26174 26175 Ports often need to define similar patterns for more than one machine 26176 mode or for more than one rtx code. GCC provides some simple iterator 26177 facilities to make this process easier. 26178 26179 * Menu: 26180 26181 * Mode Iterators:: Generating variations of patterns for different modes. 26182 * Code Iterators:: Doing the same for codes. 26183 * Int Iterators:: Doing the same for integers. 26184 * Subst Iterators:: Generating variations of patterns for define_subst. 26185 26186 26187 File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 26188 26189 16.23.1 Mode Iterators 26190 ---------------------- 26191 26192 Ports often need to define similar patterns for two or more different 26193 modes. For example: 26194 26195 * If a processor has hardware support for both single and double 26196 floating-point arithmetic, the 'SFmode' patterns tend to be very 26197 similar to the 'DFmode' ones. 26198 26199 * If a port uses 'SImode' pointers in one configuration and 'DImode' 26200 pointers in another, it will usually have very similar 'SImode' and 26201 'DImode' patterns for manipulating pointers. 26202 26203 Mode iterators allow several patterns to be instantiated from one '.md' 26204 file template. They can be used with any type of rtx-based construct, 26205 such as a 'define_insn', 'define_split', or 'define_peephole2'. 26206 26207 * Menu: 26208 26209 * Defining Mode Iterators:: Defining a new mode iterator. 26210 * Substitutions:: Combining mode iterators with substitutions 26211 * Examples:: Examples 26212 26213 26214 File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 26215 26216 16.23.1.1 Defining Mode Iterators 26217 ................................. 26218 26219 The syntax for defining a mode iterator is: 26220 26221 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 26222 26223 This allows subsequent '.md' file constructs to use the mode suffix 26224 ':NAME'. Every construct that does so will be expanded N times, once 26225 with every use of ':NAME' replaced by ':MODE1', once with every use 26226 replaced by ':MODE2', and so on. In the expansion for a particular 26227 MODEI, every C condition will also require that CONDI be true. 26228 26229 For example: 26230 26231 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 26232 26233 defines a new mode suffix ':P'. Every construct that uses ':P' will be 26234 expanded twice, once with every ':P' replaced by ':SI' and once with 26235 every ':P' replaced by ':DI'. The ':SI' version will only apply if 26236 'Pmode == SImode' and the ':DI' version will only apply if 'Pmode == 26237 DImode'. 26238 26239 As with other '.md' conditions, an empty string is treated as "always 26240 true". '(MODE "")' can also be abbreviated to 'MODE'. For example: 26241 26242 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 26243 26244 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that 26245 the ':SI' expansion has no such constraint. 26246 26247 Iterators are applied in the order they are defined. This can be 26248 significant if two iterators are used in a construct that requires 26249 substitutions. *Note Substitutions::. 26250 26251 26252 File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 26253 26254 16.23.1.2 Substitution in Mode Iterators 26255 ........................................ 26256 26257 If an '.md' file construct uses mode iterators, each version of the 26258 construct will often need slightly different strings or modes. For 26259 example: 26260 26261 * When a 'define_expand' defines several 'addM3' patterns (*note 26262 Standard Names::), each expander will need to use the appropriate 26263 mode name for M. 26264 26265 * When a 'define_insn' defines several instruction patterns, each 26266 instruction will often use a different assembler mnemonic. 26267 26268 * When a 'define_insn' requires operands with different modes, using 26269 an iterator for one of the operand modes usually requires a 26270 specific mode for the other operand(s). 26271 26272 GCC supports such variations through a system of "mode attributes". 26273 There are two standard attributes: 'mode', which is the name of the mode 26274 in lower case, and 'MODE', which is the same thing in upper case. You 26275 can define other attributes using: 26276 26277 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 26278 26279 where NAME is the name of the attribute and VALUEI is the value 26280 associated with MODEI. 26281 26282 When GCC replaces some :ITERATOR with :MODE, it will scan each string 26283 and mode in the pattern for sequences of the form '<ITERATOR:ATTR>', 26284 where ATTR is the name of a mode attribute. If the attribute is defined 26285 for MODE, the whole '<...>' sequence will be replaced by the appropriate 26286 attribute value. 26287 26288 For example, suppose an '.md' file has: 26289 26290 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 26291 (define_mode_attr load [(SI "lw") (DI "ld")]) 26292 26293 If one of the patterns that uses ':P' contains the string 26294 '"<P:load>\t%0,%1"', the 'SI' version of that pattern will use 26295 '"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'. 26296 26297 Here is an example of using an attribute for a mode: 26298 26299 (define_mode_iterator LONG [SI DI]) 26300 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 26301 (define_insn ... 26302 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 26303 26304 The 'ITERATOR:' prefix may be omitted, in which case the substitution 26305 will be attempted for every iterator expansion. 26306 26307 26308 File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 26309 26310 16.23.1.3 Mode Iterator Examples 26311 ................................ 26312 26313 Here is an example from the MIPS port. It defines the following modes 26314 and attributes (among others): 26315 26316 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 26317 (define_mode_attr d [(SI "") (DI "d")]) 26318 26319 and uses the following template to define both 'subsi3' and 'subdi3': 26320 26321 (define_insn "sub<mode>3" 26322 [(set (match_operand:GPR 0 "register_operand" "=d") 26323 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 26324 (match_operand:GPR 2 "register_operand" "d")))] 26325 "" 26326 "<d>subu\t%0,%1,%2" 26327 [(set_attr "type" "arith") 26328 (set_attr "mode" "<MODE>")]) 26329 26330 This is exactly equivalent to: 26331 26332 (define_insn "subsi3" 26333 [(set (match_operand:SI 0 "register_operand" "=d") 26334 (minus:SI (match_operand:SI 1 "register_operand" "d") 26335 (match_operand:SI 2 "register_operand" "d")))] 26336 "" 26337 "subu\t%0,%1,%2" 26338 [(set_attr "type" "arith") 26339 (set_attr "mode" "SI")]) 26340 26341 (define_insn "subdi3" 26342 [(set (match_operand:DI 0 "register_operand" "=d") 26343 (minus:DI (match_operand:DI 1 "register_operand" "d") 26344 (match_operand:DI 2 "register_operand" "d")))] 26345 "" 26346 "dsubu\t%0,%1,%2" 26347 [(set_attr "type" "arith") 26348 (set_attr "mode" "DI")]) 26349 26350 26351 File: gccint.info, Node: Code Iterators, Next: Int Iterators, Prev: Mode Iterators, Up: Iterators 26352 26353 16.23.2 Code Iterators 26354 ---------------------- 26355 26356 Code iterators operate in a similar way to mode iterators. *Note Mode 26357 Iterators::. 26358 26359 The construct: 26360 26361 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 26362 26363 defines a pseudo rtx code NAME that can be instantiated as CODEI if 26364 condition CONDI is true. Each CODEI must have the same rtx format. 26365 *Note RTL Classes::. 26366 26367 As with mode iterators, each pattern that uses NAME will be expanded N 26368 times, once with all uses of NAME replaced by CODE1, once with all uses 26369 replaced by CODE2, and so on. *Note Defining Mode Iterators::. 26370 26371 It is possible to define attributes for codes as well as for modes. 26372 There are two standard code attributes: 'code', the name of the code in 26373 lower case, and 'CODE', the name of the code in upper case. Other 26374 attributes are defined using: 26375 26376 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 26377 26378 Here's an example of code iterators in action, taken from the MIPS 26379 port: 26380 26381 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 26382 eq ne gt ge lt le gtu geu ltu leu]) 26383 26384 (define_expand "b<code>" 26385 [(set (pc) 26386 (if_then_else (any_cond:CC (cc0) 26387 (const_int 0)) 26388 (label_ref (match_operand 0 "")) 26389 (pc)))] 26390 "" 26391 { 26392 gen_conditional_branch (operands, <CODE>); 26393 DONE; 26394 }) 26395 26396 This is equivalent to: 26397 26398 (define_expand "bunordered" 26399 [(set (pc) 26400 (if_then_else (unordered:CC (cc0) 26401 (const_int 0)) 26402 (label_ref (match_operand 0 "")) 26403 (pc)))] 26404 "" 26405 { 26406 gen_conditional_branch (operands, UNORDERED); 26407 DONE; 26408 }) 26409 26410 (define_expand "bordered" 26411 [(set (pc) 26412 (if_then_else (ordered:CC (cc0) 26413 (const_int 0)) 26414 (label_ref (match_operand 0 "")) 26415 (pc)))] 26416 "" 26417 { 26418 gen_conditional_branch (operands, ORDERED); 26419 DONE; 26420 }) 26421 26422 ... 26423 26424 26425 File: gccint.info, Node: Int Iterators, Next: Subst Iterators, Prev: Code Iterators, Up: Iterators 26426 26427 16.23.3 Int Iterators 26428 --------------------- 26429 26430 Int iterators operate in a similar way to code iterators. *Note Code 26431 Iterators::. 26432 26433 The construct: 26434 26435 (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")]) 26436 26437 defines a pseudo integer constant NAME that can be instantiated as INTI 26438 if condition CONDI is true. Each INT must have the same rtx format. 26439 *Note RTL Classes::. Int iterators can appear in only those rtx fields 26440 that have 'i' as the specifier. This means that each INT has to be a 26441 constant defined using define_constant or define_c_enum. 26442 26443 As with mode and code iterators, each pattern that uses NAME will be 26444 expanded N times, once with all uses of NAME replaced by INT1, once with 26445 all uses replaced by INT2, and so on. *Note Defining Mode Iterators::. 26446 26447 It is possible to define attributes for ints as well as for codes and 26448 modes. Attributes are defined using: 26449 26450 (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")]) 26451 26452 Here's an example of int iterators in action, taken from the ARM port: 26453 26454 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 26455 26456 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 26457 26458 (define_insn "neon_vq<absneg><mode>" 26459 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26460 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26461 (match_operand:SI 2 "immediate_operand" "i")] 26462 QABSNEG))] 26463 "TARGET_NEON" 26464 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26465 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26466 ) 26467 26468 26469 This is equivalent to: 26470 26471 (define_insn "neon_vqabs<mode>" 26472 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26473 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26474 (match_operand:SI 2 "immediate_operand" "i")] 26475 UNSPEC_VQABS))] 26476 "TARGET_NEON" 26477 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26478 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26479 ) 26480 26481 (define_insn "neon_vqneg<mode>" 26482 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26483 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26484 (match_operand:SI 2 "immediate_operand" "i")] 26485 UNSPEC_VQNEG))] 26486 "TARGET_NEON" 26487 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26488 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26489 ) 26490 26491 26492 26493 File: gccint.info, Node: Subst Iterators, Prev: Int Iterators, Up: Iterators 26494 26495 16.23.4 Subst Iterators 26496 ----------------------- 26497 26498 Subst iterators are special type of iterators with the following 26499 restrictions: they could not be declared explicitly, they always have 26500 only two values, and they do not have explicit dedicated name. 26501 Subst-iterators are triggered only when corresponding subst-attribute is 26502 used in RTL-pattern. 26503 26504 Subst iterators transform templates in the following way: the templates 26505 are duplicated, the subst-attributes in these templates are replaced 26506 with the corresponding values, and a new attribute is implicitly added 26507 to the given 'define_insn'/'define_expand'. The name of the added 26508 attribute matches the name of 'define_subst'. Such attributes are 26509 declared implicitly, and it is not allowed to have a 'define_attr' named 26510 as a 'define_subst'. 26511 26512 Each subst iterator is linked to a 'define_subst'. It is declared 26513 implicitly by the first appearance of the corresponding 26514 'define_subst_attr', and it is not allowed to define it explicitly. 26515 26516 Declarations of subst-attributes have the following syntax: 26517 26518 (define_subst_attr "NAME" 26519 "SUBST-NAME" 26520 "NO-SUBST-VALUE" 26521 "SUBST-APPLIED-VALUE") 26522 26523 NAME is a string with which the given subst-attribute could be referred 26524 to. 26525 26526 SUBST-NAME shows which 'define_subst' should be applied to an 26527 RTL-template if the given subst-attribute is present in the 26528 RTL-template. 26529 26530 NO-SUBST-VALUE is a value with which subst-attribute would be replaced 26531 in the first copy of the original RTL-template. 26532 26533 SUBST-APPLIED-VALUE is a value with which subst-attribute would be 26534 replaced in the second copy of the original RTL-template. 26535 26536 26537 File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 26538 26539 17 Target Description Macros and Functions 26540 ****************************************** 26541 26542 In addition to the file 'MACHINE.md', a machine description includes a C 26543 header file conventionally given the name 'MACHINE.h' and a C source 26544 file named 'MACHINE.c'. The header file defines numerous macros that 26545 convey the information about the target machine that does not fit into 26546 the scheme of the '.md' file. The file 'tm.h' should be a link to 26547 'MACHINE.h'. The header file 'config.h' includes 'tm.h' and most 26548 compiler source files include 'config.h'. The source file defines a 26549 variable 'targetm', which is a structure containing pointers to 26550 functions and data relating to the target machine. 'MACHINE.c' should 26551 also contain their definitions, if they are not defined elsewhere in 26552 GCC, and other functions called through the macros defined in the '.h' 26553 file. 26554 26555 * Menu: 26556 26557 * Target Structure:: The 'targetm' variable. 26558 * Driver:: Controlling how the driver runs the compilation passes. 26559 * Run-time Target:: Defining '-m' options like '-m68000' and '-m68020'. 26560 * Per-Function Data:: Defining data structures for per-function information. 26561 * Storage Layout:: Defining sizes and alignments of data. 26562 * Type Layout:: Defining sizes and properties of basic user data types. 26563 * Registers:: Naming and describing the hardware registers. 26564 * Register Classes:: Defining the classes of hardware registers. 26565 * Old Constraints:: The old way to define machine-specific constraints. 26566 * Stack and Calling:: Defining which way the stack grows and by how much. 26567 * Varargs:: Defining the varargs macros. 26568 * Trampolines:: Code set up at run time to enter a nested function. 26569 * Library Calls:: Controlling how library routines are implicitly called. 26570 * Addressing Modes:: Defining addressing modes valid for memory operands. 26571 * Anchored Addresses:: Defining how '-fsection-anchors' should work. 26572 * Condition Code:: Defining how insns update the condition code. 26573 * Costs:: Defining relative costs of different operations. 26574 * Scheduling:: Adjusting the behavior of the instruction scheduler. 26575 * Sections:: Dividing storage into text, data, and other sections. 26576 * PIC:: Macros for position independent code. 26577 * Assembler Format:: Defining how to write insns and pseudo-ops to output. 26578 * Debugging Info:: Defining the format of debugging output. 26579 * Floating Point:: Handling floating point for cross-compilers. 26580 * Mode Switching:: Insertion of mode-switching instructions. 26581 * Target Attributes:: Defining target-specific uses of '__attribute__'. 26582 * Emulated TLS:: Emulated TLS support. 26583 * MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 26584 * PCH Target:: Validity checking for precompiled headers. 26585 * C++ ABI:: Controlling C++ ABI changes. 26586 * Named Address Spaces:: Adding support for named address spaces 26587 * Misc:: Everything else. 26588 26589 26590 File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 26591 26592 17.1 The Global 'targetm' Variable 26593 ================================== 26594 26595 -- Variable: struct gcc_target targetm 26596 The target '.c' file must define the global 'targetm' variable 26597 which contains pointers to functions and data relating to the 26598 target machine. The variable is declared in 'target.h'; 26599 'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used 26600 to initialize the variable, and macros for the default initializers 26601 for elements of the structure. The '.c' file should override those 26602 macros for which the default definition is inappropriate. For 26603 example: 26604 #include "target.h" 26605 #include "target-def.h" 26606 26607 /* Initialize the GCC target structure. */ 26608 26609 #undef TARGET_COMP_TYPE_ATTRIBUTES 26610 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 26611 26612 struct gcc_target targetm = TARGET_INITIALIZER; 26613 26614 Where a macro should be defined in the '.c' file in this manner to form 26615 part of the 'targetm' structure, it is documented below as a "Target 26616 Hook" with a prototype. Many macros will change in future from being 26617 defined in the '.h' file to being part of the 'targetm' structure. 26618 26619 Similarly, there is a 'targetcm' variable for hooks that are specific 26620 to front ends for C-family languages, documented as "C Target Hook". 26621 This is declared in 'c-family/c-target.h', the initializer 26622 'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'. If targets 26623 initialize 'targetcm' themselves, they should set 26624 'target_has_targetcm=yes' in 'config.gcc'; otherwise a default 26625 definition is used. 26626 26627 Similarly, there is a 'targetm_common' variable for hooks that are 26628 shared between the compiler driver and the compilers proper, documented 26629 as "Common Target Hook". This is declared in 'common/common-target.h', 26630 the initializer 'TARGETM_COMMON_INITIALIZER' in 26631 'common/common-target-def.h'. If targets initialize 'targetm_common' 26632 themselves, they should set 'target_has_targetm_common=yes' in 26633 'config.gcc'; otherwise a default definition is used. 26634 26635 26636 File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 26637 26638 17.2 Controlling the Compilation Driver, 'gcc' 26639 ============================================== 26640 26641 You can control the compilation driver. 26642 26643 -- Macro: DRIVER_SELF_SPECS 26644 A list of specs for the driver itself. It should be a suitable 26645 initializer for an array of strings, with no surrounding braces. 26646 26647 The driver applies these specs to its own command line between 26648 loading default 'specs' files (but not command-line specified ones) 26649 and choosing the multilib directory or running any subcommands. It 26650 applies them in the order given, so each spec can depend on the 26651 options added by earlier ones. It is also possible to remove 26652 options using '%<OPTION' in the usual way. 26653 26654 This macro can be useful when a port has several interdependent 26655 target options. It provides a way of standardizing the command 26656 line so that the other specs are easier to write. 26657 26658 Do not define this macro if it does not need to do anything. 26659 26660 -- Macro: OPTION_DEFAULT_SPECS 26661 A list of specs used to support configure-time default options 26662 (i.e. '--with' options) in the driver. It should be a suitable 26663 initializer for an array of structures, each containing two 26664 strings, without the outermost pair of surrounding braces. 26665 26666 The first item in the pair is the name of the default. This must 26667 match the code in 'config.gcc' for the target. The second item is 26668 a spec to apply if a default with this name was specified. The 26669 string '%(VALUE)' in the spec will be replaced by the value of the 26670 default everywhere it occurs. 26671 26672 The driver will apply these specs to its own command line between 26673 loading default 'specs' files and processing 'DRIVER_SELF_SPECS', 26674 using the same mechanism as 'DRIVER_SELF_SPECS'. 26675 26676 Do not define this macro if it does not need to do anything. 26677 26678 -- Macro: CPP_SPEC 26679 A C string constant that tells the GCC driver program options to 26680 pass to CPP. It can also specify how to translate options you give 26681 to GCC into options for GCC to pass to the CPP. 26682 26683 Do not define this macro if it does not need to do anything. 26684 26685 -- Macro: CPLUSPLUS_CPP_SPEC 26686 This macro is just like 'CPP_SPEC', but is used for C++, rather 26687 than C. If you do not define this macro, then the value of 26688 'CPP_SPEC' (if any) will be used instead. 26689 26690 -- Macro: CC1_SPEC 26691 A C string constant that tells the GCC driver program options to 26692 pass to 'cc1', 'cc1plus', 'f771', and the other language front 26693 ends. It can also specify how to translate options you give to GCC 26694 into options for GCC to pass to front ends. 26695 26696 Do not define this macro if it does not need to do anything. 26697 26698 -- Macro: CC1PLUS_SPEC 26699 A C string constant that tells the GCC driver program options to 26700 pass to 'cc1plus'. It can also specify how to translate options 26701 you give to GCC into options for GCC to pass to the 'cc1plus'. 26702 26703 Do not define this macro if it does not need to do anything. Note 26704 that everything defined in CC1_SPEC is already passed to 'cc1plus' 26705 so there is no need to duplicate the contents of CC1_SPEC in 26706 CC1PLUS_SPEC. 26707 26708 -- Macro: ASM_SPEC 26709 A C string constant that tells the GCC driver program options to 26710 pass to the assembler. It can also specify how to translate 26711 options you give to GCC into options for GCC to pass to the 26712 assembler. See the file 'sun3.h' for an example of this. 26713 26714 Do not define this macro if it does not need to do anything. 26715 26716 -- Macro: ASM_FINAL_SPEC 26717 A C string constant that tells the GCC driver program how to run 26718 any programs which cleanup after the normal assembler. Normally, 26719 this is not needed. See the file 'mips.h' for an example of this. 26720 26721 Do not define this macro if it does not need to do anything. 26722 26723 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 26724 Define this macro, with no value, if the driver should give the 26725 assembler an argument consisting of a single dash, '-', to instruct 26726 it to read from its standard input (which will be a pipe connected 26727 to the output of the compiler proper). This argument is given 26728 after any '-o' option specifying the name of the output file. 26729 26730 If you do not define this macro, the assembler is assumed to read 26731 its standard input if given no non-option arguments. If your 26732 assembler cannot read standard input at all, use a '%{pipe:%e}' 26733 construct; see 'mips.h' for instance. 26734 26735 -- Macro: LINK_SPEC 26736 A C string constant that tells the GCC driver program options to 26737 pass to the linker. It can also specify how to translate options 26738 you give to GCC into options for GCC to pass to the linker. 26739 26740 Do not define this macro if it does not need to do anything. 26741 26742 -- Macro: LIB_SPEC 26743 Another C string constant used much like 'LINK_SPEC'. The 26744 difference between the two is that 'LIB_SPEC' is used at the end of 26745 the command given to the linker. 26746 26747 If this macro is not defined, a default is provided that loads the 26748 standard C library from the usual place. See 'gcc.c'. 26749 26750 -- Macro: LIBGCC_SPEC 26751 Another C string constant that tells the GCC driver program how and 26752 when to place a reference to 'libgcc.a' into the linker command 26753 line. This constant is placed both before and after the value of 26754 'LIB_SPEC'. 26755 26756 If this macro is not defined, the GCC driver provides a default 26757 that passes the string '-lgcc' to the linker. 26758 26759 -- Macro: REAL_LIBGCC_SPEC 26760 By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC' 26761 is not directly used by the driver program but is instead modified 26762 to refer to different versions of 'libgcc.a' depending on the 26763 values of the command line flags '-static', '-shared', 26764 '-static-libgcc', and '-shared-libgcc'. On targets where these 26765 modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead. 26766 'REAL_LIBGCC_SPEC' tells the driver how to place a reference to 26767 'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is 26768 used unmodified. 26769 26770 -- Macro: USE_LD_AS_NEEDED 26771 A macro that controls the modifications to 'LIBGCC_SPEC' mentioned 26772 in 'REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 26773 uses -as-needed and the shared libgcc in place of the static 26774 exception handler library, when linking without any of '-static', 26775 '-static-libgcc', or '-shared-libgcc'. 26776 26777 -- Macro: LINK_EH_SPEC 26778 If defined, this C string constant is added to 'LINK_SPEC'. When 26779 'USE_LD_AS_NEEDED' is zero or undefined, it also affects the 26780 modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'. 26781 26782 -- Macro: STARTFILE_SPEC 26783 Another C string constant used much like 'LINK_SPEC'. The 26784 difference between the two is that 'STARTFILE_SPEC' is used at the 26785 very beginning of the command given to the linker. 26786 26787 If this macro is not defined, a default is provided that loads the 26788 standard C startup file from the usual place. See 'gcc.c'. 26789 26790 -- Macro: ENDFILE_SPEC 26791 Another C string constant used much like 'LINK_SPEC'. The 26792 difference between the two is that 'ENDFILE_SPEC' is used at the 26793 very end of the command given to the linker. 26794 26795 Do not define this macro if it does not need to do anything. 26796 26797 -- Macro: THREAD_MODEL_SPEC 26798 GCC '-v' will print the thread model GCC was configured to use. 26799 However, this doesn't work on platforms that are multilibbed on 26800 thread models, such as AIX 4.3. On such platforms, define 26801 'THREAD_MODEL_SPEC' such that it evaluates to a string without 26802 blanks that names one of the recognized thread models. '%*', the 26803 default value of this macro, will expand to the value of 26804 'thread_file' set in 'config.gcc'. 26805 26806 -- Macro: SYSROOT_SUFFIX_SPEC 26807 Define this macro to add a suffix to the target sysroot when GCC is 26808 configured with a sysroot. This will cause GCC to search for 26809 usr/lib, et al, within sysroot+suffix. 26810 26811 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 26812 Define this macro to add a headers_suffix to the target sysroot 26813 when GCC is configured with a sysroot. This will cause GCC to pass 26814 the updated sysroot+headers_suffix to CPP, causing it to search for 26815 usr/include, et al, within sysroot+headers_suffix. 26816 26817 -- Macro: EXTRA_SPECS 26818 Define this macro to provide additional specifications to put in 26819 the 'specs' file that can be used in various specifications like 26820 'CC1_SPEC'. 26821 26822 The definition should be an initializer for an array of structures, 26823 containing a string constant, that defines the specification name, 26824 and a string constant that provides the specification. 26825 26826 Do not define this macro if it does not need to do anything. 26827 26828 'EXTRA_SPECS' is useful when an architecture contains several 26829 related targets, which have various '..._SPECS' which are similar 26830 to each other, and the maintainer would like one central place to 26831 keep these definitions. 26832 26833 For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to 26834 define either '_CALL_SYSV' when the System V calling sequence is 26835 used or '_CALL_AIX' when the older AIX-based calling sequence is 26836 used. 26837 26838 The 'config/rs6000/rs6000.h' target file defines: 26839 26840 #define EXTRA_SPECS \ 26841 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 26842 26843 #define CPP_SYS_DEFAULT "" 26844 26845 The 'config/rs6000/sysv.h' target file defines: 26846 #undef CPP_SPEC 26847 #define CPP_SPEC \ 26848 "%{posix: -D_POSIX_SOURCE } \ 26849 %{mcall-sysv: -D_CALL_SYSV } \ 26850 %{!mcall-sysv: %(cpp_sysv_default) } \ 26851 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 26852 26853 #undef CPP_SYSV_DEFAULT 26854 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 26855 26856 while the 'config/rs6000/eabiaix.h' target file defines 26857 'CPP_SYSV_DEFAULT' as: 26858 26859 #undef CPP_SYSV_DEFAULT 26860 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 26861 26862 -- Macro: LINK_LIBGCC_SPECIAL_1 26863 Define this macro if the driver program should find the library 26864 'libgcc.a'. If you do not define this macro, the driver program 26865 will pass the argument '-lgcc' to tell the linker to do the search. 26866 26867 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 26868 The sequence in which libgcc and libc are specified to the linker. 26869 By default this is '%G %L %G'. 26870 26871 -- Macro: LINK_COMMAND_SPEC 26872 A C string constant giving the complete command line need to 26873 execute the linker. When you do this, you will need to update your 26874 port each time a change is made to the link command line within 26875 'gcc.c'. Therefore, define this macro only if you need to 26876 completely redefine the command line for invoking the linker and 26877 there is no other way to accomplish the effect you need. 26878 Overriding this macro may be avoidable by overriding 26879 'LINK_GCC_C_SEQUENCE_SPEC' instead. 26880 26881 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT 26882 True if '..' components should always be removed from directory 26883 names computed relative to GCC's internal directories, false 26884 (default) if such components should be preserved and directory 26885 names containing them passed to other tools such as the linker. 26886 26887 -- Macro: MULTILIB_DEFAULTS 26888 Define this macro as a C expression for the initializer of an array 26889 of string to tell the driver program which options are defaults for 26890 this target and thus do not need to be handled specially when using 26891 'MULTILIB_OPTIONS'. 26892 26893 Do not define this macro if 'MULTILIB_OPTIONS' is not defined in 26894 the target makefile fragment or if none of the options listed in 26895 'MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 26896 26897 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 26898 Define this macro to tell 'gcc' that it should only translate a 26899 '-B' prefix into a '-L' linker option if the prefix indicates an 26900 absolute file name. 26901 26902 -- Macro: MD_EXEC_PREFIX 26903 If defined, this macro is an additional prefix to try after 26904 'STANDARD_EXEC_PREFIX'. 'MD_EXEC_PREFIX' is not searched when the 26905 compiler is built as a cross compiler. If you define 26906 'MD_EXEC_PREFIX', then be sure to add it to the list of directories 26907 used to find the assembler in 'configure.in'. 26908 26909 -- Macro: STANDARD_STARTFILE_PREFIX 26910 Define this macro as a C string constant if you wish to override 26911 the standard choice of 'libdir' as the default prefix to try when 26912 searching for startup files such as 'crt0.o'. 26913 'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 26914 built as a cross compiler. 26915 26916 -- Macro: STANDARD_STARTFILE_PREFIX_1 26917 Define this macro as a C string constant if you wish to override 26918 the standard choice of '/lib' as a prefix to try after the default 26919 prefix when searching for startup files such as 'crt0.o'. 26920 'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 26921 built as a cross compiler. 26922 26923 -- Macro: STANDARD_STARTFILE_PREFIX_2 26924 Define this macro as a C string constant if you wish to override 26925 the standard choice of '/lib' as yet another prefix to try after 26926 the default prefix when searching for startup files such as 26927 'crt0.o'. 'STANDARD_STARTFILE_PREFIX_2' is not searched when the 26928 compiler is built as a cross compiler. 26929 26930 -- Macro: MD_STARTFILE_PREFIX 26931 If defined, this macro supplies an additional prefix to try after 26932 the standard prefixes. 'MD_EXEC_PREFIX' is not searched when the 26933 compiler is built as a cross compiler. 26934 26935 -- Macro: MD_STARTFILE_PREFIX_1 26936 If defined, this macro supplies yet another prefix to try after the 26937 standard prefixes. It is not searched when the compiler is built 26938 as a cross compiler. 26939 26940 -- Macro: INIT_ENVIRONMENT 26941 Define this macro as a C string constant if you wish to set 26942 environment variables for programs called by the driver, such as 26943 the assembler and loader. The driver passes the value of this 26944 macro to 'putenv' to initialize the necessary environment 26945 variables. 26946 26947 -- Macro: LOCAL_INCLUDE_DIR 26948 Define this macro as a C string constant if you wish to override 26949 the standard choice of '/usr/local/include' as the default prefix 26950 to try when searching for local header files. 'LOCAL_INCLUDE_DIR' 26951 comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc', 26952 normally '/usr/include') in the search order. 26953 26954 Cross compilers do not search either '/usr/local/include' or its 26955 replacement. 26956 26957 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT 26958 The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'. See 26959 'INCLUDE_DEFAULTS', below, for the description of components. If 26960 you do not define this macro, no component is used. 26961 26962 -- Macro: INCLUDE_DEFAULTS 26963 Define this macro if you wish to override the entire default search 26964 path for include files. For a native compiler, the default search 26965 path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR', 26966 'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'. In 26967 addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined 26968 automatically by 'Makefile', and specify private search areas for 26969 GCC. The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++ 26970 programs. 26971 26972 The definition should be an initializer for an array of structures. 26973 Each array element should have four elements: the directory name (a 26974 string constant), the component name (also a string constant), a 26975 flag for C++-only directories, and a flag showing that the includes 26976 in the directory don't need to be wrapped in 'extern 'C'' when 26977 compiling C++. Mark the end of the array with a null element. 26978 26979 The component name denotes what GNU package the include file is 26980 part of, if any, in all uppercase letters. For example, it might 26981 be 'GCC' or 'BINUTILS'. If the package is part of a 26982 vendor-supplied operating system, code the component name as '0'. 26983 26984 For example, here is the definition used for VAX/VMS: 26985 26986 #define INCLUDE_DEFAULTS \ 26987 { \ 26988 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 26989 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 26990 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 26991 { ".", 0, 0, 0}, \ 26992 { 0, 0, 0, 0} \ 26993 } 26994 26995 Here is the order of prefixes tried for exec files: 26996 26997 1. Any prefixes specified by the user with '-B'. 26998 26999 2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX' 27000 is not set and the compiler has not been installed in the 27001 configure-time PREFIX, the location in which the compiler has 27002 actually been installed. 27003 27004 3. The directories specified by the environment variable 27005 'COMPILER_PATH'. 27006 27007 4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been 27008 installed in the configured-time PREFIX. 27009 27010 5. The location '/usr/libexec/gcc/', but only if this is a native 27011 compiler. 27012 27013 6. The location '/usr/lib/gcc/', but only if this is a native 27014 compiler. 27015 27016 7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 27017 native compiler. 27018 27019 Here is the order of prefixes tried for startfiles: 27020 27021 1. Any prefixes specified by the user with '-B'. 27022 27023 2. The environment variable 'GCC_EXEC_PREFIX' or its automatically 27024 determined value based on the installed toolchain location. 27025 27026 3. The directories specified by the environment variable 27027 'LIBRARY_PATH' (or port-specific name; native only, cross compilers 27028 do not use this). 27029 27030 4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is 27031 installed in the configured PREFIX or this is a native compiler. 27032 27033 5. The location '/usr/lib/gcc/', but only if this is a native 27034 compiler. 27035 27036 6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 27037 native compiler. 27038 27039 7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a 27040 native compiler, or we have a target system root. 27041 27042 8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is 27043 a native compiler, or we have a target system root. 27044 27045 9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot 27046 modifications. If this path is relative it will be prefixed by 27047 'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX' 27048 and the machine suffix. 27049 27050 10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a 27051 native compiler, or we have a target system root. The default for 27052 this macro is '/lib/'. 27053 27054 11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a 27055 native compiler, or we have a target system root. The default for 27056 this macro is '/usr/lib/'. 27057 27058 27059 File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 27060 27061 17.3 Run-time Target Specification 27062 ================================== 27063 27064 Here are run-time target specifications. 27065 27066 -- Macro: TARGET_CPU_CPP_BUILTINS () 27067 This function-like macro expands to a block of code that defines 27068 built-in preprocessor macros and assertions for the target CPU, 27069 using the functions 'builtin_define', 'builtin_define_std' and 27070 'builtin_assert'. When the front end calls this macro it provides 27071 a trailing semicolon, and since it has finished command line option 27072 processing your code can use those results freely. 27073 27074 'builtin_assert' takes a string in the form you pass to the 27075 command-line option '-A', such as 'cpu=mips', and creates the 27076 assertion. 'builtin_define' takes a string in the form accepted by 27077 option '-D' and unconditionally defines the macro. 27078 27079 'builtin_define_std' takes a string representing the name of an 27080 object-like macro. If it doesn't lie in the user's namespace, 27081 'builtin_define_std' defines it unconditionally. Otherwise, it 27082 defines a version with two leading underscores, and another version 27083 with two leading and trailing underscores, and defines the original 27084 only if an ISO standard was not requested on the command line. For 27085 example, passing 'unix' defines '__unix', '__unix__' and possibly 27086 'unix'; passing '_mips' defines '__mips', '__mips__' and possibly 27087 '_mips', and passing '_ABI64' defines only '_ABI64'. 27088 27089 You can also test for the C dialect being compiled. The variable 27090 'c_language' is set to one of 'clk_c', 'clk_cplusplus' or 27091 'clk_objective_c'. Note that if we are preprocessing assembler, 27092 this variable will be 'clk_c' but the function-like macro 27093 'preprocessing_asm_p()' will return true, so you might want to 27094 check for that first. If you need to check for strict ANSI, the 27095 variable 'flag_iso' can be used. The function-like macro 27096 'preprocessing_trad_p()' can be used to check for traditional 27097 preprocessing. 27098 27099 -- Macro: TARGET_OS_CPP_BUILTINS () 27100 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 27101 and is used for the target operating system instead. 27102 27103 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 27104 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 27105 and is used for the target object format. 'elfos.h' uses this 27106 macro to define '__ELF__', so you probably do not need to define it 27107 yourself. 27108 27109 -- Variable: extern int target_flags 27110 This variable is declared in 'options.h', which is included before 27111 any target-specific headers. 27112 27113 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 27114 This variable specifies the initial value of 'target_flags'. Its 27115 default setting is 0. 27116 27117 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options 27118 *OPTS, struct gcc_options *OPTS_SET, const struct 27119 cl_decoded_option *DECODED, location_t LOC) 27120 This hook is called whenever the user specifies one of the 27121 target-specific options described by the '.opt' definition files 27122 (*note Options::). It has the opportunity to do some 27123 option-specific processing and should return true if the option is 27124 valid. The default definition does nothing but return true. 27125 27126 DECODED specifies the option and its arguments. OPTS and OPTS_SET 27127 are the 'gcc_options' structures to be used for storing option 27128 state, and LOC is the location at which the option was passed 27129 ('UNKNOWN_LOCATION' except for options passed via attributes). 27130 27131 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 27132 *ARG, int VALUE) 27133 This target hook is called whenever the user specifies one of the 27134 target-specific C language family options described by the '.opt' 27135 definition files(*note Options::). It has the opportunity to do 27136 some option-specific processing and should return true if the 27137 option is valid. The arguments are like for 27138 'TARGET_HANDLE_OPTION'. The default definition does nothing but 27139 return false. 27140 27141 In general, you should use 'TARGET_HANDLE_OPTION' to handle 27142 options. However, if processing an option requires routines that 27143 are only available in the C (and related language) front ends, then 27144 you should use 'TARGET_HANDLE_C_OPTION' instead. 27145 27146 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 27147 STRING) 27148 Targets may provide a string object type that can be used within 27149 and between C, C++ and their respective Objective-C dialects. A 27150 string object might, for example, embed encoding and length 27151 information. These objects are considered opaque to the compiler 27152 and handled as references. An ideal implementation makes the 27153 composition of the string object match that of the Objective-C 27154 'NSString' ('NXString' for GNUStep), allowing efficient 27155 interworking between C-only and Objective-C code. If a target 27156 implements string objects then this hook should return a reference 27157 to such an object constructed from the normal 'C' string 27158 representation provided in STRING. At present, the hook is used by 27159 Objective-C only, to obtain a common-format string object when the 27160 target provides one. 27161 27162 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE 27163 (const char *CLASSNAME) 27164 Declare that Objective C class CLASSNAME is referenced by the 27165 current TU. 27166 27167 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char 27168 *CLASSNAME) 27169 Declare that Objective C class CLASSNAME is defined by the current 27170 TU. 27171 27172 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 27173 STRINGREF) 27174 If a target implements string objects then this hook should return 27175 'true' if STRINGREF is a valid reference to such an object. 27176 27177 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 27178 FORMAT_ARG, tree ARGS_LIST) 27179 If a target implements string objects then this hook should should 27180 provide a facility to check the function arguments in ARGS_LIST 27181 against the format specifiers in FORMAT_ARG where the type of 27182 FORMAT_ARG is one recognized as a valid string reference type. 27183 27184 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 27185 This target function is similar to the hook 27186 'TARGET_OPTION_OVERRIDE' but is called when the optimize level is 27187 changed via an attribute or pragma or when it is reset at the end 27188 of the code affected by the attribute or pragma. It is not called 27189 at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is 27190 called so if you want to perform these actions then, you should 27191 have 'TARGET_OPTION_OVERRIDE' call 27192 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 27193 27194 -- Macro: C_COMMON_OVERRIDE_OPTIONS 27195 This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only 27196 used in the C language frontends (C, Objective-C, C++, 27197 Objective-C++) and so can be used to alter option flag variables 27198 which only exist in those frontends. 27199 27200 -- Common Target Hook: const struct default_options * 27201 TARGET_OPTION_OPTIMIZATION_TABLE 27202 Some machines may desire to change what optimizations are performed 27203 for various optimization levels. This variable, if defined, 27204 describes options to enable at particular sets of optimization 27205 levels. These options are processed once just after the 27206 optimization level is determined and before the remainder of the 27207 command options have been parsed, so may be overridden by other 27208 options passed explicitly. 27209 27210 This processing is run once at program startup and when the 27211 optimization options are changed via '#pragma GCC optimize' or by 27212 using the 'optimize' attribute. 27213 27214 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct 27215 gcc_options *OPTS) 27216 Set target-dependent initial values of fields in OPTS. 27217 27218 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void) 27219 Set target-dependent default values for '--param' settings, using 27220 calls to 'set_default_param_value'. 27221 27222 -- Macro: SWITCHABLE_TARGET 27223 Some targets need to switch between substantially different 27224 subtargets during compilation. For example, the MIPS target has 27225 one subtarget for the traditional MIPS architecture and another for 27226 MIPS16. Source code can switch between these two subarchitectures 27227 using the 'mips16' and 'nomips16' attributes. 27228 27229 Such subtargets can differ in things like the set of available 27230 registers, the set of available instructions, the costs of various 27231 operations, and so on. GCC caches a lot of this type of 27232 information in global variables, and recomputing them for each 27233 subtarget takes a significant amount of time. The compiler 27234 therefore provides a facility for maintaining several versions of 27235 the global variables and quickly switching between them; see 27236 'target-globals.h' for details. 27237 27238 Define this macro to 1 if your target needs this facility. The 27239 default is 0. 27240 27241 27242 File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 27243 27244 17.4 Defining data structures for per-function information. 27245 =========================================================== 27246 27247 If the target needs to store information on a per-function basis, GCC 27248 provides a macro and a couple of variables to allow this. Note, just 27249 using statics to store the information is a bad idea, since GCC supports 27250 nested functions, so you can be halfway through encoding one function 27251 when another one comes along. 27252 27253 GCC defines a data structure called 'struct function' which contains 27254 all of the data specific to an individual function. This structure 27255 contains a field called 'machine' whose type is 'struct machine_function 27256 *', which can be used by targets to point to their own specific data. 27257 27258 If a target needs per-function specific data it should define the type 27259 'struct machine_function' and also the macro 'INIT_EXPANDERS'. This 27260 macro should be used to initialize the function pointer 27261 'init_machine_status'. This pointer is explained below. 27262 27263 One typical use of per-function, target specific data is to create an 27264 RTX to hold the register containing the function's return address. This 27265 RTX can then be used to implement the '__builtin_return_address' 27266 function, for level 0. 27267 27268 Note--earlier implementations of GCC used a single data area to hold 27269 all of the per-function information. Thus when processing of a nested 27270 function began the old per-function data had to be pushed onto a stack, 27271 and when the processing was finished, it had to be popped off the stack. 27272 GCC used to provide function pointers called 'save_machine_status' and 27273 'restore_machine_status' to handle the saving and restoring of the 27274 target specific information. Since the single data area approach is no 27275 longer used, these pointers are no longer supported. 27276 27277 -- Macro: INIT_EXPANDERS 27278 Macro called to initialize any target specific information. This 27279 macro is called once per function, before generation of any RTL has 27280 begun. The intention of this macro is to allow the initialization 27281 of the function pointer 'init_machine_status'. 27282 27283 -- Variable: void (*)(struct function *) init_machine_status 27284 If this function pointer is non-'NULL' it will be called once per 27285 function, before function compilation starts, in order to allow the 27286 target to perform any target specific initialization of the 'struct 27287 function' structure. It is intended that this would be used to 27288 initialize the 'machine' of that structure. 27289 27290 'struct machine_function' structures are expected to be freed by 27291 GC. Generally, any memory that they reference must be allocated by 27292 using GC allocation, including the structure itself. 27293 27294 27295 File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 27296 27297 17.5 Storage Layout 27298 =================== 27299 27300 Note that the definitions of the macros in this table which are sizes or 27301 alignments measured in bits do not need to be constant. They can be C 27302 expressions that refer to static variables, such as the 'target_flags'. 27303 *Note Run-time Target::. 27304 27305 -- Macro: BITS_BIG_ENDIAN 27306 Define this macro to have the value 1 if the most significant bit 27307 in a byte has the lowest number; otherwise define it to have the 27308 value zero. This means that bit-field instructions count from the 27309 most significant bit. If the machine has no bit-field 27310 instructions, then this must still be defined, but it doesn't 27311 matter which value it is defined to. This macro need not be a 27312 constant. 27313 27314 This macro does not affect the way structure fields are packed into 27315 bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'. 27316 27317 -- Macro: BYTES_BIG_ENDIAN 27318 Define this macro to have the value 1 if the most significant byte 27319 in a word has the lowest number. This macro need not be a 27320 constant. 27321 27322 -- Macro: WORDS_BIG_ENDIAN 27323 Define this macro to have the value 1 if, in a multiword object, 27324 the most significant word has the lowest number. This applies to 27325 both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if 27326 the order of words in memory is not the same as the order in 27327 registers. This macro need not be a constant. 27328 27329 -- Macro: REG_WORDS_BIG_ENDIAN 27330 On some machines, the order of words in a multiword object differs 27331 between registers in memory. In such a situation, define this 27332 macro to describe the order of words in a register. The macro 27333 'WORDS_BIG_ENDIAN' controls the order of words in memory. 27334 27335 -- Macro: FLOAT_WORDS_BIG_ENDIAN 27336 Define this macro to have the value 1 if 'DFmode', 'XFmode' or 27337 'TFmode' floating point numbers are stored in memory with the word 27338 containing the sign bit at the lowest address; otherwise define it 27339 to have the value 0. This macro need not be a constant. 27340 27341 You need not define this macro if the ordering is the same as for 27342 multi-word integers. 27343 27344 -- Macro: BITS_PER_UNIT 27345 Define this macro to be the number of bits in an addressable 27346 storage unit (byte). If you do not define this macro the default 27347 is 8. 27348 27349 -- Macro: BITS_PER_WORD 27350 Number of bits in a word. If you do not define this macro, the 27351 default is 'BITS_PER_UNIT * UNITS_PER_WORD'. 27352 27353 -- Macro: MAX_BITS_PER_WORD 27354 Maximum number of bits in a word. If this is undefined, the 27355 default is 'BITS_PER_WORD'. Otherwise, it is the constant value 27356 that is the largest value that 'BITS_PER_WORD' can have at 27357 run-time. 27358 27359 -- Macro: UNITS_PER_WORD 27360 Number of storage units in a word; normally the size of a 27361 general-purpose register, a power of two from 1 or 8. 27362 27363 -- Macro: MIN_UNITS_PER_WORD 27364 Minimum number of units in a word. If this is undefined, the 27365 default is 'UNITS_PER_WORD'. Otherwise, it is the constant value 27366 that is the smallest value that 'UNITS_PER_WORD' can have at 27367 run-time. 27368 27369 -- Macro: POINTER_SIZE 27370 Width of a pointer, in bits. You must specify a value no wider 27371 than the width of 'Pmode'. If it is not equal to the width of 27372 'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'. If you do not 27373 specify a value the default is 'BITS_PER_WORD'. 27374 27375 -- Macro: POINTERS_EXTEND_UNSIGNED 27376 A C expression that determines how pointers should be extended from 27377 'ptr_mode' to either 'Pmode' or 'word_mode'. It is greater than 27378 zero if pointers should be zero-extended, zero if they should be 27379 sign-extended, and negative if some other sort of conversion is 27380 needed. In the last case, the extension is done by the target's 27381 'ptr_extend' instruction. 27382 27383 You need not define this macro if the 'ptr_mode', 'Pmode' and 27384 'word_mode' are all the same width. 27385 27386 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 27387 A macro to update M and UNSIGNEDP when an object whose type is TYPE 27388 and which has the specified mode and signedness is to be stored in 27389 a register. This macro is only called when TYPE is a scalar type. 27390 27391 On most RISC machines, which only have operations that operate on a 27392 full register, define this macro to set M to 'word_mode' if M is an 27393 integer mode narrower than 'BITS_PER_WORD'. In most cases, only 27394 integer modes should be widened because wider-precision 27395 floating-point operations are usually more expensive than their 27396 narrower counterparts. 27397 27398 For most machines, the macro definition does not change UNSIGNEDP. 27399 However, some machines, have instructions that preferentially 27400 handle either signed or unsigned quantities of certain modes. For 27401 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 27402 instructions sign-extend the result to 64 bits. On such machines, 27403 set UNSIGNEDP according to which kind of extension is more 27404 efficient. 27405 27406 Do not define this macro if it would never modify M. 27407 27408 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE 27409 (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP, 27410 const_tree FUNTYPE, int FOR_RETURN) 27411 Like 'PROMOTE_MODE', but it is applied to outgoing function 27412 arguments or function return values. The target hook should return 27413 the new mode and possibly change '*PUNSIGNEDP' if the promotion 27414 should change signedness. This function is called only for scalar 27415 _or pointer_ types. 27416 27417 FOR_RETURN allows to distinguish the promotion of arguments and 27418 return values. If it is '1', a return value is being promoted and 27419 'TARGET_FUNCTION_VALUE' must perform the same promotions done here. 27420 If it is '2', the returned mode should be that of the register in 27421 which an incoming parameter is copied, or the outgoing result is 27422 computed; then the hook should return the same mode as 27423 'promote_mode', though the signedness may be different. 27424 27425 TYPE can be NULL when promoting function arguments of libcalls. 27426 27427 The default is to not promote arguments and return values. You can 27428 also define the hook to 27429 'default_promote_function_mode_always_promote' if you would like to 27430 apply the same rules given by 'PROMOTE_MODE'. 27431 27432 -- Macro: PARM_BOUNDARY 27433 Normal alignment required for function parameters on the stack, in 27434 bits. All stack parameters receive at least this much alignment 27435 regardless of data type. On most machines, this is the same as the 27436 size of an integer. 27437 27438 -- Macro: STACK_BOUNDARY 27439 Define this macro to the minimum alignment enforced by hardware for 27440 the stack pointer on this machine. The definition is a C 27441 expression for the desired alignment (measured in bits). This 27442 value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not 27443 defined. On most machines, this should be the same as 27444 'PARM_BOUNDARY'. 27445 27446 -- Macro: PREFERRED_STACK_BOUNDARY 27447 Define this macro if you wish to preserve a certain alignment for 27448 the stack pointer, greater than what the hardware enforces. The 27449 definition is a C expression for the desired alignment (measured in 27450 bits). This macro must evaluate to a value equal to or larger than 27451 'STACK_BOUNDARY'. 27452 27453 -- Macro: INCOMING_STACK_BOUNDARY 27454 Define this macro if the incoming stack boundary may be different 27455 from 'PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 27456 value equal to or larger than 'STACK_BOUNDARY'. 27457 27458 -- Macro: FUNCTION_BOUNDARY 27459 Alignment required for a function entry point, in bits. 27460 27461 -- Macro: BIGGEST_ALIGNMENT 27462 Biggest alignment that any data type can require on this machine, 27463 in bits. Note that this is not the biggest alignment that is 27464 supported, just the biggest alignment that, when violated, may 27465 cause a fault. 27466 27467 -- Macro: MALLOC_ABI_ALIGNMENT 27468 Alignment, in bits, a C conformant malloc implementation has to 27469 provide. If not defined, the default value is 'BITS_PER_WORD'. 27470 27471 -- Macro: ATTRIBUTE_ALIGNED_VALUE 27472 Alignment used by the '__attribute__ ((aligned))' construct. If 27473 not defined, the default value is 'BIGGEST_ALIGNMENT'. 27474 27475 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 27476 If defined, the smallest alignment, in bits, that can be given to 27477 an object that can be referenced in one operation, without 27478 disturbing any nearby object. Normally, this is 'BITS_PER_UNIT', 27479 but may be larger on machines that don't have byte or half-word 27480 store operations. 27481 27482 -- Macro: BIGGEST_FIELD_ALIGNMENT 27483 Biggest alignment that any structure or union field can require on 27484 this machine, in bits. If defined, this overrides 27485 'BIGGEST_ALIGNMENT' for structure and union fields only, unless the 27486 field alignment has been set by the '__attribute__ ((aligned (N)))' 27487 construct. 27488 27489 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 27490 An expression for the alignment of a structure field FIELD if the 27491 alignment computed in the usual way (including applying of 27492 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the alignment) 27493 is COMPUTED. It overrides alignment only if the field alignment 27494 has not been set by the '__attribute__ ((aligned (N)))' construct. 27495 27496 -- Macro: MAX_STACK_ALIGNMENT 27497 Biggest stack alignment guaranteed by the backend. Use this macro 27498 to specify the maximum alignment of a variable on stack. 27499 27500 If not defined, the default value is 'STACK_BOUNDARY'. 27501 27502 -- Macro: MAX_OFILE_ALIGNMENT 27503 Biggest alignment supported by the object file format of this 27504 machine. Use this macro to limit the alignment which can be 27505 specified using the '__attribute__ ((aligned (N)))' construct. If 27506 not defined, the default value is 'BIGGEST_ALIGNMENT'. 27507 27508 On systems that use ELF, the default (in 'config/elfos.h') is the 27509 largest supported 32-bit ELF section alignment representable on a 27510 32-bit host e.g. '(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'. On 27511 32-bit ELF the largest supported section alignment in bits is 27512 '(0x80000000 * 8)', but this is not representable on 32-bit hosts. 27513 27514 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 27515 If defined, a C expression to compute the alignment for a variable 27516 in the static store. TYPE is the data type, and BASIC-ALIGN is the 27517 alignment that the object would ordinarily have. The value of this 27518 macro is used instead of that alignment to align the object. 27519 27520 If this macro is not defined, then BASIC-ALIGN is used. 27521 27522 One use of this macro is to increase alignment of medium-size data 27523 to make it all fit in fewer cache lines. Another is to cause 27524 character arrays to be word-aligned so that 'strcpy' calls that 27525 copy constants to character arrays can be done inline. 27526 27527 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 27528 If defined, a C expression to compute the alignment given to a 27529 constant that is being placed in memory. CONSTANT is the constant 27530 and BASIC-ALIGN is the alignment that the object would ordinarily 27531 have. The value of this macro is used instead of that alignment to 27532 align the object. 27533 27534 If this macro is not defined, then BASIC-ALIGN is used. 27535 27536 The typical use of this macro is to increase alignment for string 27537 constants to be word aligned so that 'strcpy' calls that copy 27538 constants can be done inline. 27539 27540 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 27541 If defined, a C expression to compute the alignment for a variable 27542 in the local store. TYPE is the data type, and BASIC-ALIGN is the 27543 alignment that the object would ordinarily have. The value of this 27544 macro is used instead of that alignment to align the object. 27545 27546 If this macro is not defined, then BASIC-ALIGN is used. 27547 27548 One use of this macro is to increase alignment of medium-size data 27549 to make it all fit in fewer cache lines. 27550 27551 If the value of this macro has a type, it should be an unsigned 27552 type. 27553 27554 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE) 27555 This hook can be used to define the alignment for a vector of type 27556 TYPE, in order to comply with a platform ABI. The default is to 27557 require natural alignment for vector types. The alignment returned 27558 by this hook must be a power-of-two multiple of the default 27559 alignment of the vector element type. 27560 27561 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 27562 If defined, a C expression to compute the alignment for stack slot. 27563 TYPE is the data type, MODE is the widest mode available, and 27564 BASIC-ALIGN is the alignment that the slot would ordinarily have. 27565 The value of this macro is used instead of that alignment to align 27566 the slot. 27567 27568 If this macro is not defined, then BASIC-ALIGN is used when TYPE is 27569 'NULL'. Otherwise, 'LOCAL_ALIGNMENT' will be used. 27570 27571 This macro is to set alignment of stack slot to the maximum 27572 alignment of all possible modes which the slot may have. 27573 27574 If the value of this macro has a type, it should be an unsigned 27575 type. 27576 27577 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 27578 If defined, a C expression to compute the alignment for a local 27579 variable DECL. 27580 27581 If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE 27582 (DECL), DECL_ALIGN (DECL))' is used. 27583 27584 One use of this macro is to increase alignment of medium-size data 27585 to make it all fit in fewer cache lines. 27586 27587 If the value of this macro has a type, it should be an unsigned 27588 type. 27589 27590 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 27591 If defined, a C expression to compute the minimum required 27592 alignment for dynamic stack realignment purposes for EXP (a type or 27593 decl), MODE, assuming normal alignment ALIGN. 27594 27595 If this macro is not defined, then ALIGN will be used. 27596 27597 -- Macro: EMPTY_FIELD_BOUNDARY 27598 Alignment in bits to be given to a structure bit-field that follows 27599 an empty field such as 'int : 0;'. 27600 27601 If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 27602 27603 -- Macro: STRUCTURE_SIZE_BOUNDARY 27604 Number of bits which any structure or union's size must be a 27605 multiple of. Each structure or union's size is rounded up to a 27606 multiple of this. 27607 27608 If you do not define this macro, the default is the same as 27609 'BITS_PER_UNIT'. 27610 27611 -- Macro: STRICT_ALIGNMENT 27612 Define this macro to be the value 1 if instructions will fail to 27613 work if given data not on the nominal alignment. If instructions 27614 will merely go slower in that case, define this macro as 0. 27615 27616 -- Macro: PCC_BITFIELD_TYPE_MATTERS 27617 Define this if you wish to imitate the way many other C compilers 27618 handle alignment of bit-fields and the structures that contain 27619 them. 27620 27621 The behavior is that the type written for a named bit-field ('int', 27622 'short', or other integer type) imposes an alignment for the entire 27623 structure, as if the structure really did contain an ordinary field 27624 of that type. In addition, the bit-field is placed within the 27625 structure so that it would fit within such a field, not crossing a 27626 boundary for it. 27627 27628 Thus, on most machines, a named bit-field whose type is written as 27629 'int' would not cross a four-byte boundary, and would force 27630 four-byte alignment for the whole structure. (The alignment used 27631 may not be four bytes; it is controlled by the other alignment 27632 parameters.) 27633 27634 An unnamed bit-field will not affect the alignment of the 27635 containing structure. 27636 27637 If the macro is defined, its definition should be a C expression; a 27638 nonzero value for the expression enables this behavior. 27639 27640 Note that if this macro is not defined, or its value is zero, some 27641 bit-fields may cross more than one alignment boundary. The 27642 compiler can support such references if there are 'insv', 'extv', 27643 and 'extzv' insns that can directly reference memory. 27644 27645 The other known way of making bit-fields work is to define 27646 'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'. Then 27647 every structure can be accessed with fullwords. 27648 27649 Unless the machine has bit-field instructions or you define 27650 'STRUCTURE_SIZE_BOUNDARY' that way, you must define 27651 'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 27652 27653 If your aim is to make GCC use the same conventions for laying out 27654 bit-fields as are used by another compiler, here is how to 27655 investigate what the other compiler does. Compile and run this 27656 program: 27657 27658 struct foo1 27659 { 27660 char x; 27661 char :0; 27662 char y; 27663 }; 27664 27665 struct foo2 27666 { 27667 char x; 27668 int :0; 27669 char y; 27670 }; 27671 27672 main () 27673 { 27674 printf ("Size of foo1 is %d\n", 27675 sizeof (struct foo1)); 27676 printf ("Size of foo2 is %d\n", 27677 sizeof (struct foo2)); 27678 exit (0); 27679 } 27680 27681 If this prints 2 and 5, then the compiler's behavior is what you 27682 would get from 'PCC_BITFIELD_TYPE_MATTERS'. 27683 27684 -- Macro: BITFIELD_NBYTES_LIMITED 27685 Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 27686 to aligning a bit-field within the structure. 27687 27688 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 27689 When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 27690 whether unnamed bitfields affect the alignment of the containing 27691 structure. The hook should return true if the structure should 27692 inherit the alignment requirements of an unnamed bitfield's type. 27693 27694 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 27695 This target hook should return 'true' if accesses to volatile 27696 bitfields should use the narrowest mode possible. It should return 27697 'false' if these accesses should use the bitfield container type. 27698 27699 The default is '!TARGET_STRICT_ALIGN'. 27700 27701 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD, 27702 enum machine_mode MODE) 27703 Return true if a structure, union or array containing FIELD should 27704 be accessed using 'BLKMODE'. 27705 27706 If FIELD is the only field in the structure, MODE is its mode, 27707 otherwise MODE is VOIDmode. MODE is provided in the case where 27708 structures of one field would require the structure's mode to 27709 retain the field's mode. 27710 27711 Normally, this is not needed. 27712 27713 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 27714 Define this macro as an expression for the alignment of a type 27715 (given by TYPE as a tree node) if the alignment computed in the 27716 usual way is COMPUTED and the alignment explicitly specified was 27717 SPECIFIED. 27718 27719 The default is to use SPECIFIED if it is larger; otherwise, use the 27720 smaller of COMPUTED and 'BIGGEST_ALIGNMENT' 27721 27722 -- Macro: MAX_FIXED_MODE_SIZE 27723 An integer expression for the size in bits of the largest integer 27724 machine mode that should actually be used. All integer machine 27725 modes of this size or smaller can be used for structures and unions 27726 with the appropriate sizes. If this macro is undefined, 27727 'GET_MODE_BITSIZE (DImode)' is assumed. 27728 27729 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 27730 If defined, an expression of type 'enum machine_mode' that 27731 specifies the mode of the save area operand of a 'save_stack_LEVEL' 27732 named pattern (*note Standard Names::). SAVE_LEVEL is one of 27733 'SAVE_BLOCK', 'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which 27734 of the three named patterns is having its mode specified. 27735 27736 You need not define this macro if it always returns 'Pmode'. You 27737 would most commonly define this macro if the 'save_stack_LEVEL' 27738 patterns need to support both a 32- and a 64-bit mode. 27739 27740 -- Macro: STACK_SIZE_MODE 27741 If defined, an expression of type 'enum machine_mode' that 27742 specifies the mode of the size increment operand of an 27743 'allocate_stack' named pattern (*note Standard Names::). 27744 27745 You need not define this macro if it always returns 'word_mode'. 27746 You would most commonly define this macro if the 'allocate_stack' 27747 pattern needs to support both a 32- and a 64-bit mode. 27748 27749 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 27750 This target hook should return the mode to be used for the return 27751 value of compare instructions expanded to libgcc calls. If not 27752 defined 'word_mode' is returned which is the right choice for a 27753 majority of targets. 27754 27755 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 27756 This target hook should return the mode to be used for the shift 27757 count operand of shift instructions expanded to libgcc calls. If 27758 not defined 'word_mode' is returned which is the right choice for a 27759 majority of targets. 27760 27761 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void) 27762 Return machine mode to be used for '_Unwind_Word' type. The 27763 default is to use 'word_mode'. 27764 27765 -- Macro: ROUND_TOWARDS_ZERO 27766 If defined, this macro should be true if the prevailing rounding 27767 mode is towards zero. 27768 27769 Defining this macro only affects the way 'libgcc.a' emulates 27770 floating-point arithmetic. 27771 27772 Not defining this macro is equivalent to returning zero. 27773 27774 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE) 27775 This macro should return true if floats with SIZE bits do not have 27776 a NaN or infinity representation, but use the largest exponent for 27777 normal numbers instead. 27778 27779 Defining this macro only affects the way 'libgcc.a' emulates 27780 floating-point arithmetic. 27781 27782 The default definition of this macro returns false for all sizes. 27783 27784 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 27785 RECORD_TYPE) 27786 This target hook returns 'true' if bit-fields in the given 27787 RECORD_TYPE are to be laid out following the rules of Microsoft 27788 Visual C/C++, namely: (i) a bit-field won't share the same storage 27789 unit with the previous bit-field if their underlying types have 27790 different sizes, and the bit-field will be aligned to the highest 27791 alignment of the underlying types of itself and of the previous 27792 bit-field; (ii) a zero-sized bit-field will affect the alignment of 27793 the whole enclosing structure, even if it is unnamed; except that 27794 (iii) a zero-sized bit-field will be disregarded unless it follows 27795 another bit-field of nonzero size. If this hook returns 'true', 27796 other macros that control bit-field layout are ignored. 27797 27798 When a bit-field is inserted into a packed record, the whole size 27799 of the underlying type is used by one or more same-size adjacent 27800 bit-fields (that is, if its long:3, 32 bits is used in the record, 27801 and any additional adjacent long bit-fields are packed into the 27802 same chunk of 32 bits. However, if the size changes, a new field 27803 of that size is allocated). In an unpacked record, this is the 27804 same as using alignment, but not equivalent when packing. 27805 27806 If both MS bit-fields and '__attribute__((packed))' are used, the 27807 latter will take precedence. If '__attribute__((packed))' is used 27808 on a single field when MS bit-fields are in use, it will take 27809 precedence for that field, but the alignment of the rest of the 27810 structure may affect its placement. 27811 27812 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 27813 Returns true if the target supports decimal floating point. 27814 27815 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 27816 Returns true if the target supports fixed-point arithmetic. 27817 27818 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 27819 This hook is called just before expansion into rtl, allowing the 27820 target to perform additional initializations or analysis before the 27821 expansion. For example, the rs6000 port uses it to allocate a 27822 scratch stack slot for use in copying SDmode values between memory 27823 and floating point registers whenever the function being expanded 27824 has any SDmode usage. 27825 27826 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 27827 This hook allows the backend to perform additional instantiations 27828 on rtl that are not actually in any insns yet, but will be later. 27829 27830 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 27831 If your target defines any fundamental types, or any types your 27832 target uses should be mangled differently from the default, define 27833 this hook to return the appropriate encoding for these types as 27834 part of a C++ mangled name. The TYPE argument is the tree 27835 structure representing the type to be mangled. The hook may be 27836 applied to trees which are not target-specific fundamental types; 27837 it should return 'NULL' for all such types, as well as arguments it 27838 does not recognize. If the return value is not 'NULL', it must 27839 point to a statically-allocated string constant. 27840 27841 Target-specific fundamental types might be new fundamental types or 27842 qualified versions of ordinary fundamental types. Encode new 27843 fundamental types as 'u N NAME', where NAME is the name used for 27844 the type in source code, and N is the length of NAME in decimal. 27845 Encode qualified versions of ordinary types as 'U N NAME CODE', 27846 where NAME is the name used for the type qualifier in source code, 27847 N is the length of NAME as above, and CODE is the code used to 27848 represent the unqualified version of this type. (See 27849 'write_builtin_type' in 'cp/mangle.c' for the list of codes.) In 27850 both cases the spaces are for clarity; do not include any spaces in 27851 your string. 27852 27853 This hook is applied to types prior to typedef resolution. If the 27854 mangled name for a particular type depends only on that type's main 27855 variant, you can perform typedef resolution yourself using 27856 'TYPE_MAIN_VARIANT' before mangling. 27857 27858 The default version of this hook always returns 'NULL', which is 27859 appropriate for a target that does not define any new fundamental 27860 types. 27861 27862 27863 File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 27864 27865 17.6 Layout of Source Language Data Types 27866 ========================================= 27867 27868 These macros define the sizes and other characteristics of the standard 27869 basic data types used in programs being compiled. Unlike the macros in 27870 the previous section, these apply to specific features of C and related 27871 languages, rather than to fundamental aspects of storage layout. 27872 27873 -- Macro: INT_TYPE_SIZE 27874 A C expression for the size in bits of the type 'int' on the target 27875 machine. If you don't define this, the default is one word. 27876 27877 -- Macro: SHORT_TYPE_SIZE 27878 A C expression for the size in bits of the type 'short' on the 27879 target machine. If you don't define this, the default is half a 27880 word. (If this would be less than one storage unit, it is rounded 27881 up to one unit.) 27882 27883 -- Macro: LONG_TYPE_SIZE 27884 A C expression for the size in bits of the type 'long' on the 27885 target machine. If you don't define this, the default is one word. 27886 27887 -- Macro: ADA_LONG_TYPE_SIZE 27888 On some machines, the size used for the Ada equivalent of the type 27889 'long' by a native Ada compiler differs from that used by C. In 27890 that situation, define this macro to be a C expression to be used 27891 for the size of that type. If you don't define this, the default 27892 is the value of 'LONG_TYPE_SIZE'. 27893 27894 -- Macro: LONG_LONG_TYPE_SIZE 27895 A C expression for the size in bits of the type 'long long' on the 27896 target machine. If you don't define this, the default is two 27897 words. If you want to support GNU Ada on your machine, the value 27898 of this macro must be at least 64. 27899 27900 -- Macro: CHAR_TYPE_SIZE 27901 A C expression for the size in bits of the type 'char' on the 27902 target machine. If you don't define this, the default is 27903 'BITS_PER_UNIT'. 27904 27905 -- Macro: BOOL_TYPE_SIZE 27906 A C expression for the size in bits of the C++ type 'bool' and C99 27907 type '_Bool' on the target machine. If you don't define this, and 27908 you probably shouldn't, the default is 'CHAR_TYPE_SIZE'. 27909 27910 -- Macro: FLOAT_TYPE_SIZE 27911 A C expression for the size in bits of the type 'float' on the 27912 target machine. If you don't define this, the default is one word. 27913 27914 -- Macro: DOUBLE_TYPE_SIZE 27915 A C expression for the size in bits of the type 'double' on the 27916 target machine. If you don't define this, the default is two 27917 words. 27918 27919 -- Macro: LONG_DOUBLE_TYPE_SIZE 27920 A C expression for the size in bits of the type 'long double' on 27921 the target machine. If you don't define this, the default is two 27922 words. 27923 27924 -- Macro: SHORT_FRACT_TYPE_SIZE 27925 A C expression for the size in bits of the type 'short _Fract' on 27926 the target machine. If you don't define this, the default is 27927 'BITS_PER_UNIT'. 27928 27929 -- Macro: FRACT_TYPE_SIZE 27930 A C expression for the size in bits of the type '_Fract' on the 27931 target machine. If you don't define this, the default is 27932 'BITS_PER_UNIT * 2'. 27933 27934 -- Macro: LONG_FRACT_TYPE_SIZE 27935 A C expression for the size in bits of the type 'long _Fract' on 27936 the target machine. If you don't define this, the default is 27937 'BITS_PER_UNIT * 4'. 27938 27939 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 27940 A C expression for the size in bits of the type 'long long _Fract' 27941 on the target machine. If you don't define this, the default is 27942 'BITS_PER_UNIT * 8'. 27943 27944 -- Macro: SHORT_ACCUM_TYPE_SIZE 27945 A C expression for the size in bits of the type 'short _Accum' on 27946 the target machine. If you don't define this, the default is 27947 'BITS_PER_UNIT * 2'. 27948 27949 -- Macro: ACCUM_TYPE_SIZE 27950 A C expression for the size in bits of the type '_Accum' on the 27951 target machine. If you don't define this, the default is 27952 'BITS_PER_UNIT * 4'. 27953 27954 -- Macro: LONG_ACCUM_TYPE_SIZE 27955 A C expression for the size in bits of the type 'long _Accum' on 27956 the target machine. If you don't define this, the default is 27957 'BITS_PER_UNIT * 8'. 27958 27959 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 27960 A C expression for the size in bits of the type 'long long _Accum' 27961 on the target machine. If you don't define this, the default is 27962 'BITS_PER_UNIT * 16'. 27963 27964 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE 27965 Define this macro if 'LONG_DOUBLE_TYPE_SIZE' is not constant or if 27966 you want routines in 'libgcc2.a' for a size other than 27967 'LONG_DOUBLE_TYPE_SIZE'. If you don't define this, the default is 27968 'LONG_DOUBLE_TYPE_SIZE'. 27969 27970 -- Macro: LIBGCC2_HAS_DF_MODE 27971 Define this macro if neither 'DOUBLE_TYPE_SIZE' nor 27972 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 'DFmode' but you want 'DFmode' 27973 routines in 'libgcc2.a' anyway. If you don't define this and 27974 either 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 27975 then the default is 1, otherwise it is 0. 27976 27977 -- Macro: LIBGCC2_HAS_XF_MODE 27978 Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 27979 'XFmode' but you want 'XFmode' routines in 'libgcc2.a' anyway. If 27980 you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80 27981 then the default is 1, otherwise it is 0. 27982 27983 -- Macro: LIBGCC2_HAS_TF_MODE 27984 Define this macro if 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 27985 'TFmode' but you want 'TFmode' routines in 'libgcc2.a' anyway. If 27986 you don't define this and 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128 27987 then the default is 1, otherwise it is 0. 27988 27989 -- Macro: LIBGCC2_GNU_PREFIX 27990 This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target 27991 hook and should be defined if that hook is overriden to be true. 27992 It causes function names in libgcc to be changed to use a '__gnu_' 27993 prefix for their name rather than the default '__'. A port which 27994 uses this macro should also arrange to use 't-gnu-prefix' in the 27995 libgcc 'config.host'. 27996 27997 -- Macro: SF_SIZE 27998 -- Macro: DF_SIZE 27999 -- Macro: XF_SIZE 28000 -- Macro: TF_SIZE 28001 Define these macros to be the size in bits of the mantissa of 28002 'SFmode', 'DFmode', 'XFmode' and 'TFmode' values, if the defaults 28003 in 'libgcc2.h' are inappropriate. By default, 'FLT_MANT_DIG' is 28004 used for 'SF_SIZE', 'LDBL_MANT_DIG' for 'XF_SIZE' and 'TF_SIZE', 28005 and 'DBL_MANT_DIG' or 'LDBL_MANT_DIG' for 'DF_SIZE' according to 28006 whether 'DOUBLE_TYPE_SIZE' or 'LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 28007 64. 28008 28009 -- Macro: TARGET_FLT_EVAL_METHOD 28010 A C expression for the value for 'FLT_EVAL_METHOD' in 'float.h', 28011 assuming, if applicable, that the floating-point control word is in 28012 its default state. If you do not define this macro the value of 28013 'FLT_EVAL_METHOD' will be zero. 28014 28015 -- Macro: WIDEST_HARDWARE_FP_SIZE 28016 A C expression for the size in bits of the widest floating-point 28017 format supported by the hardware. If you define this macro, you 28018 must specify a value less than or equal to the value of 28019 'LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 28020 value of 'LONG_DOUBLE_TYPE_SIZE' is the default. 28021 28022 -- Macro: DEFAULT_SIGNED_CHAR 28023 An expression whose value is 1 or 0, according to whether the type 28024 'char' should be signed or unsigned by default. The user can 28025 always override this default with the options '-fsigned-char' and 28026 '-funsigned-char'. 28027 28028 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 28029 This target hook should return true if the compiler should give an 28030 'enum' type only as many bytes as it takes to represent the range 28031 of possible values of that type. It should return false if all 28032 'enum' types should be allocated like 'int'. 28033 28034 The default is to return false. 28035 28036 -- Macro: SIZE_TYPE 28037 A C expression for a string describing the name of the data type to 28038 use for size values. The typedef name 'size_t' is defined using 28039 the contents of the string. 28040 28041 The string can contain more than one keyword. If so, separate them 28042 with spaces, and write first any length keyword, then 'unsigned' if 28043 appropriate, and finally 'int'. The string must exactly match one 28044 of the data type names defined in the function 28045 'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'. 28046 You may not omit 'int' or change the order--that would cause the 28047 compiler to crash on startup. 28048 28049 If you don't define this macro, the default is '"long unsigned 28050 int"'. 28051 28052 -- Macro: SIZETYPE 28053 GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype' 28054 and 'sbitsizetype') for expressions dealing with size. This macro 28055 is a C expression for a string describing the name of the data type 28056 from which the precision of 'sizetype' is extracted. 28057 28058 The string has the same restrictions as 'SIZE_TYPE' string. 28059 28060 If you don't define this macro, the default is 'SIZE_TYPE'. 28061 28062 -- Macro: PTRDIFF_TYPE 28063 A C expression for a string describing the name of the data type to 28064 use for the result of subtracting two pointers. The typedef name 28065 'ptrdiff_t' is defined using the contents of the string. See 28066 'SIZE_TYPE' above for more information. 28067 28068 If you don't define this macro, the default is '"long int"'. 28069 28070 -- Macro: WCHAR_TYPE 28071 A C expression for a string describing the name of the data type to 28072 use for wide characters. The typedef name 'wchar_t' is defined 28073 using the contents of the string. See 'SIZE_TYPE' above for more 28074 information. 28075 28076 If you don't define this macro, the default is '"int"'. 28077 28078 -- Macro: WCHAR_TYPE_SIZE 28079 A C expression for the size in bits of the data type for wide 28080 characters. This is used in 'cpp', which cannot make use of 28081 'WCHAR_TYPE'. 28082 28083 -- Macro: WINT_TYPE 28084 A C expression for a string describing the name of the data type to 28085 use for wide characters passed to 'printf' and returned from 28086 'getwc'. The typedef name 'wint_t' is defined using the contents 28087 of the string. See 'SIZE_TYPE' above for more information. 28088 28089 If you don't define this macro, the default is '"unsigned int"'. 28090 28091 -- Macro: INTMAX_TYPE 28092 A C expression for a string describing the name of the data type 28093 that can represent any value of any standard or extended signed 28094 integer type. The typedef name 'intmax_t' is defined using the 28095 contents of the string. See 'SIZE_TYPE' above for more 28096 information. 28097 28098 If you don't define this macro, the default is the first of 28099 '"int"', '"long int"', or '"long long int"' that has as much 28100 precision as 'long long int'. 28101 28102 -- Macro: UINTMAX_TYPE 28103 A C expression for a string describing the name of the data type 28104 that can represent any value of any standard or extended unsigned 28105 integer type. The typedef name 'uintmax_t' is defined using the 28106 contents of the string. See 'SIZE_TYPE' above for more 28107 information. 28108 28109 If you don't define this macro, the default is the first of 28110 '"unsigned int"', '"long unsigned int"', or '"long long unsigned 28111 int"' that has as much precision as 'long long unsigned int'. 28112 28113 -- Macro: SIG_ATOMIC_TYPE 28114 -- Macro: INT8_TYPE 28115 -- Macro: INT16_TYPE 28116 -- Macro: INT32_TYPE 28117 -- Macro: INT64_TYPE 28118 -- Macro: UINT8_TYPE 28119 -- Macro: UINT16_TYPE 28120 -- Macro: UINT32_TYPE 28121 -- Macro: UINT64_TYPE 28122 -- Macro: INT_LEAST8_TYPE 28123 -- Macro: INT_LEAST16_TYPE 28124 -- Macro: INT_LEAST32_TYPE 28125 -- Macro: INT_LEAST64_TYPE 28126 -- Macro: UINT_LEAST8_TYPE 28127 -- Macro: UINT_LEAST16_TYPE 28128 -- Macro: UINT_LEAST32_TYPE 28129 -- Macro: UINT_LEAST64_TYPE 28130 -- Macro: INT_FAST8_TYPE 28131 -- Macro: INT_FAST16_TYPE 28132 -- Macro: INT_FAST32_TYPE 28133 -- Macro: INT_FAST64_TYPE 28134 -- Macro: UINT_FAST8_TYPE 28135 -- Macro: UINT_FAST16_TYPE 28136 -- Macro: UINT_FAST32_TYPE 28137 -- Macro: UINT_FAST64_TYPE 28138 -- Macro: INTPTR_TYPE 28139 -- Macro: UINTPTR_TYPE 28140 C expressions for the standard types 'sig_atomic_t', 'int8_t', 28141 'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 28142 'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t', 28143 'int_least64_t', 'uint_least8_t', 'uint_least16_t', 28144 'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 28145 'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 28146 'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'. See 28147 'SIZE_TYPE' above for more information. 28148 28149 If any of these macros evaluates to a null pointer, the 28150 corresponding type is not supported; if GCC is configured to 28151 provide '<stdint.h>' in such a case, the header provided may not 28152 conform to C99, depending on the type in question. The defaults 28153 for all of these macros are null pointers. 28154 28155 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 28156 The C++ compiler represents a pointer-to-member-function with a 28157 struct that looks like: 28158 28159 struct { 28160 union { 28161 void (*fn)(); 28162 ptrdiff_t vtable_index; 28163 }; 28164 ptrdiff_t delta; 28165 }; 28166 28167 The C++ compiler must use one bit to indicate whether the function 28168 that will be called through a pointer-to-member-function is 28169 virtual. Normally, we assume that the low-order bit of a function 28170 pointer must always be zero. Then, by ensuring that the 28171 vtable_index is odd, we can distinguish which variant of the union 28172 is in use. But, on some platforms function pointers can be odd, 28173 and so this doesn't work. In that case, we use the low-order bit 28174 of the 'delta' field, and shift the remainder of the 'delta' field 28175 to the left. 28176 28177 GCC will automatically make the right selection about where to 28178 store this bit using the 'FUNCTION_BOUNDARY' setting for your 28179 platform. However, some platforms such as ARM/Thumb have 28180 'FUNCTION_BOUNDARY' set such that functions always start at even 28181 addresses, but the lowest bit of pointers to functions indicate 28182 whether the function at that address is in ARM or Thumb mode. If 28183 this is the case of your architecture, you should define this macro 28184 to 'ptrmemfunc_vbit_in_delta'. 28185 28186 In general, you should not have to define this macro. On 28187 architectures in which function addresses are always even, 28188 according to 'FUNCTION_BOUNDARY', GCC will automatically define 28189 this macro to 'ptrmemfunc_vbit_in_pfn'. 28190 28191 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 28192 Normally, the C++ compiler uses function pointers in vtables. This 28193 macro allows the target to change to use "function descriptors" 28194 instead. Function descriptors are found on targets for whom a 28195 function pointer is actually a small data structure. Normally the 28196 data structure consists of the actual code address plus a data 28197 pointer to which the function's data is relative. 28198 28199 If vtables are used, the value of this macro should be the number 28200 of words that the function descriptor occupies. 28201 28202 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 28203 By default, the vtable entries are void pointers, the so the 28204 alignment is the same as pointer alignment. The value of this 28205 macro specifies the alignment of the vtable entry in bits. It 28206 should be defined only when special alignment is necessary. */ 28207 28208 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 28209 There are a few non-descriptor entries in the vtable at offsets 28210 below zero. If these entries must be padded (say, to preserve the 28211 alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to 28212 the number of words in each data entry. 28213 28214 28215 File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 28216 28217 17.7 Register Usage 28218 =================== 28219 28220 This section explains how to describe what registers the target machine 28221 has, and how (in general) they can be used. 28222 28223 The description of which registers a specific instruction can use is 28224 done with register classes; see *note Register Classes::. For 28225 information on using registers to access a stack frame, see *note Frame 28226 Registers::. For passing values in registers, see *note Register 28227 Arguments::. For returning values in registers, see *note Scalar 28228 Return::. 28229 28230 * Menu: 28231 28232 * Register Basics:: Number and kinds of registers. 28233 * Allocation Order:: Order in which registers are allocated. 28234 * Values in Registers:: What kinds of values each reg can hold. 28235 * Leaf Functions:: Renumbering registers for leaf functions. 28236 * Stack Registers:: Handling a register stack such as 80387. 28237 28238 28239 File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 28240 28241 17.7.1 Basic Characteristics of Registers 28242 ----------------------------------------- 28243 28244 Registers have various characteristics. 28245 28246 -- Macro: FIRST_PSEUDO_REGISTER 28247 Number of hardware registers known to the compiler. They receive 28248 numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo 28249 register's number really is assigned the number 28250 'FIRST_PSEUDO_REGISTER'. 28251 28252 -- Macro: FIXED_REGISTERS 28253 An initializer that says which registers are used for fixed 28254 purposes all throughout the compiled code and are therefore not 28255 available for general allocation. These would include the stack 28256 pointer, the frame pointer (except on machines where that can be 28257 used as a general register when no frame pointer is needed), the 28258 program counter on machines where that is considered one of the 28259 addressable registers, and any other numbered register with a 28260 standard use. 28261 28262 This information is expressed as a sequence of numbers, separated 28263 by commas and surrounded by braces. The Nth number is 1 if 28264 register N is fixed, 0 otherwise. 28265 28266 The table initialized from this macro, and the table initialized by 28267 the following one, may be overridden at run time either 28268 automatically, by the actions of the macro 28269 'CONDITIONAL_REGISTER_USAGE', or by the user with the command 28270 options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'. 28271 28272 -- Macro: CALL_USED_REGISTERS 28273 Like 'FIXED_REGISTERS' but has 1 for each register that is 28274 clobbered (in general) by function calls as well as for fixed 28275 registers. This macro therefore identifies the registers that are 28276 not available for general allocation of values that must live 28277 across function calls. 28278 28279 If a register has 0 in 'CALL_USED_REGISTERS', the compiler 28280 automatically saves it on function entry and restores it on 28281 function exit, if the register is used within the function. 28282 28283 -- Macro: CALL_REALLY_USED_REGISTERS 28284 Like 'CALL_USED_REGISTERS' except this macro doesn't require that 28285 the entire set of 'FIXED_REGISTERS' be included. 28286 ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS'). 28287 This macro is optional. If not specified, it defaults to the value 28288 of 'CALL_USED_REGISTERS'. 28289 28290 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 28291 A C expression that is nonzero if it is not permissible to store a 28292 value of mode MODE in hard register number REGNO across a call 28293 without some part of it being clobbered. For most machines this 28294 macro need not be defined. It is only required for machines that 28295 do not preserve the entire contents of a register across a call. 28296 28297 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void) 28298 This hook may conditionally modify five variables 'fixed_regs', 28299 'call_used_regs', 'global_regs', 'reg_names', and 28300 'reg_class_contents', to take into account any dependence of these 28301 register sets on target flags. The first three of these are of 28302 type 'char []' (interpreted as Boolean vectors). 'global_regs' is 28303 a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'. 28304 Before the macro is called, 'fixed_regs', 'call_used_regs', 28305 'reg_class_contents', and 'reg_names' have been initialized from 28306 'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and 28307 'REGISTER_NAMES', respectively. 'global_regs' has been cleared, 28308 and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG' 28309 command options have been applied. 28310 28311 If the usage of an entire class of registers depends on the target 28312 flags, you may indicate this to GCC by using this macro to modify 28313 'fixed_regs' and 'call_used_regs' to 1 for each of the registers in 28314 the classes which should not be used by GCC. Also define the macro 28315 'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' to return 28316 'NO_REGS' if it is called with a letter for a class that shouldn't 28317 be used. 28318 28319 (However, if this class is not included in 'GENERAL_REGS' and all 28320 of the insn patterns whose constraints permit this class are 28321 controlled by target switches, then GCC will automatically avoid 28322 using these registers when the target switches are opposed to 28323 them.) 28324 28325 -- Macro: INCOMING_REGNO (OUT) 28326 Define this macro if the target machine has register windows. This 28327 C expression returns the register number as seen by the called 28328 function corresponding to the register number OUT as seen by the 28329 calling function. Return OUT if register number OUT is not an 28330 outbound register. 28331 28332 -- Macro: OUTGOING_REGNO (IN) 28333 Define this macro if the target machine has register windows. This 28334 C expression returns the register number as seen by the calling 28335 function corresponding to the register number IN as seen by the 28336 called function. Return IN if register number IN is not an inbound 28337 register. 28338 28339 -- Macro: LOCAL_REGNO (REGNO) 28340 Define this macro if the target machine has register windows. This 28341 C expression returns true if the register is call-saved but is in 28342 the register window. Unlike most call-saved registers, such 28343 registers need not be explicitly restored on function exit or 28344 during non-local gotos. 28345 28346 -- Macro: PC_REGNUM 28347 If the program counter has a register number, define this as that 28348 register number. Otherwise, do not define it. 28349 28350 28351 File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 28352 28353 17.7.2 Order of Allocation of Registers 28354 --------------------------------------- 28355 28356 Registers are allocated in order. 28357 28358 -- Macro: REG_ALLOC_ORDER 28359 If defined, an initializer for a vector of integers, containing the 28360 numbers of hard registers in the order in which GCC should prefer 28361 to use them (from most preferred to least). 28362 28363 If this macro is not defined, registers are used lowest numbered 28364 first (all else being equal). 28365 28366 One use of this macro is on machines where the highest numbered 28367 registers must always be saved and the save-multiple-registers 28368 instruction supports only sequences of consecutive registers. On 28369 such machines, define 'REG_ALLOC_ORDER' to be an initializer that 28370 lists the highest numbered allocable register first. 28371 28372 -- Macro: ADJUST_REG_ALLOC_ORDER 28373 A C statement (sans semicolon) to choose the order in which to 28374 allocate hard registers for pseudo-registers local to a basic 28375 block. 28376 28377 Store the desired register order in the array 'reg_alloc_order'. 28378 Element 0 should be the register to allocate first; element 1, the 28379 next register; and so on. 28380 28381 The macro body should not assume anything about the contents of 28382 'reg_alloc_order' before execution of the macro. 28383 28384 On most machines, it is not necessary to define this macro. 28385 28386 -- Macro: HONOR_REG_ALLOC_ORDER 28387 Normally, IRA tries to estimate the costs for saving a register in 28388 the prologue and restoring it in the epilogue. This discourages it 28389 from using call-saved registers. If a machine wants to ensure that 28390 IRA allocates registers in the order given by REG_ALLOC_ORDER even 28391 if some call-saved registers appear earlier than call-used ones, 28392 this macro should be defined. 28393 28394 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 28395 In some case register allocation order is not enough for the 28396 Integrated Register Allocator (IRA) to generate a good code. If 28397 this macro is defined, it should return a floating point value 28398 based on REGNO. The cost of using REGNO for a pseudo will be 28399 increased by approximately the pseudo's usage frequency times the 28400 value returned by this macro. Not defining this macro is 28401 equivalent to having it always return '0.0'. 28402 28403 On most machines, it is not necessary to define this macro. 28404 28405 28406 File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 28407 28408 17.7.3 How Values Fit in Registers 28409 ---------------------------------- 28410 28411 This section discusses the macros that describe which kinds of values 28412 (specifically, which machine modes) each register can hold, and how many 28413 consecutive registers are needed for a given mode. 28414 28415 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 28416 A C expression for the number of consecutive hard registers, 28417 starting at register number REGNO, required to hold a value of mode 28418 MODE. This macro must never return zero, even if a register cannot 28419 hold the requested mode - indicate that with HARD_REGNO_MODE_OK 28420 and/or CANNOT_CHANGE_MODE_CLASS instead. 28421 28422 On a machine where all registers are exactly one word, a suitable 28423 definition of this macro is 28424 28425 #define HARD_REGNO_NREGS(REGNO, MODE) \ 28426 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 28427 / UNITS_PER_WORD) 28428 28429 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 28430 A C expression that is nonzero if a value of mode MODE, stored in 28431 memory, ends with padding that causes it to take up more space than 28432 in registers starting at register number REGNO (as determined by 28433 multiplying GCC's notion of the size of the register when 28434 containing this mode by the number of registers returned by 28435 'HARD_REGNO_NREGS'). By default this is zero. 28436 28437 For example, if a floating-point value is stored in three 32-bit 28438 registers but takes up 128 bits in memory, then this would be 28439 nonzero. 28440 28441 This macros only needs to be defined if there are cases where 28442 'subreg_get_info' would otherwise wrongly determine that a 'subreg' 28443 can be represented by an offset to the register number, when in 28444 fact such a 'subreg' would contain some of the padding not stored 28445 in registers and so not be representable. 28446 28447 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 28448 For values of REGNO and MODE for which 28449 'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 28450 returning the greater number of registers required to hold the 28451 value including any padding. In the example above, the value would 28452 be four. 28453 28454 -- Macro: REGMODE_NATURAL_SIZE (MODE) 28455 Define this macro if the natural size of registers that hold values 28456 of mode MODE is not the word size. It is a C expression that 28457 should give the natural size in bytes for the specified mode. It 28458 is used by the register allocator to try to optimize its results. 28459 This happens for example on SPARC 64-bit where the natural size of 28460 floating-point registers is still 32-bit. 28461 28462 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 28463 A C expression that is nonzero if it is permissible to store a 28464 value of mode MODE in hard register number REGNO (or in several 28465 registers starting with that one). For a machine where all 28466 registers are equivalent, a suitable definition is 28467 28468 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 28469 28470 You need not include code to check for the numbers of fixed 28471 registers, because the allocation mechanism considers them to be 28472 always occupied. 28473 28474 On some machines, double-precision values must be kept in even/odd 28475 register pairs. You can implement that by defining this macro to 28476 reject odd register numbers for such modes. 28477 28478 The minimum requirement for a mode to be OK in a register is that 28479 the 'movMODE' instruction pattern support moves between the 28480 register and other hard register in the same class and that moving 28481 a value into the register and back out not alter it. 28482 28483 Since the same instruction used to move 'word_mode' will work for 28484 all narrower integer modes, it is not necessary on any machine for 28485 'HARD_REGNO_MODE_OK' to distinguish between these modes, provided 28486 you define patterns 'movhi', etc., to take advantage of this. This 28487 is useful because of the interaction between 'HARD_REGNO_MODE_OK' 28488 and 'MODES_TIEABLE_P'; it is very desirable for all integer modes 28489 to be tieable. 28490 28491 Many machines have special registers for floating point arithmetic. 28492 Often people assume that floating point machine modes are allowed 28493 only in floating point registers. This is not true. Any registers 28494 that can hold integers can safely _hold_ a floating point machine 28495 mode, whether or not floating arithmetic can be done on it in those 28496 registers. Integer move instructions can be used to move the 28497 values. 28498 28499 On some machines, though, the converse is true: fixed-point machine 28500 modes may not go in floating registers. This is true if the 28501 floating registers normalize any value stored in them, because 28502 storing a non-floating value there would garble it. In this case, 28503 'HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 28504 floating registers. But if the floating registers do not 28505 automatically normalize, if you can store any bit pattern in one 28506 and retrieve it unchanged without a trap, then any machine mode may 28507 go in a floating register, so you can define this macro to say so. 28508 28509 The primary significance of special floating registers is rather 28510 that they are the registers acceptable in floating point arithmetic 28511 instructions. However, this is of no concern to 28512 'HARD_REGNO_MODE_OK'. You handle it by writing the proper 28513 constraints for those instructions. 28514 28515 On some machines, the floating registers are especially slow to 28516 access, so that it is better to store a value in a stack frame than 28517 in such a register if floating point arithmetic is not being done. 28518 As long as the floating registers are not in class 'GENERAL_REGS', 28519 they will not be used unless some pattern's constraint asks for 28520 one. 28521 28522 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 28523 A C expression that is nonzero if it is OK to rename a hard 28524 register FROM to another hard register TO. 28525 28526 One common use of this macro is to prevent renaming of a register 28527 to another register that is not saved by a prologue in an interrupt 28528 handler. 28529 28530 The default is always nonzero. 28531 28532 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 28533 A C expression that is nonzero if a value of mode MODE1 is 28534 accessible in mode MODE2 without copying. 28535 28536 If 'HARD_REGNO_MODE_OK (R, MODE1)' and 'HARD_REGNO_MODE_OK (R, 28537 MODE2)' are always the same for any R, then 'MODES_TIEABLE_P 28538 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 28539 should define this macro to return zero unless some other mechanism 28540 ensures the accessibility of the value in a narrower mode. 28541 28542 You should define this macro to return nonzero in as many cases as 28543 possible since doing so will allow GCC to perform better register 28544 allocation. 28545 28546 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 28547 This target hook should return 'true' if it is OK to use a hard 28548 register REGNO as scratch reg in peephole2. 28549 28550 One common use of this macro is to prevent using of a register that 28551 is not saved by a prologue in an interrupt handler. 28552 28553 The default version of this hook always returns 'true'. 28554 28555 -- Macro: AVOID_CCMODE_COPIES 28556 Define this macro if the compiler should avoid copies to/from 28557 'CCmode' registers. You should only define this macro if support 28558 for copying to/from 'CCmode' is incomplete. 28559 28560 28561 File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 28562 28563 17.7.4 Handling Leaf Functions 28564 ------------------------------ 28565 28566 On some machines, a leaf function (i.e., one which makes no calls) can 28567 run more efficiently if it does not make its own register window. Often 28568 this means it is required to receive its arguments in the registers 28569 where they are passed by the caller, instead of the registers where they 28570 would normally arrive. 28571 28572 The special treatment for leaf functions generally applies only when 28573 other conditions are met; for example, often they may use only those 28574 registers for its own variables and temporaries. We use the term "leaf 28575 function" to mean a function that is suitable for this special handling, 28576 so that functions with no calls are not necessarily "leaf functions". 28577 28578 GCC assigns register numbers before it knows whether the function is 28579 suitable for leaf function treatment. So it needs to renumber the 28580 registers in order to output a leaf function. The following macros 28581 accomplish this. 28582 28583 -- Macro: LEAF_REGISTERS 28584 Name of a char vector, indexed by hard register number, which 28585 contains 1 for a register that is allowable in a candidate for leaf 28586 function treatment. 28587 28588 If leaf function treatment involves renumbering the registers, then 28589 the registers marked here should be the ones before 28590 renumbering--those that GCC would ordinarily allocate. The 28591 registers which will actually be used in the assembler code, after 28592 renumbering, should not be marked with 1 in this vector. 28593 28594 Define this macro only if the target machine offers a way to 28595 optimize the treatment of leaf functions. 28596 28597 -- Macro: LEAF_REG_REMAP (REGNO) 28598 A C expression whose value is the register number to which REGNO 28599 should be renumbered, when a function is treated as a leaf 28600 function. 28601 28602 If REGNO is a register number which should not appear in a leaf 28603 function before renumbering, then the expression should yield -1, 28604 which will cause the compiler to abort. 28605 28606 Define this macro only if the target machine offers a way to 28607 optimize the treatment of leaf functions, and registers need to be 28608 renumbered to do this. 28609 28610 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must 28611 usually treat leaf functions specially. They can test the C variable 28612 'current_function_is_leaf' which is nonzero for leaf functions. 28613 'current_function_is_leaf' is set prior to local register allocation and 28614 is valid for the remaining compiler passes. They can also test the C 28615 variable 'current_function_uses_only_leaf_regs' which is nonzero for 28616 leaf functions which only use leaf registers. 28617 'current_function_uses_only_leaf_regs' is valid after all passes that 28618 modify the instructions have been run and is only useful if 28619 'LEAF_REGISTERS' is defined. 28620 28621 28622 File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 28623 28624 17.7.5 Registers That Form a Stack 28625 ---------------------------------- 28626 28627 There are special features to handle computers where some of the 28628 "registers" form a stack. Stack registers are normally written by 28629 pushing onto the stack, and are numbered relative to the top of the 28630 stack. 28631 28632 Currently, GCC can only handle one group of stack-like registers, and 28633 they must be consecutively numbered. Furthermore, the existing support 28634 for stack-like registers is specific to the 80387 floating point 28635 coprocessor. If you have a new architecture that uses stack-like 28636 registers, you will need to do substantial work on 'reg-stack.c' and 28637 write your machine description to cooperate with it, as well as defining 28638 these macros. 28639 28640 -- Macro: STACK_REGS 28641 Define this if the machine has any stack-like registers. 28642 28643 -- Macro: STACK_REG_COVER_CLASS 28644 This is a cover class containing the stack registers. Define this 28645 if the machine has any stack-like registers. 28646 28647 -- Macro: FIRST_STACK_REG 28648 The number of the first stack-like register. This one is the top 28649 of the stack. 28650 28651 -- Macro: LAST_STACK_REG 28652 The number of the last stack-like register. This one is the bottom 28653 of the stack. 28654 28655 28656 File: gccint.info, Node: Register Classes, Next: Old Constraints, Prev: Registers, Up: Target Macros 28657 28658 17.8 Register Classes 28659 ===================== 28660 28661 On many machines, the numbered registers are not all equivalent. For 28662 example, certain registers may not be allowed for indexed addressing; 28663 certain registers may not be allowed in some instructions. These 28664 machine restrictions are described to the compiler using "register 28665 classes". 28666 28667 You define a number of register classes, giving each one a name and 28668 saying which of the registers belong to it. Then you can specify 28669 register classes that are allowed as operands to particular instruction 28670 patterns. 28671 28672 In general, each register will belong to several classes. In fact, one 28673 class must be named 'ALL_REGS' and contain all the registers. Another 28674 class must be named 'NO_REGS' and contain no registers. Often the union 28675 of two classes will be another class; however, this is not required. 28676 28677 One of the classes must be named 'GENERAL_REGS'. There is nothing 28678 terribly special about the name, but the operand constraint letters 'r' 28679 and 'g' specify this class. If 'GENERAL_REGS' is the same as 28680 'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'. 28681 28682 Order the classes so that if class X is contained in class Y then X has 28683 a lower class number than Y. 28684 28685 The way classes other than 'GENERAL_REGS' are specified in operand 28686 constraints is through machine-dependent operand constraint letters. 28687 You can define such letters to correspond to various classes, then use 28688 them in operand constraints. 28689 28690 You must define the narrowest register classes for allocatable 28691 registers, so that each class either has no subclasses, or that for some 28692 mode, the move cost between registers within the class is cheaper than 28693 moving a register in the class to or from memory (*note Costs::). 28694 28695 You should define a class for the union of two classes whenever some 28696 instruction allows both classes. For example, if an instruction allows 28697 either a floating point (coprocessor) register or a general register for 28698 a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS' 28699 which includes both of them. Otherwise you will get suboptimal code, or 28700 even internal compiler errors when reload cannot find a register in the 28701 class computed via 'reg_class_subunion'. 28702 28703 You must also specify certain redundant information about the register 28704 classes: for each class, which classes contain it and which ones are 28705 contained in it; for each pair of classes, the largest class contained 28706 in their union. 28707 28708 When a value occupying several consecutive registers is expected in a 28709 certain class, all the registers used must belong to that class. 28710 Therefore, register classes cannot be used to enforce a requirement for 28711 a register pair to start with an even-numbered register. The way to 28712 specify this requirement is with 'HARD_REGNO_MODE_OK'. 28713 28714 Register classes used for input-operands of bitwise-and or shift 28715 instructions have a special requirement: each such class must have, for 28716 each fixed-point machine mode, a subclass whose registers can transfer 28717 that mode to or from memory. For example, on some machines, the 28718 operations for single-byte values ('QImode') are limited to certain 28719 registers. When this is so, each register class that is used in a 28720 bitwise-and or shift instruction must have a subclass consisting of 28721 registers from which single-byte values can be loaded or stored. This 28722 is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to 28723 return. 28724 28725 -- Data type: enum reg_class 28726 An enumerated type that must be defined with all the register class 28727 names as enumerated values. 'NO_REGS' must be first. 'ALL_REGS' 28728 must be the last register class, followed by one more enumerated 28729 value, 'LIM_REG_CLASSES', which is not a register class but rather 28730 tells how many classes there are. 28731 28732 Each register class has a number, which is the value of casting the 28733 class name to type 'int'. The number serves as an index in many of 28734 the tables described below. 28735 28736 -- Macro: N_REG_CLASSES 28737 The number of distinct register classes, defined as follows: 28738 28739 #define N_REG_CLASSES (int) LIM_REG_CLASSES 28740 28741 -- Macro: REG_CLASS_NAMES 28742 An initializer containing the names of the register classes as C 28743 string constants. These names are used in writing some of the 28744 debugging dumps. 28745 28746 -- Macro: REG_CLASS_CONTENTS 28747 An initializer containing the contents of the register classes, as 28748 integers which are bit masks. The Nth integer specifies the 28749 contents of class N. The way the integer MASK is interpreted is 28750 that register R is in the class if 'MASK & (1 << R)' is 1. 28751 28752 When the machine has more than 32 registers, an integer does not 28753 suffice. Then the integers are replaced by sub-initializers, 28754 braced groupings containing several integers. Each sub-initializer 28755 must be suitable as an initializer for the type 'HARD_REG_SET' 28756 which is defined in 'hard-reg-set.h'. In this situation, the first 28757 integer in each sub-initializer corresponds to registers 0 through 28758 31, the second integer to registers 32 through 63, and so on. 28759 28760 -- Macro: REGNO_REG_CLASS (REGNO) 28761 A C expression whose value is a register class containing hard 28762 register REGNO. In general there is more than one such class; 28763 choose a class which is "minimal", meaning that no smaller class 28764 also contains the register. 28765 28766 -- Macro: BASE_REG_CLASS 28767 A macro whose definition is the name of the class to which a valid 28768 base register must belong. A base register is one used in an 28769 address which is the register value plus a displacement. 28770 28771 -- Macro: MODE_BASE_REG_CLASS (MODE) 28772 This is a variation of the 'BASE_REG_CLASS' macro which allows the 28773 selection of a base register in a mode dependent manner. If MODE 28774 is VOIDmode then it should return the same value as 28775 'BASE_REG_CLASS'. 28776 28777 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 28778 A C expression whose value is the register class to which a valid 28779 base register must belong in order to be used in a base plus index 28780 register address. You should define this macro if base plus index 28781 addresses have different requirements than other base register 28782 uses. 28783 28784 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE, 28785 INDEX_CODE) 28786 A C expression whose value is the register class to which a valid 28787 base register for a memory reference in mode MODE to address space 28788 ADDRESS_SPACE must belong. OUTER_CODE and INDEX_CODE define the 28789 context in which the base register occurs. OUTER_CODE is the code 28790 of the immediately enclosing expression ('MEM' for the top level of 28791 an address, 'ADDRESS' for something that occurs in an 28792 'address_operand'). INDEX_CODE is the code of the corresponding 28793 index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise. 28794 28795 -- Macro: INDEX_REG_CLASS 28796 A macro whose definition is the name of the class to which a valid 28797 index register must belong. An index register is one used in an 28798 address where its value is either multiplied by a scale factor or 28799 added to another register (as well as added to a displacement). 28800 28801 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 28802 A C expression which is nonzero if register number NUM is suitable 28803 for use as a base register in operand addresses. 28804 28805 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 28806 A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that 28807 that expression may examine the mode of the memory reference in 28808 MODE. You should define this macro if the mode of the memory 28809 reference affects whether a register may be used as a base 28810 register. If you define this macro, the compiler will use it 28811 instead of 'REGNO_OK_FOR_BASE_P'. The mode may be 'VOIDmode' for 28812 addresses that appear outside a 'MEM', i.e., as an 28813 'address_operand'. 28814 28815 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 28816 A C expression which is nonzero if register number NUM is suitable 28817 for use as a base register in base plus index operand addresses, 28818 accessing memory in mode MODE. It may be either a suitable hard 28819 register or a pseudo register that has been allocated such a hard 28820 register. You should define this macro if base plus index 28821 addresses have different requirements than other base register 28822 uses. 28823 28824 Use of this macro is deprecated; please use the more general 28825 'REGNO_MODE_CODE_OK_FOR_BASE_P'. 28826 28827 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE, 28828 OUTER_CODE, INDEX_CODE) 28829 A C expression which is nonzero if register number NUM is suitable 28830 for use as a base register in operand addresses, accessing memory 28831 in mode MODE in address space ADDRESS_SPACE. This is similar to 28832 'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine 28833 the context in which the register appears in the memory reference. 28834 OUTER_CODE is the code of the immediately enclosing expression 28835 ('MEM' if at the top level of the address, 'ADDRESS' for something 28836 that occurs in an 'address_operand'). INDEX_CODE is the code of 28837 the corresponding index expression if OUTER_CODE is 'PLUS'; 28838 'SCRATCH' otherwise. The mode may be 'VOIDmode' for addresses that 28839 appear outside a 'MEM', i.e., as an 'address_operand'. 28840 28841 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 28842 A C expression which is nonzero if register number NUM is suitable 28843 for use as an index register in operand addresses. It may be 28844 either a suitable hard register or a pseudo register that has been 28845 allocated such a hard register. 28846 28847 The difference between an index register and a base register is 28848 that the index register may be scaled. If an address involves the 28849 sum of two registers, neither one of them scaled, then either one 28850 may be labeled the "base" and the other the "index"; but whichever 28851 labeling is used must fit the machine's constraints of which 28852 registers may serve in each capacity. The compiler will try both 28853 labelings, looking for one that is valid, and will reload one or 28854 both registers only if neither labeling works. 28855 28856 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t 28857 RCLASS) 28858 A target hook that places additional preference on the register 28859 class to use when it is necessary to rename a register in class 28860 RCLASS to another class, or perhaps NO_REGS, if no preferred 28861 register class is found or hook 'preferred_rename_class' is not 28862 implemented. Sometimes returning a more restrictive class makes 28863 better code. For example, on ARM, thumb-2 instructions using 28864 'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'. 28865 By returning 'LO_REGS' from 'preferred_rename_class', code size can 28866 be reduced. 28867 28868 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X, 28869 reg_class_t RCLASS) 28870 A target hook that places additional restrictions on the register 28871 class to use when it is necessary to copy value X into a register 28872 in class RCLASS. The value is a register class; perhaps RCLASS, or 28873 perhaps another, smaller class. 28874 28875 The default version of this hook always returns value of 'rclass' 28876 argument. 28877 28878 Sometimes returning a more restrictive class makes better code. 28879 For example, on the 68000, when X is an integer constant that is in 28880 range for a 'moveq' instruction, the value of this macro is always 28881 'DATA_REGS' as long as RCLASS includes the data registers. 28882 Requiring a data register guarantees that a 'moveq' will be used. 28883 28884 One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return 28885 RCLASS is if X is a legitimate constant which cannot be loaded into 28886 some register class. By returning 'NO_REGS' you can force X into a 28887 memory location. For example, rs6000 can load immediate values 28888 into general-purpose registers, but does not have an instruction 28889 for loading an immediate value into a floating-point register, so 28890 'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 28891 floating-point constant. If the constant can't be loaded into any 28892 kind of register, code generation will be better if 28893 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 28894 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 28895 28896 If an insn has pseudos in it after register allocation, reload will 28897 go through the alternatives and call repeatedly 28898 'TARGET_PREFERRED_RELOAD_CLASS' to find the best one. Returning 28899 'NO_REGS', in this case, makes reload add a '!' in front of the 28900 constraint: the x86 back-end uses this feature to discourage usage 28901 of 387 registers when math is done in the SSE registers (and vice 28902 versa). 28903 28904 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 28905 A C expression that places additional restrictions on the register 28906 class to use when it is necessary to copy value X into a register 28907 in class CLASS. The value is a register class; perhaps CLASS, or 28908 perhaps another, smaller class. On many machines, the following 28909 definition is safe: 28910 28911 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 28912 28913 Sometimes returning a more restrictive class makes better code. 28914 For example, on the 68000, when X is an integer constant that is in 28915 range for a 'moveq' instruction, the value of this macro is always 28916 'DATA_REGS' as long as CLASS includes the data registers. 28917 Requiring a data register guarantees that a 'moveq' will be used. 28918 28919 One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if 28920 X is a legitimate constant which cannot be loaded into some 28921 register class. By returning 'NO_REGS' you can force X into a 28922 memory location. For example, rs6000 can load immediate values 28923 into general-purpose registers, but does not have an instruction 28924 for loading an immediate value into a floating-point register, so 28925 'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 28926 floating-point constant. If the constant can't be loaded into any 28927 kind of register, code generation will be better if 28928 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 28929 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 28930 28931 If an insn has pseudos in it after register allocation, reload will 28932 go through the alternatives and call repeatedly 28933 'PREFERRED_RELOAD_CLASS' to find the best one. Returning 28934 'NO_REGS', in this case, makes reload add a '!' in front of the 28935 constraint: the x86 back-end uses this feature to discourage usage 28936 of 387 registers when math is done in the SSE registers (and vice 28937 versa). 28938 28939 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 28940 X, reg_class_t RCLASS) 28941 Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads 28942 instead of input reloads. 28943 28944 The default version of this hook always returns value of 'rclass' 28945 argument. 28946 28947 You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to 28948 discourage reload from using some alternatives, like 28949 'TARGET_PREFERRED_RELOAD_CLASS'. 28950 28951 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 28952 A C expression that places additional restrictions on the register 28953 class to use when it is necessary to be able to hold a value of 28954 mode MODE in a reload register for which class CLASS would 28955 ordinarily be used. 28956 28957 Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when 28958 there are certain modes that simply can't go in certain reload 28959 classes. 28960 28961 The value is a register class; perhaps CLASS, or perhaps another, 28962 smaller class. 28963 28964 Don't define this macro unless the target machine has limitations 28965 which require the macro to do something nontrivial. 28966 28967 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X, 28968 reg_class_t RELOAD_CLASS, enum machine_mode RELOAD_MODE, 28969 secondary_reload_info *SRI) 28970 Many machines have some registers that cannot be copied directly to 28971 or from memory or even from other types of registers. An example 28972 is the 'MQ' register, which on most machines, can only be copied to 28973 or from general registers, but not memory. Below, we shall be 28974 using the term 'intermediate register' when a move operation cannot 28975 be performed directly, but has to be done by copying the source 28976 into the intermediate register first, and then copying the 28977 intermediate register to the destination. An intermediate register 28978 always has the same mode as source and destination. Since it holds 28979 the actual value being copied, reload might apply optimizations to 28980 re-use an intermediate register and eliding the copy from the 28981 source when it can determine that the intermediate register still 28982 holds the required value. 28983 28984 Another kind of secondary reload is required on some machines which 28985 allow copying all registers to and from memory, but require a 28986 scratch register for stores to some memory locations (e.g., those 28987 with symbolic address on the RT, and those with certain symbolic 28988 address on the SPARC when compiling PIC). Scratch registers need 28989 not have the same mode as the value being copied, and usually hold 28990 a different value than that being copied. Special patterns in the 28991 md file are needed to describe how the copy is performed with the 28992 help of the scratch register; these patterns also describe the 28993 number, register class(es) and mode(s) of the scratch register(s). 28994 28995 In some cases, both an intermediate and a scratch register are 28996 required. 28997 28998 For input reloads, this target hook is called with nonzero IN_P, 28999 and X is an rtx that needs to be copied to a register of class 29000 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 29001 is called with zero IN_P, and a register of class RELOAD_CLASS 29002 needs to be copied to rtx X in RELOAD_MODE. 29003 29004 If copying a register of RELOAD_CLASS from/to X requires an 29005 intermediate register, the hook 'secondary_reload' should return 29006 the register class required for this intermediate register. If no 29007 intermediate register is required, it should return NO_REGS. If 29008 more than one intermediate register is required, describe the one 29009 that is closest in the copy chain to the reload register. 29010 29011 If scratch registers are needed, you also have to describe how to 29012 perform the copy from/to the reload register to/from this closest 29013 intermediate register. Or if no intermediate register is required, 29014 but still a scratch register is needed, describe the copy from/to 29015 the reload register to/from the reload operand X. 29016 29017 You do this by setting 'sri->icode' to the instruction code of a 29018 pattern in the md file which performs the move. Operands 0 and 1 29019 are the output and input of this copy, respectively. Operands from 29020 operand 2 onward are for scratch operands. These scratch operands 29021 must have a mode, and a single-register-class output constraint. 29022 29023 When an intermediate register is used, the 'secondary_reload' hook 29024 will be called again to determine how to copy the intermediate 29025 register to/from the reload operand X, so your hook must also have 29026 code to handle the register class of the intermediate operand. 29027 29028 X might be a pseudo-register or a 'subreg' of a pseudo-register, 29029 which could either be in a hard register or in memory. Use 29030 'true_regnum' to find out; it will return -1 if the pseudo is in 29031 memory and the hard register number if it is in a register. 29032 29033 Scratch operands in memory (constraint '"=m"' / '"=&m"') are 29034 currently not supported. For the time being, you will have to 29035 continue to use 'SECONDARY_MEMORY_NEEDED' for that purpose. 29036 29037 'copy_cost' also uses this target hook to find out how values are 29038 copied. If you want it to include some extra cost for the need to 29039 allocate (a) scratch register(s), set 'sri->extra_cost' to the 29040 additional cost. Or if two dependent moves are supposed to have a 29041 lower cost than the sum of the individual moves due to expected 29042 fortuitous scheduling and/or special forwarding logic, you can set 29043 'sri->extra_cost' to a negative amount. 29044 29045 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 29046 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 29047 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 29048 These macros are obsolete, new ports should use the target hook 29049 'TARGET_SECONDARY_RELOAD' instead. 29050 29051 These are obsolete macros, replaced by the 29052 'TARGET_SECONDARY_RELOAD' target hook. Older ports still define 29053 these macros to indicate to the reload phase that it may need to 29054 allocate at least one register for a reload in addition to the 29055 register to contain the data. Specifically, if copying X to a 29056 register CLASS in MODE requires an intermediate register, you were 29057 supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the 29058 largest register class all of whose registers can be used as 29059 intermediate registers or scratch registers. 29060 29061 If copying a register CLASS in MODE to X requires an intermediate 29062 or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 29063 to be defined be defined to return the largest register class 29064 required. If the requirements for input and output reloads were 29065 the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used 29066 instead of defining both macros identically. 29067 29068 The values returned by these macros are often 'GENERAL_REGS'. 29069 Return 'NO_REGS' if no spare register is needed; i.e., if X can be 29070 directly copied to or from a register of CLASS in MODE without 29071 requiring a scratch register. Do not define this macro if it would 29072 always return 'NO_REGS'. 29073 29074 If a scratch register is required (either with or without an 29075 intermediate register), you were supposed to define patterns for 29076 'reload_inM' or 'reload_outM', as required (*note Standard Names::. 29077 These patterns, which were normally implemented with a 29078 'define_expand', should be similar to the 'movM' patterns, except 29079 that operand 2 is the scratch register. 29080 29081 These patterns need constraints for the reload register and scratch 29082 register that contain a single register class. If the original 29083 reload register (whose class is CLASS) can meet the constraint 29084 given in the pattern, the value returned by these macros is used 29085 for the class of the scratch register. Otherwise, two additional 29086 reload registers are required. Their classes are obtained from the 29087 constraints in the insn pattern. 29088 29089 X might be a pseudo-register or a 'subreg' of a pseudo-register, 29090 which could either be in a hard register or in memory. Use 29091 'true_regnum' to find out; it will return -1 if the pseudo is in 29092 memory and the hard register number if it is in a register. 29093 29094 These macros should not be used in the case where a particular 29095 class of registers can only be copied to memory and not to another 29096 class of registers. In that case, secondary reload registers are 29097 not needed and would not be helpful. Instead, a stack location 29098 must be used to perform the copy and the 'movM' pattern should use 29099 memory as an intermediate storage. This case often occurs between 29100 floating-point and general registers. 29101 29102 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 29103 Certain machines have the property that some registers cannot be 29104 copied to some other registers without using memory. Define this 29105 macro on those machines to be a C expression that is nonzero if 29106 objects of mode M in registers of CLASS1 can only be copied to 29107 registers of class CLASS2 by storing a register of CLASS1 into 29108 memory and loading that memory location into a register of CLASS2. 29109 29110 Do not define this macro if its value would always be zero. 29111 29112 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 29113 Normally when 'SECONDARY_MEMORY_NEEDED' is defined, the compiler 29114 allocates a stack slot for a memory location needed for register 29115 copies. If this macro is defined, the compiler instead uses the 29116 memory location defined by this macro. 29117 29118 Do not define this macro if you do not define 29119 'SECONDARY_MEMORY_NEEDED'. 29120 29121 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 29122 When the compiler needs a secondary memory location to copy between 29123 two registers of mode MODE, it normally allocates sufficient memory 29124 to hold a quantity of 'BITS_PER_WORD' bits and performs the store 29125 and load operations in a mode that many bits wide and whose class 29126 is the same as that of MODE. 29127 29128 This is right thing to do on most machines because it ensures that 29129 all bits of the register are copied and prevents accesses to the 29130 registers in a narrower mode, which some machines prohibit for 29131 floating-point registers. 29132 29133 However, this default behavior is not correct on some machines, 29134 such as the DEC Alpha, that store short integers in floating-point 29135 registers differently than in integer registers. On those 29136 machines, the default widening will not work correctly and you must 29137 define this macro to suppress that widening in some cases. See the 29138 file 'alpha.h' for details. 29139 29140 Do not define this macro if you do not define 29141 'SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 29142 'BITS_PER_WORD' bits wide is correct for your machine. 29143 29144 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS) 29145 A target hook which returns 'true' if pseudos that have been 29146 assigned to registers of class RCLASS would likely be spilled 29147 because registers of RCLASS are needed for spill registers. 29148 29149 The default version of this target hook returns 'true' if RCLASS 29150 has exactly one register and 'false' otherwise. On most machines, 29151 this default should be used. For generally register-starved 29152 machines, such as i386, or machines with right register 29153 constraints, such as SH, this hook can be used to avoid excessive 29154 spilling. 29155 29156 This hook is also used by some of the global intra-procedural code 29157 transformations to throtle code motion, to avoid increasing 29158 register pressure. 29159 29160 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t 29161 RCLASS, enum machine_mode MODE) 29162 A target hook returns the maximum number of consecutive registers 29163 of class RCLASS needed to hold a value of mode MODE. 29164 29165 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 29166 the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)' 29167 target hook should be the maximum value of 'HARD_REGNO_NREGS 29168 (REGNO, MODE)' for all REGNO values in the class RCLASS. 29169 29170 This target hook helps control the handling of multiple-word values 29171 in the reload pass. 29172 29173 The default version of this target hook returns the size of MODE in 29174 words. 29175 29176 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 29177 A C expression for the maximum number of consecutive registers of 29178 class CLASS needed to hold a value of mode MODE. 29179 29180 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 29181 the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should be 29182 the maximum value of 'HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO 29183 values in the class CLASS. 29184 29185 This macro helps control the handling of multiple-word values in 29186 the reload pass. 29187 29188 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 29189 If defined, a C expression that returns nonzero for a CLASS for 29190 which a change from mode FROM to mode TO is invalid. 29191 29192 For the example, loading 32-bit integer or floating-point objects 29193 into floating-point registers on the Alpha extends them to 64 bits. 29194 Therefore loading a 64-bit object and then storing it as a 32-bit 29195 object does not store the low-order 32 bits, as would be the case 29196 for a normal register. Therefore, 'alpha.h' defines 29197 'CANNOT_CHANGE_MODE_CLASS' as below: 29198 29199 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 29200 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 29201 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 29202 29203 -- Target Hook: bool TARGET_LRA_P (void) 29204 A target hook which returns true if we use LRA instead of reload 29205 pass. It means that LRA was ported to the target. The default 29206 version of this target hook returns always false. 29207 29208 -- Target Hook: int TARGET_REGISTER_PRIORITY (int) 29209 A target hook which returns the register priority number to which 29210 the register HARD_REGNO belongs to. The bigger the number, the 29211 more preferable the hard register usage (when all other conditions 29212 are the same). This hook can be used to prefer some hard register 29213 over others in LRA. For example, some x86-64 register usage needs 29214 additional prefix which makes instructions longer. The hook can 29215 return lower priority number for such registers make them less 29216 favorable and as result making the generated code smaller. The 29217 default version of this target hook returns always zero. 29218 29219 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void) 29220 A target hook which returns true if an address with the same 29221 structure can have different maximal legitimate displacement. For 29222 example, the displacement can depend on memory mode or on operand 29223 combinations in the insn. The default version of this target hook 29224 returns always false. 29225 29226 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, enum 29227 MACHINE_MODE) 29228 This hook defines a class of registers which could be used for 29229 spilling pseudos of the given mode and class, or 'NO_REGS' if only 29230 memory should be used. Not defining this hook is equivalent to 29231 returning 'NO_REGS' for all inputs. 29232 29233 29234 File: gccint.info, Node: Old Constraints, Next: Stack and Calling, Prev: Register Classes, Up: Target Macros 29235 29236 17.9 Obsolete Macros for Defining Constraints 29237 ============================================= 29238 29239 Machine-specific constraints can be defined with these macros instead of 29240 the machine description constructs described in *note Define 29241 Constraints::. This mechanism is obsolete. New ports should not use 29242 it; old ports should convert to the new mechanism. 29243 29244 -- Macro: CONSTRAINT_LEN (CHAR, STR) 29245 For the constraint at the start of STR, which starts with the 29246 letter C, return the length. This allows you to have register 29247 class / constant / extra constraints that are longer than a single 29248 letter; you don't need to define this macro if you can do with 29249 single-letter constraints only. The definition of this macro 29250 should use DEFAULT_CONSTRAINT_LEN for all the characters that you 29251 don't want to handle specially. There are some sanity checks in 29252 genoutput.c that check the constraint lengths for the md file, so 29253 you can also use this macro to help you while you are transitioning 29254 from a byzantine single-letter-constraint scheme: when you return a 29255 negative length for a constraint you want to re-use, genoutput will 29256 complain about every instance where it is used in the md file. 29257 29258 -- Macro: REG_CLASS_FROM_LETTER (CHAR) 29259 A C expression which defines the machine-dependent operand 29260 constraint letters for register classes. If CHAR is such a letter, 29261 the value should be the register class corresponding to it. 29262 Otherwise, the value should be 'NO_REGS'. The register letter 'r', 29263 corresponding to class 'GENERAL_REGS', will not be passed to this 29264 macro; you do not need to handle it. 29265 29266 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR) 29267 Like 'REG_CLASS_FROM_LETTER', but you also get the constraint 29268 string passed in STR, so that you can use suffixes to distinguish 29269 between different variants. 29270 29271 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C) 29272 A C expression that defines the machine-dependent operand 29273 constraint letters ('I', 'J', 'K', ... 'P') that specify particular 29274 ranges of integer values. If C is one of those letters, the 29275 expression should check that VALUE, an integer, is in the 29276 appropriate range and return 1 if so, 0 otherwise. If C is not one 29277 of those letters, the value should be 0 regardless of VALUE. 29278 29279 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 29280 Like 'CONST_OK_FOR_LETTER_P', but you also get the constraint 29281 string passed in STR, so that you can use suffixes to distinguish 29282 between different variants. 29283 29284 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C) 29285 A C expression that defines the machine-dependent operand 29286 constraint letters that specify particular ranges of 'const_double' 29287 values ('G' or 'H'). 29288 29289 If C is one of those letters, the expression should check that 29290 VALUE, an RTX of code 'const_double', is in the appropriate range 29291 and return 1 if so, 0 otherwise. If C is not one of those letters, 29292 the value should be 0 regardless of VALUE. 29293 29294 'const_double' is used for all floating-point constants and for 29295 'DImode' fixed-point constants. A given letter can accept either 29296 or both kinds of values. It can use 'GET_MODE' to distinguish 29297 between these kinds. 29298 29299 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 29300 Like 'CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the 29301 constraint string passed in STR, so that you can use suffixes to 29302 distinguish between different variants. 29303 29304 -- Macro: EXTRA_CONSTRAINT (VALUE, C) 29305 A C expression that defines the optional machine-dependent 29306 constraint letters that can be used to segregate specific types of 29307 operands, usually memory references, for the target machine. Any 29308 letter that is not elsewhere defined and not matched by 29309 'REG_CLASS_FROM_LETTER' / 'REG_CLASS_FROM_CONSTRAINT' may be used. 29310 Normally this macro will not be defined. 29311 29312 If it is required for a particular target machine, it should return 29313 1 if VALUE corresponds to the operand type represented by the 29314 constraint letter C. If C is not defined as an extra constraint, 29315 the value returned should be 0 regardless of VALUE. 29316 29317 For example, on the ROMP, load instructions cannot have their 29318 output in r0 if the memory reference contains a symbolic address. 29319 Constraint letter 'Q' is defined as representing a memory address 29320 that does _not_ contain a symbolic address. An alternative is 29321 specified with a 'Q' constraint on the input and 'r' on the output. 29322 The next alternative specifies 'm' on the input and a register 29323 class that does not include r0 on the output. 29324 29325 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR) 29326 Like 'EXTRA_CONSTRAINT', but you also get the constraint string 29327 passed in STR, so that you can use suffixes to distinguish between 29328 different variants. 29329 29330 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR) 29331 A C expression that defines the optional machine-dependent 29332 constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT', 29333 that should be treated like memory constraints by the reload pass. 29334 29335 It should return 1 if the operand type represented by the 29336 constraint at the start of STR, the first letter of which is the 29337 letter C, comprises a subset of all memory references including all 29338 those whose address is simply a base register. This allows the 29339 reload pass to reload an operand, if it does not directly 29340 correspond to the operand type of C, by copying its address into a 29341 base register. 29342 29343 For example, on the S/390, some instructions do not accept 29344 arbitrary memory references, but only those that do not make use of 29345 an index register. The constraint letter 'Q' is defined via 29346 'EXTRA_CONSTRAINT' as representing a memory address of this type. 29347 If the letter 'Q' is marked as 'EXTRA_MEMORY_CONSTRAINT', a 'Q' 29348 constraint can handle any memory operand, because the reload pass 29349 knows it can be reloaded by copying the memory address into a base 29350 register if required. This is analogous to the way an 'o' 29351 constraint can handle any memory operand. 29352 29353 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR) 29354 A C expression that defines the optional machine-dependent 29355 constraint letters, amongst those accepted by 'EXTRA_CONSTRAINT' / 29356 'EXTRA_CONSTRAINT_STR', that should be treated like address 29357 constraints by the reload pass. 29358 29359 It should return 1 if the operand type represented by the 29360 constraint at the start of STR, which starts with the letter C, 29361 comprises a subset of all memory addresses including all those that 29362 consist of just a base register. This allows the reload pass to 29363 reload an operand, if it does not directly correspond to the 29364 operand type of STR, by copying it into a base register. 29365 29366 Any constraint marked as 'EXTRA_ADDRESS_CONSTRAINT' can only be 29367 used with the 'address_operand' predicate. It is treated 29368 analogously to the 'p' constraint. 29369 29370 29371 File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Old Constraints, Up: Target Macros 29372 29373 17.10 Stack Layout and Calling Conventions 29374 ========================================== 29375 29376 This describes the stack layout and calling conventions. 29377 29378 * Menu: 29379 29380 * Frame Layout:: 29381 * Exception Handling:: 29382 * Stack Checking:: 29383 * Frame Registers:: 29384 * Elimination:: 29385 * Stack Arguments:: 29386 * Register Arguments:: 29387 * Scalar Return:: 29388 * Aggregate Return:: 29389 * Caller Saves:: 29390 * Function Entry:: 29391 * Profiling:: 29392 * Tail Calls:: 29393 * Stack Smashing Protection:: 29394 29395 29396 File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 29397 29398 17.10.1 Basic Stack Layout 29399 -------------------------- 29400 29401 Here is the basic stack layout. 29402 29403 -- Macro: STACK_GROWS_DOWNWARD 29404 Define this macro if pushing a word onto the stack moves the stack 29405 pointer to a smaller address. 29406 29407 When we say, "define this macro if ...", it means that the compiler 29408 checks this macro only with '#ifdef' so the precise definition used 29409 does not matter. 29410 29411 -- Macro: STACK_PUSH_CODE 29412 This macro defines the operation used when something is pushed on 29413 the stack. In RTL, a push operation will be '(set (mem 29414 (STACK_PUSH_CODE (reg sp))) ...)' 29415 29416 The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'. 29417 Which of these is correct depends on the stack direction and on 29418 whether the stack pointer points to the last item on the stack or 29419 whether it points to the space for the next item on the stack. 29420 29421 The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is defined, 29422 which is almost always right, and 'PRE_INC' otherwise, which is 29423 often wrong. 29424 29425 -- Macro: FRAME_GROWS_DOWNWARD 29426 Define this macro to nonzero value if the addresses of local 29427 variable slots are at negative offsets from the frame pointer. 29428 29429 -- Macro: ARGS_GROW_DOWNWARD 29430 Define this macro if successive arguments to a function occupy 29431 decreasing addresses on the stack. 29432 29433 -- Macro: STARTING_FRAME_OFFSET 29434 Offset from the frame pointer to the first local variable slot to 29435 be allocated. 29436 29437 If 'FRAME_GROWS_DOWNWARD', find the next slot's offset by 29438 subtracting the first slot's length from 'STARTING_FRAME_OFFSET'. 29439 Otherwise, it is found by adding the length of the first slot to 29440 the value 'STARTING_FRAME_OFFSET'. 29441 29442 -- Macro: STACK_ALIGNMENT_NEEDED 29443 Define to zero to disable final alignment of the stack during 29444 reload. The nonzero default for this macro is suitable for most 29445 ports. 29446 29447 On ports where 'STARTING_FRAME_OFFSET' is nonzero or where there is 29448 a register save block following the local block that doesn't 29449 require alignment to 'STACK_BOUNDARY', it may be beneficial to 29450 disable stack alignment and do it in the backend. 29451 29452 -- Macro: STACK_POINTER_OFFSET 29453 Offset from the stack pointer register to the first location at 29454 which outgoing arguments are placed. If not specified, the default 29455 value of zero is used. This is the proper value for most machines. 29456 29457 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 29458 the first location at which outgoing arguments are placed. 29459 29460 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 29461 Offset from the argument pointer register to the first argument's 29462 address. On some machines it may depend on the data type of the 29463 function. 29464 29465 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 29466 the first argument's address. 29467 29468 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 29469 Offset from the stack pointer register to an item dynamically 29470 allocated on the stack, e.g., by 'alloca'. 29471 29472 The default value for this macro is 'STACK_POINTER_OFFSET' plus the 29473 length of the outgoing arguments. The default is correct for most 29474 machines. See 'function.c' for details. 29475 29476 -- Macro: INITIAL_FRAME_ADDRESS_RTX 29477 A C expression whose value is RTL representing the address of the 29478 initial stack frame. This address is passed to 'RETURN_ADDR_RTX' 29479 and 'DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 29480 reasonable default value will be used. Define this macro in order 29481 to make frame pointer elimination work in the presence of 29482 '__builtin_frame_address (count)' and '__builtin_return_address 29483 (count)' for 'count' not equal to zero. 29484 29485 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 29486 A C expression whose value is RTL representing the address in a 29487 stack frame where the pointer to the caller's frame is stored. 29488 Assume that FRAMEADDR is an RTL expression for the address of the 29489 stack frame itself. 29490 29491 If you don't define this macro, the default is to return the value 29492 of FRAMEADDR--that is, the stack frame address is also the address 29493 of the stack word that points to the previous frame. 29494 29495 -- Macro: SETUP_FRAME_ADDRESSES 29496 If defined, a C expression that produces the machine-specific code 29497 to setup the stack so that arbitrary frames can be accessed. For 29498 example, on the SPARC, we must flush all of the register windows to 29499 the stack before we can access arbitrary stack frames. You will 29500 seldom need to define this macro. 29501 29502 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 29503 This target hook should return an rtx that is used to store the 29504 address of the current frame into the built in 'setjmp' buffer. 29505 The default value, 'virtual_stack_vars_rtx', is correct for most 29506 machines. One reason you may need to define this target hook is if 29507 'hard_frame_pointer_rtx' is the appropriate value on your machine. 29508 29509 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 29510 A C expression whose value is RTL representing the value of the 29511 frame address for the current frame. FRAMEADDR is the frame 29512 pointer of the current frame. This is used for 29513 __builtin_frame_address. You need only define this macro if the 29514 frame address is not the same as the frame pointer. Most machines 29515 do not need to define it. 29516 29517 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 29518 A C expression whose value is RTL representing the value of the 29519 return address for the frame COUNT steps up from the current frame, 29520 after the prologue. FRAMEADDR is the frame pointer of the COUNT 29521 frame, or the frame pointer of the COUNT - 1 frame if 29522 'RETURN_ADDR_IN_PREVIOUS_FRAME' is defined. 29523 29524 The value of the expression must always be the correct address when 29525 COUNT is zero, but may be 'NULL_RTX' if there is no way to 29526 determine the return address of other frames. 29527 29528 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 29529 Define this if the return address of a particular stack frame is 29530 accessed from the frame pointer of the previous stack frame. 29531 29532 -- Macro: INCOMING_RETURN_ADDR_RTX 29533 A C expression whose value is RTL representing the location of the 29534 incoming return address at the beginning of any function, before 29535 the prologue. This RTL is either a 'REG', indicating that the 29536 return value is saved in 'REG', or a 'MEM' representing a location 29537 in the stack. 29538 29539 You only need to define this macro if you want to support call 29540 frame debugging information like that provided by DWARF 2. 29541 29542 If this RTL is a 'REG', you should also define 29543 'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'. 29544 29545 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 29546 A C expression whose value is an integer giving a DWARF 2 column 29547 number that may be used as an alternative return column. The 29548 column must not correspond to any gcc hard register (that is, it 29549 must not be in the range of 'DWARF_FRAME_REGNUM'). 29550 29551 This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a 29552 general register, but an alternative column needs to be used for 29553 signal frames. Some targets have also used different frame return 29554 columns over time. 29555 29556 -- Macro: DWARF_ZERO_REG 29557 A C expression whose value is an integer giving a DWARF 2 register 29558 number that is considered to always have the value zero. This 29559 should only be defined if the target has an architected zero 29560 register, and someone decided it was a good idea to use that 29561 register number to terminate the stack backtrace. New ports should 29562 avoid this. 29563 29564 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 29565 *LABEL, rtx PATTERN, int INDEX) 29566 This target hook allows the backend to emit frame-related insns 29567 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 29568 debugging info engine will invoke it on insns of the form 29569 (set (reg) (unspec [...] UNSPEC_INDEX)) 29570 and 29571 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 29572 to let the backend emit the call frame instructions. LABEL is the 29573 CFI label attached to the insn, PATTERN is the pattern of the insn 29574 and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'. 29575 29576 -- Macro: INCOMING_FRAME_SP_OFFSET 29577 A C expression whose value is an integer giving the offset, in 29578 bytes, from the value of the stack pointer register to the top of 29579 the stack frame at the beginning of any function, before the 29580 prologue. The top of the frame is defined to be the value of the 29581 stack pointer in the previous frame, just before the call 29582 instruction. 29583 29584 You only need to define this macro if you want to support call 29585 frame debugging information like that provided by DWARF 2. 29586 29587 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 29588 A C expression whose value is an integer giving the offset, in 29589 bytes, from the argument pointer to the canonical frame address 29590 (cfa). The final value should coincide with that calculated by 29591 'INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 29592 during virtual register instantiation. 29593 29594 The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) + 29595 crtl->args.pretend_args_size', which is correct for most machines; 29596 in general, the arguments are found immediately before the stack 29597 frame. Note that this is not the case on some targets that save 29598 registers into the caller's frame, such as SPARC and rs6000, and so 29599 such targets need to define this macro. 29600 29601 You only need to define this macro if the default is incorrect, and 29602 you want to support call frame debugging information like that 29603 provided by DWARF 2. 29604 29605 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 29606 If defined, a C expression whose value is an integer giving the 29607 offset in bytes from the frame pointer to the canonical frame 29608 address (cfa). The final value should coincide with that 29609 calculated by 'INCOMING_FRAME_SP_OFFSET'. 29610 29611 Normally the CFA is calculated as an offset from the argument 29612 pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer 29613 is variable due to the ABI, this may not be possible. If this 29614 macro is defined, it implies that the virtual register 29615 instantiation should be based on the frame pointer instead of the 29616 argument pointer. Only one of 'FRAME_POINTER_CFA_OFFSET' and 29617 'ARG_POINTER_CFA_OFFSET' should be defined. 29618 29619 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 29620 If defined, a C expression whose value is an integer giving the 29621 offset in bytes from the canonical frame address (cfa) to the frame 29622 base used in DWARF 2 debug information. The default is zero. A 29623 different value may reduce the size of debug information on some 29624 ports. 29625 29626 29627 File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 29628 29629 17.10.2 Exception Handling Support 29630 ---------------------------------- 29631 29632 -- Macro: EH_RETURN_DATA_REGNO (N) 29633 A C expression whose value is the Nth register number used for data 29634 by exception handlers, or 'INVALID_REGNUM' if fewer than N 29635 registers are usable. 29636 29637 The exception handling library routines communicate with the 29638 exception handlers via a set of agreed upon registers. Ideally 29639 these registers should be call-clobbered; it is possible to use 29640 call-saved registers, but may negatively impact code size. The 29641 target must support at least 2 data registers, but should define 4 29642 if there are enough free registers. 29643 29644 You must define this macro if you want to support call frame 29645 exception handling like that provided by DWARF 2. 29646 29647 -- Macro: EH_RETURN_STACKADJ_RTX 29648 A C expression whose value is RTL representing a location in which 29649 to store a stack adjustment to be applied before function return. 29650 This is used to unwind the stack to an exception handler's call 29651 frame. It will be assigned zero on code paths that return 29652 normally. 29653 29654 Typically this is a call-clobbered hard register that is otherwise 29655 untouched by the epilogue, but could also be a stack slot. 29656 29657 Do not define this macro if the stack pointer is saved and restored 29658 by the regular prolog and epilog code in the call frame itself; in 29659 this case, the exception handling library routines will update the 29660 stack location to be restored in place. Otherwise, you must define 29661 this macro if you want to support call frame exception handling 29662 like that provided by DWARF 2. 29663 29664 -- Macro: EH_RETURN_HANDLER_RTX 29665 A C expression whose value is RTL representing a location in which 29666 to store the address of an exception handler to which we should 29667 return. It will not be assigned on code paths that return 29668 normally. 29669 29670 Typically this is the location in the call frame at which the 29671 normal return address is stored. For targets that return by 29672 popping an address off the stack, this might be a memory address 29673 just below the _target_ call frame rather than inside the current 29674 call frame. If defined, 'EH_RETURN_STACKADJ_RTX' will have already 29675 been assigned, so it may be used to calculate the location of the 29676 target call frame. 29677 29678 Some targets have more complex requirements than storing to an 29679 address calculable during initial code generation. In that case 29680 the 'eh_return' instruction pattern should be used instead. 29681 29682 If you want to support call frame exception handling, you must 29683 define either this macro or the 'eh_return' instruction pattern. 29684 29685 -- Macro: RETURN_ADDR_OFFSET 29686 If defined, an integer-valued C expression for which rtl will be 29687 generated to add it to the exception handler address before it is 29688 searched in the exception handling tables, and to subtract it again 29689 from the address before using it to return to the exception 29690 handler. 29691 29692 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 29693 This macro chooses the encoding of pointers embedded in the 29694 exception handling sections. If at all possible, this should be 29695 defined such that the exception handling section will not require 29696 dynamic relocations, and so may be read-only. 29697 29698 CODE is 0 for data, 1 for code labels, 2 for function pointers. 29699 GLOBAL is true if the symbol may be affected by dynamic 29700 relocations. The macro should return a combination of the 29701 'DW_EH_PE_*' defines as found in 'dwarf2.h'. 29702 29703 If this macro is not defined, pointers will not be encoded but 29704 represented directly. 29705 29706 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 29707 ADDR, DONE) 29708 This macro allows the target to emit whatever special magic is 29709 required to represent the encoding chosen by 29710 'ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 29711 pc-relative and indirect encodings; this must be defined if the 29712 target uses text-relative or data-relative encodings. 29713 29714 This is a C statement that branches to DONE if the format was 29715 handled. ENCODING is the format chosen, SIZE is the number of 29716 bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be 29717 emitted. 29718 29719 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 29720 This macro allows the target to add CPU and operating system 29721 specific code to the call-frame unwinder for use when there is no 29722 unwind data available. The most common reason to implement this 29723 macro is to unwind through signal frames. 29724 29725 This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c', 29726 'unwind-dw2-xtensa.c' and 'unwind-ia64.c'. CONTEXT is an 29727 '_Unwind_Context'; FS is an '_Unwind_FrameState'. Examine 29728 'context->ra' for the address of the code being executed and 29729 'context->cfa' for the stack pointer value. If the frame can be 29730 decoded, the register save addresses should be updated in FS and 29731 the macro should evaluate to '_URC_NO_REASON'. If the frame cannot 29732 be decoded, the macro should evaluate to '_URC_END_OF_STACK'. 29733 29734 For proper signal handling in Java this macro is accompanied by 29735 'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h' 29736 headers. 29737 29738 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 29739 This macro allows the target to add operating system specific code 29740 to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding 29741 directive, usually used for signal or interrupt frames. 29742 29743 This macro is called from 'uw_update_context' in libgcc's 29744 'unwind-ia64.c'. CONTEXT is an '_Unwind_Context'; FS is an 29745 '_Unwind_FrameState'. Examine 'fs->unwabi' for the abi and context 29746 in the '.unwabi' directive. If the '.unwabi' directive can be 29747 handled, the register save addresses should be updated in FS. 29748 29749 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 29750 A C expression that evaluates to true if the target requires unwind 29751 info to be given comdat linkage. Define it to be '1' if comdat 29752 linkage is necessary. The default is '0'. 29753 29754 29755 File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 29756 29757 17.10.3 Specifying How Stack Checking is Done 29758 --------------------------------------------- 29759 29760 GCC will check that stack references are within the boundaries of the 29761 stack, if the option '-fstack-check' is specified, in one of three ways: 29762 29763 1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC 29764 will assume that you have arranged for full stack checking to be 29765 done at appropriate places in the configuration files. GCC will 29766 not do other special processing. 29767 29768 2. If 'STACK_CHECK_BUILTIN' is zero and the value of the 29769 'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that 29770 you have arranged for static stack checking (checking of the static 29771 stack frame of functions) to be done at appropriate places in the 29772 configuration files. GCC will only emit code to do dynamic stack 29773 checking (checking on dynamic stack allocations) using the third 29774 approach below. 29775 29776 3. If neither of the above are true, GCC will generate code to 29777 periodically "probe" the stack pointer using the values of the 29778 macros defined below. 29779 29780 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 29781 defined, GCC will change its allocation strategy for large objects if 29782 the option '-fstack-check' is specified: they will always be allocated 29783 dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes. 29784 29785 -- Macro: STACK_CHECK_BUILTIN 29786 A nonzero value if stack checking is done by the configuration 29787 files in a machine-dependent manner. You should define this macro 29788 if stack checking is required by the ABI of your machine or if you 29789 would like to do stack checking in some more efficient way than the 29790 generic approach. The default value of this macro is zero. 29791 29792 -- Macro: STACK_CHECK_STATIC_BUILTIN 29793 A nonzero value if static stack checking is done by the 29794 configuration files in a machine-dependent manner. You should 29795 define this macro if you would like to do static stack checking in 29796 some more efficient way than the generic approach. The default 29797 value of this macro is zero. 29798 29799 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 29800 An integer specifying the interval at which GCC must generate stack 29801 probe instructions, defined as 2 raised to this integer. You will 29802 normally define this macro so that the interval be no larger than 29803 the size of the "guard pages" at the end of a stack area. The 29804 default value of 12 (4096-byte interval) is suitable for most 29805 systems. 29806 29807 -- Macro: STACK_CHECK_MOVING_SP 29808 An integer which is nonzero if GCC should move the stack pointer 29809 page by page when doing probes. This can be necessary on systems 29810 where the stack pointer contains the bottom address of the memory 29811 area accessible to the executing thread at any point in time. In 29812 this situation an alternate signal stack is required in order to be 29813 able to recover from a stack overflow. The default value of this 29814 macro is zero. 29815 29816 -- Macro: STACK_CHECK_PROTECT 29817 The number of bytes of stack needed to recover from a stack 29818 overflow, for languages where such a recovery is supported. The 29819 default value of 75 words with the 'setjmp'/'longjmp'-based 29820 exception handling mechanism and 8192 bytes with other exception 29821 handling mechanisms should be adequate for most machines. 29822 29823 The following macros are relevant only if neither STACK_CHECK_BUILTIN 29824 nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 29825 in the opposite case. 29826 29827 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 29828 The maximum size of a stack frame, in bytes. GCC will generate 29829 probe instructions in non-leaf functions to ensure at least this 29830 many bytes of stack are available. If a stack frame is larger than 29831 this size, stack checking will not be reliable and GCC will issue a 29832 warning. The default is chosen so that GCC only generates one 29833 instruction on most systems. You should normally not change the 29834 default value of this macro. 29835 29836 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 29837 GCC uses this value to generate the above warning message. It 29838 represents the amount of fixed frame used by a function, not 29839 including space for any callee-saved registers, temporaries and 29840 user variables. You need only specify an upper bound for this 29841 amount and will normally use the default of four words. 29842 29843 -- Macro: STACK_CHECK_MAX_VAR_SIZE 29844 The maximum size, in bytes, of an object that GCC will place in the 29845 fixed area of the stack frame when the user specifies 29846 '-fstack-check'. GCC computed the default from the values of the 29847 above macros and you will normally not need to override that 29848 default. 29849 29850 29851 File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 29852 29853 17.10.4 Registers That Address the Stack Frame 29854 ---------------------------------------------- 29855 29856 This discusses registers that address the stack frame. 29857 29858 -- Macro: STACK_POINTER_REGNUM 29859 The register number of the stack pointer register, which must also 29860 be a fixed register according to 'FIXED_REGISTERS'. On most 29861 machines, the hardware determines which register this is. 29862 29863 -- Macro: FRAME_POINTER_REGNUM 29864 The register number of the frame pointer register, which is used to 29865 access automatic variables in the stack frame. On some machines, 29866 the hardware determines which register this is. On other machines, 29867 you can choose any register you wish for this purpose. 29868 29869 -- Macro: HARD_FRAME_POINTER_REGNUM 29870 On some machines the offset between the frame pointer and starting 29871 offset of the automatic variables is not known until after register 29872 allocation has been done (for example, because the saved registers 29873 are between these two locations). On those machines, define 29874 'FRAME_POINTER_REGNUM' the number of a special, fixed register to 29875 be used internally until the offset is known, and define 29876 'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 29877 used for the frame pointer. 29878 29879 You should define this macro only in the very rare circumstances 29880 when it is not possible to calculate the offset between the frame 29881 pointer and the automatic variables until after register allocation 29882 has been completed. When this macro is defined, you must also 29883 indicate in your definition of 'ELIMINABLE_REGS' how to eliminate 29884 'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or 29885 'STACK_POINTER_REGNUM'. 29886 29887 Do not define this macro if it would be the same as 29888 'FRAME_POINTER_REGNUM'. 29889 29890 -- Macro: ARG_POINTER_REGNUM 29891 The register number of the arg pointer register, which is used to 29892 access the function's argument list. On some machines, this is the 29893 same as the frame pointer register. On some machines, the hardware 29894 determines which register this is. On other machines, you can 29895 choose any register you wish for this purpose. If this is not the 29896 same register as the frame pointer register, then you must mark it 29897 as a fixed register according to 'FIXED_REGISTERS', or arrange to 29898 be able to eliminate it (*note Elimination::). 29899 29900 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER 29901 Define this to a preprocessor constant that is nonzero if 29902 'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the 29903 same. The default definition is '(HARD_FRAME_POINTER_REGNUM == 29904 FRAME_POINTER_REGNUM)'; you only need to define this macro if that 29905 definition is not suitable for use in preprocessor conditionals. 29906 29907 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER 29908 Define this to a preprocessor constant that is nonzero if 29909 'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same. 29910 The default definition is '(HARD_FRAME_POINTER_REGNUM == 29911 ARG_POINTER_REGNUM)'; you only need to define this macro if that 29912 definition is not suitable for use in preprocessor conditionals. 29913 29914 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 29915 The register number of the return address pointer register, which 29916 is used to access the current function's return address from the 29917 stack. On some machines, the return address is not at a fixed 29918 offset from the frame pointer or stack pointer or argument pointer. 29919 This register can be defined to point to the return address on the 29920 stack, and then be converted by 'ELIMINABLE_REGS' into either the 29921 frame pointer or stack pointer. 29922 29923 Do not define this macro unless there is no other way to get the 29924 return address from the stack. 29925 29926 -- Macro: STATIC_CHAIN_REGNUM 29927 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 29928 Register numbers used for passing a function's static chain 29929 pointer. If register windows are used, the register number as seen 29930 by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the 29931 register number as seen by the calling function is 29932 'STATIC_CHAIN_REGNUM'. If these registers are the same, 29933 'STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 29934 29935 The static chain register need not be a fixed register. 29936 29937 If the static chain is passed in memory, these macros should not be 29938 defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used. 29939 29940 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool 29941 INCOMING_P) 29942 This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for 29943 targets that may use different static chain locations for different 29944 nested functions. This may be required if the target has function 29945 attributes that affect the calling conventions of the function and 29946 those calling conventions use different static chain locations. 29947 29948 The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al. 29949 29950 If the static chain is passed in memory, this hook should be used 29951 to provide rtx giving 'mem' expressions that denote where they are 29952 stored. Often the 'mem' expression as seen by the caller will be 29953 at an offset from the stack pointer and the 'mem' expression as 29954 seen by the callee will be at an offset from the frame pointer. 29955 The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and 29956 'arg_pointer_rtx' will have been initialized and should be used to 29957 refer to those items. 29958 29959 -- Macro: DWARF_FRAME_REGISTERS 29960 This macro specifies the maximum number of hard registers that can 29961 be saved in a call frame. This is used to size data structures 29962 used in DWARF2 exception handling. 29963 29964 Prior to GCC 3.0, this macro was needed in order to establish a 29965 stable exception handling ABI in the face of adding new hard 29966 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 29967 insulated from changes in the number of hard registers. 29968 Nevertheless, this macro can still be used to reduce the runtime 29969 memory requirements of the exception handling routines, which can 29970 be substantial if the ISA contains a lot of registers that are not 29971 call-saved. 29972 29973 If this macro is not defined, it defaults to 29974 'FIRST_PSEUDO_REGISTER'. 29975 29976 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 29977 29978 This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided 29979 for backward compatibility in pre GCC 3.0 compiled code. 29980 29981 If this macro is not defined, it defaults to 29982 'DWARF_FRAME_REGISTERS'. 29983 29984 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 29985 29986 Define this macro if the target's representation for dwarf 29987 registers is different than the internal representation for unwind 29988 column. Given a dwarf register, this macro should return the 29989 internal unwind column number to use instead. 29990 29991 See the PowerPC's SPE target for an example. 29992 29993 -- Macro: DWARF_FRAME_REGNUM (REGNO) 29994 29995 Define this macro if the target's representation for dwarf 29996 registers used in .eh_frame or .debug_frame is different from that 29997 used in other debug info sections. Given a GCC hard register 29998 number, this macro should return the .eh_frame register number. 29999 The default is 'DBX_REGISTER_NUMBER (REGNO)'. 30000 30001 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 30002 30003 Define this macro to map register numbers held in the call frame 30004 info that GCC has collected using 'DWARF_FRAME_REGNUM' to those 30005 that should be output in .debug_frame ('FOR_EH' is zero) and 30006 .eh_frame ('FOR_EH' is nonzero). The default is to return 'REGNO'. 30007 30008 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT 30009 30010 Define this macro if the target stores register values as 30011 '_Unwind_Word' type in unwind context. It should be defined if 30012 target register size is larger than the size of 'void *'. The 30013 default is to store register values as 'void *' type. 30014 30015 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT 30016 30017 Define this macro to be 1 if the target always uses extended unwind 30018 context with version, args_size and by_value fields. If it is 30019 undefined, it will be defined to 1 when 30020 'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise. 30021 30022 30023 File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 30024 30025 17.10.5 Eliminating Frame Pointer and Arg Pointer 30026 ------------------------------------------------- 30027 30028 This is about eliminating the frame pointer and arg pointer. 30029 30030 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 30031 This target hook should return 'true' if a function must have and 30032 use a frame pointer. This target hook is called in the reload 30033 pass. If its return value is 'true' the function will have a frame 30034 pointer. 30035 30036 This target hook can in principle examine the current function and 30037 decide according to the facts, but on most machines the constant 30038 'false' or the constant 'true' suffices. Use 'false' when the 30039 machine allows code to be generated with no frame pointer, and 30040 doing so saves some time or space. Use 'true' when there is no 30041 possible advantage to avoiding a frame pointer. 30042 30043 In certain cases, the compiler does not know how to produce valid 30044 code without a frame pointer. The compiler recognizes those cases 30045 and automatically gives the function a frame pointer regardless of 30046 what 'TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to 30047 worry about them. 30048 30049 In a function that does not require a frame pointer, the frame 30050 pointer register can be allocated for ordinary usage, unless you 30051 mark it as a fixed register. See 'FIXED_REGISTERS' for more 30052 information. 30053 30054 Default return value is 'false'. 30055 30056 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 30057 A C statement to store in the variable DEPTH-VAR the difference 30058 between the frame pointer and the stack pointer values immediately 30059 after the function prologue. The value would be computed from 30060 information such as the result of 'get_frame_size ()' and the 30061 tables of registers 'regs_ever_live' and 'call_used_regs'. 30062 30063 If 'ELIMINABLE_REGS' is defined, this macro will be not be used and 30064 need not be defined. Otherwise, it must be defined even if 30065 'TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case, 30066 you may set DEPTH-VAR to anything. 30067 30068 -- Macro: ELIMINABLE_REGS 30069 If defined, this macro specifies a table of register pairs used to 30070 eliminate unneeded registers that point into the stack frame. If 30071 it is not defined, the only elimination attempted by the compiler 30072 is to replace references to the frame pointer with references to 30073 the stack pointer. 30074 30075 The definition of this macro is a list of structure 30076 initializations, each of which specifies an original and 30077 replacement register. 30078 30079 On some machines, the position of the argument pointer is not known 30080 until the compilation is completed. In such a case, a separate 30081 hard register must be used for the argument pointer. This register 30082 can be eliminated by replacing it with either the frame pointer or 30083 the argument pointer, depending on whether or not the frame pointer 30084 has been eliminated. 30085 30086 In this case, you might specify: 30087 #define ELIMINABLE_REGS \ 30088 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 30089 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 30090 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 30091 30092 Note that the elimination of the argument pointer with the stack 30093 pointer is specified first since that is the preferred elimination. 30094 30095 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 30096 int TO_REG) 30097 This target hook should returns 'true' if the compiler is allowed 30098 to try to replace register number FROM_REG with register number 30099 TO_REG. This target hook need only be defined if 'ELIMINABLE_REGS' 30100 is defined, and will usually be 'true', since most of the cases 30101 preventing register elimination are things that the compiler 30102 already knows about. 30103 30104 Default return value is 'true'. 30105 30106 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 30107 This macro is similar to 'INITIAL_FRAME_POINTER_OFFSET'. It 30108 specifies the initial difference between the specified pair of 30109 registers. This macro must be defined if 'ELIMINABLE_REGS' is 30110 defined. 30111 30112 30113 File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 30114 30115 17.10.6 Passing Function Arguments on the Stack 30116 ----------------------------------------------- 30117 30118 The macros in this section control how arguments are passed on the 30119 stack. See the following section for other macros that control passing 30120 certain arguments in registers. 30121 30122 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 30123 This target hook returns 'true' if an argument declared in a 30124 prototype as an integral type smaller than 'int' should actually be 30125 passed as an 'int'. In addition to avoiding errors in certain 30126 cases of mismatch, it also makes for better code on certain 30127 machines. The default is to not promote prototypes. 30128 30129 -- Macro: PUSH_ARGS 30130 A C expression. If nonzero, push insns will be used to pass 30131 outgoing arguments. If the target machine does not have a push 30132 instruction, set it to zero. That directs GCC to use an alternate 30133 strategy: to allocate the entire argument block and then store the 30134 arguments into it. When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING' 30135 must be defined too. 30136 30137 -- Macro: PUSH_ARGS_REVERSED 30138 A C expression. If nonzero, function arguments will be evaluated 30139 from last to first, rather than from first to last. If this macro 30140 is not defined, it defaults to 'PUSH_ARGS' on targets where the 30141 stack and args grow in opposite directions, and 0 otherwise. 30142 30143 -- Macro: PUSH_ROUNDING (NPUSHED) 30144 A C expression that is the number of bytes actually pushed onto the 30145 stack when an instruction attempts to push NPUSHED bytes. 30146 30147 On some machines, the definition 30148 30149 #define PUSH_ROUNDING(BYTES) (BYTES) 30150 30151 will suffice. But on other machines, instructions that appear to 30152 push one byte actually push two bytes in an attempt to maintain 30153 alignment. Then the definition should be 30154 30155 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 30156 30157 If the value of this macro has a type, it should be an unsigned 30158 type. 30159 30160 -- Macro: ACCUMULATE_OUTGOING_ARGS 30161 A C expression. If nonzero, the maximum amount of space required 30162 for outgoing arguments will be computed and placed into 30163 'crtl->outgoing_args_size'. No space will be pushed onto the stack 30164 for each call; instead, the function prologue should increase the 30165 stack frame size by this amount. 30166 30167 Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not 30168 proper. 30169 30170 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 30171 Define this macro if functions should assume that stack space has 30172 been allocated for arguments even when their values are passed in 30173 registers. 30174 30175 The value of this macro is the size, in bytes, of the area reserved 30176 for arguments passed in registers for the function represented by 30177 FNDECL, which can be zero if GCC is calling a library function. 30178 The argument FNDECL can be the FUNCTION_DECL, or the type itself of 30179 the function. 30180 30181 This space can be allocated by the caller, or be a part of the 30182 machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says 30183 which. 30184 30185 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 30186 Define this to a nonzero value if it is the responsibility of the 30187 caller to allocate the area reserved for arguments passed in 30188 registers when calling a function of FNTYPE. FNTYPE may be NULL if 30189 the function called is a library function. 30190 30191 If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 30192 whether the space for these arguments counts in the value of 30193 'crtl->outgoing_args_size'. 30194 30195 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 30196 Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the 30197 stack parameters don't skip the area specified by it. 30198 30199 Normally, when a parameter is not passed in registers, it is placed 30200 on the stack beyond the 'REG_PARM_STACK_SPACE' area. Defining this 30201 macro suppresses this behavior and causes the parameter to be 30202 passed on the stack in its natural location. 30203 30204 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree 30205 FUNTYPE, int SIZE) 30206 This target hook returns the number of bytes of its own arguments 30207 that a function pops on returning, or 0 if the function pops no 30208 arguments and the caller must therefore pop them all after the 30209 function returns. 30210 30211 FUNDECL is a C variable whose value is a tree node that describes 30212 the function in question. Normally it is a node of type 30213 'FUNCTION_DECL' that describes the declaration of the function. 30214 From this you can obtain the 'DECL_ATTRIBUTES' of the function. 30215 30216 FUNTYPE is a C variable whose value is a tree node that describes 30217 the function in question. Normally it is a node of type 30218 'FUNCTION_TYPE' that describes the data type of the function. From 30219 this it is possible to obtain the data types of the value and 30220 arguments (if known). 30221 30222 When a call to a library function is being considered, FUNDECL will 30223 contain an identifier node for the library function. Thus, if you 30224 need to distinguish among various library functions, you can do so 30225 by their names. Note that "library function" in this context means 30226 a function used to perform arithmetic, whose name is known 30227 specially in the compiler and was not mentioned in the C code being 30228 compiled. 30229 30230 SIZE is the number of bytes of arguments passed on the stack. If a 30231 variable number of bytes is passed, it is zero, and argument 30232 popping will always be the responsibility of the calling function. 30233 30234 On the VAX, all functions always pop their arguments, so the 30235 definition of this macro is SIZE. On the 68000, using the standard 30236 calling convention, no functions pop their arguments, so the value 30237 of the macro is always 0 in this case. But an alternative calling 30238 convention is available in which functions that take a fixed number 30239 of arguments pop them but other functions (such as 'printf') pop 30240 nothing (the caller pops all). When this convention is in use, 30241 FUNTYPE is examined to determine whether a function takes a fixed 30242 number of arguments. 30243 30244 -- Macro: CALL_POPS_ARGS (CUM) 30245 A C expression that should indicate the number of bytes a call 30246 sequence pops off the stack. It is added to the value of 30247 'RETURN_POPS_ARGS' when compiling a function call. 30248 30249 CUM is the variable in which all arguments to the called function 30250 have been accumulated. 30251 30252 On certain architectures, such as the SH5, a call trampoline is 30253 used that pops certain registers off the stack, depending on the 30254 arguments that have been passed to the function. Since this is a 30255 property of the call site, not of the called function, 30256 'RETURN_POPS_ARGS' is not appropriate. 30257 30258 30259 File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 30260 30261 17.10.7 Passing Arguments in Registers 30262 -------------------------------------- 30263 30264 This section describes the macros which let you control how various 30265 types of arguments are passed in registers or how they are arranged in 30266 the stack. 30267 30268 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, enum 30269 machine_mode MODE, const_tree TYPE, bool NAMED) 30270 Return an RTX indicating whether a function argument is passed in a 30271 register and if so, which register. 30272 30273 The arguments are CA, which summarizes all the previous arguments; 30274 MODE, the machine mode of the argument; TYPE, the data type of the 30275 argument as a tree node or 0 if that is not known (which happens 30276 for C support library functions); and NAMED, which is 'true' for an 30277 ordinary argument and 'false' for nameless arguments that 30278 correspond to '...' in the called function's prototype. TYPE can 30279 be an incomplete type if a syntax error has previously occurred. 30280 30281 The return value is usually either a 'reg' RTX for the hard 30282 register in which to pass the argument, or zero to pass the 30283 argument on the stack. 30284 30285 The value of the expression can also be a 'parallel' RTX. This is 30286 used when an argument is passed in multiple locations. The mode of 30287 the 'parallel' should be the mode of the entire argument. The 30288 'parallel' holds any number of 'expr_list' pairs; each one 30289 describes where part of the argument is passed. In each 30290 'expr_list' the first operand must be a 'reg' RTX for the hard 30291 register in which to pass this part of the argument, and the mode 30292 of the register RTX indicates how large this part of the argument 30293 is. The second operand of the 'expr_list' is a 'const_int' which 30294 gives the offset in bytes into the entire argument of where this 30295 part starts. As a special exception the first 'expr_list' in the 30296 'parallel' RTX may have a first operand of zero. This indicates 30297 that the entire argument is also stored on the stack. 30298 30299 The last time this hook is called, it is called with 'MODE == 30300 VOIDmode', and its result is passed to the 'call' or 'call_value' 30301 pattern as operands 2 and 3 respectively. 30302 30303 The usual way to make the ISO library 'stdarg.h' work on a machine 30304 where some arguments are usually passed in registers, is to cause 30305 nameless arguments to be passed on the stack instead. This is done 30306 by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'. 30307 30308 You may use the hook 'targetm.calls.must_pass_in_stack' in the 30309 definition of this macro to determine if this argument is of a type 30310 that must be passed in the stack. If 'REG_PARM_STACK_SPACE' is not 30311 defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an 30312 argument, the compiler will abort. If 'REG_PARM_STACK_SPACE' is 30313 defined, the argument will be computed in the stack and then loaded 30314 into a register. 30315 30316 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode MODE, 30317 const_tree TYPE) 30318 This target hook should return 'true' if we should not pass TYPE 30319 solely in registers. The file 'expr.h' defines a definition that 30320 is usually appropriate, refer to 'expr.h' for additional 30321 documentation. 30322 30323 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA, 30324 enum machine_mode MODE, const_tree TYPE, bool NAMED) 30325 Define this hook if the target machine has "register windows", so 30326 that the register in which a function sees an arguments is not 30327 necessarily the same as the one in which the caller passed the 30328 argument. 30329 30330 For such machines, 'TARGET_FUNCTION_ARG' computes the register in 30331 which the caller passes the value, and 30332 'TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar 30333 fashion to tell the function being called where the arguments will 30334 arrive. 30335 30336 If 'TARGET_FUNCTION_INCOMING_ARG' is not defined, 30337 'TARGET_FUNCTION_ARG' serves both purposes. 30338 30339 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM, 30340 enum machine_mode MODE, tree TYPE, bool NAMED) 30341 This target hook returns the number of bytes at the beginning of an 30342 argument that must be put in registers. The value must be zero for 30343 arguments that are passed entirely in registers or that are 30344 entirely pushed on the stack. 30345 30346 On some machines, certain arguments must be passed partially in 30347 registers and partially in memory. On these machines, typically 30348 the first few words of arguments are passed in registers, and the 30349 rest on the stack. If a multi-word argument (a 'double' or a 30350 structure) crosses that boundary, its first few words must be 30351 passed in registers and the rest must be pushed. This macro tells 30352 the compiler when this occurs, and how many bytes should go in 30353 registers. 30354 30355 'TARGET_FUNCTION_ARG' for these arguments should return the first 30356 register to be used by the caller for this argument; likewise 30357 'TARGET_FUNCTION_INCOMING_ARG', for the called function. 30358 30359 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM, 30360 enum machine_mode MODE, const_tree TYPE, bool NAMED) 30361 This target hook should return 'true' if an argument at the 30362 position indicated by CUM should be passed by reference. This 30363 predicate is queried after target independent reasons for being 30364 passed by reference, such as 'TREE_ADDRESSABLE (type)'. 30365 30366 If the hook returns true, a copy of that argument is made in memory 30367 and a pointer to the argument is passed instead of the argument 30368 itself. The pointer is passed in whatever way is appropriate for 30369 passing a pointer to that type. 30370 30371 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, enum 30372 machine_mode MODE, const_tree TYPE, bool NAMED) 30373 The function argument described by the parameters to this hook is 30374 known to be passed by reference. The hook should return true if 30375 the function argument should be copied by the callee instead of 30376 copied by the caller. 30377 30378 For any argument for which the hook returns true, if it can be 30379 determined that the argument is not modified, then a copy need not 30380 be generated. 30381 30382 The default version of this hook always returns false. 30383 30384 -- Macro: CUMULATIVE_ARGS 30385 A C type for declaring a variable that is used as the first 30386 argument of 'TARGET_FUNCTION_ARG' and other related values. For 30387 some target machines, the type 'int' suffices and can hold the 30388 number of bytes of argument so far. 30389 30390 There is no need to record in 'CUMULATIVE_ARGS' anything about the 30391 arguments that have been passed on the stack. The compiler has 30392 other variables to keep track of that. For target machines on 30393 which all arguments are passed on the stack, there is no need to 30394 store anything in 'CUMULATIVE_ARGS'; however, the data structure 30395 must exist and should not be empty, so use 'int'. 30396 30397 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 30398 If defined, this macro is called before generating any code for a 30399 function, but after the CFUN descriptor for the function has been 30400 created. The back end may use this macro to update CFUN to reflect 30401 an ABI other than that which would normally be used by default. If 30402 the compiler is generating code for a compiler-generated function, 30403 FNDECL may be 'NULL'. 30404 30405 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 30406 N_NAMED_ARGS) 30407 A C statement (sans semicolon) for initializing the variable CUM 30408 for the state at the beginning of the argument list. The variable 30409 has type 'CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 30410 for the data type of the function which will receive the args, or 0 30411 if the args are to a compiler support library function. For direct 30412 calls that are not libcalls, FNDECL contain the declaration node of 30413 the function. FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is 30414 used to find arguments for the function being compiled. 30415 N_NAMED_ARGS is set to the number of named arguments, including a 30416 structure return address if it is passed as a parameter, when 30417 making a call. When processing incoming arguments, N_NAMED_ARGS is 30418 set to -1. 30419 30420 When processing a call to a compiler support library function, 30421 LIBNAME identifies which one. It is a 'symbol_ref' rtx which 30422 contains the name of the function, as a string. LIBNAME is 0 when 30423 an ordinary C function call is being processed. Thus, each time 30424 this macro is called, either LIBNAME or FNTYPE is nonzero, but 30425 never both of them at once. 30426 30427 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 30428 Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it 30429 gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'. 30430 INDIRECT would always be zero, too. If this macro is not defined, 30431 'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 30432 30433 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 30434 Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 30435 finding the arguments for the function being compiled. If this 30436 macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead. 30437 30438 The value passed for LIBNAME is always 0, since library routines 30439 with special calling conventions are never compiled with GCC. The 30440 argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'. 30441 30442 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA, 30443 enum machine_mode MODE, const_tree TYPE, bool NAMED) 30444 This hook updates the summarizer variable pointed to by CA to 30445 advance past an argument in the argument list. The values MODE, 30446 TYPE and NAMED describe that argument. Once this is done, the 30447 variable CUM is suitable for analyzing the _following_ argument 30448 with 'TARGET_FUNCTION_ARG', etc. 30449 30450 This hook need not do anything if the argument in question was 30451 passed on the stack. The compiler knows how to track the amount of 30452 stack space used for arguments without any special help. 30453 30454 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE) 30455 If defined, a C expression that is the number of bytes to add to 30456 the offset of the argument passed in memory. This is needed for 30457 the SPU, which passes 'char' and 'short' arguments in the preferred 30458 slot that is in the middle of the quad word instead of starting at 30459 the top. 30460 30461 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 30462 If defined, a C expression which determines whether, and in which 30463 direction, to pad out an argument with extra space. The value 30464 should be of type 'enum direction': either 'upward' to pad above 30465 the argument, 'downward' to pad below, or 'none' to inhibit 30466 padding. 30467 30468 The _amount_ of padding is not controlled by this macro, but by the 30469 target hook 'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'. It is always 30470 just enough to reach the next multiple of that boundary. 30471 30472 This macro has a default definition which is right for most 30473 systems. For little-endian machines, the default is to pad upward. 30474 For big-endian machines, the default is to pad downward for an 30475 argument of constant size shorter than an 'int', and upward 30476 otherwise. 30477 30478 -- Macro: PAD_VARARGS_DOWN 30479 If defined, a C expression which determines whether the default 30480 implementation of va_arg will attempt to pad down before reading 30481 the next argument, if that argument is smaller than its aligned 30482 space as controlled by 'PARM_BOUNDARY'. If this macro is not 30483 defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN' 30484 is true. 30485 30486 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 30487 Specify padding for the last element of a block move between 30488 registers and memory. FIRST is nonzero if this is the only 30489 element. Defining this macro allows better control of register 30490 function parameters on big-endian machines, without using 30491 'PARALLEL' rtl. In particular, 'MUST_PASS_IN_STACK' need not test 30492 padding and mode of types in registers, as there is no longer a 30493 "wrong" part of a register; For example, a three byte aggregate may 30494 be passed in the high part of a register if so required. 30495 30496 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (enum 30497 machine_mode MODE, const_tree TYPE) 30498 This hook returns the alignment boundary, in bits, of an argument 30499 with the specified mode and type. The default hook returns 30500 'PARM_BOUNDARY' for all arguments. 30501 30502 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY (enum 30503 machine_mode MODE, const_tree TYPE) 30504 Normally, the size of an argument is rounded up to 'PARM_BOUNDARY', 30505 which is the default value for this hook. You can define this hook 30506 to return a different value if an argument size must be rounded to 30507 a larger value. 30508 30509 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 30510 A C expression that is nonzero if REGNO is the number of a hard 30511 register in which function arguments are sometimes passed. This 30512 does _not_ include implicit arguments such as the static chain and 30513 the structure-value address. On many machines, no registers can be 30514 used for this purpose since all function arguments are pushed on 30515 the stack. 30516 30517 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 30518 This hook should return true if parameter of type TYPE are passed 30519 as two scalar parameters. By default, GCC will attempt to pack 30520 complex arguments into the target's word size. Some ABIs require 30521 complex arguments to be split and treated as their individual 30522 components. For example, on AIX64, complex floats should be passed 30523 in a pair of floating point registers, even though a complex float 30524 would fit in one 64-bit floating point register. 30525 30526 The default value of this hook is 'NULL', which is treated as 30527 always false. 30528 30529 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 30530 This hook returns a type node for 'va_list' for the target. The 30531 default version of the hook returns 'void*'. 30532 30533 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME, 30534 tree *PTREE) 30535 This target hook is used in function 'c_common_nodes_and_builtins' 30536 to iterate through the target specific builtin types for va_list. 30537 The variable IDX is used as iterator. PNAME has to be a pointer to 30538 a 'const char *' and PTREE a pointer to a 'tree' typed variable. 30539 The arguments PNAME and PTREE are used to store the result of this 30540 macro and are set to the name of the va_list builtin type and its 30541 internal type. If the return value of this macro is zero, then 30542 there is no more element. Otherwise the IDX should be increased 30543 for the next call of this macro to iterate through all types. 30544 30545 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 30546 This hook returns the va_list type of the calling convention 30547 specified by FNDECL. The default version of this hook returns 30548 'va_list_type_node'. 30549 30550 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 30551 This hook returns the va_list type of the calling convention 30552 specified by the type of TYPE. If TYPE is not a valid va_list 30553 type, it returns 'NULL_TREE'. 30554 30555 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 30556 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 30557 This hook performs target-specific gimplification of 'VA_ARG_EXPR'. 30558 The first two parameters correspond to the arguments to 'va_arg'; 30559 the latter two are as in 'gimplify.c:gimplify_expr'. 30560 30561 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE) 30562 Define this to return nonzero if the port can handle pointers with 30563 machine mode MODE. The default version of this hook returns true 30564 for both 'ptr_mode' and 'Pmode'. 30565 30566 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref_s *REF) 30567 Define this to return nonzero if the memory reference REF may alias 30568 with the system C library errno location. The default version of 30569 this hook assumes the system C library errno location is either a 30570 declaration of type int or accessed by dereferencing a pointer to 30571 int. 30572 30573 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode 30574 MODE) 30575 Define this to return nonzero if the port is prepared to handle 30576 insns involving scalar mode MODE. For a scalar mode to be 30577 considered supported, all the basic arithmetic and comparisons must 30578 work. 30579 30580 The default version of this hook returns true for any mode required 30581 to handle the basic C types (as defined by the port). Included 30582 here are the double-word arithmetic supported by the code in 30583 'optabs.c'. 30584 30585 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode 30586 MODE) 30587 Define this to return nonzero if the port is prepared to handle 30588 insns involving vector mode MODE. At the very least, it must have 30589 move patterns for this mode. 30590 30591 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode 30592 MODE, unsigned HOST_WIDE_INT NELEMS) 30593 Return true if GCC should try to use a scalar mode to store an 30594 array of NELEMS elements, given that each element has mode MODE. 30595 Returning true here overrides the usual 'MAX_FIXED_MODE' limit and 30596 allows GCC to use any defined integer mode. 30597 30598 One use of this hook is to support vector load and store operations 30599 that operate on several homogeneous vectors. For example, ARM NEON 30600 has operations like: 30601 30602 int8x8x3_t vld3_s8 (const int8_t *) 30603 30604 where the return type is defined as: 30605 30606 typedef struct int8x8x3_t 30607 { 30608 int8x8_t val[3]; 30609 } int8x8x3_t; 30610 30611 If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t' 30612 can have the same mode. GCC can then store 'int8x8x3_t's in 30613 registers rather than forcing them onto the stack. 30614 30615 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum 30616 machine_mode MODE) 30617 Define this to return nonzero for machine modes for which the port 30618 has small register classes. If this target hook returns nonzero 30619 for a given MODE, the compiler will try to minimize the lifetime of 30620 registers in MODE. The hook may be called with 'VOIDmode' as 30621 argument. In this case, the hook is expected to return nonzero if 30622 it returns nonzero for any mode. 30623 30624 On some machines, it is risky to let hard registers live across 30625 arbitrary insns. Typically, these machines have instructions that 30626 require values to be in specific registers (like an accumulator), 30627 and reload will fail if the required hard register is used for 30628 another purpose across such an insn. 30629 30630 Passes before reload do not know which hard registers will be used 30631 in an instruction, but the machine modes of the registers set or 30632 used in the instruction are already known. And for some machines, 30633 register classes are small for, say, integer registers but not for 30634 floating point registers. For example, the AMD x86-64 architecture 30635 requires specific registers for the legacy x86 integer 30636 instructions, but there are many SSE registers for floating point 30637 operations. On such targets, a good strategy may be to return 30638 nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero 30639 for the SSE register classes. 30640 30641 The default version of this hook returns false for any mode. It is 30642 always safe to redefine this hook to return with a nonzero value. 30643 But if you unnecessarily define it, you will reduce the amount of 30644 optimizations that can be performed in some cases. If you do not 30645 define this hook to return a nonzero value when it is required, the 30646 compiler will run out of spill registers and print a fatal error 30647 message. 30648 30649 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM 30650 If the target has a dedicated flags register, and it needs to use 30651 the post-reload comparison elimination pass, then this value should 30652 be set appropriately. 30653 30654 30655 File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 30656 30657 17.10.8 How Scalar Function Values Are Returned 30658 ----------------------------------------------- 30659 30660 This section discusses the macros that control returning scalars as 30661 values--values that can fit in registers. 30662 30663 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 30664 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 30665 30666 Define this to return an RTX representing the place where a 30667 function returns or receives a value of data type RET_TYPE, a tree 30668 node representing a data type. FN_DECL_OR_TYPE is a tree node 30669 representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being 30670 called. If OUTGOING is false, the hook should compute the register 30671 in which the caller will see the return value. Otherwise, the hook 30672 should return an RTX representing the place where a function 30673 returns a value. 30674 30675 On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant. 30676 (Actually, on most machines, scalar values are returned in the same 30677 place regardless of mode.) The value of the expression is usually 30678 a 'reg' RTX for the hard register where the return value is stored. 30679 The value can also be a 'parallel' RTX, if the return value is in 30680 multiple places. See 'TARGET_FUNCTION_ARG' for an explanation of 30681 the 'parallel' form. Note that the callee will populate every 30682 location specified in the 'parallel', but if the first element of 30683 the 'parallel' contains the whole return value, callers will use 30684 that element as the canonical location and ignore the others. The 30685 m68k port uses this type of 'parallel' to return pointers in both 30686 '%a0' (the canonical location) and '%d0'. 30687 30688 If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 30689 the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is 30690 a scalar type. 30691 30692 If the precise function being called is known, FUNC is a tree node 30693 ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 30694 makes it possible to use a different value-returning convention for 30695 specific functions when all their calls are known. 30696 30697 Some target machines have "register windows" so that the register 30698 in which a function returns its value is not the same as the one in 30699 which the caller sees the value. For such machines, you should 30700 return different RTX depending on OUTGOING. 30701 30702 'TARGET_FUNCTION_VALUE' is not used for return values with 30703 aggregate data types, because these are returned in another way. 30704 See 'TARGET_STRUCT_VALUE_RTX' and related macros, below. 30705 30706 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 30707 This macro has been deprecated. Use 'TARGET_FUNCTION_VALUE' for a 30708 new target instead. 30709 30710 -- Macro: LIBCALL_VALUE (MODE) 30711 A C expression to create an RTX representing the place where a 30712 library function returns a value of mode MODE. 30713 30714 Note that "library function" in this context means a compiler 30715 support routine, used to perform arithmetic, whose name is known 30716 specially by the compiler and was not mentioned in the C code being 30717 compiled. 30718 30719 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode MODE, 30720 const_rtx FUN) 30721 Define this hook if the back-end needs to know the name of the 30722 libcall function in order to determine where the result should be 30723 returned. 30724 30725 The mode of the result is given by MODE and the name of the called 30726 library function is given by FUN. The hook should return an RTX 30727 representing the place where the library function result will be 30728 returned. 30729 30730 If this hook is not defined, then LIBCALL_VALUE will be used. 30731 30732 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 30733 A C expression that is nonzero if REGNO is the number of a hard 30734 register in which the values of called function may come back. 30735 30736 A register whose use for returning values is limited to serving as 30737 the second of a pair (for a value of type 'double', say) need not 30738 be recognized by this macro. So for most machines, this definition 30739 suffices: 30740 30741 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 30742 30743 If the machine has register windows, so that the caller and the 30744 called function use different registers for the return value, this 30745 macro should recognize only the caller's register numbers. 30746 30747 This macro has been deprecated. Use 30748 'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead. 30749 30750 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int 30751 REGNO) 30752 A target hook that return 'true' if REGNO is the number of a hard 30753 register in which the values of called function may come back. 30754 30755 A register whose use for returning values is limited to serving as 30756 the second of a pair (for a value of type 'double', say) need not 30757 be recognized by this target hook. 30758 30759 If the machine has register windows, so that the caller and the 30760 called function use different registers for the return value, this 30761 target hook should recognize only the caller's register numbers. 30762 30763 If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be 30764 used. 30765 30766 -- Macro: APPLY_RESULT_SIZE 30767 Define this macro if 'untyped_call' and 'untyped_return' need more 30768 space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and 30769 restoring an arbitrary return value. 30770 30771 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 30772 This hook should return true if values of type TYPE are returned at 30773 the most significant end of a register (in other words, if they are 30774 padded at the least significant end). You can assume that TYPE is 30775 returned in a register; the caller is required to check this. 30776 30777 Note that the register provided by 'TARGET_FUNCTION_VALUE' must be 30778 able to hold the complete return value. For example, if a 1-, 2- 30779 or 3-byte structure is returned at the most significant end of a 30780 4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode' 30781 rtx. 30782 30783 30784 File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 30785 30786 17.10.9 How Large Values Are Returned 30787 ------------------------------------- 30788 30789 When a function value's mode is 'BLKmode' (and in some other cases), the 30790 value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar 30791 Return::). Instead, the caller passes the address of a block of memory 30792 in which the value should be stored. This address is called the 30793 "structure value address". 30794 30795 This section describes how to control returning structure values in 30796 memory. 30797 30798 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 30799 const_tree FNTYPE) 30800 This target hook should return a nonzero value to say to return the 30801 function value in memory, just as large structures are always 30802 returned. Here TYPE will be the data type of the value, and FNTYPE 30803 will be the type of the function doing the returning, or 'NULL' for 30804 libcalls. 30805 30806 Note that values of mode 'BLKmode' must be explicitly handled by 30807 this function. Also, the option '-fpcc-struct-return' takes effect 30808 regardless of this macro. On most systems, it is possible to leave 30809 the hook undefined; this causes a default definition to be used, 30810 whose value is the constant 1 for 'BLKmode' values, and 0 30811 otherwise. 30812 30813 Do not use this hook to indicate that structures and unions should 30814 always be returned in memory. You should instead use 30815 'DEFAULT_PCC_STRUCT_RETURN' to indicate this. 30816 30817 -- Macro: DEFAULT_PCC_STRUCT_RETURN 30818 Define this macro to be 1 if all structure and union return values 30819 must be in memory. Since this results in slower code, this should 30820 be defined only if needed for compatibility with other compilers or 30821 with an ABI. If you define this macro to be 0, then the 30822 conventions used for structure and union return values are decided 30823 by the 'TARGET_RETURN_IN_MEMORY' target hook. 30824 30825 If not defined, this defaults to the value 1. 30826 30827 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 30828 This target hook should return the location of the structure value 30829 address (normally a 'mem' or 'reg'), or 0 if the address is passed 30830 as an "invisible" first argument. Note that FNDECL may be 'NULL', 30831 for libcalls. You do not need to define this target hook if the 30832 address is always passed as an "invisible" first argument. 30833 30834 On some architectures the place where the structure value address 30835 is found by the called function is not the same place that the 30836 caller put it. This can be due to register windows, or it could be 30837 because the function prologue moves it to a different place. 30838 INCOMING is '1' or '2' when the location is needed in the context 30839 of the called function, and '0' in the context of the caller. 30840 30841 If INCOMING is nonzero and the address is to be found on the stack, 30842 return a 'mem' which refers to the frame pointer. If INCOMING is 30843 '2', the result is being used to fetch the structure value address 30844 at the beginning of a function. If you need to emit adjusting 30845 code, you should do it at this point. 30846 30847 -- Macro: PCC_STATIC_STRUCT_RETURN 30848 Define this macro if the usual system convention on the target 30849 machine for returning structures and unions is for the called 30850 function to return the address of a static variable containing the 30851 value. 30852 30853 Do not define this if the usual system convention is for the caller 30854 to pass an address to the subroutine. 30855 30856 This macro has effect in '-fpcc-struct-return' mode, but it does 30857 nothing when you use '-freg-struct-return' mode. 30858 30859 -- Target Hook: enum machine_mode TARGET_GET_RAW_RESULT_MODE (int 30860 REGNO) 30861 This target hook returns the mode to be used when accessing raw 30862 return registers in '__builtin_return'. Define this macro if the 30863 value in REG_RAW_MODE is not correct. 30864 30865 -- Target Hook: enum machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO) 30866 This target hook returns the mode to be used when accessing raw 30867 argument registers in '__builtin_apply_args'. Define this macro if 30868 the value in REG_RAW_MODE is not correct. 30869 30870 30871 File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 30872 30873 17.10.10 Caller-Saves Register Allocation 30874 ----------------------------------------- 30875 30876 If you enable it, GCC can save registers around function calls. This 30877 makes it possible to use call-clobbered registers to hold variables that 30878 must live across calls. 30879 30880 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS) 30881 A C expression to determine whether it is worthwhile to consider 30882 placing a pseudo-register in a call-clobbered hard register and 30883 saving and restoring it around each function call. The expression 30884 should be 1 when this is worth doing, and 0 otherwise. 30885 30886 If you don't define this macro, a default is used which is good on 30887 most machines: '4 * CALLS < REFS'. 30888 30889 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 30890 A C expression specifying which mode is required for saving NREGS 30891 of a pseudo-register in call-clobbered hard register REGNO. If 30892 REGNO is unsuitable for caller save, 'VOIDmode' should be returned. 30893 For most machines this macro need not be defined since GCC will 30894 select the smallest suitable mode. 30895 30896 30897 File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 30898 30899 17.10.11 Function Entry and Exit 30900 -------------------------------- 30901 30902 This section describes the macros that output function entry 30903 ("prologue") and exit ("epilogue") code. 30904 30905 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 30906 HOST_WIDE_INT SIZE) 30907 If defined, a function that outputs the assembler code for entry to 30908 a function. The prologue is responsible for setting up the stack 30909 frame, initializing the frame pointer register, saving registers 30910 that must be saved, and allocating SIZE additional bytes of storage 30911 for the local variables. SIZE is an integer. FILE is a stdio 30912 stream to which the assembler code should be output. 30913 30914 The label for the beginning of the function need not be output by 30915 this macro. That has already been done when the macro is run. 30916 30917 To determine which registers to save, the macro can refer to the 30918 array 'regs_ever_live': element R is nonzero if hard register R is 30919 used anywhere within the function. This implies the function 30920 prologue should save register R, provided it is not one of the 30921 call-used registers. ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise 30922 use 'regs_ever_live'.) 30923 30924 On machines that have "register windows", the function entry code 30925 does not save on the stack the registers that are in the windows, 30926 even if they are supposed to be preserved by function calls; 30927 instead it takes appropriate steps to "push" the register stack, if 30928 any non-call-used registers are used in the function. 30929 30930 On machines where functions may or may not have frame-pointers, the 30931 function entry code must vary accordingly; it must set up the frame 30932 pointer if one is wanted, and not otherwise. To determine whether 30933 a frame pointer is in wanted, the macro can refer to the variable 30934 'frame_pointer_needed'. The variable's value will be 1 at run time 30935 in a function that needs a frame pointer. *Note Elimination::. 30936 30937 The function entry code is responsible for allocating any stack 30938 space required for the function. This stack space consists of the 30939 regions listed below. In most cases, these regions are allocated 30940 in the order listed, with the last listed region closest to the top 30941 of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is 30942 defined, and the highest address if it is not defined). You can 30943 use a different order for a machine if doing so is more convenient 30944 or required for compatibility reasons. Except in cases where 30945 required by standard or by a debugger, there is no reason why the 30946 stack layout used by GCC need agree with that used by other 30947 compilers for a machine. 30948 30949 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 30950 If defined, a function that outputs assembler code at the end of a 30951 prologue. This should be used when the function prologue is being 30952 emitted as RTL, and you have some extra assembler that needs to be 30953 emitted. *Note prologue instruction pattern::. 30954 30955 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 30956 If defined, a function that outputs assembler code at the start of 30957 an epilogue. This should be used when the function epilogue is 30958 being emitted as RTL, and you have some extra assembler that needs 30959 to be emitted. *Note epilogue instruction pattern::. 30960 30961 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 30962 HOST_WIDE_INT SIZE) 30963 If defined, a function that outputs the assembler code for exit 30964 from a function. The epilogue is responsible for restoring the 30965 saved registers and stack pointer to their values when the function 30966 was called, and returning control to the caller. This macro takes 30967 the same arguments as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and 30968 the registers to restore are determined from 'regs_ever_live' and 30969 'CALL_USED_REGISTERS' in the same way. 30970 30971 On some machines, there is a single instruction that does all the 30972 work of returning from the function. On these machines, give that 30973 instruction the name 'return' and do not define the macro 30974 'TARGET_ASM_FUNCTION_EPILOGUE' at all. 30975 30976 Do not define a pattern named 'return' if you want the 30977 'TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 30978 switches to control whether return instructions or epilogues are 30979 used, define a 'return' pattern with a validity condition that 30980 tests the target switches appropriately. If the 'return' pattern's 30981 validity condition is false, epilogues will be used. 30982 30983 On machines where functions may or may not have frame-pointers, the 30984 function exit code must vary accordingly. Sometimes the code for 30985 these two cases is completely different. To determine whether a 30986 frame pointer is wanted, the macro can refer to the variable 30987 'frame_pointer_needed'. The variable's value will be 1 when 30988 compiling a function that needs a frame pointer. 30989 30990 Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and 30991 'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 30992 The C variable 'current_function_is_leaf' is nonzero for such a 30993 function. *Note Leaf Functions::. 30994 30995 On some machines, some functions pop their arguments on exit while 30996 others leave that for the caller to do. For example, the 68020 30997 when given '-mrtd' pops arguments in functions that take a fixed 30998 number of arguments. 30999 31000 Your definition of the macro 'RETURN_POPS_ARGS' decides which 31001 functions pop their own arguments. 'TARGET_ASM_FUNCTION_EPILOGUE' 31002 needs to know what was decided. The number of bytes of the current 31003 function's arguments that this function should pop is available in 31004 'crtl->args.pops_args'. *Note Scalar Return::. 31005 31006 * A region of 'crtl->args.pretend_args_size' bytes of uninitialized 31007 space just underneath the first argument arriving on the stack. 31008 (This may not be at the very start of the allocated stack region if 31009 the calling sequence has pushed anything else since pushing the 31010 stack arguments. But usually, on such machines, nothing else has 31011 been pushed yet, because the function prologue itself does all the 31012 pushing.) This region is used on machines where an argument may be 31013 passed partly in registers and partly in memory, and, in some cases 31014 to support the features in '<stdarg.h>'. 31015 31016 * An area of memory used to save certain registers used by the 31017 function. The size of this area, which may also include space for 31018 such things as the return address and pointers to previous stack 31019 frames, is machine-specific and usually depends on which registers 31020 have been used in the function. Machines with register windows 31021 often do not require a save area. 31022 31023 * A region of at least SIZE bytes, possibly rounded up to an 31024 allocation boundary, to contain the local variables of the 31025 function. On some machines, this region and the save area may 31026 occur in the opposite order, with the save area closer to the top 31027 of the stack. 31028 31029 * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of 31030 'crtl->outgoing_args_size' bytes to be used for outgoing argument 31031 lists of the function. *Note Stack Arguments::. 31032 31033 -- Macro: EXIT_IGNORE_STACK 31034 Define this macro as a C expression that is nonzero if the return 31035 instruction or the function epilogue ignores the value of the stack 31036 pointer; in other words, if it is safe to delete an instruction to 31037 adjust the stack pointer before a return from the function. The 31038 default is 0. 31039 31040 Note that this macro's value is relevant only for functions for 31041 which frame pointers are maintained. It is never safe to delete a 31042 final stack adjustment in a function that has no frame pointer, and 31043 the compiler knows this regardless of 'EXIT_IGNORE_STACK'. 31044 31045 -- Macro: EPILOGUE_USES (REGNO) 31046 Define this macro as a C expression that is nonzero for registers 31047 that are used by the epilogue or the 'return' pattern. The stack 31048 and frame pointer registers are already assumed to be used as 31049 needed. 31050 31051 -- Macro: EH_USES (REGNO) 31052 Define this macro as a C expression that is nonzero for registers 31053 that are used by the exception handling mechanism, and so should be 31054 considered live on entry to an exception edge. 31055 31056 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 31057 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 31058 tree FUNCTION) 31059 A function that outputs the assembler code for a thunk function, 31060 used to implement C++ virtual function calls with multiple 31061 inheritance. The thunk acts as a wrapper around a virtual 31062 function, adjusting the implicit object parameter before handing 31063 control off to the real function. 31064 31065 First, emit code to add the integer DELTA to the location that 31066 contains the incoming first argument. Assume that this argument 31067 contains a pointer, and is the one used to pass the 'this' pointer 31068 in C++. This is the incoming argument _before_ the function 31069 prologue, e.g. '%o0' on a sparc. The addition must preserve the 31070 values of all other incoming arguments. 31071 31072 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 31073 be made after adding 'delta'. In particular, if P is the adjusted 31074 pointer, the following adjustment should be made: 31075 31076 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 31077 31078 After the additions, emit code to jump to FUNCTION, which is a 31079 'FUNCTION_DECL'. This is a direct pure jump, not a call, and does 31080 not touch the return address. Hence returning from FUNCTION will 31081 return to whoever called the current 'thunk'. 31082 31083 The effect must be as if FUNCTION had been called directly with the 31084 adjusted first argument. This macro is responsible for emitting 31085 all of the code for a thunk function; 31086 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' 31087 are not invoked. 31088 31089 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 31090 been extracted from it.) It might possibly be useful on some 31091 targets, but probably not. 31092 31093 If you do not define this macro, the target-independent code in the 31094 C++ front end will generate a less efficient heavyweight thunk that 31095 calls FUNCTION instead of jumping to it. The generic approach does 31096 not support varargs. 31097 31098 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 31099 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 31100 const_tree FUNCTION) 31101 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be 31102 able to output the assembler code for the thunk function specified 31103 by the arguments it is passed, and false otherwise. In the latter 31104 case, the generic approach will be used by the C++ front end, with 31105 the limitations previously exposed. 31106 31107 31108 File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 31109 31110 17.10.12 Generating Code for Profiling 31111 -------------------------------------- 31112 31113 These macros will help you generate code for profiling. 31114 31115 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 31116 A C statement or compound statement to output to FILE some 31117 assembler code to call the profiling subroutine 'mcount'. 31118 31119 The details of how 'mcount' expects to be called are determined by 31120 your operating system environment, not by GCC. To figure them out, 31121 compile a small program for profiling using the system's installed 31122 C compiler and look at the assembler code that results. 31123 31124 Older implementations of 'mcount' expect the address of a counter 31125 variable to be loaded into some register. The name of this 31126 variable is 'LP' followed by the number LABELNO, so you would 31127 generate the name using 'LP%d' in a 'fprintf'. 31128 31129 -- Macro: PROFILE_HOOK 31130 A C statement or compound statement to output to FILE some assembly 31131 code to call the profiling subroutine 'mcount' even the target does 31132 not support profiling. 31133 31134 -- Macro: NO_PROFILE_COUNTERS 31135 Define this macro to be an expression with a nonzero value if the 31136 'mcount' subroutine on your system does not need a counter variable 31137 allocated for each function. This is true for almost all modern 31138 implementations. If you define this macro, you must not use the 31139 LABELNO argument to 'FUNCTION_PROFILER'. 31140 31141 -- Macro: PROFILE_BEFORE_PROLOGUE 31142 Define this macro if the code for function profiling should come 31143 before the function prologue. Normally, the profiling code comes 31144 after. 31145 31146 31147 File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 31148 31149 17.10.13 Permitting tail calls 31150 ------------------------------ 31151 31152 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 31153 EXP) 31154 True if it is ok to do sibling call optimization for the specified 31155 call expression EXP. DECL will be the called function, or 'NULL' 31156 if this is an indirect call. 31157 31158 It is not uncommon for limitations of calling conventions to 31159 prevent tail calls to functions outside the current unit of 31160 translation, or during PIC compilation. The hook is used to 31161 enforce these restrictions, as the 'sibcall' md pattern can not 31162 fail, or fall over to a "normal" call. The criteria for successful 31163 sibling call optimization may vary greatly between different 31164 architectures. 31165 31166 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 31167 Add any hard registers to REGS that are live on entry to the 31168 function. This hook only needs to be defined to provide registers 31169 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 31170 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 31171 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, 31172 EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the 31173 PIC_OFFSET_TABLE_REGNUM. 31174 31175 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct 31176 hard_reg_set_container *) 31177 This hook should add additional registers that are computed by the 31178 prologue to the hard regset for shrink-wrapping optimization 31179 purposes. 31180 31181 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree) 31182 True if a function's return statements should be checked for 31183 matching the function's return type. This includes checking for 31184 falling off the end of a non-void function. Return false if no 31185 such check should be made. 31186 31187 31188 File: gccint.info, Node: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling 31189 31190 17.10.14 Stack smashing protection 31191 ---------------------------------- 31192 31193 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 31194 This hook returns a 'DECL' node for the external variable to use 31195 for the stack protection guard. This variable is initialized by 31196 the runtime to some random value and is used to initialize the 31197 guard value that is placed at the top of the local stack frame. 31198 The type of this variable must be 'ptr_type_node'. 31199 31200 The default version of this hook creates a variable called 31201 '__stack_chk_guard', which is normally defined in 'libgcc2.c'. 31202 31203 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 31204 This hook returns a 'CALL_EXPR' that alerts the runtime that the 31205 stack protect guard variable has been modified. This expression 31206 should involve a call to a 'noreturn' function. 31207 31208 The default version of this hook invokes a function called 31209 '__stack_chk_fail', taking no arguments. This function is normally 31210 defined in 'libgcc2.c'. 31211 31212 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, 31213 struct gcc_options *OPTS) 31214 Whether this target supports splitting the stack when the options 31215 described in OPTS have been passed. This is called after options 31216 have been parsed, so the target may reject splitting the stack in 31217 some configurations. The default version of this hook returns 31218 false. If REPORT is true, this function may issue a warning or 31219 error; if REPORT is false, it must simply return a value 31220 31221 31222 File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 31223 31224 17.11 Implementing the Varargs Macros 31225 ===================================== 31226 31227 GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that 31228 work without change on machines that pass arguments on the stack. Other 31229 machines require their own implementations of varargs, and the two 31230 machine independent header files must have conditionals to include it. 31231 31232 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the 31233 calling convention for 'va_start'. The traditional implementation takes 31234 just one argument, which is the variable in which to store the argument 31235 pointer. The ISO implementation of 'va_start' takes an additional 31236 second argument. The user is supposed to write the last named argument 31237 of the function here. 31238 31239 However, 'va_start' should not use this argument. The way to find the 31240 end of the named arguments is with the built-in functions described 31241 below. 31242 31243 -- Macro: __builtin_saveregs () 31244 Use this built-in function to save the argument registers in memory 31245 so that the varargs mechanism can access them. Both ISO and 31246 traditional versions of 'va_start' must use '__builtin_saveregs', 31247 unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 31248 31249 On some machines, '__builtin_saveregs' is open-coded under the 31250 control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'. On 31251 other machines, it calls a routine written in assembler language, 31252 found in 'libgcc2.c'. 31253 31254 Code generated for the call to '__builtin_saveregs' appears at the 31255 beginning of the function, as opposed to where the call to 31256 '__builtin_saveregs' is written, regardless of what the code is. 31257 This is because the registers must be saved before the function 31258 starts to use them for its own purposes. 31259 31260 -- Macro: __builtin_next_arg (LASTARG) 31261 This builtin returns the address of the first anonymous stack 31262 argument, as type 'void *'. If 'ARGS_GROW_DOWNWARD', it returns 31263 the address of the location above the first anonymous stack 31264 argument. Use it in 'va_start' to initialize the pointer for 31265 fetching arguments from the stack. Also use it in 'va_start' to 31266 verify that the second parameter LASTARG is the last named argument 31267 of the current function. 31268 31269 -- Macro: __builtin_classify_type (OBJECT) 31270 Since each machine has its own conventions for which data types are 31271 passed in which kind of register, your implementation of 'va_arg' 31272 has to embody these conventions. The easiest way to categorize the 31273 specified data type is to use '__builtin_classify_type' together 31274 with 'sizeof' and '__alignof__'. 31275 31276 '__builtin_classify_type' ignores the value of OBJECT, considering 31277 only its data type. It returns an integer describing what kind of 31278 type that is--integer, floating, pointer, structure, and so on. 31279 31280 The file 'typeclass.h' defines an enumeration that you can use to 31281 interpret the values of '__builtin_classify_type'. 31282 31283 These machine description macros help implement varargs: 31284 31285 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 31286 If defined, this hook produces the machine-specific code for a call 31287 to '__builtin_saveregs'. This code will be moved to the very 31288 beginning of the function, before any parameter access are made. 31289 The return value of this function should be an RTX that contains 31290 the value to use as the return of '__builtin_saveregs'. 31291 31292 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 31293 ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int 31294 *PRETEND_ARGS_SIZE, int SECOND_TIME) 31295 This target hook offers an alternative to using 31296 '__builtin_saveregs' and defining the hook 31297 'TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 31298 register arguments into the stack so that all the arguments appear 31299 to have been passed consecutively on the stack. Once this is done, 31300 you can use the standard implementation of varargs that works for 31301 machines that pass all their arguments on the stack. 31302 31303 The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data 31304 structure, containing the values that are obtained after processing 31305 the named arguments. The arguments MODE and TYPE describe the last 31306 named argument--its machine mode and its data type as a tree node. 31307 31308 The target hook should do two things: first, push onto the stack 31309 all the argument registers _not_ used for the named arguments, and 31310 second, store the size of the data thus pushed into the 31311 'int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 31312 that you store here will serve as additional offset for setting up 31313 the stack frame. 31314 31315 Because you must generate code to push the anonymous arguments at 31316 compile time without knowing their data types, 31317 'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 31318 have just a single category of argument register and use it 31319 uniformly for all data types. 31320 31321 If the argument SECOND_TIME is nonzero, it means that the arguments 31322 of the function are being analyzed for the second time. This 31323 happens for an inline function, which is not actually compiled 31324 until the end of the source file. The hook 31325 'TARGET_SETUP_INCOMING_VARARGS' should not generate any 31326 instructions in this case. 31327 31328 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 31329 CA) 31330 Define this hook to return 'true' if the location where a function 31331 argument is passed depends on whether or not it is a named 31332 argument. 31333 31334 This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG' 31335 is set for varargs and stdarg functions. If this hook returns 31336 'true', the NAMED argument is always true for named arguments, and 31337 false for unnamed arguments. If it returns 'false', but 31338 'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all 31339 arguments are treated as named. Otherwise, all named arguments 31340 except the last are treated as named. 31341 31342 You need not define this hook if it always returns 'false'. 31343 31344 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 31345 (cumulative_args_t CA) 31346 If you need to conditionally change ABIs so that one works with 31347 'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 31348 'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING' 31349 was defined, then define this hook to return 'true' if 31350 'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise. 31351 Otherwise, you should not define this hook. 31352 31353 31354 File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 31355 31356 17.12 Trampolines for Nested Functions 31357 ====================================== 31358 31359 A "trampoline" is a small piece of code that is created at run time when 31360 the address of a nested function is taken. It normally resides on the 31361 stack, in the stack frame of the containing function. These macros tell 31362 GCC how to generate code to allocate and initialize a trampoline. 31363 31364 The instructions in the trampoline must do two things: load a constant 31365 address into the static chain register, and jump to the real address of 31366 the nested function. On CISC machines such as the m68k, this requires 31367 two instructions, a move immediate and a jump. Then the two addresses 31368 exist in the trampoline as word-long immediate operands. On RISC 31369 machines, it is often necessary to load each address into a register in 31370 two parts. Then pieces of each address form separate immediate 31371 operands. 31372 31373 The code generated to initialize the trampoline must store the variable 31374 parts--the static chain value and the function address--into the 31375 immediate operands of the instructions. On a CISC machine, this is 31376 simply a matter of copying each address to a memory reference at the 31377 proper offset from the start of the trampoline. On a RISC machine, it 31378 may be necessary to take out pieces of the address and store them 31379 separately. 31380 31381 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 31382 This hook is called by 'assemble_trampoline_template' to output, on 31383 the stream F, assembler code for a block of data that contains the 31384 constant parts of a trampoline. This code should not include a 31385 label--the label is taken care of automatically. 31386 31387 If you do not define this hook, it means no template is needed for 31388 the target. Do not define this hook on systems where the block 31389 move code to copy the trampoline into place would be larger than 31390 the code to generate it on the spot. 31391 31392 -- Macro: TRAMPOLINE_SECTION 31393 Return the section into which the trampoline template is to be 31394 placed (*note Sections::). The default value is 31395 'readonly_data_section'. 31396 31397 -- Macro: TRAMPOLINE_SIZE 31398 A C expression for the size in bytes of the trampoline, as an 31399 integer. 31400 31401 -- Macro: TRAMPOLINE_ALIGNMENT 31402 Alignment required for trampolines, in bits. 31403 31404 If you don't define this macro, the value of 'FUNCTION_ALIGNMENT' 31405 is used for aligning trampolines. 31406 31407 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 31408 rtx STATIC_CHAIN) 31409 This hook is called to initialize a trampoline. M_TRAMP is an RTX 31410 for the memory block for the trampoline; FNDECL is the 31411 'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for 31412 the static chain value that should be passed to the function when 31413 it is called. 31414 31415 If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 31416 first thing this hook should do is emit a block move into M_TRAMP 31417 from the memory block returned by 'assemble_trampoline_template'. 31418 Note that the block move need only cover the constant parts of the 31419 trampoline. If the target isolates the variable parts of the 31420 trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be 31421 copied. 31422 31423 If the target requires any other actions, such as flushing caches 31424 or enabling stack execution, these actions should be performed 31425 after initializing the trampoline proper. 31426 31427 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 31428 This hook should perform any machine-specific adjustment in the 31429 address of the trampoline. Its argument contains the address of 31430 the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'. In 31431 case the address to be used for a function call should be different 31432 from the address at which the template was stored, the different 31433 address should be returned; otherwise ADDR should be returned 31434 unchanged. If this hook is not defined, ADDR will be used for 31435 function calls. 31436 31437 Implementing trampolines is difficult on many machines because they 31438 have separate instruction and data caches. Writing into a stack 31439 location fails to clear the memory in the instruction cache, so when the 31440 program jumps to that location, it executes the old contents. 31441 31442 Here are two possible solutions. One is to clear the relevant parts of 31443 the instruction cache whenever a trampoline is set up. The other is to 31444 make all trampolines identical, by having them jump to a standard 31445 subroutine. The former technique makes trampoline execution faster; the 31446 latter makes initialization faster. 31447 31448 To clear the instruction cache when a trampoline is initialized, define 31449 the following macro. 31450 31451 -- Macro: CLEAR_INSN_CACHE (BEG, END) 31452 If defined, expands to a C expression clearing the _instruction 31453 cache_ in the specified interval. The definition of this macro 31454 would typically be a series of 'asm' statements. Both BEG and END 31455 are both pointer expressions. 31456 31457 To use a standard subroutine, define the following macro. In addition, 31458 you must make sure that the instructions in a trampoline fill an entire 31459 cache line with identical instructions, or else ensure that the 31460 beginning of the trampoline code is always aligned at the same point in 31461 its cache line. Look in 'm68k.h' as a guide. 31462 31463 -- Macro: TRANSFER_FROM_TRAMPOLINE 31464 Define this macro if trampolines need a special subroutine to do 31465 their work. The macro should expand to a series of 'asm' 31466 statements which will be compiled with GCC. They go in a library 31467 function named '__transfer_from_trampoline'. 31468 31469 If you need to avoid executing the ordinary prologue code of a 31470 compiled C function when you jump to the subroutine, you can do so 31471 by placing a special label of your own in the assembler code. Use 31472 one 'asm' statement to generate an assembler label, and another to 31473 make the label global. Then trampolines can use that label to jump 31474 directly to your special assembler code. 31475 31476 31477 File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 31478 31479 17.13 Implicit Calls to Library Routines 31480 ======================================== 31481 31482 Here is an explanation of implicit calls to library routines. 31483 31484 -- Macro: DECLARE_LIBRARY_RENAMES 31485 This macro, if defined, should expand to a piece of C code that 31486 will get expanded when compiling functions for libgcc.a. It can be 31487 used to provide alternate names for GCC's internal library 31488 functions if there are ABI-mandated names that the compiler should 31489 provide. 31490 31491 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 31492 This hook should declare additional library routines or rename 31493 existing ones, using the functions 'set_optab_libfunc' and 31494 'init_one_libfunc' defined in 'optabs.c'. 'init_optabs' calls this 31495 macro after initializing all the normal library routines. 31496 31497 The default is to do nothing. Most ports don't need to define this 31498 hook. 31499 31500 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX 31501 If false (the default), internal library routines start with two 31502 underscores. If set to true, these routines start with '__gnu_' 31503 instead. E.g., '__muldi3' changes to '__gnu_muldi3'. This 31504 currently only affects functions defined in 'libgcc2.c'. If this 31505 is set to true, the 'tm.h' file must also '#define 31506 LIBGCC2_GNU_PREFIX'. 31507 31508 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 31509 This macro should return 'true' if the library routine that 31510 implements the floating point comparison operator COMPARISON in 31511 mode MODE will return a boolean, and FALSE if it will return a 31512 tristate. 31513 31514 GCC's own floating point libraries return tristates from the 31515 comparison operators, so the default returns false always. Most 31516 ports don't need to define this macro. 31517 31518 -- Macro: TARGET_LIB_INT_CMP_BIASED 31519 This macro should evaluate to 'true' if the integer comparison 31520 functions (like '__cmpdi2') return 0 to indicate that the first 31521 operand is smaller than the second, 1 to indicate that they are 31522 equal, and 2 to indicate that the first operand is greater than the 31523 second. If this macro evaluates to 'false' the comparison 31524 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 31525 target uses the routines in 'libgcc.a', you do not need to define 31526 this macro. 31527 31528 -- Macro: TARGET_EDOM 31529 The value of 'EDOM' on the target machine, as a C integer constant 31530 expression. If you don't define this macro, GCC does not attempt 31531 to deposit the value of 'EDOM' into 'errno' directly. Look in 31532 '/usr/include/errno.h' to find the value of 'EDOM' on your system. 31533 31534 If you do not define 'TARGET_EDOM', then compiled code reports 31535 domain errors by calling the library function and letting it report 31536 the error. If mathematical functions on your system use 'matherr' 31537 when there is an error, then you should leave 'TARGET_EDOM' 31538 undefined so that 'matherr' is used normally. 31539 31540 -- Macro: GEN_ERRNO_RTX 31541 Define this macro as a C expression to create an rtl expression 31542 that refers to the global "variable" 'errno'. (On certain systems, 31543 'errno' may not actually be a variable.) If you don't define this 31544 macro, a reasonable default is used. 31545 31546 -- Macro: TARGET_C99_FUNCTIONS 31547 When this macro is nonzero, GCC will implicitly optimize 'sin' 31548 calls into 'sinf' and similarly for other functions defined by C99 31549 standard. The default is zero because a number of existing systems 31550 lack support for these functions in their runtime so this macro 31551 needs to be redefined to one on systems that do support the C99 31552 runtime. 31553 31554 -- Macro: TARGET_HAS_SINCOS 31555 When this macro is nonzero, GCC will implicitly optimize calls to 31556 'sin' and 'cos' with the same argument to a call to 'sincos'. The 31557 default is zero. The target has to provide the following 31558 functions: 31559 void sincos(double x, double *sin, double *cos); 31560 void sincosf(float x, float *sin, float *cos); 31561 void sincosl(long double x, long double *sin, long double *cos); 31562 31563 -- Macro: NEXT_OBJC_RUNTIME 31564 Set this macro to 1 to use the "NeXT" Objective-C message sending 31565 conventions by default. This calling convention involves passing 31566 the object, the selector and the method arguments all at once to 31567 the method-lookup library function. This is the usual setting when 31568 targeting Darwin/Mac OS X systems, which have the NeXT runtime 31569 installed. 31570 31571 If the macro is set to 0, the "GNU" Objective-C message sending 31572 convention will be used by default. This convention passes just 31573 the object and the selector to the method-lookup function, which 31574 returns a pointer to the method. 31575 31576 In either case, it remains possible to select code-generation for 31577 the alternate scheme, by means of compiler command line switches. 31578 31579 31580 File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 31581 31582 17.14 Addressing Modes 31583 ====================== 31584 31585 This is about addressing modes. 31586 31587 -- Macro: HAVE_PRE_INCREMENT 31588 -- Macro: HAVE_PRE_DECREMENT 31589 -- Macro: HAVE_POST_INCREMENT 31590 -- Macro: HAVE_POST_DECREMENT 31591 A C expression that is nonzero if the machine supports 31592 pre-increment, pre-decrement, post-increment, or post-decrement 31593 addressing respectively. 31594 31595 -- Macro: HAVE_PRE_MODIFY_DISP 31596 -- Macro: HAVE_POST_MODIFY_DISP 31597 A C expression that is nonzero if the machine supports pre- or 31598 post-address side-effect generation involving constants other than 31599 the size of the memory operand. 31600 31601 -- Macro: HAVE_PRE_MODIFY_REG 31602 -- Macro: HAVE_POST_MODIFY_REG 31603 A C expression that is nonzero if the machine supports pre- or 31604 post-address side-effect generation involving a register 31605 displacement. 31606 31607 -- Macro: CONSTANT_ADDRESS_P (X) 31608 A C expression that is 1 if the RTX X is a constant which is a 31609 valid address. On most machines the default definition of 31610 '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 31611 but a few machines are more restrictive as to which constant 31612 addresses are supported. 31613 31614 -- Macro: CONSTANT_P (X) 31615 'CONSTANT_P', which is defined by target-independent code, accepts 31616 integer-values expressions whose values are not explicitly known, 31617 such as 'symbol_ref', 'label_ref', and 'high' expressions and 31618 'const' arithmetic expressions, in addition to 'const_int' and 31619 'const_double' expressions. 31620 31621 -- Macro: MAX_REGS_PER_ADDRESS 31622 A number, the maximum number of registers that can appear in a 31623 valid memory address. Note that it is up to you to specify a value 31624 equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P' 31625 would ever accept. 31626 31627 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode 31628 MODE, rtx X, bool STRICT) 31629 A function that returns whether X (an RTX) is a legitimate memory 31630 address on the target machine for a memory operand of mode MODE. 31631 31632 Legitimate addresses are defined in two variants: a strict variant 31633 and a non-strict one. The STRICT parameter chooses which variant 31634 is desired by the caller. 31635 31636 The strict variant is used in the reload pass. It must be defined 31637 so that any pseudo-register that has not been allocated a hard 31638 register is considered a memory reference. This is because in 31639 contexts where some kind of register is required, a pseudo-register 31640 with no hard register must be rejected. For non-hard registers, 31641 the strict variant should look up the 'reg_renumber' array; it 31642 should then proceed using the hard register number in the array, or 31643 treat the pseudo as a memory reference if the array holds '-1'. 31644 31645 The non-strict variant is used in other passes. It must be defined 31646 to accept all pseudo-registers in every context where some kind of 31647 register is required. 31648 31649 Normally, constant addresses which are the sum of a 'symbol_ref' 31650 and an integer are stored inside a 'const' RTX to mark them as 31651 constant. Therefore, there is no need to recognize such sums 31652 specifically as legitimate addresses. Normally you would simply 31653 recognize any 'const' as legitimate. 31654 31655 Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant 31656 sums that are not marked with 'const'. It assumes that a naked 31657 'plus' indicates indexing. If so, then you _must_ reject such 31658 naked constant sums as illegitimate addresses, so that none of them 31659 will be given to 'PRINT_OPERAND_ADDRESS'. 31660 31661 On some machines, whether a symbolic address is legitimate depends 31662 on the section that the address refers to. On these machines, 31663 define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the 31664 information into the 'symbol_ref', and then check for it here. 31665 When you see a 'const', you will have to look inside it to find the 31666 'symbol_ref' in order to determine the section. *Note Assembler 31667 Format::. 31668 31669 Some ports are still using a deprecated legacy substitute for this 31670 hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 31671 syntax: 31672 31673 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 31674 31675 and should 'goto LABEL' if the address X is a valid address on the 31676 target machine for a memory operand of mode MODE. 31677 31678 Compiler source files that want to use the strict variant of this 31679 macro define the macro 'REG_OK_STRICT'. You should use an '#ifdef 31680 REG_OK_STRICT' conditional to define the strict variant in that 31681 case and the non-strict variant otherwise. 31682 31683 Using the hook is usually simpler because it limits the number of 31684 files that are recompiled when changes are made. 31685 31686 -- Macro: TARGET_MEM_CONSTRAINT 31687 A single character to be used instead of the default ''m'' 31688 character for general memory addresses. This defines the 31689 constraint letter which matches the memory addresses accepted by 31690 'TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 31691 support new address formats in your back end without changing the 31692 semantics of the ''m'' constraint. This is necessary in order to 31693 preserve functionality of inline assembly constructs using the 31694 ''m'' constraint. 31695 31696 -- Macro: FIND_BASE_TERM (X) 31697 A C expression to determine the base term of address X, or to 31698 provide a simplified version of X from which 'alias.c' can easily 31699 find the base term. This macro is used in only two places: 31700 'find_base_value' and 'find_base_term' in 'alias.c'. 31701 31702 It is always safe for this macro to not be defined. It exists so 31703 that alias analysis can understand machine-dependent addresses. 31704 31705 The typical use of this macro is to handle addresses containing a 31706 label_ref or symbol_ref within an UNSPEC. 31707 31708 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum 31709 machine_mode MODE) 31710 This hook is given an invalid memory address X for an operand of 31711 mode MODE and should try to return a valid memory address. 31712 31713 X will always be the result of a call to 'break_out_memory_refs', 31714 and OLDX will be the operand that was given to that function to 31715 produce X. 31716 31717 The code of the hook should not alter the substructure of X. If it 31718 transforms X into a more legitimate form, it should return the new 31719 X. 31720 31721 It is not necessary for this hook to come up with a legitimate 31722 address, with the exception of native TLS addresses (*note Emulated 31723 TLS::). The compiler has standard ways of doing so in all cases. 31724 In fact, if the target supports only emulated TLS, it is safe to 31725 omit this hook or make it return X if it cannot find a valid way to 31726 legitimize the address. But often a machine-dependent strategy can 31727 generate better code. 31728 31729 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 31730 WIN) 31731 A C compound statement that attempts to replace X, which is an 31732 address that needs reloading, with a valid memory address for an 31733 operand of mode MODE. WIN will be a C statement label elsewhere in 31734 the code. It is not necessary to define this macro, but it might 31735 be useful for performance reasons. 31736 31737 For example, on the i386, it is sometimes possible to use a single 31738 reload register instead of two by reloading a sum of two pseudo 31739 registers into a register. On the other hand, for number of RISC 31740 processors offsets are limited so that often an intermediate 31741 address needs to be generated in order to address a stack slot. By 31742 defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 31743 intermediate addresses generated for adjacent some stack slots can 31744 be made identical, and thus be shared. 31745 31746 _Note_: This macro should be used with caution. It is necessary to 31747 know something of how reload works in order to effectively use 31748 this, and it is quite easy to produce macros that build in too much 31749 knowledge of reload internals. 31750 31751 _Note_: This macro must be able to reload an address created by a 31752 previous invocation of this macro. If it fails to handle such 31753 addresses then the compiler may generate incorrect code or abort. 31754 31755 The macro definition should use 'push_reload' to indicate parts 31756 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 31757 suitable to be passed unaltered to 'push_reload'. 31758 31759 The code generated by this macro must not alter the substructure of 31760 X. If it transforms X into a more legitimate form, it should 31761 assign X (which will always be a C variable) a new value. This 31762 also applies to parts that you change indirectly by calling 31763 'push_reload'. 31764 31765 The macro definition may use 'strict_memory_address_p' to test if 31766 the address has become legitimate. 31767 31768 If you want to change only a part of X, one standard way of doing 31769 this is to use 'copy_rtx'. Note, however, that it unshares only a 31770 single level of rtl. Thus, if the part to be changed is not at the 31771 top level, you'll need to replace first the top level. It is not 31772 necessary for this macro to come up with a legitimate address; but 31773 often a machine-dependent strategy can generate better code. 31774 31775 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR, 31776 addr_space_t ADDRSPACE) 31777 This hook returns 'true' if memory address ADDR in address space 31778 ADDRSPACE can have different meanings depending on the machine mode 31779 of the memory reference it is used for or if the address is valid 31780 for some modes but not others. 31781 31782 Autoincrement and autodecrement addresses typically have 31783 mode-dependent effects because the amount of the increment or 31784 decrement is the size of the operand being addressed. Some 31785 machines have other mode-dependent addresses. Many RISC machines 31786 have no mode-dependent addresses. 31787 31788 You may assume that ADDR is a valid address for the machine. 31789 31790 The default version of this hook returns 'false'. 31791 31792 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode 31793 MODE, rtx X) 31794 This hook returns true if X is a legitimate constant for a 31795 MODE-mode immediate operand on the target machine. You can assume 31796 that X satisfies 'CONSTANT_P', so you need not check this. 31797 31798 The default definition returns true. 31799 31800 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 31801 This hook is used to undo the possibly obfuscating effects of the 31802 'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros. 31803 Some backend implementations of these macros wrap symbol references 31804 inside an 'UNSPEC' rtx to represent PIC or similar addressing 31805 modes. This target hook allows GCC's optimizers to understand the 31806 semantics of these opaque 'UNSPEC's by converting them back into 31807 their original form. 31808 31809 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X) 31810 This hook should return true if X should not be emitted into debug 31811 sections. 31812 31813 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (enum machine_mode 31814 MODE, rtx X) 31815 This hook should return true if X is of a form that cannot (or 31816 should not) be spilled to the constant pool. MODE is the mode of 31817 X. 31818 31819 The default version of this hook returns false. 31820 31821 The primary reason to define this hook is to prevent reload from 31822 deciding that a non-legitimate constant would be better reloaded 31823 from the constant pool instead of spilling and reloading a register 31824 holding the constant. This restriction is often true of addresses 31825 of TLS symbols for various targets. 31826 31827 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum 31828 machine_mode MODE, const_rtx X) 31829 This hook should return true if pool entries for constant X can be 31830 placed in an 'object_block' structure. MODE is the mode of X. 31831 31832 The default version returns false for all constants. 31833 31834 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL) 31835 This hook should return true if pool entries for DECL should be 31836 placed in an 'object_block' structure. 31837 31838 The default version returns true for all decls. 31839 31840 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool 31841 MD_FN, bool SQRT) 31842 This hook should return the DECL of a function that implements 31843 reciprocal of the builtin function with builtin function code FN, 31844 or 'NULL_TREE' if such a function is not available. MD_FN is true 31845 when FN is a code of a machine-dependent builtin function. When 31846 SQRT is true, additional optimizations that apply only to the 31847 reciprocal of a square root function are performed, and only 31848 reciprocals of 'sqrt' function are valid. 31849 31850 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 31851 This hook should return the DECL of a function F that given an 31852 address ADDR as an argument returns a mask M that can be used to 31853 extract from two vectors the relevant data that resides in ADDR in 31854 case ADDR is not properly aligned. 31855 31856 The autovectorizer, when vectorizing a load operation from an 31857 address ADDR that may be unaligned, will generate two vector loads 31858 from the two aligned addresses around ADDR. It then generates a 31859 'REALIGN_LOAD' operation to extract the relevant data from the two 31860 loaded vectors. The first two arguments to 'REALIGN_LOAD', V1 and 31861 V2, are the two vectors, each of size VS, and the third argument, 31862 OFF, defines how the data will be extracted from these two vectors: 31863 if OFF is 0, then the returned vector is V2; otherwise, the 31864 returned vector is composed from the last VS-OFF elements of V1 31865 concatenated to the first OFF elements of V2. 31866 31867 If this hook is defined, the autovectorizer will generate a call to 31868 F (using the DECL tree that this hook returns) and will use the 31869 return value of F as the argument OFF to 'REALIGN_LOAD'. 31870 Therefore, the mask M returned by F should comply with the 31871 semantics expected by 'REALIGN_LOAD' described above. If this hook 31872 is not defined, then ADDR will be used as the argument OFF to 31873 'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 31874 will be considered. 31875 31876 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum 31877 vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN) 31878 Returns cost of different scalar or vector statements for 31879 vectorization cost model. For vector memory operations the cost 31880 may depend on type (VECTYPE) and misalignment value (MISALIGN). 31881 31882 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 31883 (const_tree TYPE, bool IS_PACKED) 31884 Return true if vector alignment is reachable (by peeling N 31885 iterations) for the given type. 31886 31887 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (enum 31888 MACHINE_MODE, const unsigned char *SEL) 31889 Return true if a vector created for 'vec_perm_const' is valid. 31890 31891 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned 31892 CODE, tree DEST_TYPE, tree SRC_TYPE) 31893 This hook should return the DECL of a function that implements 31894 conversion of the input vector of type SRC_TYPE to type DEST_TYPE. 31895 The value of CODE is one of the enumerators in 'enum tree_code' and 31896 specifies how the conversion is to be applied (truncation, 31897 rounding, etc.). 31898 31899 If this hook is defined, the autovectorizer will use the 31900 'TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 31901 conversion. Otherwise, it will return 'NULL_TREE'. 31902 31903 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION (tree 31904 FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 31905 This hook should return the decl of a function that implements the 31906 vectorized variant of the builtin function with builtin function 31907 code CODE or 'NULL_TREE' if such a function is not available. The 31908 value of FNDECL is the builtin function declaration. The return 31909 type of the vectorized function shall be of vector type 31910 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 31911 31912 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (enum 31913 machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool 31914 IS_PACKED) 31915 This hook should return true if the target supports misaligned 31916 vector store/load of a specific factor denoted in the MISALIGNMENT 31917 parameter. The vector store/load should be of machine mode MODE 31918 and the elements in the vectors should be of type TYPE. IS_PACKED 31919 parameter is true if the memory access is defined in a packed 31920 struct. 31921 31922 -- Target Hook: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE 31923 (enum machine_mode MODE) 31924 This hook should return the preferred mode for vectorizing scalar 31925 mode MODE. The default is equal to 'word_mode', because the 31926 vectorizer can do some transformations even in absence of 31927 specialized SIMD hardware. 31928 31929 -- Target Hook: unsigned int 31930 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void) 31931 This hook should return a mask of sizes that should be iterated 31932 over after trying to autovectorize using the vector size derived 31933 from the mode returned by 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE'. 31934 The default is zero which means to not iterate over other vector 31935 sizes. 31936 31937 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop 31938 *LOOP_INFO) 31939 This hook should initialize target-specific data structures in 31940 preparation for modeling the costs of vectorizing a loop or basic 31941 block. The default allocates three unsigned integers for 31942 accumulating costs for the prologue, body, and epilogue of the loop 31943 or basic block. If LOOP_INFO is non-NULL, it identifies the loop 31944 being vectorized; otherwise a single block is being vectorized. 31945 31946 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA, 31947 int COUNT, enum vect_cost_for_stmt KIND, struct _stmt_vec_info 31948 *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE) 31949 This hook should update the target-specific DATA in response to 31950 adding COUNT copies of the given KIND of statement to a loop or 31951 basic block. The default adds the builtin vectorizer cost for the 31952 copies of the statement to the accumulator specified by WHERE, (the 31953 prologue, body, or epilogue) and returns the amount added. The 31954 return value should be viewed as a tentative cost that may later be 31955 revised. 31956 31957 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned 31958 *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST) 31959 This hook should complete calculations of the cost of vectorizing a 31960 loop or basic block based on DATA, and return the prologue, body, 31961 and epilogue costs as unsigned integers. The default returns the 31962 value of the three accumulators. 31963 31964 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA) 31965 This hook should release DATA and any related data structures 31966 allocated by TARGET_VECTORIZE_INIT_COST. The default releases the 31967 accumulator. 31968 31969 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree) 31970 This hook should return the built-in decl needed to load a vector 31971 of the given type within a transaction. 31972 31973 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree) 31974 This hook should return the built-in decl needed to store a vector 31975 of the given type within a transaction. 31976 31977 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree 31978 MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE) 31979 Target builtin that implements vector gather operation. 31980 MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar 31981 type of the index, scaled by SCALE. The default is 'NULL_TREE' 31982 which means to not vectorize gather loads. 31983 31984 31985 File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 31986 31987 17.15 Anchored Addresses 31988 ======================== 31989 31990 GCC usually addresses every static object as a separate entity. For 31991 example, if we have: 31992 31993 static int a, b, c; 31994 int foo (void) { return a + b + c; } 31995 31996 the code for 'foo' will usually calculate three separate symbolic 31997 addresses: those of 'a', 'b' and 'c'. On some targets, it would be 31998 better to calculate just one symbolic address and access the three 31999 variables relative to it. The equivalent pseudocode would be something 32000 like: 32001 32002 int foo (void) 32003 { 32004 register int *xr = &x; 32005 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 32006 } 32007 32008 (which isn't valid C). We refer to shared addresses like 'x' as 32009 "section anchors". Their use is controlled by '-fsection-anchors'. 32010 32011 The hooks below describe the target properties that GCC needs to know 32012 in order to make effective use of section anchors. It won't use section 32013 anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or 32014 'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 32015 32016 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 32017 The minimum offset that should be applied to a section anchor. On 32018 most targets, it should be the smallest offset that can be applied 32019 to a base register while still giving a legitimate address for 32020 every mode. The default value is 0. 32021 32022 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 32023 Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset 32024 that should be applied to section anchors. The default value is 0. 32025 32026 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 32027 Write the assembly code to define section anchor X, which is a 32028 'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true. The hook 32029 is called with the assembly output position set to the beginning of 32030 'SYMBOL_REF_BLOCK (X)'. 32031 32032 If 'ASM_OUTPUT_DEF' is available, the hook's default definition 32033 uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'. 32034 If 'ASM_OUTPUT_DEF' is not available, the hook's default definition 32035 is 'NULL', which disables the use of section anchors altogether. 32036 32037 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 32038 Return true if GCC should attempt to use anchors to access 32039 'SYMBOL_REF' X. You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 32040 and '!SYMBOL_REF_ANCHOR_P (X)'. 32041 32042 The default version is correct for most targets, but you might need 32043 to intercept this hook to handle things like target-specific 32044 attributes or target-specific sections. 32045 32046 32047 File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 32048 32049 17.16 Condition Code Status 32050 =========================== 32051 32052 The macros in this section can be split in two families, according to 32053 the two ways of representing condition codes in GCC. 32054 32055 The first representation is the so called '(cc0)' representation (*note 32056 Jump Patterns::), where all instructions can have an implicit clobber of 32057 the condition codes. The second is the condition code register 32058 representation, which provides better schedulability for architectures 32059 that do have a condition code register, but on which most instructions 32060 do not affect it. The latter category includes most RISC machines. 32061 32062 The implicit clobbering poses a strong restriction on the placement of 32063 the definition and use of the condition code, which need to be in 32064 adjacent insns for machines using '(cc0)'. This can prevent important 32065 optimizations on some machines. For example, on the IBM RS/6000, there 32066 is a delay for taken branches unless the condition code register is set 32067 three instructions earlier than the conditional branch. The instruction 32068 scheduler cannot perform this optimization if it is not permitted to 32069 separate the definition and use of the condition code register. 32070 32071 For this reason, it is possible and suggested to use a register to 32072 represent the condition code for new ports. If there is a specific 32073 condition code register in the machine, use a hard register. If the 32074 condition code or comparison result can be placed in any general 32075 register, or if there are multiple condition registers, use a pseudo 32076 register. Registers used to store the condition code value will usually 32077 have a mode that is in class 'MODE_CC'. 32078 32079 Alternatively, you can use 'BImode' if the comparison operator is 32080 specified already in the compare instruction. In this case, you are not 32081 interested in most macros in this section. 32082 32083 * Menu: 32084 32085 * CC0 Condition Codes:: Old style representation of condition codes. 32086 * MODE_CC Condition Codes:: Modern representation of condition codes. 32087 * Cond Exec Macros:: Macros to control conditional execution. 32088 32089 32090 File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 32091 32092 17.16.1 Representation of condition codes using '(cc0)' 32093 ------------------------------------------------------- 32094 32095 The file 'conditions.h' defines a variable 'cc_status' to describe how 32096 the condition code was computed (in case the interpretation of the 32097 condition code depends on the instruction that it was set by). This 32098 variable contains the RTL expressions on which the condition code is 32099 currently based, and several standard flags. 32100 32101 Sometimes additional machine-specific flags must be defined in the 32102 machine description header file. It can also add additional 32103 machine-specific information by defining 'CC_STATUS_MDEP'. 32104 32105 -- Macro: CC_STATUS_MDEP 32106 C code for a data type which is used for declaring the 'mdep' 32107 component of 'cc_status'. It defaults to 'int'. 32108 32109 This macro is not used on machines that do not use 'cc0'. 32110 32111 -- Macro: CC_STATUS_MDEP_INIT 32112 A C expression to initialize the 'mdep' field to "empty". The 32113 default definition does nothing, since most machines don't use the 32114 field anyway. If you want to use the field, you should probably 32115 define this macro to initialize it. 32116 32117 This macro is not used on machines that do not use 'cc0'. 32118 32119 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 32120 A C compound statement to set the components of 'cc_status' 32121 appropriately for an insn INSN whose body is EXP. It is this 32122 macro's responsibility to recognize insns that set the condition 32123 code as a byproduct of other activity as well as those that 32124 explicitly set '(cc0)'. 32125 32126 This macro is not used on machines that do not use 'cc0'. 32127 32128 If there are insns that do not set the condition code but do alter 32129 other machine registers, this macro must check to see whether they 32130 invalidate the expressions that the condition code is recorded as 32131 reflecting. For example, on the 68000, insns that store in address 32132 registers do not set the condition code, which means that usually 32133 'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns. 32134 But suppose that the previous insn set the condition code based on 32135 location 'a4@(102)' and the current insn stores a new value in 32136 'a4'. Although the condition code is not changed by this, it will 32137 no longer be true that it reflects the contents of 'a4@(102)'. 32138 Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case 32139 to say that nothing is known about the condition code value. 32140 32141 The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with 32142 the results of peephole optimization: insns whose patterns are 32143 'parallel' RTXs containing various 'reg', 'mem' or constants which 32144 are just the operands. The RTL structure of these insns is not 32145 sufficient to indicate what the insns actually do. What 32146 'NOTICE_UPDATE_CC' should do when it sees one is just to run 32147 'CC_STATUS_INIT'. 32148 32149 A possible definition of 'NOTICE_UPDATE_CC' is to call a function 32150 that looks at an attribute (*note Insn Attributes::) named, for 32151 example, 'cc'. This avoids having detailed information about 32152 patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'. 32153 32154 32155 File: gccint.info, Node: MODE_CC Condition Codes, Next: Cond Exec Macros, Prev: CC0 Condition Codes, Up: Condition Code 32156 32157 17.16.2 Representation of condition codes using registers 32158 --------------------------------------------------------- 32159 32160 -- Macro: SELECT_CC_MODE (OP, X, Y) 32161 On many machines, the condition code may be produced by other 32162 instructions than compares, for example the branch can use directly 32163 the condition code set by a subtract instruction. However, on some 32164 machines when the condition code is set this way some bits (such as 32165 the overflow bit) are not set in the same way as a test 32166 instruction, so that a different branch instruction must be used 32167 for some conditional branches. When this happens, use the machine 32168 mode of the condition code register to record different formats of 32169 the condition code register. Modes can also be used to record 32170 which compare instruction (e.g. a signed or an unsigned 32171 comparison) produced the condition codes. 32172 32173 If other modes than 'CCmode' are required, add them to 32174 'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode 32175 given an operand of a compare. This is needed because the modes 32176 have to be chosen not only during RTL generation but also, for 32177 example, by instruction combination. The result of 32178 'SELECT_CC_MODE' should be consistent with the mode used in the 32179 patterns; for example to support the case of the add on the SPARC 32180 discussed above, we have the pattern 32181 32182 (define_insn "" 32183 [(set (reg:CC_NOOV 0) 32184 (compare:CC_NOOV 32185 (plus:SI (match_operand:SI 0 "register_operand" "%r") 32186 (match_operand:SI 1 "arith_operand" "rI")) 32187 (const_int 0)))] 32188 "" 32189 "...") 32190 32191 together with a 'SELECT_CC_MODE' that returns 'CC_NOOVmode' for 32192 comparisons whose argument is a 'plus': 32193 32194 #define SELECT_CC_MODE(OP,X,Y) \ 32195 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 32196 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \ 32197 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 32198 || GET_CODE (X) == NEG) \ 32199 ? CC_NOOVmode : CCmode)) 32200 32201 Another reason to use modes is to retain information on which 32202 operands were used by the comparison; see 'REVERSIBLE_CC_MODE' 32203 later in this section. 32204 32205 You should define this macro if and only if you define extra CC 32206 modes in 'MACHINE-modes.def'. 32207 32208 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx 32209 *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) (CODE, OP0, OP1, 32210 OP0_PRESERVE_VALUE) 32211 On some machines not all possible comparisons are defined, but you 32212 can convert an invalid comparison into a valid one. For example, 32213 the Alpha does not have a 'GT' comparison, but you can use an 'LT' 32214 comparison instead and swap the order of the operands. 32215 32216 On such machines, implement this hook to do any required 32217 conversions. CODE is the initial comparison code and OP0 and OP1 32218 are the left and right operands of the comparison, respectively. 32219 If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed 32220 to change the value of OP0 since the value might be used in RTXs 32221 which aren't comparisons. E.g. the implementation is not allowed 32222 to swap operands in that case. 32223 32224 GCC will not assume that the comparison resulting from this macro 32225 is valid but will see if the resulting insn matches a pattern in 32226 the 'md' file. 32227 32228 You need not to implement this hook if it would never change the 32229 comparison code or operands. 32230 32231 -- Macro: REVERSIBLE_CC_MODE (MODE) 32232 A C expression whose value is one if it is always safe to reverse a 32233 comparison whose mode is MODE. If 'SELECT_CC_MODE' can ever return 32234 MODE for a floating-point inequality comparison, then 32235 'REVERSIBLE_CC_MODE (MODE)' must be zero. 32236 32237 You need not define this macro if it would always returns zero or 32238 if the floating-point format is anything other than 32239 'IEEE_FLOAT_FORMAT'. For example, here is the definition used on 32240 the SPARC, where floating-point inequality comparisons are always 32241 given 'CCFPEmode': 32242 32243 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode) 32244 32245 -- Macro: REVERSE_CONDITION (CODE, MODE) 32246 A C expression whose value is reversed condition code of the CODE 32247 for comparison done in CC_MODE MODE. The macro is used only in 32248 case 'REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 32249 case machine has some non-standard way how to reverse certain 32250 conditionals. For instance in case all floating point conditions 32251 are non-trapping, compiler may freely convert unordered compares to 32252 ordered one. Then definition may look like: 32253 32254 #define REVERSE_CONDITION(CODE, MODE) \ 32255 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 32256 : reverse_condition_maybe_unordered (CODE)) 32257 32258 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 32259 *P1, unsigned int *P2) 32260 On targets which do not use '(cc0)', and which use a hard register 32261 rather than a pseudo-register to hold condition codes, the regular 32262 CSE passes are often not able to identify cases in which the hard 32263 register is set to a common value. Use this hook to enable a small 32264 pass which optimizes such cases. This hook should return true to 32265 enable this pass, and it should set the integers to which its 32266 arguments point to the hard register numbers used for condition 32267 codes. When there is only one such register, as is true on most 32268 systems, the integer pointed to by P2 should be set to 32269 'INVALID_REGNUM'. 32270 32271 The default version of this hook returns false. 32272 32273 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum 32274 machine_mode M1, enum machine_mode M2) 32275 On targets which use multiple condition code modes in class 32276 'MODE_CC', it is sometimes the case that a comparison can be 32277 validly done in more than one mode. On such a system, define this 32278 target hook to take two mode arguments and to return a mode in 32279 which both comparisons may be validly done. If there is no such 32280 mode, return 'VOIDmode'. 32281 32282 The default version of this hook checks whether the modes are the 32283 same. If they are, it returns that mode. If they are different, 32284 it returns 'VOIDmode'. 32285 32286 32287 File: gccint.info, Node: Cond Exec Macros, Prev: MODE_CC Condition Codes, Up: Condition Code 32288 32289 17.16.3 Macros to control conditional execution 32290 ----------------------------------------------- 32291 32292 There is one macro that may need to be defined for targets supporting 32293 conditional execution, independent of how they represent conditional 32294 branches. 32295 32296 32297 File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 32298 32299 17.17 Describing Relative Costs of Operations 32300 ============================================= 32301 32302 These macros let you describe the relative speed of various operations 32303 on the target machine. 32304 32305 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 32306 A C expression for the cost of moving data of mode MODE from a 32307 register in class FROM to one in class TO. The classes are 32308 expressed using the enumeration values such as 'GENERAL_REGS'. A 32309 value of 2 is the default; other values are interpreted relative to 32310 that. 32311 32312 It is not required that the cost always equal 2 when FROM is the 32313 same as TO; on some machines it is expensive to move between 32314 registers if they are not general registers. 32315 32316 If reload sees an insn consisting of a single 'set' between two 32317 hard registers, and if 'REGISTER_MOVE_COST' applied to their 32318 classes returns a value of 2, reload does not check to ensure that 32319 the constraints of the insn are met. Setting a cost of other than 32320 2 will allow reload to verify that the constraints are met. You 32321 should do this if the 'movM' pattern's constraints do not allow 32322 such copying. 32323 32324 These macros are obsolete, new ports should use the target hook 32325 'TARGET_REGISTER_MOVE_COST' instead. 32326 32327 -- Target Hook: int TARGET_REGISTER_MOVE_COST (enum machine_mode MODE, 32328 reg_class_t FROM, reg_class_t TO) 32329 This target hook should return the cost of moving data of mode MODE 32330 from a register in class FROM to one in class TO. The classes are 32331 expressed using the enumeration values such as 'GENERAL_REGS'. A 32332 value of 2 is the default; other values are interpreted relative to 32333 that. 32334 32335 It is not required that the cost always equal 2 when FROM is the 32336 same as TO; on some machines it is expensive to move between 32337 registers if they are not general registers. 32338 32339 If reload sees an insn consisting of a single 'set' between two 32340 hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their 32341 classes returns a value of 2, reload does not check to ensure that 32342 the constraints of the insn are met. Setting a cost of other than 32343 2 will allow reload to verify that the constraints are met. You 32344 should do this if the 'movM' pattern's constraints do not allow 32345 such copying. 32346 32347 The default version of this function returns 2. 32348 32349 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 32350 A C expression for the cost of moving data of mode MODE between a 32351 register of class CLASS and memory; IN is zero if the value is to 32352 be written to memory, nonzero if it is to be read in. This cost is 32353 relative to those in 'REGISTER_MOVE_COST'. If moving between 32354 registers and memory is more expensive than between two registers, 32355 you should define this macro to express the relative cost. 32356 32357 If you do not define this macro, GCC uses a default cost of 4 plus 32358 the cost of copying via a secondary reload register, if one is 32359 needed. If your machine requires a secondary reload register to 32360 copy between memory and a register of CLASS but the reload 32361 mechanism is more complex than copying via an intermediate, define 32362 this macro to reflect the actual cost of the move. 32363 32364 GCC defines the function 'memory_move_secondary_cost' if secondary 32365 reloads are needed. It computes the costs due to copying via a 32366 secondary register. If your machine copies from memory using a 32367 secondary register in the conventional way but the default base 32368 value of 4 is not correct for your machine, define this macro to 32369 add some other value to the result of that function. The arguments 32370 to that function are the same as to this macro. 32371 32372 These macros are obsolete, new ports should use the target hook 32373 'TARGET_MEMORY_MOVE_COST' instead. 32374 32375 -- Target Hook: int TARGET_MEMORY_MOVE_COST (enum machine_mode MODE, 32376 reg_class_t RCLASS, bool IN) 32377 This target hook should return the cost of moving data of mode MODE 32378 between a register of class RCLASS and memory; IN is 'false' if the 32379 value is to be written to memory, 'true' if it is to be read in. 32380 This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'. If 32381 moving between registers and memory is more expensive than between 32382 two registers, you should add this target hook to express the 32383 relative cost. 32384 32385 If you do not add this target hook, GCC uses a default cost of 4 32386 plus the cost of copying via a secondary reload register, if one is 32387 needed. If your machine requires a secondary reload register to 32388 copy between memory and a register of RCLASS but the reload 32389 mechanism is more complex than copying via an intermediate, use 32390 this target hook to reflect the actual cost of the move. 32391 32392 GCC defines the function 'memory_move_secondary_cost' if secondary 32393 reloads are needed. It computes the costs due to copying via a 32394 secondary register. If your machine copies from memory using a 32395 secondary register in the conventional way but the default base 32396 value of 4 is not correct for your machine, use this target hook to 32397 add some other value to the result of that function. The arguments 32398 to that function are the same as to this target hook. 32399 32400 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 32401 A C expression for the cost of a branch instruction. A value of 1 32402 is the default; other values are interpreted relative to that. 32403 Parameter SPEED_P is true when the branch in question should be 32404 optimized for speed. When it is false, 'BRANCH_COST' should return 32405 a value optimal for code size rather than performance. 32406 PREDICTABLE_P is true for well-predicted branches. On many 32407 architectures the 'BRANCH_COST' can be reduced then. 32408 32409 Here are additional macros which do not specify precise relative costs, 32410 but only that certain actions are more expensive than GCC would 32411 ordinarily expect. 32412 32413 -- Macro: SLOW_BYTE_ACCESS 32414 Define this macro as a C expression which is nonzero if accessing 32415 less than a word of memory (i.e. a 'char' or a 'short') is no 32416 faster than accessing a word of memory, i.e., if such access 32417 require more than one instruction or if there is no difference in 32418 cost between byte and (aligned) word loads. 32419 32420 When this macro is not defined, the compiler will access a field by 32421 finding the smallest containing object; when it is defined, a 32422 fullword load will be used if alignment permits. Unless bytes 32423 accesses are faster than word accesses, using word accesses is 32424 preferable since it may eliminate subsequent memory access if 32425 subsequent accesses occur to other fields in the same word of the 32426 structure, but to different bytes. 32427 32428 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 32429 Define this macro to be the value 1 if memory accesses described by 32430 the MODE and ALIGNMENT parameters have a cost many times greater 32431 than aligned accesses, for example if they are emulated in a trap 32432 handler. 32433 32434 When this macro is nonzero, the compiler will act as if 32435 'STRICT_ALIGNMENT' were nonzero when generating code for block 32436 moves. This can cause significantly more instructions to be 32437 produced. Therefore, do not set this macro nonzero if unaligned 32438 accesses only add a cycle or two to the time for a memory access. 32439 32440 If the value of this macro is always zero, it need not be defined. 32441 If this macro is defined, it should produce a nonzero value when 32442 'STRICT_ALIGNMENT' is nonzero. 32443 32444 -- Macro: MOVE_RATIO (SPEED) 32445 The threshold of number of scalar memory-to-memory move insns, 32446 _below_ which a sequence of insns should be generated instead of a 32447 string move insn or a library call. Increasing the value will 32448 always make code faster, but eventually incurs high cost in 32449 increased code size. 32450 32451 Note that on machines where the corresponding move insn is a 32452 'define_expand' that emits a sequence of insns, this macro counts 32453 the number of such sequences. 32454 32455 The parameter SPEED is true if the code is currently being 32456 optimized for speed rather than size. 32457 32458 If you don't define this, a reasonable default is used. 32459 32460 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT) 32461 A C expression used to determine whether 'move_by_pieces' will be 32462 used to copy a chunk of memory, or whether some other block move 32463 mechanism will be used. Defaults to 1 if 'move_by_pieces_ninsns' 32464 returns less than 'MOVE_RATIO'. 32465 32466 -- Macro: MOVE_MAX_PIECES 32467 A C expression used by 'move_by_pieces' to determine the largest 32468 unit a load or store used to copy memory is. Defaults to 32469 'MOVE_MAX'. 32470 32471 -- Macro: CLEAR_RATIO (SPEED) 32472 The threshold of number of scalar move insns, _below_ which a 32473 sequence of insns should be generated to clear memory instead of a 32474 string clear insn or a library call. Increasing the value will 32475 always make code faster, but eventually incurs high cost in 32476 increased code size. 32477 32478 The parameter SPEED is true if the code is currently being 32479 optimized for speed rather than size. 32480 32481 If you don't define this, a reasonable default is used. 32482 32483 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT) 32484 A C expression used to determine whether 'clear_by_pieces' will be 32485 used to clear a chunk of memory, or whether some other block clear 32486 mechanism will be used. Defaults to 1 if 'move_by_pieces_ninsns' 32487 returns less than 'CLEAR_RATIO'. 32488 32489 -- Macro: SET_RATIO (SPEED) 32490 The threshold of number of scalar move insns, _below_ which a 32491 sequence of insns should be generated to set memory to a constant 32492 value, instead of a block set insn or a library call. Increasing 32493 the value will always make code faster, but eventually incurs high 32494 cost in increased code size. 32495 32496 The parameter SPEED is true if the code is currently being 32497 optimized for speed rather than size. 32498 32499 If you don't define this, it defaults to the value of 'MOVE_RATIO'. 32500 32501 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT) 32502 A C expression used to determine whether 'store_by_pieces' will be 32503 used to set a chunk of memory to a constant value, or whether some 32504 other mechanism will be used. Used by '__builtin_memset' when 32505 storing values other than constant zero. Defaults to 1 if 32506 'move_by_pieces_ninsns' returns less than 'SET_RATIO'. 32507 32508 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT) 32509 A C expression used to determine whether 'store_by_pieces' will be 32510 used to set a chunk of memory to a constant string value, or 32511 whether some other mechanism will be used. Used by 32512 '__builtin_strcpy' when called with a constant source string. 32513 Defaults to 1 if 'move_by_pieces_ninsns' returns less than 32514 'MOVE_RATIO'. 32515 32516 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 32517 A C expression used to determine whether a load postincrement is a 32518 good thing to use for a given mode. Defaults to the value of 32519 'HAVE_POST_INCREMENT'. 32520 32521 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 32522 A C expression used to determine whether a load postdecrement is a 32523 good thing to use for a given mode. Defaults to the value of 32524 'HAVE_POST_DECREMENT'. 32525 32526 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 32527 A C expression used to determine whether a load preincrement is a 32528 good thing to use for a given mode. Defaults to the value of 32529 'HAVE_PRE_INCREMENT'. 32530 32531 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 32532 A C expression used to determine whether a load predecrement is a 32533 good thing to use for a given mode. Defaults to the value of 32534 'HAVE_PRE_DECREMENT'. 32535 32536 -- Macro: USE_STORE_POST_INCREMENT (MODE) 32537 A C expression used to determine whether a store postincrement is a 32538 good thing to use for a given mode. Defaults to the value of 32539 'HAVE_POST_INCREMENT'. 32540 32541 -- Macro: USE_STORE_POST_DECREMENT (MODE) 32542 A C expression used to determine whether a store postdecrement is a 32543 good thing to use for a given mode. Defaults to the value of 32544 'HAVE_POST_DECREMENT'. 32545 32546 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 32547 This macro is used to determine whether a store preincrement is a 32548 good thing to use for a given mode. Defaults to the value of 32549 'HAVE_PRE_INCREMENT'. 32550 32551 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 32552 This macro is used to determine whether a store predecrement is a 32553 good thing to use for a given mode. Defaults to the value of 32554 'HAVE_PRE_DECREMENT'. 32555 32556 -- Macro: NO_FUNCTION_CSE 32557 Define this macro if it is as good or better to call a constant 32558 function address than to call an address kept in a register. 32559 32560 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT 32561 Define this macro if a non-short-circuit operation produced by 32562 'fold_range_test ()' is optimal. This macro defaults to true if 32563 'BRANCH_COST' is greater than or equal to the value 2. 32564 32565 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int OUTER_CODE, 32566 int OPNO, int *TOTAL, bool SPEED) 32567 This target hook describes the relative costs of RTL expressions. 32568 32569 The cost may depend on the precise form of the expression, which is 32570 available for examination in X, and the fact that X appears as 32571 operand OPNO of an expression with rtx code OUTER_CODE. That is, 32572 the hook can assume that there is some rtx Y such that 'GET_CODE 32573 (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X' 32574 or (b) 'XVEC (Y, OPNO)' contains X. 32575 32576 CODE is X's expression code--redundant, since it can be obtained 32577 with 'GET_CODE (X)'. 32578 32579 In implementing this hook, you can use the construct 'COSTS_N_INSNS 32580 (N)' to specify a cost equal to N fast instructions. 32581 32582 On entry to the hook, '*TOTAL' contains a default estimate for the 32583 cost of the expression. The hook should modify this value as 32584 necessary. Traditionally, the default costs are 'COSTS_N_INSNS 32585 (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and 32586 modulus operations, and 'COSTS_N_INSNS (1)' for all other 32587 operations. 32588 32589 When optimizing for code size, i.e. when 'speed' is false, this 32590 target hook should be used to estimate the relative size cost of an 32591 expression, again relative to 'COSTS_N_INSNS'. 32592 32593 The hook returns true when all subexpressions of X have been 32594 processed, and false when 'rtx_cost' should recurse. 32595 32596 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, enum machine_mode 32597 MODE, addr_space_t AS, bool SPEED) 32598 This hook computes the cost of an addressing mode that contains 32599 ADDRESS. If not defined, the cost is computed from the ADDRESS 32600 expression and the 'TARGET_RTX_COST' hook. 32601 32602 For most CISC machines, the default cost is a good approximation of 32603 the true cost of the addressing mode. However, on RISC machines, 32604 all instructions normally have the same length and execution time. 32605 Hence all addresses will have equal costs. 32606 32607 In cases where more than one form of an address is known, the form 32608 with the lowest cost will be used. If multiple forms have the 32609 same, lowest, cost, the one that is the most complex will be used. 32610 32611 For example, suppose an address that is equal to the sum of a 32612 register and a constant is used twice in the same basic block. 32613 When this macro is not defined, the address will be computed in a 32614 register and memory references will be indirect through that 32615 register. On machines where the cost of the addressing mode 32616 containing the sum is no higher than that of a simple indirect 32617 reference, this will produce an additional instruction and possibly 32618 require an additional register. Proper specification of this macro 32619 eliminates this overhead for such machines. 32620 32621 This hook is never called with an invalid address. 32622 32623 On machines where an address involving more than one register is as 32624 cheap as an address computation involving only one register, 32625 defining 'TARGET_ADDRESS_COST' to reflect this can cause two 32626 registers to be live over a region of code where only one would 32627 have been if 'TARGET_ADDRESS_COST' were not defined in that manner. 32628 This effect should be considered in the definition of this macro. 32629 Equivalent costs should probably only be given to addresses with 32630 different numbers of registers on machines with lots of registers. 32631 32632 32633 File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 32634 32635 17.18 Adjusting the Instruction Scheduler 32636 ========================================= 32637 32638 The instruction scheduler may need a fair amount of machine-specific 32639 adjustment in order to produce good code. GCC provides several target 32640 hooks for this purpose. It is usually enough to define just a few of 32641 them: try the first ones in this list first. 32642 32643 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 32644 This hook returns the maximum number of instructions that can ever 32645 issue at the same time on the target machine. The default is one. 32646 Although the insn scheduler can define itself the possibility of 32647 issue an insn on the same cycle, the value can serve as an 32648 additional constraint to issue insns on the same simulated 32649 processor cycle (see hooks 'TARGET_SCHED_REORDER' and 32650 'TARGET_SCHED_REORDER2'). This value must be constant over the 32651 entire compilation. If you need it to vary depending on what the 32652 instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'. 32653 32654 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 32655 VERBOSE, rtx INSN, int MORE) 32656 This hook is executed by the scheduler after it has scheduled an 32657 insn from the ready list. It should return the number of insns 32658 which can still be issued in the current cycle. The default is 32659 'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally 32660 are not counted against the issue rate. You should define this 32661 hook if some insns take more machine resources than others, so that 32662 fewer insns can follow them in the same cycle. FILE is either a 32663 null pointer, or a stdio stream to write any debug output to. 32664 VERBOSE is the verbose level provided by '-fsched-verbose-N'. INSN 32665 is the instruction that was scheduled. 32666 32667 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx 32668 DEP_INSN, int COST) 32669 This function corrects the value of COST based on the relationship 32670 between INSN and DEP_INSN through the dependence LINK. It should 32671 return the new value. The default is to make no adjustment to 32672 COST. This can be used for example to specify to the scheduler 32673 using the traditional pipeline description that an output- or 32674 anti-dependence does not incur the same cost as a data-dependence. 32675 If the scheduler using the automaton based pipeline description, 32676 the cost of anti-dependence is zero and the cost of 32677 output-dependence is maximum of one and the difference of latency 32678 times of the first and the second insns. If these values are not 32679 acceptable, you could use the hook to modify them too. See also 32680 *note Processor pipeline description::. 32681 32682 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int 32683 PRIORITY) 32684 This hook adjusts the integer scheduling priority PRIORITY of INSN. 32685 It should return the new priority. Increase the priority to 32686 execute INSN earlier, reduce the priority to execute INSN later. 32687 Do not define this hook if you do not need to adjust the scheduling 32688 priorities of insns. 32689 32690 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx 32691 *READY, int *N_READYP, int CLOCK) 32692 This hook is executed by the scheduler after it has scheduled the 32693 ready list, to allow the machine description to reorder it (for 32694 example to combine two small instructions together on 'VLIW' 32695 machines). FILE is either a null pointer, or a stdio stream to 32696 write any debug output to. VERBOSE is the verbose level provided 32697 by '-fsched-verbose-N'. READY is a pointer to the ready list of 32698 instructions that are ready to be scheduled. N_READYP is a pointer 32699 to the number of elements in the ready list. The scheduler reads 32700 the ready list in reverse order, starting with READY[*N_READYP - 1] 32701 and going to READY[0]. CLOCK is the timer tick of the scheduler. 32702 You may modify the ready list and the number of ready insns. The 32703 return value is the number of insns that can issue this cycle; 32704 normally this is just 'issue_rate'. See also 32705 'TARGET_SCHED_REORDER2'. 32706 32707 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, rtx 32708 *READY, int *N_READYP, int CLOCK) 32709 Like 'TARGET_SCHED_REORDER', but called at a different time. That 32710 function is called whenever the scheduler starts a new cycle. This 32711 one is called once per iteration over a cycle, immediately after 32712 'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and 32713 return the number of insns to be scheduled in the same cycle. 32714 Defining this hook can be useful if there are frequent situations 32715 where scheduling one insn causes other insns to become ready in the 32716 same cycle. These other insns can then be taken into account 32717 properly. 32718 32719 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx 32720 HEAD, rtx TAIL) 32721 This hook is called after evaluation forward dependencies of insns 32722 in chain given by two parameter values (HEAD and TAIL 32723 correspondingly) but before insns scheduling of the insn chain. 32724 For example, it can be used for better insn classification if it 32725 requires analysis of dependencies. This hook can use backward and 32726 forward dependencies of the insn scheduler because they are already 32727 calculated. 32728 32729 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 32730 MAX_READY) 32731 This hook is executed by the scheduler at the beginning of each 32732 block of instructions that are to be scheduled. FILE is either a 32733 null pointer, or a stdio stream to write any debug output to. 32734 VERBOSE is the verbose level provided by '-fsched-verbose-N'. 32735 MAX_READY is the maximum number of insns in the current scheduling 32736 region that can be live at the same time. This can be used to 32737 allocate scratch space if it is needed, e.g. by 32738 'TARGET_SCHED_REORDER'. 32739 32740 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 32741 This hook is executed by the scheduler at the end of each block of 32742 instructions that are to be scheduled. It can be used to perform 32743 cleanup of any actions done by the other scheduling hooks. FILE is 32744 either a null pointer, or a stdio stream to write any debug output 32745 to. VERBOSE is the verbose level provided by '-fsched-verbose-N'. 32746 32747 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE, 32748 int OLD_MAX_UID) 32749 This hook is executed by the scheduler after function level 32750 initializations. FILE is either a null pointer, or a stdio stream 32751 to write any debug output to. VERBOSE is the verbose level 32752 provided by '-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 32753 uid when scheduling begins. 32754 32755 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 32756 VERBOSE) 32757 This is the cleanup hook corresponding to 32758 'TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 32759 stdio stream to write any debug output to. VERBOSE is the verbose 32760 level provided by '-fsched-verbose-N'. 32761 32762 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 32763 The hook returns an RTL insn. The automaton state used in the 32764 pipeline hazard recognizer is changed as if the insn were scheduled 32765 when the new simulated processor cycle starts. Usage of the hook 32766 may simplify the automaton pipeline description for some VLIW 32767 processors. If the hook is defined, it is used only for the 32768 automaton based pipeline description. The default is not to change 32769 the state when the new simulated processor cycle starts. 32770 32771 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 32772 The hook can be used to initialize data used by the previous hook. 32773 32774 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 32775 The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 32776 to changed the state as if the insn were scheduled when the new 32777 simulated processor cycle finishes. 32778 32779 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 32780 The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 32781 used to initialize data used by the previous hook. 32782 32783 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 32784 The hook to notify target that the current simulated cycle is about 32785 to finish. The hook is analogous to 32786 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 32787 more complicated situations - e.g., when advancing state on a 32788 single insn is not enough. 32789 32790 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 32791 The hook to notify target that new simulated cycle has just 32792 started. The hook is analogous to 32793 'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 32794 more complicated situations - e.g., when advancing state on a 32795 single insn is not enough. 32796 32797 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 32798 (void) 32799 This hook controls better choosing an insn from the ready insn 32800 queue for the DFA-based insn scheduler. Usually the scheduler 32801 chooses the first insn from the queue. If the hook returns a 32802 positive value, an additional scheduler code tries all permutations 32803 of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent 32804 ready insns to choose an insn whose issue will result in maximal 32805 number of issued insns on the same cycle. For the VLIW processor, 32806 the code could actually solve the problem of packing simple insns 32807 into the VLIW insn. Of course, if the rules of VLIW packing are 32808 described in the automaton. 32809 32810 This code also could be used for superscalar RISC processors. Let 32811 us consider a superscalar RISC processor with 3 pipelines. Some 32812 insns can be executed in pipelines A or B, some insns can be 32813 executed only in pipelines B or C, and one insn can be executed in 32814 pipeline B. The processor may issue the 1st insn into A and the 32815 2nd one into B. In this case, the 3rd insn will wait for freeing B 32816 until the next cycle. If the scheduler issues the 3rd insn the 32817 first, the processor could issue all 3 insns per cycle. 32818 32819 Actually this code demonstrates advantages of the automaton based 32820 pipeline hazard recognizer. We try quickly and easy many insn 32821 schedules to choose the best one. 32822 32823 The default is no multipass scheduling. 32824 32825 -- Target Hook: int 32826 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx 32827 INSN) 32828 32829 This hook controls what insns from the ready insn queue will be 32830 considered for the multipass insn scheduling. If the hook returns 32831 zero for INSN, the insn will be not chosen to be issued. 32832 32833 The default is that any ready insns can be chosen to be issued. 32834 32835 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void 32836 *DATA, char *READY_TRY, int N_READY, bool FIRST_CYCLE_INSN_P) 32837 This hook prepares the target backend for a new round of multipass 32838 scheduling. 32839 32840 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void 32841 *DATA, char *READY_TRY, int N_READY, rtx INSN, const void 32842 *PREV_DATA) 32843 This hook is called when multipass scheduling evaluates instruction 32844 INSN. 32845 32846 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK 32847 (const void *DATA, char *READY_TRY, int N_READY) 32848 This is called when multipass scheduling backtracks from evaluation 32849 of an instruction. 32850 32851 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void 32852 *DATA) 32853 This hook notifies the target about the result of the concluded 32854 current round of multipass scheduling. 32855 32856 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void 32857 *DATA) 32858 This hook initializes target-specific data used in multipass 32859 scheduling. 32860 32861 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void 32862 *DATA) 32863 This hook finalizes target-specific data used in multipass 32864 scheduling. 32865 32866 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 32867 VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P) 32868 This hook is called by the insn scheduler before issuing INSN on 32869 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 32870 this processor cycle. Instead, the processor cycle is advanced. 32871 If *SORT_P is zero, the insn ready queue is not sorted on the new 32872 cycle start as usually. DUMP and VERBOSE specify the file and 32873 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 32874 are, respectively, the processor cycle on which the previous insn 32875 has been issued, and the current processor cycle. 32876 32877 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 32878 *_DEP, int COST, int DISTANCE) 32879 This hook is used to define which dependences are considered costly 32880 by the target, so costly that it is not advisable to schedule the 32881 insns that are involved in the dependence too close to one another. 32882 The parameters to this hook are as follows: The first parameter 32883 _DEP is the dependence being evaluated. The second parameter COST 32884 is the cost of the dependence as estimated by the scheduler, and 32885 the third parameter DISTANCE is the distance in cycles between the 32886 two insns. The hook returns 'true' if considering the distance 32887 between the two insns the dependence between them is considered 32888 costly by the target, and 'false' otherwise. 32889 32890 Defining this hook can be useful in multiple-issue out-of-order 32891 machines, where (a) it's practically hopeless to predict the actual 32892 data/resource delays, however: (b) there's a better chance to 32893 predict the actual grouping that will be formed, and (c) correctly 32894 emulating the grouping can be very important. In such targets one 32895 may want to allow issuing dependent insns closer to one 32896 another--i.e., closer than the dependence distance; however, not in 32897 cases of "costly dependences", which this hooks allows to define. 32898 32899 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 32900 This hook is called by the insn scheduler after emitting a new 32901 instruction to the instruction stream. The hook notifies a target 32902 backend to extend its per instruction data structures. 32903 32904 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 32905 Return a pointer to a store large enough to hold target scheduling 32906 context. 32907 32908 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 32909 CLEAN_P) 32910 Initialize store pointed to by TC to hold target scheduling 32911 context. It CLEAN_P is true then initialize TC as if scheduler is 32912 at the beginning of the block. Otherwise, copy the current context 32913 into TC. 32914 32915 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 32916 Copy target scheduling context pointed to by TC to the current 32917 context. 32918 32919 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 32920 Deallocate internal data in target scheduling context pointed to by 32921 TC. 32922 32923 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 32924 Deallocate a store for target scheduling context pointed to by TC. 32925 32926 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int REQUEST, 32927 rtx *NEW_PAT) 32928 This hook is called by the insn scheduler when INSN has only 32929 speculative dependencies and therefore can be scheduled 32930 speculatively. The hook is used to check if the pattern of INSN 32931 has a speculative version and, in case of successful check, to 32932 generate that speculative pattern. The hook should return 1, if 32933 the instruction has a speculative form, or -1, if it doesn't. 32934 REQUEST describes the type of requested speculation. If the return 32935 value equals 1 then NEW_PAT is assigned the generated speculative 32936 pattern. 32937 32938 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS) 32939 This hook is called by the insn scheduler during generation of 32940 recovery code for INSN. It should return 'true', if the 32941 corresponding check instruction should branch to recovery code, or 32942 'false' otherwise. 32943 32944 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL, 32945 int MUTATE_P) 32946 This hook is called by the insn scheduler to generate a pattern for 32947 recovery check instruction. If MUTATE_P is zero, then INSN is a 32948 speculative instruction for which the check should be generated. 32949 LABEL is either a label of a basic block, where recovery code 32950 should be emitted, or a null pointer, when requested check doesn't 32951 branch to recovery code (a simple check). If MUTATE_P is nonzero, 32952 then a pattern for a branchy check corresponding to a simple check 32953 denoted by INSN should be generated. In this case LABEL can't be 32954 null. 32955 32956 -- Target Hook: bool 32957 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC 32958 (const_rtx INSN) 32959 This hook is used as a workaround for 32960 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being 32961 called on the first instruction of the ready list. The hook is 32962 used to discard speculative instructions that stand first in the 32963 ready list from being scheduled on the current cycle. If the hook 32964 returns 'false', INSN will not be chosen to be issued. For 32965 non-speculative instructions, the hook should always return 'true'. 32966 For example, in the ia64 backend the hook is used to cancel data 32967 speculative insns when the ALAT table is nearly full. 32968 32969 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def 32970 *SPEC_INFO) 32971 This hook is used by the insn scheduler to find out what features 32972 should be enabled/used. The structure *SPEC_INFO should be filled 32973 in by the target. The structure describes speculation types that 32974 can be used in the scheduler. 32975 32976 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 32977 This hook is called by the swing modulo scheduler to calculate a 32978 resource-based lower bound which is based on the resources 32979 available in the machine and the resources required by each 32980 instruction. The target backend can use G to calculate such bound. 32981 A very simple lower bound will be used in case this hook is not 32982 implemented: the total number of instructions divided by the issue 32983 rate. 32984 32985 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx INSN, int X) 32986 This hook is called by Haifa Scheduler. It returns true if 32987 dispatch scheduling is supported in hardware and the condition 32988 specified in the parameter is true. 32989 32990 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx INSN, int X) 32991 This hook is called by Haifa Scheduler. It performs the operation 32992 specified in its second parameter. 32993 32994 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE 32995 True if the processor has an exposed pipeline, which means that not 32996 just the order of instructions is important for correctness when 32997 scheduling, but also the latencies of operations. 32998 32999 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC, 33000 enum machine_mode MODE) 33001 This hook is called by tree reassociator to determine a level of 33002 parallelism required in output calculations chain. 33003 33004 33005 File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 33006 33007 17.19 Dividing the Output into Sections (Texts, Data, ...) 33008 ========================================================== 33009 33010 An object file is divided into sections containing different types of 33011 data. In the most common case, there are three sections: the "text 33012 section", which holds instructions and read-only data; the "data 33013 section", which holds initialized writable data; and the "bss section", 33014 which holds uninitialized data. Some systems have other kinds of 33015 sections. 33016 33017 'varasm.c' provides several well-known sections, such as 33018 'text_section', 'data_section' and 'bss_section'. The normal way of 33019 controlling a 'FOO_section' variable is to define the associated 33020 'FOO_SECTION_ASM_OP' macro, as described below. The macros are only 33021 read once, when 'varasm.c' initializes itself, so their values must be 33022 run-time constants. They may however depend on command-line flags. 33023 33024 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the 33025 'FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 33026 33027 Some assemblers require a different string to be written every time a 33028 section is selected. If your assembler falls into this category, you 33029 should define the 'TARGET_ASM_INIT_SECTIONS' hook and use 33030 'get_unnamed_section' to set up the sections. 33031 33032 You must always create a 'text_section', either by defining 33033 'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in 33034 'TARGET_ASM_INIT_SECTIONS'. The same is true of 'data_section' and 33035 'DATA_SECTION_ASM_OP'. If you do not create a distinct 33036 'readonly_data_section', the default is to reuse 'text_section'. 33037 33038 All the other 'varasm.c' sections are optional, and are null if the 33039 target does not provide them. 33040 33041 -- Macro: TEXT_SECTION_ASM_OP 33042 A C expression whose value is a string, including spacing, 33043 containing the assembler operation that should precede instructions 33044 and read-only data. Normally '"\t.text"' is right. 33045 33046 -- Macro: HOT_TEXT_SECTION_NAME 33047 If defined, a C string constant for the name of the section 33048 containing most frequently executed functions of the program. If 33049 not defined, GCC will provide a default definition if the target 33050 supports named sections. 33051 33052 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 33053 If defined, a C string constant for the name of the section 33054 containing unlikely executed functions in the program. 33055 33056 -- Macro: DATA_SECTION_ASM_OP 33057 A C expression whose value is a string, including spacing, 33058 containing the assembler operation to identify the following data 33059 as writable initialized data. Normally '"\t.data"' is right. 33060 33061 -- Macro: SDATA_SECTION_ASM_OP 33062 If defined, a C expression whose value is a string, including 33063 spacing, containing the assembler operation to identify the 33064 following data as initialized, writable small data. 33065 33066 -- Macro: READONLY_DATA_SECTION_ASM_OP 33067 A C expression whose value is a string, including spacing, 33068 containing the assembler operation to identify the following data 33069 as read-only initialized data. 33070 33071 -- Macro: BSS_SECTION_ASM_OP 33072 If defined, a C expression whose value is a string, including 33073 spacing, containing the assembler operation to identify the 33074 following data as uninitialized global data. If not defined, and 33075 'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data 33076 will be output in the data section if '-fno-common' is passed, 33077 otherwise 'ASM_OUTPUT_COMMON' will be used. 33078 33079 -- Macro: SBSS_SECTION_ASM_OP 33080 If defined, a C expression whose value is a string, including 33081 spacing, containing the assembler operation to identify the 33082 following data as uninitialized, writable small data. 33083 33084 -- Macro: TLS_COMMON_ASM_OP 33085 If defined, a C expression whose value is a string containing the 33086 assembler operation to identify the following data as thread-local 33087 common data. The default is '".tls_common"'. 33088 33089 -- Macro: TLS_SECTION_ASM_FLAG 33090 If defined, a C expression whose value is a character constant 33091 containing the flag used to mark a section as a TLS section. The 33092 default is ''T''. 33093 33094 -- Macro: INIT_SECTION_ASM_OP 33095 If defined, a C expression whose value is a string, including 33096 spacing, containing the assembler operation to identify the 33097 following data as initialization code. If not defined, GCC will 33098 assume such a section does not exist. This section has no 33099 corresponding 'init_section' variable; it is used entirely in 33100 runtime code. 33101 33102 -- Macro: FINI_SECTION_ASM_OP 33103 If defined, a C expression whose value is a string, including 33104 spacing, containing the assembler operation to identify the 33105 following data as finalization code. If not defined, GCC will 33106 assume such a section does not exist. This section has no 33107 corresponding 'fini_section' variable; it is used entirely in 33108 runtime code. 33109 33110 -- Macro: INIT_ARRAY_SECTION_ASM_OP 33111 If defined, a C expression whose value is a string, including 33112 spacing, containing the assembler operation to identify the 33113 following data as part of the '.init_array' (or equivalent) 33114 section. If not defined, GCC will assume such a section does not 33115 exist. Do not define both this macro and 'INIT_SECTION_ASM_OP'. 33116 33117 -- Macro: FINI_ARRAY_SECTION_ASM_OP 33118 If defined, a C expression whose value is a string, including 33119 spacing, containing the assembler operation to identify the 33120 following data as part of the '.fini_array' (or equivalent) 33121 section. If not defined, GCC will assume such a section does not 33122 exist. Do not define both this macro and 'FINI_SECTION_ASM_OP'. 33123 33124 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 33125 If defined, an ASM statement that switches to a different section 33126 via SECTION_OP, calls FUNCTION, and switches back to the text 33127 section. This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or 33128 'FINI_SECTION_ASM_OP' to calls to initialization and finalization 33129 functions from the init and fini sections. By default, this macro 33130 uses a simple function call. Some ports need hand-crafted assembly 33131 code to avoid dependencies on registers initialized in the function 33132 prologue or to ensure that constant pools don't end up too far way 33133 in the text section. 33134 33135 -- Macro: TARGET_LIBGCC_SDATA_SECTION 33136 If defined, a string which names the section into which small 33137 variables defined in crtstuff and libgcc should go. This is useful 33138 when the target has options for optimizing access to small data, 33139 and you want the crtstuff and libgcc routines to be conservative in 33140 what they expect of your application yet liberal in what your 33141 application expects. For example, for targets with a '.sdata' 33142 section (like MIPS), you could compile crtstuff with '-G 0' so that 33143 it doesn't require small data support from your application, but 33144 use this macro to put small data into '.sdata' so that your 33145 application can access these variables whether it uses small data 33146 or not. 33147 33148 -- Macro: FORCE_CODE_SECTION_ALIGN 33149 If defined, an ASM statement that aligns a code section to some 33150 arbitrary boundary. This is used to force all fragments of the 33151 '.init' and '.fini' sections to have to same alignment and thus 33152 prevent the linker from having to add any padding. 33153 33154 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 33155 Define this macro to be an expression with a nonzero value if jump 33156 tables (for 'tablejump' insns) should be output in the text 33157 section, along with the assembler instructions. Otherwise, the 33158 readonly data section is used. 33159 33160 This macro is irrelevant if there is no separate readonly data 33161 section. 33162 33163 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 33164 Define this hook if you need to do something special to set up the 33165 'varasm.c' sections, or if your target has some special sections of 33166 its own that you need to create. 33167 33168 GCC calls this hook after processing the command line, but before 33169 writing any assembly code, and before calling any of the 33170 section-returning hooks described below. 33171 33172 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 33173 Return a mask describing how relocations should be treated when 33174 selecting sections. Bit 1 should be set if global relocations 33175 should be placed in a read-write section; bit 0 should be set if 33176 local relocations should be placed in a read-write section. 33177 33178 The default version of this function returns 3 when '-fpic' is in 33179 effect, and 0 otherwise. The hook is typically redefined when the 33180 target cannot support (some kinds of) dynamic relocations in 33181 read-only sections even in executables. 33182 33183 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 33184 RELOC, unsigned HOST_WIDE_INT ALIGN) 33185 Return the section into which EXP should be placed. You can assume 33186 that EXP is either a 'VAR_DECL' node or a constant of some sort. 33187 RELOC indicates whether the initial value of EXP requires link-time 33188 relocations. Bit 0 is set when variable contains local relocations 33189 only, while bit 1 is set for global relocations. ALIGN is the 33190 constant alignment in bits. 33191 33192 The default version of this function takes care of putting 33193 read-only variables in 'readonly_data_section'. 33194 33195 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 33196 33197 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 33198 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 33199 called for 'FUNCTION_DECL's as well as for variables and constants. 33200 33201 In the case of a 'FUNCTION_DECL', RELOC will be zero if the 33202 function has been determined to be likely to be called, and nonzero 33203 if it is unlikely to be called. 33204 33205 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 33206 Build up a unique section name, expressed as a 'STRING_CST' node, 33207 and assign it to 'DECL_SECTION_NAME (DECL)'. As with 33208 'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 33209 value of EXP requires link-time relocations. 33210 33211 The default version of this function appends the symbol name to the 33212 ELF section name that would normally be used for the symbol. For 33213 example, the function 'foo' would be placed in '.text.foo'. 33214 Whatever the actual target object format, this is often good 33215 enough. 33216 33217 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 33218 DECL) 33219 Return the readonly data section associated with 'DECL_SECTION_NAME 33220 (DECL)'. The default version of this function selects 33221 '.gnu.linkonce.r.name' if the function's section is 33222 '.gnu.linkonce.t.name', '.rodata.name' if function is in 33223 '.text.name', and the normal readonly-data section otherwise. 33224 33225 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX 33226 Usually, the compiler uses the prefix '".rodata"' to construct 33227 section names for mergeable constant data. Define this macro to 33228 override the string if a different section name should be used. 33229 33230 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void) 33231 Return the section that should be used for transactional memory 33232 clone tables. 33233 33234 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum 33235 machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 33236 Return the section into which a constant X, of mode MODE, should be 33237 placed. You can assume that X is some kind of constant in RTL. 33238 The argument MODE is redundant except in the case of a 'const_int' 33239 rtx. ALIGN is the constant alignment in bits. 33240 33241 The default version of this function takes care of putting symbolic 33242 constants in 'flag_pic' mode in 'data_section' and everything else 33243 in 'readonly_data_section'. 33244 33245 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree 33246 ID) 33247 Define this hook if you need to postprocess the assembler name 33248 generated by target-independent code. The ID provided to this hook 33249 will be the computed name (e.g., the macro 'DECL_NAME' of the DECL 33250 in C, or the mangled name of the DECL in C++). The return value of 33251 the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name 33252 on your target system. The default implementation of this hook 33253 just returns the ID provided. 33254 33255 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 33256 int NEW_DECL_P) 33257 Define this hook if references to a symbol or a constant must be 33258 treated differently depending on something about the variable or 33259 function named by the symbol (such as what section it is in). 33260 33261 The hook is executed immediately after rtl has been created for 33262 DECL, which may be a variable or function declaration or an entry 33263 in the constant pool. In either case, RTL is the rtl in question. 33264 Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not 33265 have been initialized yet. 33266 33267 In the case of a constant, it is safe to assume that the rtl is a 33268 'mem' whose address is a 'symbol_ref'. Most decls will also have 33269 this form, but that is not guaranteed. Global register variables, 33270 for instance, will have a 'reg' for their rtl. (Normally the right 33271 thing to do with such unusual rtl is leave it alone.) 33272 33273 The NEW_DECL_P argument will be true if this is the first time that 33274 'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. It 33275 will be false for subsequent invocations, which will happen for 33276 duplicate declarations. Whether or not anything must be done for 33277 the duplicate declaration depends on whether the hook examines 33278 'DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 33279 called for a constant. 33280 33281 The usual thing for this hook to do is to record flags in the 33282 'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'. 33283 Historically, the name string was modified if it was necessary to 33284 encode more than one bit of information, but this practice is now 33285 discouraged; use 'SYMBOL_REF_FLAGS'. 33286 33287 The default definition of this hook, 'default_encode_section_info' 33288 in 'varasm.c', sets a number of commonly-useful bits in 33289 'SYMBOL_REF_FLAGS'. Check whether the default does what you need 33290 before overriding it. 33291 33292 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 33293 *NAME) 33294 Decode NAME and return the real name part, sans the characters that 33295 'TARGET_ENCODE_SECTION_INFO' may have added. 33296 33297 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 33298 Returns true if EXP should be placed into a "small data" section. 33299 The default version of this hook always returns false. 33300 33301 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 33302 Contains the value true if the target places read-only "small data" 33303 into a separate section. The default value is false. 33304 33305 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void) 33306 It returns true if target wants profile code emitted before 33307 prologue. 33308 33309 The default version of this hook use the target macro 33310 'PROFILE_BEFORE_PROLOGUE'. 33311 33312 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 33313 Returns true if EXP names an object for which name resolution rules 33314 must resolve to the current "module" (dynamic shared library or 33315 executable image). 33316 33317 The default version of this hook implements the name resolution 33318 rules for ELF, which has a looser model of global name binding than 33319 other currently supported object file formats. 33320 33321 -- Target Hook: bool TARGET_HAVE_TLS 33322 Contains the value true if the target supports thread-local 33323 storage. The default value is false. 33324 33325 33326 File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 33327 33328 17.20 Position Independent Code 33329 =============================== 33330 33331 This section describes macros that help implement generation of position 33332 independent code. Simply defining these macros is not enough to 33333 generate valid PIC; you must also add support to the hook 33334 'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS', 33335 as well as 'LEGITIMIZE_ADDRESS'. You must modify the definition of 33336 'movsi' to do something appropriate when the source operand contains a 33337 symbolic address. You may also need to alter the handling of switch 33338 statements so that they use relative addresses. 33339 33340 -- Macro: PIC_OFFSET_TABLE_REGNUM 33341 The register number of the register used to address a table of 33342 static data addresses in memory. In some cases this register is 33343 defined by a processor's "application binary interface" (ABI). 33344 When this macro is defined, RTL is generated for this register 33345 once, as with the stack pointer and frame pointer registers. If 33346 this macro is not defined, it is up to the machine-dependent files 33347 to allocate such a register (if necessary). Note that this 33348 register must be fixed when in use (e.g. when 'flag_pic' is true). 33349 33350 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 33351 A C expression that is nonzero if the register defined by 33352 'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. If not defined, 33353 the default is zero. Do not define this macro if 33354 'PIC_OFFSET_TABLE_REGNUM' is not defined. 33355 33356 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 33357 A C expression that is nonzero if X is a legitimate immediate 33358 operand on the target machine when generating position independent 33359 code. You can assume that X satisfies 'CONSTANT_P', so you need 33360 not check this. You can also assume FLAG_PIC is true, so you need 33361 not check it either. You need not define this macro if all 33362 constants (including 'SYMBOL_REF') can be immediate operands when 33363 generating position independent code. 33364 33365 33366 File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 33367 33368 17.21 Defining the Output Assembler Language 33369 ============================================ 33370 33371 This section describes macros whose principal purpose is to describe how 33372 to write instructions in assembler language--rather than what the 33373 instructions do. 33374 33375 * Menu: 33376 33377 * File Framework:: Structural information for the assembler file. 33378 * Data Output:: Output of constants (numbers, strings, addresses). 33379 * Uninitialized Data:: Output of uninitialized variables. 33380 * Label Output:: Output and generation of labels. 33381 * Initialization:: General principles of initialization 33382 and termination routines. 33383 * Macros for Initialization:: 33384 Specific macros that control the handling of 33385 initialization and termination routines. 33386 * Instruction Output:: Output of actual instructions. 33387 * Dispatch Tables:: Output of jump tables. 33388 * Exception Region Output:: Output of exception region code. 33389 * Alignment Output:: Pseudo ops for alignment and skipping data. 33390 33391 33392 File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 33393 33394 17.21.1 The Overall Framework of an Assembler File 33395 -------------------------------------------------- 33396 33397 This describes the overall framework of an assembly file. 33398 33399 -- Target Hook: void TARGET_ASM_FILE_START (void) 33400 Output to 'asm_out_file' any text which the assembler expects to 33401 find at the beginning of a file. The default behavior is 33402 controlled by two flags, documented below. Unless your target's 33403 assembler is quite unusual, if you override the default, you should 33404 call 'default_file_start' at some point in your target hook. This 33405 lets other target files rely on these variables. 33406 33407 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 33408 If this flag is true, the text of the macro 'ASM_APP_OFF' will be 33409 printed as the very first line in the assembly file, unless 33410 '-fverbose-asm' is in effect. (If that macro has been defined to 33411 the empty string, this variable has no effect.) With the normal 33412 definition of 'ASM_APP_OFF', the effect is to notify the GNU 33413 assembler that it need not bother stripping comments or extra 33414 whitespace from its input. This allows it to work a bit faster. 33415 33416 The default is false. You should not set it to true unless you 33417 have verified that your port does not generate any extra whitespace 33418 or comments that will cause GAS to issue errors in NO_APP mode. 33419 33420 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 33421 If this flag is true, 'output_file_directive' will be called for 33422 the primary source file, immediately after printing 'ASM_APP_OFF' 33423 (if that is enabled). Most ELF assemblers expect this to be done. 33424 The default is false. 33425 33426 -- Target Hook: void TARGET_ASM_FILE_END (void) 33427 Output to 'asm_out_file' any text which the assembler expects to 33428 find at the end of a file. The default is to output nothing. 33429 33430 -- Function: void file_end_indicate_exec_stack () 33431 Some systems use a common convention, the '.note.GNU-stack' special 33432 section, to indicate whether or not an object file relies on the 33433 stack being executable. If your system uses this convention, you 33434 should define 'TARGET_ASM_FILE_END' to this function. If you need 33435 to do other things in that hook, have your hook function call this 33436 function. 33437 33438 -- Target Hook: void TARGET_ASM_LTO_START (void) 33439 Output to 'asm_out_file' any text which the assembler expects to 33440 find at the start of an LTO section. The default is to output 33441 nothing. 33442 33443 -- Target Hook: void TARGET_ASM_LTO_END (void) 33444 Output to 'asm_out_file' any text which the assembler expects to 33445 find at the end of an LTO section. The default is to output 33446 nothing. 33447 33448 -- Target Hook: void TARGET_ASM_CODE_END (void) 33449 Output to 'asm_out_file' any text which is needed before emitting 33450 unwind info and debug info at the end of a file. Some targets emit 33451 here PIC setup thunks that cannot be emitted at the end of file, 33452 because they couldn't have unwind info then. The default is to 33453 output nothing. 33454 33455 -- Macro: ASM_COMMENT_START 33456 A C string constant describing how to begin a comment in the target 33457 assembler language. The compiler assumes that the comment will end 33458 at the end of the line. 33459 33460 -- Macro: ASM_APP_ON 33461 A C string constant for text to be output before each 'asm' 33462 statement or group of consecutive ones. Normally this is '"#APP"', 33463 which is a comment that has no effect on most assemblers but tells 33464 the GNU assembler that it must check the lines that follow for all 33465 valid assembler constructs. 33466 33467 -- Macro: ASM_APP_OFF 33468 A C string constant for text to be output after each 'asm' 33469 statement or group of consecutive ones. Normally this is 33470 '"#NO_APP"', which tells the GNU assembler to resume making the 33471 time-saving assumptions that are valid for ordinary compiler 33472 output. 33473 33474 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 33475 A C statement to output COFF information or DWARF debugging 33476 information which indicates that filename NAME is the current 33477 source file to the stdio stream STREAM. 33478 33479 This macro need not be defined if the standard form of output for 33480 the file format in use is appropriate. 33481 33482 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE, 33483 const char *NAME) 33484 Output COFF information or DWARF debugging information which 33485 indicates that filename NAME is the current source file to the 33486 stdio stream FILE. 33487 33488 This target hook need not be defined if the standard form of output 33489 for the file format in use is appropriate. 33490 33491 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME) 33492 Output a string based on NAME, suitable for the '#ident' directive, 33493 or the equivalent directive or pragma in non-C-family languages. 33494 If this hook is not defined, nothing is output for the '#ident' 33495 directive. 33496 33497 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 33498 A C statement to output the string STRING to the stdio stream 33499 STREAM. If you do not call the function 'output_quoted_string' in 33500 your config files, GCC will only call it to output filenames to the 33501 assembler source. So you can use it to canonicalize the format of 33502 the filename using this macro. 33503 33504 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 33505 unsigned int FLAGS, tree DECL) 33506 Output assembly directives to switch to section NAME. The section 33507 should have attributes as specified by FLAGS, which is a bit mask 33508 of the 'SECTION_*' flags defined in 'output.h'. If DECL is 33509 non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this 33510 section is associated. 33511 33512 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum 33513 node_frequency FREQ, bool STARTUP, bool EXIT) 33514 Return preferred text (sub)section for function DECL. Main purpose 33515 of this function is to separate cold, normal and hot functions. 33516 STARTUP is true when function is known to be used only at startup 33517 (from static constructors or it is 'main()'). EXIT is true when 33518 function is known to be used only at exit (from static 33519 destructors). Return NULL if function should go to default text 33520 section. 33521 33522 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE 33523 *FILE, tree DECL, bool NEW_IS_COLD) 33524 Used by the target to emit any assembler directives or additional 33525 labels needed when a function is partitioned between different 33526 sections. Output should be written to FILE. The function decl is 33527 available as DECL and the new section is 'cold' if NEW_IS_COLD is 33528 'true'. 33529 33530 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 33531 This flag is true if the target supports 33532 'TARGET_ASM_NAMED_SECTION'. It must not be modified by 33533 command-line option processing. 33534 33535 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 33536 This flag is true if we can create zeroed data by switching to a 33537 BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space. 33538 This is true on most ELF targets. 33539 33540 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 33541 const char *NAME, int RELOC) 33542 Choose a set of section attributes for use by 33543 'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 33544 section name, and whether or not the declaration's initializer may 33545 contain runtime relocations. DECL may be null, in which case 33546 read-write data should be assumed. 33547 33548 The default version of this function handles choosing code vs data, 33549 read-only vs read-write data, and 'flag_pic'. You should only need 33550 to override this if your target has special flags that might be set 33551 via '__attribute__'. 33552 33553 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 33554 TYPE, const char *TEXT) 33555 Provides the target with the ability to record the gcc command line 33556 switches that have been passed to the compiler, and options that 33557 are enabled. The TYPE argument specifies what is being recorded. 33558 It can take the following values: 33559 33560 'SWITCH_TYPE_PASSED' 33561 TEXT is a command line switch that has been set by the user. 33562 33563 'SWITCH_TYPE_ENABLED' 33564 TEXT is an option which has been enabled. This might be as a 33565 direct result of a command line switch, or because it is 33566 enabled by default or because it has been enabled as a side 33567 effect of a different command line switch. For example, the 33568 '-O2' switch enables various different individual optimization 33569 passes. 33570 33571 'SWITCH_TYPE_DESCRIPTIVE' 33572 TEXT is either NULL or some descriptive text which should be 33573 ignored. If TEXT is NULL then it is being used to warn the 33574 target hook that either recording is starting or ending. The 33575 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 33576 the warning is for start up and the second time the warning is 33577 for wind down. This feature is to allow the target hook to 33578 make any necessary preparations before it starts to record 33579 switches and to perform any necessary tidying up after it has 33580 finished recording switches. 33581 33582 'SWITCH_TYPE_LINE_START' 33583 This option can be ignored by this target hook. 33584 33585 'SWITCH_TYPE_LINE_END' 33586 This option can be ignored by this target hook. 33587 33588 The hook's return value must be zero. Other return values may be 33589 supported in the future. 33590 33591 By default this hook is set to NULL, but an example implementation 33592 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 33593 it records the switches as ASCII text inside a new, string 33594 mergeable section in the assembler output file. The name of the 33595 new section is provided by the 33596 'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 33597 33598 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 33599 This is the name of the section that will be created by the example 33600 ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target 33601 hook. 33602 33603 33604 File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 33605 33606 17.21.2 Output of Data 33607 ---------------------- 33608 33609 -- Target Hook: const char * TARGET_ASM_BYTE_OP 33610 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 33611 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 33612 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 33613 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 33614 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 33615 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 33616 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 33617 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 33618 These hooks specify assembly directives for creating certain kinds 33619 of integer object. The 'TARGET_ASM_BYTE_OP' directive creates a 33620 byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an 33621 aligned two-byte object, and so on. Any of the hooks may be 33622 'NULL', indicating that no suitable directive is available. 33623 33624 The compiler will print these strings at the start of a new line, 33625 followed immediately by the object's initial value. In most cases, 33626 the string should contain a tab, a pseudo-op, and then another tab. 33627 33628 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 33629 ALIGNED_P) 33630 The 'assemble_integer' function uses this hook to output an integer 33631 object. X is the object's value, SIZE is its size in bytes and 33632 ALIGNED_P indicates whether it is aligned. The function should 33633 return 'true' if it was able to output the object. If it returns 33634 false, 'assemble_integer' will try to split the object into smaller 33635 parts. 33636 33637 The default implementation of this hook will use the 33638 'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the 33639 relevant string is 'NULL'. 33640 33641 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE, 33642 rtx X) 33643 A target hook to recognize RTX patterns that 'output_addr_const' 33644 can't deal with, and output assembly code to FILE corresponding to 33645 the pattern X. This may be used to allow machine-dependent 33646 'UNSPEC's to appear within constants. 33647 33648 If target hook fails to recognize a pattern, it must return 33649 'false', so that a standard error message is printed. If it prints 33650 an error message itself, by calling, for example, 33651 'output_operand_lossage', it may just return 'true'. 33652 33653 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 33654 A C statement to output to the stdio stream STREAM an assembler 33655 instruction to assemble a string constant containing the LEN bytes 33656 at PTR. PTR will be a C expression of type 'char *' and LEN a C 33657 expression of type 'int'. 33658 33659 If the assembler has a '.ascii' pseudo-op as found in the Berkeley 33660 Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'. 33661 33662 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 33663 A C statement to output word N of a function descriptor for DECL. 33664 This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is 33665 defined, and is otherwise unused. 33666 33667 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 33668 You may define this macro as a C expression. You should define the 33669 expression to have a nonzero value if GCC should output the 33670 constant pool for a function before the code for the function, or a 33671 zero value if GCC should output the constant pool after the 33672 function. If you do not define this macro, the usual case, GCC 33673 will output the constant pool before the function. 33674 33675 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 33676 A C statement to output assembler commands to define the start of 33677 the constant pool for a function. FUNNAME is a string giving the 33678 name of the function. Should the return type of the function be 33679 required, it can be obtained via FUNDECL. SIZE is the size, in 33680 bytes, of the constant pool that will be written immediately after 33681 this call. 33682 33683 If no constant-pool prefix is required, the usual case, this macro 33684 need not be defined. 33685 33686 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, 33687 JUMPTO) 33688 A C statement (with or without semicolon) to output a constant in 33689 the constant pool, if it needs special treatment. (This macro need 33690 not do anything for RTL expressions that can be output normally.) 33691 33692 The argument FILE is the standard I/O stream to output the 33693 assembler code on. X is the RTL expression for the constant to 33694 output, and MODE is the machine mode (in case X is a 'const_int'). 33695 ALIGN is the required alignment for the value X; you should output 33696 an assembler directive to force this much alignment. 33697 33698 The argument LABELNO is a number to use in an internal label for 33699 the address of this pool entry. The definition of this macro is 33700 responsible for outputting the label definition at the proper 33701 place. Here is how to do this: 33702 33703 (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO); 33704 33705 When you output a pool entry specially, you should end with a 33706 'goto' to the label JUMPTO. This will prevent the same pool entry 33707 from being output a second time in the usual manner. 33708 33709 You need not define this macro if it would do nothing. 33710 33711 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 33712 A C statement to output assembler commands to at the end of the 33713 constant pool for a function. FUNNAME is a string giving the name 33714 of the function. Should the return type of the function be 33715 required, you can obtain it via FUNDECL. SIZE is the size, in 33716 bytes, of the constant pool that GCC wrote immediately before this 33717 call. 33718 33719 If no constant-pool epilogue is required, the usual case, you need 33720 not define this macro. 33721 33722 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 33723 Define this macro as a C expression which is nonzero if C is used 33724 as a logical line separator by the assembler. STR points to the 33725 position in the string where C was found; this can be used if a 33726 line separator uses multiple characters. 33727 33728 If you do not define this macro, the default is that only the 33729 character ';' is treated as a logical line separator. 33730 33731 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 33732 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 33733 These target hooks are C string constants, describing the syntax in 33734 the assembler for grouping arithmetic expressions. If not 33735 overridden, they default to normal parentheses, which is correct 33736 for most assemblers. 33737 33738 These macros are provided by 'real.h' for writing the definitions of 33739 'ASM_OUTPUT_DOUBLE' and the like: 33740 33741 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 33742 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 33743 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 33744 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 33745 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 33746 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 33747 These translate X, of type 'REAL_VALUE_TYPE', to the target's 33748 floating point representation, and store its bit pattern in the 33749 variable L. For 'REAL_VALUE_TO_TARGET_SINGLE' and 33750 'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 33751 'long int'. For the others, it should be an array of 'long int'. 33752 The number of elements in this array is determined by the size of 33753 the desired target floating point data type: 32 bits of it go in 33754 each 'long int' array element. Each array element holds 32 bits of 33755 the result, even if 'long int' is wider than 32 bits on the host 33756 machine. 33757 33758 The array element values are designed so that you can print them 33759 out using 'fprintf' in the order they should appear in the target 33760 machine's memory. 33761 33762 33763 File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 33764 33765 17.21.3 Output of Uninitialized Variables 33766 ----------------------------------------- 33767 33768 Each of the macros in this section is used to do the whole job of 33769 outputting a single uninitialized variable. 33770 33771 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 33772 A C statement (sans semicolon) to output to the stdio stream STREAM 33773 the assembler definition of a common-label named NAME whose size is 33774 SIZE bytes. The variable ROUNDED is the size rounded up to 33775 whatever alignment the caller wants. It is possible that SIZE may 33776 be zero, for instance if a struct with no other member than a 33777 zero-length array is defined. In this case, the backend must 33778 output a symbol definition that allocates at least one byte, both 33779 so that the address of the resulting object does not compare equal 33780 to any other, and because some object formats cannot even express 33781 the concept of a zero-sized common symbol, as that is how they 33782 represent an ordinary undefined external. 33783 33784 Use the expression 'assemble_name (STREAM, NAME)' to output the 33785 name itself; before and after that, output the additional assembler 33786 syntax for defining the name, and a newline. 33787 33788 This macro controls how the assembler definitions of uninitialized 33789 common global variables are output. 33790 33791 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 33792 Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a 33793 separate, explicit argument. If you define this macro, it is used 33794 in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in 33795 handling the required alignment of the variable. The alignment is 33796 specified as the number of bits. 33797 33798 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 33799 ALIGNMENT) 33800 Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 33801 to be output, if there is one, or 'NULL_TREE' if there is no 33802 corresponding variable. If you define this macro, GCC will use it 33803 in place of both 'ASM_OUTPUT_COMMON' and 33804 'ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 33805 see the variable's decl in order to chose what to output. 33806 33807 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 33808 A C statement (sans semicolon) to output to the stdio stream STREAM 33809 the assembler definition of uninitialized global DECL named NAME 33810 whose size is SIZE bytes. The variable ALIGNMENT is the alignment 33811 specified as the number of bits. 33812 33813 Try to use function 'asm_output_aligned_bss' defined in file 33814 'varasm.c' when defining this macro. If unable, use the expression 33815 'assemble_name (STREAM, NAME)' to output the name itself; before 33816 and after that, output the additional assembler syntax for defining 33817 the name, and a newline. 33818 33819 There are two ways of handling global BSS. One is to define this 33820 macro. The other is to have 'TARGET_ASM_SELECT_SECTION' return a 33821 switchable BSS section (*note 33822 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 33823 both. 33824 33825 Some languages do not have 'common' data, and require a non-common 33826 form of global BSS in order to handle uninitialized globals 33827 efficiently. C++ is one example of this. However, if the target 33828 does not support global BSS, the front end may choose to make 33829 globals common in order to save space in the object file. 33830 33831 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 33832 A C statement (sans semicolon) to output to the stdio stream STREAM 33833 the assembler definition of a local-common-label named NAME whose 33834 size is SIZE bytes. The variable ROUNDED is the size rounded up to 33835 whatever alignment the caller wants. 33836 33837 Use the expression 'assemble_name (STREAM, NAME)' to output the 33838 name itself; before and after that, output the additional assembler 33839 syntax for defining the name, and a newline. 33840 33841 This macro controls how the assembler definitions of uninitialized 33842 static variables are output. 33843 33844 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 33845 Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a 33846 separate, explicit argument. If you define this macro, it is used 33847 in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in 33848 handling the required alignment of the variable. The alignment is 33849 specified as the number of bits. 33850 33851 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 33852 ALIGNMENT) 33853 Like 'ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 33854 be output, if there is one, or 'NULL_TREE' if there is no 33855 corresponding variable. If you define this macro, GCC will use it 33856 in place of both 'ASM_OUTPUT_DECL' and 'ASM_OUTPUT_ALIGNED_DECL'. 33857 Define this macro when you need to see the variable's decl in order 33858 to chose what to output. 33859 33860 33861 File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 33862 33863 17.21.4 Output and Generation of Labels 33864 --------------------------------------- 33865 33866 This is about outputting labels. 33867 33868 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 33869 A C statement (sans semicolon) to output to the stdio stream STREAM 33870 the assembler definition of a label named NAME. Use the expression 33871 'assemble_name (STREAM, NAME)' to output the name itself; before 33872 and after that, output the additional assembler syntax for defining 33873 the name, and a newline. A default definition of this macro is 33874 provided which is correct for most systems. 33875 33876 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL) 33877 A C statement (sans semicolon) to output to the stdio stream STREAM 33878 the assembler definition of a label named NAME of a function. Use 33879 the expression 'assemble_name (STREAM, NAME)' to output the name 33880 itself; before and after that, output the additional assembler 33881 syntax for defining the name, and a newline. A default definition 33882 of this macro is provided which is correct for most systems. 33883 33884 If this macro is not defined, then the function name is defined in 33885 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 33886 33887 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 33888 Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer 33889 to a compiler-generated label. The default definition uses 33890 'assemble_name_raw', which is like 'assemble_name' except that it 33891 is more efficient. 33892 33893 -- Macro: SIZE_ASM_OP 33894 A C string containing the appropriate assembler directive to 33895 specify the size of a symbol, without any arguments. On systems 33896 that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"'; 33897 on other systems, the default is not to define this macro. 33898 33899 Define this macro only if it is correct to use the default 33900 definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and 33901 'ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 33902 custom definitions of those macros, or if you do not need explicit 33903 symbol sizes at all, do not define this macro. 33904 33905 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 33906 A C statement (sans semicolon) to output to the stdio stream STREAM 33907 a directive telling the assembler that the size of the symbol NAME 33908 is SIZE. SIZE is a 'HOST_WIDE_INT'. If you define 'SIZE_ASM_OP', 33909 a default definition of this macro is provided. 33910 33911 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 33912 A C statement (sans semicolon) to output to the stdio stream STREAM 33913 a directive telling the assembler to calculate the size of the 33914 symbol NAME by subtracting its address from the current address. 33915 33916 If you define 'SIZE_ASM_OP', a default definition of this macro is 33917 provided. The default assumes that the assembler recognizes a 33918 special '.' symbol as referring to the current address, and can 33919 calculate the difference between this and another symbol. If your 33920 assembler does not recognize '.' or cannot do calculations with it, 33921 you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some 33922 other technique. 33923 33924 -- Macro: NO_DOLLAR_IN_LABEL 33925 Define this macro if the assembler does not accept the character 33926 '$' in label names. By default constructors and destructors in G++ 33927 have '$' in the identifiers. If this macro is defined, '.' is used 33928 instead. 33929 33930 -- Macro: NO_DOT_IN_LABEL 33931 Define this macro if the assembler does not accept the character 33932 '.' in label names. By default constructors and destructors in G++ 33933 have names that use '.'. If this macro is defined, these names are 33934 rewritten to avoid '.'. 33935 33936 -- Macro: TYPE_ASM_OP 33937 A C string containing the appropriate assembler directive to 33938 specify the type of a symbol, without any arguments. On systems 33939 that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"'; 33940 on other systems, the default is not to define this macro. 33941 33942 Define this macro only if it is correct to use the default 33943 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 33944 need your own custom definition of this macro, or if you do not 33945 need explicit symbol types at all, do not define this macro. 33946 33947 -- Macro: TYPE_OPERAND_FMT 33948 A C string which specifies (using 'printf' syntax) the format of 33949 the second operand to 'TYPE_ASM_OP'. On systems that use ELF, the 33950 default (in 'config/elfos.h') is '"@%s"'; on other systems, the 33951 default is not to define this macro. 33952 33953 Define this macro only if it is correct to use the default 33954 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 33955 need your own custom definition of this macro, or if you do not 33956 need explicit symbol types at all, do not define this macro. 33957 33958 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 33959 A C statement (sans semicolon) to output to the stdio stream STREAM 33960 a directive telling the assembler that the type of the symbol NAME 33961 is TYPE. TYPE is a C string; currently, that string is always 33962 either '"function"' or '"object"', but you should not count on 33963 this. 33964 33965 If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default 33966 definition of this macro is provided. 33967 33968 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 33969 A C statement (sans semicolon) to output to the stdio stream STREAM 33970 any text necessary for declaring the name NAME of a function which 33971 is being defined. This macro is responsible for outputting the 33972 label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL'). The 33973 argument DECL is the 'FUNCTION_DECL' tree node representing the 33974 function. 33975 33976 If this macro is not defined, then the function name is defined in 33977 the usual manner as a label (by means of 33978 'ASM_OUTPUT_FUNCTION_LABEL'). 33979 33980 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 33981 of this macro. 33982 33983 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 33984 A C statement (sans semicolon) to output to the stdio stream STREAM 33985 any text necessary for declaring the size of a function which is 33986 being defined. The argument NAME is the name of the function. The 33987 argument DECL is the 'FUNCTION_DECL' tree node representing the 33988 function. 33989 33990 If this macro is not defined, then the function size is not 33991 defined. 33992 33993 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 33994 this macro. 33995 33996 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 33997 A C statement (sans semicolon) to output to the stdio stream STREAM 33998 any text necessary for declaring the name NAME of an initialized 33999 variable which is being defined. This macro must output the label 34000 definition (perhaps using 'ASM_OUTPUT_LABEL'). The argument DECL 34001 is the 'VAR_DECL' tree node representing the variable. 34002 34003 If this macro is not defined, then the variable name is defined in 34004 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 34005 34006 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or 34007 'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 34008 34009 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE, 34010 const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE) 34011 A target hook to output to the stdio stream FILE any text necessary 34012 for declaring the name NAME of a constant which is being defined. 34013 This target hook is responsible for outputting the label definition 34014 (perhaps using 'assemble_label'). The argument EXP is the value of 34015 the constant, and SIZE is the size of the constant in bytes. The 34016 NAME will be an internal label. 34017 34018 The default version of this target hook, define the NAME in the 34019 usual manner as a label (by means of 'assemble_label'). 34020 34021 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target 34022 hook. 34023 34024 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 34025 A C statement (sans semicolon) to output to the stdio stream STREAM 34026 any text necessary for claiming a register REGNO for a global 34027 variable DECL with name NAME. 34028 34029 If you don't define this macro, that is equivalent to defining it 34030 to do nothing. 34031 34032 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 34033 A C statement (sans semicolon) to finish up declaring a variable 34034 name once the compiler has processed its initializer fully and thus 34035 has had a chance to determine the size of an array when controlled 34036 by an initializer. This is used on systems where it's necessary to 34037 declare something about the size of the object. 34038 34039 If you don't define this macro, that is equivalent to defining it 34040 to do nothing. 34041 34042 You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or 34043 'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 34044 34045 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 34046 char *NAME) 34047 This target hook is a function to output to the stdio stream STREAM 34048 some commands that will make the label NAME global; that is, 34049 available for reference from other files. 34050 34051 The default implementation relies on a proper definition of 34052 'GLOBAL_ASM_OP'. 34053 34054 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree 34055 DECL) 34056 This target hook is a function to output to the stdio stream STREAM 34057 some commands that will make the name associated with DECL global; 34058 that is, available for reference from other files. 34059 34060 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 34061 target hook. 34062 34063 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 34064 A C statement (sans semicolon) to output to the stdio stream STREAM 34065 some commands that will make the label NAME weak; that is, 34066 available for reference from other files but only used if no other 34067 definition is available. Use the expression 'assemble_name 34068 (STREAM, NAME)' to output the name itself; before and after that, 34069 output the additional assembler syntax for making that name weak, 34070 and a newline. 34071 34072 If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not 34073 support weak symbols and you should not define the 'SUPPORTS_WEAK' 34074 macro. 34075 34076 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 34077 Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and 34078 'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 34079 or variable decl. If VALUE is not 'NULL', this C statement should 34080 output to the stdio stream STREAM assembler code which defines 34081 (equates) the weak symbol NAME to have the value VALUE. If VALUE 34082 is 'NULL', it should output commands to make NAME weak. 34083 34084 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 34085 Outputs a directive that enables NAME to be used to refer to symbol 34086 VALUE with weak-symbol semantics. 'decl' is the declaration of 34087 'name'. 34088 34089 -- Macro: SUPPORTS_WEAK 34090 A preprocessor constant expression which evaluates to true if the 34091 target supports weak symbols. 34092 34093 If you don't define this macro, 'defaults.h' provides a default 34094 definition. If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is 34095 defined, the default definition is '1'; otherwise, it is '0'. 34096 34097 -- Macro: TARGET_SUPPORTS_WEAK 34098 A C expression which evaluates to true if the target supports weak 34099 symbols. 34100 34101 If you don't define this macro, 'defaults.h' provides a default 34102 definition. The default definition is '(SUPPORTS_WEAK)'. Define 34103 this macro if you want to control weak symbol support with a 34104 compiler flag such as '-melf'. 34105 34106 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 34107 A C statement (sans semicolon) to mark DECL to be emitted as a 34108 public symbol such that extra copies in multiple translation units 34109 will be discarded by the linker. Define this macro if your object 34110 file format provides support for this concept, such as the 'COMDAT' 34111 section flags in the Microsoft Windows PE/COFF format, and this 34112 support requires changes to DECL, such as putting it in a separate 34113 section. 34114 34115 -- Macro: SUPPORTS_ONE_ONLY 34116 A C expression which evaluates to true if the target supports 34117 one-only semantics. 34118 34119 If you don't define this macro, 'varasm.c' provides a default 34120 definition. If 'MAKE_DECL_ONE_ONLY' is defined, the default 34121 definition is '1'; otherwise, it is '0'. Define this macro if you 34122 want to control one-only symbol support with a compiler flag, or if 34123 setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to 34124 be emitted as one-only. 34125 34126 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 34127 VISIBILITY) 34128 This target hook is a function to output to ASM_OUT_FILE some 34129 commands that will make the symbol(s) associated with DECL have 34130 hidden, protected or internal visibility as specified by 34131 VISIBILITY. 34132 34133 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 34134 A C expression that evaluates to true if the target's linker 34135 expects that weak symbols do not appear in a static archive's table 34136 of contents. The default is '0'. 34137 34138 Leaving weak symbols out of an archive's table of contents means 34139 that, if a symbol will only have a definition in one translation 34140 unit and will have undefined references from other translation 34141 units, that symbol should not be weak. Defining this macro to be 34142 nonzero will thus have the effect that certain symbols that would 34143 normally be weak (explicit template instantiations, and vtables for 34144 polymorphic classes with noninline key methods) will instead be 34145 nonweak. 34146 34147 The C++ ABI requires this macro to be zero. Define this macro for 34148 targets where full C++ ABI compliance is impossible and where 34149 linker restrictions require weak symbols to be left out of a static 34150 archive's table of contents. 34151 34152 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 34153 A C statement (sans semicolon) to output to the stdio stream STREAM 34154 any text necessary for declaring the name of an external symbol 34155 named NAME which is referenced in this compilation but not defined. 34156 The value of DECL is the tree node for the declaration. 34157 34158 This macro need not be defined if it does not need to output 34159 anything. The GNU assembler and most Unix assemblers don't require 34160 anything. 34161 34162 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 34163 This target hook is a function to output to ASM_OUT_FILE an 34164 assembler pseudo-op to declare a library function name external. 34165 The name of the library function is given by SYMREF, which is a 34166 'symbol_ref'. 34167 34168 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 34169 *SYMBOL) 34170 This target hook is a function to output to ASM_OUT_FILE an 34171 assembler directive to annotate SYMBOL as used. The Darwin target 34172 uses the .no_dead_code_strip directive. 34173 34174 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 34175 A C statement (sans semicolon) to output to the stdio stream STREAM 34176 a reference in assembler syntax to a label named NAME. This should 34177 add '_' to the front of the name, if that is customary on your 34178 operating system, as it is in most Berkeley Unix systems. This 34179 macro is used in 'assemble_name'. 34180 34181 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME) 34182 Given a symbol NAME, perform same mangling as 'varasm.c''s 34183 'assemble_name', but in memory rather than to a file stream, 34184 returning result as an 'IDENTIFIER_NODE'. Required for correct LTO 34185 symtabs. The default implementation calls the 34186 'TARGET_STRIP_NAME_ENCODING' hook and then prepends the 34187 'USER_LABEL_PREFIX', if any. 34188 34189 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 34190 A C statement (sans semicolon) to output a reference to 34191 'SYMBOL_REF' SYM. If not defined, 'assemble_name' will be used to 34192 output the name of the symbol. This macro may be used to modify 34193 the way a symbol is referenced depending on information encoded by 34194 'TARGET_ENCODE_SECTION_INFO'. 34195 34196 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 34197 A C statement (sans semicolon) to output a reference to BUF, the 34198 result of 'ASM_GENERATE_INTERNAL_LABEL'. If not defined, 34199 'assemble_name' will be used to output the name of the symbol. 34200 This macro is not used by 'output_asm_label', or the '%l' specifier 34201 that calls it; the intention is that this macro should be set when 34202 it is necessary to output a label differently when its address is 34203 being taken. 34204 34205 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 34206 char *PREFIX, unsigned long LABELNO) 34207 A function to output to the stdio stream STREAM a label whose name 34208 is made from the string PREFIX and the number LABELNO. 34209 34210 It is absolutely essential that these labels be distinct from the 34211 labels used for user-level functions and variables. Otherwise, 34212 certain programs will have name conflicts with internal labels. 34213 34214 It is desirable to exclude internal labels from the symbol table of 34215 the object file. Most assemblers have a naming convention for 34216 labels that should be excluded; on many systems, the letter 'L' at 34217 the beginning of a label has this effect. You should find out what 34218 convention your system uses, and follow it. 34219 34220 The default version of this function utilizes 34221 'ASM_GENERATE_INTERNAL_LABEL'. 34222 34223 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 34224 A C statement to output to the stdio stream STREAM a debug info 34225 label whose name is made from the string PREFIX and the number NUM. 34226 This is useful for VLIW targets, where debug info labels may need 34227 to be treated differently than branch target labels. On some 34228 systems, branch target labels must be at the beginning of 34229 instruction bundles, but debug info labels can occur in the middle 34230 of instruction bundles. 34231 34232 If this macro is not defined, then 34233 '(*targetm.asm_out.internal_label)' will be used. 34234 34235 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 34236 A C statement to store into the string STRING a label whose name is 34237 made from the string PREFIX and the number NUM. 34238 34239 This string, when output subsequently by 'assemble_name', should 34240 produce the output that '(*targetm.asm_out.internal_label)' would 34241 produce with the same PREFIX and NUM. 34242 34243 If the string begins with '*', then 'assemble_name' will output the 34244 rest of the string unchanged. It is often convenient for 34245 'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way. If the 34246 string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to 34247 output the string, and may change it. (Of course, 34248 'ASM_OUTPUT_LABELREF' is also part of your machine description, so 34249 you should know what it does on your machine.) 34250 34251 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 34252 A C expression to assign to OUTVAR (which is a variable of type 34253 'char *') a newly allocated string made from the string NAME and 34254 the number NUMBER, with some suitable punctuation added. Use 34255 'alloca' to get space for the string. 34256 34257 The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to 34258 produce an assembler label for an internal static variable whose 34259 name is NAME. Therefore, the string must be such as to result in 34260 valid assembler code. The argument NUMBER is different each time 34261 this macro is executed; it prevents conflicts between 34262 similarly-named internal static variables in different scopes. 34263 34264 Ideally this string should not be a valid C identifier, to prevent 34265 any conflict with the user's own symbols. Most assemblers allow 34266 periods or percent signs in assembler symbols; putting at least one 34267 of these between the name and the number will suffice. 34268 34269 If this macro is not defined, a default definition will be provided 34270 which is correct for most systems. 34271 34272 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 34273 A C statement to output to the stdio stream STREAM assembler code 34274 which defines (equates) the symbol NAME to have the value VALUE. 34275 34276 If 'SET_ASM_OP' is defined, a default definition is provided which 34277 is correct for most systems. 34278 34279 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 34280 DECL_OF_VALUE) 34281 A C statement to output to the stdio stream STREAM assembler code 34282 which defines (equates) the symbol whose tree node is DECL_OF_NAME 34283 to have the value of the tree node DECL_OF_VALUE. This macro will 34284 be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if 34285 the tree nodes are available. 34286 34287 If 'SET_ASM_OP' is defined, a default definition is provided which 34288 is correct for most systems. 34289 34290 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 34291 A C statement that evaluates to true if the assembler code which 34292 defines (equates) the symbol whose tree node is DECL_OF_NAME to 34293 have the value of the tree node DECL_OF_VALUE should be emitted 34294 near the end of the current compilation unit. The default is to 34295 not defer output of defines. This macro affects defines output by 34296 'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'. 34297 34298 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 34299 A C statement to output to the stdio stream STREAM assembler code 34300 which defines (equates) the weak symbol NAME to have the value 34301 VALUE. If VALUE is 'NULL', it defines NAME as an undefined weak 34302 symbol. 34303 34304 Define this macro if the target only supports weak aliases; define 34305 'ASM_OUTPUT_DEF' instead if possible. 34306 34307 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 34308 SEL_NAME) 34309 Define this macro to override the default assembler names used for 34310 Objective-C methods. 34311 34312 The default name is a unique method number followed by the name of 34313 the class (e.g. '_1_Foo'). For methods in categories, the name of 34314 the category is also included in the assembler name (e.g. 34315 '_1_Foo_Bar'). 34316 34317 These names are safe on most systems, but make debugging difficult 34318 since the method's selector is not present in the name. Therefore, 34319 particular systems define other ways of computing names. 34320 34321 BUF is an expression of type 'char *' which gives you a buffer in 34322 which to store the name; its length is as long as CLASS_NAME, 34323 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 34324 34325 The argument IS_INST specifies whether the method is an instance 34326 method or a class method; CLASS_NAME is the name of the class; 34327 CAT_NAME is the name of the category (or 'NULL' if the method is 34328 not in a category); and SEL_NAME is the name of the selector. 34329 34330 On systems where the assembler can handle quoted names, you can use 34331 this macro to provide more human-readable names. 34332 34333 34334 File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 34335 34336 17.21.5 How Initialization Functions Are Handled 34337 ------------------------------------------------ 34338 34339 The compiled code for certain languages includes "constructors" (also 34340 called "initialization routines")--functions to initialize data in the 34341 program when the program is started. These functions need to be called 34342 before the program is "started"--that is to say, before 'main' is 34343 called. 34344 34345 Compiling some languages generates "destructors" (also called 34346 "termination routines") that should be called when the program 34347 terminates. 34348 34349 To make the initialization and termination functions work, the compiler 34350 must output something in the assembler code to cause those functions to 34351 be called at the appropriate time. When you port the compiler to a new 34352 system, you need to specify how to do this. 34353 34354 There are two major ways that GCC currently supports the execution of 34355 initialization and termination functions. Each way has two variants. 34356 Much of the structure is common to all four variations. 34357 34358 The linker must build two lists of these functions--a list of 34359 initialization functions, called '__CTOR_LIST__', and a list of 34360 termination functions, called '__DTOR_LIST__'. 34361 34362 Each list always begins with an ignored function pointer (which may 34363 hold 0, -1, or a count of the function pointers after it, depending on 34364 the environment). This is followed by a series of zero or more function 34365 pointers to constructors (or destructors), followed by a function 34366 pointer containing zero. 34367 34368 Depending on the operating system and its executable file format, 34369 either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time 34370 and exit time. Constructors are called in reverse order of the list; 34371 destructors in forward order. 34372 34373 The best way to handle static constructors works only for object file 34374 formats which provide arbitrarily-named sections. A section is set 34375 aside for a list of constructors, and another for a list of destructors. 34376 Traditionally these are called '.ctors' and '.dtors'. Each object file 34377 that defines an initialization function also puts a word in the 34378 constructor section to point to that function. The linker accumulates 34379 all these words into one contiguous '.ctors' section. Termination 34380 functions are handled similarly. 34381 34382 This method will be chosen as the default by 'target-def.h' if 34383 'TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 34384 arbitrary sections, but does support special designated constructor and 34385 destructor sections may define 'CTORS_SECTION_ASM_OP' and 34386 'DTORS_SECTION_ASM_OP' to achieve the same effect. 34387 34388 When arbitrary sections are available, there are two variants, 34389 depending upon how the code in 'crtstuff.c' is called. On systems that 34390 support a ".init" section which is executed at program startup, parts of 34391 'crtstuff.c' are compiled into that section. The program is linked by 34392 the 'gcc' driver like this: 34393 34394 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 34395 34396 The prologue of a function ('__init') appears in the '.init' section of 34397 'crti.o'; the epilogue appears in 'crtn.o'. Likewise for the function 34398 '__fini' in the ".fini" section. Normally these files are provided by 34399 the operating system or by the GNU C library, but are provided by GCC 34400 for a few targets. 34401 34402 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled 34403 from 'crtstuff.c'. They contain, among other things, code fragments 34404 within the '.init' and '.fini' sections that branch to routines in the 34405 '.text' section. The linker will pull all parts of a section together, 34406 which results in a complete '__init' function that invokes the routines 34407 we need at startup. 34408 34409 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro 34410 properly. 34411 34412 If no init section is available, when GCC compiles any function called 34413 'main' (or more accurately, any function designated as a program entry 34414 point by the language front end calling 'expand_main_function'), it 34415 inserts a procedure call to '__main' as the first executable code after 34416 the function prologue. The '__main' function is defined in 'libgcc2.c' 34417 and runs the global constructors. 34418 34419 In file formats that don't support arbitrary sections, there are again 34420 two variants. In the simplest variant, the GNU linker (GNU 'ld') and an 34421 'a.out' format must be used. In this case, 'TARGET_ASM_CONSTRUCTOR' is 34422 defined to produce a '.stabs' entry of type 'N_SETT', referencing the 34423 name '__CTOR_LIST__', and with the address of the void function 34424 containing the initialization code as its value. The GNU linker 34425 recognizes this as a request to add the value to a "set"; the values are 34426 accumulated, and are eventually placed in the executable as a vector in 34427 the format described above, with a leading (ignored) count and a 34428 trailing zero element. 'TARGET_ASM_DESTRUCTOR' is handled similarly. 34429 Since no init section is available, the absence of 'INIT_SECTION_ASM_OP' 34430 causes the compilation of 'main' to call '__main' as above, starting the 34431 initialization process. 34432 34433 The last variant uses neither arbitrary sections nor the GNU linker. 34434 This is preferable when you want to do dynamic linking and when using 34435 file formats which the GNU linker does not support, such as 'ECOFF'. In 34436 this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and 34437 termination functions are recognized simply by their names. This 34438 requires an extra program in the linkage step, called 'collect2'. This 34439 program pretends to be the linker, for use with GCC; it does its job by 34440 running the ordinary linker, but also arranges to include the vectors of 34441 initialization and termination functions. These functions are called 34442 via '__main' as described above. In order to use this method, 34443 'use_collect2' must be defined in the target in 'config.gcc'. 34444 34445 The following section describes the specific macros that control and 34446 customize the handling of initialization and termination functions. 34447 34448 34449 File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 34450 34451 17.21.6 Macros Controlling Initialization Routines 34452 -------------------------------------------------- 34453 34454 Here are the macros that control how the compiler handles initialization 34455 and termination functions: 34456 34457 -- Macro: INIT_SECTION_ASM_OP 34458 If defined, a C string constant, including spacing, for the 34459 assembler operation to identify the following data as 34460 initialization code. If not defined, GCC will assume such a 34461 section does not exist. When you are using special sections for 34462 initialization and termination functions, this macro also controls 34463 how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization 34464 functions. 34465 34466 -- Macro: HAS_INIT_SECTION 34467 If defined, 'main' will not call '__main' as described above. This 34468 macro should be defined for systems that control start-up code on a 34469 symbol-by-symbol basis, such as OSF/1, and should not be defined 34470 explicitly for systems that support 'INIT_SECTION_ASM_OP'. 34471 34472 -- Macro: LD_INIT_SWITCH 34473 If defined, a C string constant for a switch that tells the linker 34474 that the following symbol is an initialization routine. 34475 34476 -- Macro: LD_FINI_SWITCH 34477 If defined, a C string constant for a switch that tells the linker 34478 that the following symbol is a finalization routine. 34479 34480 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 34481 If defined, a C statement that will write a function that can be 34482 automatically called when a shared library is loaded. The function 34483 should call FUNC, which takes no arguments. If not defined, and 34484 the object format requires an explicit initialization function, 34485 then a function called '_GLOBAL__DI' will be generated. 34486 34487 This function and the following one are used by collect2 when 34488 linking a shared library that needs constructors or destructors, or 34489 has DWARF2 exception tables embedded in the code. 34490 34491 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 34492 If defined, a C statement that will write a function that can be 34493 automatically called when a shared library is unloaded. The 34494 function should call FUNC, which takes no arguments. If not 34495 defined, and the object format requires an explicit finalization 34496 function, then a function called '_GLOBAL__DD' will be generated. 34497 34498 -- Macro: INVOKE__main 34499 If defined, 'main' will call '__main' despite the presence of 34500 'INIT_SECTION_ASM_OP'. This macro should be defined for systems 34501 where the init section is not actually run automatically, but is 34502 still useful for collecting the lists of constructors and 34503 destructors. 34504 34505 -- Macro: SUPPORTS_INIT_PRIORITY 34506 If nonzero, the C++ 'init_priority' attribute is supported and the 34507 compiler should emit instructions to control the order of 34508 initialization of objects. If zero, the compiler will issue an 34509 error message upon encountering an 'init_priority' attribute. 34510 34511 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 34512 This value is true if the target supports some "native" method of 34513 collecting constructors and destructors to be run at startup and 34514 exit. It is false if we must use 'collect2'. 34515 34516 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 34517 If defined, a function that outputs assembler code to arrange to 34518 call the function referenced by SYMBOL at initialization time. 34519 34520 Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no 34521 arguments and with no return value. If the target supports 34522 initialization priorities, PRIORITY is a value between 0 and 34523 'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'. 34524 34525 If this macro is not defined by the target, a suitable default will 34526 be chosen if (1) the target supports arbitrary section names, (2) 34527 the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is 34528 not defined. 34529 34530 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 34531 This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination 34532 functions rather than initialization functions. 34533 34534 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 34535 generated for the generated object file will have static linkage. 34536 34537 If your system uses 'collect2' as the means of processing constructors, 34538 then that program normally uses 'nm' to scan an object file for 34539 constructor functions to be called. 34540 34541 On certain kinds of systems, you can define this macro to make 34542 'collect2' work faster (and, in some cases, make it work at all): 34543 34544 -- Macro: OBJECT_FORMAT_COFF 34545 Define this macro if the system uses COFF (Common Object File 34546 Format) object files, so that 'collect2' can assume this format and 34547 scan object files directly for dynamic constructor/destructor 34548 functions. 34549 34550 This macro is effective only in a native compiler; 'collect2' as 34551 part of a cross compiler always uses 'nm' for the target machine. 34552 34553 -- Macro: REAL_NM_FILE_NAME 34554 Define this macro as a C string constant containing the file name 34555 to use to execute 'nm'. The default is to search the path normally 34556 for 'nm'. 34557 34558 -- Macro: NM_FLAGS 34559 'collect2' calls 'nm' to scan object files for static constructors 34560 and destructors and LTO info. By default, '-n' is passed. Define 34561 'NM_FLAGS' to a C string constant if other options are needed to 34562 get the same output format as GNU 'nm -n' produces. 34563 34564 If your system supports shared libraries and has a program to list the 34565 dynamic dependencies of a given library or executable, you can define 34566 these macros to enable support for running initialization and 34567 termination functions in shared libraries: 34568 34569 -- Macro: LDD_SUFFIX 34570 Define this macro to a C string constant containing the name of the 34571 program which lists dynamic dependencies, like 'ldd' under SunOS 4. 34572 34573 -- Macro: PARSE_LDD_OUTPUT (PTR) 34574 Define this macro to be C code that extracts filenames from the 34575 output of the program denoted by 'LDD_SUFFIX'. PTR is a variable 34576 of type 'char *' that points to the beginning of a line of output 34577 from 'LDD_SUFFIX'. If the line lists a dynamic dependency, the 34578 code must advance PTR to the beginning of the filename on that 34579 line. Otherwise, it must set PTR to 'NULL'. 34580 34581 -- Macro: SHLIB_SUFFIX 34582 Define this macro to a C string constant containing the default 34583 shared library extension of the target (e.g., '".so"'). 'collect2' 34584 strips version information after this suffix when generating global 34585 constructor and destructor names. This define is only needed on 34586 targets that use 'collect2' to process constructors and 34587 destructors. 34588 34589 34590 File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 34591 34592 17.21.7 Output of Assembler Instructions 34593 ---------------------------------------- 34594 34595 This describes assembler instruction output. 34596 34597 -- Macro: REGISTER_NAMES 34598 A C initializer containing the assembler's names for the machine 34599 registers, each one as a C string constant. This is what 34600 translates register numbers in the compiler into assembler 34601 language. 34602 34603 -- Macro: ADDITIONAL_REGISTER_NAMES 34604 If defined, a C initializer for an array of structures containing a 34605 name and a register number. This macro defines additional names 34606 for hard registers, thus allowing the 'asm' option in declarations 34607 to refer to registers using alternate names. 34608 34609 -- Macro: OVERLAPPING_REGISTER_NAMES 34610 If defined, a C initializer for an array of structures containing a 34611 name, a register number and a count of the number of consecutive 34612 machine registers the name overlaps. This macro defines additional 34613 names for hard registers, thus allowing the 'asm' option in 34614 declarations to refer to registers using alternate names. Unlike 34615 'ADDITIONAL_REGISTER_NAMES', this macro should be used when the 34616 register name implies multiple underlying registers. 34617 34618 This macro should be used when it is important that a clobber in an 34619 'asm' statement clobbers all the underlying values implied by the 34620 register name. For example, on ARM, clobbering the 34621 double-precision VFP register "d0" implies clobbering both 34622 single-precision registers "s0" and "s1". 34623 34624 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 34625 Define this macro if you are using an unusual assembler that 34626 requires different names for the machine instructions. 34627 34628 The definition is a C statement or statements which output an 34629 assembler instruction opcode to the stdio stream STREAM. The 34630 macro-operand PTR is a variable of type 'char *' which points to 34631 the opcode name in its "internal" form--the form that is written in 34632 the machine description. The definition should output the opcode 34633 name to STREAM, performing any translation you desire, and 34634 increment the variable PTR to point at the end of the opcode so 34635 that it will not be output twice. 34636 34637 In fact, your macro definition may process less than the entire 34638 opcode name, or more than the opcode name; but if you want to 34639 process text that includes '%'-sequences to substitute operands, 34640 you must take care of the substitution yourself. Just be sure to 34641 increment PTR over whatever text should not be output normally. 34642 34643 If you need to look at the operand values, they can be found as the 34644 elements of 'recog_data.operand'. 34645 34646 If the macro definition does nothing, the instruction is output in 34647 the usual way. 34648 34649 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 34650 If defined, a C statement to be executed just prior to the output 34651 of assembler code for INSN, to modify the extracted operands so 34652 they will be output differently. 34653 34654 Here the argument OPVEC is the vector containing the operands 34655 extracted from INSN, and NOPERANDS is the number of elements of the 34656 vector which contain meaningful data for this insn. The contents 34657 of this vector are what will be used to convert the insn template 34658 into assembler code, so you can change the assembler output by 34659 changing the contents of the vector. 34660 34661 This macro is useful when various assembler syntaxes share a single 34662 file of instruction patterns; by defining this macro differently, 34663 you can cause a large class of instructions to be output 34664 differently (such as with rearranged operands). Naturally, 34665 variations in assembler syntax affecting individual insn patterns 34666 ought to be handled by writing conditional output routines in those 34667 patterns. 34668 34669 If this macro is not defined, it is equivalent to a null statement. 34670 34671 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx 34672 INSN, rtx *OPVEC, int NOPERANDS) 34673 If defined, this target hook is a function which is executed just 34674 after the output of assembler code for INSN, to change the mode of 34675 the assembler if necessary. 34676 34677 Here the argument OPVEC is the vector containing the operands 34678 extracted from INSN, and NOPERANDS is the number of elements of the 34679 vector which contain meaningful data for this insn. The contents 34680 of this vector are what was used to convert the insn template into 34681 assembler code, so you can change the assembler mode by checking 34682 the contents of the vector. 34683 34684 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 34685 A C compound statement to output to stdio stream STREAM the 34686 assembler syntax for an instruction operand X. X is an RTL 34687 expression. 34688 34689 CODE is a value that can be used to specify one of several ways of 34690 printing the operand. It is used when identical operands must be 34691 printed differently depending on the context. CODE comes from the 34692 '%' specification that was used to request printing of the operand. 34693 If the specification was just '%DIGIT' then CODE is 0; if the 34694 specification was '%LTR DIGIT' then CODE is the ASCII code for LTR. 34695 34696 If X is a register, this macro should print the register's name. 34697 The names can be found in an array 'reg_names' whose type is 'char 34698 *[]'. 'reg_names' is initialized from 'REGISTER_NAMES'. 34699 34700 When the machine description has a specification '%PUNCT' (a '%' 34701 followed by a punctuation character), this macro is called with a 34702 null pointer for X and the punctuation character for CODE. 34703 34704 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 34705 A C expression which evaluates to true if CODE is a valid 34706 punctuation character for use in the 'PRINT_OPERAND' macro. If 34707 'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 34708 punctuation characters (except for the standard one, '%') are used 34709 in this way. 34710 34711 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 34712 A C compound statement to output to stdio stream STREAM the 34713 assembler syntax for an instruction operand that is a memory 34714 reference whose address is X. X is an RTL expression. 34715 34716 On some machines, the syntax for a symbolic address depends on the 34717 section that the address refers to. On these machines, define the 34718 hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the 34719 'symbol_ref', and then check for it here. *Note Assembler 34720 Format::. 34721 34722 -- Macro: DBR_OUTPUT_SEQEND (FILE) 34723 A C statement, to be executed after all slot-filler instructions 34724 have been output. If necessary, call 'dbr_sequence_length' to 34725 determine the number of slots filled in a sequence (zero if not 34726 currently outputting a sequence), to decide how many no-ops to 34727 output, or whatever. 34728 34729 Don't define this macro if it has nothing to do, but it is helpful 34730 in reading assembly output if the extent of the delay sequence is 34731 made explicit (e.g. with white space). 34732 34733 Note that output routines for instructions with delay slots must be 34734 prepared to deal with not being output as part of a sequence (i.e. when 34735 the scheduling pass is not run, or when no slot fillers could be found.) 34736 The variable 'final_sequence' is null when not processing a sequence, 34737 otherwise it contains the 'sequence' rtx being output. 34738 34739 -- Macro: REGISTER_PREFIX 34740 -- Macro: LOCAL_LABEL_PREFIX 34741 -- Macro: USER_LABEL_PREFIX 34742 -- Macro: IMMEDIATE_PREFIX 34743 If defined, C string expressions to be used for the '%R', '%L', 34744 '%U', and '%I' options of 'asm_fprintf' (see 'final.c'). These are 34745 useful when a single 'md' file must support multiple assembler 34746 formats. In that case, the various 'tm.h' files can define these 34747 macros differently. 34748 34749 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 34750 If defined this macro should expand to a series of 'case' 34751 statements which will be parsed inside the 'switch' statement of 34752 the 'asm_fprintf' function. This allows targets to define extra 34753 printf formats which may useful when generating their assembler 34754 statements. Note that uppercase letters are reserved for future 34755 generic extensions to asm_fprintf, and so are not available to 34756 target specific code. The output file is given by the parameter 34757 FILE. The varargs input pointer is ARGPTR and the rest of the 34758 format string, starting the character after the one that is being 34759 switched upon, is pointed to by FORMAT. 34760 34761 -- Macro: ASSEMBLER_DIALECT 34762 If your target supports multiple dialects of assembler language 34763 (such as different opcodes), define this macro as a C expression 34764 that gives the numeric index of the assembler language dialect to 34765 use, with zero as the first variant. 34766 34767 If this macro is defined, you may use constructs of the form 34768 '{option0|option1|option2...}' 34769 in the output templates of patterns (*note Output Template::) or in 34770 the first argument of 'asm_fprintf'. This construct outputs 34771 'option0', 'option1', 'option2', etc., if the value of 34772 'ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 34773 within these strings retain their usual meaning. If there are 34774 fewer alternatives within the braces than the value of 34775 'ASSEMBLER_DIALECT', the construct outputs nothing. 34776 34777 If you do not define this macro, the characters '{', '|' and '}' do 34778 not have any special meaning when used in templates or operands to 34779 'asm_fprintf'. 34780 34781 Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX', 34782 'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the 34783 variations in assembler language syntax with that mechanism. 34784 Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax 34785 if the syntax variant are larger and involve such things as 34786 different opcodes or operand order. 34787 34788 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 34789 A C expression to output to STREAM some assembler code which will 34790 push hard register number REGNO onto the stack. The code need not 34791 be optimal, since this macro is used only when profiling. 34792 34793 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 34794 A C expression to output to STREAM some assembler code which will 34795 pop hard register number REGNO off of the stack. The code need not 34796 be optimal, since this macro is used only when profiling. 34797 34798 34799 File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 34800 34801 17.21.8 Output of Dispatch Tables 34802 --------------------------------- 34803 34804 This concerns dispatch tables. 34805 34806 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 34807 A C statement to output to the stdio stream STREAM an assembler 34808 pseudo-instruction to generate a difference between two labels. 34809 VALUE and REL are the numbers of two internal labels. The 34810 definitions of these labels are output using 34811 '(*targetm.asm_out.internal_label)', and they must be printed in 34812 the same way here. For example, 34813 34814 fprintf (STREAM, "\t.word L%d-L%d\n", 34815 VALUE, REL) 34816 34817 You must provide this macro on machines where the addresses in a 34818 dispatch table are relative to the table's own address. If 34819 defined, GCC will also use this macro on all machines when 34820 producing PIC. BODY is the body of the 'ADDR_DIFF_VEC'; it is 34821 provided so that the mode and flags can be read. 34822 34823 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 34824 This macro should be provided on machines where the addresses in a 34825 dispatch table are absolute. 34826 34827 The definition should be a C statement to output to the stdio 34828 stream STREAM an assembler pseudo-instruction to generate a 34829 reference to a label. VALUE is the number of an internal label 34830 whose definition is output using 34831 '(*targetm.asm_out.internal_label)'. For example, 34832 34833 fprintf (STREAM, "\t.word L%d\n", VALUE) 34834 34835 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 34836 Define this if the label before a jump-table needs to be output 34837 specially. The first three arguments are the same as for 34838 '(*targetm.asm_out.internal_label)'; the fourth argument is the 34839 jump-table which follows (a 'jump_insn' containing an 'addr_vec' or 34840 'addr_diff_vec'). 34841 34842 This feature is used on system V to output a 'swbeg' statement for 34843 the table. 34844 34845 If this macro is not defined, these labels are output with 34846 '(*targetm.asm_out.internal_label)'. 34847 34848 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 34849 Define this if something special must be output at the end of a 34850 jump-table. The definition should be a C statement to be executed 34851 after the assembler code for the table is written. It should write 34852 the appropriate code to stdio stream STREAM. The argument TABLE is 34853 the jump-table insn, and NUM is the label-number of the preceding 34854 label. 34855 34856 If this macro is not defined, nothing special is output at the end 34857 of the jump-table. 34858 34859 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 34860 DECL, int FOR_EH, int EMPTY) 34861 This target hook emits a label at the beginning of each FDE. It 34862 should be defined on targets where FDEs need special labels, and it 34863 should write the appropriate label, for the FDE associated with the 34864 function declaration DECL, to the stdio stream STREAM. The third 34865 argument, FOR_EH, is a boolean: true if this is for an exception 34866 table. The fourth argument, EMPTY, is a boolean: true if this is a 34867 placeholder label for an omitted FDE. 34868 34869 The default is that FDEs are not given nonlocal labels. 34870 34871 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 34872 This target hook emits a label at the beginning of the exception 34873 table. It should be defined on targets where it is desirable for 34874 the table to be broken up according to function. 34875 34876 The default is that no label is emitted. 34877 34878 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx 34879 PERSONALITY) 34880 If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be 34881 used to emit a directive to install a personality hook into the 34882 unwind info. This hook should not be used if dwarf2 unwind info is 34883 used. 34884 34885 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx INSN) 34886 This target hook emits assembly directives required to unwind the 34887 given instruction. This is only used when 34888 'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'. 34889 34890 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN 34891 True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before 34892 the assembly for INSN has been emitted, false if the hook should be 34893 called afterward. 34894 34895 34896 File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 34897 34898 17.21.9 Assembler Commands for Exception Regions 34899 ------------------------------------------------ 34900 34901 This describes commands marking the start and the end of an exception 34902 region. 34903 34904 -- Macro: EH_FRAME_SECTION_NAME 34905 If defined, a C string constant for the name of the section 34906 containing exception handling frame unwind information. If not 34907 defined, GCC will provide a default definition if the target 34908 supports named sections. 'crtstuff.c' uses this macro to switch to 34909 the appropriate section. 34910 34911 You should define this symbol if your target supports DWARF 2 frame 34912 unwind information and the default definition does not work. 34913 34914 -- Macro: EH_FRAME_IN_DATA_SECTION 34915 If defined, DWARF 2 frame unwind information will be placed in the 34916 data section even though the target supports named sections. This 34917 might be necessary, for instance, if the system linker does garbage 34918 collection and sections cannot be marked as not to be collected. 34919 34920 Do not define this macro unless 'TARGET_ASM_NAMED_SECTION' is also 34921 defined. 34922 34923 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 34924 Define this macro to 1 if your target is such that no frame unwind 34925 information encoding used with non-PIC code will ever require a 34926 runtime relocation, but the linker may not support merging 34927 read-only and read-write sections into a single read-write section. 34928 34929 -- Macro: MASK_RETURN_ADDR 34930 An rtx used to mask the return address found via 'RETURN_ADDR_RTX', 34931 so that it does not contain any extraneous set bits in it. 34932 34933 -- Macro: DWARF2_UNWIND_INFO 34934 Define this macro to 0 if your target supports DWARF 2 frame unwind 34935 information, but it does not yet work with exception handling. 34936 Otherwise, if your target supports this information (if it defines 34937 'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will 34938 provide a default definition of 1. 34939 34940 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO 34941 (struct gcc_options *OPTS) 34942 This hook defines the mechanism that will be used for exception 34943 handling by the target. If the target has ABI specified unwind 34944 tables, the hook should return 'UI_TARGET'. If the target is to 34945 use the 'setjmp'/'longjmp'-based exception handling scheme, the 34946 hook should return 'UI_SJLJ'. If the target supports DWARF 2 frame 34947 unwind information, the hook should return 'UI_DWARF2'. 34948 34949 A target may, if exceptions are disabled, choose to return 34950 'UI_NONE'. This may end up simplifying other parts of 34951 target-specific code. The default implementation of this hook 34952 never returns 'UI_NONE'. 34953 34954 Note that the value returned by this hook should be constant. It 34955 should not depend on anything except the command-line switches 34956 described by OPTS. In particular, the setting 'UI_SJLJ' must be 34957 fixed at compiler start-up as C pre-processor macros and builtin 34958 functions related to exception handling are set up depending on 34959 this setting. 34960 34961 The default implementation of the hook first honors the 34962 '--enable-sjlj-exceptions' configure option, then 34963 'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'. If 34964 'DWARF2_UNWIND_INFO' depends on command-line options, the target 34965 must define this hook so that OPTS is used correctly. 34966 34967 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 34968 This variable should be set to 'true' if the target ABI requires 34969 unwinding tables even when exceptions are not used. It must not be 34970 modified by command-line option processing. 34971 34972 -- Macro: DONT_USE_BUILTIN_SETJMP 34973 Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme 34974 should use the 'setjmp'/'longjmp' functions from the C library 34975 instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery. 34976 34977 -- Macro: JMP_BUF_SIZE 34978 This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also 34979 defined. Define this macro if the default size of 'jmp_buf' buffer 34980 for the 'setjmp'/'longjmp'-based exception handling mechanism is 34981 not large enough, or if it is much too large. The default size is 34982 'FIRST_PSEUDO_REGISTER * sizeof(void *)'. 34983 34984 -- Macro: DWARF_CIE_DATA_ALIGNMENT 34985 This macro need only be defined if the target might save registers 34986 in the function prologue at an offset to the stack pointer that is 34987 not aligned to 'UNITS_PER_WORD'. The definition should be the 34988 negative minimum alignment if 'STACK_GROWS_DOWNWARD' is defined, 34989 and the positive minimum alignment otherwise. *Note SDB and 34990 DWARF::. Only applicable if the target supports DWARF 2 frame 34991 unwind information. 34992 34993 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 34994 Contains the value true if the target should add a zero word onto 34995 the end of a Dwarf-2 frame info section when used for exception 34996 handling. Default value is false if 'EH_FRAME_SECTION_NAME' is 34997 defined, and true otherwise. 34998 34999 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 35000 Given a register, this hook should return a parallel of registers 35001 to represent where to find the register pieces. Define this hook 35002 if the register and its mode are represented in Dwarf in 35003 non-contiguous locations, or if the register should be represented 35004 in more than one register in Dwarf. Otherwise, this hook should 35005 return 'NULL_RTX'. If not defined, the default is to return 35006 'NULL_RTX'. 35007 35008 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 35009 If some registers are represented in Dwarf-2 unwind information in 35010 multiple pieces, define this hook to fill in information about the 35011 sizes of those pieces in the table used by the unwinder at runtime. 35012 It will be called by 'expand_builtin_init_dwarf_reg_sizes' after 35013 filling in a single size corresponding to each hard register; 35014 ADDRESS is the address of the table. 35015 35016 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 35017 This hook is used to output a reference from a frame unwinding 35018 table to the type_info object identified by SYM. It should return 35019 'true' if the reference was output. Returning 'false' will cause 35020 the reference to be output using the normal Dwarf2 routines. 35021 35022 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 35023 This flag should be set to 'true' on targets that use an ARM EABI 35024 based unwinding library, and 'false' on other targets. This 35025 effects the format of unwinding tables, and how the unwinder in 35026 entered after running a cleanup. The default is 'false'. 35027 35028 35029 File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 35030 35031 17.21.10 Assembler Commands for Alignment 35032 ----------------------------------------- 35033 35034 This describes commands for alignment. 35035 35036 -- Macro: JUMP_ALIGN (LABEL) 35037 The alignment (log base 2) to put in front of LABEL, which is a 35038 common destination of jumps and has no fallthru incoming edge. 35039 35040 This macro need not be defined if you don't want any special 35041 alignment to be done at such a time. Most machine descriptions do 35042 not currently define the macro. 35043 35044 Unless it's necessary to inspect the LABEL parameter, it is better 35045 to set the variable ALIGN_JUMPS in the target's 35046 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35047 user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation. 35048 35049 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx LABEL) 35050 The maximum number of bytes to skip before LABEL when applying 35051 'JUMP_ALIGN'. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is 35052 defined. 35053 35054 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 35055 The alignment (log base 2) to put in front of LABEL, which follows 35056 a 'BARRIER'. 35057 35058 This macro need not be defined if you don't want any special 35059 alignment to be done at such a time. Most machine descriptions do 35060 not currently define the macro. 35061 35062 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx 35063 LABEL) 35064 The maximum number of bytes to skip before LABEL when applying 35065 'LABEL_ALIGN_AFTER_BARRIER'. This works only if 35066 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35067 35068 -- Macro: LOOP_ALIGN (LABEL) 35069 The alignment (log base 2) to put in front of LABEL, which follows 35070 a 'NOTE_INSN_LOOP_BEG' note. 35071 35072 This macro need not be defined if you don't want any special 35073 alignment to be done at such a time. Most machine descriptions do 35074 not currently define the macro. 35075 35076 Unless it's necessary to inspect the LABEL parameter, it is better 35077 to set the variable 'align_loops' in the target's 35078 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35079 user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation. 35080 35081 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx LABEL) 35082 The maximum number of bytes to skip when applying 'LOOP_ALIGN' to 35083 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35084 35085 -- Macro: LABEL_ALIGN (LABEL) 35086 The alignment (log base 2) to put in front of LABEL. If 35087 'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different 35088 alignment, the maximum of the specified values is used. 35089 35090 Unless it's necessary to inspect the LABEL parameter, it is better 35091 to set the variable 'align_labels' in the target's 35092 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35093 user's selection in 'align_labels' in a 'LABEL_ALIGN' 35094 implementation. 35095 35096 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx LABEL) 35097 The maximum number of bytes to skip when applying 'LABEL_ALIGN' to 35098 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35099 35100 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 35101 A C statement to output to the stdio stream STREAM an assembler 35102 instruction to advance the location counter by NBYTES bytes. Those 35103 bytes should be zero when loaded. NBYTES will be a C expression of 35104 type 'unsigned HOST_WIDE_INT'. 35105 35106 -- Macro: ASM_NO_SKIP_IN_TEXT 35107 Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the 35108 text section because it fails to put zeros in the bytes that are 35109 skipped. This is true on many Unix systems, where the pseudo-op to 35110 skip bytes produces no-op instructions rather than zeros when used 35111 in the text section. 35112 35113 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 35114 A C statement to output to the stdio stream STREAM an assembler 35115 command to advance the location counter to a multiple of 2 to the 35116 POWER bytes. POWER will be a C expression of type 'int'. 35117 35118 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 35119 Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 35120 for padding, if necessary. 35121 35122 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 35123 A C statement to output to the stdio stream STREAM an assembler 35124 command to advance the location counter to a multiple of 2 to the 35125 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 35126 satisfy the alignment request. POWER and MAX_SKIP will be a C 35127 expression of type 'int'. 35128 35129 35130 File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 35131 35132 17.22 Controlling Debugging Information Format 35133 ============================================== 35134 35135 This describes how to specify debugging information. 35136 35137 * Menu: 35138 35139 * All Debuggers:: Macros that affect all debugging formats uniformly. 35140 * DBX Options:: Macros enabling specific options in DBX format. 35141 * DBX Hooks:: Hook macros for varying DBX format. 35142 * File Names and DBX:: Macros controlling output of file names in DBX format. 35143 * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 35144 * VMS Debug:: Macros for VMS debug format. 35145 35146 35147 File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 35148 35149 17.22.1 Macros Affecting All Debugging Formats 35150 ---------------------------------------------- 35151 35152 These macros affect all debugging formats. 35153 35154 -- Macro: DBX_REGISTER_NUMBER (REGNO) 35155 A C expression that returns the DBX register number for the 35156 compiler register number REGNO. In the default macro provided, the 35157 value of this expression will be REGNO itself. But sometimes there 35158 are some registers that the compiler knows about and DBX does not, 35159 or vice versa. In such cases, some register may need to have one 35160 number in the compiler and another for DBX. 35161 35162 If two registers have consecutive numbers inside GCC, and they can 35163 be used as a pair to hold a multiword value, then they _must_ have 35164 consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'. 35165 Otherwise, debuggers will be unable to access such a pair, because 35166 they expect register pairs to be consecutive in their own numbering 35167 scheme. 35168 35169 If you find yourself defining 'DBX_REGISTER_NUMBER' in way that 35170 does not preserve register pairs, then what you must do instead is 35171 redefine the actual register numbering scheme. 35172 35173 -- Macro: DEBUGGER_AUTO_OFFSET (X) 35174 A C expression that returns the integer offset value for an 35175 automatic variable having address X (an RTL expression). The 35176 default computation assumes that X is based on the frame-pointer 35177 and gives the offset from the frame-pointer. This is required for 35178 targets that produce debugging output for DBX or COFF-style 35179 debugging output for SDB and allow the frame-pointer to be 35180 eliminated when the '-g' options is used. 35181 35182 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 35183 A C expression that returns the integer offset value for an 35184 argument having address X (an RTL expression). The nominal offset 35185 is OFFSET. 35186 35187 -- Macro: PREFERRED_DEBUGGING_TYPE 35188 A C expression that returns the type of debugging output GCC should 35189 produce when the user specifies just '-g'. Define this if you have 35190 arranged for GCC to support more than one format of debugging 35191 output. Currently, the allowable values are 'DBX_DEBUG', 35192 'SDB_DEBUG', 'DWARF_DEBUG', 'DWARF2_DEBUG', 'XCOFF_DEBUG', 35193 'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'. 35194 35195 When the user specifies '-ggdb', GCC normally also uses the value 35196 of this macro to select the debugging output format, but with two 35197 exceptions. If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the 35198 value 'DWARF2_DEBUG'. Otherwise, if 'DBX_DEBUGGING_INFO' is 35199 defined, GCC uses 'DBX_DEBUG'. 35200 35201 The value of this macro only affects the default debugging output; 35202 the user can always get a specific type of output by using 35203 '-gstabs', '-gcoff', '-gdwarf-2', '-gxcoff', or '-gvms'. 35204 35205 35206 File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 35207 35208 17.22.2 Specific Options for DBX Output 35209 --------------------------------------- 35210 35211 These are specific options for DBX output. 35212 35213 -- Macro: DBX_DEBUGGING_INFO 35214 Define this macro if GCC should produce debugging output for DBX in 35215 response to the '-g' option. 35216 35217 -- Macro: XCOFF_DEBUGGING_INFO 35218 Define this macro if GCC should produce XCOFF format debugging 35219 output in response to the '-g' option. This is a variant of DBX 35220 format. 35221 35222 -- Macro: DEFAULT_GDB_EXTENSIONS 35223 Define this macro to control whether GCC should by default generate 35224 GDB's extended version of DBX debugging information (assuming 35225 DBX-format debugging information is enabled at all). If you don't 35226 define the macro, the default is 1: always generate the extended 35227 information if there is any occasion to. 35228 35229 -- Macro: DEBUG_SYMS_TEXT 35230 Define this macro if all '.stabs' commands should be output while 35231 in the text section. 35232 35233 -- Macro: ASM_STABS_OP 35234 A C string constant, including spacing, naming the assembler pseudo 35235 op to use instead of '"\t.stabs\t"' to define an ordinary debugging 35236 symbol. If you don't define this macro, '"\t.stabs\t"' is used. 35237 This macro applies only to DBX debugging information format. 35238 35239 -- Macro: ASM_STABD_OP 35240 A C string constant, including spacing, naming the assembler pseudo 35241 op to use instead of '"\t.stabd\t"' to define a debugging symbol 35242 whose value is the current location. If you don't define this 35243 macro, '"\t.stabd\t"' is used. This macro applies only to DBX 35244 debugging information format. 35245 35246 -- Macro: ASM_STABN_OP 35247 A C string constant, including spacing, naming the assembler pseudo 35248 op to use instead of '"\t.stabn\t"' to define a debugging symbol 35249 with no name. If you don't define this macro, '"\t.stabn\t"' is 35250 used. This macro applies only to DBX debugging information format. 35251 35252 -- Macro: DBX_NO_XREFS 35253 Define this macro if DBX on your system does not support the 35254 construct 'xsTAGNAME'. On some systems, this construct is used to 35255 describe a forward reference to a structure named TAGNAME. On 35256 other systems, this construct is not supported at all. 35257 35258 -- Macro: DBX_CONTIN_LENGTH 35259 A symbol name in DBX-format debugging information is normally 35260 continued (split into two separate '.stabs' directives) when it 35261 exceeds a certain length (by default, 80 characters). On some 35262 operating systems, DBX requires this splitting; on others, 35263 splitting must not be done. You can inhibit splitting by defining 35264 this macro with the value zero. You can override the default 35265 splitting-length by defining this macro as an expression for the 35266 length you desire. 35267 35268 -- Macro: DBX_CONTIN_CHAR 35269 Normally continuation is indicated by adding a '\' character to the 35270 end of a '.stabs' string when a continuation follows. To use a 35271 different character instead, define this macro as a character 35272 constant for the character you want to use. Do not define this 35273 macro if backslash is correct for your system. 35274 35275 -- Macro: DBX_STATIC_STAB_DATA_SECTION 35276 Define this macro if it is necessary to go to the data section 35277 before outputting the '.stabs' pseudo-op for a non-global static 35278 variable. 35279 35280 -- Macro: DBX_TYPE_DECL_STABS_CODE 35281 The value to use in the "code" field of the '.stabs' directive for 35282 a typedef. The default is 'N_LSYM'. 35283 35284 -- Macro: DBX_STATIC_CONST_VAR_CODE 35285 The value to use in the "code" field of the '.stabs' directive for 35286 a static variable located in the text section. DBX format does not 35287 provide any "right" way to do this. The default is 'N_FUN'. 35288 35289 -- Macro: DBX_REGPARM_STABS_CODE 35290 The value to use in the "code" field of the '.stabs' directive for 35291 a parameter passed in registers. DBX format does not provide any 35292 "right" way to do this. The default is 'N_RSYM'. 35293 35294 -- Macro: DBX_REGPARM_STABS_LETTER 35295 The letter to use in DBX symbol data to identify a symbol as a 35296 parameter passed in registers. DBX format does not customarily 35297 provide any way to do this. The default is ''P''. 35298 35299 -- Macro: DBX_FUNCTION_FIRST 35300 Define this macro if the DBX information for a function and its 35301 arguments should precede the assembler code for the function. 35302 Normally, in DBX format, the debugging information entirely follows 35303 the assembler code. 35304 35305 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 35306 Define this macro, with value 1, if the value of a symbol 35307 describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be 35308 relative to the start of the enclosing function. Normally, GCC 35309 uses an absolute address. 35310 35311 -- Macro: DBX_LINES_FUNCTION_RELATIVE 35312 Define this macro, with value 1, if the value of a symbol 35313 indicating the current line number ('N_SLINE') should be relative 35314 to the start of the enclosing function. Normally, GCC uses an 35315 absolute address. 35316 35317 -- Macro: DBX_USE_BINCL 35318 Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL' 35319 stabs for included header files, as on Sun systems. This macro 35320 also directs GCC to output a type number as a pair of a file number 35321 and a type number within the file. Normally, GCC does not generate 35322 'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a 35323 type number. 35324 35325 35326 File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 35327 35328 17.22.3 Open-Ended Hooks for DBX Format 35329 --------------------------------------- 35330 35331 These are hooks for DBX format. 35332 35333 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 35334 A C statement to output DBX debugging information before code for 35335 line number LINE of the current source file to the stdio stream 35336 STREAM. COUNTER is the number of time the macro was invoked, 35337 including the current invocation; it is intended to generate unique 35338 labels in the assembly output. 35339 35340 This macro should not be defined if the default output is correct, 35341 or if it can be made correct by defining 35342 'DBX_LINES_FUNCTION_RELATIVE'. 35343 35344 -- Macro: NO_DBX_FUNCTION_END 35345 Some stabs encapsulation formats (in particular ECOFF), cannot 35346 handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 35347 extension construct. On those machines, define this macro to turn 35348 this feature off without disturbing the rest of the gdb extensions. 35349 35350 -- Macro: NO_DBX_BNSYM_ENSYM 35351 Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx 35352 extension construct. On those machines, define this macro to turn 35353 this feature off without disturbing the rest of the gdb extensions. 35354 35355 35356 File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 35357 35358 17.22.4 File Names in DBX Format 35359 -------------------------------- 35360 35361 This describes file names in DBX format. 35362 35363 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 35364 A C statement to output DBX debugging information to the stdio 35365 stream STREAM, which indicates that file NAME is the main source 35366 file--the file specified as the input file for compilation. This 35367 macro is called only once, at the beginning of compilation. 35368 35369 This macro need not be defined if the standard form of output for 35370 DBX debugging information is appropriate. 35371 35372 It may be necessary to refer to a label equal to the beginning of 35373 the text section. You can use 'assemble_name (stream, 35374 ltext_label_name)' to do so. If you do this, you must also set the 35375 variable USED_LTEXT_LABEL_NAME to 'true'. 35376 35377 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 35378 Define this macro, with value 1, if GCC should not emit an 35379 indication of the current directory for compilation and current 35380 source language at the beginning of the file. 35381 35382 -- Macro: NO_DBX_GCC_MARKER 35383 Define this macro, with value 1, if GCC should not emit an 35384 indication that this object file was compiled by GCC. The default 35385 is to emit an 'N_OPT' stab at the beginning of every source file, 35386 with 'gcc2_compiled.' for the string and value 0. 35387 35388 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 35389 A C statement to output DBX debugging information at the end of 35390 compilation of the main source file NAME. Output should be written 35391 to the stdio stream STREAM. 35392 35393 If you don't define this macro, nothing special is output at the 35394 end of compilation, which is correct for most machines. 35395 35396 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 35397 Define this macro _instead of_ defining 35398 'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 35399 the end of compilation is an 'N_SO' stab with an empty string, 35400 whose value is the highest absolute text address in the file. 35401 35402 35403 File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 35404 35405 17.22.5 Macros for SDB and DWARF Output 35406 --------------------------------------- 35407 35408 Here are macros for SDB and DWARF output. 35409 35410 -- Macro: SDB_DEBUGGING_INFO 35411 Define this macro if GCC should produce COFF-style debugging output 35412 for SDB in response to the '-g' option. 35413 35414 -- Macro: DWARF2_DEBUGGING_INFO 35415 Define this macro if GCC should produce dwarf version 2 format 35416 debugging output in response to the '-g' option. 35417 35418 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 35419 FUNCTION) 35420 Define this to enable the dwarf attribute 35421 'DW_AT_calling_convention' to be emitted for each function. 35422 Instead of an integer return the enum value for the 'DW_CC_' 35423 tag. 35424 35425 To support optional call frame debugging information, you must also 35426 define 'INCOMING_RETURN_ADDR_RTX' and either set 35427 'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 35428 prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as 35429 appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 35430 35431 -- Macro: DWARF2_FRAME_INFO 35432 Define this macro to a nonzero value if GCC should always output 35433 Dwarf 2 frame information. If 'TARGET_EXCEPT_UNWIND_INFO' (*note 35434 Exception Region Output::) returns 'UI_DWARF2', and exceptions are 35435 enabled, GCC will output this information not matter how you define 35436 'DWARF2_FRAME_INFO'. 35437 35438 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void) 35439 This hook defines the mechanism that will be used for describing 35440 frame unwind information to the debugger. Normally the hook will 35441 return 'UI_DWARF2' if DWARF 2 debug information is enabled, and 35442 return 'UI_NONE' otherwise. 35443 35444 A target may return 'UI_DWARF2' even when DWARF 2 debug information 35445 is disabled in order to always output DWARF 2 frame information. 35446 35447 A target may return 'UI_TARGET' if it has ABI specified unwind 35448 tables. This will suppress generation of the normal debug frame 35449 unwind information. 35450 35451 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 35452 Define this macro to be a nonzero value if the assembler can 35453 generate Dwarf 2 line debug info sections. This will result in 35454 much more compact line number tables, and hence is desirable if it 35455 works. 35456 35457 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS 35458 True if the '.debug_pubtypes' and '.debug_pubnames' sections should 35459 be emitted. These sections are not used on most platforms, and in 35460 particular GDB does not use them. 35461 35462 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR 35463 True if the 'DW_AT_comp_dir' attribute should be emitted for each 35464 compilation unit. This attribute is required for the darwin linker 35465 to emit debug information. 35466 35467 -- Target Hook: bool TARGET_DELAY_SCHED2 35468 True if sched2 is not to be run at its normal place. This usually 35469 means it will be run as part of machine-specific reorg. 35470 35471 -- Target Hook: bool TARGET_DELAY_VARTRACK 35472 True if vartrack is not to be run at its normal place. This 35473 usually means it will be run as part of machine-specific reorg. 35474 35475 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 35476 A C statement to issue assembly directives that create a difference 35477 LAB1 minus LAB2, using an integer of the given SIZE. 35478 35479 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2) 35480 A C statement to issue assembly directives that create a difference 35481 between the two given labels in system defined units, e.g. 35482 instruction slots on IA64 VMS, using an integer of the given size. 35483 35484 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 35485 A C statement to issue assembly directives that create a 35486 section-relative reference to the given LABEL, using an integer of 35487 the given SIZE. The label is known to be defined in the given 35488 SECTION. 35489 35490 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 35491 A C statement to issue assembly directives that create a 35492 self-relative reference to the given LABEL, using an integer of the 35493 given SIZE. 35494 35495 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 35496 A C statement to issue assembly directives that create a reference 35497 to the DWARF table identifier LABEL from the current section. This 35498 is used on some systems to avoid garbage collecting a DWARF table 35499 which is referenced by a function. 35500 35501 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 35502 SIZE, rtx X) 35503 If defined, this target hook is a function which outputs a 35504 DTP-relative reference to the given TLS symbol of the specified 35505 size. 35506 35507 -- Macro: PUT_SDB_ ... 35508 Define these macros to override the assembler syntax for the 35509 special SDB assembler directives. See 'sdbout.c' for a list of 35510 these macros and their arguments. If the standard syntax is used, 35511 you need not define them yourself. 35512 35513 -- Macro: SDB_DELIM 35514 Some assemblers do not support a semicolon as a delimiter, even 35515 between SDB assembler directives. In that case, define this macro 35516 to be the delimiter to use (usually '\n'). It is not necessary to 35517 define a new set of 'PUT_SDB_OP' macros if this is the only change 35518 required. 35519 35520 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 35521 Define this macro to allow references to unknown structure, union, 35522 or enumeration tags to be emitted. Standard COFF does not allow 35523 handling of unknown references, MIPS ECOFF has support for it. 35524 35525 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 35526 Define this macro to allow references to structure, union, or 35527 enumeration tags that have not yet been seen to be handled. Some 35528 assemblers choke if forward tags are used, while some require it. 35529 35530 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 35531 A C statement to output SDB debugging information before code for 35532 line number LINE of the current source file to the stdio stream 35533 STREAM. The default is to emit an '.ln' directive. 35534 35535 35536 File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 35537 35538 17.22.6 Macros for VMS Debug Format 35539 ----------------------------------- 35540 35541 Here are macros for VMS debug format. 35542 35543 -- Macro: VMS_DEBUGGING_INFO 35544 Define this macro if GCC should produce debugging output for VMS in 35545 response to the '-g' option. The default behavior for VMS is to 35546 generate minimal debug info for a traceback in the absence of '-g' 35547 unless explicitly overridden with '-g0'. This behavior is 35548 controlled by 'TARGET_OPTION_OPTIMIZATION' and 35549 'TARGET_OPTION_OVERRIDE'. 35550 35551 35552 File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 35553 35554 17.23 Cross Compilation and Floating Point 35555 ========================================== 35556 35557 While all modern machines use twos-complement representation for 35558 integers, there are a variety of representations for floating point 35559 numbers. This means that in a cross-compiler the representation of 35560 floating point numbers in the compiled program may be different from 35561 that used in the machine doing the compilation. 35562 35563 Because different representation systems may offer different amounts of 35564 range and precision, all floating point constants must be represented in 35565 the target machine's format. Therefore, the cross compiler cannot 35566 safely use the host machine's floating point arithmetic; it must emulate 35567 the target's arithmetic. To ensure consistency, GCC always uses 35568 emulation to work with floating point values, even when the host and 35569 target floating point formats are identical. 35570 35571 The following macros are provided by 'real.h' for the compiler to use. 35572 All parts of the compiler which generate or optimize floating-point 35573 calculations must use these macros. They may evaluate their operands 35574 more than once, so operands must not have side effects. 35575 35576 -- Macro: REAL_VALUE_TYPE 35577 The C data type to be used to hold a floating point value in the 35578 target machine's format. Typically this is a 'struct' containing 35579 an array of 'HOST_WIDE_INT', but all code should treat it as an 35580 opaque quantity. 35581 35582 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35583 Compares for equality the two values, X and Y. If the target 35584 floating point format supports negative zeroes and/or NaNs, 35585 'REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and 'REAL_VALUES_EQUAL 35586 (NaN, NaN)' is false. 35587 35588 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35589 Tests whether X is less than Y. 35590 35591 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 35592 Truncates X to a signed integer, rounding toward zero. 35593 35594 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 35595 (REAL_VALUE_TYPE X) 35596 Truncates X to an unsigned integer, rounding toward zero. If X is 35597 negative, returns zero. 35598 35599 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum 35600 machine_mode MODE) 35601 Converts STRING into a floating point number in the target 35602 machine's representation for mode MODE. This routine can handle 35603 both decimal and hexadecimal floating point constants, using the 35604 syntax defined by the C language for both. 35605 35606 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 35607 Returns 1 if X is negative (including negative zero), 0 otherwise. 35608 35609 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 35610 Determines whether X represents infinity (positive or negative). 35611 35612 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 35613 Determines whether X represents a "NaN" (not-a-number). 35614 35615 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code 35616 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35617 Calculates an arithmetic operation on the two floating point values 35618 X and Y, storing the result in OUTPUT (which must be a variable). 35619 35620 The operation to be performed is specified by CODE. Only the 35621 following codes are supported: 'PLUS_EXPR', 'MINUS_EXPR', 35622 'MULT_EXPR', 'RDIV_EXPR', 'MAX_EXPR', 'MIN_EXPR'. 35623 35624 If 'REAL_ARITHMETIC' is asked to evaluate division by zero and the 35625 target's floating point format cannot represent infinity, it will 35626 call 'abort'. Callers should check for this situation first, using 35627 'MODE_HAS_INFINITIES'. *Note Storage Layout::. 35628 35629 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 35630 Returns the negative of the floating point value X. 35631 35632 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 35633 Returns the absolute value of X. 35634 35635 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT 35636 HIGH, REAL_VALUE_TYPE X) 35637 Converts a floating point value X into a double-precision integer 35638 which is then stored into LOW and HIGH. If the value is not 35639 integral, it is truncated. 35640 35641 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT 35642 LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE) 35643 Converts a double-precision integer found in LOW and HIGH, into a 35644 floating point value which is then stored into X. The value is 35645 truncated to fit in mode MODE. 35646 35647 35648 File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 35649 35650 17.24 Mode Switching Instructions 35651 ================================= 35652 35653 The following macros control mode switching optimizations: 35654 35655 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 35656 Define this macro if the port needs extra instructions inserted for 35657 mode switching in an optimizing compilation. 35658 35659 For an example, the SH4 can perform both single and double 35660 precision floating point operations, but to perform a single 35661 precision operation, the FPSCR PR bit has to be cleared, while for 35662 a double precision operation, this bit has to be set. Changing the 35663 PR bit requires a general purpose register as a scratch register, 35664 hence these FPSCR sets have to be inserted before reload, i.e. you 35665 can't put this into instruction emitting or 35666 'TARGET_MACHINE_DEPENDENT_REORG'. 35667 35668 You can have multiple entities that are mode-switched, and select 35669 at run time which entities actually need it. 35670 'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that 35671 needs mode-switching. If you define this macro, you also have to 35672 define 'NUM_MODES_FOR_MODE_SWITCHING', 'MODE_NEEDED', 35673 'MODE_PRIORITY_TO_MODE' and 'EMIT_MODE_SET'. 'MODE_AFTER', 35674 'MODE_ENTRY', and 'MODE_EXIT' are optional. 35675 35676 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 35677 If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as 35678 initializer for an array of integers. Each initializer element N 35679 refers to an entity that needs mode switching, and specifies the 35680 number of different modes that might need to be set for this 35681 entity. The position of the initializer in the 35682 initializer--starting counting at zero--determines the integer that 35683 is used to refer to the mode-switched entity in question. In 35684 macros that take mode arguments / yield a mode result, modes are 35685 represented as numbers 0 ... N - 1. N is used to specify that no 35686 mode switch is needed / supplied. 35687 35688 -- Macro: MODE_NEEDED (ENTITY, INSN) 35689 ENTITY is an integer specifying a mode-switched entity. If 35690 'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 35691 return an integer value not larger than the corresponding element 35692 in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 35693 must be switched into prior to the execution of INSN. 35694 35695 -- Macro: MODE_AFTER (ENTITY, MODE, INSN) 35696 ENTITY is an integer specifying a mode-switched entity. If this 35697 macro is defined, it is evaluated for every INSN during mode 35698 switching. It determines the mode that an insn results in (if 35699 different from the incoming mode). 35700 35701 -- Macro: MODE_ENTRY (ENTITY) 35702 If this macro is defined, it is evaluated for every ENTITY that 35703 needs mode switching. It should evaluate to an integer, which is a 35704 mode that ENTITY is assumed to be switched to at function entry. 35705 If 'MODE_ENTRY' is defined then 'MODE_EXIT' must be defined. 35706 35707 -- Macro: MODE_EXIT (ENTITY) 35708 If this macro is defined, it is evaluated for every ENTITY that 35709 needs mode switching. It should evaluate to an integer, which is a 35710 mode that ENTITY is assumed to be switched to at function exit. If 35711 'MODE_EXIT' is defined then 'MODE_ENTRY' must be defined. 35712 35713 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N) 35714 This macro specifies the order in which modes for ENTITY are 35715 processed. 0 is the highest priority, 35716 'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 35717 of the macro should be an integer designating a mode for ENTITY. 35718 For any fixed ENTITY, 'mode_priority_to_mode' (ENTITY, N) shall be 35719 a bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'. 35720 35721 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE) 35722 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE is 35723 the set of hard registers live at the point where the insn(s) are 35724 to be inserted. 35725 35726 35727 File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 35728 35729 17.25 Defining target-specific uses of '__attribute__' 35730 ====================================================== 35731 35732 Target-specific attributes may be defined for functions, data and types. 35733 These are described using the following target hooks; they also need to 35734 be documented in 'extend.texi'. 35735 35736 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 35737 If defined, this target hook points to an array of 'struct 35738 attribute_spec' (defined in 'tree.h') specifying the machine 35739 specific attributes for this target and some of the restrictions on 35740 the entities to which these attributes are applied and the 35741 arguments they take. 35742 35743 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree 35744 NAME) 35745 If defined, this target hook is a function which returns true if 35746 the machine-specific attribute named NAME expects an identifier 35747 given as its first argument to be passed on as a plain identifier, 35748 not subjected to name lookup. If this is not defined, the default 35749 is false for all machine-specific attributes. 35750 35751 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 35752 const_tree TYPE2) 35753 If defined, this target hook is a function which returns zero if 35754 the attributes on TYPE1 and TYPE2 are incompatible, one if they are 35755 compatible, and two if they are nearly compatible (which causes a 35756 warning to be generated). If this is not defined, machine-specific 35757 attributes are supposed always to be compatible. 35758 35759 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 35760 If defined, this target hook is a function which assigns default 35761 attributes to the newly defined TYPE. 35762 35763 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 35764 TYPE2) 35765 Define this target hook if the merging of type attributes needs 35766 special handling. If defined, the result is a list of the combined 35767 'TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 35768 'comptypes' has already been called and returned 1. This function 35769 may call 'merge_attributes' to handle machine-independent merging. 35770 35771 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 35772 NEWDECL) 35773 Define this target hook if the merging of decl attributes needs 35774 special handling. If defined, the result is a list of the combined 35775 'DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 35776 declaration of OLDDECL. Examples of when this is needed are when 35777 one attribute overrides another, or when an attribute is nullified 35778 by a subsequent definition. This function may call 35779 'merge_attributes' to handle machine-independent merging. 35780 35781 If the only target-specific handling you require is 'dllimport' for 35782 Microsoft Windows targets, you should define the macro 35783 'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'. The compiler will then 35784 define a function called 'merge_dllimport_decl_attributes' which 35785 can then be defined as the expansion of 35786 'TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 35787 'handle_dll_attribute' in the attribute table for your port to 35788 perform initial processing of the 'dllimport' and 'dllexport' 35789 attributes. This is done in 'i386/cygwin.h' and 'i386/i386.c', for 35790 example. 35791 35792 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 35793 DECL) 35794 DECL is a variable or function with '__attribute__((dllimport))' 35795 specified. Use this hook if the target needs to add extra 35796 validation checks to 'handle_dll_attribute'. 35797 35798 -- Macro: TARGET_DECLSPEC 35799 Define this macro to a nonzero value if you want to treat 35800 '__declspec(X)' as equivalent to '__attribute((X))'. By default, 35801 this behavior is enabled only for targets that define 35802 'TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 35803 '__declspec' is via a built-in macro, but you should not rely on 35804 this implementation detail. 35805 35806 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 35807 *ATTR_PTR) 35808 Define this target hook if you want to be able to add attributes to 35809 a decl when it is being created. This is normally useful for back 35810 ends which wish to implement a pragma by using the attributes which 35811 correspond to the pragma's effect. The NODE argument is the decl 35812 which is being created. The ATTR_PTR argument is a pointer to the 35813 attribute list for this decl. The list itself should not be 35814 modified, since it may be shared with other decls, but attributes 35815 may be chained on the head of the list and '*ATTR_PTR' modified to 35816 point to the new attributes, or a copy of the list may be made if 35817 further changes are needed. 35818 35819 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 35820 FNDECL) 35821 This target hook returns 'true' if it is ok to inline FNDECL into 35822 the current function, despite its having target-specific 35823 attributes, 'false' otherwise. By default, if a function has a 35824 target specific attribute attached to it, it will not be inlined. 35825 35826 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree 35827 NAME, tree ARGS, int FLAGS) 35828 This hook is called to parse 'attribute(target("..."))', which 35829 allows setting target-specific options on individual functions. 35830 These function-specific options may differ from the options 35831 specified on the command line. The hook should return 'true' if 35832 the options are valid. 35833 35834 The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in 35835 the function declaration to hold a pointer to a target-specific 35836 'struct cl_target_option' structure. 35837 35838 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR) 35839 This hook is called to save any additional target-specific 35840 information in the 'struct cl_target_option' structure for 35841 function-specific options. *Note Option file format::. 35842 35843 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option 35844 *PTR) 35845 This hook is called to restore any additional target-specific 35846 information in the 'struct cl_target_option' structure for 35847 function-specific options. 35848 35849 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 35850 struct cl_target_option *PTR) 35851 This hook is called to print any additional target-specific 35852 information in the 'struct cl_target_option' structure for 35853 function-specific options. 35854 35855 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree 35856 POP_TARGET) 35857 This target hook parses the options for '#pragma GCC target', which 35858 sets the target-specific options for functions that occur later in 35859 the input stream. The options accepted should be the same as those 35860 handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook. 35861 35862 -- Target Hook: void TARGET_OPTION_OVERRIDE (void) 35863 Sometimes certain combinations of command options do not make sense 35864 on a particular target machine. You can override the hook 35865 'TARGET_OPTION_OVERRIDE' to take account of this. This hooks is 35866 called once just after all the command options have been parsed. 35867 35868 Don't use this hook to turn on various extra optimizations for 35869 '-O'. That is what 'TARGET_OPTION_OPTIMIZATION' is for. 35870 35871 If you need to do something whenever the optimization level is 35872 changed via the optimize attribute or pragma, see 35873 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 35874 35875 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree 35876 DECL2) 35877 This target hook returns 'true' if DECL1 and DECL2 are versions of 35878 the same function. DECL1 and DECL2 are function versions if and 35879 only if they have the same function signature and different target 35880 specific attributes, that is, they are compiled for different 35881 target machines. 35882 35883 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 35884 This target hook returns 'false' if the CALLER function cannot 35885 inline CALLEE, based on target specific information. By default, 35886 inlining is not allowed if the callee function has function 35887 specific target options and the caller does not use the same 35888 options. 35889 35890 35891 File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 35892 35893 17.26 Emulating TLS 35894 =================== 35895 35896 For targets whose psABI does not provide Thread Local Storage via 35897 specific relocations and instruction sequences, an emulation layer is 35898 used. A set of target hooks allows this emulation layer to be 35899 configured for the requirements of a particular target. For instance 35900 the psABI may in fact specify TLS support in terms of an emulation 35901 layer. 35902 35903 The emulation layer works by creating a control object for every TLS 35904 object. To access the TLS object, a lookup function is provided which, 35905 when given the address of the control object, will return the address of 35906 the current thread's instance of the TLS object. 35907 35908 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 35909 Contains the name of the helper function that uses a TLS control 35910 object to locate a TLS instance. The default causes libgcc's 35911 emulated TLS helper function to be used. 35912 35913 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 35914 Contains the name of the helper function that should be used at 35915 program startup to register TLS objects that are implicitly 35916 initialized to zero. If this is 'NULL', all TLS objects will have 35917 explicit initializers. The default causes libgcc's emulated TLS 35918 registration function to be used. 35919 35920 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 35921 Contains the name of the section in which TLS control variables 35922 should be placed. The default of 'NULL' allows these to be placed 35923 in any section. 35924 35925 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 35926 Contains the name of the section in which TLS initializers should 35927 be placed. The default of 'NULL' allows these to be placed in any 35928 section. 35929 35930 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 35931 Contains the prefix to be prepended to TLS control variable names. 35932 The default of 'NULL' uses a target-specific prefix. 35933 35934 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 35935 Contains the prefix to be prepended to TLS initializer objects. 35936 The default of 'NULL' uses a target-specific prefix. 35937 35938 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 35939 Specifies a function that generates the FIELD_DECLs for a TLS 35940 control object type. TYPE is the RECORD_TYPE the fields are for 35941 and NAME should be filled with the structure tag, if the default of 35942 '__emutls_object' is unsuitable. The default creates a type 35943 suitable for libgcc's emulated TLS function. 35944 35945 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 35946 TMPL_ADDR) 35947 Specifies a function that generates the CONSTRUCTOR to initialize a 35948 TLS control object. VAR is the TLS control object, DECL is the TLS 35949 object and TMPL_ADDR is the address of the initializer. The 35950 default initializes libgcc's emulated TLS control object. 35951 35952 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 35953 Specifies whether the alignment of TLS control variable objects is 35954 fixed and should not be increased as some backends may do to 35955 optimize single objects. The default is false. 35956 35957 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 35958 Specifies whether a DWARF 'DW_OP_form_tls_address' location 35959 descriptor may be used to describe emulated TLS control objects. 35960 35961 35962 File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 35963 35964 17.27 Defining coprocessor specifics for MIPS targets. 35965 ====================================================== 35966 35967 The MIPS specification allows MIPS implementations to have as many as 4 35968 coprocessors, each with as many as 32 private registers. GCC supports 35969 accessing these registers and transferring values between the registers 35970 and memory using asm-ized variables. For example: 35971 35972 register unsigned int cp0count asm ("c0r1"); 35973 unsigned int d; 35974 35975 d = cp0count + 3; 35976 35977 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 35978 names may be added as described below, or the default names may be 35979 overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 35980 35981 Coprocessor registers are assumed to be epilogue-used; sets to them 35982 will be preserved even if it does not appear that the register is used 35983 again later in the function. 35984 35985 Another note: according to the MIPS spec, coprocessor 1 (if present) is 35986 the FPU. One accesses COP1 registers through standard mips 35987 floating-point support; they are not included in this mechanism. 35988 35989 There is one macro used in defining the MIPS coprocessor interface 35990 which you may want to override in subtargets; it is described below. 35991 35992 35993 File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 35994 35995 17.28 Parameters for Precompiled Header Validity Checking 35996 ========================================================= 35997 35998 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 35999 This hook returns a pointer to the data needed by 36000 'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in 36001 bytes. 36002 36003 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 36004 size_t SZ) 36005 This hook checks whether the options used to create a PCH file are 36006 compatible with the current settings. It returns 'NULL' if so and 36007 a suitable error message if not. Error messages will be presented 36008 to the user and must be localized using '_(MSG)'. 36009 36010 DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY' 36011 when the PCH file was created and SZ is the size of that data in 36012 bytes. It's safe to assume that the data was created by the same 36013 version of the compiler, so no format checking is needed. 36014 36015 The default definition of 'default_pch_valid_p' should be suitable 36016 for most targets. 36017 36018 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 36019 PCH_FLAGS) 36020 If this hook is nonnull, the default implementation of 36021 'TARGET_PCH_VALID_P' will use it to check for compatible values of 36022 'target_flags'. PCH_FLAGS specifies the value that 'target_flags' 36023 had when the PCH file was created. The return value is the same as 36024 for 'TARGET_PCH_VALID_P'. 36025 36026 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void) 36027 Called before writing out a PCH file. If the target has some 36028 garbage-collected data that needs to be in a particular state on 36029 PCH loads, it can use this hook to enforce that state. Very few 36030 targets need to do anything here. 36031 36032 36033 File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros 36034 36035 17.29 C++ ABI parameters 36036 ======================== 36037 36038 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 36039 Define this hook to override the integer type used for guard 36040 variables. These are used to implement one-time construction of 36041 static objects. The default is long_long_integer_type_node. 36042 36043 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 36044 This hook determines how guard variables are used. It should 36045 return 'false' (the default) if the first byte should be used. A 36046 return value of 'true' indicates that only the least significant 36047 bit should be used. 36048 36049 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 36050 This hook returns the size of the cookie to use when allocating an 36051 array whose elements have the indicated TYPE. Assumes that it is 36052 already known that a cookie is needed. The default is 'max(sizeof 36053 (size_t), alignof(type))', as defined in section 2.7 of the 36054 IA64/Generic C++ ABI. 36055 36056 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 36057 This hook should return 'true' if the element size should be stored 36058 in array cookies. The default is to return 'false'. 36059 36060 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 36061 IMPORT_EXPORT) 36062 If defined by a backend this hook allows the decision made to 36063 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 36064 contain 1 if the class is going to be exported, -1 if it is going 36065 to be imported and 0 otherwise. This function should return the 36066 modified value and perform any other actions necessary to support 36067 the backend's targeted operating system. 36068 36069 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 36070 This hook should return 'true' if constructors and destructors 36071 return the address of the object created/destroyed. The default is 36072 to return 'false'. 36073 36074 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 36075 This hook returns true if the key method for a class (i.e., the 36076 method which, if defined in the current translation unit, causes 36077 the virtual table to be emitted) may be an inline function. Under 36078 the standard Itanium C++ ABI the key method may be an inline 36079 function so long as the function is not declared inline in the 36080 class definition. Under some variants of the ABI, an inline 36081 function can never be the key method. The default is to return 36082 'true'. 36083 36084 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 36085 DECL) 36086 DECL is a virtual table, virtual table table, typeinfo object, or 36087 other similar implicit class data object that will be emitted with 36088 external linkage in this translation unit. No ELF visibility has 36089 been explicitly specified. If the target needs to specify a 36090 visibility other than that of the containing class, use this hook 36091 to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'. 36092 36093 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 36094 This hook returns true (the default) if virtual tables and other 36095 similar implicit class data objects are always COMDAT if they have 36096 external linkage. If this hook returns false, then class data for 36097 classes whose virtual table will be emitted in only one translation 36098 unit will not be COMDAT. 36099 36100 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 36101 This hook returns true (the default) if the RTTI information for 36102 the basic types which is defined in the C++ runtime should always 36103 be COMDAT, false if it should not be COMDAT. 36104 36105 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 36106 This hook returns true if '__aeabi_atexit' (as defined by the ARM 36107 EABI) should be used to register static destructors when 36108 '-fuse-cxa-atexit' is in effect. The default is to return false to 36109 use '__cxa_atexit'. 36110 36111 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 36112 This hook returns true if the target 'atexit' function can be used 36113 in the same manner as '__cxa_atexit' to register C++ static 36114 destructors. This requires that 'atexit'-registered functions in 36115 shared libraries are run in the correct order when the libraries 36116 are unloaded. The default is to return false. 36117 36118 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 36119 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just 36120 been defined. Use this hook to make adjustments to the class (eg, 36121 tweak visibility or perform any other required target 36122 modifications). 36123 36124 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL) 36125 Return target-specific mangling context of DECL or 'NULL_TREE'. 36126 36127 36128 File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros 36129 36130 17.30 Adding support for named address spaces 36131 ============================================= 36132 36133 The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 36134 committee, 'Programming Languages - C - Extensions to support embedded 36135 processors', specifies a syntax for embedded processors to specify 36136 alternate address spaces. You can configure a GCC port to support 36137 section 5.1 of the draft report to add support for address spaces other 36138 than the default address space. These address spaces are new keywords 36139 that are similar to the 'volatile' and 'const' type attributes. 36140 36141 Pointers to named address spaces can have a different size than 36142 pointers to the generic address space. 36143 36144 For example, the SPU port uses the '__ea' address space to refer to 36145 memory in the host processor, rather than memory local to the SPU 36146 processor. Access to memory in the '__ea' address space involves 36147 issuing DMA operations to move data between the host processor and the 36148 local processor memory address space. Pointers in the '__ea' address 36149 space are either 32 bits or 64 bits based on the '-mea32' or '-mea64' 36150 switches (native SPU pointers are always 32 bits). 36151 36152 Internally, address spaces are represented as a small integer in the 36153 range 0 to 15 with address space 0 being reserved for the generic 36154 address space. 36155 36156 To register a named address space qualifier keyword with the C front 36157 end, the target may call the 'c_register_addr_space' routine. For 36158 example, the SPU port uses the following to declare '__ea' as the 36159 keyword for named address space #1: 36160 #define ADDR_SPACE_EA 1 36161 c_register_addr_space ("__ea", ADDR_SPACE_EA); 36162 36163 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE 36164 (addr_space_t ADDRESS_SPACE) 36165 Define this to return the machine mode to use for pointers to 36166 ADDRESS_SPACE if the target supports named address spaces. The 36167 default version of this hook returns 'ptr_mode' for the generic 36168 address space only. 36169 36170 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE 36171 (addr_space_t ADDRESS_SPACE) 36172 Define this to return the machine mode to use for addresses in 36173 ADDRESS_SPACE if the target supports named address spaces. The 36174 default version of this hook returns 'Pmode' for the generic 36175 address space only. 36176 36177 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum 36178 machine_mode MODE, addr_space_t AS) 36179 Define this to return nonzero if the port can handle pointers with 36180 machine mode MODE to address space AS. This target hook is the 36181 same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it 36182 includes explicit named address space support. The default version 36183 of this hook returns true for the modes returned by either the 36184 'TARGET_ADDR_SPACE_POINTER_MODE' or 36185 'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address 36186 space. 36187 36188 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum 36189 machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 36190 Define this to return true if EXP is a valid address for mode MODE 36191 in the named address space AS. The STRICT parameter says whether 36192 strict addressing is in effect after reload has finished. This 36193 target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target 36194 hook, except that it includes explicit named address space support. 36195 36196 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 36197 OLDX, enum machine_mode MODE, addr_space_t AS) 36198 Define this to modify an invalid address X to be a valid address 36199 with mode MODE in the named address space AS. This target hook is 36200 the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except 36201 that it includes explicit named address space support. 36202 36203 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET, 36204 addr_space_t SUPERSET) 36205 Define this to return whether the SUBSET named address space is 36206 contained within the SUPERSET named address space. Pointers to a 36207 named address space that is a subset of another named address space 36208 will be converted automatically without a cast if used together in 36209 arithmetic operations. Pointers to a superset address space can be 36210 converted to pointers to a subset address space via explicit casts. 36211 36212 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 36213 tree TO_TYPE) 36214 Define this to convert the pointer expression represented by the 36215 RTL OP with type FROM_TYPE that points to a named address space to 36216 a new pointer expression with type TO_TYPE that points to a 36217 different named address space. When this hook it called, it is 36218 guaranteed that one of the two address spaces is a subset of the 36219 other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target 36220 hook. 36221 36222 36223 File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 36224 36225 17.31 Miscellaneous Parameters 36226 ============================== 36227 36228 Here are several miscellaneous parameters. 36229 36230 -- Macro: HAS_LONG_COND_BRANCH 36231 Define this boolean macro to indicate whether or not your 36232 architecture has conditional branches that can span all of memory. 36233 It is used in conjunction with an optimization that partitions hot 36234 and cold basic blocks into separate sections of the executable. If 36235 this macro is set to false, gcc will convert any conditional 36236 branches that attempt to cross between sections into unconditional 36237 branches or indirect jumps. 36238 36239 -- Macro: HAS_LONG_UNCOND_BRANCH 36240 Define this boolean macro to indicate whether or not your 36241 architecture has unconditional branches that can span all of 36242 memory. It is used in conjunction with an optimization that 36243 partitions hot and cold basic blocks into separate sections of the 36244 executable. If this macro is set to false, gcc will convert any 36245 unconditional branches that attempt to cross between sections into 36246 indirect jumps. 36247 36248 -- Macro: CASE_VECTOR_MODE 36249 An alias for a machine mode name. This is the machine mode that 36250 elements of a jump-table should have. 36251 36252 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 36253 Optional: return the preferred mode for an 'addr_diff_vec' when the 36254 minimum and maximum offset are known. If you define this, it 36255 enables extra code in branch shortening to deal with 36256 'addr_diff_vec'. To make this work, you also have to define 36257 'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit. 36258 The BODY argument is provided so that the offset_unsigned and scale 36259 flags can be updated. 36260 36261 -- Macro: CASE_VECTOR_PC_RELATIVE 36262 Define this macro to be a C expression to indicate when jump-tables 36263 should contain relative addresses. You need not define this macro 36264 if jump-tables never contain relative addresses, or jump-tables 36265 should contain relative addresses only when '-fPIC' or '-fPIC' is 36266 in effect. 36267 36268 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 36269 This function return the smallest number of different values for 36270 which it is best to use a jump-table instead of a tree of 36271 conditional branches. The default is four for machines with a 36272 'casesi' instruction and five otherwise. This is best for most 36273 machines. 36274 36275 -- Macro: WORD_REGISTER_OPERATIONS 36276 Define this macro if operations between registers with integral 36277 mode smaller than a word are always performed on the entire 36278 register. Most RISC machines have this property and most CISC 36279 machines do not. 36280 36281 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 36282 Define this macro to be a C expression indicating when insns that 36283 read memory in MEM_MODE, an integral mode narrower than a word, set 36284 the bits outside of MEM_MODE to be either the sign-extension or the 36285 zero-extension of the data read. Return 'SIGN_EXTEND' for values 36286 of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for 36287 which it zero-extends, and 'UNKNOWN' for other modes. 36288 36289 This macro is not called with MEM_MODE non-integral or with a width 36290 greater than or equal to 'BITS_PER_WORD', so you may return any 36291 value in this case. Do not define this macro if it would always 36292 return 'UNKNOWN'. On machines where this macro is defined, you 36293 will normally define it as the constant 'SIGN_EXTEND' or 36294 'ZERO_EXTEND'. 36295 36296 You may return a non-'UNKNOWN' value even if for some hard 36297 registers the sign extension is not performed, if for the 36298 'REGNO_REG_CLASS' of these hard registers 36299 'CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 36300 MEM_MODE and the TO mode is any integral mode larger than this but 36301 not larger than 'word_mode'. 36302 36303 You must return 'UNKNOWN' if for some hard registers that allow 36304 this mode, 'CANNOT_CHANGE_MODE_CLASS' says that they cannot change 36305 to 'word_mode', but that they can change to another integral mode 36306 that is larger then MEM_MODE but still smaller than 'word_mode'. 36307 36308 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 36309 Define this macro if loading short immediate values into registers 36310 sign extends. 36311 36312 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum 36313 machine_mode MODE) 36314 When '-ffast-math' is in effect, GCC tries to optimize divisions by 36315 the same divisor, by turning them into multiplications by the 36316 reciprocal. This target hook specifies the minimum number of 36317 divisions that should be there for GCC to perform the optimization 36318 for a variable of mode MODE. The default implementation returns 3 36319 if the machine has an instruction for the division, and 2 if it 36320 does not. 36321 36322 -- Macro: MOVE_MAX 36323 The maximum number of bytes that a single instruction can move 36324 quickly between memory and registers or between two memory 36325 locations. 36326 36327 -- Macro: MAX_MOVE_MAX 36328 The maximum number of bytes that a single instruction can move 36329 quickly between memory and registers or between two memory 36330 locations. If this is undefined, the default is 'MOVE_MAX'. 36331 Otherwise, it is the constant value that is the largest value that 36332 'MOVE_MAX' can have at run-time. 36333 36334 -- Macro: SHIFT_COUNT_TRUNCATED 36335 A C expression that is nonzero if on this machine the number of 36336 bits actually used for the count of a shift operation is equal to 36337 the number of bits needed to represent the size of the object being 36338 shifted. When this macro is nonzero, the compiler will assume that 36339 it is safe to omit a sign-extend, zero-extend, and certain bitwise 36340 'and' instructions that truncates the count of a shift operation. 36341 On machines that have instructions that act on bit-fields at 36342 variable positions, which may include 'bit test' instructions, a 36343 nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of 36344 truncations of the values that serve as arguments to bit-field 36345 instructions. 36346 36347 If both types of instructions truncate the count (for shifts) and 36348 position (for bit-field operations), or if no variable-position 36349 bit-field instructions exist, you should define this macro. 36350 36351 However, on some machines, such as the 80386 and the 680x0, 36352 truncation only applies to shift operations and not the (real or 36353 pretended) bit-field operations. Define 'SHIFT_COUNT_TRUNCATED' to 36354 be zero on such machines. Instead, add patterns to the 'md' file 36355 that include the implied truncation of the shift instructions. 36356 36357 You need not define this macro if it would always have the value of 36358 zero. 36359 36360 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 36361 (enum machine_mode MODE) 36362 This function describes how the standard shift patterns for MODE 36363 deal with shifts by negative amounts or by more than the width of 36364 the mode. *Note shift patterns::. 36365 36366 On many machines, the shift patterns will apply a mask M to the 36367 shift count, meaning that a fixed-width shift of X by Y is 36368 equivalent to an arbitrary-width shift of X by Y & M. If this is 36369 true for mode MODE, the function should return M, otherwise it 36370 should return 0. A return value of 0 indicates that no particular 36371 behavior is guaranteed. 36372 36373 Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_ 36374 apply to general shift rtxes; it applies only to instructions that 36375 are generated by the named shift patterns. 36376 36377 The default implementation of this function returns 36378 'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0 36379 otherwise. This definition is always safe, but if 36380 'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 36381 nevertheless truncate the shift count, you may get better code by 36382 overriding it. 36383 36384 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 36385 A C expression which is nonzero if on this machine it is safe to 36386 "convert" an integer of INPREC bits to one of OUTPREC bits (where 36387 OUTPREC is smaller than INPREC) by merely operating on it as if it 36388 had only OUTPREC bits. 36389 36390 On many machines, this expression can be 1. 36391 36392 When 'TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 36393 modes for which 'MODES_TIEABLE_P' is 0, suboptimal code can result. 36394 If this is the case, making 'TRULY_NOOP_TRUNCATION' return 0 in 36395 such cases may improve things. 36396 36397 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE, 36398 enum machine_mode REP_MODE) 36399 The representation of an integral mode can be such that the values 36400 are always extended to a wider integral mode. Return 'SIGN_EXTEND' 36401 if values of MODE are represented in sign-extended form to 36402 REP_MODE. Return 'UNKNOWN' otherwise. (Currently, none of the 36403 targets use zero-extended representation this way so unlike 36404 'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return 36405 either 'SIGN_EXTEND' or 'UNKNOWN'. Also no target extends MODE to 36406 REP_MODE so that REP_MODE is not the next widest integral mode and 36407 currently we take advantage of this fact.) 36408 36409 Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value 36410 even if the extension is not performed on certain hard registers as 36411 long as for the 'REGNO_REG_CLASS' of these hard registers 36412 'CANNOT_CHANGE_MODE_CLASS' returns nonzero. 36413 36414 Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe 36415 two related properties. If you define 'TARGET_MODE_REP_EXTENDED 36416 (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP 36417 (mode)' to return the same type of extension. 36418 36419 In order to enforce the representation of 'mode', 36420 'TRULY_NOOP_TRUNCATION' should return false when truncating to 36421 'mode'. 36422 36423 -- Macro: STORE_FLAG_VALUE 36424 A C expression describing the value returned by a comparison 36425 operator with an integral mode and stored by a store-flag 36426 instruction ('cstoreMODE4') when the condition is true. This 36427 description must apply to _all_ the 'cstoreMODE4' patterns and all 36428 the comparison operators whose results have a 'MODE_INT' mode. 36429 36430 A value of 1 or -1 means that the instruction implementing the 36431 comparison operator returns exactly 1 or -1 when the comparison is 36432 true and 0 when the comparison is false. Otherwise, the value 36433 indicates which bits of the result are guaranteed to be 1 when the 36434 comparison is true. This value is interpreted in the mode of the 36435 comparison operation, which is given by the mode of the first 36436 operand in the 'cstoreMODE4' pattern. Either the low bit or the 36437 sign bit of 'STORE_FLAG_VALUE' be on. Presently, only those bits 36438 are used by the compiler. 36439 36440 If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 36441 generate code that depends only on the specified bits. It can also 36442 replace comparison operators with equivalent operations if they 36443 cause the required bits to be set, even if the remaining bits are 36444 undefined. For example, on a machine whose comparison operators 36445 return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as 36446 '0x80000000', saying that just the sign bit is relevant, the 36447 expression 36448 36449 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 36450 36451 can be converted to 36452 36453 (ashift:SI X (const_int N)) 36454 36455 where N is the appropriate shift count to move the bit being tested 36456 into the sign bit. 36457 36458 There is no way to describe a machine that always sets the 36459 low-order bit for a true value, but does not guarantee the value of 36460 any other bits, but we do not know of any machine that has such an 36461 instruction. If you are trying to port GCC to such a machine, 36462 include an instruction to perform a logical-and of the result with 36463 1 in the pattern for the comparison operators and let us know at 36464 <gcc (a] gcc.gnu.org>. 36465 36466 Often, a machine will have multiple instructions that obtain a 36467 value from a comparison (or the condition codes). Here are rules 36468 to guide the choice of value for 'STORE_FLAG_VALUE', and hence the 36469 instructions to be used: 36470 36471 * Use the shortest sequence that yields a valid definition for 36472 'STORE_FLAG_VALUE'. It is more efficient for the compiler to 36473 "normalize" the value (convert it to, e.g., 1 or 0) than for 36474 the comparison operators to do so because there may be 36475 opportunities to combine the normalization with other 36476 operations. 36477 36478 * For equal-length sequences, use a value of 1 or -1, with -1 36479 being slightly preferred on machines with expensive jumps and 36480 1 preferred on other machines. 36481 36482 * As a second choice, choose a value of '0x80000001' if 36483 instructions exist that set both the sign and low-order bits 36484 but do not define the others. 36485 36486 * Otherwise, use a value of '0x80000000'. 36487 36488 Many machines can produce both the value chosen for 36489 'STORE_FLAG_VALUE' and its negation in the same number of 36490 instructions. On those machines, you should also define a pattern 36491 for those cases, e.g., one matching 36492 36493 (set A (neg:M (ne:M B C))) 36494 36495 Some machines can also perform 'and' or 'plus' operations on 36496 condition code values with less instructions than the corresponding 36497 'cstoreMODE4' insn followed by 'and' or 'plus'. On those machines, 36498 define the appropriate patterns. Use the names 'incscc' and 36499 'decscc', respectively, for the patterns which perform 'plus' or 36500 'minus' operations on condition code values. See 'rs6000.md' for 36501 some examples. The GNU Superoptimizer can be used to find such 36502 instruction sequences on other machines. 36503 36504 If this macro is not defined, the default value, 1, is used. You 36505 need not define 'STORE_FLAG_VALUE' if the machine has no store-flag 36506 instructions, or if the value generated by these instructions is 1. 36507 36508 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 36509 A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is 36510 returned when comparison operators with floating-point results are 36511 true. Define this macro on machines that have comparison 36512 operations that return floating-point values. If there are no such 36513 operations, do not define this macro. 36514 36515 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 36516 A C expression that gives a rtx representing the nonzero true 36517 element for vector comparisons. The returned rtx should be valid 36518 for the inner mode of MODE which is guaranteed to be a vector mode. 36519 Define this macro on machines that have vector comparison 36520 operations that return a vector result. If there are no such 36521 operations, do not define this macro. Typically, this macro is 36522 defined as 'const1_rtx' or 'constm1_rtx'. This macro may return 36523 'NULL_RTX' to prevent the compiler optimizing such vector 36524 comparison operations for the given mode. 36525 36526 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 36527 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 36528 A C expression that indicates whether the architecture defines a 36529 value for 'clz' or 'ctz' with a zero operand. A result of '0' 36530 indicates the value is undefined. If the value is defined for only 36531 the RTL expression, the macro should evaluate to '1'; if the value 36532 applies also to the corresponding optab entry (which is normally 36533 the case if it expands directly into the corresponding RTL), then 36534 the macro should evaluate to '2'. In the cases where the value is 36535 defined, VALUE should be set to this value. 36536 36537 If this macro is not defined, the value of 'clz' or 'ctz' at zero 36538 is assumed to be undefined. 36539 36540 This macro must be defined if the target's expansion for 'ffs' 36541 relies on a particular value to get correct results. Otherwise it 36542 is not necessary, though it may be used to optimize some corner 36543 cases, and to provide a default expansion for the 'ffs' optab. 36544 36545 Note that regardless of this macro the "definedness" of 'clz' and 36546 'ctz' at zero do _not_ extend to the builtin functions visible to 36547 the user. Thus one may be free to adjust the value at will to 36548 match the target expansion of these operations without fear of 36549 breaking the API. 36550 36551 -- Macro: Pmode 36552 An alias for the machine mode for pointers. On most machines, 36553 define this to be the integer mode corresponding to the width of a 36554 hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit 36555 machines. On some machines you must define this to be one of the 36556 partial integer modes, such as 'PSImode'. 36557 36558 The width of 'Pmode' must be at least as large as the value of 36559 'POINTER_SIZE'. If it is not equal, you must define the macro 36560 'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 36561 'Pmode'. 36562 36563 -- Macro: FUNCTION_MODE 36564 An alias for the machine mode used for memory references to 36565 functions being called, in 'call' RTL expressions. On most CISC 36566 machines, where an instruction can begin at any byte address, this 36567 should be 'QImode'. On most RISC machines, where all instructions 36568 have fixed size and alignment, this should be a mode with the same 36569 size and alignment as the machine instruction words - typically 36570 'SImode' or 'HImode'. 36571 36572 -- Macro: STDC_0_IN_SYSTEM_HEADERS 36573 In normal operation, the preprocessor expands '__STDC__' to the 36574 constant 1, to signify that GCC conforms to ISO Standard C. On 36575 some hosts, like Solaris, the system compiler uses a different 36576 convention, where '__STDC__' is normally 0, but is 1 if the user 36577 specifies strict conformance to the C Standard. 36578 36579 Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 36580 convention when processing system header files, but when processing 36581 user files '__STDC__' will always expand to 1. 36582 36583 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void) 36584 Define this hook to return the name of a header file to be included 36585 at the start of all compilations, as if it had been included with 36586 '#include <FILE>'. If this hook returns 'NULL', or is not defined, 36587 or the header is not found, or if the user specifies 36588 '-ffreestanding' or '-nostdinc', no header is included. 36589 36590 This hook can be used together with a header provided by the system 36591 C library to implement ISO C requirements for certain macros to be 36592 predefined that describe properties of the whole implementation 36593 rather than just the compiler. 36594 36595 -- Macro: NO_IMPLICIT_EXTERN_C 36596 Define this macro if the system header files support C++ as well as 36597 C. This macro inhibits the usual method of using system header 36598 files in C++, which is to pretend that the file's contents are 36599 enclosed in 'extern "C" {...}'. 36600 36601 -- Macro: REGISTER_TARGET_PRAGMAS () 36602 Define this macro if you want to implement any target-specific 36603 pragmas. If defined, it is a C expression which makes a series of 36604 calls to 'c_register_pragma' or 'c_register_pragma_with_expansion' 36605 for each pragma. The macro may also do any setup required for the 36606 pragmas. 36607 36608 The primary reason to define this macro is to provide compatibility 36609 with other compilers for the same target. In general, we 36610 discourage definition of target-specific pragmas for GCC. 36611 36612 If the pragma can be implemented by attributes then you should 36613 consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as 36614 well. 36615 36616 Preprocessor macros that appear on pragma lines are not expanded. 36617 All '#pragma' directives that do not match any registered pragma 36618 are silently ignored, unless the user specifies 36619 '-Wunknown-pragmas'. 36620 36621 -- Function: void c_register_pragma (const char *SPACE, const char 36622 *NAME, void (*CALLBACK) (struct cpp_reader *)) 36623 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 36624 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 36625 36626 Each call to 'c_register_pragma' or 36627 'c_register_pragma_with_expansion' establishes one pragma. The 36628 CALLBACK routine will be called when the preprocessor encounters a 36629 pragma of the form 36630 36631 #pragma [SPACE] NAME ... 36632 36633 SPACE is the case-sensitive namespace of the pragma, or 'NULL' to 36634 put the pragma in the global namespace. The callback routine 36635 receives PFILE as its first argument, which can be passed on to 36636 cpplib's functions if necessary. You can lex tokens after the NAME 36637 by calling 'pragma_lex'. Tokens that are not read by the callback 36638 will be silently ignored. The end of the line is indicated by a 36639 token of type 'CPP_EOF'. Macro expansion occurs on the arguments 36640 of pragmas registered with 'c_register_pragma_with_expansion' but 36641 not on the arguments of pragmas registered with 36642 'c_register_pragma'. 36643 36644 Note that the use of 'pragma_lex' is specific to the C and C++ 36645 compilers. It will not work in the Java or Fortran compilers, or 36646 any other language compilers for that matter. Thus if 'pragma_lex' 36647 is going to be called from target-specific code, it must only be 36648 done so when building the C and C++ compilers. This can be done by 36649 defining the variables 'c_target_objs' and 'cxx_target_objs' in the 36650 target entry in the 'config.gcc' file. These variables should name 36651 the target-specific, language-specific object file which contains 36652 the code that uses 'pragma_lex'. Note it will also be necessary to 36653 add a rule to the makefile fragment pointed to by 'tmake_file' that 36654 shows how to build this object file. 36655 36656 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 36657 Define this macro if macros should be expanded in the arguments of 36658 '#pragma pack'. 36659 36660 -- Macro: TARGET_DEFAULT_PACK_STRUCT 36661 If your target requires a structure packing default other than 0 36662 (meaning the machine default), define this macro to the necessary 36663 value (in bytes). This must be a value that would also be valid to 36664 use with '#pragma pack()' (that is, a small power of two). 36665 36666 -- Macro: DOLLARS_IN_IDENTIFIERS 36667 Define this macro to control use of the character '$' in identifier 36668 names for the C family of languages. 0 means '$' is not allowed by 36669 default; 1 means it is allowed. 1 is the default; there is no need 36670 to define this macro in that case. 36671 36672 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 36673 Define this macro as a C expression that is nonzero if it is safe 36674 for the delay slot scheduler to place instructions in the delay 36675 slot of INSN, even if they appear to use a resource set or 36676 clobbered in INSN. INSN is always a 'jump_insn' or an 'insn'; GCC 36677 knows that every 'call_insn' has this behavior. On machines where 36678 some 'insn' or 'jump_insn' is really a function call and hence has 36679 this behavior, you should define this macro. 36680 36681 You need not define this macro if it would always return zero. 36682 36683 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 36684 Define this macro as a C expression that is nonzero if it is safe 36685 for the delay slot scheduler to place instructions in the delay 36686 slot of INSN, even if they appear to set or clobber a resource 36687 referenced in INSN. INSN is always a 'jump_insn' or an 'insn'. On 36688 machines where some 'insn' or 'jump_insn' is really a function call 36689 and its operands are registers whose use is actually in the 36690 subroutine it calls, you should define this macro. Doing so allows 36691 the delay slot scheduler to move instructions which copy arguments 36692 into the argument registers into the delay slot of INSN. 36693 36694 You need not define this macro if it would always return zero. 36695 36696 -- Macro: MULTIPLE_SYMBOL_SPACES 36697 Define this macro as a C expression that is nonzero if, in some 36698 cases, global symbols from one translation unit may not be bound to 36699 undefined symbols in another translation unit without user 36700 intervention. For instance, under Microsoft Windows symbols must 36701 be explicitly imported from shared libraries (DLLs). 36702 36703 You need not define this macro if it would always evaluate to zero. 36704 36705 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree INPUTS, 36706 tree CLOBBERS) 36707 This target hook should add to CLOBBERS 'STRING_CST' trees for any 36708 hard regs the port wishes to automatically clobber for an asm. It 36709 should return the result of the last 'tree_cons' used to add a 36710 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the 36711 corresponding parameters to the asm and may be inspected to avoid 36712 clobbering a register that is an input or output of the asm. You 36713 can use 'tree_overlaps_hard_reg_set', declared in 'tree.h', to test 36714 for overlap with regards to asm-declared registers. 36715 36716 -- Macro: MATH_LIBRARY 36717 Define this macro as a C string constant for the linker argument to 36718 link in the system math library, minus the initial '"-l"', or '""' 36719 if the target does not have a separate math library. 36720 36721 You need only define this macro if the default of '"m"' is wrong. 36722 36723 -- Macro: LIBRARY_PATH_ENV 36724 Define this macro as a C string constant for the environment 36725 variable that specifies where the linker should look for libraries. 36726 36727 You need only define this macro if the default of '"LIBRARY_PATH"' 36728 is wrong. 36729 36730 -- Macro: TARGET_POSIX_IO 36731 Define this macro if the target supports the following POSIX file 36732 functions, access, mkdir and file locking with fcntl / F_SETLKW. 36733 Defining 'TARGET_POSIX_IO' will enable the test coverage code to 36734 use file locking when exiting a program, which avoids race 36735 conditions if the program has forked. It will also create 36736 directories at run-time for cross-profiling. 36737 36738 -- Macro: MAX_CONDITIONAL_EXECUTE 36739 36740 A C expression for the maximum number of instructions to execute 36741 via conditional execution instructions instead of a branch. A 36742 value of 'BRANCH_COST'+1 is the default if the machine does not use 36743 cc0, and 1 if it does use cc0. 36744 36745 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 36746 Used if the target needs to perform machine-dependent modifications 36747 on the conditionals used for turning basic blocks into 36748 conditionally executed code. CE_INFO points to a data structure, 36749 'struct ce_if_block', which contains information about the 36750 currently processed blocks. TRUE_EXPR and FALSE_EXPR are the tests 36751 that are used for converting the then-block and the else-block, 36752 respectively. Set either TRUE_EXPR or FALSE_EXPR to a null pointer 36753 if the tests cannot be converted. 36754 36755 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 36756 FALSE_EXPR) 36757 Like 'IFCVT_MODIFY_TESTS', but used when converting more 36758 complicated if-statements into conditions combined by 'and' and 36759 'or' operations. BB contains the basic block that contains the 36760 test that is currently being processed and about to be turned into 36761 a condition. 36762 36763 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 36764 A C expression to modify the PATTERN of an INSN that is to be 36765 converted to conditional execution format. CE_INFO points to a 36766 data structure, 'struct ce_if_block', which contains information 36767 about the currently processed blocks. 36768 36769 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 36770 A C expression to perform any final machine dependent modifications 36771 in converting code to conditional execution. The involved basic 36772 blocks can be found in the 'struct ce_if_block' structure that is 36773 pointed to by CE_INFO. 36774 36775 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 36776 A C expression to cancel any machine dependent modifications in 36777 converting code to conditional execution. The involved basic 36778 blocks can be found in the 'struct ce_if_block' structure that is 36779 pointed to by CE_INFO. 36780 36781 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO) 36782 A C expression to initialize any machine specific data for 36783 if-conversion of the if-block in the 'struct ce_if_block' structure 36784 that is pointed to by CE_INFO. 36785 36786 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 36787 If non-null, this hook performs a target-specific pass over the 36788 instruction stream. The compiler will run it at all optimization 36789 levels, just before the point at which it normally does 36790 delayed-branch scheduling. 36791 36792 The exact purpose of the hook varies from target to target. Some 36793 use it to do transformations that are necessary for correctness, 36794 such as laying out in-function constant pools or avoiding hardware 36795 hazards. Others use it as an opportunity to do some 36796 machine-dependent optimizations. 36797 36798 You need not implement the hook if it has nothing to do. The 36799 default definition is null. 36800 36801 -- Target Hook: void TARGET_INIT_BUILTINS (void) 36802 Define this hook if you have any machine-specific built-in 36803 functions that need to be defined. It should be a function that 36804 performs the necessary setup. 36805 36806 Machine specific built-in functions can be useful to expand special 36807 machine instructions that would otherwise not normally be generated 36808 because they have no equivalent in the source language (for 36809 example, SIMD vector instructions or prefetch instructions). 36810 36811 To create a built-in function, call the function 36812 'lang_hooks.builtin_function' which is defined by the language 36813 front end. You can use any type nodes set up by 36814 'build_common_tree_nodes'; only language front ends that use those 36815 two functions will call 'TARGET_INIT_BUILTINS'. 36816 36817 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 36818 INITIALIZE_P) 36819 Define this hook if you have any machine-specific built-in 36820 functions that need to be defined. It should be a function that 36821 returns the builtin function declaration for the builtin function 36822 code CODE. If there is no such builtin and it cannot be 36823 initialized at this time if INITIALIZE_P is true the function 36824 should return 'NULL_TREE'. If CODE is out of range the function 36825 should return 'error_mark_node'. 36826 36827 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 36828 SUBTARGET, enum machine_mode MODE, int IGNORE) 36829 36830 Expand a call to a machine specific built-in function that was set 36831 up by 'TARGET_INIT_BUILTINS'. EXP is the expression for the 36832 function call; the result should go to TARGET if that is 36833 convenient, and have mode MODE if that is convenient. SUBTARGET 36834 may be used as the target for computing one of EXP's operands. 36835 IGNORE is nonzero if the value is to be ignored. This function 36836 should return the result of the call to the built-in function. 36837 36838 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 36839 LOC, tree FNDECL, void *ARGLIST) 36840 Select a replacement for a machine specific built-in function that 36841 was set up by 'TARGET_INIT_BUILTINS'. This is done _before_ 36842 regular type checking, and so allows the target to implement a 36843 crude form of function overloading. FNDECL is the declaration of 36844 the built-in function. ARGLIST is the list of arguments passed to 36845 the built-in function. The result is a complete expression that 36846 implements the operation, usually another 'CALL_EXPR'. ARGLIST 36847 really has type 'VEC(tree,gc)*' 36848 36849 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree 36850 *ARGP, bool IGNORE) 36851 Fold a call to a machine specific built-in function that was set up 36852 by 'TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 36853 built-in function. N_ARGS is the number of arguments passed to the 36854 function; the arguments themselves are pointed to by ARGP. The 36855 result is another tree containing a simplified expression for the 36856 call's result. If IGNORE is true the value will be ignored. 36857 36858 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree 36859 DECL2) 36860 This hook is used to compare the target attributes in two functions 36861 to determine which function's features get higher priority. This 36862 is used during function multi-versioning to figure out the order in 36863 which two versions must be dispatched. A function version with a 36864 higher priority is checked for dispatching earlier. DECL1 and 36865 DECL2 are the two function decls that will be compared. 36866 36867 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void 36868 *DECL) 36869 This hook is used to get the dispatcher function for a set of 36870 function versions. The dispatcher function is called to invoke the 36871 right function version at run-time. DECL is one version from a set 36872 of semantically identical versions. 36873 36874 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void 36875 *ARG) 36876 This hook is used to generate the dispatcher logic to invoke the 36877 right function version at run-time for a given set of function 36878 versions. ARG points to the callgraph node of the dispatcher 36879 function whose body must be generated. 36880 36881 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx 36882 INSN) 36883 36884 Take an instruction in INSN and return NULL if it is valid within a 36885 low-overhead loop, otherwise return a string explaining why doloop 36886 could not be applied. 36887 36888 Many targets use special registers for low-overhead looping. For 36889 any instruction that clobbers these this function should return a 36890 string indicating the reason why the doloop could not be applied. 36891 By default, the RTL loop optimizer does not use a present doloop 36892 pattern for loops containing function calls or branch on table 36893 instructions. 36894 36895 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx INSN) 36896 Take an instruction in INSN and return 'false' if the instruction 36897 is not appropriate as a combination of two or more instructions. 36898 The default is to accept all instructions. 36899 36900 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2) 36901 36902 Take a branch insn in BRANCH1 and another in BRANCH2. Return true 36903 if redirecting BRANCH1 to the destination of BRANCH2 is possible. 36904 36905 On some targets, branches may have a limited range. Optimizing the 36906 filling of delay slots can result in branches being redirected, and 36907 this may in turn cause a branch offset to overflow. 36908 36909 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER, 36910 const_rtx FOLLOWEE) 36911 FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if 36912 FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. 36913 For example, on some targets, certain kinds of branches can't be 36914 made to follow through a hot/cold partitioning. 36915 36916 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 36917 This target hook returns 'true' if X is considered to be 36918 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 36919 PA doesn't consider PLUS to be commutative inside a MEM. 36920 OUTER_CODE is the rtx code of the enclosing rtl, if known, 36921 otherwise it is UNKNOWN. 36922 36923 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 36924 36925 When the initial value of a hard register has been copied in a 36926 pseudo register, it is often not necessary to actually allocate 36927 another register to this pseudo register, because the original hard 36928 register or a stack slot it has been saved into can be used. 36929 'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 36930 allocation once for each hard register that had its initial value 36931 copied by using 'get_func_hard_reg_initial_val' or 36932 'get_hard_reg_initial_val'. Possible values are 'NULL_RTX', if you 36933 don't want to do any special allocation, a 'REG' rtx--that would 36934 typically be the hard register itself, if it is known not to be 36935 clobbered--or a 'MEM'. If you are returning a 'MEM', this is only 36936 a hint for the allocator; it might decide to use another register 36937 anyways. You may use 'current_function_is_leaf' or 'REG_N_SETS' in 36938 the hook to determine if the hard register in question will not be 36939 clobbered. The default value of this hook is 'NULL', which 36940 disables any special allocation. 36941 36942 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 36943 FLAGS) 36944 This target hook returns nonzero if X, an 'unspec' or 36945 'unspec_volatile' operation, might cause a trap. Targets can use 36946 this hook to enhance precision of analysis for 'unspec' and 36947 'unspec_volatile' operations. You may call 'may_trap_p_1' to 36948 analyze inner elements of X in which case FLAGS should be passed 36949 along. 36950 36951 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 36952 The compiler invokes this hook whenever it changes its current 36953 function context ('cfun'). You can define this function if the 36954 back end needs to perform any initialization or reset actions on a 36955 per-function basis. For example, it may be used to implement 36956 function attributes that affect register usage or code generation 36957 patterns. The argument DECL is the declaration for the new 36958 function context, and may be null to indicate that the compiler has 36959 left a function context and is returning to processing at the top 36960 level. The default hook function does nothing. 36961 36962 GCC sets 'cfun' to a dummy function context during initialization 36963 of some parts of the back end. The hook function is not invoked in 36964 this situation; you need not worry about the hook being invoked 36965 recursively, or when the back end is in a partially-initialized 36966 state. 'cfun' might be 'NULL' to indicate processing at top level, 36967 outside of any function scope. 36968 36969 -- Macro: TARGET_OBJECT_SUFFIX 36970 Define this macro to be a C string representing the suffix for 36971 object files on your target machine. If you do not define this 36972 macro, GCC will use '.o' as the suffix for object files. 36973 36974 -- Macro: TARGET_EXECUTABLE_SUFFIX 36975 Define this macro to be a C string representing the suffix to be 36976 automatically added to executable files on your target machine. If 36977 you do not define this macro, GCC will use the null string as the 36978 suffix for executable files. 36979 36980 -- Macro: COLLECT_EXPORT_LIST 36981 If defined, 'collect2' will scan the individual object files 36982 specified on its command line and create an export list for the 36983 linker. Define this macro for systems like AIX, where the linker 36984 discards object files that are not referenced from 'main' and uses 36985 export lists. 36986 36987 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 36988 Define this macro to a C expression representing a variant of the 36989 method call MDECL, if Java Native Interface (JNI) methods must be 36990 invoked differently from other methods on your target. For 36991 example, on 32-bit Microsoft Windows, JNI methods must be invoked 36992 using the 'stdcall' calling convention and this macro is then 36993 defined as this expression: 36994 36995 build_type_attribute_variant (MDECL, 36996 build_tree_list 36997 (get_identifier ("stdcall"), 36998 NULL)) 36999 37000 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 37001 This target hook returns 'true' past the point in which new jump 37002 instructions could be created. On machines that require a register 37003 for every jump such as the SHmedia ISA of SH5, this point would 37004 typically be reload, so this target hook should be defined to a 37005 function such as: 37006 37007 static bool 37008 cannot_modify_jumps_past_reload_p () 37009 { 37010 return (reload_completed || reload_in_progress); 37011 } 37012 37013 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void) 37014 This target hook returns a register class for which branch target 37015 register optimizations should be applied. All registers in this 37016 class should be usable interchangeably. After reload, registers in 37017 this class will be re-allocated and loads will be hoisted out of 37018 loops and be subjected to inter-block scheduling. 37019 37020 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 37021 AFTER_PROLOGUE_EPILOGUE_GEN) 37022 Branch target register optimization will by default exclude 37023 callee-saved registers that are not already live during the current 37024 function; if this target hook returns true, they will be included. 37025 The target code must than make sure that all target registers in 37026 the class returned by 'TARGET_BRANCH_TARGET_REGISTER_CLASS' that 37027 might need saving are saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates 37028 if prologues and epilogues have already been generated. Note, even 37029 if you only return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, 37030 you still are likely to have to make special provisions in 37031 'INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 37032 target registers. 37033 37034 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 37035 This target hook returns true if the target supports conditional 37036 execution. This target hook is required only when the target has 37037 several different modes and they have different conditional 37038 execution capability, such as ARM. 37039 37040 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL, 37041 struct loop *LOOP) 37042 This target hook returns a new value for the number of times LOOP 37043 should be unrolled. The parameter NUNROLL is the number of times 37044 the loop is to be unrolled. The parameter LOOP is a pointer to the 37045 loop, which is going to be checked for unrolling. This target hook 37046 is required only when the target has special constraints like 37047 maximum number of memory accesses. 37048 37049 -- Macro: POWI_MAX_MULTS 37050 If defined, this macro is interpreted as a signed integer C 37051 expression that specifies the maximum number of floating point 37052 multiplications that should be emitted when expanding 37053 exponentiation by an integer constant inline. When this value is 37054 defined, exponentiation requiring more than this number of 37055 multiplications is implemented by calling the system library's 37056 'pow', 'powf' or 'powl' routines. The default value places no 37057 upper bound on the multiplication count. 37058 37059 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 37060 *IPREFIX, int STDINC) 37061 This target hook should register any extra include files for the 37062 target. The parameter STDINC indicates if normal include files are 37063 present. The parameter SYSROOT is the system root directory. The 37064 parameter IPREFIX is the prefix for the gcc directory. 37065 37066 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 37067 char *IPREFIX, int STDINC) 37068 This target hook should register any extra include files for the 37069 target before any standard headers. The parameter STDINC indicates 37070 if normal include files are present. The parameter SYSROOT is the 37071 system root directory. The parameter IPREFIX is the prefix for the 37072 gcc directory. 37073 37074 -- Macro: void TARGET_OPTF (char *PATH) 37075 This target hook should register special include paths for the 37076 target. The parameter PATH is the include to register. On Darwin 37077 systems, this is used for Framework includes, which have semantics 37078 that are different from '-I'. 37079 37080 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 37081 This target macro returns 'true' if it is safe to use a local alias 37082 for a virtual function FNDECL when constructing thunks, 'false' 37083 otherwise. By default, the macro returns 'true' for all functions, 37084 if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'), 37085 'false' otherwise, 37086 37087 -- Macro: TARGET_FORMAT_TYPES 37088 If defined, this macro is the name of a global variable containing 37089 target-specific format checking information for the '-Wformat' 37090 option. The default is to have no target-specific format checks. 37091 37092 -- Macro: TARGET_N_FORMAT_TYPES 37093 If defined, this macro is the number of entries in 37094 'TARGET_FORMAT_TYPES'. 37095 37096 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 37097 If defined, this macro is the name of a global variable containing 37098 target-specific format overrides for the '-Wformat' option. The 37099 default is to have no target-specific format overrides. If 37100 defined, 'TARGET_FORMAT_TYPES' must be defined, too. 37101 37102 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 37103 If defined, this macro specifies the number of entries in 37104 'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 37105 37106 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 37107 If defined, this macro specifies the optional initialization 37108 routine for target specific customizations of the system printf and 37109 scanf formatter settings. 37110 37111 -- Target Hook: bool TARGET_RELAXED_ORDERING 37112 If set to 'true', means that the target's memory model does not 37113 guarantee that loads which do not depend on one another will access 37114 main memory in the order of the instruction stream; if ordering is 37115 important, an explicit memory barrier must be used. This is true 37116 of many recent processors which implement a policy of "relaxed," 37117 "weak," or "release" memory consistency, such as Alpha, PowerPC, 37118 and ia64. The default is 'false'. 37119 37120 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 37121 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 37122 If defined, this macro returns the diagnostic message when it is 37123 illegal to pass argument VAL to function FUNCDECL with prototype 37124 TYPELIST. 37125 37126 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 37127 FROMTYPE, const_tree TOTYPE) 37128 If defined, this macro returns the diagnostic message when it is 37129 invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity 37130 should be determined by the front end. 37131 37132 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 37133 const_tree TYPE) 37134 If defined, this macro returns the diagnostic message when it is 37135 invalid to apply operation OP (where unary plus is denoted by 37136 'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity 37137 should be determined by the front end. 37138 37139 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 37140 const_tree TYPE1, const_tree TYPE2) 37141 If defined, this macro returns the diagnostic message when it is 37142 invalid to apply operation OP to operands of types TYPE1 and TYPE2, 37143 or 'NULL' if validity should be determined by the front end. 37144 37145 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree 37146 TYPE) 37147 If defined, this macro returns the diagnostic message when it is 37148 invalid for functions to include parameters of type TYPE, or 'NULL' 37149 if validity should be determined by the front end. This is 37150 currently used only by the C and C++ front ends. 37151 37152 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree 37153 TYPE) 37154 If defined, this macro returns the diagnostic message when it is 37155 invalid for functions to have return type TYPE, or 'NULL' if 37156 validity should be determined by the front end. This is currently 37157 used only by the C and C++ front ends. 37158 37159 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 37160 If defined, this target hook returns the type to which values of 37161 TYPE should be promoted when they appear in expressions, analogous 37162 to the integer promotions, or 'NULL_TREE' to use the front end's 37163 normal promotion rules. This hook is useful when there are 37164 target-specific types with special promotion rules. This is 37165 currently used only by the C and C++ front ends. 37166 37167 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 37168 If defined, this hook returns the result of converting EXPR to 37169 TYPE. It should return the converted expression, or 'NULL_TREE' to 37170 apply the front end's normal conversion rules. This hook is useful 37171 when there are target-specific types with special conversion rules. 37172 This is currently used only by the C and C++ front ends. 37173 37174 -- Macro: TARGET_USE_JCR_SECTION 37175 This macro determines whether to use the JCR section to register 37176 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 37177 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else 37178 0. 37179 37180 -- Macro: OBJC_JBLEN 37181 This macro determines the size of the objective C jump buffer for 37182 the NeXT runtime. By default, OBJC_JBLEN is defined to an 37183 innocuous value. 37184 37185 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 37186 Define this macro if any target-specific attributes need to be 37187 attached to the functions in 'libgcc' that provide low-level 37188 support for call stack unwinding. It is used in declarations in 37189 'unwind-generic.h' and the associated definitions of those 37190 functions. 37191 37192 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 37193 Define this macro to update the current function stack boundary if 37194 necessary. 37195 37196 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 37197 This hook should return an rtx for Dynamic Realign Argument Pointer 37198 (DRAP) if a different argument pointer register is needed to access 37199 the function's argument list due to stack realignment. Return 37200 'NULL' if no DRAP is needed. 37201 37202 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 37203 When optimization is disabled, this hook indicates whether or not 37204 arguments should be allocated to stack slots. Normally, GCC 37205 allocates stacks slots for arguments when not optimizing in order 37206 to make debugging easier. However, when a function is declared 37207 with '__attribute__((naked))', there is no stack frame, and the 37208 compiler cannot safely move arguments from the registers in which 37209 they are passed to the stack. Therefore, this hook should return 37210 true in general, but false for naked functions. The default 37211 implementation always returns true. 37212 37213 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 37214 On some architectures it can take multiple instructions to 37215 synthesize a constant. If there is another constant already in a 37216 register that is close enough in value then it is preferable that 37217 the new constant is computed from this register using immediate 37218 addition or subtraction. We accomplish this through CSE. Besides 37219 the value of the constant we also add a lower and an upper constant 37220 anchor to the available expressions. These are then queried when 37221 encountering new constants. The anchors are computed by rounding 37222 the constant up and down to a multiple of the value of 37223 'TARGET_CONST_ANCHOR'. 'TARGET_CONST_ANCHOR' should be the maximum 37224 positive value accepted by immediate-add plus one. We currently 37225 assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2. 37226 For example, on MIPS, where add-immediate takes a 16-bit signed 37227 value, 'TARGET_CONST_ANCHOR' is set to '0x8000'. The default value 37228 is zero, which disables this optimization. 37229 37230 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void) 37231 Return the offset bitwise ored into shifted address to get 37232 corresponding Address Sanitizer shadow memory address. NULL if 37233 Address Sanitizer is not supported by the target. 37234 37235 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned 37236 HOST_WIDE_INT VAL) 37237 Validate target specific memory model mask bits. When NULL no 37238 target specific memory model bits are allowed. 37239 37240 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 37241 This value should be set if the result written by 37242 'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'. 37243 37244 37245 File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 37246 37247 18 Host Configuration 37248 ********************* 37249 37250 Most details about the machine and system on which the compiler is 37251 actually running are detected by the 'configure' script. Some things 37252 are impossible for 'configure' to detect; these are described in two 37253 ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook 37254 functions in the file specified by the OUT_HOST_HOOK_OBJ variable in 37255 'config.gcc'. (The intention is that very few hosts will need a header 37256 file but nearly every fully supported host will need to override some 37257 hooks.) 37258 37259 If you need to define only a few macros, and they have simple 37260 definitions, consider using the 'xm_defines' variable in your 37261 'config.gcc' entry instead of creating a host configuration header. 37262 *Note System Config::. 37263 37264 * Menu: 37265 37266 * Host Common:: Things every host probably needs implemented. 37267 * Filesystem:: Your host can't have the letter 'a' in filenames? 37268 * Host Misc:: Rare configuration options for hosts. 37269 37270 37271 File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 37272 37273 18.1 Host Common 37274 ================ 37275 37276 Some things are just not portable, even between similar operating 37277 systems, and are too difficult for autoconf to detect. They get 37278 implemented using hook functions in the file specified by the 37279 HOST_HOOK_OBJ variable in 'config.gcc'. 37280 37281 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 37282 This host hook is used to set up handling for extra signals. The 37283 most common thing to do in this hook is to detect stack overflow. 37284 37285 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 37286 FD) 37287 This host hook returns the address of some space that is likely to 37288 be free in some subsequent invocation of the compiler. We intend 37289 to load the PCH data at this address such that the data need not be 37290 relocated. The area should be able to hold SIZE bytes. If the 37291 host uses 'mmap', FD is an open file descriptor that can be used 37292 for probing. 37293 37294 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t 37295 SIZE, int FD, size_t OFFSET) 37296 This host hook is called when a PCH file is about to be loaded. We 37297 want to load SIZE bytes from FD at OFFSET into memory at ADDRESS. 37298 The given address will be the result of a previous invocation of 37299 'HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we couldn't allocate 37300 SIZE bytes at ADDRESS. Return 0 if the memory is allocated but the 37301 data is not loaded. Return 1 if the hook has performed everything. 37302 37303 If the implementation uses reserved address space, free any 37304 reserved space beyond SIZE, regardless of the return value. If no 37305 PCH will be loaded, this hook may be called with SIZE zero, in 37306 which case all reserved address space should be freed. 37307 37308 Do not try to handle values of ADDRESS that could not have been 37309 returned by this executable; just return -1. Such values usually 37310 indicate an out-of-date PCH file (built by some other GCC 37311 executable), and such a PCH file won't work. 37312 37313 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 37314 This host hook returns the alignment required for allocating 37315 virtual memory. Usually this is the same as getpagesize, but on 37316 some hosts the alignment for reserving memory differs from the 37317 pagesize for committing memory. 37318 37319 37320 File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 37321 37322 18.2 Host Filesystem 37323 ==================== 37324 37325 GCC needs to know a number of things about the semantics of the host 37326 machine's filesystem. Filesystems with Unix and MS-DOS semantics are 37327 automatically detected. For other systems, you can define the following 37328 macros in 'xm-MACHINE.h'. 37329 37330 'HAVE_DOS_BASED_FILE_SYSTEM' 37331 This macro is automatically defined by 'system.h' if the host file 37332 system obeys the semantics defined by MS-DOS instead of Unix. DOS 37333 file systems are case insensitive, file specifications may begin 37334 with a drive letter, and both forward slash and backslash ('/' and 37335 '\') are directory separators. 37336 37337 'DIR_SEPARATOR' 37338 'DIR_SEPARATOR_2' 37339 If defined, these macros expand to character constants specifying 37340 separators for directory names within a file specification. 37341 'system.h' will automatically give them appropriate values on Unix 37342 and MS-DOS file systems. If your file system is neither of these, 37343 define one or both appropriately in 'xm-MACHINE.h'. 37344 37345 However, operating systems like VMS, where constructing a pathname 37346 is more complicated than just stringing together directory names 37347 separated by a special character, should not define either of these 37348 macros. 37349 37350 'PATH_SEPARATOR' 37351 If defined, this macro should expand to a character constant 37352 specifying the separator for elements of search paths. The default 37353 value is a colon (':'). DOS-based systems usually, but not always, 37354 use semicolon (';'). 37355 37356 'VMS' 37357 Define this macro if the host system is VMS. 37358 37359 'HOST_OBJECT_SUFFIX' 37360 Define this macro to be a C string representing the suffix for 37361 object files on your host machine. If you do not define this 37362 macro, GCC will use '.o' as the suffix for object files. 37363 37364 'HOST_EXECUTABLE_SUFFIX' 37365 Define this macro to be a C string representing the suffix for 37366 executable files on your host machine. If you do not define this 37367 macro, GCC will use the null string as the suffix for executable 37368 files. 37369 37370 'HOST_BIT_BUCKET' 37371 A pathname defined by the host operating system, which can be 37372 opened as a file and written to, but all the information written is 37373 discarded. This is commonly known as a "bit bucket" or "null 37374 device". If you do not define this macro, GCC will use '/dev/null' 37375 as the bit bucket. If the host does not support a bit bucket, 37376 define this macro to an invalid filename. 37377 37378 'UPDATE_PATH_HOST_CANONICALIZE (PATH)' 37379 If defined, a C statement (sans semicolon) that performs 37380 host-dependent canonicalization when a path used in a compilation 37381 driver or preprocessor is canonicalized. PATH is a malloc-ed path 37382 to be canonicalized. If the C statement does canonicalize PATH 37383 into a different buffer, the old path should be freed and the new 37384 buffer should have been allocated with malloc. 37385 37386 'DUMPFILE_FORMAT' 37387 Define this macro to be a C string representing the format to use 37388 for constructing the index part of debugging dump file names. The 37389 resultant string must fit in fifteen bytes. The full filename will 37390 be the concatenation of: the prefix of the assembler file name, the 37391 string resulting from applying this format to an index number, and 37392 a string unique to each dump file kind, e.g. 'rtl'. 37393 37394 If you do not define this macro, GCC will use '.%02d.'. You should 37395 define this macro if using the default will create an invalid file 37396 name. 37397 37398 'DELETE_IF_ORDINARY' 37399 Define this macro to be a C statement (sans semicolon) that 37400 performs host-dependent removal of ordinary temp files in the 37401 compilation driver. 37402 37403 If you do not define this macro, GCC will use the default version. 37404 You should define this macro if the default version does not 37405 reliably remove the temp file as, for example, on VMS which allows 37406 multiple versions of a file. 37407 37408 'HOST_LACKS_INODE_NUMBERS' 37409 Define this macro if the host filesystem does not report meaningful 37410 inode numbers in struct stat. 37411 37412 37413 File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 37414 37415 18.3 Host Misc 37416 ============== 37417 37418 'FATAL_EXIT_CODE' 37419 A C expression for the status code to be returned when the compiler 37420 exits after serious errors. The default is the system-provided 37421 macro 'EXIT_FAILURE', or '1' if the system doesn't define that 37422 macro. Define this macro only if these defaults are incorrect. 37423 37424 'SUCCESS_EXIT_CODE' 37425 A C expression for the status code to be returned when the compiler 37426 exits without serious errors. (Warnings are not serious errors.) 37427 The default is the system-provided macro 'EXIT_SUCCESS', or '0' if 37428 the system doesn't define that macro. Define this macro only if 37429 these defaults are incorrect. 37430 37431 'USE_C_ALLOCA' 37432 Define this macro if GCC should use the C implementation of 37433 'alloca' provided by 'libiberty.a'. This only affects how some 37434 parts of the compiler itself allocate memory. It does not change 37435 code generation. 37436 37437 When GCC is built with a compiler other than itself, the C 'alloca' 37438 is always used. This is because most other implementations have 37439 serious bugs. You should define this macro only on a system where 37440 no stack-based 'alloca' can possibly work. For instance, if a 37441 system has a small limit on the size of the stack, GCC's builtin 37442 'alloca' will not work reliably. 37443 37444 'COLLECT2_HOST_INITIALIZATION' 37445 If defined, a C statement (sans semicolon) that performs 37446 host-dependent initialization when 'collect2' is being initialized. 37447 37448 'GCC_DRIVER_HOST_INITIALIZATION' 37449 If defined, a C statement (sans semicolon) that performs 37450 host-dependent initialization when a compilation driver is being 37451 initialized. 37452 37453 'HOST_LONG_LONG_FORMAT' 37454 If defined, the string used to indicate an argument of type 'long 37455 long' to functions like 'printf'. The default value is '"ll"'. 37456 37457 'HOST_LONG_FORMAT' 37458 If defined, the string used to indicate an argument of type 'long' 37459 to functions like 'printf'. The default value is '"l"'. 37460 37461 'HOST_PTR_PRINTF' 37462 If defined, the string used to indicate an argument of type 'void 37463 *' to functions like 'printf'. The default value is '"%p"'. 37464 37465 In addition, if 'configure' generates an incorrect definition of any of 37466 the macros in 'auto-host.h', you can override that definition in a host 37467 configuration header. If you need to do this, first see if it is 37468 possible to fix 'configure'. 37469 37470 37471 File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 37472 37473 19 Makefile Fragments 37474 ********************* 37475 37476 When you configure GCC using the 'configure' script, it will construct 37477 the file 'Makefile' from the template file 'Makefile.in'. When it does 37478 this, it can incorporate makefile fragments from the 'config' directory. 37479 These are used to set Makefile parameters that are not amenable to being 37480 calculated by autoconf. The list of fragments to incorporate is set by 37481 'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note 37482 System Config::. 37483 37484 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether 37485 they are relevant to configuring GCC to produce code for a particular 37486 target, or to configuring GCC to run on a particular host. Here TARGET 37487 and HOST are mnemonics which usually have some relationship to the 37488 canonical system name, but no formal connection. 37489 37490 If these files do not exist, it means nothing needs to be added for a 37491 given target or host. Most targets need a few 't-TARGET' fragments, but 37492 needing 'x-HOST' fragments is rare. 37493 37494 * Menu: 37495 37496 * Target Fragment:: Writing 't-TARGET' files. 37497 * Host Fragment:: Writing 'x-HOST' files. 37498 37499 37500 File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 37501 37502 19.1 Target Makefile Fragments 37503 ============================== 37504 37505 Target makefile fragments can set these Makefile variables. 37506 37507 'LIBGCC2_CFLAGS' 37508 Compiler flags to use when compiling 'libgcc2.c'. 37509 37510 'LIB2FUNCS_EXTRA' 37511 A list of source file names to be compiled or assembled and 37512 inserted into 'libgcc.a'. 37513 37514 'CRTSTUFF_T_CFLAGS' 37515 Special flags used when compiling 'crtstuff.c'. *Note 37516 Initialization::. 37517 37518 'CRTSTUFF_T_CFLAGS_S' 37519 Special flags used when compiling 'crtstuff.c' for shared linking. 37520 Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'. 37521 *Note Initialization::. 37522 37523 'MULTILIB_OPTIONS' 37524 For some targets, invoking GCC in different ways produces objects 37525 that can not be linked together. For example, for some targets GCC 37526 produces both big and little endian code. For these targets, you 37527 must arrange for multiple versions of 'libgcc.a' to be compiled, 37528 one for each set of incompatible options. When GCC invokes the 37529 linker, it arranges to link in the right version of 'libgcc.a', 37530 based on the command line options used. 37531 37532 The 'MULTILIB_OPTIONS' macro lists the set of options for which 37533 special versions of 'libgcc.a' must be built. Write options that 37534 are mutually incompatible side by side, separated by a slash. 37535 Write options that may be used together separated by a space. The 37536 build procedure will build all combinations of compatible options. 37537 37538 For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020 37539 msoft-float', 'Makefile' will build special versions of 'libgcc.a' 37540 using the following sets of options: '-m68000', '-m68020', 37541 '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'. 37542 37543 'MULTILIB_DIRNAMES' 37544 If 'MULTILIB_OPTIONS' is used, this variable specifies the 37545 directory names that should be used to hold the various libraries. 37546 Write one element in 'MULTILIB_DIRNAMES' for each element in 37547 'MULTILIB_OPTIONS'. If 'MULTILIB_DIRNAMES' is not used, the 37548 default value will be 'MULTILIB_OPTIONS', with all slashes treated 37549 as spaces. 37550 37551 'MULTILIB_DIRNAMES' describes the multilib directories using GCC 37552 conventions and is applied to directories that are part of the GCC 37553 installation. When multilib-enabled, the compiler will add a 37554 subdirectory of the form PREFIX/MULTILIB before each directory in 37555 the search path for libraries and crt files. 37556 37557 For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020 37558 msoft-float', then the default value of 'MULTILIB_DIRNAMES' is 37559 'm68000 m68020 msoft-float'. You may specify a different value if 37560 you desire a different set of directory names. 37561 37562 'MULTILIB_MATCHES' 37563 Sometimes the same option may be written in two different ways. If 37564 an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about 37565 any synonyms. In that case, set 'MULTILIB_MATCHES' to a list of 37566 items of the form 'option=option' to describe all relevant 37567 synonyms. For example, 'm68000=mc68000 m68020=mc68020'. 37568 37569 'MULTILIB_EXCEPTIONS' 37570 Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being 37571 specified, there are combinations that should not be built. In 37572 that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch 37573 exceptions in shell case syntax that should not be built. 37574 37575 For example the ARM processor cannot execute both hardware floating 37576 point instructions and the reduced size THUMB instructions at the 37577 same time, so there is no need to build libraries with both of 37578 these options enabled. Therefore 'MULTILIB_EXCEPTIONS' is set to: 37579 *mthumb/*mhard-float* 37580 37581 'MULTILIB_REQUIRED' 37582 Sometimes when there are only a few combinations are required, it 37583 would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list 37584 to cover all undesired ones. In such a case, just listing all the 37585 required combinations in 'MULTILIB_REQUIRED' would be more 37586 straightforward. 37587 37588 The way to specify the entries in 'MULTILIB_REQUIRED' is same with 37589 the way used for 'MULTILIB_EXCEPTIONS', only this time what are 37590 required will be specified. Suppose there are multiple sets of 37591 'MULTILIB_OPTIONS' and only two combinations are required, one for 37592 ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, 37593 the 'MULTILIB_REQUIRED' can be set to: 37594 MULTILIB_REQUIRED = mthumb/march=armv7-m 37595 MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 37596 37597 The 'MULTILIB_REQUIRED' can be used together with 37598 'MULTILIB_EXCEPTIONS'. The option combinations generated from 37599 'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and 37600 then by 'MULTILIB_REQUIRED'. 37601 37602 'MULTILIB_REUSE' 37603 Sometimes it is desirable to reuse one existing multilib for 37604 different sets of options. Such kind of reuse can minimize the 37605 number of multilib variants. And for some targets it is better to 37606 reuse an existing multilib than to fall back to default multilib 37607 when there is no corresponding multilib. This can be done by 37608 adding reuse rules to 'MULTILIB_REUSE'. 37609 37610 A reuse rule is comprised of two parts connected by equality sign. 37611 The left part is option set used to build multilib and the right 37612 part is option set that will reuse this multilib. The order of 37613 options in the left part matters and should be same with those 37614 specified in 'MULTILIB_REQUIRED' or aligned with order in 37615 'MULTILIB_OPTIONS'. There is no such limitation for options in 37616 right part as we don't build multilib from them. But the equality 37617 sign in both parts should be replaced with period. 37618 37619 The 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that 37620 it sets up relations between two option sets rather than two 37621 options. Here is an example to demo how we reuse libraries built 37622 in Thumb mode for applications built in ARM mode: 37623 MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r 37624 37625 Before the advent of 'MULTILIB_REUSE', GCC select multilib by 37626 comparing command line options with options used to build multilib. 37627 The 'MULTILIB_REUSE' is complementary to that way. Only when the 37628 original comparison matches nothing it will work to see if it is OK 37629 to reuse some existing multilib. 37630 37631 'MULTILIB_EXTRA_OPTS' 37632 Sometimes it is desirable that when building multiple versions of 37633 'libgcc.a' certain options should always be passed on to the 37634 compiler. In that case, set 'MULTILIB_EXTRA_OPTS' to be the list 37635 of options to be used for all builds. If you set this, you should 37636 probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it. 37637 37638 'MULTILIB_OSDIRNAMES' 37639 If 'MULTILIB_OPTIONS' is used, this variable specifies a list of 37640 subdirectory names, that are used to modify the search path 37641 depending on the chosen multilib. Unlike 'MULTILIB_DIRNAMES', 37642 'MULTILIB_OSDIRNAMES' describes the multilib directories using 37643 operating systems conventions, and is applied to the directories 37644 such as 'lib' or those in the 'LIBRARY_PATH' environment variable. 37645 The format is either the same as of 'MULTILIB_DIRNAMES', or a set 37646 of mappings. When it is the same as 'MULTILIB_DIRNAMES', it 37647 describes the multilib directories using operating system 37648 conventions, rather than GCC conventions. When it is a set of 37649 mappings of the form GCCDIR=OSDIR, the left side gives the GCC 37650 convention and the right gives the equivalent OS defined location. 37651 If the OSDIR part begins with a '!', GCC will not search in the 37652 non-multilib directory and use exclusively the multilib directory. 37653 Otherwise, the compiler will examine the search path for libraries 37654 and crt files twice; the first time it will add MULTILIB to each 37655 directory in the search path, the second it will not. 37656 37657 For configurations that support both multilib and multiarch, 37658 'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus 37659 subsuming 'MULTIARCH_DIRNAME'. The multiarch name is appended to 37660 each directory name, separated by a colon (e.g. 37661 '../lib32:i386-linux-gnu'). 37662 37663 Each multiarch subdirectory will be searched before the 37664 corresponding OS multilib directory, for example 37665 '/lib/i386-linux-gnu' before '/lib/../lib32'. The multiarch name 37666 will also be used to modify the system header search path, as 37667 explained for 'MULTIARCH_DIRNAME'. 37668 37669 'MULTIARCH_DIRNAME' 37670 This variable specifies the multiarch name for configurations that 37671 are multiarch-enabled but not multilibbed configurations. 37672 37673 The multiarch name is used to augment the search path for 37674 libraries, crt files and system header files with additional 37675 locations. The compiler will add a multiarch subdirectory of the 37676 form PREFIX/MULTIARCH before each directory in the library and crt 37677 search path. It will also add two directories 37678 'LOCAL_INCLUDE_DIR'/MULTIARCH and 37679 'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search 37680 path, respectively before 'LOCAL_INCLUDE_DIR' and 37681 'NATIVE_SYSTEM_HEADER_DIR'. 37682 37683 'MULTIARCH_DIRNAME' is not used for configurations that support 37684 both multilib and multiarch. In that case, multiarch names are 37685 encoded in 'MULTILIB_OSDIRNAMES' instead. 37686 37687 More documentation about multiarch can be found at 37688 <http://wiki.debian.org/Multiarch>. 37689 37690 'SPECS' 37691 Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since 37692 it does not affect the build of target libraries, at least not the 37693 build of the default multilib. One possible work-around is to use 37694 'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if 37695 they had been passed in the compiler driver command line. However, 37696 you don't want to be adding these options after the toolchain is 37697 installed, so you can instead tweak the 'specs' file that will be 37698 used during the toolchain build, while you still install the 37699 original, built-in 'specs'. The trick is to set 'SPECS' to some 37700 other filename (say 'specs.install'), that will then be created out 37701 of the built-in specs, and introduce a 'Makefile' rule to generate 37702 the 'specs' file that's going to be used at build time out of your 37703 'specs.install'. 37704 37705 'T_CFLAGS' 37706 These are extra flags to pass to the C compiler. They are used 37707 both when building GCC, and when compiling things with the 37708 just-built GCC. This variable is deprecated and should not be 37709 used. 37710 37711 37712 File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 37713 37714 19.2 Host Makefile Fragments 37715 ============================ 37716 37717 The use of 'x-HOST' fragments is discouraged. You should only use it 37718 for makefile dependencies. 37719 37720 37721 File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 37722 37723 20 'collect2' 37724 ************* 37725 37726 GCC uses a utility called 'collect2' on nearly all systems to arrange to 37727 call various initialization functions at start time. 37728 37729 The program 'collect2' works by linking the program once and looking 37730 through the linker output file for symbols with particular names 37731 indicating they are constructor functions. If it finds any, it creates 37732 a new temporary '.c' file containing a table of them, compiles it, and 37733 links the program a second time including that file. 37734 37735 The actual calls to the constructors are carried out by a subroutine 37736 called '__main', which is called (automatically) at the beginning of the 37737 body of 'main' (provided 'main' was compiled with GNU CC). Calling 37738 '__main' is necessary, even when compiling C code, to allow linking C 37739 and C++ object code together. (If you use '-nostdlib', you get an 37740 unresolved reference to '__main', since it's defined in the standard GCC 37741 library. Include '-lgcc' at the end of your compiler command line to 37742 resolve this reference.) 37743 37744 The program 'collect2' is installed as 'ld' in the directory where the 37745 passes of the compiler are installed. When 'collect2' needs to find the 37746 _real_ 'ld', it tries the following file names: 37747 37748 * a hard coded linker file name, if GCC was configured with the 37749 '--with-ld' option. 37750 37751 * 'real-ld' in the directories listed in the compiler's search 37752 directories. 37753 37754 * 'real-ld' in the directories listed in the environment variable 37755 'PATH'. 37756 37757 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 37758 if specified. 37759 37760 * 'ld' in the compiler's search directories, except that 'collect2' 37761 will not execute itself recursively. 37762 37763 * 'ld' in 'PATH'. 37764 37765 "The compiler's search directories" means all the directories where 37766 'gcc' searches for passes of the compiler. This includes directories 37767 that you specify with '-B'. 37768 37769 Cross-compilers search a little differently: 37770 37771 * 'real-ld' in the compiler's search directories. 37772 37773 * 'TARGET-real-ld' in 'PATH'. 37774 37775 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 37776 if specified. 37777 37778 * 'ld' in the compiler's search directories. 37779 37780 * 'TARGET-ld' in 'PATH'. 37781 37782 'collect2' explicitly avoids running 'ld' using the file name under 37783 which 'collect2' itself was invoked. In fact, it remembers up a list of 37784 such names--in case one copy of 'collect2' finds another copy (or 37785 version) of 'collect2' installed as 'ld' in a second place in the search 37786 path. 37787 37788 'collect2' searches for the utilities 'nm' and 'strip' using the same 37789 algorithm as above for 'ld'. 37790 37791 37792 File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 37793 37794 21 Standard Header File Directories 37795 *********************************** 37796 37797 'GCC_INCLUDE_DIR' means the same thing for native and cross. It is 37798 where GCC stores its private include files, and also where GCC stores 37799 the fixed include files. A cross compiled GCC runs 'fixincludes' on the 37800 header files in '$(tooldir)/include'. (If the cross compilation header 37801 files need to be fixed, they must be installed before GCC is built. If 37802 the cross compilation header files are already suitable for GCC, nothing 37803 special need be done). 37804 37805 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 37806 is where 'g++' looks first for header files. The C++ library installs 37807 only target independent header files in that directory. 37808 37809 'LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 37810 install anything there. It is normally '/usr/local/include'. This is 37811 where local additions to a packaged system should place header files. 37812 37813 'CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 37814 install anything there. 37815 37816 'TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 37817 the place for other packages to install header files that GCC will use. 37818 For a cross-compiler, this is the equivalent of '/usr/include'. When 37819 you build a cross-compiler, 'fixincludes' processes any header files in 37820 this directory. 37821 37822 37823 File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 37824 37825 22 Memory Management and Type Information 37826 ***************************************** 37827 37828 GCC uses some fairly sophisticated memory management techniques, which 37829 involve determining information about GCC's data structures from GCC's 37830 source code and using this information to perform garbage collection and 37831 implement precompiled headers. 37832 37833 A full C++ parser would be too complicated for this task, so a limited 37834 subset of C++ is interpreted and special markers are used to determine 37835 what parts of the source to look at. All 'struct', 'union' and 37836 'template' structure declarations that define data structures that are 37837 allocated under control of the garbage collector must be marked. All 37838 global variables that hold pointers to garbage-collected memory must 37839 also be marked. Finally, all global variables that need to be saved and 37840 restored by a precompiled header must be marked. (The precompiled 37841 header mechanism can only save static variables if they're scalar. 37842 Complex data structures must be allocated in garbage-collected memory to 37843 be saved in a precompiled header.) 37844 37845 The full format of a marker is 37846 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 37847 but in most cases no options are needed. The outer double parentheses 37848 are still necessary, though: 'GTY(())'. Markers can appear: 37849 37850 * In a structure definition, before the open brace; 37851 * In a global variable declaration, after the keyword 'static' or 37852 'extern'; and 37853 * In a structure field definition, before the name of the field. 37854 37855 Here are some examples of marking simple data structures and globals. 37856 37857 struct GTY(()) TAG 37858 { 37859 FIELDS... 37860 }; 37861 37862 typedef struct GTY(()) TAG 37863 { 37864 FIELDS... 37865 } *TYPENAME; 37866 37867 static GTY(()) struct TAG *LIST; /* points to GC memory */ 37868 static GTY(()) int COUNTER; /* save counter in a PCH */ 37869 37870 The parser understands simple typedefs such as 'typedef struct TAG 37871 *NAME;' and 'typedef int NAME;'. These don't need to be marked. 37872 37873 Since 'gengtype''s understanding of C++ is limited, there are several 37874 constructs and declarations that are not supported inside 37875 classes/structures marked for automatic GC code generation. The 37876 following C++ constructs produce a 'gengtype' error on 37877 structures/classes marked for automatic GC code generation: 37878 37879 * Type definitions inside classes/structures are not supported. 37880 * Enumerations inside classes/structures are not supported. 37881 37882 If you have a class or structure using any of the above constructs, you 37883 need to mark that class as 'GTY ((user))' and provide your own marking 37884 routines (see section *note User GC:: for details). 37885 37886 It is always valid to include function definitions inside classes. 37887 Those are always ignored by 'gengtype', as it only cares about data 37888 members. 37889 37890 * Menu: 37891 37892 * GTY Options:: What goes inside a 'GTY(())'. 37893 * User GC:: Adding user-provided GC marking routines. 37894 * GGC Roots:: Making global variables GGC roots. 37895 * Files:: How the generated files work. 37896 * Invoking the garbage collector:: How to invoke the garbage collector. 37897 * Troubleshooting:: When something does not work as expected. 37898 37899 37900 File: gccint.info, Node: GTY Options, Next: User GC, Up: Type Information 37901 37902 22.1 The Inside of a 'GTY(())' 37903 ============================== 37904 37905 Sometimes the C code is not enough to fully describe the type structure. 37906 Extra information can be provided with 'GTY' options and additional 37907 markers. Some options take a parameter, which may be either a string or 37908 a type name, depending on the parameter. If an option takes no 37909 parameter, it is acceptable either to omit the parameter entirely, or to 37910 provide an empty string as a parameter. For example, 'GTY ((skip))' and 37911 'GTY ((skip ("")))' are equivalent. 37912 37913 When the parameter is a string, often it is a fragment of C code. Four 37914 special escapes may be used in these strings, to refer to pieces of the 37915 data structure being marked: 37916 37917 '%h' 37918 The current structure. 37919 '%1' 37920 The structure that immediately contains the current structure. 37921 '%0' 37922 The outermost structure that contains the current structure. 37923 '%a' 37924 A partial expression of the form '[i1][i2]...' that indexes the 37925 array item currently being marked. 37926 37927 For instance, suppose that you have a structure of the form 37928 struct A { 37929 ... 37930 }; 37931 struct B { 37932 struct A foo[12]; 37933 }; 37934 and 'b' is a variable of type 'struct B'. When marking 'b.foo[11]', 37935 '%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to 37936 'b', and '%a' would expand to '[11]'. 37937 37938 As in ordinary C, adjacent strings will be concatenated; this is 37939 helpful when you have a complicated expression. 37940 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 37941 " ? TYPE_NEXT_VARIANT (&%h.generic)" 37942 " : TREE_CHAIN (&%h.generic)"))) 37943 37944 The available options are: 37945 37946 'length ("EXPRESSION")' 37947 37948 There are two places the type machinery will need to be explicitly 37949 told the length of an array of non-atomic objects. The first case 37950 is when a structure ends in a variable-length array, like this: 37951 struct GTY(()) rtvec_def { 37952 int num_elem; /* number of elements */ 37953 rtx GTY ((length ("%h.num_elem"))) elem[1]; 37954 }; 37955 37956 In this case, the 'length' option is used to override the specified 37957 array length (which should usually be '1'). The parameter of the 37958 option is a fragment of C code that calculates the length. 37959 37960 The second case is when a structure or a global variable contains a 37961 pointer to an array, like this: 37962 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter; 37963 In this case, 'iter' has been allocated by writing something like 37964 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse); 37965 and the 'collapse' provides the length of the field. 37966 37967 This second use of 'length' also works on global variables, like: 37968 static GTY((length("reg_known_value_size"))) rtx *reg_known_value; 37969 37970 Note that the 'length' option is only meant for use with arrays of 37971 non-atomic objects, that is, objects that contain pointers pointing 37972 to other GTY-managed objects. For other GC-allocated arrays and 37973 strings you should use 'atomic'. 37974 37975 'skip' 37976 37977 If 'skip' is applied to a field, the type machinery will ignore it. 37978 This is somewhat dangerous; the only safe use is in a union when 37979 one field really isn't ever used. 37980 37981 'desc ("EXPRESSION")' 37982 'tag ("CONSTANT")' 37983 'default' 37984 37985 The type machinery needs to be told which field of a 'union' is 37986 currently active. This is done by giving each field a constant 37987 'tag' value, and then specifying a discriminator using 'desc'. The 37988 value of the expression given by 'desc' is compared against each 37989 'tag' value, each of which should be different. If no 'tag' is 37990 matched, the field marked with 'default' is used if there is one, 37991 otherwise no field in the union will be marked. 37992 37993 In the 'desc' option, the "current structure" is the union that it 37994 discriminates. Use '%1' to mean the structure containing it. 37995 There are no escapes available to the 'tag' option, since it is a 37996 constant. 37997 37998 For example, 37999 struct GTY(()) tree_binding 38000 { 38001 struct tree_common common; 38002 union tree_binding_u { 38003 tree GTY ((tag ("0"))) scope; 38004 struct cp_binding_level * GTY ((tag ("1"))) level; 38005 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 38006 tree value; 38007 }; 38008 38009 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 38010 'struct tree_binding *' is presumed to be 0 or 1. If 1, the type 38011 mechanism will treat the field 'level' as being present and if 0, 38012 will treat the field 'scope' as being present. 38013 38014 'param_is (TYPE)' 38015 'use_param' 38016 38017 Sometimes it's convenient to define some data structure to work on 38018 generic pointers (that is, 'PTR') and then use it with a specific 38019 type. 'param_is' specifies the real type pointed to, and 38020 'use_param' says where in the generic data structure that type 38021 should be put. 38022 38023 For instance, to have a 'htab_t' that points to trees, one would 38024 write the definition of 'htab_t' like this: 38025 typedef struct GTY(()) { 38026 ... 38027 void ** GTY ((use_param, ...)) entries; 38028 ... 38029 } htab_t; 38030 and then declare variables like this: 38031 static htab_t GTY ((param_is (union tree_node))) ict; 38032 38033 'paramN_is (TYPE)' 38034 'use_paramN' 38035 38036 In more complicated cases, the data structure might need to work on 38037 several different types, which might not necessarily all be 38038 pointers. For this, 'param1_is' through 'param9_is' may be used to 38039 specify the real type of a field identified by 'use_param1' through 38040 'use_param9'. 38041 38042 'use_params' 38043 38044 When a structure contains another structure that is parameterized, 38045 there's no need to do anything special, the inner structure 38046 inherits the parameters of the outer one. When a structure 38047 contains a pointer to a parameterized structure, the type machinery 38048 won't automatically detect this (it could, it just doesn't yet), so 38049 it's necessary to tell it that the pointed-to structure should use 38050 the same parameters as the outer structure. This is done by 38051 marking the pointer with the 'use_params' option. 38052 38053 'deletable' 38054 38055 'deletable', when applied to a global variable, indicates that when 38056 garbage collection runs, there's no need to mark anything pointed 38057 to by this variable, it can just be set to 'NULL' instead. This is 38058 used to keep a list of free structures around for re-use. 38059 38060 'if_marked ("EXPRESSION")' 38061 38062 Suppose you want some kinds of object to be unique, and so you put 38063 them in a hash table. If garbage collection marks the hash table, 38064 these objects will never be freed, even if the last other reference 38065 to them goes away. GGC has special handling to deal with this: if 38066 you use the 'if_marked' option on a global hash table, GGC will 38067 call the routine whose name is the parameter to the option on each 38068 hash table entry. If the routine returns nonzero, the hash table 38069 entry will be marked as usual. If the routine returns zero, the 38070 hash table entry will be deleted. 38071 38072 The routine 'ggc_marked_p' can be used to determine if an element 38073 has been marked already; in fact, the usual case is to use 38074 'if_marked ("ggc_marked_p")'. 38075 38076 'mark_hook ("HOOK-ROUTINE-NAME")' 38077 38078 If provided for a structure or union type, the given 38079 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine 38080 called when the garbage collector has just marked the data as 38081 reachable. This routine should not change the data, or call any 38082 ggc routine. Its only argument is a pointer to the just marked 38083 (const) structure or union. 38084 38085 'maybe_undef' 38086 38087 When applied to a field, 'maybe_undef' indicates that it's OK if 38088 the structure that this fields points to is never defined, so long 38089 as this field is always 'NULL'. This is used to avoid requiring 38090 backends to define certain optional structures. It doesn't work 38091 with language frontends. 38092 38093 'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 38094 38095 The type machinery expects all pointers to point to the start of an 38096 object. Sometimes for abstraction purposes it's convenient to have 38097 a pointer which points inside an object. So long as it's possible 38098 to convert the original object to and from the pointer, such 38099 pointers can still be used. TYPE is the type of the original 38100 object, the TO EXPRESSION returns the pointer given the original 38101 object, and the FROM EXPRESSION returns the original object given 38102 the pointer. The pointer will be available using the '%h' escape. 38103 38104 'chain_next ("EXPRESSION")' 38105 'chain_prev ("EXPRESSION")' 38106 'chain_circular ("EXPRESSION")' 38107 38108 It's helpful for the type machinery to know if objects are often 38109 chained together in long lists; this lets it generate code that 38110 uses less stack space by iterating along the list instead of 38111 recursing down it. 'chain_next' is an expression for the next item 38112 in the list, 'chain_prev' is an expression for the previous item. 38113 For singly linked lists, use only 'chain_next'; for doubly linked 38114 lists, use both. The machinery requires that taking the next item 38115 of the previous item gives the original item. 'chain_circular' is 38116 similar to 'chain_next', but can be used for circular single linked 38117 lists. 38118 38119 'reorder ("FUNCTION NAME")' 38120 38121 Some data structures depend on the relative ordering of pointers. 38122 If the precompiled header machinery needs to change that ordering, 38123 it will call the function referenced by the 'reorder' option, 38124 before changing the pointers in the object that's pointed to by the 38125 field the option applies to. The function must take four 38126 arguments, with the signature 38127 'void *, void *, gt_pointer_operator, void *'. The first parameter 38128 is a pointer to the structure that contains the object being 38129 updated, or the object itself if there is no containing structure. 38130 The second parameter is a cookie that should be ignored. The third 38131 parameter is a routine that, given a pointer, will update it to its 38132 correct new value. The fourth parameter is a cookie that must be 38133 passed to the second parameter. 38134 38135 PCH cannot handle data structures that depend on the absolute 38136 values of pointers. 'reorder' functions can be expensive. When 38137 possible, it is better to depend on properties of the data, like an 38138 ID number or the hash of a string instead. 38139 38140 'variable_size' 38141 38142 The type machinery expects the types to be of constant size. When 38143 this is not true, for example, with structs that have array fields 38144 or unions, the type machinery cannot tell how many bytes need to be 38145 allocated at each allocation. The 'variable_size' is used to mark 38146 such types. The type machinery then provides allocators that take 38147 a parameter indicating an exact size of object being allocated. 38148 Note that the size must be provided in bytes whereas the 'length' 38149 option works with array lengths in number of elements. 38150 38151 For example, 38152 struct GTY((variable_size)) sorted_fields_type { 38153 int len; 38154 tree GTY((length ("%h.len"))) elts[1]; 38155 }; 38156 38157 Then the objects of 'struct sorted_fields_type' are allocated in GC 38158 memory as follows: 38159 field_vec = ggc_alloc_sorted_fields_type (size); 38160 38161 If FIELD_VEC->ELTS stores N elements, then SIZE could be calculated 38162 as follows: 38163 size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree); 38164 38165 'atomic' 38166 38167 The 'atomic' option can only be used with pointers. It informs the 38168 GC machinery that the memory that the pointer points to does not 38169 contain any pointers, and hence it should be treated by the GC and 38170 PCH machinery as an "atomic" block of memory that does not need to 38171 be examined when scanning memory for pointers. In particular, the 38172 machinery will not scan that memory for pointers to mark them as 38173 reachable (when marking pointers for GC) or to relocate them (when 38174 writing a PCH file). 38175 38176 The 'atomic' option differs from the 'skip' option. 'atomic' keeps 38177 the memory under Garbage Collection, but makes the GC ignore the 38178 contents of the memory. 'skip' is more drastic in that it causes 38179 the pointer and the memory to be completely ignored by the Garbage 38180 Collector. So, memory marked as 'atomic' is automatically freed 38181 when no longer reachable, while memory marked as 'skip' is not. 38182 38183 The 'atomic' option must be used with great care, because all sorts 38184 of problem can occur if used incorrectly, that is, if the memory 38185 the pointer points to does actually contain a pointer. 38186 38187 Here is an example of how to use it: 38188 struct GTY(()) my_struct { 38189 int number_of_elements; 38190 unsigned int * GTY ((atomic)) elements; 38191 }; 38192 In this case, 'elements' is a pointer under GC, and the memory it 38193 points to needs to be allocated using the Garbage Collector, and 38194 will be freed automatically by the Garbage Collector when it is no 38195 longer referenced. But the memory that the pointer points to is an 38196 array of 'unsigned int' elements, and the GC must not try to scan 38197 it to find pointers to mark or relocate, which is why it is marked 38198 with the 'atomic' option. 38199 38200 Note that, currently, global variables can not be marked with 38201 'atomic'; only fields of a struct can. This is a known limitation. 38202 It would be useful to be able to mark global pointers with 'atomic' 38203 to make the PCH machinery aware of them so that they are saved and 38204 restored correctly to PCH files. 38205 38206 'special ("NAME")' 38207 38208 The 'special' option is used to mark types that have to be dealt 38209 with by special case machinery. The parameter is the name of the 38210 special case. See 'gengtype.c' for further details. Avoid adding 38211 new special cases unless there is no other alternative. 38212 38213 'user' 38214 38215 The 'user' option indicates that the code to mark structure fields 38216 is completely handled by user-provided routines. See section *note 38217 User GC:: for details on what functions need to be provided. 38218 38219 38220 File: gccint.info, Node: User GC, Next: GGC Roots, Prev: GTY Options, Up: Type Information 38221 38222 22.2 Support for user-provided GC marking routines 38223 ================================================== 38224 38225 The garbage collector supports types for which no automatic marking code 38226 is generated. For these types, the user is required to provide three 38227 functions: one to act as a marker for garbage collection, and two 38228 functions to act as marker and pointer walker for pre-compiled headers. 38229 38230 Given a structure 'struct GTY((user)) my_struct', the following 38231 functions should be defined to mark 'my_struct': 38232 38233 void gt_ggc_mx (my_struct *p) 38234 { 38235 /* This marks field 'fld'. */ 38236 gt_ggc_mx (p->fld); 38237 } 38238 38239 void gt_pch_nx (my_struct *p) 38240 { 38241 /* This marks field 'fld'. */ 38242 gt_pch_nx (tp->fld); 38243 } 38244 38245 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie) 38246 { 38247 /* For every field 'fld', call the given pointer operator. */ 38248 op (&(tp->fld), cookie); 38249 } 38250 38251 In general, each marker 'M' should call 'M' for every pointer field in 38252 the structure. Fields that are not allocated in GC or are not pointers 38253 must be ignored. 38254 38255 For embedded lists (e.g., structures with a 'next' or 'prev' pointer), 38256 the marker must follow the chain and mark every element in it. 38257 38258 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *, 38259 gt_pointer_operator, void *)' are slightly different. In this case, the 38260 operation 'op' must be applied to the _address_ of every pointer field. 38261 38262 22.2.1 User-provided marking routines for template types 38263 -------------------------------------------------------- 38264 38265 When a template type 'TP' is marked with 'GTY', all instances of that 38266 type are considered user-provided types. This means that the individual 38267 instances of 'TP' do not need to be marked with 'GTY'. The user needs 38268 to provide template functions to mark all the fields of the type. 38269 38270 The following code snippets represent all the functions that need to be 38271 provided. Note that type 'TP' may reference to more than one type. In 38272 these snippets, there is only one type 'T', but there could be more. 38273 38274 template<typename T> 38275 void gt_ggc_mx (TP<T> *tp) 38276 { 38277 extern void gt_ggc_mx (T&); 38278 38279 /* This marks field 'fld' of type 'T'. */ 38280 gt_ggc_mx (tp->fld); 38281 } 38282 38283 template<typename T> 38284 void gt_pch_nx (TP<T> *tp) 38285 { 38286 extern void gt_pch_nx (T&); 38287 38288 /* This marks field 'fld' of type 'T'. */ 38289 gt_pch_nx (tp->fld); 38290 } 38291 38292 template<typename T> 38293 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie) 38294 { 38295 /* For every field 'fld' of 'tp' with type 'T *', call the given 38296 pointer operator. */ 38297 op (&(tp->fld), cookie); 38298 } 38299 38300 template<typename T> 38301 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie) 38302 { 38303 extern void gt_pch_nx (T *, gt_pointer_operator, void *); 38304 38305 /* For every field 'fld' of 'tp' with type 'T', call the pointer 38306 walker for all the fields of T. */ 38307 gt_pch_nx (&(tp->fld), op, cookie); 38308 } 38309 38310 Support for user-defined types is currently limited. The following 38311 restrictions apply: 38312 38313 1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'. 38314 38315 2. Type 'TP' can only have type names in its argument list. 38316 38317 3. The pointer walker functions are different for 'TP<T>' and 'TP<T 38318 *>'. In the case of 'TP<T>', references to 'T' must be handled by 38319 calling 'gt_pch_nx' (which will, in turn, walk all the pointers 38320 inside fields of 'T'). In the case of 'TP<T *>', references to 'T 38321 *' must be handled by calling the 'op' function on the address of 38322 the pointer (see the code snippets above). 38323 38324 38325 File: gccint.info, Node: GGC Roots, Next: Files, Prev: User GC, Up: Type Information 38326 38327 22.3 Marking Roots for the Garbage Collector 38328 ============================================ 38329 38330 In addition to keeping track of types, the type machinery also locates 38331 the global variables ("roots") that the garbage collector starts at. 38332 Roots must be declared using one of the following syntaxes: 38333 38334 * 'extern GTY(([OPTIONS])) TYPE NAME;' 38335 * 'static GTY(([OPTIONS])) TYPE NAME;' 38336 The syntax 38337 * 'GTY(([OPTIONS])) TYPE NAME;' 38338 is _not_ accepted. There should be an 'extern' declaration of such a 38339 variable in a header somewhere--mark that, not the definition. Or, if 38340 the variable is only used in one file, make it 'static'. 38341 38342 38343 File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 38344 38345 22.4 Source Files Containing Type Information 38346 ============================================= 38347 38348 Whenever you add 'GTY' markers to a source file that previously had 38349 none, or create a new source file containing 'GTY' markers, there are 38350 three things you need to do: 38351 38352 1. You need to add the file to the list of source files the type 38353 machinery scans. There are four cases: 38354 38355 a. For a back-end file, this is usually done automatically; if 38356 not, you should add it to 'target_gtfiles' in the appropriate 38357 port's entries in 'config.gcc'. 38358 38359 b. For files shared by all front ends, add the filename to the 38360 'GTFILES' variable in 'Makefile.in'. 38361 38362 c. For files that are part of one front end, add the filename to 38363 the 'gtfiles' variable defined in the appropriate 38364 'config-lang.in'. Headers should appear before non-headers in 38365 this list. 38366 38367 d. For files that are part of some but not all front ends, add 38368 the filename to the 'gtfiles' variable of _all_ the front ends 38369 that use it. 38370 38371 2. If the file was a header file, you'll need to check that it's 38372 included in the right place to be visible to the generated files. 38373 For a back-end header file, this should be done automatically. For 38374 a front-end header file, it needs to be included by the same file 38375 that includes 'gtype-LANG.h'. For other header files, it needs to 38376 be included in 'gtype-desc.c', which is a generated file, so add it 38377 to 'ifiles' in 'open_base_file' in 'gengtype.c'. 38378 38379 For source files that aren't header files, the machinery will 38380 generate a header file that should be included in the source file 38381 you just changed. The file will be called 'gt-PATH.h' where PATH 38382 is the pathname relative to the 'gcc' directory with slashes 38383 replaced by -, so for example the header file to be included in 38384 'cp/parser.c' is called 'gt-cp-parser.c'. The generated header 38385 file should be included after everything else in the source file. 38386 Don't forget to mention this file as a dependency in the 38387 'Makefile'! 38388 38389 For language frontends, there is another file that needs to be included 38390 somewhere. It will be called 'gtype-LANG.h', where LANG is the name of 38391 the subdirectory the language is contained in. 38392 38393 Plugins can add additional root tables. Run the 'gengtype' utility in 38394 plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 38395 with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H 38396 file. The GCC build tree is needed to be present in that mode. 38397 38398 38399 File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting, Prev: Files, Up: Type Information 38400 38401 22.5 How to invoke the garbage collector 38402 ======================================== 38403 38404 The GCC garbage collector GGC is only invoked explicitly. In contrast 38405 with many other garbage collectors, it is not implicitly invoked by 38406 allocation routines when a lot of memory has been consumed. So the only 38407 way to have GGC reclaim storage is to call the 'ggc_collect' function 38408 explicitly. This call is an expensive operation, as it may have to scan 38409 the entire heap. Beware that local variables (on the GCC call stack) 38410 are not followed by such an invocation (as many other garbage collectors 38411 do): you should reference all your data from static or external 'GTY'-ed 38412 variables, and it is advised to call 'ggc_collect' with a shallow call 38413 stack. The GGC is an exact mark and sweep garbage collector (so it does 38414 not scan the call stack for pointers). In practice GCC passes don't 38415 often call 'ggc_collect' themselves, because it is called by the pass 38416 manager between passes. 38417 38418 At the time of the 'ggc_collect' call all pointers in the GC-marked 38419 structures must be valid or 'NULL'. In practice this means that there 38420 should not be uninitialized pointer fields in the structures even if 38421 your code never reads or writes those fields at a particular instance. 38422 One way to ensure this is to use cleared versions of allocators unless 38423 all the fields are initialized manually immediately after allocation. 38424 38425 38426 File: gccint.info, Node: Troubleshooting, Prev: Invoking the garbage collector, Up: Type Information 38427 38428 22.6 Troubleshooting the garbage collector 38429 ========================================== 38430 38431 With the current garbage collector implementation, most issues should 38432 show up as GCC compilation errors. Some of the most commonly 38433 encountered issues are described below. 38434 38435 * Gengtype does not produce allocators for a 'GTY'-marked type. 38436 Gengtype checks if there is at least one possible path from GC 38437 roots to at least one instance of each type before outputting 38438 allocators. If there is no such path, the 'GTY' markers will be 38439 ignored and no allocators will be output. Solve this by making 38440 sure that there exists at least one such path. If creating it is 38441 unfeasible or raises a "code smell", consider if you really must 38442 use GC for allocating such type. 38443 38444 * Link-time errors about undefined 'gt_ggc_r_foo_bar' and 38445 similarly-named symbols. Check if your 'foo_bar' source file has 38446 '#include "gt-foo_bar.h"' as its very last line. 38447 38448 38449 File: gccint.info, Node: Plugins, Next: LTO, Prev: Type Information, Up: Top 38450 38451 23 Plugins 38452 ********** 38453 38454 GCC plugin is a loadable module that provides extra features to the 38455 compiler, which they can further pass around as a shareable module. 38456 38457 GCC plugins provide developers with a rich subset of the GCC API to 38458 allow them to extend GCC as they see fit. Whether it is writing an 38459 additional optimization pass, transforming code, or analyzing 38460 information, plugins can be quite useful. 38461 38462 * Menu: 38463 38464 * Plugins loading:: How can we load plugins. 38465 * Plugin API:: The APIs for plugins. 38466 * Plugins pass:: How a plugin interact with the pass manager. 38467 * Plugins GC:: How a plugin Interact with GCC Garbage Collector. 38468 * Plugins description:: Giving information about a plugin itself. 38469 * Plugins attr:: Registering custom attributes or pragmas. 38470 * Plugins recording:: Recording information about pass execution. 38471 * Plugins gate:: Controlling which passes are being run. 38472 * Plugins tracking:: Keeping track of available passes. 38473 * Plugins building:: How can we build a plugin. 38474 38475 38476 File: gccint.info, Node: Plugins loading, Next: Plugin API, Up: Plugins 38477 38478 23.1 Loading Plugins 38479 ==================== 38480 38481 Plugins are supported on platforms that support '-ldl -rdynamic'. They 38482 are loaded by the compiler using 'dlopen' and invoked at pre-determined 38483 locations in the compilation process. 38484 38485 Plugins are loaded with 38486 38487 '-fplugin=/path/to/NAME.so' '-fplugin-arg-NAME-KEY1[=VALUE1]' 38488 38489 The plugin arguments are parsed by GCC and passed to respective plugins 38490 as key-value pairs. Multiple plugins can be invoked by specifying 38491 multiple '-fplugin' arguments. 38492 38493 A plugin can be simply given by its short name (no dots or slashes). 38494 When simply passing '-fplugin=NAME', the plugin is loaded from the 38495 'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc 38496 -print-file-name=plugin`/NAME.so', using backquote shell syntax to query 38497 the 'plugin' directory. 38498 38499 38500 File: gccint.info, Node: Plugin API, Next: Plugins pass, Prev: Plugins loading, Up: Plugins 38501 38502 23.2 Plugin API 38503 =============== 38504 38505 Plugins are activated by the compiler at specific events as defined in 38506 'gcc-plugin.h'. For each event of interest, the plugin should call 38507 'register_callback' specifying the name of the event and address of the 38508 callback function that will handle that event. 38509 38510 The header 'gcc-plugin.h' must be the first gcc header to be included. 38511 38512 23.2.1 Plugin license check 38513 --------------------------- 38514 38515 Every plugin should define the global symbol 'plugin_is_GPL_compatible' 38516 to assert that it has been licensed under a GPL-compatible license. If 38517 this symbol does not exist, the compiler will emit a fatal error and 38518 exit with the error message: 38519 38520 fatal error: plugin NAME is not licensed under a GPL-compatible license 38521 NAME: undefined symbol: plugin_is_GPL_compatible 38522 compilation terminated 38523 38524 The declared type of the symbol should be int, to match a forward 38525 declaration in 'gcc-plugin.h' that suppresses C++ mangling. It does not 38526 need to be in any allocated section, though. The compiler merely 38527 asserts that the symbol exists in the global scope. Something like this 38528 is enough: 38529 38530 int plugin_is_GPL_compatible; 38531 38532 23.2.2 Plugin initialization 38533 ---------------------------- 38534 38535 Every plugin should export a function called 'plugin_init' that is 38536 called right after the plugin is loaded. This function is responsible 38537 for registering all the callbacks required by the plugin and do any 38538 other required initialization. 38539 38540 This function is called from 'compile_file' right before invoking the 38541 parser. The arguments to 'plugin_init' are: 38542 38543 * 'plugin_info': Plugin invocation information. 38544 * 'version': GCC version. 38545 38546 The 'plugin_info' struct is defined as follows: 38547 38548 struct plugin_name_args 38549 { 38550 char *base_name; /* Short name of the plugin 38551 (filename without .so suffix). */ 38552 const char *full_name; /* Path to the plugin as specified with 38553 -fplugin=. */ 38554 int argc; /* Number of arguments specified with 38555 -fplugin-arg-.... */ 38556 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 38557 const char *version; /* Version string provided by plugin. */ 38558 const char *help; /* Help string provided by plugin. */ 38559 } 38560 38561 If initialization fails, 'plugin_init' must return a non-zero value. 38562 Otherwise, it should return 0. 38563 38564 The version of the GCC compiler loading the plugin is described by the 38565 following structure: 38566 38567 struct plugin_gcc_version 38568 { 38569 const char *basever; 38570 const char *datestamp; 38571 const char *devphase; 38572 const char *revision; 38573 const char *configuration_arguments; 38574 }; 38575 38576 The function 'plugin_default_version_check' takes two pointers to such 38577 structure and compare them field by field. It can be used by the 38578 plugin's 'plugin_init' function. 38579 38580 The version of GCC used to compile the plugin can be found in the 38581 symbol 'gcc_version' defined in the header 'plugin-version.h'. The 38582 recommended version check to perform looks like 38583 38584 #include "plugin-version.h" 38585 ... 38586 38587 int 38588 plugin_init (struct plugin_name_args *plugin_info, 38589 struct plugin_gcc_version *version) 38590 { 38591 if (!plugin_default_version_check (version, &gcc_version)) 38592 return 1; 38593 38594 } 38595 38596 but you can also check the individual fields if you want a less strict 38597 check. 38598 38599 23.2.3 Plugin callbacks 38600 ----------------------- 38601 38602 Callback functions have the following prototype: 38603 38604 /* The prototype for a plugin callback function. 38605 gcc_data - event-specific data provided by GCC 38606 user_data - plugin-specific data provided by the plug-in. */ 38607 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 38608 38609 Callbacks can be invoked at the following pre-determined events: 38610 38611 enum plugin_event 38612 { 38613 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 38614 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 38615 PLUGIN_FINISH_DECL, /* After finishing parsing a declaration. */ 38616 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 38617 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 38618 PLUGIN_FINISH, /* Called before GCC exits. */ 38619 PLUGIN_INFO, /* Information about the plugin. */ 38620 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 38621 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 38622 PLUGIN_GGC_END, /* Called at end of GGC. */ 38623 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 38624 PLUGIN_REGISTER_GGC_CACHES, /* Register an extra GGC cache table. */ 38625 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 38626 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 38627 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 38628 /* Called before first pass from all_passes. */ 38629 PLUGIN_ALL_PASSES_START, 38630 /* Called after last pass from all_passes. */ 38631 PLUGIN_ALL_PASSES_END, 38632 /* Called before first ipa pass. */ 38633 PLUGIN_ALL_IPA_PASSES_START, 38634 /* Called after last ipa pass. */ 38635 PLUGIN_ALL_IPA_PASSES_END, 38636 /* Allows to override pass gate decision for current_pass. */ 38637 PLUGIN_OVERRIDE_GATE, 38638 /* Called before executing a pass. */ 38639 PLUGIN_PASS_EXECUTION, 38640 /* Called before executing subpasses of a GIMPLE_PASS in 38641 execute_ipa_pass_list. */ 38642 PLUGIN_EARLY_GIMPLE_PASSES_START, 38643 /* Called after executing subpasses of a GIMPLE_PASS in 38644 execute_ipa_pass_list. */ 38645 PLUGIN_EARLY_GIMPLE_PASSES_END, 38646 /* Called when a pass is first instantiated. */ 38647 PLUGIN_NEW_PASS, 38648 38649 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 38650 array. */ 38651 }; 38652 38653 In addition, plugins can also look up the enumerator of a named event, 38654 and / or generate new events dynamically, by calling the function 38655 'get_named_event_id'. 38656 38657 To register a callback, the plugin calls 'register_callback' with the 38658 arguments: 38659 38660 * 'char *name': Plugin name. 38661 * 'int event': The event code. 38662 * 'plugin_callback_func callback': The function that handles 'event'. 38663 * 'void *user_data': Pointer to plugin-specific data. 38664 38665 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, 38666 PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events 38667 the 'callback' should be null, and the 'user_data' is specific. 38668 38669 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data 38670 from GCC), plugins may register their own pragmas using functions like 38671 'c_register_pragma' or 'c_register_pragma_with_expansion'. 38672 38673 38674 File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, Up: Plugins 38675 38676 23.3 Interacting with the pass manager 38677 ====================================== 38678 38679 There needs to be a way to add/reorder/remove passes dynamically. This 38680 is useful for both analysis plugins (plugging in after a certain pass 38681 such as CFG or an IPA pass) and optimization plugins. 38682 38683 Basic support for inserting new passes or replacing existing passes is 38684 provided. A plugin registers a new pass with GCC by calling 38685 'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a 38686 pointer to a 'struct register_pass_info' object defined as follows 38687 38688 enum pass_positioning_ops 38689 { 38690 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 38691 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 38692 PASS_POS_REPLACE // Replace the reference pass. 38693 }; 38694 38695 struct register_pass_info 38696 { 38697 struct opt_pass *pass; /* New pass provided by the plugin. */ 38698 const char *reference_pass_name; /* Name of the reference pass for hooking 38699 up the new pass. */ 38700 int ref_pass_instance_number; /* Insert the pass at the specified 38701 instance number of the reference pass. */ 38702 /* Do it for every instance if it is 0. */ 38703 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 38704 }; 38705 38706 38707 /* Sample plugin code that registers a new pass. */ 38708 int 38709 plugin_init (struct plugin_name_args *plugin_info, 38710 struct plugin_gcc_version *version) 38711 { 38712 struct register_pass_info pass_info; 38713 38714 ... 38715 38716 /* Code to fill in the pass_info object with new pass information. */ 38717 38718 ... 38719 38720 /* Register the new pass. */ 38721 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 38722 38723 ... 38724 } 38725 38726 38727 File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins pass, Up: Plugins 38728 38729 23.4 Interacting with the GCC Garbage Collector 38730 =============================================== 38731 38732 Some plugins may want to be informed when GGC (the GCC Garbage 38733 Collector) is running. They can register callbacks for the 38734 'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback 38735 is called with a null 'gcc_data') to be notified of the start or end of 38736 the GCC garbage collection. 38737 38738 Some plugins may need to have GGC mark additional data. This can be 38739 done by registering a callback (called with a null 'gcc_data') for the 38740 'PLUGIN_GGC_MARKING' event. Such callbacks can call the 'ggc_set_mark' 38741 routine, preferably through the 'ggc_mark' macro (and conversely, these 38742 routines should usually not be used in plugins outside of the 38743 'PLUGIN_GGC_MARKING' event). 38744 38745 Some plugins may need to add extra GGC root tables, e.g. to handle 38746 their own 'GTY'-ed data. This can be done with the 38747 'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 38748 extra root table (of type 'struct ggc_root_tab*') as 'user_data'. 38749 Plugins that want to use the 'if_marked' hash table option can add the 38750 extra GGC cache tables generated by 'gengtype' using the 38751 'PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the 38752 extra cache table (of type 'struct ggc_cache_tab*') as 'user_data'. 38753 Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 38754 generates these extra root tables. 38755 38756 You should understand the details of memory management inside GCC 38757 before using 'PLUGIN_GGC_MARKING', 'PLUGIN_REGISTER_GGC_ROOTS' or 38758 'PLUGIN_REGISTER_GGC_CACHES'. 38759 38760 38761 File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugins GC, Up: Plugins 38762 38763 23.5 Giving information about a plugin 38764 ====================================== 38765 38766 A plugin should give some information to the user about itself. This 38767 uses the following structure: 38768 38769 struct plugin_info 38770 { 38771 const char *version; 38772 const char *help; 38773 }; 38774 38775 Such a structure is passed as the 'user_data' by the plugin's init 38776 routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event 38777 and a null callback. 38778 38779 38780 File: gccint.info, Node: Plugins attr, Next: Plugins recording, Prev: Plugins description, Up: Plugins 38781 38782 23.6 Registering custom attributes or pragmas 38783 ============================================= 38784 38785 For analysis (or other) purposes it is useful to be able to add custom 38786 attributes or pragmas. 38787 38788 The 'PLUGIN_ATTRIBUTES' callback is called during attribute 38789 registration. Use the 'register_attribute' function to register custom 38790 attributes. 38791 38792 /* Attribute handler callback */ 38793 static tree 38794 handle_user_attribute (tree *node, tree name, tree args, 38795 int flags, bool *no_add_attrs) 38796 { 38797 return NULL_TREE; 38798 } 38799 38800 /* Attribute definition */ 38801 static struct attribute_spec user_attr = 38802 { "user", 1, 1, false, false, false, handle_user_attribute, false }; 38803 38804 /* Plugin callback called during attribute registration. 38805 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 38806 */ 38807 static void 38808 register_attributes (void *event_data, void *data) 38809 { 38810 warning (0, G_("Callback to register attributes")); 38811 register_attribute (&user_attr); 38812 } 38813 38814 38815 The 'PLUGIN_PRAGMAS' callback is called during pragmas registration. 38816 Use the 'c_register_pragma' or 'c_register_pragma_with_expansion' 38817 functions to register custom pragmas. 38818 38819 /* Plugin callback called during pragmas registration. Registered with 38820 register_callback (plugin_name, PLUGIN_PRAGMAS, 38821 register_my_pragma, NULL); 38822 */ 38823 static void 38824 register_my_pragma (void *event_data, void *data) 38825 { 38826 warning (0, G_("Callback to register pragmas")); 38827 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 38828 } 38829 38830 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your 38831 plugin) as the "space" argument of your pragma. 38832 38833 38834 File: gccint.info, Node: Plugins recording, Next: Plugins gate, Prev: Plugins attr, Up: Plugins 38835 38836 23.7 Recording information about pass execution 38837 =============================================== 38838 38839 The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 38840 (the same as current_pass) as 'gcc_data' to the callback. You can also 38841 inspect cfun to find out about which function this pass is executed for. 38842 Note that this event will only be invoked if the gate check (if 38843 applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 38844 other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END', 38845 'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END', 38846 'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 38847 'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 38848 plugin(s) in order to get context for the pass execution. 38849 38850 38851 File: gccint.info, Node: Plugins gate, Next: Plugins tracking, Prev: Plugins recording, Up: Plugins 38852 38853 23.8 Controlling which passes are being run 38854 =========================================== 38855 38856 After the original gate function for a pass is called, its result - the 38857 gate status - is stored as an integer. Then the event 38858 'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 38859 the 'gcc_data' parameter to the callback function. A nonzero value of 38860 the gate status means that the pass is to be executed. You can both 38861 read and write the gate status via the passed pointer. 38862 38863 38864 File: gccint.info, Node: Plugins tracking, Next: Plugins building, Prev: Plugins gate, Up: Plugins 38865 38866 23.9 Keeping track of available passes 38867 ====================================== 38868 38869 When your plugin is loaded, you can inspect the various pass lists to 38870 determine what passes are available. However, other plugins might add 38871 new passes. Also, future changes to GCC might cause generic passes to 38872 be added after plugin loading. When a pass is first added to one of the 38873 pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback 38874 parameter 'gcc_data' pointing to the new pass. 38875 38876 38877 File: gccint.info, Node: Plugins building, Prev: Plugins tracking, Up: Plugins 38878 38879 23.10 Building GCC plugins 38880 ========================== 38881 38882 If plugins are enabled, GCC installs the headers needed to build a 38883 plugin (somewhere in the installation tree, e.g. under '/usr/local'). 38884 In particular a 'plugin/include' directory is installed, containing all 38885 the header files needed to build plugins. 38886 38887 On most systems, you can query this 'plugin' directory by invoking 'gcc 38888 -print-file-name=plugin' (replace if needed 'gcc' with the appropriate 38889 program path). 38890 38891 Inside plugins, this 'plugin' directory name can be queried by calling 38892 'default_plugin_dir_name ()'. 38893 38894 Plugins may know, when they are compiled, the GCC version for which 38895 'plugin-version.h' is provided. The constant macros 38896 'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR', 38897 'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers, 38898 so a plugin could ensure it is built for GCC 4.7 with 38899 #if GCCPLUGIN_VERSION != 4007 38900 #error this GCC plugin is for GCC 4.7 38901 #endif 38902 38903 The following GNU Makefile excerpt shows how to build a simple plugin: 38904 38905 GCC=gcc 38906 PLUGIN_SOURCE_FILES= plugin1.c plugin2.c 38907 PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES)) 38908 GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin) 38909 CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2 38910 38911 plugin.so: $(PLUGIN_OBJECT_FILES) 38912 $(GCC) -shared $^ -o $@ 38913 38914 A single source file plugin may be built with 'gcc -I`gcc 38915 -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o 38916 plugin.so', using backquote shell syntax to query the 'plugin' 38917 directory. 38918 38919 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and 38920 'gtype.state' have the same version as the GCC for which the plugin is 38921 built. 38922 38923 38924 File: gccint.info, Node: LTO, Next: Funding, Prev: Plugins, Up: Top 38925 38926 24 Link Time Optimization 38927 ************************* 38928 38929 Link Time Optimization (LTO) gives GCC the capability of dumping its 38930 internal representation (GIMPLE) to disk, so that all the different 38931 compilation units that make up a single executable can be optimized as a 38932 single module. This expands the scope of inter-procedural optimizations 38933 to encompass the whole program (or, rather, everything that is visible 38934 at link time). 38935 38936 * Menu: 38937 38938 * LTO Overview:: Overview of LTO. 38939 * LTO object file layout:: LTO file sections in ELF. 38940 * IPA:: Using summary information in IPA passes. 38941 * WHOPR:: Whole program assumptions, 38942 linker plugin and symbol visibilities. 38943 * Internal flags:: Internal flags controlling 'lto1'. 38944 38945 38946 File: gccint.info, Node: LTO Overview, Next: LTO object file layout, Up: LTO 38947 38948 24.1 Design Overview 38949 ==================== 38950 38951 Link time optimization is implemented as a GCC front end for a bytecode 38952 representation of GIMPLE that is emitted in special sections of '.o' 38953 files. Currently, LTO support is enabled in most ELF-based systems, as 38954 well as darwin, cygwin and mingw systems. 38955 38956 Since GIMPLE bytecode is saved alongside final object code, object 38957 files generated with LTO support are larger than regular object files. 38958 This "fat" object format makes it easy to integrate LTO into existing 38959 build systems, as one can, for instance, produce archives of the files. 38960 Additionally, one might be able to ship one set of fat objects which 38961 could be used both for development and the production of optimized 38962 builds. A, perhaps surprising, side effect of this feature is that any 38963 mistake in the toolchain that leads to LTO information not being used 38964 (e.g. an older 'libtool' calling 'ld' directly). This is both an 38965 advantage, as the system is more robust, and a disadvantage, as the user 38966 is not informed that the optimization has been disabled. 38967 38968 The current implementation only produces "fat" objects, effectively 38969 doubling compilation time and increasing file sizes up to 5x the 38970 original size. This hides the problem that some tools, such as 'ar' and 38971 'nm', need to understand symbol tables of LTO sections. These tools 38972 were extended to use the plugin infrastructure, and with these problems 38973 solved, GCC will also support "slim" objects consisting of the 38974 intermediate code alone. 38975 38976 At the highest level, LTO splits the compiler in two. The first half 38977 (the "writer") produces a streaming representation of all the internal 38978 data structures needed to optimize and generate code. This includes 38979 declarations, types, the callgraph and the GIMPLE representation of 38980 function bodies. 38981 38982 When '-flto' is given during compilation of a source file, the pass 38983 manager executes all the passes in 'all_lto_gen_passes'. Currently, 38984 this phase is composed of two IPA passes: 38985 38986 * 'pass_ipa_lto_gimple_out' This pass executes the function 38987 'lto_output' in 'lto-streamer-out.c', which traverses the call 38988 graph encoding every reachable declaration, type and function. 38989 This generates a memory representation of all the file sections 38990 described below. 38991 38992 * 'pass_ipa_lto_finish_out' This pass executes the function 38993 'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the 38994 memory image built in the previous pass and encodes it in the 38995 corresponding ELF file sections. 38996 38997 The second half of LTO support is the "reader". This is implemented as 38998 the GCC front end 'lto1' in 'lto/lto.c'. When 'collect2' detects a link 38999 set of '.o'/'.a' files with LTO information and the '-flto' is enabled, 39000 it invokes 'lto1' which reads the set of files and aggregates them into 39001 a single translation unit for optimization. The main entry point for 39002 the reader is 'lto/lto.c':'lto_main'. 39003 39004 24.1.1 LTO modes of operation 39005 ----------------------------- 39006 39007 One of the main goals of the GCC link-time infrastructure was to allow 39008 effective compilation of large programs. For this reason GCC implements 39009 two link-time compilation modes. 39010 39011 1. _LTO mode_, in which the whole program is read into the compiler at 39012 link-time and optimized in a similar way as if it were a single 39013 source-level compilation unit. 39014 39015 2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs 39016 and/or a distributed compilation environment to quickly link large 39017 applications. WHOPR stands for WHOle Program optimizeR (not to be 39018 confused with the semantics of '-fwhole-program'). It partitions 39019 the aggregated callgraph from many different '.o' files and 39020 distributes the compilation of the sub-graphs to different CPUs. 39021 39022 Note that distributed compilation is not implemented yet, but since 39023 the parallelism is facilitated via generating a 'Makefile', it 39024 would be easy to implement. 39025 39026 WHOPR splits LTO into three main stages: 39027 1. Local generation (LGEN) This stage executes in parallel. Every 39028 file in the program is compiled into the intermediate language and 39029 packaged together with the local call-graph and summary 39030 information. This stage is the same for both the LTO and WHOPR 39031 compilation mode. 39032 39033 2. Whole Program Analysis (WPA) WPA is performed sequentially. The 39034 global call-graph is generated, and a global analysis procedure 39035 makes transformation decisions. The global call-graph is 39036 partitioned to facilitate parallel optimization during phase 3. 39037 The results of the WPA stage are stored into new object files which 39038 contain the partitions of program expressed in the intermediate 39039 language and the optimization decisions. 39040 39041 3. Local transformations (LTRANS) This stage executes in parallel. 39042 All the decisions made during phase 2 are implemented locally in 39043 each partitioned object file, and the final object code is 39044 generated. Optimizations which cannot be decided efficiently 39045 during the phase 2 may be performed on the local call-graph 39046 partitions. 39047 39048 WHOPR can be seen as an extension of the usual LTO mode of compilation. 39049 In LTO, WPA and LTRANS are executed within a single execution of the 39050 compiler, after the whole program has been read into memory. 39051 39052 When compiling in WHOPR mode, the callgraph is partitioned during the 39053 WPA stage. The whole program is split into a given number of partitions 39054 of roughly the same size. The compiler tries to minimize the number of 39055 references which cross partition boundaries. The main advantage of 39056 WHOPR is to allow the parallel execution of LTRANS stages, which are the 39057 most time-consuming part of the compilation process. Additionally, it 39058 avoids the need to load the whole program into memory. 39059 39060 39061 File: gccint.info, Node: LTO object file layout, Next: IPA, Prev: LTO Overview, Up: LTO 39062 39063 24.2 LTO file sections 39064 ====================== 39065 39066 LTO information is stored in several ELF sections inside object files. 39067 Data structures and enum codes for sections are defined in 39068 'lto-streamer.h'. 39069 39070 These sections are emitted from 'lto-streamer-out.c' and mapped in all 39071 at once from 'lto/lto.c':'lto_file_read'. The individual functions 39072 dealing with the reading/writing of each section are described below. 39073 39074 * Command line options ('.gnu.lto_.opts') 39075 39076 This section contains the command line options used to generate the 39077 object files. This is used at link time to determine the 39078 optimization level and other settings when they are not explicitly 39079 specified at the linker command line. 39080 39081 Currently, GCC does not support combining LTO object files compiled 39082 with different set of the command line options into a single 39083 binary. At link time, the options given on the command line and 39084 the options saved on all the files in a link-time set are applied 39085 globally. No attempt is made at validating the combination of 39086 flags (other than the usual validation done by option processing). 39087 This is implemented in 'lto/lto.c':'lto_read_all_file_options'. 39088 39089 * Symbol table ('.gnu.lto_.symtab') 39090 39091 This table replaces the ELF symbol table for functions and 39092 variables represented in the LTO IL. Symbols used and exported by 39093 the optimized assembly code of "fat" objects might not match the 39094 ones used and exported by the intermediate code. This table is 39095 necessary because the intermediate code is less optimized and thus 39096 requires a separate symbol table. 39097 39098 Additionally, the binary code in the "fat" object will lack a call 39099 to a function, since the call was optimized out at compilation time 39100 after the intermediate language was streamed out. In some special 39101 cases, the same optimization may not happen during link-time 39102 optimization. This would lead to an undefined symbol if only one 39103 symbol table was used. 39104 39105 The symbol table is emitted in 39106 'lto-streamer-out.c':'produce_symtab'. 39107 39108 * Global declarations and types ('.gnu.lto_.decls') 39109 39110 This section contains an intermediate language dump of all 39111 declarations and types required to represent the callgraph, static 39112 variables and top-level debug info. 39113 39114 The contents of this section are emitted in 39115 'lto-streamer-out.c':'produce_asm_for_decls'. Types and symbols 39116 are emitted in a topological order that preserves the sharing of 39117 pointers when the file is read back in 39118 ('lto.c':'read_cgraph_and_symbols'). 39119 39120 * The callgraph ('.gnu.lto_.cgraph') 39121 39122 This section contains the basic data structure used by the GCC 39123 inter-procedural optimization infrastructure. This section stores 39124 an annotated multi-graph which represents the functions and call 39125 sites as well as the variables, aliases and top-level 'asm' 39126 statements. 39127 39128 This section is emitted in 'lto-streamer-out.c':'output_cgraph' and 39129 read in 'lto-cgraph.c':'input_cgraph'. 39130 39131 * IPA references ('.gnu.lto_.refs') 39132 39133 This section contains references between function and static 39134 variables. It is emitted by 'lto-cgraph.c':'output_refs' and read 39135 by 'lto-cgraph.c':'input_refs'. 39136 39137 * Function bodies ('.gnu.lto_.function_body.<name>') 39138 39139 This section contains function bodies in the intermediate language 39140 representation. Every function body is in a separate section to 39141 allow copying of the section independently to different object 39142 files or reading the function on demand. 39143 39144 Functions are emitted in 'lto-streamer-out.c':'output_function' and 39145 read in 'lto-streamer-in.c':'input_function'. 39146 39147 * Static variable initializers ('.gnu.lto_.vars') 39148 39149 This section contains all the symbols in the global variable pool. 39150 It is emitted by 'lto-cgraph.c':'output_varpool' and read in 39151 'lto-cgraph.c':'input_cgraph'. 39152 39153 * Summaries and optimization summaries used by IPA passes 39154 ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst' 39155 or 'reference') 39156 39157 These sections are used by IPA passes that need to emit summary 39158 information during LTO generation to be read and aggregated at link 39159 time. Each pass is responsible for implementing two pass manager 39160 hooks: one for writing the summary and another for reading it in. 39161 The format of these sections is entirely up to each individual 39162 pass. The only requirement is that the writer and reader hooks 39163 agree on the format. 39164 39165 39166 File: gccint.info, Node: IPA, Next: WHOPR, Prev: LTO object file layout, Up: LTO 39167 39168 24.3 Using summary information in IPA passes 39169 ============================================ 39170 39171 Programs are represented internally as a _callgraph_ (a multi-graph 39172 where nodes are functions and edges are call sites) and a _varpool_ (a 39173 list of static and external variables in the program). 39174 39175 The inter-procedural optimization is organized as a sequence of 39176 individual passes, which operate on the callgraph and the varpool. To 39177 make the implementation of WHOPR possible, every inter-procedural 39178 optimization pass is split into several stages that are executed at 39179 different times during WHOPR compilation: 39180 39181 * LGEN time 39182 1. _Generate summary_ ('generate_summary' in 'struct 39183 ipa_opt_pass_d'). This stage analyzes every function body and 39184 variable initializer is examined and stores relevant 39185 information into a pass-specific data structure. 39186 39187 2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d'). 39188 This stage writes all the pass-specific information generated 39189 by 'generate_summary'. Summaries go into their own 39190 'LTO_section_*' sections that have to be declared in 39191 'lto-streamer.h':'enum lto_section_type'. A new section is 39192 created by calling 'create_output_block' and data can be 39193 written using the 'lto_output_*' routines. 39194 39195 * WPA time 39196 1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d'). 39197 This stage reads all the pass-specific information in exactly 39198 the same order that it was written by 'write_summary'. 39199 39200 2. _Execute_ ('execute' in 'struct opt_pass'). This performs 39201 inter-procedural propagation. This must be done without 39202 actual access to the individual function bodies or variable 39203 initializers. Typically, this results in a transitive closure 39204 operation over the summary information of all the nodes in the 39205 callgraph. 39206 39207 3. _Write optimization summary_ ('write_optimization_summary' in 39208 'struct ipa_opt_pass_d'). This writes the result of the 39209 inter-procedural propagation into the object file. This can 39210 use the same data structures and helper routines used in 39211 'write_summary'. 39212 39213 * LTRANS time 39214 1. _Read optimization summary_ ('read_optimization_summary' in 39215 'struct ipa_opt_pass_d'). The counterpart to 39216 'write_optimization_summary'. This reads the interprocedural 39217 optimization decisions in exactly the same format emitted by 39218 'write_optimization_summary'. 39219 39220 2. _Transform_ ('function_transform' and 'variable_transform' in 39221 'struct ipa_opt_pass_d'). The actual function bodies and 39222 variable initializers are updated based on the information 39223 passed down from the _Execute_ stage. 39224 39225 The implementation of the inter-procedural passes are shared between 39226 LTO, WHOPR and classic non-LTO compilation. 39227 39228 * During the traditional file-by-file mode every pass executes its 39229 own _Generate summary_, _Execute_, and _Transform_ stages within 39230 the single execution context of the compiler. 39231 39232 * In LTO compilation mode, every pass uses _Generate summary_ and 39233 _Write summary_ stages at compilation time, while the _Read 39234 summary_, _Execute_, and _Transform_ stages are executed at link 39235 time. 39236 39237 * In WHOPR mode all stages are used. 39238 39239 To simplify development, the GCC pass manager differentiates between 39240 normal inter-procedural passes and small inter-procedural passes. A 39241 _small inter-procedural pass_ ('SIMPLE_IPA_PASS') is a pass that does 39242 everything at once and thus it can not be executed during WPA in WHOPR 39243 mode. It defines only the _Execute_ stage and during this stage it 39244 accesses and modifies the function bodies. Such passes are useful for 39245 optimization at LGEN or LTRANS time and are used, for example, to 39246 implement early optimization before writing object files. The simple 39247 inter-procedural passes can also be used for easier prototyping and 39248 development of a new inter-procedural pass. 39249 39250 24.3.1 Virtual clones 39251 --------------------- 39252 39253 One of the main challenges of introducing the WHOPR compilation mode was 39254 addressing the interactions between optimization passes. In LTO 39255 compilation mode, the passes are executed in a sequence, each of which 39256 consists of analysis (or _Generate summary_), propagation (or _Execute_) 39257 and _Transform_ stages. Once the work of one pass is finished, the next 39258 pass sees the updated program representation and can execute. This 39259 makes the individual passes dependent on each other. 39260 39261 In WHOPR mode all passes first execute their _Generate summary_ stage. 39262 Then summary writing marks the end of the LGEN stage. At WPA time, the 39263 summaries are read back into memory and all passes run the _Execute_ 39264 stage. Optimization summaries are streamed and sent to LTRANS, where 39265 all the passes execute the _Transform_ stage. 39266 39267 Most optimization passes split naturally into analysis, propagation and 39268 transformation stages. But some do not. The main problem arises when 39269 one pass performs changes and the following pass gets confused by seeing 39270 different callgraphs between the _Transform_ stage and the _Generate 39271 summary_ or _Execute_ stage. This means that the passes are required to 39272 communicate their decisions with each other. 39273 39274 To facilitate this communication, the GCC callgraph infrastructure 39275 implements _virtual clones_, a method of representing the changes 39276 performed by the optimization passes in the callgraph without needing to 39277 update function bodies. 39278 39279 A _virtual clone_ in the callgraph is a function that has no associated 39280 body, just a description of how to create its body based on a different 39281 function (which itself may be a virtual clone). 39282 39283 The description of function modifications includes adjustments to the 39284 function's signature (which allows, for example, removing or adding 39285 function arguments), substitutions to perform on the function body, and, 39286 for inlined functions, a pointer to the function that it will be inlined 39287 into. 39288 39289 It is also possible to redirect any edge of the callgraph from a 39290 function to its virtual clone. This implies updating of the call site 39291 to adjust for the new function signature. 39292 39293 Most of the transformations performed by inter-procedural optimizations 39294 can be represented via virtual clones. For instance, a constant 39295 propagation pass can produce a virtual clone of the function which 39296 replaces one of its arguments by a constant. The inliner can represent 39297 its decisions by producing a clone of a function whose body will be 39298 later integrated into a given function. 39299 39300 Using _virtual clones_, the program can be easily updated during the 39301 _Execute_ stage, solving most of pass interactions problems that would 39302 otherwise occur during _Transform_. 39303 39304 Virtual clones are later materialized in the LTRANS stage and turned 39305 into real functions. Passes executed after the virtual clone were 39306 introduced also perform their _Transform_ stage on new functions, so for 39307 a pass there is no significant difference between operating on a real 39308 function or a virtual clone introduced before its _Execute_ stage. 39309 39310 Optimization passes then work on virtual clones introduced before their 39311 _Execute_ stage as if they were real functions. The only difference is 39312 that clones are not visible during the _Generate Summary_ stage. 39313 39314 To keep function summaries updated, the callgraph interface allows an 39315 optimizer to register a callback that is called every time a new clone 39316 is introduced as well as when the actual function or variable is 39317 generated or when a function or variable is removed. These hooks are 39318 registered in the _Generate summary_ stage and allow the pass to keep 39319 its information intact until the _Execute_ stage. The same hooks can 39320 also be registered during the _Execute_ stage to keep the optimization 39321 summaries updated for the _Transform_ stage. 39322 39323 24.3.2 IPA references 39324 --------------------- 39325 39326 GCC represents IPA references in the callgraph. For a function or 39327 variable 'A', the _IPA reference_ is a list of all locations where the 39328 address of 'A' is taken and, when 'A' is a variable, a list of all 39329 direct stores and reads to/from 'A'. References represent an oriented 39330 multi-graph on the union of nodes of the callgraph and the varpool. See 39331 'ipa-reference.c':'ipa_reference_write_optimization_summary' and 39332 'ipa-reference.c':'ipa_reference_read_optimization_summary' for details. 39333 39334 24.3.3 Jump functions 39335 --------------------- 39336 39337 Suppose that an optimization pass sees a function 'A' and it knows the 39338 values of (some of) its arguments. The _jump function_ describes the 39339 value of a parameter of a given function call in function 'A' based on 39340 this knowledge. 39341 39342 Jump functions are used by several optimizations, such as the 39343 inter-procedural constant propagation pass and the devirtualization 39344 pass. The inliner also uses jump functions to perform inlining of 39345 callbacks. 39346 39347 39348 File: gccint.info, Node: WHOPR, Next: Internal flags, Prev: IPA, Up: LTO 39349 39350 24.4 Whole program assumptions, linker plugin and symbol visibilities 39351 ===================================================================== 39352 39353 Link-time optimization gives relatively minor benefits when used alone. 39354 The problem is that propagation of inter-procedural information does not 39355 work well across functions and variables that are called or referenced 39356 by other compilation units (such as from a dynamically linked library). 39357 We say that such functions and variables are _externally visible_. 39358 39359 To make the situation even more difficult, many applications organize 39360 themselves as a set of shared libraries, and the default ELF visibility 39361 rules allow one to overwrite any externally visible symbol with a 39362 different symbol at runtime. This basically disables any optimizations 39363 across such functions and variables, because the compiler cannot be sure 39364 that the function body it is seeing is the same function body that will 39365 be used at runtime. Any function or variable not declared 'static' in 39366 the sources degrades the quality of inter-procedural optimization. 39367 39368 To avoid this problem the compiler must assume that it sees the whole 39369 program when doing link-time optimization. Strictly speaking, the whole 39370 program is rarely visible even at link-time. Standard system libraries 39371 are usually linked dynamically or not provided with the link-time 39372 information. In GCC, the whole program option ('-fwhole-program') 39373 asserts that every function and variable defined in the current 39374 compilation unit is static, except for function 'main' (note: at link 39375 time, the current unit is the union of all objects compiled with LTO). 39376 Since some functions and variables need to be referenced externally, for 39377 example by another DSO or from an assembler file, GCC also provides the 39378 function and variable attribute 'externally_visible' which can be used 39379 to disable the effect of '-fwhole-program' on a specific symbol. 39380 39381 The whole program mode assumptions are slightly more complex in C++, 39382 where inline functions in headers are put into _COMDAT_ sections. 39383 COMDAT function and variables can be defined by multiple object files 39384 and their bodies are unified at link-time and dynamic link-time. COMDAT 39385 functions are changed to local only when their address is not taken and 39386 thus un-sharing them with a library is not harmful. COMDAT variables 39387 always remain externally visible, however for readonly variables it is 39388 assumed that their initializers cannot be overwritten by a different 39389 value. 39390 39391 GCC provides the function and variable attribute 'visibility' that can 39392 be used to specify the visibility of externally visible symbols (or 39393 alternatively an '-fdefault-visibility' command line option). ELF 39394 defines the 'default', 'protected', 'hidden' and 'internal' 39395 visibilities. 39396 39397 The most commonly used is visibility is 'hidden'. It specifies that 39398 the symbol cannot be referenced from outside of the current shared 39399 library. Unfortunately, this information cannot be used directly by the 39400 link-time optimization in the compiler since the whole shared library 39401 also might contain non-LTO objects and those are not visible to the 39402 compiler. 39403 39404 GCC solves this problem using linker plugins. A _linker plugin_ is an 39405 interface to the linker that allows an external program to claim the 39406 ownership of a given object file. The linker then performs the linking 39407 procedure by querying the plugin about the symbol table of the claimed 39408 objects and once the linking decisions are complete, the plugin is 39409 allowed to provide the final object file before the actual linking is 39410 made. The linker plugin obtains the symbol resolution information which 39411 specifies which symbols provided by the claimed objects are bound from 39412 the rest of a binary being linked. 39413 39414 Currently, the linker plugin works only in combination with the Gold 39415 linker, but a GNU ld implementation is under development. 39416 39417 GCC is designed to be independent of the rest of the toolchain and aims 39418 to support linkers without plugin support. For this reason it does not 39419 use the linker plugin by default. Instead, the object files are 39420 examined by 'collect2' before being passed to the linker and objects 39421 found to have LTO sections are passed to 'lto1' first. This mode does 39422 not work for library archives. The decision on what object files from 39423 the archive are needed depends on the actual linking and thus GCC would 39424 have to implement the linker itself. The resolution information is 39425 missing too and thus GCC needs to make an educated guess based on 39426 '-fwhole-program'. Without the linker plugin GCC also assumes that 39427 symbols are declared 'hidden' and not referred by non-LTO code by 39428 default. 39429 39430 39431 File: gccint.info, Node: Internal flags, Prev: WHOPR, Up: LTO 39432 39433 24.5 Internal flags controlling 'lto1' 39434 ====================================== 39435 39436 The following flags are passed into 'lto1' and are not meant to be used 39437 directly from the command line. 39438 39439 * -fwpa This option runs the serial part of the link-time optimizer 39440 performing the inter-procedural propagation (WPA mode). The 39441 compiler reads in summary information from all inputs and performs 39442 an analysis based on summary information only. It generates object 39443 files for subsequent runs of the link-time optimizer where 39444 individual object files are optimized using both summary 39445 information from the WPA mode and the actual function bodies. It 39446 then drives the LTRANS phase. 39447 39448 * -fltrans This option runs the link-time optimizer in the 39449 local-transformation (LTRANS) mode, which reads in output from a 39450 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 39451 optimizes an object and produces the final assembly. 39452 39453 * -fltrans-output-list=FILE This option specifies a file to which the 39454 names of LTRANS output files are written. This option is only 39455 meaningful in conjunction with '-fwpa'. 39456 39457 39458 File: gccint.info, Node: Funding, Next: GNU Project, Prev: LTO, Up: Top 39459 39460 Funding Free Software 39461 ********************* 39462 39463 If you want to have more free software a few years from now, it makes 39464 sense for you to help encourage people to contribute funds for its 39465 development. The most effective approach known is to encourage 39466 commercial redistributors to donate. 39467 39468 Users of free software systems can boost the pace of development by 39469 encouraging for-a-fee distributors to donate part of their selling price 39470 to free software developers--the Free Software Foundation, and others. 39471 39472 The way to convince distributors to do this is to demand it and expect 39473 it from them. So when you compare distributors, judge them partly by 39474 how much they give to free software development. Show distributors they 39475 must compete to be the one who gives the most. 39476 39477 To make this approach work, you must insist on numbers that you can 39478 compare, such as, "We will donate ten dollars to the Frobnitz project 39479 for each disk sold." Don't be satisfied with a vague promise, such as 39480 "A portion of the profits are donated," since it doesn't give a basis 39481 for comparison. 39482 39483 Even a precise fraction "of the profits from this disk" is not very 39484 meaningful, since creative accounting and unrelated business decisions 39485 can greatly alter what fraction of the sales price counts as profit. If 39486 the price you pay is $50, ten percent of the profit is probably less 39487 than a dollar; it might be a few cents, or nothing at all. 39488 39489 Some redistributors do development work themselves. This is useful 39490 too; but to keep everyone honest, you need to inquire how much they do, 39491 and what kind. Some kinds of development make much more long-term 39492 difference than others. For example, maintaining a separate version of 39493 a program contributes very little; maintaining the standard version of a 39494 program for the whole community contributes much. Easy new ports 39495 contribute little, since someone else would surely do them; difficult 39496 ports such as adding a new CPU to the GNU Compiler Collection contribute 39497 more; major new features or packages contribute the most. 39498 39499 By establishing the idea that supporting further development is "the 39500 proper thing to do" when distributing free software for a fee, we can 39501 assure a steady flow of resources into making more free software. 39502 39503 Copyright (C) 1994 Free Software Foundation, Inc. 39504 Verbatim copying and redistribution of this section is permitted 39505 without royalty; alteration is not permitted. 39506 39507 39508 File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 39509 39510 The GNU Project and GNU/Linux 39511 ***************************** 39512 39513 The GNU Project was launched in 1984 to develop a complete Unix-like 39514 operating system which is free software: the GNU system. (GNU is a 39515 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 39516 Variants of the GNU operating system, which use the kernel Linux, are 39517 now widely used; though these systems are often referred to as "Linux", 39518 they are more accurately called GNU/Linux systems. 39519 39520 For more information, see: 39521 <http://www.gnu.org/> 39522 <http://www.gnu.org/gnu/linux-and-gnu.html> 39523 39524 39525 File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 39526 39527 GNU General Public License 39528 ************************** 39529 39530 Version 3, 29 June 2007 39531 39532 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 39533 39534 Everyone is permitted to copy and distribute verbatim copies of this 39535 license document, but changing it is not allowed. 39536 39537 Preamble 39538 ======== 39539 39540 The GNU General Public License is a free, copyleft license for software 39541 and other kinds of works. 39542 39543 The licenses for most software and other practical works are designed 39544 to take away your freedom to share and change the works. By contrast, 39545 the GNU General Public License is intended to guarantee your freedom to 39546 share and change all versions of a program-to make sure it remains free 39547 software for all its users. We, the Free Software Foundation, use the 39548 GNU General Public License for most of our software; it applies also to 39549 any other work released this way by its authors. You can apply it to 39550 your programs, too. 39551 39552 When we speak of free software, we are referring to freedom, not price. 39553 Our General Public Licenses are designed to make sure that you have the 39554 freedom to distribute copies of free software (and charge for them if 39555 you wish), that you receive source code or can get it if you want it, 39556 that you can change the software or use pieces of it in new free 39557 programs, and that you know you can do these things. 39558 39559 To protect your rights, we need to prevent others from denying you 39560 these rights or asking you to surrender the rights. Therefore, you have 39561 certain responsibilities if you distribute copies of the software, or if 39562 you modify it: responsibilities to respect the freedom of others. 39563 39564 For example, if you distribute copies of such a program, whether gratis 39565 or for a fee, you must pass on to the recipients the same freedoms that 39566 you received. You must make sure that they, too, receive or can get the 39567 source code. And you must show them these terms so they know their 39568 rights. 39569 39570 Developers that use the GNU GPL protect your rights with two steps: (1) 39571 assert copyright on the software, and (2) offer you this License giving 39572 you legal permission to copy, distribute and/or modify it. 39573 39574 For the developers' and authors' protection, the GPL clearly explains 39575 that there is no warranty for this free software. For both users' and 39576 authors' sake, the GPL requires that modified versions be marked as 39577 changed, so that their problems will not be attributed erroneously to 39578 authors of previous versions. 39579 39580 Some devices are designed to deny users access to install or run 39581 modified versions of the software inside them, although the manufacturer 39582 can do so. This is fundamentally incompatible with the aim of 39583 protecting users' freedom to change the software. The systematic 39584 pattern of such abuse occurs in the area of products for individuals to 39585 use, which is precisely where it is most unacceptable. Therefore, we 39586 have designed this version of the GPL to prohibit the practice for those 39587 products. If such problems arise substantially in other domains, we 39588 stand ready to extend this provision to those domains in future versions 39589 of the GPL, as needed to protect the freedom of users. 39590 39591 Finally, every program is threatened constantly by software patents. 39592 States should not allow patents to restrict development and use of 39593 software on general-purpose computers, but in those that do, we wish to 39594 avoid the special danger that patents applied to a free program could 39595 make it effectively proprietary. To prevent this, the GPL assures that 39596 patents cannot be used to render the program non-free. 39597 39598 The precise terms and conditions for copying, distribution and 39599 modification follow. 39600 39601 TERMS AND CONDITIONS 39602 ==================== 39603 39604 0. Definitions. 39605 39606 "This License" refers to version 3 of the GNU General Public 39607 License. 39608 39609 "Copyright" also means copyright-like laws that apply to other 39610 kinds of works, such as semiconductor masks. 39611 39612 "The Program" refers to any copyrightable work licensed under this 39613 License. Each licensee is addressed as "you". "Licensees" and 39614 "recipients" may be individuals or organizations. 39615 39616 To "modify" a work means to copy from or adapt all or part of the 39617 work in a fashion requiring copyright permission, other than the 39618 making of an exact copy. The resulting work is called a "modified 39619 version" of the earlier work or a work "based on" the earlier work. 39620 39621 A "covered work" means either the unmodified Program or a work 39622 based on the Program. 39623 39624 To "propagate" a work means to do anything with it that, without 39625 permission, would make you directly or secondarily liable for 39626 infringement under applicable copyright law, except executing it on 39627 a computer or modifying a private copy. Propagation includes 39628 copying, distribution (with or without modification), making 39629 available to the public, and in some countries other activities as 39630 well. 39631 39632 To "convey" a work means any kind of propagation that enables other 39633 parties to make or receive copies. Mere interaction with a user 39634 through a computer network, with no transfer of a copy, is not 39635 conveying. 39636 39637 An interactive user interface displays "Appropriate Legal Notices" 39638 to the extent that it includes a convenient and prominently visible 39639 feature that (1) displays an appropriate copyright notice, and (2) 39640 tells the user that there is no warranty for the work (except to 39641 the extent that warranties are provided), that licensees may convey 39642 the work under this License, and how to view a copy of this 39643 License. If the interface presents a list of user commands or 39644 options, such as a menu, a prominent item in the list meets this 39645 criterion. 39646 39647 1. Source Code. 39648 39649 The "source code" for a work means the preferred form of the work 39650 for making modifications to it. "Object code" means any non-source 39651 form of a work. 39652 39653 A "Standard Interface" means an interface that either is an 39654 official standard defined by a recognized standards body, or, in 39655 the case of interfaces specified for a particular programming 39656 language, one that is widely used among developers working in that 39657 language. 39658 39659 The "System Libraries" of an executable work include anything, 39660 other than the work as a whole, that (a) is included in the normal 39661 form of packaging a Major Component, but which is not part of that 39662 Major Component, and (b) serves only to enable use of the work with 39663 that Major Component, or to implement a Standard Interface for 39664 which an implementation is available to the public in source code 39665 form. A "Major Component", in this context, means a major 39666 essential component (kernel, window system, and so on) of the 39667 specific operating system (if any) on which the executable work 39668 runs, or a compiler used to produce the work, or an object code 39669 interpreter used to run it. 39670 39671 The "Corresponding Source" for a work in object code form means all 39672 the source code needed to generate, install, and (for an executable 39673 work) run the object code and to modify the work, including scripts 39674 to control those activities. However, it does not include the 39675 work's System Libraries, or general-purpose tools or generally 39676 available free programs which are used unmodified in performing 39677 those activities but which are not part of the work. For example, 39678 Corresponding Source includes interface definition files associated 39679 with source files for the work, and the source code for shared 39680 libraries and dynamically linked subprograms that the work is 39681 specifically designed to require, such as by intimate data 39682 communication or control flow between those subprograms and other 39683 parts of the work. 39684 39685 The Corresponding Source need not include anything that users can 39686 regenerate automatically from other parts of the Corresponding 39687 Source. 39688 39689 The Corresponding Source for a work in source code form is that 39690 same work. 39691 39692 2. Basic Permissions. 39693 39694 All rights granted under this License are granted for the term of 39695 copyright on the Program, and are irrevocable provided the stated 39696 conditions are met. This License explicitly affirms your unlimited 39697 permission to run the unmodified Program. The output from running 39698 a covered work is covered by this License only if the output, given 39699 its content, constitutes a covered work. This License acknowledges 39700 your rights of fair use or other equivalent, as provided by 39701 copyright law. 39702 39703 You may make, run and propagate covered works that you do not 39704 convey, without conditions so long as your license otherwise 39705 remains in force. You may convey covered works to others for the 39706 sole purpose of having them make modifications exclusively for you, 39707 or provide you with facilities for running those works, provided 39708 that you comply with the terms of this License in conveying all 39709 material for which you do not control copyright. Those thus making 39710 or running the covered works for you must do so exclusively on your 39711 behalf, under your direction and control, on terms that prohibit 39712 them from making any copies of your copyrighted material outside 39713 their relationship with you. 39714 39715 Conveying under any other circumstances is permitted solely under 39716 the conditions stated below. Sublicensing is not allowed; section 39717 10 makes it unnecessary. 39718 39719 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 39720 39721 No covered work shall be deemed part of an effective technological 39722 measure under any applicable law fulfilling obligations under 39723 article 11 of the WIPO copyright treaty adopted on 20 December 39724 1996, or similar laws prohibiting or restricting circumvention of 39725 such measures. 39726 39727 When you convey a covered work, you waive any legal power to forbid 39728 circumvention of technological measures to the extent such 39729 circumvention is effected by exercising rights under this License 39730 with respect to the covered work, and you disclaim any intention to 39731 limit operation or modification of the work as a means of 39732 enforcing, against the work's users, your or third parties' legal 39733 rights to forbid circumvention of technological measures. 39734 39735 4. Conveying Verbatim Copies. 39736 39737 You may convey verbatim copies of the Program's source code as you 39738 receive it, in any medium, provided that you conspicuously and 39739 appropriately publish on each copy an appropriate copyright notice; 39740 keep intact all notices stating that this License and any 39741 non-permissive terms added in accord with section 7 apply to the 39742 code; keep intact all notices of the absence of any warranty; and 39743 give all recipients a copy of this License along with the Program. 39744 39745 You may charge any price or no price for each copy that you convey, 39746 and you may offer support or warranty protection for a fee. 39747 39748 5. Conveying Modified Source Versions. 39749 39750 You may convey a work based on the Program, or the modifications to 39751 produce it from the Program, in the form of source code under the 39752 terms of section 4, provided that you also meet all of these 39753 conditions: 39754 39755 a. The work must carry prominent notices stating that you 39756 modified it, and giving a relevant date. 39757 39758 b. The work must carry prominent notices stating that it is 39759 released under this License and any conditions added under 39760 section 7. This requirement modifies the requirement in 39761 section 4 to "keep intact all notices". 39762 39763 c. You must license the entire work, as a whole, under this 39764 License to anyone who comes into possession of a copy. This 39765 License will therefore apply, along with any applicable 39766 section 7 additional terms, to the whole of the work, and all 39767 its parts, regardless of how they are packaged. This License 39768 gives no permission to license the work in any other way, but 39769 it does not invalidate such permission if you have separately 39770 received it. 39771 39772 d. If the work has interactive user interfaces, each must display 39773 Appropriate Legal Notices; however, if the Program has 39774 interactive interfaces that do not display Appropriate Legal 39775 Notices, your work need not make them do so. 39776 39777 A compilation of a covered work with other separate and independent 39778 works, which are not by their nature extensions of the covered 39779 work, and which are not combined with it such as to form a larger 39780 program, in or on a volume of a storage or distribution medium, is 39781 called an "aggregate" if the compilation and its resulting 39782 copyright are not used to limit the access or legal rights of the 39783 compilation's users beyond what the individual works permit. 39784 Inclusion of a covered work in an aggregate does not cause this 39785 License to apply to the other parts of the aggregate. 39786 39787 6. Conveying Non-Source Forms. 39788 39789 You may convey a covered work in object code form under the terms 39790 of sections 4 and 5, provided that you also convey the 39791 machine-readable Corresponding Source under the terms of this 39792 License, in one of these ways: 39793 39794 a. Convey the object code in, or embodied in, a physical product 39795 (including a physical distribution medium), accompanied by the 39796 Corresponding Source fixed on a durable physical medium 39797 customarily used for software interchange. 39798 39799 b. Convey the object code in, or embodied in, a physical product 39800 (including a physical distribution medium), accompanied by a 39801 written offer, valid for at least three years and valid for as 39802 long as you offer spare parts or customer support for that 39803 product model, to give anyone who possesses the object code 39804 either (1) a copy of the Corresponding Source for all the 39805 software in the product that is covered by this License, on a 39806 durable physical medium customarily used for software 39807 interchange, for a price no more than your reasonable cost of 39808 physically performing this conveying of source, or (2) access 39809 to copy the Corresponding Source from a network server at no 39810 charge. 39811 39812 c. Convey individual copies of the object code with a copy of the 39813 written offer to provide the Corresponding Source. This 39814 alternative is allowed only occasionally and noncommercially, 39815 and only if you received the object code with such an offer, 39816 in accord with subsection 6b. 39817 39818 d. Convey the object code by offering access from a designated 39819 place (gratis or for a charge), and offer equivalent access to 39820 the Corresponding Source in the same way through the same 39821 place at no further charge. You need not require recipients 39822 to copy the Corresponding Source along with the object code. 39823 If the place to copy the object code is a network server, the 39824 Corresponding Source may be on a different server (operated by 39825 you or a third party) that supports equivalent copying 39826 facilities, provided you maintain clear directions next to the 39827 object code saying where to find the Corresponding Source. 39828 Regardless of what server hosts the Corresponding Source, you 39829 remain obligated to ensure that it is available for as long as 39830 needed to satisfy these requirements. 39831 39832 e. Convey the object code using peer-to-peer transmission, 39833 provided you inform other peers where the object code and 39834 Corresponding Source of the work are being offered to the 39835 general public at no charge under subsection 6d. 39836 39837 A separable portion of the object code, whose source code is 39838 excluded from the Corresponding Source as a System Library, need 39839 not be included in conveying the object code work. 39840 39841 A "User Product" is either (1) a "consumer product", which means 39842 any tangible personal property which is normally used for personal, 39843 family, or household purposes, or (2) anything designed or sold for 39844 incorporation into a dwelling. In determining whether a product is 39845 a consumer product, doubtful cases shall be resolved in favor of 39846 coverage. For a particular product received by a particular user, 39847 "normally used" refers to a typical or common use of that class of 39848 product, regardless of the status of the particular user or of the 39849 way in which the particular user actually uses, or expects or is 39850 expected to use, the product. A product is a consumer product 39851 regardless of whether the product has substantial commercial, 39852 industrial or non-consumer uses, unless such uses represent the 39853 only significant mode of use of the product. 39854 39855 "Installation Information" for a User Product means any methods, 39856 procedures, authorization keys, or other information required to 39857 install and execute modified versions of a covered work in that 39858 User Product from a modified version of its Corresponding Source. 39859 The information must suffice to ensure that the continued 39860 functioning of the modified object code is in no case prevented or 39861 interfered with solely because modification has been made. 39862 39863 If you convey an object code work under this section in, or with, 39864 or specifically for use in, a User Product, and the conveying 39865 occurs as part of a transaction in which the right of possession 39866 and use of the User Product is transferred to the recipient in 39867 perpetuity or for a fixed term (regardless of how the transaction 39868 is characterized), the Corresponding Source conveyed under this 39869 section must be accompanied by the Installation Information. But 39870 this requirement does not apply if neither you nor any third party 39871 retains the ability to install modified object code on the User 39872 Product (for example, the work has been installed in ROM). 39873 39874 The requirement to provide Installation Information does not 39875 include a requirement to continue to provide support service, 39876 warranty, or updates for a work that has been modified or installed 39877 by the recipient, or for the User Product in which it has been 39878 modified or installed. Access to a network may be denied when the 39879 modification itself materially and adversely affects the operation 39880 of the network or violates the rules and protocols for 39881 communication across the network. 39882 39883 Corresponding Source conveyed, and Installation Information 39884 provided, in accord with this section must be in a format that is 39885 publicly documented (and with an implementation available to the 39886 public in source code form), and must require no special password 39887 or key for unpacking, reading or copying. 39888 39889 7. Additional Terms. 39890 39891 "Additional permissions" are terms that supplement the terms of 39892 this License by making exceptions from one or more of its 39893 conditions. Additional permissions that are applicable to the 39894 entire Program shall be treated as though they were included in 39895 this License, to the extent that they are valid under applicable 39896 law. If additional permissions apply only to part of the Program, 39897 that part may be used separately under those permissions, but the 39898 entire Program remains governed by this License without regard to 39899 the additional permissions. 39900 39901 When you convey a copy of a covered work, you may at your option 39902 remove any additional permissions from that copy, or from any part 39903 of it. (Additional permissions may be written to require their own 39904 removal in certain cases when you modify the work.) You may place 39905 additional permissions on material, added by you to a covered work, 39906 for which you have or can give appropriate copyright permission. 39907 39908 Notwithstanding any other provision of this License, for material 39909 you add to a covered work, you may (if authorized by the copyright 39910 holders of that material) supplement the terms of this License with 39911 terms: 39912 39913 a. Disclaiming warranty or limiting liability differently from 39914 the terms of sections 15 and 16 of this License; or 39915 39916 b. Requiring preservation of specified reasonable legal notices 39917 or author attributions in that material or in the Appropriate 39918 Legal Notices displayed by works containing it; or 39919 39920 c. Prohibiting misrepresentation of the origin of that material, 39921 or requiring that modified versions of such material be marked 39922 in reasonable ways as different from the original version; or 39923 39924 d. Limiting the use for publicity purposes of names of licensors 39925 or authors of the material; or 39926 39927 e. Declining to grant rights under trademark law for use of some 39928 trade names, trademarks, or service marks; or 39929 39930 f. Requiring indemnification of licensors and authors of that 39931 material by anyone who conveys the material (or modified 39932 versions of it) with contractual assumptions of liability to 39933 the recipient, for any liability that these contractual 39934 assumptions directly impose on those licensors and authors. 39935 39936 All other non-permissive additional terms are considered "further 39937 restrictions" within the meaning of section 10. If the Program as 39938 you received it, or any part of it, contains a notice stating that 39939 it is governed by this License along with a term that is a further 39940 restriction, you may remove that term. If a license document 39941 contains a further restriction but permits relicensing or conveying 39942 under this License, you may add to a covered work material governed 39943 by the terms of that license document, provided that the further 39944 restriction does not survive such relicensing or conveying. 39945 39946 If you add terms to a covered work in accord with this section, you 39947 must place, in the relevant source files, a statement of the 39948 additional terms that apply to those files, or a notice indicating 39949 where to find the applicable terms. 39950 39951 Additional terms, permissive or non-permissive, may be stated in 39952 the form of a separately written license, or stated as exceptions; 39953 the above requirements apply either way. 39954 39955 8. Termination. 39956 39957 You may not propagate or modify a covered work except as expressly 39958 provided under this License. Any attempt otherwise to propagate or 39959 modify it is void, and will automatically terminate your rights 39960 under this License (including any patent licenses granted under the 39961 third paragraph of section 11). 39962 39963 However, if you cease all violation of this License, then your 39964 license from a particular copyright holder is reinstated (a) 39965 provisionally, unless and until the copyright holder explicitly and 39966 finally terminates your license, and (b) permanently, if the 39967 copyright holder fails to notify you of the violation by some 39968 reasonable means prior to 60 days after the cessation. 39969 39970 Moreover, your license from a particular copyright holder is 39971 reinstated permanently if the copyright holder notifies you of the 39972 violation by some reasonable means, this is the first time you have 39973 received notice of violation of this License (for any work) from 39974 that copyright holder, and you cure the violation prior to 30 days 39975 after your receipt of the notice. 39976 39977 Termination of your rights under this section does not terminate 39978 the licenses of parties who have received copies or rights from you 39979 under this License. If your rights have been terminated and not 39980 permanently reinstated, you do not qualify to receive new licenses 39981 for the same material under section 10. 39982 39983 9. Acceptance Not Required for Having Copies. 39984 39985 You are not required to accept this License in order to receive or 39986 run a copy of the Program. Ancillary propagation of a covered work 39987 occurring solely as a consequence of using peer-to-peer 39988 transmission to receive a copy likewise does not require 39989 acceptance. However, nothing other than this License grants you 39990 permission to propagate or modify any covered work. These actions 39991 infringe copyright if you do not accept this License. Therefore, 39992 by modifying or propagating a covered work, you indicate your 39993 acceptance of this License to do so. 39994 39995 10. Automatic Licensing of Downstream Recipients. 39996 39997 Each time you convey a covered work, the recipient automatically 39998 receives a license from the original licensors, to run, modify and 39999 propagate that work, subject to this License. You are not 40000 responsible for enforcing compliance by third parties with this 40001 License. 40002 40003 An "entity transaction" is a transaction transferring control of an 40004 organization, or substantially all assets of one, or subdividing an 40005 organization, or merging organizations. If propagation of a 40006 covered work results from an entity transaction, each party to that 40007 transaction who receives a copy of the work also receives whatever 40008 licenses to the work the party's predecessor in interest had or 40009 could give under the previous paragraph, plus a right to possession 40010 of the Corresponding Source of the work from the predecessor in 40011 interest, if the predecessor has it or can get it with reasonable 40012 efforts. 40013 40014 You may not impose any further restrictions on the exercise of the 40015 rights granted or affirmed under this License. For example, you 40016 may not impose a license fee, royalty, or other charge for exercise 40017 of rights granted under this License, and you may not initiate 40018 litigation (including a cross-claim or counterclaim in a lawsuit) 40019 alleging that any patent claim is infringed by making, using, 40020 selling, offering for sale, or importing the Program or any portion 40021 of it. 40022 40023 11. Patents. 40024 40025 A "contributor" is a copyright holder who authorizes use under this 40026 License of the Program or a work on which the Program is based. 40027 The work thus licensed is called the contributor's "contributor 40028 version". 40029 40030 A contributor's "essential patent claims" are all patent claims 40031 owned or controlled by the contributor, whether already acquired or 40032 hereafter acquired, that would be infringed by some manner, 40033 permitted by this License, of making, using, or selling its 40034 contributor version, but do not include claims that would be 40035 infringed only as a consequence of further modification of the 40036 contributor version. For purposes of this definition, "control" 40037 includes the right to grant patent sublicenses in a manner 40038 consistent with the requirements of this License. 40039 40040 Each contributor grants you a non-exclusive, worldwide, 40041 royalty-free patent license under the contributor's essential 40042 patent claims, to make, use, sell, offer for sale, import and 40043 otherwise run, modify and propagate the contents of its contributor 40044 version. 40045 40046 In the following three paragraphs, a "patent license" is any 40047 express agreement or commitment, however denominated, not to 40048 enforce a patent (such as an express permission to practice a 40049 patent or covenant not to sue for patent infringement). To "grant" 40050 such a patent license to a party means to make such an agreement or 40051 commitment not to enforce a patent against the party. 40052 40053 If you convey a covered work, knowingly relying on a patent 40054 license, and the Corresponding Source of the work is not available 40055 for anyone to copy, free of charge and under the terms of this 40056 License, through a publicly available network server or other 40057 readily accessible means, then you must either (1) cause the 40058 Corresponding Source to be so available, or (2) arrange to deprive 40059 yourself of the benefit of the patent license for this particular 40060 work, or (3) arrange, in a manner consistent with the requirements 40061 of this License, to extend the patent license to downstream 40062 recipients. "Knowingly relying" means you have actual knowledge 40063 that, but for the patent license, your conveying the covered work 40064 in a country, or your recipient's use of the covered work in a 40065 country, would infringe one or more identifiable patents in that 40066 country that you have reason to believe are valid. 40067 40068 If, pursuant to or in connection with a single transaction or 40069 arrangement, you convey, or propagate by procuring conveyance of, a 40070 covered work, and grant a patent license to some of the parties 40071 receiving the covered work authorizing them to use, propagate, 40072 modify or convey a specific copy of the covered work, then the 40073 patent license you grant is automatically extended to all 40074 recipients of the covered work and works based on it. 40075 40076 A patent license is "discriminatory" if it does not include within 40077 the scope of its coverage, prohibits the exercise of, or is 40078 conditioned on the non-exercise of one or more of the rights that 40079 are specifically granted under this License. You may not convey a 40080 covered work if you are a party to an arrangement with a third 40081 party that is in the business of distributing software, under which 40082 you make payment to the third party based on the extent of your 40083 activity of conveying the work, and under which the third party 40084 grants, to any of the parties who would receive the covered work 40085 from you, a discriminatory patent license (a) in connection with 40086 copies of the covered work conveyed by you (or copies made from 40087 those copies), or (b) primarily for and in connection with specific 40088 products or compilations that contain the covered work, unless you 40089 entered into that arrangement, or that patent license was granted, 40090 prior to 28 March 2007. 40091 40092 Nothing in this License shall be construed as excluding or limiting 40093 any implied license or other defenses to infringement that may 40094 otherwise be available to you under applicable patent law. 40095 40096 12. No Surrender of Others' Freedom. 40097 40098 If conditions are imposed on you (whether by court order, agreement 40099 or otherwise) that contradict the conditions of this License, they 40100 do not excuse you from the conditions of this License. If you 40101 cannot convey a covered work so as to satisfy simultaneously your 40102 obligations under this License and any other pertinent obligations, 40103 then as a consequence you may not convey it at all. For example, 40104 if you agree to terms that obligate you to collect a royalty for 40105 further conveying from those to whom you convey the Program, the 40106 only way you could satisfy both those terms and this License would 40107 be to refrain entirely from conveying the Program. 40108 40109 13. Use with the GNU Affero General Public License. 40110 40111 Notwithstanding any other provision of this License, you have 40112 permission to link or combine any covered work with a work licensed 40113 under version 3 of the GNU Affero General Public License into a 40114 single combined work, and to convey the resulting work. The terms 40115 of this License will continue to apply to the part which is the 40116 covered work, but the special requirements of the GNU Affero 40117 General Public License, section 13, concerning interaction through 40118 a network will apply to the combination as such. 40119 40120 14. Revised Versions of this License. 40121 40122 The Free Software Foundation may publish revised and/or new 40123 versions of the GNU General Public License from time to time. Such 40124 new versions will be similar in spirit to the present version, but 40125 may differ in detail to address new problems or concerns. 40126 40127 Each version is given a distinguishing version number. If the 40128 Program specifies that a certain numbered version of the GNU 40129 General Public License "or any later version" applies to it, you 40130 have the option of following the terms and conditions either of 40131 that numbered version or of any later version published by the Free 40132 Software Foundation. If the Program does not specify a version 40133 number of the GNU General Public License, you may choose any 40134 version ever published by the Free Software Foundation. 40135 40136 If the Program specifies that a proxy can decide which future 40137 versions of the GNU General Public License can be used, that 40138 proxy's public statement of acceptance of a version permanently 40139 authorizes you to choose that version for the Program. 40140 40141 Later license versions may give you additional or different 40142 permissions. However, no additional obligations are imposed on any 40143 author or copyright holder as a result of your choosing to follow a 40144 later version. 40145 40146 15. Disclaimer of Warranty. 40147 40148 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 40149 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 40150 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 40151 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 40152 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 40153 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 40154 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 40155 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 40156 NECESSARY SERVICING, REPAIR OR CORRECTION. 40157 40158 16. Limitation of Liability. 40159 40160 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 40161 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 40162 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 40163 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 40164 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 40165 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 40166 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 40167 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 40168 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 40169 THE POSSIBILITY OF SUCH DAMAGES. 40170 40171 17. Interpretation of Sections 15 and 16. 40172 40173 If the disclaimer of warranty and limitation of liability provided 40174 above cannot be given local legal effect according to their terms, 40175 reviewing courts shall apply local law that most closely 40176 approximates an absolute waiver of all civil liability in 40177 connection with the Program, unless a warranty or assumption of 40178 liability accompanies a copy of the Program in return for a fee. 40179 40180 END OF TERMS AND CONDITIONS 40181 =========================== 40182 40183 How to Apply These Terms to Your New Programs 40184 ============================================= 40185 40186 If you develop a new program, and you want it to be of the greatest 40187 possible use to the public, the best way to achieve this is to make it 40188 free software which everyone can redistribute and change under these 40189 terms. 40190 40191 To do so, attach the following notices to the program. It is safest to 40192 attach them to the start of each source file to most effectively state 40193 the exclusion of warranty; and each file should have at least the 40194 "copyright" line and a pointer to where the full notice is found. 40195 40196 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 40197 Copyright (C) YEAR NAME OF AUTHOR 40198 40199 This program is free software: you can redistribute it and/or modify 40200 it under the terms of the GNU General Public License as published by 40201 the Free Software Foundation, either version 3 of the License, or (at 40202 your option) any later version. 40203 40204 This program is distributed in the hope that it will be useful, but 40205 WITHOUT ANY WARRANTY; without even the implied warranty of 40206 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 40207 General Public License for more details. 40208 40209 You should have received a copy of the GNU General Public License 40210 along with this program. If not, see <http://www.gnu.org/licenses/>. 40211 40212 Also add information on how to contact you by electronic and paper 40213 mail. 40214 40215 If the program does terminal interaction, make it output a short notice 40216 like this when it starts in an interactive mode: 40217 40218 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 40219 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 40220 This is free software, and you are welcome to redistribute it 40221 under certain conditions; type 'show c' for details. 40222 40223 The hypothetical commands 'show w' and 'show c' should show the 40224 appropriate parts of the General Public License. Of course, your 40225 program's commands might be different; for a GUI interface, you would 40226 use an "about box". 40227 40228 You should also get your employer (if you work as a programmer) or 40229 school, if any, to sign a "copyright disclaimer" for the program, if 40230 necessary. For more information on this, and how to apply and follow 40231 the GNU GPL, see <http://www.gnu.org/licenses/>. 40232 40233 The GNU General Public License does not permit incorporating your 40234 program into proprietary programs. If your program is a subroutine 40235 library, you may consider it more useful to permit linking proprietary 40236 applications with the library. If this is what you want to do, use the 40237 GNU Lesser General Public License instead of this License. But first, 40238 please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 40239 40240 40241 File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 40242 40243 GNU Free Documentation License 40244 ****************************** 40245 40246 Version 1.3, 3 November 2008 40247 40248 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 40249 <http://fsf.org/> 40250 40251 Everyone is permitted to copy and distribute verbatim copies 40252 of this license document, but changing it is not allowed. 40253 40254 0. PREAMBLE 40255 40256 The purpose of this License is to make a manual, textbook, or other 40257 functional and useful document "free" in the sense of freedom: to 40258 assure everyone the effective freedom to copy and redistribute it, 40259 with or without modifying it, either commercially or 40260 noncommercially. Secondarily, this License preserves for the 40261 author and publisher a way to get credit for their work, while not 40262 being considered responsible for modifications made by others. 40263 40264 This License is a kind of "copyleft", which means that derivative 40265 works of the document must themselves be free in the same sense. 40266 It complements the GNU General Public License, which is a copyleft 40267 license designed for free software. 40268 40269 We have designed this License in order to use it for manuals for 40270 free software, because free software needs free documentation: a 40271 free program should come with manuals providing the same freedoms 40272 that the software does. But this License is not limited to 40273 software manuals; it can be used for any textual work, regardless 40274 of subject matter or whether it is published as a printed book. We 40275 recommend this License principally for works whose purpose is 40276 instruction or reference. 40277 40278 1. APPLICABILITY AND DEFINITIONS 40279 40280 This License applies to any manual or other work, in any medium, 40281 that contains a notice placed by the copyright holder saying it can 40282 be distributed under the terms of this License. Such a notice 40283 grants a world-wide, royalty-free license, unlimited in duration, 40284 to use that work under the conditions stated herein. The 40285 "Document", below, refers to any such manual or work. Any member 40286 of the public is a licensee, and is addressed as "you". You accept 40287 the license if you copy, modify or distribute the work in a way 40288 requiring permission under copyright law. 40289 40290 A "Modified Version" of the Document means any work containing the 40291 Document or a portion of it, either copied verbatim, or with 40292 modifications and/or translated into another language. 40293 40294 A "Secondary Section" is a named appendix or a front-matter section 40295 of the Document that deals exclusively with the relationship of the 40296 publishers or authors of the Document to the Document's overall 40297 subject (or to related matters) and contains nothing that could 40298 fall directly within that overall subject. (Thus, if the Document 40299 is in part a textbook of mathematics, a Secondary Section may not 40300 explain any mathematics.) The relationship could be a matter of 40301 historical connection with the subject or with related matters, or 40302 of legal, commercial, philosophical, ethical or political position 40303 regarding them. 40304 40305 The "Invariant Sections" are certain Secondary Sections whose 40306 titles are designated, as being those of Invariant Sections, in the 40307 notice that says that the Document is released under this License. 40308 If a section does not fit the above definition of Secondary then it 40309 is not allowed to be designated as Invariant. The Document may 40310 contain zero Invariant Sections. If the Document does not identify 40311 any Invariant Sections then there are none. 40312 40313 The "Cover Texts" are certain short passages of text that are 40314 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 40315 that says that the Document is released under this License. A 40316 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 40317 be at most 25 words. 40318 40319 A "Transparent" copy of the Document means a machine-readable copy, 40320 represented in a format whose specification is available to the 40321 general public, that is suitable for revising the document 40322 straightforwardly with generic text editors or (for images composed 40323 of pixels) generic paint programs or (for drawings) some widely 40324 available drawing editor, and that is suitable for input to text 40325 formatters or for automatic translation to a variety of formats 40326 suitable for input to text formatters. A copy made in an otherwise 40327 Transparent file format whose markup, or absence of markup, has 40328 been arranged to thwart or discourage subsequent modification by 40329 readers is not Transparent. An image format is not Transparent if 40330 used for any substantial amount of text. A copy that is not 40331 "Transparent" is called "Opaque". 40332 40333 Examples of suitable formats for Transparent copies include plain 40334 ASCII without markup, Texinfo input format, LaTeX input format, 40335 SGML or XML using a publicly available DTD, and standard-conforming 40336 simple HTML, PostScript or PDF designed for human modification. 40337 Examples of transparent image formats include PNG, XCF and JPG. 40338 Opaque formats include proprietary formats that can be read and 40339 edited only by proprietary word processors, SGML or XML for which 40340 the DTD and/or processing tools are not generally available, and 40341 the machine-generated HTML, PostScript or PDF produced by some word 40342 processors for output purposes only. 40343 40344 The "Title Page" means, for a printed book, the title page itself, 40345 plus such following pages as are needed to hold, legibly, the 40346 material this License requires to appear in the title page. For 40347 works in formats which do not have any title page as such, "Title 40348 Page" means the text near the most prominent appearance of the 40349 work's title, preceding the beginning of the body of the text. 40350 40351 The "publisher" means any person or entity that distributes copies 40352 of the Document to the public. 40353 40354 A section "Entitled XYZ" means a named subunit of the Document 40355 whose title either is precisely XYZ or contains XYZ in parentheses 40356 following text that translates XYZ in another language. (Here XYZ 40357 stands for a specific section name mentioned below, such as 40358 "Acknowledgements", "Dedications", "Endorsements", or "History".) 40359 To "Preserve the Title" of such a section when you modify the 40360 Document means that it remains a section "Entitled XYZ" according 40361 to this definition. 40362 40363 The Document may include Warranty Disclaimers next to the notice 40364 which states that this License applies to the Document. These 40365 Warranty Disclaimers are considered to be included by reference in 40366 this License, but only as regards disclaiming warranties: any other 40367 implication that these Warranty Disclaimers may have is void and 40368 has no effect on the meaning of this License. 40369 40370 2. VERBATIM COPYING 40371 40372 You may copy and distribute the Document in any medium, either 40373 commercially or noncommercially, provided that this License, the 40374 copyright notices, and the license notice saying this License 40375 applies to the Document are reproduced in all copies, and that you 40376 add no other conditions whatsoever to those of this License. You 40377 may not use technical measures to obstruct or control the reading 40378 or further copying of the copies you make or distribute. However, 40379 you may accept compensation in exchange for copies. If you 40380 distribute a large enough number of copies you must also follow the 40381 conditions in section 3. 40382 40383 You may also lend copies, under the same conditions stated above, 40384 and you may publicly display copies. 40385 40386 3. COPYING IN QUANTITY 40387 40388 If you publish printed copies (or copies in media that commonly 40389 have printed covers) of the Document, numbering more than 100, and 40390 the Document's license notice requires Cover Texts, you must 40391 enclose the copies in covers that carry, clearly and legibly, all 40392 these Cover Texts: Front-Cover Texts on the front cover, and 40393 Back-Cover Texts on the back cover. Both covers must also clearly 40394 and legibly identify you as the publisher of these copies. The 40395 front cover must present the full title with all words of the title 40396 equally prominent and visible. You may add other material on the 40397 covers in addition. Copying with changes limited to the covers, as 40398 long as they preserve the title of the Document and satisfy these 40399 conditions, can be treated as verbatim copying in other respects. 40400 40401 If the required texts for either cover are too voluminous to fit 40402 legibly, you should put the first ones listed (as many as fit 40403 reasonably) on the actual cover, and continue the rest onto 40404 adjacent pages. 40405 40406 If you publish or distribute Opaque copies of the Document 40407 numbering more than 100, you must either include a machine-readable 40408 Transparent copy along with each Opaque copy, or state in or with 40409 each Opaque copy a computer-network location from which the general 40410 network-using public has access to download using public-standard 40411 network protocols a complete Transparent copy of the Document, free 40412 of added material. If you use the latter option, you must take 40413 reasonably prudent steps, when you begin distribution of Opaque 40414 copies in quantity, to ensure that this Transparent copy will 40415 remain thus accessible at the stated location until at least one 40416 year after the last time you distribute an Opaque copy (directly or 40417 through your agents or retailers) of that edition to the public. 40418 40419 It is requested, but not required, that you contact the authors of 40420 the Document well before redistributing any large number of copies, 40421 to give them a chance to provide you with an updated version of the 40422 Document. 40423 40424 4. MODIFICATIONS 40425 40426 You may copy and distribute a Modified Version of the Document 40427 under the conditions of sections 2 and 3 above, provided that you 40428 release the Modified Version under precisely this License, with the 40429 Modified Version filling the role of the Document, thus licensing 40430 distribution and modification of the Modified Version to whoever 40431 possesses a copy of it. In addition, you must do these things in 40432 the Modified Version: 40433 40434 A. Use in the Title Page (and on the covers, if any) a title 40435 distinct from that of the Document, and from those of previous 40436 versions (which should, if there were any, be listed in the 40437 History section of the Document). You may use the same title 40438 as a previous version if the original publisher of that 40439 version gives permission. 40440 40441 B. List on the Title Page, as authors, one or more persons or 40442 entities responsible for authorship of the modifications in 40443 the Modified Version, together with at least five of the 40444 principal authors of the Document (all of its principal 40445 authors, if it has fewer than five), unless they release you 40446 from this requirement. 40447 40448 C. State on the Title page the name of the publisher of the 40449 Modified Version, as the publisher. 40450 40451 D. Preserve all the copyright notices of the Document. 40452 40453 E. Add an appropriate copyright notice for your modifications 40454 adjacent to the other copyright notices. 40455 40456 F. Include, immediately after the copyright notices, a license 40457 notice giving the public permission to use the Modified 40458 Version under the terms of this License, in the form shown in 40459 the Addendum below. 40460 40461 G. Preserve in that license notice the full lists of Invariant 40462 Sections and required Cover Texts given in the Document's 40463 license notice. 40464 40465 H. Include an unaltered copy of this License. 40466 40467 I. Preserve the section Entitled "History", Preserve its Title, 40468 and add to it an item stating at least the title, year, new 40469 authors, and publisher of the Modified Version as given on the 40470 Title Page. If there is no section Entitled "History" in the 40471 Document, create one stating the title, year, authors, and 40472 publisher of the Document as given on its Title Page, then add 40473 an item describing the Modified Version as stated in the 40474 previous sentence. 40475 40476 J. Preserve the network location, if any, given in the Document 40477 for public access to a Transparent copy of the Document, and 40478 likewise the network locations given in the Document for 40479 previous versions it was based on. These may be placed in the 40480 "History" section. You may omit a network location for a work 40481 that was published at least four years before the Document 40482 itself, or if the original publisher of the version it refers 40483 to gives permission. 40484 40485 K. For any section Entitled "Acknowledgements" or "Dedications", 40486 Preserve the Title of the section, and preserve in the section 40487 all the substance and tone of each of the contributor 40488 acknowledgements and/or dedications given therein. 40489 40490 L. Preserve all the Invariant Sections of the Document, unaltered 40491 in their text and in their titles. Section numbers or the 40492 equivalent are not considered part of the section titles. 40493 40494 M. Delete any section Entitled "Endorsements". Such a section 40495 may not be included in the Modified Version. 40496 40497 N. Do not retitle any existing section to be Entitled 40498 "Endorsements" or to conflict in title with any Invariant 40499 Section. 40500 40501 O. Preserve any Warranty Disclaimers. 40502 40503 If the Modified Version includes new front-matter sections or 40504 appendices that qualify as Secondary Sections and contain no 40505 material copied from the Document, you may at your option designate 40506 some or all of these sections as invariant. To do this, add their 40507 titles to the list of Invariant Sections in the Modified Version's 40508 license notice. These titles must be distinct from any other 40509 section titles. 40510 40511 You may add a section Entitled "Endorsements", provided it contains 40512 nothing but endorsements of your Modified Version by various 40513 parties--for example, statements of peer review or that the text 40514 has been approved by an organization as the authoritative 40515 definition of a standard. 40516 40517 You may add a passage of up to five words as a Front-Cover Text, 40518 and a passage of up to 25 words as a Back-Cover Text, to the end of 40519 the list of Cover Texts in the Modified Version. Only one passage 40520 of Front-Cover Text and one of Back-Cover Text may be added by (or 40521 through arrangements made by) any one entity. If the Document 40522 already includes a cover text for the same cover, previously added 40523 by you or by arrangement made by the same entity you are acting on 40524 behalf of, you may not add another; but you may replace the old 40525 one, on explicit permission from the previous publisher that added 40526 the old one. 40527 40528 The author(s) and publisher(s) of the Document do not by this 40529 License give permission to use their names for publicity for or to 40530 assert or imply endorsement of any Modified Version. 40531 40532 5. COMBINING DOCUMENTS 40533 40534 You may combine the Document with other documents released under 40535 this License, under the terms defined in section 4 above for 40536 modified versions, provided that you include in the combination all 40537 of the Invariant Sections of all of the original documents, 40538 unmodified, and list them all as Invariant Sections of your 40539 combined work in its license notice, and that you preserve all 40540 their Warranty Disclaimers. 40541 40542 The combined work need only contain one copy of this License, and 40543 multiple identical Invariant Sections may be replaced with a single 40544 copy. If there are multiple Invariant Sections with the same name 40545 but different contents, make the title of each such section unique 40546 by adding at the end of it, in parentheses, the name of the 40547 original author or publisher of that section if known, or else a 40548 unique number. Make the same adjustment to the section titles in 40549 the list of Invariant Sections in the license notice of the 40550 combined work. 40551 40552 In the combination, you must combine any sections Entitled 40553 "History" in the various original documents, forming one section 40554 Entitled "History"; likewise combine any sections Entitled 40555 "Acknowledgements", and any sections Entitled "Dedications". You 40556 must delete all sections Entitled "Endorsements." 40557 40558 6. COLLECTIONS OF DOCUMENTS 40559 40560 You may make a collection consisting of the Document and other 40561 documents released under this License, and replace the individual 40562 copies of this License in the various documents with a single copy 40563 that is included in the collection, provided that you follow the 40564 rules of this License for verbatim copying of each of the documents 40565 in all other respects. 40566 40567 You may extract a single document from such a collection, and 40568 distribute it individually under this License, provided you insert 40569 a copy of this License into the extracted document, and follow this 40570 License in all other respects regarding verbatim copying of that 40571 document. 40572 40573 7. AGGREGATION WITH INDEPENDENT WORKS 40574 40575 A compilation of the Document or its derivatives with other 40576 separate and independent documents or works, in or on a volume of a 40577 storage or distribution medium, is called an "aggregate" if the 40578 copyright resulting from the compilation is not used to limit the 40579 legal rights of the compilation's users beyond what the individual 40580 works permit. When the Document is included in an aggregate, this 40581 License does not apply to the other works in the aggregate which 40582 are not themselves derivative works of the Document. 40583 40584 If the Cover Text requirement of section 3 is applicable to these 40585 copies of the Document, then if the Document is less than one half 40586 of the entire aggregate, the Document's Cover Texts may be placed 40587 on covers that bracket the Document within the aggregate, or the 40588 electronic equivalent of covers if the Document is in electronic 40589 form. Otherwise they must appear on printed covers that bracket 40590 the whole aggregate. 40591 40592 8. TRANSLATION 40593 40594 Translation is considered a kind of modification, so you may 40595 distribute translations of the Document under the terms of section 40596 4. Replacing Invariant Sections with translations requires special 40597 permission from their copyright holders, but you may include 40598 translations of some or all Invariant Sections in addition to the 40599 original versions of these Invariant Sections. You may include a 40600 translation of this License, and all the license notices in the 40601 Document, and any Warranty Disclaimers, provided that you also 40602 include the original English version of this License and the 40603 original versions of those notices and disclaimers. In case of a 40604 disagreement between the translation and the original version of 40605 this License or a notice or disclaimer, the original version will 40606 prevail. 40607 40608 If a section in the Document is Entitled "Acknowledgements", 40609 "Dedications", or "History", the requirement (section 4) to 40610 Preserve its Title (section 1) will typically require changing the 40611 actual title. 40612 40613 9. TERMINATION 40614 40615 You may not copy, modify, sublicense, or distribute the Document 40616 except as expressly provided under this License. Any attempt 40617 otherwise to copy, modify, sublicense, or distribute it is void, 40618 and will automatically terminate your rights under this License. 40619 40620 However, if you cease all violation of this License, then your 40621 license from a particular copyright holder is reinstated (a) 40622 provisionally, unless and until the copyright holder explicitly and 40623 finally terminates your license, and (b) permanently, if the 40624 copyright holder fails to notify you of the violation by some 40625 reasonable means prior to 60 days after the cessation. 40626 40627 Moreover, your license from a particular copyright holder is 40628 reinstated permanently if the copyright holder notifies you of the 40629 violation by some reasonable means, this is the first time you have 40630 received notice of violation of this License (for any work) from 40631 that copyright holder, and you cure the violation prior to 30 days 40632 after your receipt of the notice. 40633 40634 Termination of your rights under this section does not terminate 40635 the licenses of parties who have received copies or rights from you 40636 under this License. If your rights have been terminated and not 40637 permanently reinstated, receipt of a copy of some or all of the 40638 same material does not give you any rights to use it. 40639 40640 10. FUTURE REVISIONS OF THIS LICENSE 40641 40642 The Free Software Foundation may publish new, revised versions of 40643 the GNU Free Documentation License from time to time. Such new 40644 versions will be similar in spirit to the present version, but may 40645 differ in detail to address new problems or concerns. See 40646 <http://www.gnu.org/copyleft/>. 40647 40648 Each version of the License is given a distinguishing version 40649 number. If the Document specifies that a particular numbered 40650 version of this License "or any later version" applies to it, you 40651 have the option of following the terms and conditions either of 40652 that specified version or of any later version that has been 40653 published (not as a draft) by the Free Software Foundation. If the 40654 Document does not specify a version number of this License, you may 40655 choose any version ever published (not as a draft) by the Free 40656 Software Foundation. If the Document specifies that a proxy can 40657 decide which future versions of this License can be used, that 40658 proxy's public statement of acceptance of a version permanently 40659 authorizes you to choose that version for the Document. 40660 40661 11. RELICENSING 40662 40663 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 40664 World Wide Web server that publishes copyrightable works and also 40665 provides prominent facilities for anybody to edit those works. A 40666 public wiki that anybody can edit is an example of such a server. 40667 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 40668 site means any set of copyrightable works thus published on the MMC 40669 site. 40670 40671 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 40672 license published by Creative Commons Corporation, a not-for-profit 40673 corporation with a principal place of business in San Francisco, 40674 California, as well as future copyleft versions of that license 40675 published by that same organization. 40676 40677 "Incorporate" means to publish or republish a Document, in whole or 40678 in part, as part of another Document. 40679 40680 An MMC is "eligible for relicensing" if it is licensed under this 40681 License, and if all works that were first published under this 40682 License somewhere other than this MMC, and subsequently 40683 incorporated in whole or in part into the MMC, (1) had no cover 40684 texts or invariant sections, and (2) were thus incorporated prior 40685 to November 1, 2008. 40686 40687 The operator of an MMC Site may republish an MMC contained in the 40688 site under CC-BY-SA on the same site at any time before August 1, 40689 2009, provided the MMC is eligible for relicensing. 40690 40691 ADDENDUM: How to use this License for your documents 40692 ==================================================== 40693 40694 To use this License in a document you have written, include a copy of 40695 the License in the document and put the following copyright and license 40696 notices just after the title page: 40697 40698 Copyright (C) YEAR YOUR NAME. 40699 Permission is granted to copy, distribute and/or modify this document 40700 under the terms of the GNU Free Documentation License, Version 1.3 40701 or any later version published by the Free Software Foundation; 40702 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 40703 Texts. A copy of the license is included in the section entitled ``GNU 40704 Free Documentation License''. 40705 40706 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 40707 replace the "with...Texts." line with this: 40708 40709 with the Invariant Sections being LIST THEIR TITLES, with 40710 the Front-Cover Texts being LIST, and with the Back-Cover Texts 40711 being LIST. 40712 40713 If you have Invariant Sections without Cover Texts, or some other 40714 combination of the three, merge those two alternatives to suit the 40715 situation. 40716 40717 If your document contains nontrivial examples of program code, we 40718 recommend releasing these examples in parallel under your choice of free 40719 software license, such as the GNU General Public License, to permit 40720 their use in free software. 40721 40722 40723 File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 40724 40725 Contributors to GCC 40726 ******************* 40727 40728 The GCC project would like to thank its many contributors. Without them 40729 the project would not have been nearly as successful as it has been. 40730 Any omissions in this list are accidental. Feel free to contact 40731 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 40732 some of your contributions are not listed. Please keep this list in 40733 alphabetical order. 40734 40735 * Analog Devices helped implement the support for complex data types 40736 and iterators. 40737 40738 * John David Anglin for threading-related fixes and improvements to 40739 libstdc++-v3, and the HP-UX port. 40740 40741 * James van Artsdalen wrote the code that makes efficient use of the 40742 Intel 80387 register stack. 40743 40744 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 40745 Series port. 40746 40747 * Alasdair Baird for various bug fixes. 40748 40749 * Giovanni Bajo for analyzing lots of complicated C++ problem 40750 reports. 40751 40752 * Peter Barada for his work to improve code generation for new 40753 ColdFire cores. 40754 40755 * Gerald Baumgartner added the signature extension to the C++ front 40756 end. 40757 40758 * Godmar Back for his Java improvements and encouragement. 40759 40760 * Scott Bambrough for help porting the Java compiler. 40761 40762 * Wolfgang Bangerth for processing tons of bug reports. 40763 40764 * Jon Beniston for his Microsoft Windows port of Java and port to 40765 Lattice Mico32. 40766 40767 * Daniel Berlin for better DWARF2 support, faster/better 40768 optimizations, improved alias analysis, plus migrating GCC to 40769 Bugzilla. 40770 40771 * Geoff Berry for his Java object serialization work and various 40772 patches. 40773 40774 * David Binderman tests weekly snapshots of GCC trunk against Fedora 40775 Rawhide for several architectures. 40776 40777 * Uros Bizjak for the implementation of x87 math built-in functions 40778 and for various middle end and i386 back end improvements and bug 40779 fixes. 40780 40781 * Eric Blake for helping to make GCJ and libgcj conform to the 40782 specifications. 40783 40784 * Janne Blomqvist for contributions to GNU Fortran. 40785 40786 * Segher Boessenkool for various fixes. 40787 40788 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 40789 other Java work. 40790 40791 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 40792 miscellaneous clean-ups. 40793 40794 * Steven Bosscher for integrating the GNU Fortran front end into GCC 40795 and for contributing to the tree-ssa branch. 40796 40797 * Eric Botcazou for fixing middle- and backend bugs left and right. 40798 40799 * Per Bothner for his direction via the steering committee and 40800 various improvements to the infrastructure for supporting new 40801 languages. Chill front end implementation. Initial 40802 implementations of cpplib, fix-header, config.guess, libio, and 40803 past C++ library (libg++) maintainer. Dreaming up, designing and 40804 implementing much of GCJ. 40805 40806 * Devon Bowen helped port GCC to the Tahoe. 40807 40808 * Don Bowman for mips-vxworks contributions. 40809 40810 * Dave Brolley for work on cpplib and Chill. 40811 40812 * Paul Brook for work on the ARM architecture and maintaining GNU 40813 Fortran. 40814 40815 * Robert Brown implemented the support for Encore 32000 systems. 40816 40817 * Christian Bruel for improvements to local store elimination. 40818 40819 * Herman A.J. ten Brugge for various fixes. 40820 40821 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 40822 FAQ. 40823 40824 * Joe Buck for his direction via the steering committee. 40825 40826 * Craig Burley for leadership of the G77 Fortran effort. 40827 40828 * Stephan Buys for contributing Doxygen notes for libstdc++. 40829 40830 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 40831 to the C++ strings, streambufs and formatted I/O, hard detective 40832 work on the frustrating localization issues, and keeping up with 40833 the problem reports. 40834 40835 * John Carr for his alias work, SPARC hacking, infrastructure 40836 improvements, previous contributions to the steering committee, 40837 loop optimizations, etc. 40838 40839 * Stephane Carrez for 68HC11 and 68HC12 ports. 40840 40841 * Steve Chamberlain for support for the Renesas SH and H8 processors 40842 and the PicoJava processor, and for GCJ config fixes. 40843 40844 * Glenn Chambers for help with the GCJ FAQ. 40845 40846 * John-Marc Chandonia for various libgcj patches. 40847 40848 * Denis Chertykov for contributing and maintaining the AVR port, the 40849 first GCC port for an 8-bit architecture. 40850 40851 * Scott Christley for his Objective-C contributions. 40852 40853 * Eric Christopher for his Java porting help and clean-ups. 40854 40855 * Branko Cibej for more warning contributions. 40856 40857 * The GNU Classpath project for all of their merged runtime code. 40858 40859 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, '--help', 40860 and other random hacking. 40861 40862 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 40863 40864 * R. Kelley Cook for making GCC buildable from a read-only directory 40865 as well as other miscellaneous build process and documentation 40866 clean-ups. 40867 40868 * Ralf Corsepius for SH testing and minor bug fixing. 40869 40870 * Stan Cox for care and feeding of the x86 port and lots of behind 40871 the scenes hacking. 40872 40873 * Alex Crain provided changes for the 3b1. 40874 40875 * Ian Dall for major improvements to the NS32k port. 40876 40877 * Paul Dale for his work to add uClinux platform support to the m68k 40878 backend. 40879 40880 * Dario Dariol contributed the four varieties of sample programs that 40881 print a copy of their source. 40882 40883 * Russell Davidson for fstream and stringstream fixes in libstdc++. 40884 40885 * Bud Davis for work on the G77 and GNU Fortran compilers. 40886 40887 * Mo DeJong for GCJ and libgcj bug fixes. 40888 40889 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 40890 various bug fixes, and the M32C, MeP, and RL78 ports. 40891 40892 * Arnaud Desitter for helping to debug GNU Fortran. 40893 40894 * Gabriel Dos Reis for contributions to G++, contributions and 40895 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 40896 including 'valarray<>', 'complex<>', maintaining the numerics 40897 library (including that pesky '<limits>' :-) and keeping up-to-date 40898 anything to do with numbers. 40899 40900 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 40901 ISO C99 support, CFG dumping support, etc., plus support of the C++ 40902 runtime libraries including for all kinds of C interface issues, 40903 contributing and maintaining 'complex<>', sanity checking and 40904 disbursement, configuration architecture, libio maintenance, and 40905 early math work. 40906 40907 * Zdenek Dvorak for a new loop unroller and various fixes. 40908 40909 * Michael Eager for his work on the Xilinx MicroBlaze port. 40910 40911 * Richard Earnshaw for his ongoing work with the ARM. 40912 40913 * David Edelsohn for his direction via the steering committee, 40914 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 40915 loop changes, doing the entire AIX port of libstdc++ with his bare 40916 hands, and for ensuring GCC properly keeps working on AIX. 40917 40918 * Kevin Ediger for the floating point formatting of num_put::do_put 40919 in libstdc++. 40920 40921 * Phil Edwards for libstdc++ work including configuration hackery, 40922 documentation maintainer, chief breaker of the web pages, the 40923 occasional iostream bug fix, and work on shared library symbol 40924 versioning. 40925 40926 * Paul Eggert for random hacking all over GCC. 40927 40928 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 40929 configuration support for locales and fstream-related fixes. 40930 40931 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 40932 iostreams. 40933 40934 * Christian Ehrhardt for dealing with bug reports. 40935 40936 * Ben Elliston for his work to move the Objective-C runtime into its 40937 own subdirectory and for his work on autoconf. 40938 40939 * Revital Eres for work on the PowerPC 750CL port. 40940 40941 * Marc Espie for OpenBSD support. 40942 40943 * Doug Evans for much of the global optimization framework, arc, 40944 m32r, and SPARC work. 40945 40946 * Christopher Faylor for his work on the Cygwin port and for caring 40947 and feeding the gcc.gnu.org box and saving its users tons of spam. 40948 40949 * Fred Fish for BeOS support and Ada fixes. 40950 40951 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 40952 40953 * Peter Gerwinski for various bug fixes and the Pascal front end. 40954 40955 * Kaveh R. Ghazi for his direction via the steering committee, 40956 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 40957 on a plethora of platforms. Kaveh extends his gratitude to the 40958 CAIP Center at Rutgers University for providing him with computing 40959 resources to work on Free Software from the late 1980s to 2010. 40960 40961 * John Gilmore for a donation to the FSF earmarked improving GNU 40962 Java. 40963 40964 * Judy Goldberg for c++ contributions. 40965 40966 * Torbjorn Granlund for various fixes and the c-torture testsuite, 40967 multiply- and divide-by-constant optimization, improved long long 40968 support, improved leaf function register allocation, and his 40969 direction via the steering committee. 40970 40971 * Anthony Green for his '-Os' contributions, the moxie port, and Java 40972 front end work. 40973 40974 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 40975 code. 40976 40977 * Michael K. Gschwind contributed the port to the PDP-11. 40978 40979 * Richard Guenther for his ongoing middle-end contributions and bug 40980 fixes and for release management. 40981 40982 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 40983 the support for Dwarf symbolic debugging information, and much of 40984 the support for System V Release 4. He has also worked heavily on 40985 the Intel 386 and 860 support. 40986 40987 * Sumanth Gundapaneni for contributing the CR16 port. 40988 40989 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 40990 GCSE. 40991 40992 * Bruno Haible for improvements in the runtime overhead for EH, new 40993 warnings and assorted bug fixes. 40994 40995 * Andrew Haley for his amazing Java compiler and library efforts. 40996 40997 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 40998 series 300. 40999 41000 * Michael Hayes for various thankless work he's done trying to get 41001 the c30/c40 ports functional. Lots of loop and unroll improvements 41002 and fixes. 41003 41004 * Dara Hazeghi for wading through myriads of target-specific bug 41005 reports. 41006 41007 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 41008 41009 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 41010 work, loop opts, and generally fixing lots of old problems we've 41011 ignored for years, flow rewrite and lots of further stuff, 41012 including reviewing tons of patches. 41013 41014 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 41015 various fixes. 41016 41017 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 41018 contributed the support for the Sony NEWS machine. 41019 41020 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 41021 various fixes. 41022 41023 * Katherine Holcomb for work on GNU Fortran. 41024 41025 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 41026 of testing and bug fixing, particularly of GCC configury code. 41027 41028 * Steve Holmgren for MachTen patches. 41029 41030 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 41031 41032 * Jan Hubicka for his x86 port improvements. 41033 41034 * Falk Hueffner for working on C and optimization bug reports. 41035 41036 * Bernardo Innocenti for his m68k work, including merging of ColdFire 41037 improvements and uClinux support. 41038 41039 * Christian Iseli for various bug fixes. 41040 41041 * Kamil Iskra for general m68k hacking. 41042 41043 * Lee Iverson for random fixes and MIPS testing. 41044 41045 * Andreas Jaeger for testing and benchmarking of GCC and various bug 41046 fixes. 41047 41048 * Jakub Jelinek for his SPARC work and sibling call optimizations as 41049 well as lots of bug fixes and test cases, and for improving the 41050 Java build system. 41051 41052 * Janis Johnson for ia64 testing and fixes, her quality improvement 41053 sidetracks, and web page maintenance. 41054 41055 * Kean Johnston for SCO OpenServer support and various fixes. 41056 41057 * Tim Josling for the sample language treelang based originally on 41058 Richard Kenner's "toy" language. 41059 41060 * Nicolai Josuttis for additional libstdc++ documentation. 41061 41062 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 41063 target. 41064 41065 * Steven G. Kargl for work on GNU Fortran. 41066 41067 * David Kashtan of SRI adapted GCC to VMS. 41068 41069 * Ryszard Kabatek for many, many libstdc++ bug fixes and 41070 optimizations of strings, especially member functions, and for 41071 auto_ptr fixes. 41072 41073 * Geoffrey Keating for his ongoing work to make the PPC work for 41074 GNU/Linux and his automatic regression tester. 41075 41076 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 41077 work in just about every part of libstdc++. 41078 41079 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 41080 MIL-STD-1750A. 41081 41082 * Richard Kenner of the New York University Ultracomputer Research 41083 Laboratory wrote the machine descriptions for the AMD 29000, the 41084 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 41085 support for instruction attributes. He also made changes to better 41086 support RISC processors including changes to common subexpression 41087 elimination, strength reduction, function calling sequence 41088 handling, and condition code support, in addition to generalizing 41089 the code for frame pointer elimination and delay slot scheduling. 41090 Richard Kenner was also the head maintainer of GCC for several 41091 years. 41092 41093 * Mumit Khan for various contributions to the Cygwin and Mingw32 41094 ports and maintaining binary releases for Microsoft Windows hosts, 41095 and for massive libstdc++ porting work to Cygwin/Mingw32. 41096 41097 * Robin Kirkham for cpu32 support. 41098 41099 * Mark Klein for PA improvements. 41100 41101 * Thomas Koenig for various bug fixes. 41102 41103 * Bruce Korb for the new and improved fixincludes code. 41104 41105 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 41106 effort. 41107 41108 * Charles LaBrec contributed the support for the Integrated Solutions 41109 68020 system. 41110 41111 * Asher Langton and Mike Kumbera for contributing Cray pointer 41112 support to GNU Fortran, and for other GNU Fortran improvements. 41113 41114 * Jeff Law for his direction via the steering committee, coordinating 41115 the entire egcs project and GCC 2.95, rolling out snapshots and 41116 releases, handling merges from GCC2, reviewing tons of patches that 41117 might have fallen through the cracks else, and random but extensive 41118 hacking. 41119 41120 * Walter Lee for work on the TILE-Gx and TILEPro ports. 41121 41122 * Marc Lehmann for his direction via the steering committee and 41123 helping with analysis and improvements of x86 performance. 41124 41125 * Victor Leikehman for work on GNU Fortran. 41126 41127 * Ted Lemon wrote parts of the RTL reader and printer. 41128 41129 * Kriang Lerdsuwanakij for C++ improvements including template as 41130 template parameter support, and many C++ fixes. 41131 41132 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 41133 and random work on the Java front end. 41134 41135 * Alain Lichnewsky ported GCC to the MIPS CPU. 41136 41137 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 41138 and patches. 41139 41140 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 41141 41142 * Chen Liqin for various S+core related fixes/improvement, and for 41143 maintaining the S+core port. 41144 41145 * Weiwen Liu for testing and various bug fixes. 41146 41147 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 41148 diagnostics fixes and improvements. 41149 41150 * Dave Love for his ongoing work with the Fortran front end and 41151 runtime libraries. 41152 41153 * Martin von Lo"wis for internal consistency checking infrastructure, 41154 various C++ improvements including namespace support, and tons of 41155 assistance with libstdc++/compiler merges. 41156 41157 * H.J. Lu for his previous contributions to the steering committee, 41158 many x86 bug reports, prototype patches, and keeping the GNU/Linux 41159 ports working. 41160 41161 * Greg McGary for random fixes and (someday) bounded pointers. 41162 41163 * Andrew MacLeod for his ongoing work in building a real EH system, 41164 various code generation improvements, work on the global optimizer, 41165 etc. 41166 41167 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 41168 hacking improvements to compile-time performance, overall knowledge 41169 and direction in the area of instruction scheduling, and design and 41170 implementation of the automaton based instruction scheduler. 41171 41172 * Bob Manson for his behind the scenes work on dejagnu. 41173 41174 * Philip Martin for lots of libstdc++ string and vector iterator 41175 fixes and improvements, and string clean up and testsuites. 41176 41177 * All of the Mauve project contributors, for Java test code. 41178 41179 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 41180 41181 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 41182 41183 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 41184 powerpc, haifa, ECOFF debug support, and other assorted hacking. 41185 41186 * Jason Merrill for his direction via the steering committee and 41187 leading the G++ effort. 41188 41189 * Martin Michlmayr for testing GCC on several architectures using the 41190 entire Debian archive. 41191 41192 * David Miller for his direction via the steering committee, lots of 41193 SPARC work, improvements in jump.c and interfacing with the Linux 41194 kernel developers. 41195 41196 * Gary Miller ported GCC to Charles River Data Systems machines. 41197 41198 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 41199 the entire libstdc++ testsuite namespace-compatible. 41200 41201 * Mark Mitchell for his direction via the steering committee, 41202 mountains of C++ work, load/store hoisting out of loops, alias 41203 analysis improvements, ISO C 'restrict' support, and serving as 41204 release manager from 2000 to 2011. 41205 41206 * Alan Modra for various GNU/Linux bits and testing. 41207 41208 * Toon Moene for his direction via the steering committee, Fortran 41209 maintenance, and his ongoing work to make us make Fortran run fast. 41210 41211 * Jason Molenda for major help in the care and feeding of all the 41212 services on the gcc.gnu.org (formerly egcs.cygnus.com) 41213 machine--mail, web services, ftp services, etc etc. Doing all this 41214 work on scrap paper and the backs of envelopes would have been... 41215 difficult. 41216 41217 * Catherine Moore for fixing various ugly problems we have sent her 41218 way, including the haifa bug which was killing the Alpha & PowerPC 41219 Linux kernels. 41220 41221 * Mike Moreton for his various Java patches. 41222 41223 * David Mosberger-Tang for various Alpha improvements, and for the 41224 initial IA-64 port. 41225 41226 * Stephen Moshier contributed the floating point emulator that 41227 assists in cross-compilation and permits support for floating point 41228 numbers wider than 64 bits and for ISO C99 support. 41229 41230 * Bill Moyer for his behind the scenes work on various issues. 41231 41232 * Philippe De Muyter for his work on the m68k port. 41233 41234 * Joseph S. Myers for his work on the PDP-11 port, format checking 41235 and ISO C99 support, and continuous emphasis on (and contributions 41236 to) documentation. 41237 41238 * Nathan Myers for his work on libstdc++-v3: architecture and 41239 authorship through the first three snapshots, including 41240 implementation of locale infrastructure, string, shadow C headers, 41241 and the initial project documentation (DESIGN, CHECKLIST, and so 41242 forth). Later, more work on MT-safe string and shadow headers. 41243 41244 * Felix Natter for documentation on porting libstdc++. 41245 41246 * Nathanael Nerode for cleaning up the configuration/build process. 41247 41248 * NeXT, Inc. donated the front end that supports the Objective-C 41249 language. 41250 41251 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 41252 search engine setup, various documentation fixes and other small 41253 fixes. 41254 41255 * Geoff Noer for his work on getting cygwin native builds working. 41256 41257 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 41258 tracking web pages, GIMPLE tuples, and assorted fixes. 41259 41260 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 41261 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 41262 infrastructure improvements. 41263 41264 * Alexandre Oliva for various build infrastructure improvements, 41265 scripts and amazing testing work, including keeping libtool issues 41266 sane and happy. 41267 41268 * Stefan Olsson for work on mt_alloc. 41269 41270 * Melissa O'Neill for various NeXT fixes. 41271 41272 * Rainer Orth for random MIPS work, including improvements to GCC's 41273 o32 ABI support, improvements to dejagnu's MIPS support, Java 41274 configuration clean-ups and porting work, and maintaining the IRIX, 41275 Solaris 2, and Tru64 UNIX ports. 41276 41277 * Hartmut Penner for work on the s390 port. 41278 41279 * Paul Petersen wrote the machine description for the Alliant FX/8. 41280 41281 * Alexandre Petit-Bianco for implementing much of the Java compiler 41282 and continued Java maintainership. 41283 41284 * Matthias Pfaller for major improvements to the NS32k port. 41285 41286 * Gerald Pfeifer for his direction via the steering committee, 41287 pointing out lots of problems we need to solve, maintenance of the 41288 web pages, and taking care of documentation maintenance in general. 41289 41290 * Andrew Pinski for processing bug reports by the dozen. 41291 41292 * Ovidiu Predescu for his work on the Objective-C front end and 41293 runtime libraries. 41294 41295 * Jerry Quinn for major performance improvements in C++ formatted 41296 I/O. 41297 41298 * Ken Raeburn for various improvements to checker, MIPS ports and 41299 various cleanups in the compiler. 41300 41301 * Rolf W. Rasmussen for hacking on AWT. 41302 41303 * David Reese of Sun Microsystems contributed to the Solaris on 41304 PowerPC port. 41305 41306 * Volker Reichelt for keeping up with the problem reports. 41307 41308 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 41309 hacking and developing and maintaining the Epiphany port. 41310 41311 * Loren J. Rittle for improvements to libstdc++-v3 including the 41312 FreeBSD port, threading fixes, thread-related configury changes, 41313 critical threading documentation, and solutions to really tricky 41314 I/O problems, as well as keeping GCC properly working on FreeBSD 41315 and continuous testing. 41316 41317 * Craig Rodrigues for processing tons of bug reports. 41318 41319 * Ola Ro"nnerup for work on mt_alloc. 41320 41321 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 41322 41323 * David Ronis inspired and encouraged Craig to rewrite the G77 41324 documentation in texinfo format by contributing a first pass at a 41325 translation of the old 'g77-0.5.16/f/DOC' file. 41326 41327 * Ken Rose for fixes to GCC's delay slot filling code. 41328 41329 * Paul Rubin wrote most of the preprocessor. 41330 41331 * Pe'tur Runo'lfsson for major performance improvements in C++ 41332 formatted I/O and large file support in C++ filebuf. 41333 41334 * Chip Salzenberg for libstdc++ patches and improvements to locales, 41335 traits, Makefiles, libio, libtool hackery, and "long long" support. 41336 41337 * Juha Sarlin for improvements to the H8 code generator. 41338 41339 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 41340 300. 41341 41342 * Roger Sayle for improvements to constant folding and GCC's RTL 41343 optimizers as well as for fixing numerous bugs. 41344 41345 * Bradley Schatz for his work on the GCJ FAQ. 41346 41347 * Peter Schauer wrote the code to allow debugging to work on the 41348 Alpha. 41349 41350 * William Schelter did most of the work on the Intel 80386 support. 41351 41352 * Tobias Schlu"ter for work on GNU Fortran. 41353 41354 * Bernd Schmidt for various code generation improvements and major 41355 work in the reload pass, serving as release manager for GCC 2.95.3, 41356 and work on the Blackfin and C6X ports. 41357 41358 * Peter Schmid for constant testing of libstdc++--especially 41359 application testing, going above and beyond what was requested for 41360 the release criteria--and libstdc++ header file tweaks. 41361 41362 * Jason Schroeder for jcf-dump patches. 41363 41364 * Andreas Schwab for his work on the m68k port. 41365 41366 * Lars Segerlund for work on GNU Fortran. 41367 41368 * Dodji Seketeli for numerous C++ bug fixes and debug info 41369 improvements. 41370 41371 * Joel Sherrill for his direction via the steering committee, RTEMS 41372 contributions and RTEMS testing. 41373 41374 * Nathan Sidwell for many C++ fixes/improvements. 41375 41376 * Jeffrey Siegal for helping RMS with the original design of GCC, 41377 some code which handles the parse tree and RTL data structures, 41378 constant folding and help with the original VAX & m68k ports. 41379 41380 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 41381 from the LWG (thereby keeping GCC in line with updates from the 41382 ISO). 41383 41384 * Franz Sirl for his ongoing work with making the PPC port stable for 41385 GNU/Linux. 41386 41387 * Andrey Slepuhin for assorted AIX hacking. 41388 41389 * Trevor Smigiel for contributing the SPU port. 41390 41391 * Christopher Smith did the port for Convex machines. 41392 41393 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 41394 41395 * Randy Smith finished the Sun FPA support. 41396 41397 * Scott Snyder for queue, iterator, istream, and string fixes and 41398 libstdc++ testsuite entries. Also for providing the patch to G77 41399 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 41400 'LOGICAL*1'. 41401 41402 * Zdenek Sojka for running automated regression testing of GCC and 41403 reporting numerous bugs. 41404 41405 * Jayant Sonar for contributing the CR16 port. 41406 41407 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 41408 41409 * Richard Stallman, for writing the original GCC and launching the 41410 GNU project. 41411 41412 * Jan Stein of the Chalmers Computer Society provided support for 41413 Genix, as well as part of the 32000 machine description. 41414 41415 * Nigel Stephens for various mips16 related fixes/improvements. 41416 41417 * Jonathan Stone wrote the machine description for the Pyramid 41418 computer. 41419 41420 * Graham Stott for various infrastructure improvements. 41421 41422 * John Stracke for his Java HTTP protocol fixes. 41423 41424 * Mike Stump for his Elxsi port, G++ contributions over the years and 41425 more recently his vxworks contributions 41426 41427 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 41428 41429 * Shigeya Suzuki for this fixes for the bsdi platforms. 41430 41431 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 41432 support, general configury hacking, fixincludes, etc. 41433 41434 * Holger Teutsch provided the support for the Clipper CPU. 41435 41436 * Gary Thomas for his ongoing work to make the PPC work for 41437 GNU/Linux. 41438 41439 * Philipp Thomas for random bug fixes throughout the compiler 41440 41441 * Jason Thorpe for thread support in libstdc++ on NetBSD. 41442 41443 * Kresten Krab Thorup wrote the run time support for the Objective-C 41444 language and the fantastic Java bytecode interpreter. 41445 41446 * Michael Tiemann for random bug fixes, the first instruction 41447 scheduler, initial C++ support, function integration, NS32k, SPARC 41448 and M88k machine description work, delay slot scheduling. 41449 41450 * Andreas Tobler for his work porting libgcj to Darwin. 41451 41452 * Teemu Torma for thread safe exception handling support. 41453 41454 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 41455 definitions, and of the VAX machine description. 41456 41457 * Daniel Towner and Hariharan Sandanagobalane contributed and 41458 maintain the picoChip port. 41459 41460 * Tom Tromey for internationalization support and for his many Java 41461 contributions and libgcj maintainership. 41462 41463 * Lassi Tuura for improvements to config.guess to determine HP 41464 processor types. 41465 41466 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 41467 41468 * Andy Vaught for the design and initial implementation of the GNU 41469 Fortran front end. 41470 41471 * Brent Verner for work with the libstdc++ cshadow files and their 41472 associated configure steps. 41473 41474 * Todd Vierling for contributions for NetBSD ports. 41475 41476 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 41477 guidance. 41478 41479 * Dean Wakerley for converting the install documentation from HTML to 41480 texinfo in time for GCC 3.0. 41481 41482 * Krister Walfridsson for random bug fixes. 41483 41484 * Feng Wang for contributions to GNU Fortran. 41485 41486 * Stephen M. Webb for time and effort on making libstdc++ shadow 41487 files work with the tricky Solaris 8+ headers, and for pushing the 41488 build-time header tree. 41489 41490 * John Wehle for various improvements for the x86 code generator, 41491 related infrastructure improvements to help x86 code generation, 41492 value range propagation and other work, WE32k port. 41493 41494 * Ulrich Weigand for work on the s390 port. 41495 41496 * Zack Weinberg for major work on cpplib and various other bug fixes. 41497 41498 * Matt Welsh for help with Linux Threads support in GCJ. 41499 41500 * Urban Widmark for help fixing java.io. 41501 41502 * Mark Wielaard for new Java library code and his work integrating 41503 with Classpath. 41504 41505 * Dale Wiles helped port GCC to the Tahoe. 41506 41507 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 41508 41509 * Jim Wilson for his direction via the steering committee, tackling 41510 hard problems in various places that nobody else wanted to work on, 41511 strength reduction and other loop optimizations. 41512 41513 * Paul Woegerer and Tal Agmon for the CRX port. 41514 41515 * Carlo Wood for various fixes. 41516 41517 * Tom Wood for work on the m88k port. 41518 41519 * Canqun Yang for work on GNU Fortran. 41520 41521 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 41522 description for the Tron architecture (specifically, the Gmicro). 41523 41524 * Kevin Zachmann helped port GCC to the Tahoe. 41525 41526 * Ayal Zaks for Swing Modulo Scheduling (SMS). 41527 41528 * Xiaoqiang Zhang for work on GNU Fortran. 41529 41530 * Gilles Zunino for help porting Java to Irix. 41531 41532 The following people are recognized for their contributions to GNAT, 41533 the Ada front end of GCC: 41534 * Bernard Banner 41535 41536 * Romain Berrendonner 41537 41538 * Geert Bosch 41539 41540 * Emmanuel Briot 41541 41542 * Joel Brobecker 41543 41544 * Ben Brosgol 41545 41546 * Vincent Celier 41547 41548 * Arnaud Charlet 41549 41550 * Chien Chieng 41551 41552 * Cyrille Comar 41553 41554 * Cyrille Crozes 41555 41556 * Robert Dewar 41557 41558 * Gary Dismukes 41559 41560 * Robert Duff 41561 41562 * Ed Falis 41563 41564 * Ramon Fernandez 41565 41566 * Sam Figueroa 41567 41568 * Vasiliy Fofanov 41569 41570 * Michael Friess 41571 41572 * Franco Gasperoni 41573 41574 * Ted Giering 41575 41576 * Matthew Gingell 41577 41578 * Laurent Guerby 41579 41580 * Jerome Guitton 41581 41582 * Olivier Hainque 41583 41584 * Jerome Hugues 41585 41586 * Hristian Kirtchev 41587 41588 * Jerome Lambourg 41589 41590 * Bruno Leclerc 41591 41592 * Albert Lee 41593 41594 * Sean McNeil 41595 41596 * Javier Miranda 41597 41598 * Laurent Nana 41599 41600 * Pascal Obry 41601 41602 * Dong-Ik Oh 41603 41604 * Laurent Pautet 41605 41606 * Brett Porter 41607 41608 * Thomas Quinot 41609 41610 * Nicolas Roche 41611 41612 * Pat Rogers 41613 41614 * Jose Ruiz 41615 41616 * Douglas Rupp 41617 41618 * Sergey Rybin 41619 41620 * Gail Schenker 41621 41622 * Ed Schonberg 41623 41624 * Nicolas Setton 41625 41626 * Samuel Tardieu 41627 41628 The following people are recognized for their contributions of new 41629 features, bug reports, testing and integration of classpath/libgcj for 41630 GCC version 4.1: 41631 * Lillian Angel for 'JTree' implementation and lots Free Swing 41632 additions and bug fixes. 41633 41634 * Wolfgang Baer for 'GapContent' bug fixes. 41635 41636 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 41637 event fixes, lots of Free Swing work including 'JTable' editing. 41638 41639 * Stuart Ballard for RMI constant fixes. 41640 41641 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 41642 41643 * Gary Benson for 'MessageFormat' fixes. 41644 41645 * Daniel Bonniot for 'Serialization' fixes. 41646 41647 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 41648 and 'DOM xml:id' support. 41649 41650 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 41651 41652 * Archie Cobbs for build fixes, VM interface updates, 41653 'URLClassLoader' updates. 41654 41655 * Kelley Cook for build fixes. 41656 41657 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 41658 41659 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 41660 improvements. 41661 41662 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 41663 2D support. Lots of imageio framework additions, lots of AWT and 41664 Free Swing bug fixes. 41665 41666 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 41667 fixes, better 'Proxy' support, bug fixes and IKVM integration. 41668 41669 * Santiago Gala for 'AccessControlContext' fixes. 41670 41671 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 41672 improvements. 41673 41674 * David Gilbert for 'basic' and 'metal' icon and plaf support and 41675 lots of documenting, Lots of Free Swing and metal theme additions. 41676 'MetalIconFactory' implementation. 41677 41678 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 41679 41680 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 41681 build speedups. 41682 41683 * Kim Ho for 'JFileChooser' implementation. 41684 41685 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 41686 'Serialization' fixes, 'Properties' XML support and generic branch 41687 work, VMIntegration guide update. 41688 41689 * Bastiaan Huisman for 'TimeZone' bug fixing. 41690 41691 * Andreas Jaeger for mprec updates. 41692 41693 * Paul Jenner for better '-Werror' support. 41694 41695 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 41696 41697 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 41698 bug fixes all over. Lots of Free Swing work including styled text. 41699 41700 * Simon Kitching for 'String' cleanups and optimization suggestions. 41701 41702 * Michael Koch for configuration fixes, 'Locale' updates, bug and 41703 build fixes. 41704 41705 * Guilhem Lavaux for configuration, thread and channel fixes and 41706 Kaffe integration. JCL native 'Pointer' updates. Logger bug 41707 fixes. 41708 41709 * David Lichteblau for JCL support library global/local reference 41710 cleanups. 41711 41712 * Aaron Luchko for JDWP updates and documentation fixes. 41713 41714 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 41715 features. 41716 41717 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 41718 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 41719 and implementing the Qt4 peers. 41720 41721 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 41722 'SystemLogger' and 'FileHandler' rotate implementations, NIO 41723 'FileChannel.map' support, security and policy updates. 41724 41725 * Bryce McKinlay for RMI work. 41726 41727 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 41728 testing and documenting. 41729 41730 * Kalle Olavi Niemitalo for build fixes. 41731 41732 * Rainer Orth for build fixes. 41733 41734 * Andrew Overholt for 'File' locking fixes. 41735 41736 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 41737 41738 * Olga Rodimina for 'MenuSelectionManager' implementation. 41739 41740 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 41741 41742 * Julian Scheid for documentation updates and gjdoc support. 41743 41744 * Christian Schlichtherle for zip fixes and cleanups. 41745 41746 * Robert Schuster for documentation updates and beans fixes, 41747 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 41748 and URL, AWT and Free Swing bug fixes. 41749 41750 * Keith Seitz for lots of JDWP work. 41751 41752 * Christian Thalinger for 64-bit cleanups, Configuration and VM 41753 interface fixes and 'CACAO' integration, 'fdlibm' updates. 41754 41755 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 41756 41757 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 41758 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 41759 41760 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 41761 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 41762 'GdkPixbugDecoder' updates. 41763 41764 * Tom Tromey for Eclipse integration, generics work, lots of bug 41765 fixes and gcj integration including coordinating The Big Merge. 41766 41767 * Mark Wielaard for bug fixes, packaging and release management, 41768 'Clipboard' implementation, system call interrupts and network 41769 timeouts and 'GdkPixpufDecoder' fixes. 41770 41771 In addition to the above, all of which also contributed time and energy 41772 in testing GCC, we would like to thank the following for their 41773 contributions to testing: 41774 41775 * Michael Abd-El-Malek 41776 41777 * Thomas Arend 41778 41779 * Bonzo Armstrong 41780 41781 * Steven Ashe 41782 41783 * Chris Baldwin 41784 41785 * David Billinghurst 41786 41787 * Jim Blandy 41788 41789 * Stephane Bortzmeyer 41790 41791 * Horst von Brand 41792 41793 * Frank Braun 41794 41795 * Rodney Brown 41796 41797 * Sidney Cadot 41798 41799 * Bradford Castalia 41800 41801 * Robert Clark 41802 41803 * Jonathan Corbet 41804 41805 * Ralph Doncaster 41806 41807 * Richard Emberson 41808 41809 * Levente Farkas 41810 41811 * Graham Fawcett 41812 41813 * Mark Fernyhough 41814 41815 * Robert A. French 41816 41817 * Jo"rgen Freyh 41818 41819 * Mark K. Gardner 41820 41821 * Charles-Antoine Gauthier 41822 41823 * Yung Shing Gene 41824 41825 * David Gilbert 41826 41827 * Simon Gornall 41828 41829 * Fred Gray 41830 41831 * John Griffin 41832 41833 * Patrik Hagglund 41834 41835 * Phil Hargett 41836 41837 * Amancio Hasty 41838 41839 * Takafumi Hayashi 41840 41841 * Bryan W. Headley 41842 41843 * Kevin B. Hendricks 41844 41845 * Joep Jansen 41846 41847 * Christian Joensson 41848 41849 * Michel Kern 41850 41851 * David Kidd 41852 41853 * Tobias Kuipers 41854 41855 * Anand Krishnaswamy 41856 41857 * A. O. V. Le Blanc 41858 41859 * llewelly 41860 41861 * Damon Love 41862 41863 * Brad Lucier 41864 41865 * Matthias Klose 41866 41867 * Martin Knoblauch 41868 41869 * Rick Lutowski 41870 41871 * Jesse Macnish 41872 41873 * Stefan Morrell 41874 41875 * Anon A. Mous 41876 41877 * Matthias Mueller 41878 41879 * Pekka Nikander 41880 41881 * Rick Niles 41882 41883 * Jon Olson 41884 41885 * Magnus Persson 41886 41887 * Chris Pollard 41888 41889 * Richard Polton 41890 41891 * Derk Reefman 41892 41893 * David Rees 41894 41895 * Paul Reilly 41896 41897 * Tom Reilly 41898 41899 * Torsten Rueger 41900 41901 * Danny Sadinoff 41902 41903 * Marc Schifer 41904 41905 * Erik Schnetter 41906 41907 * Wayne K. Schroll 41908 41909 * David Schuler 41910 41911 * Vin Shelton 41912 41913 * Tim Souder 41914 41915 * Adam Sulmicki 41916 41917 * Bill Thorson 41918 41919 * George Talbot 41920 41921 * Pedro A. M. Vazquez 41922 41923 * Gregory Warnes 41924 41925 * Ian Watson 41926 41927 * David E. Young 41928 41929 * And many others 41930 41931 And finally we'd like to thank everyone who uses the compiler, provides 41932 feedback and generally reminds us why we're doing this work in the first 41933 place. 41934 41935 41936 File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 41937 41938 Option Index 41939 ************ 41940 41941 GCC's command line options are indexed here without any initial '-' or 41942 '--'. Where an option has both positive and negative forms (such as 41943 '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 41944 indexed under the most appropriate form; it may sometimes be useful to 41945 look up both forms. 41946 41947 [index] 41948 * Menu: 41949 41950 * fltrans: Internal flags. (line 18) 41951 * fltrans-output-list: Internal flags. (line 23) 41952 * fwpa: Internal flags. (line 9) 41953 * msoft-float: Soft float library routines. 41954 (line 6) 41955 41956 41957 File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 41958 41959 Concept Index 41960 ************* 41961 41962 [index] 41963 * Menu: 41964 41965 * '!' in constraint: Multi-Alternative. (line 47) 41966 * '#' in constraint: Modifiers. (line 67) 41967 * '#' in template: Output Template. (line 66) 41968 * #pragma: Misc. (line 379) 41969 * '%' in constraint: Modifiers. (line 45) 41970 * % in GTY option: GTY Options. (line 18) 41971 * '%' in template: Output Template. (line 6) 41972 * '&' in constraint: Modifiers. (line 25) 41973 * (nil): RTL Objects. (line 73) 41974 * '*' in constraint: Modifiers. (line 72) 41975 * '*' in template: Output Statement. (line 29) 41976 * '+' in constraint: Modifiers. (line 12) 41977 * '-fsection-anchors': Special Accessors. (line 117) 41978 * '-fsection-anchors' <1>: Anchored Addresses. (line 6) 41979 * '/c' in RTL dump: Flags. (line 221) 41980 * '/f' in RTL dump: Flags. (line 229) 41981 * '/i' in RTL dump: Flags. (line 274) 41982 * '/j' in RTL dump: Flags. (line 286) 41983 * '/s' in RTL dump: Flags. (line 245) 41984 * '/u' in RTL dump: Flags. (line 296) 41985 * '/v' in RTL dump: Flags. (line 328) 41986 * '0' in constraint: Simple Constraints. (line 128) 41987 * '<' in constraint: Simple Constraints. (line 47) 41988 * '=' in constraint: Modifiers. (line 8) 41989 * '>' in constraint: Simple Constraints. (line 59) 41990 * '?' in constraint: Multi-Alternative. (line 41) 41991 * \: Output Template. (line 46) 41992 * __absvdi2: Integer library routines. 41993 (line 106) 41994 * __absvsi2: Integer library routines. 41995 (line 105) 41996 * __addda3: Fixed-point fractional library routines. 41997 (line 44) 41998 * __adddf3: Soft float library routines. 41999 (line 22) 42000 * __adddq3: Fixed-point fractional library routines. 42001 (line 31) 42002 * __addha3: Fixed-point fractional library routines. 42003 (line 41) 42004 * __addhq3: Fixed-point fractional library routines. 42005 (line 29) 42006 * __addqq3: Fixed-point fractional library routines. 42007 (line 27) 42008 * __addsa3: Fixed-point fractional library routines. 42009 (line 43) 42010 * __addsf3: Soft float library routines. 42011 (line 21) 42012 * __addsq3: Fixed-point fractional library routines. 42013 (line 30) 42014 * __addta3: Fixed-point fractional library routines. 42015 (line 45) 42016 * __addtf3: Soft float library routines. 42017 (line 23) 42018 * __adduda3: Fixed-point fractional library routines. 42019 (line 51) 42020 * __addudq3: Fixed-point fractional library routines. 42021 (line 39) 42022 * __adduha3: Fixed-point fractional library routines. 42023 (line 47) 42024 * __adduhq3: Fixed-point fractional library routines. 42025 (line 35) 42026 * __adduqq3: Fixed-point fractional library routines. 42027 (line 33) 42028 * __addusa3: Fixed-point fractional library routines. 42029 (line 49) 42030 * __addusq3: Fixed-point fractional library routines. 42031 (line 37) 42032 * __adduta3: Fixed-point fractional library routines. 42033 (line 53) 42034 * __addvdi3: Integer library routines. 42035 (line 110) 42036 * __addvsi3: Integer library routines. 42037 (line 109) 42038 * __addxf3: Soft float library routines. 42039 (line 25) 42040 * __ashlda3: Fixed-point fractional library routines. 42041 (line 350) 42042 * __ashldi3: Integer library routines. 42043 (line 13) 42044 * __ashldq3: Fixed-point fractional library routines. 42045 (line 338) 42046 * __ashlha3: Fixed-point fractional library routines. 42047 (line 348) 42048 * __ashlhq3: Fixed-point fractional library routines. 42049 (line 336) 42050 * __ashlqq3: Fixed-point fractional library routines. 42051 (line 335) 42052 * __ashlsa3: Fixed-point fractional library routines. 42053 (line 349) 42054 * __ashlsi3: Integer library routines. 42055 (line 12) 42056 * __ashlsq3: Fixed-point fractional library routines. 42057 (line 337) 42058 * __ashlta3: Fixed-point fractional library routines. 42059 (line 351) 42060 * __ashlti3: Integer library routines. 42061 (line 14) 42062 * __ashluda3: Fixed-point fractional library routines. 42063 (line 357) 42064 * __ashludq3: Fixed-point fractional library routines. 42065 (line 346) 42066 * __ashluha3: Fixed-point fractional library routines. 42067 (line 353) 42068 * __ashluhq3: Fixed-point fractional library routines. 42069 (line 342) 42070 * __ashluqq3: Fixed-point fractional library routines. 42071 (line 340) 42072 * __ashlusa3: Fixed-point fractional library routines. 42073 (line 355) 42074 * __ashlusq3: Fixed-point fractional library routines. 42075 (line 344) 42076 * __ashluta3: Fixed-point fractional library routines. 42077 (line 359) 42078 * __ashrda3: Fixed-point fractional library routines. 42079 (line 370) 42080 * __ashrdi3: Integer library routines. 42081 (line 18) 42082 * __ashrdq3: Fixed-point fractional library routines. 42083 (line 366) 42084 * __ashrha3: Fixed-point fractional library routines. 42085 (line 368) 42086 * __ashrhq3: Fixed-point fractional library routines. 42087 (line 364) 42088 * __ashrqq3: Fixed-point fractional library routines. 42089 (line 363) 42090 * __ashrsa3: Fixed-point fractional library routines. 42091 (line 369) 42092 * __ashrsi3: Integer library routines. 42093 (line 17) 42094 * __ashrsq3: Fixed-point fractional library routines. 42095 (line 365) 42096 * __ashrta3: Fixed-point fractional library routines. 42097 (line 371) 42098 * __ashrti3: Integer library routines. 42099 (line 19) 42100 * __bid_adddd3: Decimal float library routines. 42101 (line 23) 42102 * __bid_addsd3: Decimal float library routines. 42103 (line 19) 42104 * __bid_addtd3: Decimal float library routines. 42105 (line 27) 42106 * __bid_divdd3: Decimal float library routines. 42107 (line 66) 42108 * __bid_divsd3: Decimal float library routines. 42109 (line 62) 42110 * __bid_divtd3: Decimal float library routines. 42111 (line 70) 42112 * __bid_eqdd2: Decimal float library routines. 42113 (line 258) 42114 * __bid_eqsd2: Decimal float library routines. 42115 (line 256) 42116 * __bid_eqtd2: Decimal float library routines. 42117 (line 260) 42118 * __bid_extendddtd2: Decimal float library routines. 42119 (line 91) 42120 * __bid_extendddtf: Decimal float library routines. 42121 (line 139) 42122 * __bid_extendddxf: Decimal float library routines. 42123 (line 133) 42124 * __bid_extenddfdd: Decimal float library routines. 42125 (line 146) 42126 * __bid_extenddftd: Decimal float library routines. 42127 (line 106) 42128 * __bid_extendsddd2: Decimal float library routines. 42129 (line 87) 42130 * __bid_extendsddf: Decimal float library routines. 42131 (line 127) 42132 * __bid_extendsdtd2: Decimal float library routines. 42133 (line 89) 42134 * __bid_extendsdtf: Decimal float library routines. 42135 (line 137) 42136 * __bid_extendsdxf: Decimal float library routines. 42137 (line 131) 42138 * __bid_extendsfdd: Decimal float library routines. 42139 (line 102) 42140 * __bid_extendsfsd: Decimal float library routines. 42141 (line 144) 42142 * __bid_extendsftd: Decimal float library routines. 42143 (line 104) 42144 * __bid_extendtftd: Decimal float library routines. 42145 (line 148) 42146 * __bid_extendxftd: Decimal float library routines. 42147 (line 108) 42148 * __bid_fixdddi: Decimal float library routines. 42149 (line 169) 42150 * __bid_fixddsi: Decimal float library routines. 42151 (line 161) 42152 * __bid_fixsddi: Decimal float library routines. 42153 (line 167) 42154 * __bid_fixsdsi: Decimal float library routines. 42155 (line 159) 42156 * __bid_fixtddi: Decimal float library routines. 42157 (line 171) 42158 * __bid_fixtdsi: Decimal float library routines. 42159 (line 163) 42160 * __bid_fixunsdddi: Decimal float library routines. 42161 (line 186) 42162 * __bid_fixunsddsi: Decimal float library routines. 42163 (line 177) 42164 * __bid_fixunssddi: Decimal float library routines. 42165 (line 184) 42166 * __bid_fixunssdsi: Decimal float library routines. 42167 (line 175) 42168 * __bid_fixunstddi: Decimal float library routines. 42169 (line 188) 42170 * __bid_fixunstdsi: Decimal float library routines. 42171 (line 179) 42172 * __bid_floatdidd: Decimal float library routines. 42173 (line 204) 42174 * __bid_floatdisd: Decimal float library routines. 42175 (line 202) 42176 * __bid_floatditd: Decimal float library routines. 42177 (line 206) 42178 * __bid_floatsidd: Decimal float library routines. 42179 (line 195) 42180 * __bid_floatsisd: Decimal float library routines. 42181 (line 193) 42182 * __bid_floatsitd: Decimal float library routines. 42183 (line 197) 42184 * __bid_floatunsdidd: Decimal float library routines. 42185 (line 222) 42186 * __bid_floatunsdisd: Decimal float library routines. 42187 (line 220) 42188 * __bid_floatunsditd: Decimal float library routines. 42189 (line 224) 42190 * __bid_floatunssidd: Decimal float library routines. 42191 (line 213) 42192 * __bid_floatunssisd: Decimal float library routines. 42193 (line 211) 42194 * __bid_floatunssitd: Decimal float library routines. 42195 (line 215) 42196 * __bid_gedd2: Decimal float library routines. 42197 (line 276) 42198 * __bid_gesd2: Decimal float library routines. 42199 (line 274) 42200 * __bid_getd2: Decimal float library routines. 42201 (line 278) 42202 * __bid_gtdd2: Decimal float library routines. 42203 (line 303) 42204 * __bid_gtsd2: Decimal float library routines. 42205 (line 301) 42206 * __bid_gttd2: Decimal float library routines. 42207 (line 305) 42208 * __bid_ledd2: Decimal float library routines. 42209 (line 294) 42210 * __bid_lesd2: Decimal float library routines. 42211 (line 292) 42212 * __bid_letd2: Decimal float library routines. 42213 (line 296) 42214 * __bid_ltdd2: Decimal float library routines. 42215 (line 285) 42216 * __bid_ltsd2: Decimal float library routines. 42217 (line 283) 42218 * __bid_lttd2: Decimal float library routines. 42219 (line 287) 42220 * __bid_muldd3: Decimal float library routines. 42221 (line 52) 42222 * __bid_mulsd3: Decimal float library routines. 42223 (line 48) 42224 * __bid_multd3: Decimal float library routines. 42225 (line 56) 42226 * __bid_nedd2: Decimal float library routines. 42227 (line 267) 42228 * __bid_negdd2: Decimal float library routines. 42229 (line 77) 42230 * __bid_negsd2: Decimal float library routines. 42231 (line 75) 42232 * __bid_negtd2: Decimal float library routines. 42233 (line 79) 42234 * __bid_nesd2: Decimal float library routines. 42235 (line 265) 42236 * __bid_netd2: Decimal float library routines. 42237 (line 269) 42238 * __bid_subdd3: Decimal float library routines. 42239 (line 37) 42240 * __bid_subsd3: Decimal float library routines. 42241 (line 33) 42242 * __bid_subtd3: Decimal float library routines. 42243 (line 41) 42244 * __bid_truncdddf: Decimal float library routines. 42245 (line 152) 42246 * __bid_truncddsd2: Decimal float library routines. 42247 (line 93) 42248 * __bid_truncddsf: Decimal float library routines. 42249 (line 123) 42250 * __bid_truncdfsd: Decimal float library routines. 42251 (line 110) 42252 * __bid_truncsdsf: Decimal float library routines. 42253 (line 150) 42254 * __bid_trunctddd2: Decimal float library routines. 42255 (line 97) 42256 * __bid_trunctddf: Decimal float library routines. 42257 (line 129) 42258 * __bid_trunctdsd2: Decimal float library routines. 42259 (line 95) 42260 * __bid_trunctdsf: Decimal float library routines. 42261 (line 125) 42262 * __bid_trunctdtf: Decimal float library routines. 42263 (line 154) 42264 * __bid_trunctdxf: Decimal float library routines. 42265 (line 135) 42266 * __bid_trunctfdd: Decimal float library routines. 42267 (line 118) 42268 * __bid_trunctfsd: Decimal float library routines. 42269 (line 114) 42270 * __bid_truncxfdd: Decimal float library routines. 42271 (line 116) 42272 * __bid_truncxfsd: Decimal float library routines. 42273 (line 112) 42274 * __bid_unorddd2: Decimal float library routines. 42275 (line 234) 42276 * __bid_unordsd2: Decimal float library routines. 42277 (line 232) 42278 * __bid_unordtd2: Decimal float library routines. 42279 (line 236) 42280 * __bswapdi2: Integer library routines. 42281 (line 161) 42282 * __bswapsi2: Integer library routines. 42283 (line 160) 42284 * __builtin_classify_type: Varargs. (line 48) 42285 * __builtin_next_arg: Varargs. (line 39) 42286 * __builtin_saveregs: Varargs. (line 22) 42287 * __clear_cache: Miscellaneous routines. 42288 (line 9) 42289 * __clzdi2: Integer library routines. 42290 (line 130) 42291 * __clzsi2: Integer library routines. 42292 (line 129) 42293 * __clzti2: Integer library routines. 42294 (line 131) 42295 * __cmpda2: Fixed-point fractional library routines. 42296 (line 450) 42297 * __cmpdf2: Soft float library routines. 42298 (line 163) 42299 * __cmpdi2: Integer library routines. 42300 (line 86) 42301 * __cmpdq2: Fixed-point fractional library routines. 42302 (line 439) 42303 * __cmpha2: Fixed-point fractional library routines. 42304 (line 448) 42305 * __cmphq2: Fixed-point fractional library routines. 42306 (line 437) 42307 * __cmpqq2: Fixed-point fractional library routines. 42308 (line 436) 42309 * __cmpsa2: Fixed-point fractional library routines. 42310 (line 449) 42311 * __cmpsf2: Soft float library routines. 42312 (line 162) 42313 * __cmpsq2: Fixed-point fractional library routines. 42314 (line 438) 42315 * __cmpta2: Fixed-point fractional library routines. 42316 (line 451) 42317 * __cmptf2: Soft float library routines. 42318 (line 164) 42319 * __cmpti2: Integer library routines. 42320 (line 87) 42321 * __cmpuda2: Fixed-point fractional library routines. 42322 (line 456) 42323 * __cmpudq2: Fixed-point fractional library routines. 42324 (line 446) 42325 * __cmpuha2: Fixed-point fractional library routines. 42326 (line 453) 42327 * __cmpuhq2: Fixed-point fractional library routines. 42328 (line 443) 42329 * __cmpuqq2: Fixed-point fractional library routines. 42330 (line 441) 42331 * __cmpusa2: Fixed-point fractional library routines. 42332 (line 455) 42333 * __cmpusq2: Fixed-point fractional library routines. 42334 (line 444) 42335 * __cmputa2: Fixed-point fractional library routines. 42336 (line 458) 42337 * __CTOR_LIST__: Initialization. (line 25) 42338 * __ctzdi2: Integer library routines. 42339 (line 137) 42340 * __ctzsi2: Integer library routines. 42341 (line 136) 42342 * __ctzti2: Integer library routines. 42343 (line 138) 42344 * __divda3: Fixed-point fractional library routines. 42345 (line 226) 42346 * __divdc3: Soft float library routines. 42347 (line 250) 42348 * __divdf3: Soft float library routines. 42349 (line 47) 42350 * __divdi3: Integer library routines. 42351 (line 24) 42352 * __divdq3: Fixed-point fractional library routines. 42353 (line 221) 42354 * __divha3: Fixed-point fractional library routines. 42355 (line 223) 42356 * __divhq3: Fixed-point fractional library routines. 42357 (line 219) 42358 * __divqq3: Fixed-point fractional library routines. 42359 (line 217) 42360 * __divsa3: Fixed-point fractional library routines. 42361 (line 225) 42362 * __divsc3: Soft float library routines. 42363 (line 248) 42364 * __divsf3: Soft float library routines. 42365 (line 46) 42366 * __divsi3: Integer library routines. 42367 (line 23) 42368 * __divsq3: Fixed-point fractional library routines. 42369 (line 220) 42370 * __divta3: Fixed-point fractional library routines. 42371 (line 227) 42372 * __divtc3: Soft float library routines. 42373 (line 252) 42374 * __divtf3: Soft float library routines. 42375 (line 48) 42376 * __divti3: Integer library routines. 42377 (line 25) 42378 * __divxc3: Soft float library routines. 42379 (line 254) 42380 * __divxf3: Soft float library routines. 42381 (line 50) 42382 * __dpd_adddd3: Decimal float library routines. 42383 (line 21) 42384 * __dpd_addsd3: Decimal float library routines. 42385 (line 17) 42386 * __dpd_addtd3: Decimal float library routines. 42387 (line 25) 42388 * __dpd_divdd3: Decimal float library routines. 42389 (line 64) 42390 * __dpd_divsd3: Decimal float library routines. 42391 (line 60) 42392 * __dpd_divtd3: Decimal float library routines. 42393 (line 68) 42394 * __dpd_eqdd2: Decimal float library routines. 42395 (line 257) 42396 * __dpd_eqsd2: Decimal float library routines. 42397 (line 255) 42398 * __dpd_eqtd2: Decimal float library routines. 42399 (line 259) 42400 * __dpd_extendddtd2: Decimal float library routines. 42401 (line 90) 42402 * __dpd_extendddtf: Decimal float library routines. 42403 (line 138) 42404 * __dpd_extendddxf: Decimal float library routines. 42405 (line 132) 42406 * __dpd_extenddfdd: Decimal float library routines. 42407 (line 145) 42408 * __dpd_extenddftd: Decimal float library routines. 42409 (line 105) 42410 * __dpd_extendsddd2: Decimal float library routines. 42411 (line 86) 42412 * __dpd_extendsddf: Decimal float library routines. 42413 (line 126) 42414 * __dpd_extendsdtd2: Decimal float library routines. 42415 (line 88) 42416 * __dpd_extendsdtf: Decimal float library routines. 42417 (line 136) 42418 * __dpd_extendsdxf: Decimal float library routines. 42419 (line 130) 42420 * __dpd_extendsfdd: Decimal float library routines. 42421 (line 101) 42422 * __dpd_extendsfsd: Decimal float library routines. 42423 (line 143) 42424 * __dpd_extendsftd: Decimal float library routines. 42425 (line 103) 42426 * __dpd_extendtftd: Decimal float library routines. 42427 (line 147) 42428 * __dpd_extendxftd: Decimal float library routines. 42429 (line 107) 42430 * __dpd_fixdddi: Decimal float library routines. 42431 (line 168) 42432 * __dpd_fixddsi: Decimal float library routines. 42433 (line 160) 42434 * __dpd_fixsddi: Decimal float library routines. 42435 (line 166) 42436 * __dpd_fixsdsi: Decimal float library routines. 42437 (line 158) 42438 * __dpd_fixtddi: Decimal float library routines. 42439 (line 170) 42440 * __dpd_fixtdsi: Decimal float library routines. 42441 (line 162) 42442 * __dpd_fixunsdddi: Decimal float library routines. 42443 (line 185) 42444 * __dpd_fixunsddsi: Decimal float library routines. 42445 (line 176) 42446 * __dpd_fixunssddi: Decimal float library routines. 42447 (line 183) 42448 * __dpd_fixunssdsi: Decimal float library routines. 42449 (line 174) 42450 * __dpd_fixunstddi: Decimal float library routines. 42451 (line 187) 42452 * __dpd_fixunstdsi: Decimal float library routines. 42453 (line 178) 42454 * __dpd_floatdidd: Decimal float library routines. 42455 (line 203) 42456 * __dpd_floatdisd: Decimal float library routines. 42457 (line 201) 42458 * __dpd_floatditd: Decimal float library routines. 42459 (line 205) 42460 * __dpd_floatsidd: Decimal float library routines. 42461 (line 194) 42462 * __dpd_floatsisd: Decimal float library routines. 42463 (line 192) 42464 * __dpd_floatsitd: Decimal float library routines. 42465 (line 196) 42466 * __dpd_floatunsdidd: Decimal float library routines. 42467 (line 221) 42468 * __dpd_floatunsdisd: Decimal float library routines. 42469 (line 219) 42470 * __dpd_floatunsditd: Decimal float library routines. 42471 (line 223) 42472 * __dpd_floatunssidd: Decimal float library routines. 42473 (line 212) 42474 * __dpd_floatunssisd: Decimal float library routines. 42475 (line 210) 42476 * __dpd_floatunssitd: Decimal float library routines. 42477 (line 214) 42478 * __dpd_gedd2: Decimal float library routines. 42479 (line 275) 42480 * __dpd_gesd2: Decimal float library routines. 42481 (line 273) 42482 * __dpd_getd2: Decimal float library routines. 42483 (line 277) 42484 * __dpd_gtdd2: Decimal float library routines. 42485 (line 302) 42486 * __dpd_gtsd2: Decimal float library routines. 42487 (line 300) 42488 * __dpd_gttd2: Decimal float library routines. 42489 (line 304) 42490 * __dpd_ledd2: Decimal float library routines. 42491 (line 293) 42492 * __dpd_lesd2: Decimal float library routines. 42493 (line 291) 42494 * __dpd_letd2: Decimal float library routines. 42495 (line 295) 42496 * __dpd_ltdd2: Decimal float library routines. 42497 (line 284) 42498 * __dpd_ltsd2: Decimal float library routines. 42499 (line 282) 42500 * __dpd_lttd2: Decimal float library routines. 42501 (line 286) 42502 * __dpd_muldd3: Decimal float library routines. 42503 (line 50) 42504 * __dpd_mulsd3: Decimal float library routines. 42505 (line 46) 42506 * __dpd_multd3: Decimal float library routines. 42507 (line 54) 42508 * __dpd_nedd2: Decimal float library routines. 42509 (line 266) 42510 * __dpd_negdd2: Decimal float library routines. 42511 (line 76) 42512 * __dpd_negsd2: Decimal float library routines. 42513 (line 74) 42514 * __dpd_negtd2: Decimal float library routines. 42515 (line 78) 42516 * __dpd_nesd2: Decimal float library routines. 42517 (line 264) 42518 * __dpd_netd2: Decimal float library routines. 42519 (line 268) 42520 * __dpd_subdd3: Decimal float library routines. 42521 (line 35) 42522 * __dpd_subsd3: Decimal float library routines. 42523 (line 31) 42524 * __dpd_subtd3: Decimal float library routines. 42525 (line 39) 42526 * __dpd_truncdddf: Decimal float library routines. 42527 (line 151) 42528 * __dpd_truncddsd2: Decimal float library routines. 42529 (line 92) 42530 * __dpd_truncddsf: Decimal float library routines. 42531 (line 122) 42532 * __dpd_truncdfsd: Decimal float library routines. 42533 (line 109) 42534 * __dpd_truncsdsf: Decimal float library routines. 42535 (line 149) 42536 * __dpd_trunctddd2: Decimal float library routines. 42537 (line 96) 42538 * __dpd_trunctddf: Decimal float library routines. 42539 (line 128) 42540 * __dpd_trunctdsd2: Decimal float library routines. 42541 (line 94) 42542 * __dpd_trunctdsf: Decimal float library routines. 42543 (line 124) 42544 * __dpd_trunctdtf: Decimal float library routines. 42545 (line 153) 42546 * __dpd_trunctdxf: Decimal float library routines. 42547 (line 134) 42548 * __dpd_trunctfdd: Decimal float library routines. 42549 (line 117) 42550 * __dpd_trunctfsd: Decimal float library routines. 42551 (line 113) 42552 * __dpd_truncxfdd: Decimal float library routines. 42553 (line 115) 42554 * __dpd_truncxfsd: Decimal float library routines. 42555 (line 111) 42556 * __dpd_unorddd2: Decimal float library routines. 42557 (line 233) 42558 * __dpd_unordsd2: Decimal float library routines. 42559 (line 231) 42560 * __dpd_unordtd2: Decimal float library routines. 42561 (line 235) 42562 * __DTOR_LIST__: Initialization. (line 25) 42563 * __eqdf2: Soft float library routines. 42564 (line 193) 42565 * __eqsf2: Soft float library routines. 42566 (line 192) 42567 * __eqtf2: Soft float library routines. 42568 (line 194) 42569 * __extenddftf2: Soft float library routines. 42570 (line 67) 42571 * __extenddfxf2: Soft float library routines. 42572 (line 68) 42573 * __extendsfdf2: Soft float library routines. 42574 (line 64) 42575 * __extendsftf2: Soft float library routines. 42576 (line 65) 42577 * __extendsfxf2: Soft float library routines. 42578 (line 66) 42579 * __ffsdi2: Integer library routines. 42580 (line 143) 42581 * __ffsti2: Integer library routines. 42582 (line 144) 42583 * __fixdfdi: Soft float library routines. 42584 (line 87) 42585 * __fixdfsi: Soft float library routines. 42586 (line 80) 42587 * __fixdfti: Soft float library routines. 42588 (line 93) 42589 * __fixsfdi: Soft float library routines. 42590 (line 86) 42591 * __fixsfsi: Soft float library routines. 42592 (line 79) 42593 * __fixsfti: Soft float library routines. 42594 (line 92) 42595 * __fixtfdi: Soft float library routines. 42596 (line 88) 42597 * __fixtfsi: Soft float library routines. 42598 (line 81) 42599 * __fixtfti: Soft float library routines. 42600 (line 94) 42601 * __fixunsdfdi: Soft float library routines. 42602 (line 107) 42603 * __fixunsdfsi: Soft float library routines. 42604 (line 100) 42605 * __fixunsdfti: Soft float library routines. 42606 (line 114) 42607 * __fixunssfdi: Soft float library routines. 42608 (line 106) 42609 * __fixunssfsi: Soft float library routines. 42610 (line 99) 42611 * __fixunssfti: Soft float library routines. 42612 (line 113) 42613 * __fixunstfdi: Soft float library routines. 42614 (line 108) 42615 * __fixunstfsi: Soft float library routines. 42616 (line 101) 42617 * __fixunstfti: Soft float library routines. 42618 (line 115) 42619 * __fixunsxfdi: Soft float library routines. 42620 (line 109) 42621 * __fixunsxfsi: Soft float library routines. 42622 (line 102) 42623 * __fixunsxfti: Soft float library routines. 42624 (line 116) 42625 * __fixxfdi: Soft float library routines. 42626 (line 89) 42627 * __fixxfsi: Soft float library routines. 42628 (line 82) 42629 * __fixxfti: Soft float library routines. 42630 (line 95) 42631 * __floatdidf: Soft float library routines. 42632 (line 127) 42633 * __floatdisf: Soft float library routines. 42634 (line 126) 42635 * __floatditf: Soft float library routines. 42636 (line 128) 42637 * __floatdixf: Soft float library routines. 42638 (line 129) 42639 * __floatsidf: Soft float library routines. 42640 (line 121) 42641 * __floatsisf: Soft float library routines. 42642 (line 120) 42643 * __floatsitf: Soft float library routines. 42644 (line 122) 42645 * __floatsixf: Soft float library routines. 42646 (line 123) 42647 * __floattidf: Soft float library routines. 42648 (line 133) 42649 * __floattisf: Soft float library routines. 42650 (line 132) 42651 * __floattitf: Soft float library routines. 42652 (line 134) 42653 * __floattixf: Soft float library routines. 42654 (line 135) 42655 * __floatundidf: Soft float library routines. 42656 (line 145) 42657 * __floatundisf: Soft float library routines. 42658 (line 144) 42659 * __floatunditf: Soft float library routines. 42660 (line 146) 42661 * __floatundixf: Soft float library routines. 42662 (line 147) 42663 * __floatunsidf: Soft float library routines. 42664 (line 139) 42665 * __floatunsisf: Soft float library routines. 42666 (line 138) 42667 * __floatunsitf: Soft float library routines. 42668 (line 140) 42669 * __floatunsixf: Soft float library routines. 42670 (line 141) 42671 * __floatuntidf: Soft float library routines. 42672 (line 151) 42673 * __floatuntisf: Soft float library routines. 42674 (line 150) 42675 * __floatuntitf: Soft float library routines. 42676 (line 152) 42677 * __floatuntixf: Soft float library routines. 42678 (line 153) 42679 * __fractdadf: Fixed-point fractional library routines. 42680 (line 635) 42681 * __fractdadi: Fixed-point fractional library routines. 42682 (line 632) 42683 * __fractdadq: Fixed-point fractional library routines. 42684 (line 615) 42685 * __fractdaha2: Fixed-point fractional library routines. 42686 (line 616) 42687 * __fractdahi: Fixed-point fractional library routines. 42688 (line 630) 42689 * __fractdahq: Fixed-point fractional library routines. 42690 (line 613) 42691 * __fractdaqi: Fixed-point fractional library routines. 42692 (line 629) 42693 * __fractdaqq: Fixed-point fractional library routines. 42694 (line 612) 42695 * __fractdasa2: Fixed-point fractional library routines. 42696 (line 617) 42697 * __fractdasf: Fixed-point fractional library routines. 42698 (line 634) 42699 * __fractdasi: Fixed-point fractional library routines. 42700 (line 631) 42701 * __fractdasq: Fixed-point fractional library routines. 42702 (line 614) 42703 * __fractdata2: Fixed-point fractional library routines. 42704 (line 618) 42705 * __fractdati: Fixed-point fractional library routines. 42706 (line 633) 42707 * __fractdauda: Fixed-point fractional library routines. 42708 (line 626) 42709 * __fractdaudq: Fixed-point fractional library routines. 42710 (line 622) 42711 * __fractdauha: Fixed-point fractional library routines. 42712 (line 624) 42713 * __fractdauhq: Fixed-point fractional library routines. 42714 (line 620) 42715 * __fractdauqq: Fixed-point fractional library routines. 42716 (line 619) 42717 * __fractdausa: Fixed-point fractional library routines. 42718 (line 625) 42719 * __fractdausq: Fixed-point fractional library routines. 42720 (line 621) 42721 * __fractdauta: Fixed-point fractional library routines. 42722 (line 627) 42723 * __fractdfda: Fixed-point fractional library routines. 42724 (line 1024) 42725 * __fractdfdq: Fixed-point fractional library routines. 42726 (line 1021) 42727 * __fractdfha: Fixed-point fractional library routines. 42728 (line 1022) 42729 * __fractdfhq: Fixed-point fractional library routines. 42730 (line 1019) 42731 * __fractdfqq: Fixed-point fractional library routines. 42732 (line 1018) 42733 * __fractdfsa: Fixed-point fractional library routines. 42734 (line 1023) 42735 * __fractdfsq: Fixed-point fractional library routines. 42736 (line 1020) 42737 * __fractdfta: Fixed-point fractional library routines. 42738 (line 1025) 42739 * __fractdfuda: Fixed-point fractional library routines. 42740 (line 1032) 42741 * __fractdfudq: Fixed-point fractional library routines. 42742 (line 1029) 42743 * __fractdfuha: Fixed-point fractional library routines. 42744 (line 1030) 42745 * __fractdfuhq: Fixed-point fractional library routines. 42746 (line 1027) 42747 * __fractdfuqq: Fixed-point fractional library routines. 42748 (line 1026) 42749 * __fractdfusa: Fixed-point fractional library routines. 42750 (line 1031) 42751 * __fractdfusq: Fixed-point fractional library routines. 42752 (line 1028) 42753 * __fractdfuta: Fixed-point fractional library routines. 42754 (line 1033) 42755 * __fractdida: Fixed-point fractional library routines. 42756 (line 974) 42757 * __fractdidq: Fixed-point fractional library routines. 42758 (line 971) 42759 * __fractdiha: Fixed-point fractional library routines. 42760 (line 972) 42761 * __fractdihq: Fixed-point fractional library routines. 42762 (line 969) 42763 * __fractdiqq: Fixed-point fractional library routines. 42764 (line 968) 42765 * __fractdisa: Fixed-point fractional library routines. 42766 (line 973) 42767 * __fractdisq: Fixed-point fractional library routines. 42768 (line 970) 42769 * __fractdita: Fixed-point fractional library routines. 42770 (line 975) 42771 * __fractdiuda: Fixed-point fractional library routines. 42772 (line 982) 42773 * __fractdiudq: Fixed-point fractional library routines. 42774 (line 979) 42775 * __fractdiuha: Fixed-point fractional library routines. 42776 (line 980) 42777 * __fractdiuhq: Fixed-point fractional library routines. 42778 (line 977) 42779 * __fractdiuqq: Fixed-point fractional library routines. 42780 (line 976) 42781 * __fractdiusa: Fixed-point fractional library routines. 42782 (line 981) 42783 * __fractdiusq: Fixed-point fractional library routines. 42784 (line 978) 42785 * __fractdiuta: Fixed-point fractional library routines. 42786 (line 983) 42787 * __fractdqda: Fixed-point fractional library routines. 42788 (line 543) 42789 * __fractdqdf: Fixed-point fractional library routines. 42790 (line 565) 42791 * __fractdqdi: Fixed-point fractional library routines. 42792 (line 562) 42793 * __fractdqha: Fixed-point fractional library routines. 42794 (line 541) 42795 * __fractdqhi: Fixed-point fractional library routines. 42796 (line 560) 42797 * __fractdqhq2: Fixed-point fractional library routines. 42798 (line 539) 42799 * __fractdqqi: Fixed-point fractional library routines. 42800 (line 559) 42801 * __fractdqqq2: Fixed-point fractional library routines. 42802 (line 538) 42803 * __fractdqsa: Fixed-point fractional library routines. 42804 (line 542) 42805 * __fractdqsf: Fixed-point fractional library routines. 42806 (line 564) 42807 * __fractdqsi: Fixed-point fractional library routines. 42808 (line 561) 42809 * __fractdqsq2: Fixed-point fractional library routines. 42810 (line 540) 42811 * __fractdqta: Fixed-point fractional library routines. 42812 (line 544) 42813 * __fractdqti: Fixed-point fractional library routines. 42814 (line 563) 42815 * __fractdquda: Fixed-point fractional library routines. 42816 (line 555) 42817 * __fractdqudq: Fixed-point fractional library routines. 42818 (line 550) 42819 * __fractdquha: Fixed-point fractional library routines. 42820 (line 552) 42821 * __fractdquhq: Fixed-point fractional library routines. 42822 (line 547) 42823 * __fractdquqq: Fixed-point fractional library routines. 42824 (line 545) 42825 * __fractdqusa: Fixed-point fractional library routines. 42826 (line 554) 42827 * __fractdqusq: Fixed-point fractional library routines. 42828 (line 548) 42829 * __fractdquta: Fixed-point fractional library routines. 42830 (line 557) 42831 * __fracthada2: Fixed-point fractional library routines. 42832 (line 571) 42833 * __fracthadf: Fixed-point fractional library routines. 42834 (line 589) 42835 * __fracthadi: Fixed-point fractional library routines. 42836 (line 586) 42837 * __fracthadq: Fixed-point fractional library routines. 42838 (line 569) 42839 * __fracthahi: Fixed-point fractional library routines. 42840 (line 584) 42841 * __fracthahq: Fixed-point fractional library routines. 42842 (line 567) 42843 * __fracthaqi: Fixed-point fractional library routines. 42844 (line 583) 42845 * __fracthaqq: Fixed-point fractional library routines. 42846 (line 566) 42847 * __fracthasa2: Fixed-point fractional library routines. 42848 (line 570) 42849 * __fracthasf: Fixed-point fractional library routines. 42850 (line 588) 42851 * __fracthasi: Fixed-point fractional library routines. 42852 (line 585) 42853 * __fracthasq: Fixed-point fractional library routines. 42854 (line 568) 42855 * __fracthata2: Fixed-point fractional library routines. 42856 (line 572) 42857 * __fracthati: Fixed-point fractional library routines. 42858 (line 587) 42859 * __fracthauda: Fixed-point fractional library routines. 42860 (line 580) 42861 * __fracthaudq: Fixed-point fractional library routines. 42862 (line 576) 42863 * __fracthauha: Fixed-point fractional library routines. 42864 (line 578) 42865 * __fracthauhq: Fixed-point fractional library routines. 42866 (line 574) 42867 * __fracthauqq: Fixed-point fractional library routines. 42868 (line 573) 42869 * __fracthausa: Fixed-point fractional library routines. 42870 (line 579) 42871 * __fracthausq: Fixed-point fractional library routines. 42872 (line 575) 42873 * __fracthauta: Fixed-point fractional library routines. 42874 (line 581) 42875 * __fracthida: Fixed-point fractional library routines. 42876 (line 942) 42877 * __fracthidq: Fixed-point fractional library routines. 42878 (line 939) 42879 * __fracthiha: Fixed-point fractional library routines. 42880 (line 940) 42881 * __fracthihq: Fixed-point fractional library routines. 42882 (line 937) 42883 * __fracthiqq: Fixed-point fractional library routines. 42884 (line 936) 42885 * __fracthisa: Fixed-point fractional library routines. 42886 (line 941) 42887 * __fracthisq: Fixed-point fractional library routines. 42888 (line 938) 42889 * __fracthita: Fixed-point fractional library routines. 42890 (line 943) 42891 * __fracthiuda: Fixed-point fractional library routines. 42892 (line 950) 42893 * __fracthiudq: Fixed-point fractional library routines. 42894 (line 947) 42895 * __fracthiuha: Fixed-point fractional library routines. 42896 (line 948) 42897 * __fracthiuhq: Fixed-point fractional library routines. 42898 (line 945) 42899 * __fracthiuqq: Fixed-point fractional library routines. 42900 (line 944) 42901 * __fracthiusa: Fixed-point fractional library routines. 42902 (line 949) 42903 * __fracthiusq: Fixed-point fractional library routines. 42904 (line 946) 42905 * __fracthiuta: Fixed-point fractional library routines. 42906 (line 951) 42907 * __fracthqda: Fixed-point fractional library routines. 42908 (line 497) 42909 * __fracthqdf: Fixed-point fractional library routines. 42910 (line 513) 42911 * __fracthqdi: Fixed-point fractional library routines. 42912 (line 510) 42913 * __fracthqdq2: Fixed-point fractional library routines. 42914 (line 494) 42915 * __fracthqha: Fixed-point fractional library routines. 42916 (line 495) 42917 * __fracthqhi: Fixed-point fractional library routines. 42918 (line 508) 42919 * __fracthqqi: Fixed-point fractional library routines. 42920 (line 507) 42921 * __fracthqqq2: Fixed-point fractional library routines. 42922 (line 492) 42923 * __fracthqsa: Fixed-point fractional library routines. 42924 (line 496) 42925 * __fracthqsf: Fixed-point fractional library routines. 42926 (line 512) 42927 * __fracthqsi: Fixed-point fractional library routines. 42928 (line 509) 42929 * __fracthqsq2: Fixed-point fractional library routines. 42930 (line 493) 42931 * __fracthqta: Fixed-point fractional library routines. 42932 (line 498) 42933 * __fracthqti: Fixed-point fractional library routines. 42934 (line 511) 42935 * __fracthquda: Fixed-point fractional library routines. 42936 (line 505) 42937 * __fracthqudq: Fixed-point fractional library routines. 42938 (line 502) 42939 * __fracthquha: Fixed-point fractional library routines. 42940 (line 503) 42941 * __fracthquhq: Fixed-point fractional library routines. 42942 (line 500) 42943 * __fracthquqq: Fixed-point fractional library routines. 42944 (line 499) 42945 * __fracthqusa: Fixed-point fractional library routines. 42946 (line 504) 42947 * __fracthqusq: Fixed-point fractional library routines. 42948 (line 501) 42949 * __fracthquta: Fixed-point fractional library routines. 42950 (line 506) 42951 * __fractqida: Fixed-point fractional library routines. 42952 (line 924) 42953 * __fractqidq: Fixed-point fractional library routines. 42954 (line 921) 42955 * __fractqiha: Fixed-point fractional library routines. 42956 (line 922) 42957 * __fractqihq: Fixed-point fractional library routines. 42958 (line 919) 42959 * __fractqiqq: Fixed-point fractional library routines. 42960 (line 918) 42961 * __fractqisa: Fixed-point fractional library routines. 42962 (line 923) 42963 * __fractqisq: Fixed-point fractional library routines. 42964 (line 920) 42965 * __fractqita: Fixed-point fractional library routines. 42966 (line 925) 42967 * __fractqiuda: Fixed-point fractional library routines. 42968 (line 933) 42969 * __fractqiudq: Fixed-point fractional library routines. 42970 (line 929) 42971 * __fractqiuha: Fixed-point fractional library routines. 42972 (line 931) 42973 * __fractqiuhq: Fixed-point fractional library routines. 42974 (line 927) 42975 * __fractqiuqq: Fixed-point fractional library routines. 42976 (line 926) 42977 * __fractqiusa: Fixed-point fractional library routines. 42978 (line 932) 42979 * __fractqiusq: Fixed-point fractional library routines. 42980 (line 928) 42981 * __fractqiuta: Fixed-point fractional library routines. 42982 (line 934) 42983 * __fractqqda: Fixed-point fractional library routines. 42984 (line 473) 42985 * __fractqqdf: Fixed-point fractional library routines. 42986 (line 491) 42987 * __fractqqdi: Fixed-point fractional library routines. 42988 (line 488) 42989 * __fractqqdq2: Fixed-point fractional library routines. 42990 (line 470) 42991 * __fractqqha: Fixed-point fractional library routines. 42992 (line 471) 42993 * __fractqqhi: Fixed-point fractional library routines. 42994 (line 486) 42995 * __fractqqhq2: Fixed-point fractional library routines. 42996 (line 468) 42997 * __fractqqqi: Fixed-point fractional library routines. 42998 (line 485) 42999 * __fractqqsa: Fixed-point fractional library routines. 43000 (line 472) 43001 * __fractqqsf: Fixed-point fractional library routines. 43002 (line 490) 43003 * __fractqqsi: Fixed-point fractional library routines. 43004 (line 487) 43005 * __fractqqsq2: Fixed-point fractional library routines. 43006 (line 469) 43007 * __fractqqta: Fixed-point fractional library routines. 43008 (line 474) 43009 * __fractqqti: Fixed-point fractional library routines. 43010 (line 489) 43011 * __fractqquda: Fixed-point fractional library routines. 43012 (line 482) 43013 * __fractqqudq: Fixed-point fractional library routines. 43014 (line 478) 43015 * __fractqquha: Fixed-point fractional library routines. 43016 (line 480) 43017 * __fractqquhq: Fixed-point fractional library routines. 43018 (line 476) 43019 * __fractqquqq: Fixed-point fractional library routines. 43020 (line 475) 43021 * __fractqqusa: Fixed-point fractional library routines. 43022 (line 481) 43023 * __fractqqusq: Fixed-point fractional library routines. 43024 (line 477) 43025 * __fractqquta: Fixed-point fractional library routines. 43026 (line 483) 43027 * __fractsada2: Fixed-point fractional library routines. 43028 (line 595) 43029 * __fractsadf: Fixed-point fractional library routines. 43030 (line 611) 43031 * __fractsadi: Fixed-point fractional library routines. 43032 (line 608) 43033 * __fractsadq: Fixed-point fractional library routines. 43034 (line 593) 43035 * __fractsaha2: Fixed-point fractional library routines. 43036 (line 594) 43037 * __fractsahi: Fixed-point fractional library routines. 43038 (line 606) 43039 * __fractsahq: Fixed-point fractional library routines. 43040 (line 591) 43041 * __fractsaqi: Fixed-point fractional library routines. 43042 (line 605) 43043 * __fractsaqq: Fixed-point fractional library routines. 43044 (line 590) 43045 * __fractsasf: Fixed-point fractional library routines. 43046 (line 610) 43047 * __fractsasi: Fixed-point fractional library routines. 43048 (line 607) 43049 * __fractsasq: Fixed-point fractional library routines. 43050 (line 592) 43051 * __fractsata2: Fixed-point fractional library routines. 43052 (line 596) 43053 * __fractsati: Fixed-point fractional library routines. 43054 (line 609) 43055 * __fractsauda: Fixed-point fractional library routines. 43056 (line 603) 43057 * __fractsaudq: Fixed-point fractional library routines. 43058 (line 600) 43059 * __fractsauha: Fixed-point fractional library routines. 43060 (line 601) 43061 * __fractsauhq: Fixed-point fractional library routines. 43062 (line 598) 43063 * __fractsauqq: Fixed-point fractional library routines. 43064 (line 597) 43065 * __fractsausa: Fixed-point fractional library routines. 43066 (line 602) 43067 * __fractsausq: Fixed-point fractional library routines. 43068 (line 599) 43069 * __fractsauta: Fixed-point fractional library routines. 43070 (line 604) 43071 * __fractsfda: Fixed-point fractional library routines. 43072 (line 1008) 43073 * __fractsfdq: Fixed-point fractional library routines. 43074 (line 1005) 43075 * __fractsfha: Fixed-point fractional library routines. 43076 (line 1006) 43077 * __fractsfhq: Fixed-point fractional library routines. 43078 (line 1003) 43079 * __fractsfqq: Fixed-point fractional library routines. 43080 (line 1002) 43081 * __fractsfsa: Fixed-point fractional library routines. 43082 (line 1007) 43083 * __fractsfsq: Fixed-point fractional library routines. 43084 (line 1004) 43085 * __fractsfta: Fixed-point fractional library routines. 43086 (line 1009) 43087 * __fractsfuda: Fixed-point fractional library routines. 43088 (line 1016) 43089 * __fractsfudq: Fixed-point fractional library routines. 43090 (line 1013) 43091 * __fractsfuha: Fixed-point fractional library routines. 43092 (line 1014) 43093 * __fractsfuhq: Fixed-point fractional library routines. 43094 (line 1011) 43095 * __fractsfuqq: Fixed-point fractional library routines. 43096 (line 1010) 43097 * __fractsfusa: Fixed-point fractional library routines. 43098 (line 1015) 43099 * __fractsfusq: Fixed-point fractional library routines. 43100 (line 1012) 43101 * __fractsfuta: Fixed-point fractional library routines. 43102 (line 1017) 43103 * __fractsida: Fixed-point fractional library routines. 43104 (line 958) 43105 * __fractsidq: Fixed-point fractional library routines. 43106 (line 955) 43107 * __fractsiha: Fixed-point fractional library routines. 43108 (line 956) 43109 * __fractsihq: Fixed-point fractional library routines. 43110 (line 953) 43111 * __fractsiqq: Fixed-point fractional library routines. 43112 (line 952) 43113 * __fractsisa: Fixed-point fractional library routines. 43114 (line 957) 43115 * __fractsisq: Fixed-point fractional library routines. 43116 (line 954) 43117 * __fractsita: Fixed-point fractional library routines. 43118 (line 959) 43119 * __fractsiuda: Fixed-point fractional library routines. 43120 (line 966) 43121 * __fractsiudq: Fixed-point fractional library routines. 43122 (line 963) 43123 * __fractsiuha: Fixed-point fractional library routines. 43124 (line 964) 43125 * __fractsiuhq: Fixed-point fractional library routines. 43126 (line 961) 43127 * __fractsiuqq: Fixed-point fractional library routines. 43128 (line 960) 43129 * __fractsiusa: Fixed-point fractional library routines. 43130 (line 965) 43131 * __fractsiusq: Fixed-point fractional library routines. 43132 (line 962) 43133 * __fractsiuta: Fixed-point fractional library routines. 43134 (line 967) 43135 * __fractsqda: Fixed-point fractional library routines. 43136 (line 519) 43137 * __fractsqdf: Fixed-point fractional library routines. 43138 (line 537) 43139 * __fractsqdi: Fixed-point fractional library routines. 43140 (line 534) 43141 * __fractsqdq2: Fixed-point fractional library routines. 43142 (line 516) 43143 * __fractsqha: Fixed-point fractional library routines. 43144 (line 517) 43145 * __fractsqhi: Fixed-point fractional library routines. 43146 (line 532) 43147 * __fractsqhq2: Fixed-point fractional library routines. 43148 (line 515) 43149 * __fractsqqi: Fixed-point fractional library routines. 43150 (line 531) 43151 * __fractsqqq2: Fixed-point fractional library routines. 43152 (line 514) 43153 * __fractsqsa: Fixed-point fractional library routines. 43154 (line 518) 43155 * __fractsqsf: Fixed-point fractional library routines. 43156 (line 536) 43157 * __fractsqsi: Fixed-point fractional library routines. 43158 (line 533) 43159 * __fractsqta: Fixed-point fractional library routines. 43160 (line 520) 43161 * __fractsqti: Fixed-point fractional library routines. 43162 (line 535) 43163 * __fractsquda: Fixed-point fractional library routines. 43164 (line 528) 43165 * __fractsqudq: Fixed-point fractional library routines. 43166 (line 524) 43167 * __fractsquha: Fixed-point fractional library routines. 43168 (line 526) 43169 * __fractsquhq: Fixed-point fractional library routines. 43170 (line 522) 43171 * __fractsquqq: Fixed-point fractional library routines. 43172 (line 521) 43173 * __fractsqusa: Fixed-point fractional library routines. 43174 (line 527) 43175 * __fractsqusq: Fixed-point fractional library routines. 43176 (line 523) 43177 * __fractsquta: Fixed-point fractional library routines. 43178 (line 529) 43179 * __fracttada2: Fixed-point fractional library routines. 43180 (line 642) 43181 * __fracttadf: Fixed-point fractional library routines. 43182 (line 663) 43183 * __fracttadi: Fixed-point fractional library routines. 43184 (line 660) 43185 * __fracttadq: Fixed-point fractional library routines. 43186 (line 639) 43187 * __fracttaha2: Fixed-point fractional library routines. 43188 (line 640) 43189 * __fracttahi: Fixed-point fractional library routines. 43190 (line 658) 43191 * __fracttahq: Fixed-point fractional library routines. 43192 (line 637) 43193 * __fracttaqi: Fixed-point fractional library routines. 43194 (line 657) 43195 * __fracttaqq: Fixed-point fractional library routines. 43196 (line 636) 43197 * __fracttasa2: Fixed-point fractional library routines. 43198 (line 641) 43199 * __fracttasf: Fixed-point fractional library routines. 43200 (line 662) 43201 * __fracttasi: Fixed-point fractional library routines. 43202 (line 659) 43203 * __fracttasq: Fixed-point fractional library routines. 43204 (line 638) 43205 * __fracttati: Fixed-point fractional library routines. 43206 (line 661) 43207 * __fracttauda: Fixed-point fractional library routines. 43208 (line 653) 43209 * __fracttaudq: Fixed-point fractional library routines. 43210 (line 648) 43211 * __fracttauha: Fixed-point fractional library routines. 43212 (line 650) 43213 * __fracttauhq: Fixed-point fractional library routines. 43214 (line 645) 43215 * __fracttauqq: Fixed-point fractional library routines. 43216 (line 643) 43217 * __fracttausa: Fixed-point fractional library routines. 43218 (line 652) 43219 * __fracttausq: Fixed-point fractional library routines. 43220 (line 646) 43221 * __fracttauta: Fixed-point fractional library routines. 43222 (line 655) 43223 * __fracttida: Fixed-point fractional library routines. 43224 (line 990) 43225 * __fracttidq: Fixed-point fractional library routines. 43226 (line 987) 43227 * __fracttiha: Fixed-point fractional library routines. 43228 (line 988) 43229 * __fracttihq: Fixed-point fractional library routines. 43230 (line 985) 43231 * __fracttiqq: Fixed-point fractional library routines. 43232 (line 984) 43233 * __fracttisa: Fixed-point fractional library routines. 43234 (line 989) 43235 * __fracttisq: Fixed-point fractional library routines. 43236 (line 986) 43237 * __fracttita: Fixed-point fractional library routines. 43238 (line 991) 43239 * __fracttiuda: Fixed-point fractional library routines. 43240 (line 999) 43241 * __fracttiudq: Fixed-point fractional library routines. 43242 (line 995) 43243 * __fracttiuha: Fixed-point fractional library routines. 43244 (line 997) 43245 * __fracttiuhq: Fixed-point fractional library routines. 43246 (line 993) 43247 * __fracttiuqq: Fixed-point fractional library routines. 43248 (line 992) 43249 * __fracttiusa: Fixed-point fractional library routines. 43250 (line 998) 43251 * __fracttiusq: Fixed-point fractional library routines. 43252 (line 994) 43253 * __fracttiuta: Fixed-point fractional library routines. 43254 (line 1000) 43255 * __fractudada: Fixed-point fractional library routines. 43256 (line 857) 43257 * __fractudadf: Fixed-point fractional library routines. 43258 (line 880) 43259 * __fractudadi: Fixed-point fractional library routines. 43260 (line 877) 43261 * __fractudadq: Fixed-point fractional library routines. 43262 (line 853) 43263 * __fractudaha: Fixed-point fractional library routines. 43264 (line 855) 43265 * __fractudahi: Fixed-point fractional library routines. 43266 (line 875) 43267 * __fractudahq: Fixed-point fractional library routines. 43268 (line 851) 43269 * __fractudaqi: Fixed-point fractional library routines. 43270 (line 874) 43271 * __fractudaqq: Fixed-point fractional library routines. 43272 (line 850) 43273 * __fractudasa: Fixed-point fractional library routines. 43274 (line 856) 43275 * __fractudasf: Fixed-point fractional library routines. 43276 (line 879) 43277 * __fractudasi: Fixed-point fractional library routines. 43278 (line 876) 43279 * __fractudasq: Fixed-point fractional library routines. 43280 (line 852) 43281 * __fractudata: Fixed-point fractional library routines. 43282 (line 858) 43283 * __fractudati: Fixed-point fractional library routines. 43284 (line 878) 43285 * __fractudaudq: Fixed-point fractional library routines. 43286 (line 866) 43287 * __fractudauha2: Fixed-point fractional library routines. 43288 (line 868) 43289 * __fractudauhq: Fixed-point fractional library routines. 43290 (line 862) 43291 * __fractudauqq: Fixed-point fractional library routines. 43292 (line 860) 43293 * __fractudausa2: Fixed-point fractional library routines. 43294 (line 870) 43295 * __fractudausq: Fixed-point fractional library routines. 43296 (line 864) 43297 * __fractudauta2: Fixed-point fractional library routines. 43298 (line 872) 43299 * __fractudqda: Fixed-point fractional library routines. 43300 (line 764) 43301 * __fractudqdf: Fixed-point fractional library routines. 43302 (line 790) 43303 * __fractudqdi: Fixed-point fractional library routines. 43304 (line 786) 43305 * __fractudqdq: Fixed-point fractional library routines. 43306 (line 759) 43307 * __fractudqha: Fixed-point fractional library routines. 43308 (line 761) 43309 * __fractudqhi: Fixed-point fractional library routines. 43310 (line 784) 43311 * __fractudqhq: Fixed-point fractional library routines. 43312 (line 756) 43313 * __fractudqqi: Fixed-point fractional library routines. 43314 (line 782) 43315 * __fractudqqq: Fixed-point fractional library routines. 43316 (line 754) 43317 * __fractudqsa: Fixed-point fractional library routines. 43318 (line 763) 43319 * __fractudqsf: Fixed-point fractional library routines. 43320 (line 789) 43321 * __fractudqsi: Fixed-point fractional library routines. 43322 (line 785) 43323 * __fractudqsq: Fixed-point fractional library routines. 43324 (line 757) 43325 * __fractudqta: Fixed-point fractional library routines. 43326 (line 766) 43327 * __fractudqti: Fixed-point fractional library routines. 43328 (line 787) 43329 * __fractudquda: Fixed-point fractional library routines. 43330 (line 778) 43331 * __fractudquha: Fixed-point fractional library routines. 43332 (line 774) 43333 * __fractudquhq2: Fixed-point fractional library routines. 43334 (line 770) 43335 * __fractudquqq2: Fixed-point fractional library routines. 43336 (line 768) 43337 * __fractudqusa: Fixed-point fractional library routines. 43338 (line 776) 43339 * __fractudqusq2: Fixed-point fractional library routines. 43340 (line 772) 43341 * __fractudquta: Fixed-point fractional library routines. 43342 (line 780) 43343 * __fractuhada: Fixed-point fractional library routines. 43344 (line 798) 43345 * __fractuhadf: Fixed-point fractional library routines. 43346 (line 821) 43347 * __fractuhadi: Fixed-point fractional library routines. 43348 (line 818) 43349 * __fractuhadq: Fixed-point fractional library routines. 43350 (line 794) 43351 * __fractuhaha: Fixed-point fractional library routines. 43352 (line 796) 43353 * __fractuhahi: Fixed-point fractional library routines. 43354 (line 816) 43355 * __fractuhahq: Fixed-point fractional library routines. 43356 (line 792) 43357 * __fractuhaqi: Fixed-point fractional library routines. 43358 (line 815) 43359 * __fractuhaqq: Fixed-point fractional library routines. 43360 (line 791) 43361 * __fractuhasa: Fixed-point fractional library routines. 43362 (line 797) 43363 * __fractuhasf: Fixed-point fractional library routines. 43364 (line 820) 43365 * __fractuhasi: Fixed-point fractional library routines. 43366 (line 817) 43367 * __fractuhasq: Fixed-point fractional library routines. 43368 (line 793) 43369 * __fractuhata: Fixed-point fractional library routines. 43370 (line 799) 43371 * __fractuhati: Fixed-point fractional library routines. 43372 (line 819) 43373 * __fractuhauda2: Fixed-point fractional library routines. 43374 (line 811) 43375 * __fractuhaudq: Fixed-point fractional library routines. 43376 (line 807) 43377 * __fractuhauhq: Fixed-point fractional library routines. 43378 (line 803) 43379 * __fractuhauqq: Fixed-point fractional library routines. 43380 (line 801) 43381 * __fractuhausa2: Fixed-point fractional library routines. 43382 (line 809) 43383 * __fractuhausq: Fixed-point fractional library routines. 43384 (line 805) 43385 * __fractuhauta2: Fixed-point fractional library routines. 43386 (line 813) 43387 * __fractuhqda: Fixed-point fractional library routines. 43388 (line 701) 43389 * __fractuhqdf: Fixed-point fractional library routines. 43390 (line 722) 43391 * __fractuhqdi: Fixed-point fractional library routines. 43392 (line 719) 43393 * __fractuhqdq: Fixed-point fractional library routines. 43394 (line 698) 43395 * __fractuhqha: Fixed-point fractional library routines. 43396 (line 699) 43397 * __fractuhqhi: Fixed-point fractional library routines. 43398 (line 717) 43399 * __fractuhqhq: Fixed-point fractional library routines. 43400 (line 696) 43401 * __fractuhqqi: Fixed-point fractional library routines. 43402 (line 716) 43403 * __fractuhqqq: Fixed-point fractional library routines. 43404 (line 695) 43405 * __fractuhqsa: Fixed-point fractional library routines. 43406 (line 700) 43407 * __fractuhqsf: Fixed-point fractional library routines. 43408 (line 721) 43409 * __fractuhqsi: Fixed-point fractional library routines. 43410 (line 718) 43411 * __fractuhqsq: Fixed-point fractional library routines. 43412 (line 697) 43413 * __fractuhqta: Fixed-point fractional library routines. 43414 (line 702) 43415 * __fractuhqti: Fixed-point fractional library routines. 43416 (line 720) 43417 * __fractuhquda: Fixed-point fractional library routines. 43418 (line 712) 43419 * __fractuhqudq2: Fixed-point fractional library routines. 43420 (line 707) 43421 * __fractuhquha: Fixed-point fractional library routines. 43422 (line 709) 43423 * __fractuhquqq2: Fixed-point fractional library routines. 43424 (line 703) 43425 * __fractuhqusa: Fixed-point fractional library routines. 43426 (line 711) 43427 * __fractuhqusq2: Fixed-point fractional library routines. 43428 (line 705) 43429 * __fractuhquta: Fixed-point fractional library routines. 43430 (line 714) 43431 * __fractunsdadi: Fixed-point fractional library routines. 43432 (line 1554) 43433 * __fractunsdahi: Fixed-point fractional library routines. 43434 (line 1552) 43435 * __fractunsdaqi: Fixed-point fractional library routines. 43436 (line 1551) 43437 * __fractunsdasi: Fixed-point fractional library routines. 43438 (line 1553) 43439 * __fractunsdati: Fixed-point fractional library routines. 43440 (line 1555) 43441 * __fractunsdida: Fixed-point fractional library routines. 43442 (line 1706) 43443 * __fractunsdidq: Fixed-point fractional library routines. 43444 (line 1703) 43445 * __fractunsdiha: Fixed-point fractional library routines. 43446 (line 1704) 43447 * __fractunsdihq: Fixed-point fractional library routines. 43448 (line 1701) 43449 * __fractunsdiqq: Fixed-point fractional library routines. 43450 (line 1700) 43451 * __fractunsdisa: Fixed-point fractional library routines. 43452 (line 1705) 43453 * __fractunsdisq: Fixed-point fractional library routines. 43454 (line 1702) 43455 * __fractunsdita: Fixed-point fractional library routines. 43456 (line 1707) 43457 * __fractunsdiuda: Fixed-point fractional library routines. 43458 (line 1718) 43459 * __fractunsdiudq: Fixed-point fractional library routines. 43460 (line 1713) 43461 * __fractunsdiuha: Fixed-point fractional library routines. 43462 (line 1715) 43463 * __fractunsdiuhq: Fixed-point fractional library routines. 43464 (line 1710) 43465 * __fractunsdiuqq: Fixed-point fractional library routines. 43466 (line 1708) 43467 * __fractunsdiusa: Fixed-point fractional library routines. 43468 (line 1717) 43469 * __fractunsdiusq: Fixed-point fractional library routines. 43470 (line 1711) 43471 * __fractunsdiuta: Fixed-point fractional library routines. 43472 (line 1720) 43473 * __fractunsdqdi: Fixed-point fractional library routines. 43474 (line 1538) 43475 * __fractunsdqhi: Fixed-point fractional library routines. 43476 (line 1536) 43477 * __fractunsdqqi: Fixed-point fractional library routines. 43478 (line 1535) 43479 * __fractunsdqsi: Fixed-point fractional library routines. 43480 (line 1537) 43481 * __fractunsdqti: Fixed-point fractional library routines. 43482 (line 1539) 43483 * __fractunshadi: Fixed-point fractional library routines. 43484 (line 1544) 43485 * __fractunshahi: Fixed-point fractional library routines. 43486 (line 1542) 43487 * __fractunshaqi: Fixed-point fractional library routines. 43488 (line 1541) 43489 * __fractunshasi: Fixed-point fractional library routines. 43490 (line 1543) 43491 * __fractunshati: Fixed-point fractional library routines. 43492 (line 1545) 43493 * __fractunshida: Fixed-point fractional library routines. 43494 (line 1662) 43495 * __fractunshidq: Fixed-point fractional library routines. 43496 (line 1659) 43497 * __fractunshiha: Fixed-point fractional library routines. 43498 (line 1660) 43499 * __fractunshihq: Fixed-point fractional library routines. 43500 (line 1657) 43501 * __fractunshiqq: Fixed-point fractional library routines. 43502 (line 1656) 43503 * __fractunshisa: Fixed-point fractional library routines. 43504 (line 1661) 43505 * __fractunshisq: Fixed-point fractional library routines. 43506 (line 1658) 43507 * __fractunshita: Fixed-point fractional library routines. 43508 (line 1663) 43509 * __fractunshiuda: Fixed-point fractional library routines. 43510 (line 1674) 43511 * __fractunshiudq: Fixed-point fractional library routines. 43512 (line 1669) 43513 * __fractunshiuha: Fixed-point fractional library routines. 43514 (line 1671) 43515 * __fractunshiuhq: Fixed-point fractional library routines. 43516 (line 1666) 43517 * __fractunshiuqq: Fixed-point fractional library routines. 43518 (line 1664) 43519 * __fractunshiusa: Fixed-point fractional library routines. 43520 (line 1673) 43521 * __fractunshiusq: Fixed-point fractional library routines. 43522 (line 1667) 43523 * __fractunshiuta: Fixed-point fractional library routines. 43524 (line 1676) 43525 * __fractunshqdi: Fixed-point fractional library routines. 43526 (line 1528) 43527 * __fractunshqhi: Fixed-point fractional library routines. 43528 (line 1526) 43529 * __fractunshqqi: Fixed-point fractional library routines. 43530 (line 1525) 43531 * __fractunshqsi: Fixed-point fractional library routines. 43532 (line 1527) 43533 * __fractunshqti: Fixed-point fractional library routines. 43534 (line 1529) 43535 * __fractunsqida: Fixed-point fractional library routines. 43536 (line 1640) 43537 * __fractunsqidq: Fixed-point fractional library routines. 43538 (line 1637) 43539 * __fractunsqiha: Fixed-point fractional library routines. 43540 (line 1638) 43541 * __fractunsqihq: Fixed-point fractional library routines. 43542 (line 1635) 43543 * __fractunsqiqq: Fixed-point fractional library routines. 43544 (line 1634) 43545 * __fractunsqisa: Fixed-point fractional library routines. 43546 (line 1639) 43547 * __fractunsqisq: Fixed-point fractional library routines. 43548 (line 1636) 43549 * __fractunsqita: Fixed-point fractional library routines. 43550 (line 1641) 43551 * __fractunsqiuda: Fixed-point fractional library routines. 43552 (line 1652) 43553 * __fractunsqiudq: Fixed-point fractional library routines. 43554 (line 1647) 43555 * __fractunsqiuha: Fixed-point fractional library routines. 43556 (line 1649) 43557 * __fractunsqiuhq: Fixed-point fractional library routines. 43558 (line 1644) 43559 * __fractunsqiuqq: Fixed-point fractional library routines. 43560 (line 1642) 43561 * __fractunsqiusa: Fixed-point fractional library routines. 43562 (line 1651) 43563 * __fractunsqiusq: Fixed-point fractional library routines. 43564 (line 1645) 43565 * __fractunsqiuta: Fixed-point fractional library routines. 43566 (line 1654) 43567 * __fractunsqqdi: Fixed-point fractional library routines. 43568 (line 1523) 43569 * __fractunsqqhi: Fixed-point fractional library routines. 43570 (line 1521) 43571 * __fractunsqqqi: Fixed-point fractional library routines. 43572 (line 1520) 43573 * __fractunsqqsi: Fixed-point fractional library routines. 43574 (line 1522) 43575 * __fractunsqqti: Fixed-point fractional library routines. 43576 (line 1524) 43577 * __fractunssadi: Fixed-point fractional library routines. 43578 (line 1549) 43579 * __fractunssahi: Fixed-point fractional library routines. 43580 (line 1547) 43581 * __fractunssaqi: Fixed-point fractional library routines. 43582 (line 1546) 43583 * __fractunssasi: Fixed-point fractional library routines. 43584 (line 1548) 43585 * __fractunssati: Fixed-point fractional library routines. 43586 (line 1550) 43587 * __fractunssida: Fixed-point fractional library routines. 43588 (line 1684) 43589 * __fractunssidq: Fixed-point fractional library routines. 43590 (line 1681) 43591 * __fractunssiha: Fixed-point fractional library routines. 43592 (line 1682) 43593 * __fractunssihq: Fixed-point fractional library routines. 43594 (line 1679) 43595 * __fractunssiqq: Fixed-point fractional library routines. 43596 (line 1678) 43597 * __fractunssisa: Fixed-point fractional library routines. 43598 (line 1683) 43599 * __fractunssisq: Fixed-point fractional library routines. 43600 (line 1680) 43601 * __fractunssita: Fixed-point fractional library routines. 43602 (line 1685) 43603 * __fractunssiuda: Fixed-point fractional library routines. 43604 (line 1696) 43605 * __fractunssiudq: Fixed-point fractional library routines. 43606 (line 1691) 43607 * __fractunssiuha: Fixed-point fractional library routines. 43608 (line 1693) 43609 * __fractunssiuhq: Fixed-point fractional library routines. 43610 (line 1688) 43611 * __fractunssiuqq: Fixed-point fractional library routines. 43612 (line 1686) 43613 * __fractunssiusa: Fixed-point fractional library routines. 43614 (line 1695) 43615 * __fractunssiusq: Fixed-point fractional library routines. 43616 (line 1689) 43617 * __fractunssiuta: Fixed-point fractional library routines. 43618 (line 1698) 43619 * __fractunssqdi: Fixed-point fractional library routines. 43620 (line 1533) 43621 * __fractunssqhi: Fixed-point fractional library routines. 43622 (line 1531) 43623 * __fractunssqqi: Fixed-point fractional library routines. 43624 (line 1530) 43625 * __fractunssqsi: Fixed-point fractional library routines. 43626 (line 1532) 43627 * __fractunssqti: Fixed-point fractional library routines. 43628 (line 1534) 43629 * __fractunstadi: Fixed-point fractional library routines. 43630 (line 1559) 43631 * __fractunstahi: Fixed-point fractional library routines. 43632 (line 1557) 43633 * __fractunstaqi: Fixed-point fractional library routines. 43634 (line 1556) 43635 * __fractunstasi: Fixed-point fractional library routines. 43636 (line 1558) 43637 * __fractunstati: Fixed-point fractional library routines. 43638 (line 1560) 43639 * __fractunstida: Fixed-point fractional library routines. 43640 (line 1729) 43641 * __fractunstidq: Fixed-point fractional library routines. 43642 (line 1725) 43643 * __fractunstiha: Fixed-point fractional library routines. 43644 (line 1727) 43645 * __fractunstihq: Fixed-point fractional library routines. 43646 (line 1723) 43647 * __fractunstiqq: Fixed-point fractional library routines. 43648 (line 1722) 43649 * __fractunstisa: Fixed-point fractional library routines. 43650 (line 1728) 43651 * __fractunstisq: Fixed-point fractional library routines. 43652 (line 1724) 43653 * __fractunstita: Fixed-point fractional library routines. 43654 (line 1730) 43655 * __fractunstiuda: Fixed-point fractional library routines. 43656 (line 1744) 43657 * __fractunstiudq: Fixed-point fractional library routines. 43658 (line 1738) 43659 * __fractunstiuha: Fixed-point fractional library routines. 43660 (line 1740) 43661 * __fractunstiuhq: Fixed-point fractional library routines. 43662 (line 1734) 43663 * __fractunstiuqq: Fixed-point fractional library routines. 43664 (line 1732) 43665 * __fractunstiusa: Fixed-point fractional library routines. 43666 (line 1742) 43667 * __fractunstiusq: Fixed-point fractional library routines. 43668 (line 1736) 43669 * __fractunstiuta: Fixed-point fractional library routines. 43670 (line 1746) 43671 * __fractunsudadi: Fixed-point fractional library routines. 43672 (line 1620) 43673 * __fractunsudahi: Fixed-point fractional library routines. 43674 (line 1616) 43675 * __fractunsudaqi: Fixed-point fractional library routines. 43676 (line 1614) 43677 * __fractunsudasi: Fixed-point fractional library routines. 43678 (line 1618) 43679 * __fractunsudati: Fixed-point fractional library routines. 43680 (line 1622) 43681 * __fractunsudqdi: Fixed-point fractional library routines. 43682 (line 1594) 43683 * __fractunsudqhi: Fixed-point fractional library routines. 43684 (line 1590) 43685 * __fractunsudqqi: Fixed-point fractional library routines. 43686 (line 1588) 43687 * __fractunsudqsi: Fixed-point fractional library routines. 43688 (line 1592) 43689 * __fractunsudqti: Fixed-point fractional library routines. 43690 (line 1596) 43691 * __fractunsuhadi: Fixed-point fractional library routines. 43692 (line 1604) 43693 * __fractunsuhahi: Fixed-point fractional library routines. 43694 (line 1600) 43695 * __fractunsuhaqi: Fixed-point fractional library routines. 43696 (line 1598) 43697 * __fractunsuhasi: Fixed-point fractional library routines. 43698 (line 1602) 43699 * __fractunsuhati: Fixed-point fractional library routines. 43700 (line 1606) 43701 * __fractunsuhqdi: Fixed-point fractional library routines. 43702 (line 1575) 43703 * __fractunsuhqhi: Fixed-point fractional library routines. 43704 (line 1573) 43705 * __fractunsuhqqi: Fixed-point fractional library routines. 43706 (line 1572) 43707 * __fractunsuhqsi: Fixed-point fractional library routines. 43708 (line 1574) 43709 * __fractunsuhqti: Fixed-point fractional library routines. 43710 (line 1576) 43711 * __fractunsuqqdi: Fixed-point fractional library routines. 43712 (line 1568) 43713 * __fractunsuqqhi: Fixed-point fractional library routines. 43714 (line 1564) 43715 * __fractunsuqqqi: Fixed-point fractional library routines. 43716 (line 1562) 43717 * __fractunsuqqsi: Fixed-point fractional library routines. 43718 (line 1566) 43719 * __fractunsuqqti: Fixed-point fractional library routines. 43720 (line 1570) 43721 * __fractunsusadi: Fixed-point fractional library routines. 43722 (line 1611) 43723 * __fractunsusahi: Fixed-point fractional library routines. 43724 (line 1609) 43725 * __fractunsusaqi: Fixed-point fractional library routines. 43726 (line 1608) 43727 * __fractunsusasi: Fixed-point fractional library routines. 43728 (line 1610) 43729 * __fractunsusati: Fixed-point fractional library routines. 43730 (line 1612) 43731 * __fractunsusqdi: Fixed-point fractional library routines. 43732 (line 1584) 43733 * __fractunsusqhi: Fixed-point fractional library routines. 43734 (line 1580) 43735 * __fractunsusqqi: Fixed-point fractional library routines. 43736 (line 1578) 43737 * __fractunsusqsi: Fixed-point fractional library routines. 43738 (line 1582) 43739 * __fractunsusqti: Fixed-point fractional library routines. 43740 (line 1586) 43741 * __fractunsutadi: Fixed-point fractional library routines. 43742 (line 1630) 43743 * __fractunsutahi: Fixed-point fractional library routines. 43744 (line 1626) 43745 * __fractunsutaqi: Fixed-point fractional library routines. 43746 (line 1624) 43747 * __fractunsutasi: Fixed-point fractional library routines. 43748 (line 1628) 43749 * __fractunsutati: Fixed-point fractional library routines. 43750 (line 1632) 43751 * __fractuqqda: Fixed-point fractional library routines. 43752 (line 671) 43753 * __fractuqqdf: Fixed-point fractional library routines. 43754 (line 694) 43755 * __fractuqqdi: Fixed-point fractional library routines. 43756 (line 691) 43757 * __fractuqqdq: Fixed-point fractional library routines. 43758 (line 667) 43759 * __fractuqqha: Fixed-point fractional library routines. 43760 (line 669) 43761 * __fractuqqhi: Fixed-point fractional library routines. 43762 (line 689) 43763 * __fractuqqhq: Fixed-point fractional library routines. 43764 (line 665) 43765 * __fractuqqqi: Fixed-point fractional library routines. 43766 (line 688) 43767 * __fractuqqqq: Fixed-point fractional library routines. 43768 (line 664) 43769 * __fractuqqsa: Fixed-point fractional library routines. 43770 (line 670) 43771 * __fractuqqsf: Fixed-point fractional library routines. 43772 (line 693) 43773 * __fractuqqsi: Fixed-point fractional library routines. 43774 (line 690) 43775 * __fractuqqsq: Fixed-point fractional library routines. 43776 (line 666) 43777 * __fractuqqta: Fixed-point fractional library routines. 43778 (line 672) 43779 * __fractuqqti: Fixed-point fractional library routines. 43780 (line 692) 43781 * __fractuqquda: Fixed-point fractional library routines. 43782 (line 684) 43783 * __fractuqqudq2: Fixed-point fractional library routines. 43784 (line 678) 43785 * __fractuqquha: Fixed-point fractional library routines. 43786 (line 680) 43787 * __fractuqquhq2: Fixed-point fractional library routines. 43788 (line 674) 43789 * __fractuqqusa: Fixed-point fractional library routines. 43790 (line 682) 43791 * __fractuqqusq2: Fixed-point fractional library routines. 43792 (line 676) 43793 * __fractuqquta: Fixed-point fractional library routines. 43794 (line 686) 43795 * __fractusada: Fixed-point fractional library routines. 43796 (line 828) 43797 * __fractusadf: Fixed-point fractional library routines. 43798 (line 849) 43799 * __fractusadi: Fixed-point fractional library routines. 43800 (line 846) 43801 * __fractusadq: Fixed-point fractional library routines. 43802 (line 825) 43803 * __fractusaha: Fixed-point fractional library routines. 43804 (line 826) 43805 * __fractusahi: Fixed-point fractional library routines. 43806 (line 844) 43807 * __fractusahq: Fixed-point fractional library routines. 43808 (line 823) 43809 * __fractusaqi: Fixed-point fractional library routines. 43810 (line 843) 43811 * __fractusaqq: Fixed-point fractional library routines. 43812 (line 822) 43813 * __fractusasa: Fixed-point fractional library routines. 43814 (line 827) 43815 * __fractusasf: Fixed-point fractional library routines. 43816 (line 848) 43817 * __fractusasi: Fixed-point fractional library routines. 43818 (line 845) 43819 * __fractusasq: Fixed-point fractional library routines. 43820 (line 824) 43821 * __fractusata: Fixed-point fractional library routines. 43822 (line 829) 43823 * __fractusati: Fixed-point fractional library routines. 43824 (line 847) 43825 * __fractusauda2: Fixed-point fractional library routines. 43826 (line 839) 43827 * __fractusaudq: Fixed-point fractional library routines. 43828 (line 835) 43829 * __fractusauha2: Fixed-point fractional library routines. 43830 (line 837) 43831 * __fractusauhq: Fixed-point fractional library routines. 43832 (line 832) 43833 * __fractusauqq: Fixed-point fractional library routines. 43834 (line 830) 43835 * __fractusausq: Fixed-point fractional library routines. 43836 (line 833) 43837 * __fractusauta2: Fixed-point fractional library routines. 43838 (line 841) 43839 * __fractusqda: Fixed-point fractional library routines. 43840 (line 730) 43841 * __fractusqdf: Fixed-point fractional library routines. 43842 (line 753) 43843 * __fractusqdi: Fixed-point fractional library routines. 43844 (line 750) 43845 * __fractusqdq: Fixed-point fractional library routines. 43846 (line 726) 43847 * __fractusqha: Fixed-point fractional library routines. 43848 (line 728) 43849 * __fractusqhi: Fixed-point fractional library routines. 43850 (line 748) 43851 * __fractusqhq: Fixed-point fractional library routines. 43852 (line 724) 43853 * __fractusqqi: Fixed-point fractional library routines. 43854 (line 747) 43855 * __fractusqqq: Fixed-point fractional library routines. 43856 (line 723) 43857 * __fractusqsa: Fixed-point fractional library routines. 43858 (line 729) 43859 * __fractusqsf: Fixed-point fractional library routines. 43860 (line 752) 43861 * __fractusqsi: Fixed-point fractional library routines. 43862 (line 749) 43863 * __fractusqsq: Fixed-point fractional library routines. 43864 (line 725) 43865 * __fractusqta: Fixed-point fractional library routines. 43866 (line 731) 43867 * __fractusqti: Fixed-point fractional library routines. 43868 (line 751) 43869 * __fractusquda: Fixed-point fractional library routines. 43870 (line 743) 43871 * __fractusqudq2: Fixed-point fractional library routines. 43872 (line 737) 43873 * __fractusquha: Fixed-point fractional library routines. 43874 (line 739) 43875 * __fractusquhq2: Fixed-point fractional library routines. 43876 (line 735) 43877 * __fractusquqq2: Fixed-point fractional library routines. 43878 (line 733) 43879 * __fractusqusa: Fixed-point fractional library routines. 43880 (line 741) 43881 * __fractusquta: Fixed-point fractional library routines. 43882 (line 745) 43883 * __fractutada: Fixed-point fractional library routines. 43884 (line 891) 43885 * __fractutadf: Fixed-point fractional library routines. 43886 (line 917) 43887 * __fractutadi: Fixed-point fractional library routines. 43888 (line 913) 43889 * __fractutadq: Fixed-point fractional library routines. 43890 (line 886) 43891 * __fractutaha: Fixed-point fractional library routines. 43892 (line 888) 43893 * __fractutahi: Fixed-point fractional library routines. 43894 (line 911) 43895 * __fractutahq: Fixed-point fractional library routines. 43896 (line 883) 43897 * __fractutaqi: Fixed-point fractional library routines. 43898 (line 909) 43899 * __fractutaqq: Fixed-point fractional library routines. 43900 (line 881) 43901 * __fractutasa: Fixed-point fractional library routines. 43902 (line 890) 43903 * __fractutasf: Fixed-point fractional library routines. 43904 (line 916) 43905 * __fractutasi: Fixed-point fractional library routines. 43906 (line 912) 43907 * __fractutasq: Fixed-point fractional library routines. 43908 (line 884) 43909 * __fractutata: Fixed-point fractional library routines. 43910 (line 893) 43911 * __fractutati: Fixed-point fractional library routines. 43912 (line 914) 43913 * __fractutauda2: Fixed-point fractional library routines. 43914 (line 907) 43915 * __fractutaudq: Fixed-point fractional library routines. 43916 (line 901) 43917 * __fractutauha2: Fixed-point fractional library routines. 43918 (line 903) 43919 * __fractutauhq: Fixed-point fractional library routines. 43920 (line 897) 43921 * __fractutauqq: Fixed-point fractional library routines. 43922 (line 895) 43923 * __fractutausa2: Fixed-point fractional library routines. 43924 (line 905) 43925 * __fractutausq: Fixed-point fractional library routines. 43926 (line 899) 43927 * __gedf2: Soft float library routines. 43928 (line 205) 43929 * __gesf2: Soft float library routines. 43930 (line 204) 43931 * __getf2: Soft float library routines. 43932 (line 206) 43933 * __gtdf2: Soft float library routines. 43934 (line 223) 43935 * __gtsf2: Soft float library routines. 43936 (line 222) 43937 * __gttf2: Soft float library routines. 43938 (line 224) 43939 * __ledf2: Soft float library routines. 43940 (line 217) 43941 * __lesf2: Soft float library routines. 43942 (line 216) 43943 * __letf2: Soft float library routines. 43944 (line 218) 43945 * __lshrdi3: Integer library routines. 43946 (line 30) 43947 * __lshrsi3: Integer library routines. 43948 (line 29) 43949 * __lshrti3: Integer library routines. 43950 (line 31) 43951 * __lshruda3: Fixed-point fractional library routines. 43952 (line 388) 43953 * __lshrudq3: Fixed-point fractional library routines. 43954 (line 382) 43955 * __lshruha3: Fixed-point fractional library routines. 43956 (line 384) 43957 * __lshruhq3: Fixed-point fractional library routines. 43958 (line 378) 43959 * __lshruqq3: Fixed-point fractional library routines. 43960 (line 376) 43961 * __lshrusa3: Fixed-point fractional library routines. 43962 (line 386) 43963 * __lshrusq3: Fixed-point fractional library routines. 43964 (line 380) 43965 * __lshruta3: Fixed-point fractional library routines. 43966 (line 390) 43967 * __ltdf2: Soft float library routines. 43968 (line 211) 43969 * __ltsf2: Soft float library routines. 43970 (line 210) 43971 * __lttf2: Soft float library routines. 43972 (line 212) 43973 * __main: Collect2. (line 15) 43974 * __moddi3: Integer library routines. 43975 (line 36) 43976 * __modsi3: Integer library routines. 43977 (line 35) 43978 * __modti3: Integer library routines. 43979 (line 37) 43980 * __morestack_current_segment: Miscellaneous routines. 43981 (line 45) 43982 * __morestack_initial_sp: Miscellaneous routines. 43983 (line 46) 43984 * __morestack_segments: Miscellaneous routines. 43985 (line 44) 43986 * __mulda3: Fixed-point fractional library routines. 43987 (line 170) 43988 * __muldc3: Soft float library routines. 43989 (line 239) 43990 * __muldf3: Soft float library routines. 43991 (line 39) 43992 * __muldi3: Integer library routines. 43993 (line 42) 43994 * __muldq3: Fixed-point fractional library routines. 43995 (line 157) 43996 * __mulha3: Fixed-point fractional library routines. 43997 (line 167) 43998 * __mulhq3: Fixed-point fractional library routines. 43999 (line 155) 44000 * __mulqq3: Fixed-point fractional library routines. 44001 (line 153) 44002 * __mulsa3: Fixed-point fractional library routines. 44003 (line 169) 44004 * __mulsc3: Soft float library routines. 44005 (line 237) 44006 * __mulsf3: Soft float library routines. 44007 (line 38) 44008 * __mulsi3: Integer library routines. 44009 (line 41) 44010 * __mulsq3: Fixed-point fractional library routines. 44011 (line 156) 44012 * __multa3: Fixed-point fractional library routines. 44013 (line 171) 44014 * __multc3: Soft float library routines. 44015 (line 241) 44016 * __multf3: Soft float library routines. 44017 (line 40) 44018 * __multi3: Integer library routines. 44019 (line 43) 44020 * __muluda3: Fixed-point fractional library routines. 44021 (line 177) 44022 * __muludq3: Fixed-point fractional library routines. 44023 (line 165) 44024 * __muluha3: Fixed-point fractional library routines. 44025 (line 173) 44026 * __muluhq3: Fixed-point fractional library routines. 44027 (line 161) 44028 * __muluqq3: Fixed-point fractional library routines. 44029 (line 159) 44030 * __mulusa3: Fixed-point fractional library routines. 44031 (line 175) 44032 * __mulusq3: Fixed-point fractional library routines. 44033 (line 163) 44034 * __muluta3: Fixed-point fractional library routines. 44035 (line 179) 44036 * __mulvdi3: Integer library routines. 44037 (line 114) 44038 * __mulvsi3: Integer library routines. 44039 (line 113) 44040 * __mulxc3: Soft float library routines. 44041 (line 243) 44042 * __mulxf3: Soft float library routines. 44043 (line 42) 44044 * __nedf2: Soft float library routines. 44045 (line 199) 44046 * __negda2: Fixed-point fractional library routines. 44047 (line 298) 44048 * __negdf2: Soft float library routines. 44049 (line 55) 44050 * __negdi2: Integer library routines. 44051 (line 46) 44052 * __negdq2: Fixed-point fractional library routines. 44053 (line 288) 44054 * __negha2: Fixed-point fractional library routines. 44055 (line 296) 44056 * __neghq2: Fixed-point fractional library routines. 44057 (line 286) 44058 * __negqq2: Fixed-point fractional library routines. 44059 (line 285) 44060 * __negsa2: Fixed-point fractional library routines. 44061 (line 297) 44062 * __negsf2: Soft float library routines. 44063 (line 54) 44064 * __negsq2: Fixed-point fractional library routines. 44065 (line 287) 44066 * __negta2: Fixed-point fractional library routines. 44067 (line 299) 44068 * __negtf2: Soft float library routines. 44069 (line 56) 44070 * __negti2: Integer library routines. 44071 (line 47) 44072 * __neguda2: Fixed-point fractional library routines. 44073 (line 303) 44074 * __negudq2: Fixed-point fractional library routines. 44075 (line 294) 44076 * __neguha2: Fixed-point fractional library routines. 44077 (line 300) 44078 * __neguhq2: Fixed-point fractional library routines. 44079 (line 291) 44080 * __neguqq2: Fixed-point fractional library routines. 44081 (line 289) 44082 * __negusa2: Fixed-point fractional library routines. 44083 (line 302) 44084 * __negusq2: Fixed-point fractional library routines. 44085 (line 292) 44086 * __neguta2: Fixed-point fractional library routines. 44087 (line 305) 44088 * __negvdi2: Integer library routines. 44089 (line 118) 44090 * __negvsi2: Integer library routines. 44091 (line 117) 44092 * __negxf2: Soft float library routines. 44093 (line 57) 44094 * __nesf2: Soft float library routines. 44095 (line 198) 44096 * __netf2: Soft float library routines. 44097 (line 200) 44098 * __paritydi2: Integer library routines. 44099 (line 150) 44100 * __paritysi2: Integer library routines. 44101 (line 149) 44102 * __parityti2: Integer library routines. 44103 (line 151) 44104 * __popcountdi2: Integer library routines. 44105 (line 156) 44106 * __popcountsi2: Integer library routines. 44107 (line 155) 44108 * __popcountti2: Integer library routines. 44109 (line 157) 44110 * __powidf2: Soft float library routines. 44111 (line 232) 44112 * __powisf2: Soft float library routines. 44113 (line 231) 44114 * __powitf2: Soft float library routines. 44115 (line 233) 44116 * __powixf2: Soft float library routines. 44117 (line 234) 44118 * __satfractdadq: Fixed-point fractional library routines. 44119 (line 1152) 44120 * __satfractdaha2: Fixed-point fractional library routines. 44121 (line 1153) 44122 * __satfractdahq: Fixed-point fractional library routines. 44123 (line 1150) 44124 * __satfractdaqq: Fixed-point fractional library routines. 44125 (line 1149) 44126 * __satfractdasa2: Fixed-point fractional library routines. 44127 (line 1154) 44128 * __satfractdasq: Fixed-point fractional library routines. 44129 (line 1151) 44130 * __satfractdata2: Fixed-point fractional library routines. 44131 (line 1155) 44132 * __satfractdauda: Fixed-point fractional library routines. 44133 (line 1165) 44134 * __satfractdaudq: Fixed-point fractional library routines. 44135 (line 1160) 44136 * __satfractdauha: Fixed-point fractional library routines. 44137 (line 1162) 44138 * __satfractdauhq: Fixed-point fractional library routines. 44139 (line 1158) 44140 * __satfractdauqq: Fixed-point fractional library routines. 44141 (line 1156) 44142 * __satfractdausa: Fixed-point fractional library routines. 44143 (line 1164) 44144 * __satfractdausq: Fixed-point fractional library routines. 44145 (line 1159) 44146 * __satfractdauta: Fixed-point fractional library routines. 44147 (line 1166) 44148 * __satfractdfda: Fixed-point fractional library routines. 44149 (line 1505) 44150 * __satfractdfdq: Fixed-point fractional library routines. 44151 (line 1502) 44152 * __satfractdfha: Fixed-point fractional library routines. 44153 (line 1503) 44154 * __satfractdfhq: Fixed-point fractional library routines. 44155 (line 1500) 44156 * __satfractdfqq: Fixed-point fractional library routines. 44157 (line 1499) 44158 * __satfractdfsa: Fixed-point fractional library routines. 44159 (line 1504) 44160 * __satfractdfsq: Fixed-point fractional library routines. 44161 (line 1501) 44162 * __satfractdfta: Fixed-point fractional library routines. 44163 (line 1506) 44164 * __satfractdfuda: Fixed-point fractional library routines. 44165 (line 1514) 44166 * __satfractdfudq: Fixed-point fractional library routines. 44167 (line 1510) 44168 * __satfractdfuha: Fixed-point fractional library routines. 44169 (line 1512) 44170 * __satfractdfuhq: Fixed-point fractional library routines. 44171 (line 1508) 44172 * __satfractdfuqq: Fixed-point fractional library routines. 44173 (line 1507) 44174 * __satfractdfusa: Fixed-point fractional library routines. 44175 (line 1513) 44176 * __satfractdfusq: Fixed-point fractional library routines. 44177 (line 1509) 44178 * __satfractdfuta: Fixed-point fractional library routines. 44179 (line 1515) 44180 * __satfractdida: Fixed-point fractional library routines. 44181 (line 1455) 44182 * __satfractdidq: Fixed-point fractional library routines. 44183 (line 1452) 44184 * __satfractdiha: Fixed-point fractional library routines. 44185 (line 1453) 44186 * __satfractdihq: Fixed-point fractional library routines. 44187 (line 1450) 44188 * __satfractdiqq: Fixed-point fractional library routines. 44189 (line 1449) 44190 * __satfractdisa: Fixed-point fractional library routines. 44191 (line 1454) 44192 * __satfractdisq: Fixed-point fractional library routines. 44193 (line 1451) 44194 * __satfractdita: Fixed-point fractional library routines. 44195 (line 1456) 44196 * __satfractdiuda: Fixed-point fractional library routines. 44197 (line 1463) 44198 * __satfractdiudq: Fixed-point fractional library routines. 44199 (line 1460) 44200 * __satfractdiuha: Fixed-point fractional library routines. 44201 (line 1461) 44202 * __satfractdiuhq: Fixed-point fractional library routines. 44203 (line 1458) 44204 * __satfractdiuqq: Fixed-point fractional library routines. 44205 (line 1457) 44206 * __satfractdiusa: Fixed-point fractional library routines. 44207 (line 1462) 44208 * __satfractdiusq: Fixed-point fractional library routines. 44209 (line 1459) 44210 * __satfractdiuta: Fixed-point fractional library routines. 44211 (line 1464) 44212 * __satfractdqda: Fixed-point fractional library routines. 44213 (line 1097) 44214 * __satfractdqha: Fixed-point fractional library routines. 44215 (line 1095) 44216 * __satfractdqhq2: Fixed-point fractional library routines. 44217 (line 1093) 44218 * __satfractdqqq2: Fixed-point fractional library routines. 44219 (line 1092) 44220 * __satfractdqsa: Fixed-point fractional library routines. 44221 (line 1096) 44222 * __satfractdqsq2: Fixed-point fractional library routines. 44223 (line 1094) 44224 * __satfractdqta: Fixed-point fractional library routines. 44225 (line 1098) 44226 * __satfractdquda: Fixed-point fractional library routines. 44227 (line 1109) 44228 * __satfractdqudq: Fixed-point fractional library routines. 44229 (line 1104) 44230 * __satfractdquha: Fixed-point fractional library routines. 44231 (line 1106) 44232 * __satfractdquhq: Fixed-point fractional library routines. 44233 (line 1101) 44234 * __satfractdquqq: Fixed-point fractional library routines. 44235 (line 1099) 44236 * __satfractdqusa: Fixed-point fractional library routines. 44237 (line 1108) 44238 * __satfractdqusq: Fixed-point fractional library routines. 44239 (line 1102) 44240 * __satfractdquta: Fixed-point fractional library routines. 44241 (line 1111) 44242 * __satfracthada2: Fixed-point fractional library routines. 44243 (line 1118) 44244 * __satfracthadq: Fixed-point fractional library routines. 44245 (line 1116) 44246 * __satfracthahq: Fixed-point fractional library routines. 44247 (line 1114) 44248 * __satfracthaqq: Fixed-point fractional library routines. 44249 (line 1113) 44250 * __satfracthasa2: Fixed-point fractional library routines. 44251 (line 1117) 44252 * __satfracthasq: Fixed-point fractional library routines. 44253 (line 1115) 44254 * __satfracthata2: Fixed-point fractional library routines. 44255 (line 1119) 44256 * __satfracthauda: Fixed-point fractional library routines. 44257 (line 1130) 44258 * __satfracthaudq: Fixed-point fractional library routines. 44259 (line 1125) 44260 * __satfracthauha: Fixed-point fractional library routines. 44261 (line 1127) 44262 * __satfracthauhq: Fixed-point fractional library routines. 44263 (line 1122) 44264 * __satfracthauqq: Fixed-point fractional library routines. 44265 (line 1120) 44266 * __satfracthausa: Fixed-point fractional library routines. 44267 (line 1129) 44268 * __satfracthausq: Fixed-point fractional library routines. 44269 (line 1123) 44270 * __satfracthauta: Fixed-point fractional library routines. 44271 (line 1132) 44272 * __satfracthida: Fixed-point fractional library routines. 44273 (line 1423) 44274 * __satfracthidq: Fixed-point fractional library routines. 44275 (line 1420) 44276 * __satfracthiha: Fixed-point fractional library routines. 44277 (line 1421) 44278 * __satfracthihq: Fixed-point fractional library routines. 44279 (line 1418) 44280 * __satfracthiqq: Fixed-point fractional library routines. 44281 (line 1417) 44282 * __satfracthisa: Fixed-point fractional library routines. 44283 (line 1422) 44284 * __satfracthisq: Fixed-point fractional library routines. 44285 (line 1419) 44286 * __satfracthita: Fixed-point fractional library routines. 44287 (line 1424) 44288 * __satfracthiuda: Fixed-point fractional library routines. 44289 (line 1431) 44290 * __satfracthiudq: Fixed-point fractional library routines. 44291 (line 1428) 44292 * __satfracthiuha: Fixed-point fractional library routines. 44293 (line 1429) 44294 * __satfracthiuhq: Fixed-point fractional library routines. 44295 (line 1426) 44296 * __satfracthiuqq: Fixed-point fractional library routines. 44297 (line 1425) 44298 * __satfracthiusa: Fixed-point fractional library routines. 44299 (line 1430) 44300 * __satfracthiusq: Fixed-point fractional library routines. 44301 (line 1427) 44302 * __satfracthiuta: Fixed-point fractional library routines. 44303 (line 1432) 44304 * __satfracthqda: Fixed-point fractional library routines. 44305 (line 1063) 44306 * __satfracthqdq2: Fixed-point fractional library routines. 44307 (line 1060) 44308 * __satfracthqha: Fixed-point fractional library routines. 44309 (line 1061) 44310 * __satfracthqqq2: Fixed-point fractional library routines. 44311 (line 1058) 44312 * __satfracthqsa: Fixed-point fractional library routines. 44313 (line 1062) 44314 * __satfracthqsq2: Fixed-point fractional library routines. 44315 (line 1059) 44316 * __satfracthqta: Fixed-point fractional library routines. 44317 (line 1064) 44318 * __satfracthquda: Fixed-point fractional library routines. 44319 (line 1071) 44320 * __satfracthqudq: Fixed-point fractional library routines. 44321 (line 1068) 44322 * __satfracthquha: Fixed-point fractional library routines. 44323 (line 1069) 44324 * __satfracthquhq: Fixed-point fractional library routines. 44325 (line 1066) 44326 * __satfracthquqq: Fixed-point fractional library routines. 44327 (line 1065) 44328 * __satfracthqusa: Fixed-point fractional library routines. 44329 (line 1070) 44330 * __satfracthqusq: Fixed-point fractional library routines. 44331 (line 1067) 44332 * __satfracthquta: Fixed-point fractional library routines. 44333 (line 1072) 44334 * __satfractqida: Fixed-point fractional library routines. 44335 (line 1401) 44336 * __satfractqidq: Fixed-point fractional library routines. 44337 (line 1398) 44338 * __satfractqiha: Fixed-point fractional library routines. 44339 (line 1399) 44340 * __satfractqihq: Fixed-point fractional library routines. 44341 (line 1396) 44342 * __satfractqiqq: Fixed-point fractional library routines. 44343 (line 1395) 44344 * __satfractqisa: Fixed-point fractional library routines. 44345 (line 1400) 44346 * __satfractqisq: Fixed-point fractional library routines. 44347 (line 1397) 44348 * __satfractqita: Fixed-point fractional library routines. 44349 (line 1402) 44350 * __satfractqiuda: Fixed-point fractional library routines. 44351 (line 1413) 44352 * __satfractqiudq: Fixed-point fractional library routines. 44353 (line 1408) 44354 * __satfractqiuha: Fixed-point fractional library routines. 44355 (line 1410) 44356 * __satfractqiuhq: Fixed-point fractional library routines. 44357 (line 1405) 44358 * __satfractqiuqq: Fixed-point fractional library routines. 44359 (line 1403) 44360 * __satfractqiusa: Fixed-point fractional library routines. 44361 (line 1412) 44362 * __satfractqiusq: Fixed-point fractional library routines. 44363 (line 1406) 44364 * __satfractqiuta: Fixed-point fractional library routines. 44365 (line 1415) 44366 * __satfractqqda: Fixed-point fractional library routines. 44367 (line 1042) 44368 * __satfractqqdq2: Fixed-point fractional library routines. 44369 (line 1039) 44370 * __satfractqqha: Fixed-point fractional library routines. 44371 (line 1040) 44372 * __satfractqqhq2: Fixed-point fractional library routines. 44373 (line 1037) 44374 * __satfractqqsa: Fixed-point fractional library routines. 44375 (line 1041) 44376 * __satfractqqsq2: Fixed-point fractional library routines. 44377 (line 1038) 44378 * __satfractqqta: Fixed-point fractional library routines. 44379 (line 1043) 44380 * __satfractqquda: Fixed-point fractional library routines. 44381 (line 1054) 44382 * __satfractqqudq: Fixed-point fractional library routines. 44383 (line 1049) 44384 * __satfractqquha: Fixed-point fractional library routines. 44385 (line 1051) 44386 * __satfractqquhq: Fixed-point fractional library routines. 44387 (line 1046) 44388 * __satfractqquqq: Fixed-point fractional library routines. 44389 (line 1044) 44390 * __satfractqqusa: Fixed-point fractional library routines. 44391 (line 1053) 44392 * __satfractqqusq: Fixed-point fractional library routines. 44393 (line 1047) 44394 * __satfractqquta: Fixed-point fractional library routines. 44395 (line 1056) 44396 * __satfractsada2: Fixed-point fractional library routines. 44397 (line 1139) 44398 * __satfractsadq: Fixed-point fractional library routines. 44399 (line 1137) 44400 * __satfractsaha2: Fixed-point fractional library routines. 44401 (line 1138) 44402 * __satfractsahq: Fixed-point fractional library routines. 44403 (line 1135) 44404 * __satfractsaqq: Fixed-point fractional library routines. 44405 (line 1134) 44406 * __satfractsasq: Fixed-point fractional library routines. 44407 (line 1136) 44408 * __satfractsata2: Fixed-point fractional library routines. 44409 (line 1140) 44410 * __satfractsauda: Fixed-point fractional library routines. 44411 (line 1147) 44412 * __satfractsaudq: Fixed-point fractional library routines. 44413 (line 1144) 44414 * __satfractsauha: Fixed-point fractional library routines. 44415 (line 1145) 44416 * __satfractsauhq: Fixed-point fractional library routines. 44417 (line 1142) 44418 * __satfractsauqq: Fixed-point fractional library routines. 44419 (line 1141) 44420 * __satfractsausa: Fixed-point fractional library routines. 44421 (line 1146) 44422 * __satfractsausq: Fixed-point fractional library routines. 44423 (line 1143) 44424 * __satfractsauta: Fixed-point fractional library routines. 44425 (line 1148) 44426 * __satfractsfda: Fixed-point fractional library routines. 44427 (line 1489) 44428 * __satfractsfdq: Fixed-point fractional library routines. 44429 (line 1486) 44430 * __satfractsfha: Fixed-point fractional library routines. 44431 (line 1487) 44432 * __satfractsfhq: Fixed-point fractional library routines. 44433 (line 1484) 44434 * __satfractsfqq: Fixed-point fractional library routines. 44435 (line 1483) 44436 * __satfractsfsa: Fixed-point fractional library routines. 44437 (line 1488) 44438 * __satfractsfsq: Fixed-point fractional library routines. 44439 (line 1485) 44440 * __satfractsfta: Fixed-point fractional library routines. 44441 (line 1490) 44442 * __satfractsfuda: Fixed-point fractional library routines. 44443 (line 1497) 44444 * __satfractsfudq: Fixed-point fractional library routines. 44445 (line 1494) 44446 * __satfractsfuha: Fixed-point fractional library routines. 44447 (line 1495) 44448 * __satfractsfuhq: Fixed-point fractional library routines. 44449 (line 1492) 44450 * __satfractsfuqq: Fixed-point fractional library routines. 44451 (line 1491) 44452 * __satfractsfusa: Fixed-point fractional library routines. 44453 (line 1496) 44454 * __satfractsfusq: Fixed-point fractional library routines. 44455 (line 1493) 44456 * __satfractsfuta: Fixed-point fractional library routines. 44457 (line 1498) 44458 * __satfractsida: Fixed-point fractional library routines. 44459 (line 1439) 44460 * __satfractsidq: Fixed-point fractional library routines. 44461 (line 1436) 44462 * __satfractsiha: Fixed-point fractional library routines. 44463 (line 1437) 44464 * __satfractsihq: Fixed-point fractional library routines. 44465 (line 1434) 44466 * __satfractsiqq: Fixed-point fractional library routines. 44467 (line 1433) 44468 * __satfractsisa: Fixed-point fractional library routines. 44469 (line 1438) 44470 * __satfractsisq: Fixed-point fractional library routines. 44471 (line 1435) 44472 * __satfractsita: Fixed-point fractional library routines. 44473 (line 1440) 44474 * __satfractsiuda: Fixed-point fractional library routines. 44475 (line 1447) 44476 * __satfractsiudq: Fixed-point fractional library routines. 44477 (line 1444) 44478 * __satfractsiuha: Fixed-point fractional library routines. 44479 (line 1445) 44480 * __satfractsiuhq: Fixed-point fractional library routines. 44481 (line 1442) 44482 * __satfractsiuqq: Fixed-point fractional library routines. 44483 (line 1441) 44484 * __satfractsiusa: Fixed-point fractional library routines. 44485 (line 1446) 44486 * __satfractsiusq: Fixed-point fractional library routines. 44487 (line 1443) 44488 * __satfractsiuta: Fixed-point fractional library routines. 44489 (line 1448) 44490 * __satfractsqda: Fixed-point fractional library routines. 44491 (line 1078) 44492 * __satfractsqdq2: Fixed-point fractional library routines. 44493 (line 1075) 44494 * __satfractsqha: Fixed-point fractional library routines. 44495 (line 1076) 44496 * __satfractsqhq2: Fixed-point fractional library routines. 44497 (line 1074) 44498 * __satfractsqqq2: Fixed-point fractional library routines. 44499 (line 1073) 44500 * __satfractsqsa: Fixed-point fractional library routines. 44501 (line 1077) 44502 * __satfractsqta: Fixed-point fractional library routines. 44503 (line 1079) 44504 * __satfractsquda: Fixed-point fractional library routines. 44505 (line 1089) 44506 * __satfractsqudq: Fixed-point fractional library routines. 44507 (line 1084) 44508 * __satfractsquha: Fixed-point fractional library routines. 44509 (line 1086) 44510 * __satfractsquhq: Fixed-point fractional library routines. 44511 (line 1082) 44512 * __satfractsquqq: Fixed-point fractional library routines. 44513 (line 1080) 44514 * __satfractsqusa: Fixed-point fractional library routines. 44515 (line 1088) 44516 * __satfractsqusq: Fixed-point fractional library routines. 44517 (line 1083) 44518 * __satfractsquta: Fixed-point fractional library routines. 44519 (line 1090) 44520 * __satfracttada2: Fixed-point fractional library routines. 44521 (line 1174) 44522 * __satfracttadq: Fixed-point fractional library routines. 44523 (line 1171) 44524 * __satfracttaha2: Fixed-point fractional library routines. 44525 (line 1172) 44526 * __satfracttahq: Fixed-point fractional library routines. 44527 (line 1169) 44528 * __satfracttaqq: Fixed-point fractional library routines. 44529 (line 1168) 44530 * __satfracttasa2: Fixed-point fractional library routines. 44531 (line 1173) 44532 * __satfracttasq: Fixed-point fractional library routines. 44533 (line 1170) 44534 * __satfracttauda: Fixed-point fractional library routines. 44535 (line 1185) 44536 * __satfracttaudq: Fixed-point fractional library routines. 44537 (line 1180) 44538 * __satfracttauha: Fixed-point fractional library routines. 44539 (line 1182) 44540 * __satfracttauhq: Fixed-point fractional library routines. 44541 (line 1177) 44542 * __satfracttauqq: Fixed-point fractional library routines. 44543 (line 1175) 44544 * __satfracttausa: Fixed-point fractional library routines. 44545 (line 1184) 44546 * __satfracttausq: Fixed-point fractional library routines. 44547 (line 1178) 44548 * __satfracttauta: Fixed-point fractional library routines. 44549 (line 1187) 44550 * __satfracttida: Fixed-point fractional library routines. 44551 (line 1471) 44552 * __satfracttidq: Fixed-point fractional library routines. 44553 (line 1468) 44554 * __satfracttiha: Fixed-point fractional library routines. 44555 (line 1469) 44556 * __satfracttihq: Fixed-point fractional library routines. 44557 (line 1466) 44558 * __satfracttiqq: Fixed-point fractional library routines. 44559 (line 1465) 44560 * __satfracttisa: Fixed-point fractional library routines. 44561 (line 1470) 44562 * __satfracttisq: Fixed-point fractional library routines. 44563 (line 1467) 44564 * __satfracttita: Fixed-point fractional library routines. 44565 (line 1472) 44566 * __satfracttiuda: Fixed-point fractional library routines. 44567 (line 1480) 44568 * __satfracttiudq: Fixed-point fractional library routines. 44569 (line 1476) 44570 * __satfracttiuha: Fixed-point fractional library routines. 44571 (line 1478) 44572 * __satfracttiuhq: Fixed-point fractional library routines. 44573 (line 1474) 44574 * __satfracttiuqq: Fixed-point fractional library routines. 44575 (line 1473) 44576 * __satfracttiusa: Fixed-point fractional library routines. 44577 (line 1479) 44578 * __satfracttiusq: Fixed-point fractional library routines. 44579 (line 1475) 44580 * __satfracttiuta: Fixed-point fractional library routines. 44581 (line 1481) 44582 * __satfractudada: Fixed-point fractional library routines. 44583 (line 1350) 44584 * __satfractudadq: Fixed-point fractional library routines. 44585 (line 1345) 44586 * __satfractudaha: Fixed-point fractional library routines. 44587 (line 1347) 44588 * __satfractudahq: Fixed-point fractional library routines. 44589 (line 1343) 44590 * __satfractudaqq: Fixed-point fractional library routines. 44591 (line 1341) 44592 * __satfractudasa: Fixed-point fractional library routines. 44593 (line 1349) 44594 * __satfractudasq: Fixed-point fractional library routines. 44595 (line 1344) 44596 * __satfractudata: Fixed-point fractional library routines. 44597 (line 1351) 44598 * __satfractudaudq: Fixed-point fractional library routines. 44599 (line 1359) 44600 * __satfractudauha2: Fixed-point fractional library routines. 44601 (line 1361) 44602 * __satfractudauhq: Fixed-point fractional library routines. 44603 (line 1355) 44604 * __satfractudauqq: Fixed-point fractional library routines. 44605 (line 1353) 44606 * __satfractudausa2: Fixed-point fractional library routines. 44607 (line 1363) 44608 * __satfractudausq: Fixed-point fractional library routines. 44609 (line 1357) 44610 * __satfractudauta2: Fixed-point fractional library routines. 44611 (line 1365) 44612 * __satfractudqda: Fixed-point fractional library routines. 44613 (line 1274) 44614 * __satfractudqdq: Fixed-point fractional library routines. 44615 (line 1269) 44616 * __satfractudqha: Fixed-point fractional library routines. 44617 (line 1271) 44618 * __satfractudqhq: Fixed-point fractional library routines. 44619 (line 1266) 44620 * __satfractudqqq: Fixed-point fractional library routines. 44621 (line 1264) 44622 * __satfractudqsa: Fixed-point fractional library routines. 44623 (line 1273) 44624 * __satfractudqsq: Fixed-point fractional library routines. 44625 (line 1267) 44626 * __satfractudqta: Fixed-point fractional library routines. 44627 (line 1276) 44628 * __satfractudquda: Fixed-point fractional library routines. 44629 (line 1288) 44630 * __satfractudquha: Fixed-point fractional library routines. 44631 (line 1284) 44632 * __satfractudquhq2: Fixed-point fractional library routines. 44633 (line 1280) 44634 * __satfractudquqq2: Fixed-point fractional library routines. 44635 (line 1278) 44636 * __satfractudqusa: Fixed-point fractional library routines. 44637 (line 1286) 44638 * __satfractudqusq2: Fixed-point fractional library routines. 44639 (line 1282) 44640 * __satfractudquta: Fixed-point fractional library routines. 44641 (line 1290) 44642 * __satfractuhada: Fixed-point fractional library routines. 44643 (line 1302) 44644 * __satfractuhadq: Fixed-point fractional library routines. 44645 (line 1297) 44646 * __satfractuhaha: Fixed-point fractional library routines. 44647 (line 1299) 44648 * __satfractuhahq: Fixed-point fractional library routines. 44649 (line 1294) 44650 * __satfractuhaqq: Fixed-point fractional library routines. 44651 (line 1292) 44652 * __satfractuhasa: Fixed-point fractional library routines. 44653 (line 1301) 44654 * __satfractuhasq: Fixed-point fractional library routines. 44655 (line 1295) 44656 * __satfractuhata: Fixed-point fractional library routines. 44657 (line 1304) 44658 * __satfractuhauda2: Fixed-point fractional library routines. 44659 (line 1316) 44660 * __satfractuhaudq: Fixed-point fractional library routines. 44661 (line 1312) 44662 * __satfractuhauhq: Fixed-point fractional library routines. 44663 (line 1308) 44664 * __satfractuhauqq: Fixed-point fractional library routines. 44665 (line 1306) 44666 * __satfractuhausa2: Fixed-point fractional library routines. 44667 (line 1314) 44668 * __satfractuhausq: Fixed-point fractional library routines. 44669 (line 1310) 44670 * __satfractuhauta2: Fixed-point fractional library routines. 44671 (line 1318) 44672 * __satfractuhqda: Fixed-point fractional library routines. 44673 (line 1223) 44674 * __satfractuhqdq: Fixed-point fractional library routines. 44675 (line 1220) 44676 * __satfractuhqha: Fixed-point fractional library routines. 44677 (line 1221) 44678 * __satfractuhqhq: Fixed-point fractional library routines. 44679 (line 1218) 44680 * __satfractuhqqq: Fixed-point fractional library routines. 44681 (line 1217) 44682 * __satfractuhqsa: Fixed-point fractional library routines. 44683 (line 1222) 44684 * __satfractuhqsq: Fixed-point fractional library routines. 44685 (line 1219) 44686 * __satfractuhqta: Fixed-point fractional library routines. 44687 (line 1224) 44688 * __satfractuhquda: Fixed-point fractional library routines. 44689 (line 1234) 44690 * __satfractuhqudq2: Fixed-point fractional library routines. 44691 (line 1229) 44692 * __satfractuhquha: Fixed-point fractional library routines. 44693 (line 1231) 44694 * __satfractuhquqq2: Fixed-point fractional library routines. 44695 (line 1225) 44696 * __satfractuhqusa: Fixed-point fractional library routines. 44697 (line 1233) 44698 * __satfractuhqusq2: Fixed-point fractional library routines. 44699 (line 1227) 44700 * __satfractuhquta: Fixed-point fractional library routines. 44701 (line 1236) 44702 * __satfractunsdida: Fixed-point fractional library routines. 44703 (line 1833) 44704 * __satfractunsdidq: Fixed-point fractional library routines. 44705 (line 1829) 44706 * __satfractunsdiha: Fixed-point fractional library routines. 44707 (line 1831) 44708 * __satfractunsdihq: Fixed-point fractional library routines. 44709 (line 1827) 44710 * __satfractunsdiqq: Fixed-point fractional library routines. 44711 (line 1826) 44712 * __satfractunsdisa: Fixed-point fractional library routines. 44713 (line 1832) 44714 * __satfractunsdisq: Fixed-point fractional library routines. 44715 (line 1828) 44716 * __satfractunsdita: Fixed-point fractional library routines. 44717 (line 1834) 44718 * __satfractunsdiuda: Fixed-point fractional library routines. 44719 (line 1848) 44720 * __satfractunsdiudq: Fixed-point fractional library routines. 44721 (line 1842) 44722 * __satfractunsdiuha: Fixed-point fractional library routines. 44723 (line 1844) 44724 * __satfractunsdiuhq: Fixed-point fractional library routines. 44725 (line 1838) 44726 * __satfractunsdiuqq: Fixed-point fractional library routines. 44727 (line 1836) 44728 * __satfractunsdiusa: Fixed-point fractional library routines. 44729 (line 1846) 44730 * __satfractunsdiusq: Fixed-point fractional library routines. 44731 (line 1840) 44732 * __satfractunsdiuta: Fixed-point fractional library routines. 44733 (line 1850) 44734 * __satfractunshida: Fixed-point fractional library routines. 44735 (line 1785) 44736 * __satfractunshidq: Fixed-point fractional library routines. 44737 (line 1781) 44738 * __satfractunshiha: Fixed-point fractional library routines. 44739 (line 1783) 44740 * __satfractunshihq: Fixed-point fractional library routines. 44741 (line 1779) 44742 * __satfractunshiqq: Fixed-point fractional library routines. 44743 (line 1778) 44744 * __satfractunshisa: Fixed-point fractional library routines. 44745 (line 1784) 44746 * __satfractunshisq: Fixed-point fractional library routines. 44747 (line 1780) 44748 * __satfractunshita: Fixed-point fractional library routines. 44749 (line 1786) 44750 * __satfractunshiuda: Fixed-point fractional library routines. 44751 (line 1800) 44752 * __satfractunshiudq: Fixed-point fractional library routines. 44753 (line 1794) 44754 * __satfractunshiuha: Fixed-point fractional library routines. 44755 (line 1796) 44756 * __satfractunshiuhq: Fixed-point fractional library routines. 44757 (line 1790) 44758 * __satfractunshiuqq: Fixed-point fractional library routines. 44759 (line 1788) 44760 * __satfractunshiusa: Fixed-point fractional library routines. 44761 (line 1798) 44762 * __satfractunshiusq: Fixed-point fractional library routines. 44763 (line 1792) 44764 * __satfractunshiuta: Fixed-point fractional library routines. 44765 (line 1802) 44766 * __satfractunsqida: Fixed-point fractional library routines. 44767 (line 1759) 44768 * __satfractunsqidq: Fixed-point fractional library routines. 44769 (line 1755) 44770 * __satfractunsqiha: Fixed-point fractional library routines. 44771 (line 1757) 44772 * __satfractunsqihq: Fixed-point fractional library routines. 44773 (line 1753) 44774 * __satfractunsqiqq: Fixed-point fractional library routines. 44775 (line 1752) 44776 * __satfractunsqisa: Fixed-point fractional library routines. 44777 (line 1758) 44778 * __satfractunsqisq: Fixed-point fractional library routines. 44779 (line 1754) 44780 * __satfractunsqita: Fixed-point fractional library routines. 44781 (line 1760) 44782 * __satfractunsqiuda: Fixed-point fractional library routines. 44783 (line 1774) 44784 * __satfractunsqiudq: Fixed-point fractional library routines. 44785 (line 1768) 44786 * __satfractunsqiuha: Fixed-point fractional library routines. 44787 (line 1770) 44788 * __satfractunsqiuhq: Fixed-point fractional library routines. 44789 (line 1764) 44790 * __satfractunsqiuqq: Fixed-point fractional library routines. 44791 (line 1762) 44792 * __satfractunsqiusa: Fixed-point fractional library routines. 44793 (line 1772) 44794 * __satfractunsqiusq: Fixed-point fractional library routines. 44795 (line 1766) 44796 * __satfractunsqiuta: Fixed-point fractional library routines. 44797 (line 1776) 44798 * __satfractunssida: Fixed-point fractional library routines. 44799 (line 1810) 44800 * __satfractunssidq: Fixed-point fractional library routines. 44801 (line 1807) 44802 * __satfractunssiha: Fixed-point fractional library routines. 44803 (line 1808) 44804 * __satfractunssihq: Fixed-point fractional library routines. 44805 (line 1805) 44806 * __satfractunssiqq: Fixed-point fractional library routines. 44807 (line 1804) 44808 * __satfractunssisa: Fixed-point fractional library routines. 44809 (line 1809) 44810 * __satfractunssisq: Fixed-point fractional library routines. 44811 (line 1806) 44812 * __satfractunssita: Fixed-point fractional library routines. 44813 (line 1811) 44814 * __satfractunssiuda: Fixed-point fractional library routines. 44815 (line 1822) 44816 * __satfractunssiudq: Fixed-point fractional library routines. 44817 (line 1817) 44818 * __satfractunssiuha: Fixed-point fractional library routines. 44819 (line 1819) 44820 * __satfractunssiuhq: Fixed-point fractional library routines. 44821 (line 1814) 44822 * __satfractunssiuqq: Fixed-point fractional library routines. 44823 (line 1812) 44824 * __satfractunssiusa: Fixed-point fractional library routines. 44825 (line 1821) 44826 * __satfractunssiusq: Fixed-point fractional library routines. 44827 (line 1815) 44828 * __satfractunssiuta: Fixed-point fractional library routines. 44829 (line 1824) 44830 * __satfractunstida: Fixed-point fractional library routines. 44831 (line 1862) 44832 * __satfractunstidq: Fixed-point fractional library routines. 44833 (line 1857) 44834 * __satfractunstiha: Fixed-point fractional library routines. 44835 (line 1859) 44836 * __satfractunstihq: Fixed-point fractional library routines. 44837 (line 1854) 44838 * __satfractunstiqq: Fixed-point fractional library routines. 44839 (line 1852) 44840 * __satfractunstisa: Fixed-point fractional library routines. 44841 (line 1861) 44842 * __satfractunstisq: Fixed-point fractional library routines. 44843 (line 1855) 44844 * __satfractunstita: Fixed-point fractional library routines. 44845 (line 1864) 44846 * __satfractunstiuda: Fixed-point fractional library routines. 44847 (line 1878) 44848 * __satfractunstiudq: Fixed-point fractional library routines. 44849 (line 1872) 44850 * __satfractunstiuha: Fixed-point fractional library routines. 44851 (line 1874) 44852 * __satfractunstiuhq: Fixed-point fractional library routines. 44853 (line 1868) 44854 * __satfractunstiuqq: Fixed-point fractional library routines. 44855 (line 1866) 44856 * __satfractunstiusa: Fixed-point fractional library routines. 44857 (line 1876) 44858 * __satfractunstiusq: Fixed-point fractional library routines. 44859 (line 1870) 44860 * __satfractunstiuta: Fixed-point fractional library routines. 44861 (line 1880) 44862 * __satfractuqqda: Fixed-point fractional library routines. 44863 (line 1199) 44864 * __satfractuqqdq: Fixed-point fractional library routines. 44865 (line 1194) 44866 * __satfractuqqha: Fixed-point fractional library routines. 44867 (line 1196) 44868 * __satfractuqqhq: Fixed-point fractional library routines. 44869 (line 1191) 44870 * __satfractuqqqq: Fixed-point fractional library routines. 44871 (line 1189) 44872 * __satfractuqqsa: Fixed-point fractional library routines. 44873 (line 1198) 44874 * __satfractuqqsq: Fixed-point fractional library routines. 44875 (line 1192) 44876 * __satfractuqqta: Fixed-point fractional library routines. 44877 (line 1201) 44878 * __satfractuqquda: Fixed-point fractional library routines. 44879 (line 1213) 44880 * __satfractuqqudq2: Fixed-point fractional library routines. 44881 (line 1207) 44882 * __satfractuqquha: Fixed-point fractional library routines. 44883 (line 1209) 44884 * __satfractuqquhq2: Fixed-point fractional library routines. 44885 (line 1203) 44886 * __satfractuqqusa: Fixed-point fractional library routines. 44887 (line 1211) 44888 * __satfractuqqusq2: Fixed-point fractional library routines. 44889 (line 1205) 44890 * __satfractuqquta: Fixed-point fractional library routines. 44891 (line 1215) 44892 * __satfractusada: Fixed-point fractional library routines. 44893 (line 1326) 44894 * __satfractusadq: Fixed-point fractional library routines. 44895 (line 1323) 44896 * __satfractusaha: Fixed-point fractional library routines. 44897 (line 1324) 44898 * __satfractusahq: Fixed-point fractional library routines. 44899 (line 1321) 44900 * __satfractusaqq: Fixed-point fractional library routines. 44901 (line 1320) 44902 * __satfractusasa: Fixed-point fractional library routines. 44903 (line 1325) 44904 * __satfractusasq: Fixed-point fractional library routines. 44905 (line 1322) 44906 * __satfractusata: Fixed-point fractional library routines. 44907 (line 1327) 44908 * __satfractusauda2: Fixed-point fractional library routines. 44909 (line 1337) 44910 * __satfractusaudq: Fixed-point fractional library routines. 44911 (line 1333) 44912 * __satfractusauha2: Fixed-point fractional library routines. 44913 (line 1335) 44914 * __satfractusauhq: Fixed-point fractional library routines. 44915 (line 1330) 44916 * __satfractusauqq: Fixed-point fractional library routines. 44917 (line 1328) 44918 * __satfractusausq: Fixed-point fractional library routines. 44919 (line 1331) 44920 * __satfractusauta2: Fixed-point fractional library routines. 44921 (line 1339) 44922 * __satfractusqda: Fixed-point fractional library routines. 44923 (line 1247) 44924 * __satfractusqdq: Fixed-point fractional library routines. 44925 (line 1242) 44926 * __satfractusqha: Fixed-point fractional library routines. 44927 (line 1244) 44928 * __satfractusqhq: Fixed-point fractional library routines. 44929 (line 1240) 44930 * __satfractusqqq: Fixed-point fractional library routines. 44931 (line 1238) 44932 * __satfractusqsa: Fixed-point fractional library routines. 44933 (line 1246) 44934 * __satfractusqsq: Fixed-point fractional library routines. 44935 (line 1241) 44936 * __satfractusqta: Fixed-point fractional library routines. 44937 (line 1248) 44938 * __satfractusquda: Fixed-point fractional library routines. 44939 (line 1260) 44940 * __satfractusqudq2: Fixed-point fractional library routines. 44941 (line 1254) 44942 * __satfractusquha: Fixed-point fractional library routines. 44943 (line 1256) 44944 * __satfractusquhq2: Fixed-point fractional library routines. 44945 (line 1252) 44946 * __satfractusquqq2: Fixed-point fractional library routines. 44947 (line 1250) 44948 * __satfractusqusa: Fixed-point fractional library routines. 44949 (line 1258) 44950 * __satfractusquta: Fixed-point fractional library routines. 44951 (line 1262) 44952 * __satfractutada: Fixed-point fractional library routines. 44953 (line 1377) 44954 * __satfractutadq: Fixed-point fractional library routines. 44955 (line 1372) 44956 * __satfractutaha: Fixed-point fractional library routines. 44957 (line 1374) 44958 * __satfractutahq: Fixed-point fractional library routines. 44959 (line 1369) 44960 * __satfractutaqq: Fixed-point fractional library routines. 44961 (line 1367) 44962 * __satfractutasa: Fixed-point fractional library routines. 44963 (line 1376) 44964 * __satfractutasq: Fixed-point fractional library routines. 44965 (line 1370) 44966 * __satfractutata: Fixed-point fractional library routines. 44967 (line 1379) 44968 * __satfractutauda2: Fixed-point fractional library routines. 44969 (line 1393) 44970 * __satfractutaudq: Fixed-point fractional library routines. 44971 (line 1387) 44972 * __satfractutauha2: Fixed-point fractional library routines. 44973 (line 1389) 44974 * __satfractutauhq: Fixed-point fractional library routines. 44975 (line 1383) 44976 * __satfractutauqq: Fixed-point fractional library routines. 44977 (line 1381) 44978 * __satfractutausa2: Fixed-point fractional library routines. 44979 (line 1391) 44980 * __satfractutausq: Fixed-point fractional library routines. 44981 (line 1385) 44982 * __splitstack_find: Miscellaneous routines. 44983 (line 15) 44984 * __ssaddda3: Fixed-point fractional library routines. 44985 (line 66) 44986 * __ssadddq3: Fixed-point fractional library routines. 44987 (line 61) 44988 * __ssaddha3: Fixed-point fractional library routines. 44989 (line 63) 44990 * __ssaddhq3: Fixed-point fractional library routines. 44991 (line 59) 44992 * __ssaddqq3: Fixed-point fractional library routines. 44993 (line 57) 44994 * __ssaddsa3: Fixed-point fractional library routines. 44995 (line 65) 44996 * __ssaddsq3: Fixed-point fractional library routines. 44997 (line 60) 44998 * __ssaddta3: Fixed-point fractional library routines. 44999 (line 67) 45000 * __ssashlda3: Fixed-point fractional library routines. 45001 (line 401) 45002 * __ssashldq3: Fixed-point fractional library routines. 45003 (line 397) 45004 * __ssashlha3: Fixed-point fractional library routines. 45005 (line 399) 45006 * __ssashlhq3: Fixed-point fractional library routines. 45007 (line 395) 45008 * __ssashlsa3: Fixed-point fractional library routines. 45009 (line 400) 45010 * __ssashlsq3: Fixed-point fractional library routines. 45011 (line 396) 45012 * __ssashlta3: Fixed-point fractional library routines. 45013 (line 402) 45014 * __ssdivda3: Fixed-point fractional library routines. 45015 (line 260) 45016 * __ssdivdq3: Fixed-point fractional library routines. 45017 (line 255) 45018 * __ssdivha3: Fixed-point fractional library routines. 45019 (line 257) 45020 * __ssdivhq3: Fixed-point fractional library routines. 45021 (line 253) 45022 * __ssdivqq3: Fixed-point fractional library routines. 45023 (line 251) 45024 * __ssdivsa3: Fixed-point fractional library routines. 45025 (line 259) 45026 * __ssdivsq3: Fixed-point fractional library routines. 45027 (line 254) 45028 * __ssdivta3: Fixed-point fractional library routines. 45029 (line 261) 45030 * __ssmulda3: Fixed-point fractional library routines. 45031 (line 192) 45032 * __ssmuldq3: Fixed-point fractional library routines. 45033 (line 187) 45034 * __ssmulha3: Fixed-point fractional library routines. 45035 (line 189) 45036 * __ssmulhq3: Fixed-point fractional library routines. 45037 (line 185) 45038 * __ssmulqq3: Fixed-point fractional library routines. 45039 (line 183) 45040 * __ssmulsa3: Fixed-point fractional library routines. 45041 (line 191) 45042 * __ssmulsq3: Fixed-point fractional library routines. 45043 (line 186) 45044 * __ssmulta3: Fixed-point fractional library routines. 45045 (line 193) 45046 * __ssnegda2: Fixed-point fractional library routines. 45047 (line 315) 45048 * __ssnegdq2: Fixed-point fractional library routines. 45049 (line 312) 45050 * __ssnegha2: Fixed-point fractional library routines. 45051 (line 313) 45052 * __ssneghq2: Fixed-point fractional library routines. 45053 (line 310) 45054 * __ssnegqq2: Fixed-point fractional library routines. 45055 (line 309) 45056 * __ssnegsa2: Fixed-point fractional library routines. 45057 (line 314) 45058 * __ssnegsq2: Fixed-point fractional library routines. 45059 (line 311) 45060 * __ssnegta2: Fixed-point fractional library routines. 45061 (line 316) 45062 * __sssubda3: Fixed-point fractional library routines. 45063 (line 128) 45064 * __sssubdq3: Fixed-point fractional library routines. 45065 (line 123) 45066 * __sssubha3: Fixed-point fractional library routines. 45067 (line 125) 45068 * __sssubhq3: Fixed-point fractional library routines. 45069 (line 121) 45070 * __sssubqq3: Fixed-point fractional library routines. 45071 (line 119) 45072 * __sssubsa3: Fixed-point fractional library routines. 45073 (line 127) 45074 * __sssubsq3: Fixed-point fractional library routines. 45075 (line 122) 45076 * __sssubta3: Fixed-point fractional library routines. 45077 (line 129) 45078 * __subda3: Fixed-point fractional library routines. 45079 (line 106) 45080 * __subdf3: Soft float library routines. 45081 (line 30) 45082 * __subdq3: Fixed-point fractional library routines. 45083 (line 93) 45084 * __subha3: Fixed-point fractional library routines. 45085 (line 103) 45086 * __subhq3: Fixed-point fractional library routines. 45087 (line 91) 45088 * __subqq3: Fixed-point fractional library routines. 45089 (line 89) 45090 * __subsa3: Fixed-point fractional library routines. 45091 (line 105) 45092 * __subsf3: Soft float library routines. 45093 (line 29) 45094 * __subsq3: Fixed-point fractional library routines. 45095 (line 92) 45096 * __subta3: Fixed-point fractional library routines. 45097 (line 107) 45098 * __subtf3: Soft float library routines. 45099 (line 31) 45100 * __subuda3: Fixed-point fractional library routines. 45101 (line 113) 45102 * __subudq3: Fixed-point fractional library routines. 45103 (line 101) 45104 * __subuha3: Fixed-point fractional library routines. 45105 (line 109) 45106 * __subuhq3: Fixed-point fractional library routines. 45107 (line 97) 45108 * __subuqq3: Fixed-point fractional library routines. 45109 (line 95) 45110 * __subusa3: Fixed-point fractional library routines. 45111 (line 111) 45112 * __subusq3: Fixed-point fractional library routines. 45113 (line 99) 45114 * __subuta3: Fixed-point fractional library routines. 45115 (line 115) 45116 * __subvdi3: Integer library routines. 45117 (line 122) 45118 * __subvsi3: Integer library routines. 45119 (line 121) 45120 * __subxf3: Soft float library routines. 45121 (line 33) 45122 * __truncdfsf2: Soft float library routines. 45123 (line 75) 45124 * __trunctfdf2: Soft float library routines. 45125 (line 72) 45126 * __trunctfsf2: Soft float library routines. 45127 (line 74) 45128 * __truncxfdf2: Soft float library routines. 45129 (line 71) 45130 * __truncxfsf2: Soft float library routines. 45131 (line 73) 45132 * __ucmpdi2: Integer library routines. 45133 (line 92) 45134 * __ucmpti2: Integer library routines. 45135 (line 93) 45136 * __udivdi3: Integer library routines. 45137 (line 52) 45138 * __udivmoddi4: Integer library routines. 45139 (line 59) 45140 * __udivmodti4: Integer library routines. 45141 (line 61) 45142 * __udivsi3: Integer library routines. 45143 (line 50) 45144 * __udivti3: Integer library routines. 45145 (line 54) 45146 * __udivuda3: Fixed-point fractional library routines. 45147 (line 244) 45148 * __udivudq3: Fixed-point fractional library routines. 45149 (line 238) 45150 * __udivuha3: Fixed-point fractional library routines. 45151 (line 240) 45152 * __udivuhq3: Fixed-point fractional library routines. 45153 (line 234) 45154 * __udivuqq3: Fixed-point fractional library routines. 45155 (line 232) 45156 * __udivusa3: Fixed-point fractional library routines. 45157 (line 242) 45158 * __udivusq3: Fixed-point fractional library routines. 45159 (line 236) 45160 * __udivuta3: Fixed-point fractional library routines. 45161 (line 246) 45162 * __umoddi3: Integer library routines. 45163 (line 69) 45164 * __umodsi3: Integer library routines. 45165 (line 67) 45166 * __umodti3: Integer library routines. 45167 (line 71) 45168 * __unorddf2: Soft float library routines. 45169 (line 172) 45170 * __unordsf2: Soft float library routines. 45171 (line 171) 45172 * __unordtf2: Soft float library routines. 45173 (line 173) 45174 * __usadduda3: Fixed-point fractional library routines. 45175 (line 83) 45176 * __usaddudq3: Fixed-point fractional library routines. 45177 (line 77) 45178 * __usadduha3: Fixed-point fractional library routines. 45179 (line 79) 45180 * __usadduhq3: Fixed-point fractional library routines. 45181 (line 73) 45182 * __usadduqq3: Fixed-point fractional library routines. 45183 (line 71) 45184 * __usaddusa3: Fixed-point fractional library routines. 45185 (line 81) 45186 * __usaddusq3: Fixed-point fractional library routines. 45187 (line 75) 45188 * __usadduta3: Fixed-point fractional library routines. 45189 (line 85) 45190 * __usashluda3: Fixed-point fractional library routines. 45191 (line 419) 45192 * __usashludq3: Fixed-point fractional library routines. 45193 (line 413) 45194 * __usashluha3: Fixed-point fractional library routines. 45195 (line 415) 45196 * __usashluhq3: Fixed-point fractional library routines. 45197 (line 409) 45198 * __usashluqq3: Fixed-point fractional library routines. 45199 (line 407) 45200 * __usashlusa3: Fixed-point fractional library routines. 45201 (line 417) 45202 * __usashlusq3: Fixed-point fractional library routines. 45203 (line 411) 45204 * __usashluta3: Fixed-point fractional library routines. 45205 (line 421) 45206 * __usdivuda3: Fixed-point fractional library routines. 45207 (line 278) 45208 * __usdivudq3: Fixed-point fractional library routines. 45209 (line 272) 45210 * __usdivuha3: Fixed-point fractional library routines. 45211 (line 274) 45212 * __usdivuhq3: Fixed-point fractional library routines. 45213 (line 268) 45214 * __usdivuqq3: Fixed-point fractional library routines. 45215 (line 266) 45216 * __usdivusa3: Fixed-point fractional library routines. 45217 (line 276) 45218 * __usdivusq3: Fixed-point fractional library routines. 45219 (line 270) 45220 * __usdivuta3: Fixed-point fractional library routines. 45221 (line 280) 45222 * __usmuluda3: Fixed-point fractional library routines. 45223 (line 210) 45224 * __usmuludq3: Fixed-point fractional library routines. 45225 (line 204) 45226 * __usmuluha3: Fixed-point fractional library routines. 45227 (line 206) 45228 * __usmuluhq3: Fixed-point fractional library routines. 45229 (line 200) 45230 * __usmuluqq3: Fixed-point fractional library routines. 45231 (line 198) 45232 * __usmulusa3: Fixed-point fractional library routines. 45233 (line 208) 45234 * __usmulusq3: Fixed-point fractional library routines. 45235 (line 202) 45236 * __usmuluta3: Fixed-point fractional library routines. 45237 (line 212) 45238 * __usneguda2: Fixed-point fractional library routines. 45239 (line 329) 45240 * __usnegudq2: Fixed-point fractional library routines. 45241 (line 324) 45242 * __usneguha2: Fixed-point fractional library routines. 45243 (line 326) 45244 * __usneguhq2: Fixed-point fractional library routines. 45245 (line 321) 45246 * __usneguqq2: Fixed-point fractional library routines. 45247 (line 319) 45248 * __usnegusa2: Fixed-point fractional library routines. 45249 (line 328) 45250 * __usnegusq2: Fixed-point fractional library routines. 45251 (line 322) 45252 * __usneguta2: Fixed-point fractional library routines. 45253 (line 331) 45254 * __ussubuda3: Fixed-point fractional library routines. 45255 (line 146) 45256 * __ussubudq3: Fixed-point fractional library routines. 45257 (line 140) 45258 * __ussubuha3: Fixed-point fractional library routines. 45259 (line 142) 45260 * __ussubuhq3: Fixed-point fractional library routines. 45261 (line 136) 45262 * __ussubuqq3: Fixed-point fractional library routines. 45263 (line 134) 45264 * __ussubusa3: Fixed-point fractional library routines. 45265 (line 144) 45266 * __ussubusq3: Fixed-point fractional library routines. 45267 (line 138) 45268 * __ussubuta3: Fixed-point fractional library routines. 45269 (line 148) 45270 * abort: Portability. (line 20) 45271 * abs: Arithmetic. (line 201) 45272 * 'abs' and attributes: Expressions. (line 83) 45273 * absence_set: Processor pipeline description. 45274 (line 223) 45275 * 'absM2' instruction pattern: Standard Names. (line 529) 45276 * absolute value: Arithmetic. (line 201) 45277 * ABS_EXPR: Unary and Binary Expressions. 45278 (line 6) 45279 * access to operands: Accessors. (line 6) 45280 * access to special operands: Special Accessors. (line 6) 45281 * accessors: Accessors. (line 6) 45282 * ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 48) 45283 * 'ACCUMULATE_OUTGOING_ARGS' and stack frames: Function Entry. 45284 (line 133) 45285 * ACCUM_TYPE_SIZE: Type Layout. (line 87) 45286 * ADA_LONG_TYPE_SIZE: Type Layout. (line 25) 45287 * Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 45288 (line 6) 45289 * ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 14) 45290 * 'addM3' instruction pattern: Standard Names. (line 260) 45291 * 'addMODEcc' instruction pattern: Standard Names. (line 1044) 45292 * address constraints: Simple Constraints. (line 162) 45293 * addressing modes: Addressing Modes. (line 6) 45294 * address_operand: Machine-Independent Predicates. 45295 (line 62) 45296 * address_operand <1>: Simple Constraints. (line 166) 45297 * addr_diff_vec: Side Effects. (line 306) 45298 * 'addr_diff_vec', length of: Insn Lengths. (line 26) 45299 * ADDR_EXPR: Storage References. (line 6) 45300 * addr_vec: Side Effects. (line 301) 45301 * 'addr_vec', length of: Insn Lengths. (line 26) 45302 * ADJUST_FIELD_ALIGN: Storage Layout. (line 195) 45303 * ADJUST_INSN_LENGTH: Insn Lengths. (line 35) 45304 * ADJUST_REG_ALLOC_ORDER: Allocation Order. (line 22) 45305 * aggregates as return values: Aggregate Return. (line 6) 45306 * alias: Alias analysis. (line 6) 45307 * 'allocate_stack' instruction pattern: Standard Names. (line 1364) 45308 * ALL_REGS: Register Classes. (line 17) 45309 * alternate entry points: Insns. (line 146) 45310 * anchored addresses: Anchored Addresses. (line 6) 45311 * and: Arithmetic. (line 159) 45312 * 'and' and attributes: Expressions. (line 50) 45313 * 'and', canonicalization of: Insn Canonicalizations. 45314 (line 51) 45315 * 'andM3' instruction pattern: Standard Names. (line 266) 45316 * annotations: Annotations. (line 6) 45317 * APPLY_RESULT_SIZE: Scalar Return. (line 112) 45318 * ARGS_GROW_DOWNWARD: Frame Layout. (line 34) 45319 * argument passing: Interface. (line 36) 45320 * arguments in registers: Register Arguments. (line 6) 45321 * arguments on stack: Stack Arguments. (line 6) 45322 * ARG_POINTER_CFA_OFFSET: Frame Layout. (line 192) 45323 * ARG_POINTER_REGNUM: Frame Registers. (line 40) 45324 * 'ARG_POINTER_REGNUM' and virtual registers: Regs and Memory. 45325 (line 65) 45326 * arg_pointer_rtx: Frame Registers. (line 104) 45327 * arithmetic library: Soft float library routines. 45328 (line 6) 45329 * arithmetic shift: Arithmetic. (line 174) 45330 * arithmetic shift with signed saturation: Arithmetic. (line 174) 45331 * arithmetic shift with unsigned saturation: Arithmetic. (line 174) 45332 * arithmetic, in RTL: Arithmetic. (line 6) 45333 * ARITHMETIC_TYPE_P: Types for C++. (line 59) 45334 * array: Types. (line 6) 45335 * ARRAY_RANGE_REF: Storage References. (line 6) 45336 * ARRAY_REF: Storage References. (line 6) 45337 * ARRAY_TYPE: Types. (line 6) 45338 * ashift: Arithmetic. (line 174) 45339 * 'ashift' and attributes: Expressions. (line 83) 45340 * ashiftrt: Arithmetic. (line 191) 45341 * 'ashiftrt' and attributes: Expressions. (line 83) 45342 * 'ashlM3' instruction pattern: Standard Names. (line 504) 45343 * 'ashrM3' instruction pattern: Standard Names. (line 514) 45344 * ASM_APP_OFF: File Framework. (line 76) 45345 * ASM_APP_ON: File Framework. (line 69) 45346 * ASM_COMMENT_START: File Framework. (line 64) 45347 * ASM_DECLARE_FUNCTION_NAME: Label Output. (line 108) 45348 * ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 123) 45349 * ASM_DECLARE_OBJECT_NAME: Label Output. (line 136) 45350 * ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 164) 45351 * ASM_FINAL_SPEC: Driver. (line 81) 45352 * ASM_FINISH_DECLARE_OBJECT: Label Output. (line 172) 45353 * ASM_FORMAT_PRIVATE_NAME: Label Output. (line 391) 45354 * asm_fprintf: Instruction Output. (line 150) 45355 * ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 160) 45356 * ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 375) 45357 * asm_input: Side Effects. (line 288) 45358 * 'asm_input' and '/v': Flags. (line 76) 45359 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 80) 45360 * asm_noperands: Insns. (line 311) 45361 * ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 78) 45362 * 'asm_operands' and '/v': Flags. (line 76) 45363 * 'asm_operands', RTL sharing: Sharing. (line 45) 45364 * 'asm_operands', usage: Assembler. (line 6) 45365 * ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 8) 45366 * ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 25) 45367 * ASM_OUTPUT_ALIGN: Alignment Output. (line 85) 45368 * ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 45) 45369 * ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 29) 45370 * ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 36) 45371 * ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 89) 45372 * ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 82) 45373 * ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 90) 45374 * ASM_OUTPUT_ASCII: Data Output. (line 50) 45375 * ASM_OUTPUT_CASE_END: Dispatch Tables. (line 50) 45376 * ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 37) 45377 * ASM_OUTPUT_COMMON: Uninitialized Data. (line 9) 45378 * ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 363) 45379 * ASM_OUTPUT_DEF: Label Output. (line 412) 45380 * ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 419) 45381 * ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 73) 45382 * ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 82) 45383 * ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 88) 45384 * ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 93) 45385 * ASM_OUTPUT_DWARF_VMS_DELTA: SDB and DWARF. (line 77) 45386 * ASM_OUTPUT_EXTERNAL: Label Output. (line 292) 45387 * ASM_OUTPUT_FDESC: Data Output. (line 59) 45388 * ASM_OUTPUT_FUNCTION_LABEL: Label Output. (line 16) 45389 * ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 27) 45390 * ASM_OUTPUT_LABEL: Label Output. (line 8) 45391 * ASM_OUTPUT_LABELREF: Label Output. (line 314) 45392 * ASM_OUTPUT_LABEL_REF: Label Output. (line 336) 45393 * ASM_OUTPUT_LOCAL: Uninitialized Data. (line 69) 45394 * ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 94) 45395 * ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 51) 45396 * ASM_OUTPUT_OPCODE: Instruction Output. (line 35) 45397 * ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 108) 45398 * ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 72) 45399 * ASM_OUTPUT_REG_POP: Instruction Output. (line 204) 45400 * ASM_OUTPUT_REG_PUSH: Instruction Output. (line 199) 45401 * ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 45) 45402 * ASM_OUTPUT_SKIP: Alignment Output. (line 72) 45403 * ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 83) 45404 * ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 83) 45405 * ASM_OUTPUT_SYMBOL_REF: Label Output. (line 329) 45406 * ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 98) 45407 * ASM_OUTPUT_WEAKREF: Label Output. (line 224) 45408 * ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 438) 45409 * ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 66) 45410 * ASM_SPEC: Driver. (line 73) 45411 * ASM_STABD_OP: DBX Options. (line 34) 45412 * ASM_STABN_OP: DBX Options. (line 41) 45413 * ASM_STABS_OP: DBX Options. (line 28) 45414 * ASM_WEAKEN_DECL: Label Output. (line 216) 45415 * ASM_WEAKEN_LABEL: Label Output. (line 203) 45416 * assembler format: File Framework. (line 6) 45417 * assembler instructions in RTL: Assembler. (line 6) 45418 * ASSEMBLER_DIALECT: Instruction Output. (line 172) 45419 * assemble_name: Label Output. (line 8) 45420 * assemble_name_raw: Label Output. (line 27) 45421 * assigning attribute values to insns: Tagging Insns. (line 6) 45422 * ASSUME_EXTENDED_UNWIND_CONTEXT: Frame Registers. (line 165) 45423 * asterisk in template: Output Statement. (line 29) 45424 * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) 45425 * 'atan2M3' instruction pattern: Standard Names. (line 612) 45426 * atomic: GTY Options. (line 266) 45427 * 'atomic_addMODE' instruction pattern: Standard Names. (line 1775) 45428 * 'atomic_add_fetchMODE' instruction pattern: Standard Names. 45429 (line 1806) 45430 * 'atomic_andMODE' instruction pattern: Standard Names. (line 1775) 45431 * 'atomic_and_fetchMODE' instruction pattern: Standard Names. 45432 (line 1806) 45433 * 'atomic_compare_and_swapMODE' instruction pattern: Standard Names. 45434 (line 1711) 45435 * 'atomic_exchangeMODE' instruction pattern: Standard Names. (line 1763) 45436 * 'atomic_fetch_addMODE' instruction pattern: Standard Names. 45437 (line 1790) 45438 * 'atomic_fetch_andMODE' instruction pattern: Standard Names. 45439 (line 1790) 45440 * 'atomic_fetch_nandMODE' instruction pattern: Standard Names. 45441 (line 1790) 45442 * 'atomic_fetch_orMODE' instruction pattern: Standard Names. (line 1790) 45443 * 'atomic_fetch_subMODE' instruction pattern: Standard Names. 45444 (line 1790) 45445 * 'atomic_fetch_xorMODE' instruction pattern: Standard Names. 45446 (line 1790) 45447 * 'atomic_loadMODE' instruction pattern: Standard Names. (line 1742) 45448 * 'atomic_nandMODE' instruction pattern: Standard Names. (line 1775) 45449 * 'atomic_nand_fetchMODE' instruction pattern: Standard Names. 45450 (line 1806) 45451 * 'atomic_orMODE' instruction pattern: Standard Names. (line 1775) 45452 * 'atomic_or_fetchMODE' instruction pattern: Standard Names. (line 1806) 45453 * 'atomic_storeMODE' instruction pattern: Standard Names. (line 1752) 45454 * 'atomic_subMODE' instruction pattern: Standard Names. (line 1775) 45455 * 'atomic_sub_fetchMODE' instruction pattern: Standard Names. 45456 (line 1806) 45457 * 'atomic_test_and_set' instruction pattern: Standard Names. (line 1824) 45458 * 'atomic_xorMODE' instruction pattern: Standard Names. (line 1775) 45459 * 'atomic_xor_fetchMODE' instruction pattern: Standard Names. 45460 (line 1806) 45461 * attr: Expressions. (line 163) 45462 * attr <1>: Tagging Insns. (line 54) 45463 * attribute expressions: Expressions. (line 6) 45464 * attribute specifications: Attr Example. (line 6) 45465 * attribute specifications example: Attr Example. (line 6) 45466 * attributes: Attributes. (line 6) 45467 * attributes, defining: Defining Attributes. 45468 (line 6) 45469 * attributes, target-specific: Target Attributes. (line 6) 45470 * ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 177) 45471 * attr_flag: Expressions. (line 138) 45472 * autoincrement addressing, availability: Portability. (line 20) 45473 * autoincrement/decrement addressing: Simple Constraints. (line 30) 45474 * automata_option: Processor pipeline description. 45475 (line 304) 45476 * automaton based pipeline description: Processor pipeline description. 45477 (line 6) 45478 * automaton based pipeline description <1>: Processor pipeline description. 45479 (line 49) 45480 * automaton based scheduler: Processor pipeline description. 45481 (line 6) 45482 * AVOID_CCMODE_COPIES: Values in Registers. 45483 (line 150) 45484 * backslash: Output Template. (line 46) 45485 * barrier: Insns. (line 166) 45486 * 'barrier' and '/f': Flags. (line 107) 45487 * 'barrier' and '/v': Flags. (line 44) 45488 * BASE_REG_CLASS: Register Classes. (line 111) 45489 * basic block: Basic Blocks. (line 6) 45490 * Basic Statements: Basic Statements. (line 6) 45491 * basic-block.h: Control Flow. (line 6) 45492 * basic_block: Basic Blocks. (line 6) 45493 * BASIC_BLOCK: Basic Blocks. (line 14) 45494 * BB_HEAD, BB_END: Maintaining the CFG. 45495 (line 76) 45496 * bb_seq: GIMPLE sequences. (line 72) 45497 * BIGGEST_ALIGNMENT: Storage Layout. (line 167) 45498 * BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 188) 45499 * BImode: Machine Modes. (line 22) 45500 * BIND_EXPR: Unary and Binary Expressions. 45501 (line 6) 45502 * BINFO_TYPE: Classes. (line 6) 45503 * bit-fields: Bit-Fields. (line 6) 45504 * BITFIELD_NBYTES_LIMITED: Storage Layout. (line 390) 45505 * BITS_BIG_ENDIAN: Storage Layout. (line 11) 45506 * 'BITS_BIG_ENDIAN', effect on 'sign_extract': Bit-Fields. (line 8) 45507 * BITS_PER_UNIT: Storage Layout. (line 50) 45508 * BITS_PER_WORD: Storage Layout. (line 55) 45509 * bitwise complement: Arithmetic. (line 155) 45510 * bitwise exclusive-or: Arithmetic. (line 169) 45511 * bitwise inclusive-or: Arithmetic. (line 164) 45512 * bitwise logical-and: Arithmetic. (line 159) 45513 * BIT_AND_EXPR: Unary and Binary Expressions. 45514 (line 6) 45515 * BIT_IOR_EXPR: Unary and Binary Expressions. 45516 (line 6) 45517 * BIT_NOT_EXPR: Unary and Binary Expressions. 45518 (line 6) 45519 * BIT_XOR_EXPR: Unary and Binary Expressions. 45520 (line 6) 45521 * BLKmode: Machine Modes. (line 182) 45522 * 'BLKmode', and function return values: Calls. (line 23) 45523 * 'blockage' instruction pattern: Standard Names. (line 1566) 45524 * Blocks: Blocks. (line 6) 45525 * BLOCK_FOR_INSN, gimple_bb: Maintaining the CFG. 45526 (line 28) 45527 * BLOCK_REG_PADDING: Register Arguments. (line 228) 45528 * bool: Misc. (line 858) 45529 * BOOLEAN_TYPE: Types. (line 6) 45530 * BOOL_TYPE_SIZE: Type Layout. (line 43) 45531 * branch prediction: Profile information. 45532 (line 24) 45533 * BRANCH_COST: Costs. (line 104) 45534 * break_out_memory_refs: Addressing Modes. (line 134) 45535 * BREAK_STMT: Statements for C++. (line 6) 45536 * BSS_SECTION_ASM_OP: Sections. (line 67) 45537 * bswap: Arithmetic. (line 247) 45538 * 'bswapM2' instruction pattern: Standard Names. (line 522) 45539 * 'btruncM2' instruction pattern: Standard Names. (line 630) 45540 * build0: Macros and Functions. 45541 (line 16) 45542 * build1: Macros and Functions. 45543 (line 17) 45544 * build2: Macros and Functions. 45545 (line 18) 45546 * build3: Macros and Functions. 45547 (line 19) 45548 * build4: Macros and Functions. 45549 (line 20) 45550 * build5: Macros and Functions. 45551 (line 21) 45552 * build6: Macros and Functions. 45553 (line 22) 45554 * 'builtin_longjmp' instruction pattern: Standard Names. (line 1462) 45555 * 'builtin_setjmp_receiver' instruction pattern: Standard Names. 45556 (line 1452) 45557 * 'builtin_setjmp_setup' instruction pattern: Standard Names. 45558 (line 1441) 45559 * BYTES_BIG_ENDIAN: Storage Layout. (line 23) 45560 * 'BYTES_BIG_ENDIAN', effect on 'subreg': Regs and Memory. (line 219) 45561 * byte_mode: Machine Modes. (line 335) 45562 * C statements for assembler output: Output Statement. (line 6) 45563 * C99 math functions, implicit usage: Library Calls. (line 70) 45564 * call: Flags. (line 221) 45565 * call <1>: Side Effects. (line 92) 45566 * 'call' instruction pattern: Standard Names. (line 1101) 45567 * 'call' usage: Calls. (line 10) 45568 * 'call', in 'call_insn': Flags. (line 33) 45569 * 'call', in 'mem': Flags. (line 81) 45570 * call-clobbered register: Register Basics. (line 35) 45571 * call-clobbered register <1>: Register Basics. (line 46) 45572 * call-clobbered register <2>: Register Basics. (line 53) 45573 * call-saved register: Register Basics. (line 35) 45574 * call-saved register <1>: Register Basics. (line 46) 45575 * call-saved register <2>: Register Basics. (line 53) 45576 * call-used register: Register Basics. (line 35) 45577 * call-used register <1>: Register Basics. (line 46) 45578 * call-used register <2>: Register Basics. (line 53) 45579 * CALLER_SAVE_PROFITABLE: Caller Saves. (line 10) 45580 * calling conventions: Stack and Calling. (line 6) 45581 * calling functions in RTL: Calls. (line 6) 45582 * CALL_EXPR: Unary and Binary Expressions. 45583 (line 6) 45584 * call_insn: Insns. (line 95) 45585 * 'call_insn' and '/c': Flags. (line 33) 45586 * 'call_insn' and '/f': Flags. (line 107) 45587 * 'call_insn' and '/i': Flags. (line 24) 45588 * 'call_insn' and '/j': Flags. (line 161) 45589 * 'call_insn' and '/s': Flags. (line 49) 45590 * 'call_insn' and '/s' <1>: Flags. (line 148) 45591 * 'call_insn' and '/u': Flags. (line 19) 45592 * 'call_insn' and '/u' <1>: Flags. (line 39) 45593 * 'call_insn' and '/u' or '/i': Flags. (line 29) 45594 * 'call_insn' and '/v': Flags. (line 44) 45595 * CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 45596 * 'call_pop' instruction pattern: Standard Names. (line 1129) 45597 * CALL_POPS_ARGS: Stack Arguments. (line 132) 45598 * CALL_REALLY_USED_REGISTERS: Register Basics. (line 45) 45599 * CALL_USED_REGISTERS: Register Basics. (line 34) 45600 * call_used_regs: Register Basics. (line 59) 45601 * 'call_value' instruction pattern: Standard Names. (line 1121) 45602 * 'call_value_pop' instruction pattern: Standard Names. (line 1129) 45603 * canadian: Configure Terms. (line 6) 45604 * CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 533) 45605 * 'CANNOT_CHANGE_MODE_CLASS' and subreg semantics: Regs and Memory. 45606 (line 276) 45607 * canonicalization of instructions: Insn Canonicalizations. 45608 (line 6) 45609 * 'canonicalize_funcptr_for_compare' instruction pattern: Standard Names. 45610 (line 1296) 45611 * can_create_pseudo_p: Standard Names. (line 75) 45612 * can_fallthru: Basic Blocks. (line 67) 45613 * 'casesi' instruction pattern: Standard Names. (line 1222) 45614 * CASE_VECTOR_MODE: Misc. (line 26) 45615 * CASE_VECTOR_PC_RELATIVE: Misc. (line 39) 45616 * CASE_VECTOR_SHORTEN_MODE: Misc. (line 30) 45617 * 'cbranchMODE4' instruction pattern: Standard Names. (line 1090) 45618 * cc0: Regs and Memory. (line 303) 45619 * cc0 <1>: CC0 Condition Codes. 45620 (line 6) 45621 * 'cc0', RTL sharing: Sharing. (line 27) 45622 * cc0_rtx: Regs and Memory. (line 329) 45623 * CC1PLUS_SPEC: Driver. (line 63) 45624 * CC1_SPEC: Driver. (line 55) 45625 * CCmode: Machine Modes. (line 175) 45626 * CCmode <1>: MODE_CC Condition Codes. 45627 (line 6) 45628 * cc_status: CC0 Condition Codes. 45629 (line 6) 45630 * CC_STATUS_MDEP: CC0 Condition Codes. 45631 (line 16) 45632 * CC_STATUS_MDEP_INIT: CC0 Condition Codes. 45633 (line 22) 45634 * CDImode: Machine Modes. (line 201) 45635 * 'ceilM2' instruction pattern: Standard Names. (line 646) 45636 * CEIL_DIV_EXPR: Unary and Binary Expressions. 45637 (line 6) 45638 * CEIL_MOD_EXPR: Unary and Binary Expressions. 45639 (line 6) 45640 * CFA_FRAME_BASE_OFFSET: Frame Layout. (line 224) 45641 * CFG verification: Maintaining the CFG. 45642 (line 117) 45643 * CFG, Control Flow Graph: Control Flow. (line 6) 45644 * cfghooks.h: Maintaining the CFG. 45645 (line 6) 45646 * cgraph_finalize_function: Parsing pass. (line 51) 45647 * chain_circular: GTY Options. (line 205) 45648 * chain_next: GTY Options. (line 205) 45649 * chain_prev: GTY Options. (line 205) 45650 * change_address: Standard Names. (line 47) 45651 * CHAR_TYPE_SIZE: Type Layout. (line 38) 45652 * 'check_stack' instruction pattern: Standard Names. (line 1382) 45653 * CHImode: Machine Modes. (line 201) 45654 * class definitions, register: Register Classes. (line 6) 45655 * class preference constraints: Class Preferences. (line 6) 45656 * class, scope: Classes. (line 6) 45657 * classes of RTX codes: RTL Classes. (line 6) 45658 * CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 45659 * CLASSTYPE_HAS_MUTABLE: Classes. (line 85) 45660 * CLASSTYPE_NON_POD_P: Classes. (line 90) 45661 * CLASS_MAX_NREGS: Register Classes. (line 521) 45662 * CLASS_TYPE_P: Types for C++. (line 63) 45663 * Cleanups: Cleanups. (line 6) 45664 * CLEANUP_DECL: Statements for C++. (line 6) 45665 * CLEANUP_EXPR: Statements for C++. (line 6) 45666 * CLEANUP_POINT_EXPR: Unary and Binary Expressions. 45667 (line 6) 45668 * CLEANUP_STMT: Statements for C++. (line 6) 45669 * CLEAR_BY_PIECES_P: Costs. (line 187) 45670 * 'clear_cache' instruction pattern: Standard Names. (line 1887) 45671 * CLEAR_INSN_CACHE: Trampolines. (line 98) 45672 * CLEAR_RATIO: Costs. (line 175) 45673 * clobber: Side Effects. (line 106) 45674 * clrsb: Arithmetic. (line 216) 45675 * clz: Arithmetic. (line 223) 45676 * 'clzM2' instruction pattern: Standard Names. (line 711) 45677 * CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 304) 45678 * 'cmpmemM' instruction pattern: Standard Names. (line 844) 45679 * 'cmpstrM' instruction pattern: Standard Names. (line 823) 45680 * 'cmpstrnM' instruction pattern: Standard Names. (line 810) 45681 * code generation RTL sequences: Expander Definitions. 45682 (line 6) 45683 * code iterators in '.md' files: Code Iterators. (line 6) 45684 * codes, RTL expression: RTL Objects. (line 47) 45685 * code_label: Insns. (line 125) 45686 * CODE_LABEL: Basic Blocks. (line 50) 45687 * 'code_label' and '/i': Flags. (line 59) 45688 * 'code_label' and '/v': Flags. (line 44) 45689 * CODE_LABEL_NUMBER: Insns. (line 125) 45690 * COImode: Machine Modes. (line 201) 45691 * COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 45692 * COLLECT_EXPORT_LIST: Misc. (line 758) 45693 * COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 45694 (line 43) 45695 * COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 45696 (line 32) 45697 * commit_edge_insertions: Maintaining the CFG. 45698 (line 105) 45699 * compare: Arithmetic. (line 46) 45700 * 'compare', canonicalization of: Insn Canonicalizations. 45701 (line 36) 45702 * comparison_operator: Machine-Independent Predicates. 45703 (line 110) 45704 * compiler passes and files: Passes. (line 6) 45705 * complement, bitwise: Arithmetic. (line 155) 45706 * COMPLEX_CST: Constant expressions. 45707 (line 6) 45708 * COMPLEX_EXPR: Unary and Binary Expressions. 45709 (line 6) 45710 * COMPLEX_TYPE: Types. (line 6) 45711 * COMPONENT_REF: Storage References. (line 6) 45712 * Compound Expressions: Compound Expressions. 45713 (line 6) 45714 * Compound Lvalues: Compound Lvalues. (line 6) 45715 * COMPOUND_EXPR: Unary and Binary Expressions. 45716 (line 6) 45717 * COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 45718 (line 6) 45719 * COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 45720 (line 373) 45721 * COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 45722 (line 373) 45723 * computed jump: Edges. (line 127) 45724 * computing the length of an insn: Insn Lengths. (line 6) 45725 * concat: Regs and Memory. (line 381) 45726 * concatn: Regs and Memory. (line 387) 45727 * cond: Comparisons. (line 90) 45728 * 'cond' and attributes: Expressions. (line 37) 45729 * condition code register: Regs and Memory. (line 303) 45730 * condition code status: Condition Code. (line 6) 45731 * condition codes: Comparisons. (line 20) 45732 * conditional execution: Conditional Execution. 45733 (line 6) 45734 * conditional execution <1>: Cond Exec Macros. (line 6) 45735 * Conditional Expressions: Conditional Expressions. 45736 (line 6) 45737 * conditions, in patterns: Patterns. (line 43) 45738 * cond_exec: Side Effects. (line 253) 45739 * COND_EXPR: Unary and Binary Expressions. 45740 (line 6) 45741 * configuration file: Filesystem. (line 6) 45742 * configuration file <1>: Host Misc. (line 6) 45743 * configure terms: Configure Terms. (line 6) 45744 * CONJ_EXPR: Unary and Binary Expressions. 45745 (line 6) 45746 * const: Constants. (line 109) 45747 * const0_rtx: Constants. (line 21) 45748 * CONST0_RTX: Constants. (line 129) 45749 * const1_rtx: Constants. (line 21) 45750 * CONST1_RTX: Constants. (line 129) 45751 * const2_rtx: Constants. (line 21) 45752 * CONST2_RTX: Constants. (line 129) 45753 * constant attributes: Constant Attributes. 45754 (line 6) 45755 * constant definitions: Constant Definitions. 45756 (line 6) 45757 * constants in constraints: Simple Constraints. (line 68) 45758 * CONSTANT_ADDRESS_P: Addressing Modes. (line 28) 45759 * CONSTANT_ALIGNMENT: Storage Layout. (line 233) 45760 * CONSTANT_P: Addressing Modes. (line 35) 45761 * CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 45762 * CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 64) 45763 * constm1_rtx: Constants. (line 21) 45764 * constraint modifier characters: Modifiers. (line 6) 45765 * constraint, matching: Simple Constraints. (line 140) 45766 * constraints: Constraints. (line 6) 45767 * constraints, defining: Define Constraints. (line 6) 45768 * constraints, defining, obsolete method: Old Constraints. (line 6) 45769 * constraints, machine specific: Machine Constraints. 45770 (line 6) 45771 * constraints, testing: C Constraint Interface. 45772 (line 6) 45773 * CONSTRAINT_LEN: Old Constraints. (line 11) 45774 * constraint_num: C Constraint Interface. 45775 (line 37) 45776 * constraint_satisfied_p: C Constraint Interface. 45777 (line 52) 45778 * CONSTRUCTOR: Unary and Binary Expressions. 45779 (line 6) 45780 * constructors, automatic calls: Collect2. (line 15) 45781 * constructors, output of: Initialization. (line 6) 45782 * CONST_DECL: Declarations. (line 6) 45783 * const_double: Constants. (line 37) 45784 * 'const_double', RTL sharing: Sharing. (line 29) 45785 * CONST_DOUBLE_LOW: Constants. (line 49) 45786 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P: Old Constraints. (line 66) 45787 * CONST_DOUBLE_OK_FOR_LETTER_P: Old Constraints. (line 51) 45788 * const_double_operand: Machine-Independent Predicates. 45789 (line 20) 45790 * const_fixed: Constants. (line 62) 45791 * const_int: Constants. (line 8) 45792 * 'const_int' and attribute tests: Expressions. (line 47) 45793 * 'const_int' and attributes: Expressions. (line 10) 45794 * 'const_int', RTL sharing: Sharing. (line 23) 45795 * const_int_operand: Machine-Independent Predicates. 45796 (line 15) 45797 * CONST_OK_FOR_CONSTRAINT_P: Old Constraints. (line 46) 45798 * CONST_OK_FOR_LETTER_P: Old Constraints. (line 38) 45799 * const_string: Constants. (line 81) 45800 * 'const_string' and attributes: Expressions. (line 20) 45801 * const_true_rtx: Constants. (line 31) 45802 * const_vector: Constants. (line 69) 45803 * 'const_vector', RTL sharing: Sharing. (line 32) 45804 * container: Containers. (line 6) 45805 * CONTINUE_STMT: Statements for C++. (line 6) 45806 * contributors: Contributors. (line 6) 45807 * controlling register usage: Register Basics. (line 73) 45808 * controlling the compilation driver: Driver. (line 6) 45809 * conventions, run-time: Interface. (line 6) 45810 * conversions: Conversions. (line 6) 45811 * CONVERT_EXPR: Unary and Binary Expressions. 45812 (line 6) 45813 * 'copysignM3' instruction pattern: Standard Names. (line 692) 45814 * copy_rtx: Addressing Modes. (line 189) 45815 * copy_rtx_if_shared: Sharing. (line 64) 45816 * 'cosM2' instruction pattern: Standard Names. (line 558) 45817 * costs of instructions: Costs. (line 6) 45818 * CPLUSPLUS_CPP_SPEC: Driver. (line 50) 45819 * CPP_SPEC: Driver. (line 43) 45820 * CP_INTEGRAL_TYPE: Types for C++. (line 55) 45821 * cp_namespace_decls: Namespaces. (line 49) 45822 * CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 45823 * CP_TYPE_CONST_P: Types for C++. (line 24) 45824 * cp_type_quals: Types for C++. (line 6) 45825 * cp_type_quals <1>: Types for C++. (line 16) 45826 * CP_TYPE_RESTRICT_P: Types for C++. (line 30) 45827 * CP_TYPE_VOLATILE_P: Types for C++. (line 27) 45828 * CQImode: Machine Modes. (line 201) 45829 * cross compilation and floating point: Floating Point. (line 6) 45830 * crtl->args.pops_args: Function Entry. (line 104) 45831 * crtl->args.pretend_args_size: Function Entry. (line 110) 45832 * crtl->outgoing_args_size: Stack Arguments. (line 48) 45833 * CRTSTUFF_T_CFLAGS: Target Fragment. (line 15) 45834 * CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 19) 45835 * CRT_CALL_STATIC_FUNCTION: Sections. (line 120) 45836 * CSImode: Machine Modes. (line 201) 45837 * 'cstoreMODE4' instruction pattern: Standard Names. (line 1051) 45838 * CTImode: Machine Modes. (line 201) 45839 * 'ctrapMM4' instruction pattern: Standard Names. (line 1534) 45840 * ctz: Arithmetic. (line 231) 45841 * 'ctzM2' instruction pattern: Standard Names. (line 720) 45842 * CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 305) 45843 * CUMULATIVE_ARGS: Register Arguments. (line 126) 45844 * current_function_is_leaf: Leaf Functions. (line 50) 45845 * current_function_uses_only_leaf_regs: Leaf Functions. (line 50) 45846 * current_insn_predicate: Conditional Execution. 45847 (line 26) 45848 * C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 136) 45849 * c_register_pragma: Misc. (line 399) 45850 * c_register_pragma_with_expansion: Misc. (line 401) 45851 * DAmode: Machine Modes. (line 151) 45852 * data bypass: Processor pipeline description. 45853 (line 105) 45854 * data bypass <1>: Processor pipeline description. 45855 (line 196) 45856 * data dependence delays: Processor pipeline description. 45857 (line 6) 45858 * Data Dependency Analysis: Dependency analysis. 45859 (line 6) 45860 * data structures: Per-Function Data. (line 6) 45861 * DATA_ALIGNMENT: Storage Layout. (line 220) 45862 * DATA_SECTION_ASM_OP: Sections. (line 52) 45863 * DBR_OUTPUT_SEQEND: Instruction Output. (line 133) 45864 * dbr_sequence_length: Instruction Output. (line 133) 45865 * DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 100) 45866 * DBX_CONTIN_CHAR: DBX Options. (line 63) 45867 * DBX_CONTIN_LENGTH: DBX Options. (line 53) 45868 * DBX_DEBUGGING_INFO: DBX Options. (line 8) 45869 * DBX_FUNCTION_FIRST: DBX Options. (line 94) 45870 * DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 106) 45871 * DBX_NO_XREFS: DBX Options. (line 47) 45872 * DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 8) 45873 * DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 33) 45874 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 45875 (line 41) 45876 * DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 8) 45877 * DBX_REGISTER_NUMBER: All Debuggers. (line 8) 45878 * DBX_REGPARM_STABS_CODE: DBX Options. (line 84) 45879 * DBX_REGPARM_STABS_LETTER: DBX Options. (line 89) 45880 * DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 79) 45881 * DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 70) 45882 * DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 75) 45883 * DBX_USE_BINCL: DBX Options. (line 112) 45884 * DCmode: Machine Modes. (line 196) 45885 * DDmode: Machine Modes. (line 90) 45886 * De Morgan's law: Insn Canonicalizations. 45887 (line 51) 45888 * dead_or_set_p: define_peephole. (line 65) 45889 * DEBUGGER_ARG_OFFSET: All Debuggers. (line 36) 45890 * DEBUGGER_AUTO_OFFSET: All Debuggers. (line 27) 45891 * debug_expr: Debug Information. (line 22) 45892 * DEBUG_EXPR_DECL: Declarations. (line 6) 45893 * debug_insn: Insns. (line 243) 45894 * DEBUG_SYMS_TEXT: DBX Options. (line 24) 45895 * decimal float library: Decimal float library routines. 45896 (line 6) 45897 * declaration: Declarations. (line 6) 45898 * declarations, RTL: RTL Declarations. (line 6) 45899 * DECLARE_LIBRARY_RENAMES: Library Calls. (line 8) 45900 * DECL_ALIGN: Declarations. (line 6) 45901 * DECL_ANTICIPATED: Functions for C++. (line 42) 45902 * DECL_ARGUMENTS: Function Basics. (line 36) 45903 * DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 45904 * DECL_ARTIFICIAL: Working with declarations. 45905 (line 24) 45906 * DECL_ARTIFICIAL <1>: Function Basics. (line 6) 45907 * DECL_ARTIFICIAL <2>: Function Properties. 45908 (line 47) 45909 * DECL_ASSEMBLER_NAME: Function Basics. (line 6) 45910 * DECL_ASSEMBLER_NAME <1>: Function Basics. (line 19) 45911 * DECL_ATTRIBUTES: Attributes. (line 21) 45912 * DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 45913 * DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 45914 * DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 45915 * DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 45916 * DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 45917 * DECL_CONTEXT: Namespaces. (line 31) 45918 * DECL_CONV_FN_P: Functions for C++. (line 105) 45919 * DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 45920 * DECL_DESTRUCTOR_P: Functions for C++. (line 95) 45921 * DECL_EXTERNAL: Declarations. (line 6) 45922 * DECL_EXTERNAL <1>: Function Properties. 45923 (line 25) 45924 * DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 45925 * DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 45926 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 45927 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 45928 (line 61) 45929 * DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 45930 * DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 45931 (line 55) 45932 * DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 45933 * DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 45934 * DECL_INITIAL: Declarations. (line 6) 45935 * DECL_INITIAL <1>: Function Basics. (line 51) 45936 * DECL_LINKONCE_P: Functions for C++. (line 50) 45937 * DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 45938 * DECL_MAIN_P: Functions for C++. (line 34) 45939 * DECL_NAME: Working with declarations. 45940 (line 7) 45941 * DECL_NAME <1>: Function Basics. (line 6) 45942 * DECL_NAME <2>: Function Basics. (line 9) 45943 * DECL_NAME <3>: Namespaces. (line 20) 45944 * DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 45945 * DECL_NAMESPACE_STD_P: Namespaces. (line 45) 45946 * DECL_NONCONVERTING_P: Functions for C++. (line 80) 45947 * DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 45948 * DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 45949 * DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 45950 * DECL_PURE_P: Function Properties. 45951 (line 40) 45952 * DECL_RESULT: Function Basics. (line 41) 45953 * DECL_SAVED_TREE: Function Basics. (line 44) 45954 * DECL_SIZE: Declarations. (line 6) 45955 * DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 45956 * DECL_STMT: Statements for C++. (line 6) 45957 * DECL_STMT_DECL: Statements for C++. (line 6) 45958 * DECL_THUNK_P: Functions for C++. (line 116) 45959 * DECL_VIRTUAL_P: Function Properties. 45960 (line 44) 45961 * DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 45962 * 'decrement_and_branch_until_zero' instruction pattern: Standard Names. 45963 (line 1259) 45964 * default: GTY Options. (line 82) 45965 * default_file_start: File Framework. (line 8) 45966 * DEFAULT_GDB_EXTENSIONS: DBX Options. (line 17) 45967 * DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 34) 45968 * DEFAULT_SIGNED_CHAR: Type Layout. (line 160) 45969 * define_address_constraint: Define Constraints. (line 99) 45970 * define_asm_attributes: Tagging Insns. (line 73) 45971 * define_attr: Defining Attributes. 45972 (line 6) 45973 * define_automaton: Processor pipeline description. 45974 (line 53) 45975 * define_bypass: Processor pipeline description. 45976 (line 196) 45977 * define_code_attr: Code Iterators. (line 6) 45978 * define_code_iterator: Code Iterators. (line 6) 45979 * define_cond_exec: Conditional Execution. 45980 (line 13) 45981 * define_constants: Constant Definitions. 45982 (line 6) 45983 * define_constraint: Define Constraints. (line 45) 45984 * define_cpu_unit: Processor pipeline description. 45985 (line 68) 45986 * define_c_enum: Constant Definitions. 45987 (line 49) 45988 * define_delay: Delay Slots. (line 25) 45989 * define_enum: Constant Definitions. 45990 (line 118) 45991 * define_enum_attr: Defining Attributes. 45992 (line 76) 45993 * define_enum_attr <1>: Constant Definitions. 45994 (line 136) 45995 * define_expand: Expander Definitions. 45996 (line 11) 45997 * define_insn: Patterns. (line 6) 45998 * 'define_insn' example: Example. (line 6) 45999 * define_insn_and_split: Insn Splitting. (line 170) 46000 * define_insn_reservation: Processor pipeline description. 46001 (line 105) 46002 * define_int_attr: Int Iterators. (line 6) 46003 * define_int_iterator: Int Iterators. (line 6) 46004 * define_memory_constraint: Define Constraints. (line 80) 46005 * define_mode_attr: Substitutions. (line 6) 46006 * define_mode_iterator: Defining Mode Iterators. 46007 (line 6) 46008 * define_peephole: define_peephole. (line 6) 46009 * define_peephole2: define_peephole2. (line 6) 46010 * define_predicate: Defining Predicates. 46011 (line 6) 46012 * define_query_cpu_unit: Processor pipeline description. 46013 (line 90) 46014 * define_register_constraint: Define Constraints. (line 26) 46015 * define_reservation: Processor pipeline description. 46016 (line 185) 46017 * define_special_predicate: Defining Predicates. 46018 (line 6) 46019 * define_split: Insn Splitting. (line 32) 46020 * define_subst: Define Subst. (line 6) 46021 * define_subst <1>: Define Subst Example. 46022 (line 6) 46023 * define_subst <2>: Define Subst Pattern Matching. 46024 (line 6) 46025 * define_subst <3>: Define Subst Output Template. 46026 (line 6) 46027 * define_subst <4>: Define Subst. (line 14) 46028 * define_subst <5>: Subst Iterators. (line 6) 46029 * define_subst_attr: Subst Iterators. (line 6) 46030 * define_subst_attr <1>: Subst Iterators. (line 26) 46031 * defining attributes and their values: Defining Attributes. 46032 (line 6) 46033 * defining constraints: Define Constraints. (line 6) 46034 * defining constraints, obsolete method: Old Constraints. (line 6) 46035 * defining jump instruction patterns: Jump Patterns. (line 6) 46036 * defining looping instruction patterns: Looping Patterns. (line 6) 46037 * defining peephole optimizers: Peephole Definitions. 46038 (line 6) 46039 * defining predicates: Defining Predicates. 46040 (line 6) 46041 * defining RTL sequences for code generation: Expander Definitions. 46042 (line 6) 46043 * delay slots, defining: Delay Slots. (line 6) 46044 * deletable: GTY Options. (line 154) 46045 * DELETE_IF_ORDINARY: Filesystem. (line 79) 46046 * Dependent Patterns: Dependent Patterns. (line 6) 46047 * desc: GTY Options. (line 82) 46048 * destructors, output of: Initialization. (line 6) 46049 * deterministic finite state automaton: Processor pipeline description. 46050 (line 6) 46051 * deterministic finite state automaton <1>: Processor pipeline description. 46052 (line 304) 46053 * DFmode: Machine Modes. (line 73) 46054 * DF_SIZE: Type Layout. (line 136) 46055 * digits in constraint: Simple Constraints. (line 128) 46056 * DImode: Machine Modes. (line 45) 46057 * directory options .md: Including Patterns. (line 47) 46058 * DIR_SEPARATOR: Filesystem. (line 18) 46059 * DIR_SEPARATOR_2: Filesystem. (line 19) 46060 * disabling certain registers: Register Basics. (line 73) 46061 * dispatch table: Dispatch Tables. (line 8) 46062 * div: Arithmetic. (line 117) 46063 * 'div' and attributes: Expressions. (line 83) 46064 * division: Arithmetic. (line 117) 46065 * division <1>: Arithmetic. (line 131) 46066 * division <2>: Arithmetic. (line 137) 46067 * 'divM3' instruction pattern: Standard Names. (line 266) 46068 * 'divmodM4' instruction pattern: Standard Names. (line 484) 46069 * DOLLARS_IN_IDENTIFIERS: Misc. (line 444) 46070 * 'doloop_begin' instruction pattern: Standard Names. (line 1289) 46071 * 'doloop_end' instruction pattern: Standard Names. (line 1269) 46072 * DONE: Expander Definitions. 46073 (line 77) 46074 * DONT_USE_BUILTIN_SETJMP: Exception Region Output. 46075 (line 77) 46076 * DOUBLE_TYPE_SIZE: Type Layout. (line 52) 46077 * DO_BODY: Statements for C++. (line 6) 46078 * DO_COND: Statements for C++. (line 6) 46079 * DO_STMT: Statements for C++. (line 6) 46080 * DQmode: Machine Modes. (line 115) 46081 * driver: Driver. (line 6) 46082 * DRIVER_SELF_SPECS: Driver. (line 8) 46083 * DUMPFILE_FORMAT: Filesystem. (line 67) 46084 * DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 49) 46085 * DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 12) 46086 * DWARF2_FRAME_INFO: SDB and DWARF. (line 29) 46087 * DWARF2_FRAME_REG_OUT: Frame Registers. (line 151) 46088 * DWARF2_UNWIND_INFO: Exception Region Output. 46089 (line 38) 46090 * DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 150) 46091 * DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 46092 (line 89) 46093 * DWARF_FRAME_REGISTERS: Frame Registers. (line 109) 46094 * DWARF_FRAME_REGNUM: Frame Registers. (line 143) 46095 * DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 134) 46096 * DWARF_ZERO_REG: Frame Layout. (line 161) 46097 * DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 90) 46098 * 'E' in constraint: Simple Constraints. (line 87) 46099 * earlyclobber operand: Modifiers. (line 25) 46100 * edge: Edges. (line 6) 46101 * edge in the flow graph: Edges. (line 6) 46102 * edge iterators: Edges. (line 15) 46103 * edge splitting: Maintaining the CFG. 46104 (line 105) 46105 * EDGE_ABNORMAL: Edges. (line 127) 46106 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 46107 * EDGE_ABNORMAL, EDGE_EH: Edges. (line 95) 46108 * EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 121) 46109 * EDGE_FALLTHRU, force_nonfallthru: Edges. (line 85) 46110 * 'EDOM', implicit usage: Library Calls. (line 52) 46111 * EH_FRAME_IN_DATA_SECTION: Exception Region Output. 46112 (line 19) 46113 * EH_FRAME_SECTION_NAME: Exception Region Output. 46114 (line 9) 46115 * 'eh_return' instruction pattern: Standard Names. (line 1468) 46116 * EH_RETURN_DATA_REGNO: Exception Handling. (line 6) 46117 * EH_RETURN_HANDLER_RTX: Exception Handling. (line 38) 46118 * EH_RETURN_STACKADJ_RTX: Exception Handling. (line 21) 46119 * EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 46120 (line 28) 46121 * EH_USES: Function Entry. (line 155) 46122 * ei_edge: Edges. (line 43) 46123 * ei_end_p: Edges. (line 27) 46124 * ei_last: Edges. (line 23) 46125 * ei_next: Edges. (line 35) 46126 * ei_one_before_end_p: Edges. (line 31) 46127 * ei_prev: Edges. (line 39) 46128 * ei_safe_safe: Edges. (line 47) 46129 * ei_start: Edges. (line 19) 46130 * ELIMINABLE_REGS: Elimination. (line 46) 46131 * ELSE_CLAUSE: Statements for C++. (line 6) 46132 * Embedded C: Fixed-point fractional library routines. 46133 (line 6) 46134 * EMIT_MODE_SET: Mode Switching. (line 74) 46135 * Empty Statements: Empty Statements. (line 6) 46136 * EMPTY_CLASS_EXPR: Statements for C++. (line 6) 46137 * EMPTY_FIELD_BOUNDARY: Storage Layout. (line 303) 46138 * Emulated TLS: Emulated TLS. (line 6) 46139 * enabled: Disable Insn Alternatives. 46140 (line 6) 46141 * ENDFILE_SPEC: Driver. (line 155) 46142 * endianness: Portability. (line 20) 46143 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 10) 46144 * enum machine_mode: Machine Modes. (line 6) 46145 * enum reg_class: Register Classes. (line 70) 46146 * ENUMERAL_TYPE: Types. (line 6) 46147 * enumerations: Constant Definitions. 46148 (line 49) 46149 * epilogue: Function Entry. (line 6) 46150 * 'epilogue' instruction pattern: Standard Names. (line 1506) 46151 * EPILOGUE_USES: Function Entry. (line 149) 46152 * eq: Comparisons. (line 52) 46153 * 'eq' and attributes: Expressions. (line 83) 46154 * equal: Comparisons. (line 52) 46155 * eq_attr: Expressions. (line 104) 46156 * EQ_EXPR: Unary and Binary Expressions. 46157 (line 6) 46158 * 'errno', implicit usage: Library Calls. (line 64) 46159 * EXACT_DIV_EXPR: Unary and Binary Expressions. 46160 (line 6) 46161 * examining SSA_NAMEs: SSA. (line 216) 46162 * exception handling: Edges. (line 95) 46163 * exception handling <1>: Exception Handling. (line 6) 46164 * 'exception_receiver' instruction pattern: Standard Names. (line 1433) 46165 * exclamation point: Multi-Alternative. (line 47) 46166 * exclusion_set: Processor pipeline description. 46167 (line 223) 46168 * exclusive-or, bitwise: Arithmetic. (line 169) 46169 * EXIT_EXPR: Unary and Binary Expressions. 46170 (line 6) 46171 * EXIT_IGNORE_STACK: Function Entry. (line 137) 46172 * expander definitions: Expander Definitions. 46173 (line 6) 46174 * 'expM2' instruction pattern: Standard Names. (line 587) 46175 * expression: Expression trees. (line 6) 46176 * expression codes: RTL Objects. (line 47) 46177 * EXPR_FILENAME: Working with declarations. 46178 (line 14) 46179 * EXPR_LINENO: Working with declarations. 46180 (line 20) 46181 * expr_list: Insns. (line 546) 46182 * EXPR_STMT: Statements for C++. (line 6) 46183 * EXPR_STMT_EXPR: Statements for C++. (line 6) 46184 * 'extendMN2' instruction pattern: Standard Names. (line 902) 46185 * extensible constraints: Simple Constraints. (line 171) 46186 * EXTRA_ADDRESS_CONSTRAINT: Old Constraints. (line 120) 46187 * EXTRA_CONSTRAINT: Old Constraints. (line 71) 46188 * EXTRA_CONSTRAINT_STR: Old Constraints. (line 92) 46189 * EXTRA_MEMORY_CONSTRAINT: Old Constraints. (line 97) 46190 * EXTRA_SPECS: Driver. (line 182) 46191 * 'extv' instruction pattern: Standard Names. (line 993) 46192 * 'extvM' instruction pattern: Standard Names. (line 938) 46193 * 'extvmisalignM' instruction pattern: Standard Names. (line 948) 46194 * 'extzv' instruction pattern: Standard Names. (line 1011) 46195 * 'extzvM' instruction pattern: Standard Names. (line 962) 46196 * 'extzvmisalignM' instruction pattern: Standard Names. (line 965) 46197 * 'F' in constraint: Simple Constraints. (line 92) 46198 * FAIL: Expander Definitions. 46199 (line 83) 46200 * fall-thru: Edges. (line 68) 46201 * FATAL_EXIT_CODE: Host Misc. (line 6) 46202 * FDL, GNU Free Documentation License: GNU Free Documentation License. 46203 (line 6) 46204 * features, optional, in system conventions: Run-time Target. 46205 (line 59) 46206 * ffs: Arithmetic. (line 211) 46207 * 'ffsM2' instruction pattern: Standard Names. (line 701) 46208 * FIELD_DECL: Declarations. (line 6) 46209 * files and passes of the compiler: Passes. (line 6) 46210 * files, generated: Files. (line 6) 46211 * file_end_indicate_exec_stack: File Framework. (line 39) 46212 * final_absence_set: Processor pipeline description. 46213 (line 223) 46214 * FINAL_PRESCAN_INSN: Instruction Output. (line 60) 46215 * final_presence_set: Processor pipeline description. 46216 (line 223) 46217 * final_sequence: Instruction Output. (line 144) 46218 * FIND_BASE_TERM: Addressing Modes. (line 117) 46219 * finite state automaton minimization: Processor pipeline description. 46220 (line 304) 46221 * FINI_ARRAY_SECTION_ASM_OP: Sections. (line 113) 46222 * FINI_SECTION_ASM_OP: Sections. (line 98) 46223 * FIRST_PARM_OFFSET: Frame Layout. (line 65) 46224 * 'FIRST_PARM_OFFSET' and virtual registers: Regs and Memory. 46225 (line 65) 46226 * FIRST_PSEUDO_REGISTER: Register Basics. (line 8) 46227 * FIRST_STACK_REG: Stack Registers. (line 26) 46228 * FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 46229 * fix: Conversions. (line 66) 46230 * fixed register: Register Basics. (line 15) 46231 * fixed-point fractional library: Fixed-point fractional library routines. 46232 (line 6) 46233 * FIXED_CONVERT_EXPR: Unary and Binary Expressions. 46234 (line 6) 46235 * FIXED_CST: Constant expressions. 46236 (line 6) 46237 * FIXED_POINT_TYPE: Types. (line 6) 46238 * FIXED_REGISTERS: Register Basics. (line 14) 46239 * fixed_regs: Register Basics. (line 59) 46240 * 'fixMN2' instruction pattern: Standard Names. (line 869) 46241 * 'fixunsMN2' instruction pattern: Standard Names. (line 878) 46242 * 'fixuns_truncMN2' instruction pattern: Standard Names. (line 893) 46243 * 'fix_truncMN2' instruction pattern: Standard Names. (line 889) 46244 * FIX_TRUNC_EXPR: Unary and Binary Expressions. 46245 (line 6) 46246 * flags in RTL expression: Flags. (line 6) 46247 * float: Conversions. (line 58) 46248 * floating point and cross compilation: Floating Point. (line 6) 46249 * 'floatMN2' instruction pattern: Standard Names. (line 861) 46250 * 'floatunsMN2' instruction pattern: Standard Names. (line 865) 46251 * FLOAT_EXPR: Unary and Binary Expressions. 46252 (line 6) 46253 * float_extend: Conversions. (line 33) 46254 * FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 32) 46255 * FLOAT_STORE_FLAG_VALUE: Misc. (line 286) 46256 * float_truncate: Conversions. (line 53) 46257 * FLOAT_TYPE_SIZE: Type Layout. (line 48) 46258 * FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 41) 46259 * 'FLOAT_WORDS_BIG_ENDIAN', (lack of) effect on 'subreg': Regs and Memory. 46260 (line 224) 46261 * 'floorM2' instruction pattern: Standard Names. (line 622) 46262 * FLOOR_DIV_EXPR: Unary and Binary Expressions. 46263 (line 6) 46264 * FLOOR_MOD_EXPR: Unary and Binary Expressions. 46265 (line 6) 46266 * flow-insensitive alias analysis: Alias analysis. (line 6) 46267 * flow-sensitive alias analysis: Alias analysis. (line 6) 46268 * fma: Arithmetic. (line 112) 46269 * 'fmaM4' instruction pattern: Standard Names. (line 276) 46270 * 'fmodM3' instruction pattern: Standard Names. (line 540) 46271 * 'fmsM4' instruction pattern: Standard Names. (line 283) 46272 * 'fnmaM4' instruction pattern: Standard Names. (line 289) 46273 * 'fnmsM4' instruction pattern: Standard Names. (line 295) 46274 * FORCE_CODE_SECTION_ALIGN: Sections. (line 144) 46275 * force_reg: Standard Names. (line 36) 46276 * FOR_BODY: Statements for C++. (line 6) 46277 * FOR_COND: Statements for C++. (line 6) 46278 * FOR_EXPR: Statements for C++. (line 6) 46279 * FOR_INIT_STMT: Statements for C++. (line 6) 46280 * FOR_STMT: Statements for C++. (line 6) 46281 * fractional types: Fixed-point fractional library routines. 46282 (line 6) 46283 * 'fractMN2' instruction pattern: Standard Names. (line 911) 46284 * 'fractunsMN2' instruction pattern: Standard Names. (line 926) 46285 * fract_convert: Conversions. (line 82) 46286 * FRACT_TYPE_SIZE: Type Layout. (line 67) 46287 * frame layout: Frame Layout. (line 6) 46288 * FRAME_ADDR_RTX: Frame Layout. (line 114) 46289 * FRAME_GROWS_DOWNWARD: Frame Layout. (line 30) 46290 * 'FRAME_GROWS_DOWNWARD' and virtual registers: Regs and Memory. 46291 (line 69) 46292 * FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 210) 46293 * frame_pointer_needed: Function Entry. (line 34) 46294 * FRAME_POINTER_REGNUM: Frame Registers. (line 13) 46295 * 'FRAME_POINTER_REGNUM' and virtual registers: Regs and Memory. 46296 (line 74) 46297 * frame_pointer_rtx: Frame Registers. (line 104) 46298 * frame_related: Flags. (line 229) 46299 * 'frame_related', in 'insn', 'call_insn', 'jump_insn', 'barrier', and 'set': Flags. 46300 (line 107) 46301 * 'frame_related', in 'mem': Flags. (line 85) 46302 * 'frame_related', in 'reg': Flags. (line 94) 46303 * 'frame_related', in 'symbol_ref': Flags. (line 165) 46304 * frequency, count, BB_FREQ_BASE: Profile information. 46305 (line 30) 46306 * 'ftruncM2' instruction pattern: Standard Names. (line 884) 46307 * function: Functions. (line 6) 46308 * function <1>: Functions for C++. (line 6) 46309 * function call conventions: Interface. (line 6) 46310 * function entry and exit: Function Entry. (line 6) 46311 * function entry point, alternate function entry point: Edges. 46312 (line 180) 46313 * function properties: Function Properties. 46314 (line 6) 46315 * function-call insns: Calls. (line 6) 46316 * functions, leaf: Leaf Functions. (line 6) 46317 * FUNCTION_ARG_OFFSET: Register Arguments. (line 196) 46318 * FUNCTION_ARG_PADDING: Register Arguments. (line 203) 46319 * FUNCTION_ARG_REGNO_P: Register Arguments. (line 251) 46320 * FUNCTION_BOUNDARY: Storage Layout. (line 164) 46321 * FUNCTION_DECL: Functions. (line 6) 46322 * FUNCTION_DECL <1>: Functions for C++. (line 6) 46323 * FUNCTION_MODE: Misc. (line 341) 46324 * FUNCTION_PROFILER: Profiling. (line 8) 46325 * FUNCTION_TYPE: Types. (line 6) 46326 * FUNCTION_VALUE: Scalar Return. (line 52) 46327 * FUNCTION_VALUE_REGNO_P: Scalar Return. (line 78) 46328 * fundamental type: Types. (line 6) 46329 * 'G' in constraint: Simple Constraints. (line 96) 46330 * 'g' in constraint: Simple Constraints. (line 118) 46331 * garbage collector, invocation: Invoking the garbage collector. 46332 (line 6) 46333 * garbage collector, troubleshooting: Troubleshooting. (line 6) 46334 * GCC and portability: Portability. (line 6) 46335 * GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 46336 * gcov_type: Profile information. 46337 (line 41) 46338 * ge: Comparisons. (line 72) 46339 * 'ge' and attributes: Expressions. (line 83) 46340 * gencodes: RTL passes. (line 18) 46341 * general_operand: Machine-Independent Predicates. 46342 (line 104) 46343 * GENERAL_REGS: Register Classes. (line 22) 46344 * generated files: Files. (line 6) 46345 * generating assembler output: Output Statement. (line 6) 46346 * generating insns: RTL Template. (line 6) 46347 * GENERIC: Parsing pass. (line 6) 46348 * GENERIC <1>: GENERIC. (line 6) 46349 * generic predicates: Machine-Independent Predicates. 46350 (line 6) 46351 * genflags: RTL passes. (line 18) 46352 * GEN_ERRNO_RTX: Library Calls. (line 64) 46353 * get_attr: Expressions. (line 99) 46354 * get_attr_length: Insn Lengths. (line 46) 46355 * GET_CLASS_NARROWEST_MODE: Machine Modes. (line 332) 46356 * GET_CODE: RTL Objects. (line 47) 46357 * get_frame_size: Elimination. (line 34) 46358 * get_insns: Insns. (line 34) 46359 * get_last_insn: Insns. (line 34) 46360 * GET_MODE: Machine Modes. (line 279) 46361 * GET_MODE_ALIGNMENT: Machine Modes. (line 319) 46362 * GET_MODE_BITSIZE: Machine Modes. (line 303) 46363 * GET_MODE_CLASS: Machine Modes. (line 293) 46364 * GET_MODE_FBIT: Machine Modes. (line 310) 46365 * GET_MODE_IBIT: Machine Modes. (line 306) 46366 * GET_MODE_MASK: Machine Modes. (line 314) 46367 * GET_MODE_NAME: Machine Modes. (line 290) 46368 * GET_MODE_NUNITS: Machine Modes. (line 328) 46369 * GET_MODE_SIZE: Machine Modes. (line 300) 46370 * GET_MODE_UNIT_SIZE: Machine Modes. (line 322) 46371 * GET_MODE_WIDER_MODE: Machine Modes. (line 296) 46372 * GET_RTX_CLASS: RTL Classes. (line 6) 46373 * GET_RTX_FORMAT: RTL Classes. (line 131) 46374 * GET_RTX_LENGTH: RTL Classes. (line 128) 46375 * 'get_thread_pointerMODE' instruction pattern: Standard Names. 46376 (line 1856) 46377 * geu: Comparisons. (line 72) 46378 * 'geu' and attributes: Expressions. (line 83) 46379 * GE_EXPR: Unary and Binary Expressions. 46380 (line 6) 46381 * GGC: Type Information. (line 6) 46382 * ggc_collect: Invoking the garbage collector. 46383 (line 6) 46384 * GIMPLE: Parsing pass. (line 13) 46385 * GIMPLE <1>: Gimplification pass. 46386 (line 6) 46387 * GIMPLE <2>: GIMPLE. (line 6) 46388 * GIMPLE Exception Handling: GIMPLE Exception Handling. 46389 (line 6) 46390 * GIMPLE instruction set: GIMPLE instruction set. 46391 (line 6) 46392 * GIMPLE sequences: GIMPLE sequences. (line 6) 46393 * GIMPLE statement iterators: Basic Blocks. (line 78) 46394 * GIMPLE statement iterators <1>: Maintaining the CFG. 46395 (line 33) 46396 * gimple_addresses_taken: Manipulating GIMPLE statements. 46397 (line 89) 46398 * 'GIMPLE_ASM': 'GIMPLE_ASM'. (line 6) 46399 * gimple_asm_clear_volatile: 'GIMPLE_ASM'. (line 62) 46400 * gimple_asm_clobber_op: 'GIMPLE_ASM'. (line 44) 46401 * gimple_asm_input_op: 'GIMPLE_ASM'. (line 29) 46402 * gimple_asm_nclobbers: 'GIMPLE_ASM'. (line 26) 46403 * gimple_asm_ninputs: 'GIMPLE_ASM'. (line 20) 46404 * gimple_asm_noutputs: 'GIMPLE_ASM'. (line 23) 46405 * gimple_asm_output_op: 'GIMPLE_ASM'. (line 36) 46406 * gimple_asm_set_clobber_op: 'GIMPLE_ASM'. (line 48) 46407 * gimple_asm_set_input_op: 'GIMPLE_ASM'. (line 32) 46408 * gimple_asm_set_output_op: 'GIMPLE_ASM'. (line 40) 46409 * gimple_asm_set_volatile: 'GIMPLE_ASM'. (line 59) 46410 * gimple_asm_string: 'GIMPLE_ASM'. (line 52) 46411 * gimple_asm_volatile_p: 'GIMPLE_ASM'. (line 56) 46412 * 'GIMPLE_ASSIGN': 'GIMPLE_ASSIGN'. (line 6) 46413 * gimple_assign_cast_p: Logical Operators. (line 158) 46414 * gimple_assign_cast_p <1>: 'GIMPLE_ASSIGN'. (line 92) 46415 * gimple_assign_lhs: 'GIMPLE_ASSIGN'. (line 50) 46416 * gimple_assign_lhs_ptr: 'GIMPLE_ASSIGN'. (line 53) 46417 * gimple_assign_rhs1: 'GIMPLE_ASSIGN'. (line 56) 46418 * gimple_assign_rhs1_ptr: 'GIMPLE_ASSIGN'. (line 59) 46419 * gimple_assign_rhs2: 'GIMPLE_ASSIGN'. (line 63) 46420 * gimple_assign_rhs2_ptr: 'GIMPLE_ASSIGN'. (line 66) 46421 * gimple_assign_rhs3: 'GIMPLE_ASSIGN'. (line 70) 46422 * gimple_assign_rhs3_ptr: 'GIMPLE_ASSIGN'. (line 73) 46423 * gimple_assign_rhs_class: 'GIMPLE_ASSIGN'. (line 44) 46424 * gimple_assign_rhs_code: 'GIMPLE_ASSIGN'. (line 40) 46425 * gimple_assign_set_lhs: 'GIMPLE_ASSIGN'. (line 77) 46426 * gimple_assign_set_rhs1: 'GIMPLE_ASSIGN'. (line 80) 46427 * gimple_assign_set_rhs2: 'GIMPLE_ASSIGN'. (line 84) 46428 * gimple_assign_set_rhs3: 'GIMPLE_ASSIGN'. (line 88) 46429 * gimple_bb: Manipulating GIMPLE statements. 46430 (line 17) 46431 * 'GIMPLE_BIND': 'GIMPLE_BIND'. (line 6) 46432 * gimple_bind_add_seq: 'GIMPLE_BIND'. (line 34) 46433 * gimple_bind_add_stmt: 'GIMPLE_BIND'. (line 31) 46434 * gimple_bind_append_vars: 'GIMPLE_BIND'. (line 18) 46435 * gimple_bind_block: 'GIMPLE_BIND'. (line 39) 46436 * gimple_bind_body: 'GIMPLE_BIND'. (line 22) 46437 * gimple_bind_set_block: 'GIMPLE_BIND'. (line 44) 46438 * gimple_bind_set_body: 'GIMPLE_BIND'. (line 26) 46439 * gimple_bind_set_vars: 'GIMPLE_BIND'. (line 14) 46440 * gimple_bind_vars: 'GIMPLE_BIND'. (line 11) 46441 * gimple_block: Manipulating GIMPLE statements. 46442 (line 20) 46443 * gimple_build_asm: 'GIMPLE_ASM'. (line 6) 46444 * gimple_build_asm_vec: 'GIMPLE_ASM'. (line 15) 46445 * gimple_build_assign: 'GIMPLE_ASSIGN'. (line 6) 46446 * gimple_build_assign_with_ops: 'GIMPLE_ASSIGN'. (line 28) 46447 * gimple_build_bind: 'GIMPLE_BIND'. (line 6) 46448 * gimple_build_call: 'GIMPLE_CALL'. (line 6) 46449 * gimple_build_call_from_tree: 'GIMPLE_CALL'. (line 15) 46450 * gimple_build_call_vec: 'GIMPLE_CALL'. (line 23) 46451 * gimple_build_catch: 'GIMPLE_CATCH'. (line 6) 46452 * gimple_build_cond: 'GIMPLE_COND'. (line 6) 46453 * gimple_build_cond_from_tree: 'GIMPLE_COND'. (line 14) 46454 * gimple_build_debug_bind: 'GIMPLE_DEBUG'. (line 6) 46455 * gimple_build_eh_filter: 'GIMPLE_EH_FILTER'. (line 6) 46456 * gimple_build_goto: 'GIMPLE_LABEL'. (line 17) 46457 * gimple_build_label: 'GIMPLE_LABEL'. (line 6) 46458 * gimple_build_nop: 'GIMPLE_NOP'. (line 6) 46459 * gimple_build_omp_atomic_load: 'GIMPLE_OMP_ATOMIC_LOAD'. 46460 (line 6) 46461 * gimple_build_omp_atomic_store: 'GIMPLE_OMP_ATOMIC_STORE'. 46462 (line 6) 46463 * gimple_build_omp_continue: 'GIMPLE_OMP_CONTINUE'. 46464 (line 6) 46465 * gimple_build_omp_critical: 'GIMPLE_OMP_CRITICAL'. 46466 (line 6) 46467 * gimple_build_omp_for: 'GIMPLE_OMP_FOR'. (line 6) 46468 * gimple_build_omp_master: 'GIMPLE_OMP_MASTER'. 46469 (line 6) 46470 * gimple_build_omp_ordered: 'GIMPLE_OMP_ORDERED'. 46471 (line 6) 46472 * gimple_build_omp_parallel: 'GIMPLE_OMP_PARALLEL'. 46473 (line 6) 46474 * gimple_build_omp_return: 'GIMPLE_OMP_RETURN'. 46475 (line 6) 46476 * gimple_build_omp_section: 'GIMPLE_OMP_SECTION'. 46477 (line 6) 46478 * gimple_build_omp_sections: 'GIMPLE_OMP_SECTIONS'. 46479 (line 6) 46480 * gimple_build_omp_sections_switch: 'GIMPLE_OMP_SECTIONS'. 46481 (line 13) 46482 * gimple_build_omp_single: 'GIMPLE_OMP_SINGLE'. 46483 (line 6) 46484 * gimple_build_resx: 'GIMPLE_RESX'. (line 6) 46485 * gimple_build_return: 'GIMPLE_RETURN'. (line 6) 46486 * gimple_build_switch: 'GIMPLE_SWITCH'. (line 6) 46487 * gimple_build_try: 'GIMPLE_TRY'. (line 6) 46488 * gimple_build_wce: 'GIMPLE_WITH_CLEANUP_EXPR'. 46489 (line 6) 46490 * 'GIMPLE_CALL': 'GIMPLE_CALL'. (line 6) 46491 * gimple_call_arg: 'GIMPLE_CALL'. (line 65) 46492 * gimple_call_arg_ptr: 'GIMPLE_CALL'. (line 69) 46493 * gimple_call_cannot_inline_p: 'GIMPLE_CALL'. (line 90) 46494 * gimple_call_chain: 'GIMPLE_CALL'. (line 56) 46495 * gimple_call_copy_skip_args: 'GIMPLE_CALL'. (line 96) 46496 * gimple_call_fn: 'GIMPLE_CALL'. (line 37) 46497 * gimple_call_fndecl: 'GIMPLE_CALL'. (line 45) 46498 * gimple_call_lhs: 'GIMPLE_CALL'. (line 28) 46499 * gimple_call_lhs_ptr: 'GIMPLE_CALL'. (line 31) 46500 * gimple_call_mark_uninlinable: 'GIMPLE_CALL'. (line 87) 46501 * gimple_call_noreturn_p: 'GIMPLE_CALL'. (line 93) 46502 * gimple_call_num_args: 'GIMPLE_CALL'. (line 62) 46503 * gimple_call_return_type: 'GIMPLE_CALL'. (line 53) 46504 * gimple_call_set_arg: 'GIMPLE_CALL'. (line 74) 46505 * gimple_call_set_chain: 'GIMPLE_CALL'. (line 59) 46506 * gimple_call_set_fn: 'GIMPLE_CALL'. (line 41) 46507 * gimple_call_set_fndecl: 'GIMPLE_CALL'. (line 50) 46508 * gimple_call_set_lhs: 'GIMPLE_CALL'. (line 34) 46509 * gimple_call_set_tail: 'GIMPLE_CALL'. (line 79) 46510 * gimple_call_tail_p: 'GIMPLE_CALL'. (line 84) 46511 * 'GIMPLE_CATCH': 'GIMPLE_CATCH'. (line 6) 46512 * gimple_catch_handler: 'GIMPLE_CATCH'. (line 19) 46513 * gimple_catch_set_handler: 'GIMPLE_CATCH'. (line 26) 46514 * gimple_catch_set_types: 'GIMPLE_CATCH'. (line 23) 46515 * gimple_catch_types: 'GIMPLE_CATCH'. (line 12) 46516 * gimple_catch_types_ptr: 'GIMPLE_CATCH'. (line 15) 46517 * gimple_code: Manipulating GIMPLE statements. 46518 (line 14) 46519 * 'GIMPLE_COND': 'GIMPLE_COND'. (line 6) 46520 * gimple_cond_code: 'GIMPLE_COND'. (line 20) 46521 * gimple_cond_false_label: 'GIMPLE_COND'. (line 59) 46522 * gimple_cond_lhs: 'GIMPLE_COND'. (line 29) 46523 * gimple_cond_make_false: 'GIMPLE_COND'. (line 63) 46524 * gimple_cond_make_true: 'GIMPLE_COND'. (line 66) 46525 * gimple_cond_rhs: 'GIMPLE_COND'. (line 37) 46526 * gimple_cond_set_code: 'GIMPLE_COND'. (line 24) 46527 * gimple_cond_set_false_label: 'GIMPLE_COND'. (line 54) 46528 * gimple_cond_set_lhs: 'GIMPLE_COND'. (line 33) 46529 * gimple_cond_set_rhs: 'GIMPLE_COND'. (line 41) 46530 * gimple_cond_set_true_label: 'GIMPLE_COND'. (line 49) 46531 * gimple_cond_true_label: 'GIMPLE_COND'. (line 45) 46532 * gimple_copy: Manipulating GIMPLE statements. 46533 (line 146) 46534 * 'GIMPLE_DEBUG': 'GIMPLE_DEBUG'. (line 6) 46535 * 'GIMPLE_DEBUG_BIND': 'GIMPLE_DEBUG'. (line 6) 46536 * gimple_debug_bind_get_value: 'GIMPLE_DEBUG'. (line 46) 46537 * gimple_debug_bind_get_value_ptr: 'GIMPLE_DEBUG'. (line 50) 46538 * gimple_debug_bind_get_var: 'GIMPLE_DEBUG'. (line 43) 46539 * gimple_debug_bind_has_value_p: 'GIMPLE_DEBUG'. (line 68) 46540 * gimple_debug_bind_p: Logical Operators. (line 162) 46541 * gimple_debug_bind_reset_value: 'GIMPLE_DEBUG'. (line 64) 46542 * gimple_debug_bind_set_value: 'GIMPLE_DEBUG'. (line 59) 46543 * gimple_debug_bind_set_var: 'GIMPLE_DEBUG'. (line 55) 46544 * gimple_def_ops: Manipulating GIMPLE statements. 46545 (line 93) 46546 * 'GIMPLE_EH_FILTER': 'GIMPLE_EH_FILTER'. (line 6) 46547 * gimple_eh_filter_failure: 'GIMPLE_EH_FILTER'. (line 18) 46548 * gimple_eh_filter_must_not_throw: 'GIMPLE_EH_FILTER'. (line 32) 46549 * gimple_eh_filter_set_failure: 'GIMPLE_EH_FILTER'. (line 27) 46550 * gimple_eh_filter_set_must_not_throw: 'GIMPLE_EH_FILTER'. (line 35) 46551 * gimple_eh_filter_set_types: 'GIMPLE_EH_FILTER'. (line 22) 46552 * gimple_eh_filter_types: 'GIMPLE_EH_FILTER'. (line 11) 46553 * gimple_eh_filter_types_ptr: 'GIMPLE_EH_FILTER'. (line 14) 46554 * gimple_expr_code: Manipulating GIMPLE statements. 46555 (line 30) 46556 * gimple_expr_type: Manipulating GIMPLE statements. 46557 (line 23) 46558 * gimple_goto_dest: 'GIMPLE_LABEL'. (line 20) 46559 * gimple_goto_set_dest: 'GIMPLE_LABEL'. (line 23) 46560 * gimple_has_mem_ops: Manipulating GIMPLE statements. 46561 (line 71) 46562 * gimple_has_ops: Manipulating GIMPLE statements. 46563 (line 68) 46564 * gimple_has_volatile_ops: Manipulating GIMPLE statements. 46565 (line 133) 46566 * 'GIMPLE_LABEL': 'GIMPLE_LABEL'. (line 6) 46567 * gimple_label_label: 'GIMPLE_LABEL'. (line 10) 46568 * gimple_label_set_label: 'GIMPLE_LABEL'. (line 13) 46569 * gimple_loaded_syms: Manipulating GIMPLE statements. 46570 (line 121) 46571 * gimple_locus: Manipulating GIMPLE statements. 46572 (line 41) 46573 * gimple_locus_empty_p: Manipulating GIMPLE statements. 46574 (line 47) 46575 * gimple_modified_p: Manipulating GIMPLE statements. 46576 (line 129) 46577 * 'GIMPLE_NOP': 'GIMPLE_NOP'. (line 6) 46578 * gimple_nop_p: 'GIMPLE_NOP'. (line 9) 46579 * gimple_no_warning_p: Manipulating GIMPLE statements. 46580 (line 50) 46581 * gimple_num_ops: Logical Operators. (line 76) 46582 * gimple_num_ops <1>: Manipulating GIMPLE statements. 46583 (line 74) 46584 * 'GIMPLE_OMP_ATOMIC_LOAD': 'GIMPLE_OMP_ATOMIC_LOAD'. 46585 (line 6) 46586 * gimple_omp_atomic_load_lhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 46587 (line 16) 46588 * gimple_omp_atomic_load_rhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 46589 (line 23) 46590 * gimple_omp_atomic_load_set_lhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 46591 (line 12) 46592 * gimple_omp_atomic_load_set_rhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 46593 (line 19) 46594 * 'GIMPLE_OMP_ATOMIC_STORE': 'GIMPLE_OMP_ATOMIC_STORE'. 46595 (line 6) 46596 * gimple_omp_atomic_store_set_val: 'GIMPLE_OMP_ATOMIC_STORE'. 46597 (line 10) 46598 * gimple_omp_atomic_store_val: 'GIMPLE_OMP_ATOMIC_STORE'. 46599 (line 14) 46600 * gimple_omp_body: 'GIMPLE_OMP_PARALLEL'. 46601 (line 23) 46602 * 'GIMPLE_OMP_CONTINUE': 'GIMPLE_OMP_CONTINUE'. 46603 (line 6) 46604 * gimple_omp_continue_control_def: 'GIMPLE_OMP_CONTINUE'. 46605 (line 12) 46606 * gimple_omp_continue_control_def_ptr: 'GIMPLE_OMP_CONTINUE'. 46607 (line 16) 46608 * gimple_omp_continue_control_use: 'GIMPLE_OMP_CONTINUE'. 46609 (line 23) 46610 * gimple_omp_continue_control_use_ptr: 'GIMPLE_OMP_CONTINUE'. 46611 (line 27) 46612 * gimple_omp_continue_set_control_def: 'GIMPLE_OMP_CONTINUE'. 46613 (line 19) 46614 * gimple_omp_continue_set_control_use: 'GIMPLE_OMP_CONTINUE'. 46615 (line 30) 46616 * 'GIMPLE_OMP_CRITICAL': 'GIMPLE_OMP_CRITICAL'. 46617 (line 6) 46618 * gimple_omp_critical_name: 'GIMPLE_OMP_CRITICAL'. 46619 (line 12) 46620 * gimple_omp_critical_name_ptr: 'GIMPLE_OMP_CRITICAL'. 46621 (line 15) 46622 * gimple_omp_critical_set_name: 'GIMPLE_OMP_CRITICAL'. 46623 (line 19) 46624 * 'GIMPLE_OMP_FOR': 'GIMPLE_OMP_FOR'. (line 6) 46625 * gimple_omp_for_clauses: 'GIMPLE_OMP_FOR'. (line 19) 46626 * gimple_omp_for_clauses_ptr: 'GIMPLE_OMP_FOR'. (line 22) 46627 * gimple_omp_for_cond: 'GIMPLE_OMP_FOR'. (line 82) 46628 * gimple_omp_for_final: 'GIMPLE_OMP_FOR'. (line 50) 46629 * gimple_omp_for_final_ptr: 'GIMPLE_OMP_FOR'. (line 53) 46630 * gimple_omp_for_incr: 'GIMPLE_OMP_FOR'. (line 60) 46631 * gimple_omp_for_incr_ptr: 'GIMPLE_OMP_FOR'. (line 63) 46632 * gimple_omp_for_index: 'GIMPLE_OMP_FOR'. (line 30) 46633 * gimple_omp_for_index_ptr: 'GIMPLE_OMP_FOR'. (line 33) 46634 * gimple_omp_for_initial: 'GIMPLE_OMP_FOR'. (line 40) 46635 * gimple_omp_for_initial_ptr: 'GIMPLE_OMP_FOR'. (line 43) 46636 * gimple_omp_for_pre_body: 'GIMPLE_OMP_FOR'. (line 69) 46637 * gimple_omp_for_set_clauses: 'GIMPLE_OMP_FOR'. (line 25) 46638 * gimple_omp_for_set_cond: 'GIMPLE_OMP_FOR'. (line 78) 46639 * gimple_omp_for_set_final: 'GIMPLE_OMP_FOR'. (line 56) 46640 * gimple_omp_for_set_incr: 'GIMPLE_OMP_FOR'. (line 66) 46641 * gimple_omp_for_set_index: 'GIMPLE_OMP_FOR'. (line 36) 46642 * gimple_omp_for_set_initial: 'GIMPLE_OMP_FOR'. (line 46) 46643 * gimple_omp_for_set_pre_body: 'GIMPLE_OMP_FOR'. (line 73) 46644 * 'GIMPLE_OMP_MASTER': 'GIMPLE_OMP_MASTER'. 46645 (line 6) 46646 * 'GIMPLE_OMP_ORDERED': 'GIMPLE_OMP_ORDERED'. 46647 (line 6) 46648 * 'GIMPLE_OMP_PARALLEL': 'GIMPLE_OMP_PARALLEL'. 46649 (line 6) 46650 * gimple_omp_parallel_child_fn: 'GIMPLE_OMP_PARALLEL'. 46651 (line 41) 46652 * gimple_omp_parallel_child_fn_ptr: 'GIMPLE_OMP_PARALLEL'. 46653 (line 45) 46654 * gimple_omp_parallel_clauses: 'GIMPLE_OMP_PARALLEL'. 46655 (line 30) 46656 * gimple_omp_parallel_clauses_ptr: 'GIMPLE_OMP_PARALLEL'. 46657 (line 33) 46658 * gimple_omp_parallel_combined_p: 'GIMPLE_OMP_PARALLEL'. 46659 (line 15) 46660 * gimple_omp_parallel_data_arg: 'GIMPLE_OMP_PARALLEL'. 46661 (line 53) 46662 * gimple_omp_parallel_data_arg_ptr: 'GIMPLE_OMP_PARALLEL'. 46663 (line 57) 46664 * gimple_omp_parallel_set_child_fn: 'GIMPLE_OMP_PARALLEL'. 46665 (line 49) 46666 * gimple_omp_parallel_set_clauses: 'GIMPLE_OMP_PARALLEL'. 46667 (line 36) 46668 * gimple_omp_parallel_set_combined_p: 'GIMPLE_OMP_PARALLEL'. 46669 (line 19) 46670 * gimple_omp_parallel_set_data_arg: 'GIMPLE_OMP_PARALLEL'. 46671 (line 60) 46672 * 'GIMPLE_OMP_RETURN': 'GIMPLE_OMP_RETURN'. 46673 (line 6) 46674 * gimple_omp_return_nowait_p: 'GIMPLE_OMP_RETURN'. 46675 (line 13) 46676 * gimple_omp_return_set_nowait: 'GIMPLE_OMP_RETURN'. 46677 (line 10) 46678 * 'GIMPLE_OMP_SECTION': 'GIMPLE_OMP_SECTION'. 46679 (line 6) 46680 * 'GIMPLE_OMP_SECTIONS': 'GIMPLE_OMP_SECTIONS'. 46681 (line 6) 46682 * gimple_omp_sections_clauses: 'GIMPLE_OMP_SECTIONS'. 46683 (line 29) 46684 * gimple_omp_sections_clauses_ptr: 'GIMPLE_OMP_SECTIONS'. 46685 (line 32) 46686 * gimple_omp_sections_control: 'GIMPLE_OMP_SECTIONS'. 46687 (line 16) 46688 * gimple_omp_sections_control_ptr: 'GIMPLE_OMP_SECTIONS'. 46689 (line 20) 46690 * gimple_omp_sections_set_clauses: 'GIMPLE_OMP_SECTIONS'. 46691 (line 35) 46692 * gimple_omp_sections_set_control: 'GIMPLE_OMP_SECTIONS'. 46693 (line 24) 46694 * gimple_omp_section_last_p: 'GIMPLE_OMP_SECTION'. 46695 (line 11) 46696 * gimple_omp_section_set_last: 'GIMPLE_OMP_SECTION'. 46697 (line 15) 46698 * gimple_omp_set_body: 'GIMPLE_OMP_PARALLEL'. 46699 (line 26) 46700 * 'GIMPLE_OMP_SINGLE': 'GIMPLE_OMP_SINGLE'. 46701 (line 6) 46702 * gimple_omp_single_clauses: 'GIMPLE_OMP_SINGLE'. 46703 (line 13) 46704 * gimple_omp_single_clauses_ptr: 'GIMPLE_OMP_SINGLE'. 46705 (line 16) 46706 * gimple_omp_single_set_clauses: 'GIMPLE_OMP_SINGLE'. 46707 (line 19) 46708 * gimple_op: Logical Operators. (line 79) 46709 * gimple_op <1>: Manipulating GIMPLE statements. 46710 (line 80) 46711 * gimple_ops: Logical Operators. (line 82) 46712 * gimple_ops <1>: Manipulating GIMPLE statements. 46713 (line 77) 46714 * gimple_op_ptr: Manipulating GIMPLE statements. 46715 (line 83) 46716 * 'GIMPLE_PHI': 'GIMPLE_PHI'. (line 6) 46717 * gimple_phi_arg: 'GIMPLE_PHI'. (line 24) 46718 * gimple_phi_capacity: 'GIMPLE_PHI'. (line 6) 46719 * gimple_phi_num_args: 'GIMPLE_PHI'. (line 10) 46720 * gimple_phi_result: 'GIMPLE_PHI'. (line 15) 46721 * gimple_phi_result_ptr: 'GIMPLE_PHI'. (line 18) 46722 * gimple_phi_set_arg: 'GIMPLE_PHI'. (line 28) 46723 * gimple_phi_set_result: 'GIMPLE_PHI'. (line 21) 46724 * gimple_plf: Manipulating GIMPLE statements. 46725 (line 64) 46726 * 'GIMPLE_RESX': 'GIMPLE_RESX'. (line 6) 46727 * gimple_resx_region: 'GIMPLE_RESX'. (line 12) 46728 * gimple_resx_set_region: 'GIMPLE_RESX'. (line 15) 46729 * 'GIMPLE_RETURN': 'GIMPLE_RETURN'. (line 6) 46730 * gimple_return_retval: 'GIMPLE_RETURN'. (line 9) 46731 * gimple_return_set_retval: 'GIMPLE_RETURN'. (line 12) 46732 * gimple_seq_add_seq: GIMPLE sequences. (line 30) 46733 * gimple_seq_add_stmt: GIMPLE sequences. (line 24) 46734 * gimple_seq_alloc: GIMPLE sequences. (line 61) 46735 * gimple_seq_copy: GIMPLE sequences. (line 65) 46736 * gimple_seq_deep_copy: GIMPLE sequences. (line 36) 46737 * gimple_seq_empty_p: GIMPLE sequences. (line 69) 46738 * gimple_seq_first: GIMPLE sequences. (line 43) 46739 * gimple_seq_init: GIMPLE sequences. (line 58) 46740 * gimple_seq_last: GIMPLE sequences. (line 46) 46741 * gimple_seq_reverse: GIMPLE sequences. (line 39) 46742 * gimple_seq_set_first: GIMPLE sequences. (line 53) 46743 * gimple_seq_set_last: GIMPLE sequences. (line 49) 46744 * gimple_seq_singleton_p: GIMPLE sequences. (line 78) 46745 * gimple_set_block: Manipulating GIMPLE statements. 46746 (line 38) 46747 * gimple_set_def_ops: Manipulating GIMPLE statements. 46748 (line 96) 46749 * gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 46750 (line 136) 46751 * gimple_set_locus: Manipulating GIMPLE statements. 46752 (line 44) 46753 * gimple_set_op: Manipulating GIMPLE statements. 46754 (line 86) 46755 * gimple_set_plf: Manipulating GIMPLE statements. 46756 (line 60) 46757 * gimple_set_use_ops: Manipulating GIMPLE statements. 46758 (line 103) 46759 * gimple_set_vdef_ops: Manipulating GIMPLE statements. 46760 (line 117) 46761 * gimple_set_visited: Manipulating GIMPLE statements. 46762 (line 53) 46763 * gimple_set_vuse_ops: Manipulating GIMPLE statements. 46764 (line 110) 46765 * gimple_statement_base: Tuple representation. 46766 (line 14) 46767 * gimple_statement_with_ops: Tuple representation. 46768 (line 96) 46769 * gimple_stored_syms: Manipulating GIMPLE statements. 46770 (line 125) 46771 * 'GIMPLE_SWITCH': 'GIMPLE_SWITCH'. (line 6) 46772 * gimple_switch_default_label: 'GIMPLE_SWITCH'. (line 38) 46773 * gimple_switch_index: 'GIMPLE_SWITCH'. (line 23) 46774 * gimple_switch_label: 'GIMPLE_SWITCH'. (line 29) 46775 * gimple_switch_num_labels: 'GIMPLE_SWITCH'. (line 14) 46776 * gimple_switch_set_default_label: 'GIMPLE_SWITCH'. (line 41) 46777 * gimple_switch_set_index: 'GIMPLE_SWITCH'. (line 26) 46778 * gimple_switch_set_label: 'GIMPLE_SWITCH'. (line 33) 46779 * gimple_switch_set_num_labels: 'GIMPLE_SWITCH'. (line 18) 46780 * 'GIMPLE_TRY': 'GIMPLE_TRY'. (line 6) 46781 * gimple_try_catch_is_cleanup: 'GIMPLE_TRY'. (line 19) 46782 * gimple_try_cleanup: 'GIMPLE_TRY'. (line 26) 46783 * gimple_try_eval: 'GIMPLE_TRY'. (line 22) 46784 * gimple_try_kind: 'GIMPLE_TRY'. (line 15) 46785 * gimple_try_set_catch_is_cleanup: 'GIMPLE_TRY'. (line 30) 46786 * gimple_try_set_cleanup: 'GIMPLE_TRY'. (line 39) 46787 * gimple_try_set_eval: 'GIMPLE_TRY'. (line 34) 46788 * gimple_use_ops: Manipulating GIMPLE statements. 46789 (line 100) 46790 * gimple_vdef_ops: Manipulating GIMPLE statements. 46791 (line 114) 46792 * gimple_visited_p: Manipulating GIMPLE statements. 46793 (line 57) 46794 * gimple_vuse_ops: Manipulating GIMPLE statements. 46795 (line 107) 46796 * gimple_wce_cleanup: 'GIMPLE_WITH_CLEANUP_EXPR'. 46797 (line 10) 46798 * gimple_wce_cleanup_eh_only: 'GIMPLE_WITH_CLEANUP_EXPR'. 46799 (line 17) 46800 * gimple_wce_set_cleanup: 'GIMPLE_WITH_CLEANUP_EXPR'. 46801 (line 13) 46802 * gimple_wce_set_cleanup_eh_only: 'GIMPLE_WITH_CLEANUP_EXPR'. 46803 (line 20) 46804 * 'GIMPLE_WITH_CLEANUP_EXPR': 'GIMPLE_WITH_CLEANUP_EXPR'. 46805 (line 6) 46806 * gimplification: Parsing pass. (line 13) 46807 * gimplification <1>: Gimplification pass. 46808 (line 6) 46809 * gimplifier: Parsing pass. (line 13) 46810 * gimplify_assign: 'GIMPLE_ASSIGN'. (line 17) 46811 * gimplify_expr: Gimplification pass. 46812 (line 18) 46813 * gimplify_function_tree: Gimplification pass. 46814 (line 18) 46815 * GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 46816 * global_regs: Register Basics. (line 59) 46817 * 'GO_IF_LEGITIMATE_ADDRESS': Addressing Modes. (line 90) 46818 * greater than: Comparisons. (line 60) 46819 * greater than <1>: Comparisons. (line 64) 46820 * greater than <2>: Comparisons. (line 72) 46821 * gsi_after_labels: Sequence iterators. (line 74) 46822 * gsi_bb: Sequence iterators. (line 82) 46823 * gsi_commit_edge_inserts: Sequence iterators. (line 193) 46824 * gsi_commit_edge_inserts <1>: Maintaining the CFG. 46825 (line 105) 46826 * gsi_commit_one_edge_insert: Sequence iterators. (line 188) 46827 * gsi_end_p: Sequence iterators. (line 59) 46828 * gsi_end_p <1>: Maintaining the CFG. 46829 (line 48) 46830 * gsi_for_stmt: Sequence iterators. (line 156) 46831 * gsi_insert_after: Sequence iterators. (line 145) 46832 * gsi_insert_after <1>: Maintaining the CFG. 46833 (line 60) 46834 * gsi_insert_before: Sequence iterators. (line 134) 46835 * gsi_insert_before <1>: Maintaining the CFG. 46836 (line 66) 46837 * gsi_insert_on_edge: Sequence iterators. (line 173) 46838 * gsi_insert_on_edge <1>: Maintaining the CFG. 46839 (line 105) 46840 * gsi_insert_on_edge_immediate: Sequence iterators. (line 183) 46841 * gsi_insert_seq_after: Sequence iterators. (line 152) 46842 * gsi_insert_seq_before: Sequence iterators. (line 141) 46843 * gsi_insert_seq_on_edge: Sequence iterators. (line 177) 46844 * gsi_last: Sequence iterators. (line 49) 46845 * gsi_last <1>: Maintaining the CFG. 46846 (line 44) 46847 * gsi_last_bb: Sequence iterators. (line 55) 46848 * gsi_link_after: Sequence iterators. (line 113) 46849 * gsi_link_before: Sequence iterators. (line 103) 46850 * gsi_link_seq_after: Sequence iterators. (line 108) 46851 * gsi_link_seq_before: Sequence iterators. (line 97) 46852 * gsi_move_after: Sequence iterators. (line 159) 46853 * gsi_move_before: Sequence iterators. (line 164) 46854 * gsi_move_to_bb_end: Sequence iterators. (line 169) 46855 * gsi_next: Sequence iterators. (line 65) 46856 * gsi_next <1>: Maintaining the CFG. 46857 (line 52) 46858 * gsi_one_before_end_p: Sequence iterators. (line 62) 46859 * gsi_prev: Sequence iterators. (line 68) 46860 * gsi_prev <1>: Maintaining the CFG. 46861 (line 56) 46862 * gsi_remove: Sequence iterators. (line 88) 46863 * gsi_remove <1>: Maintaining the CFG. 46864 (line 72) 46865 * gsi_replace: Sequence iterators. (line 128) 46866 * gsi_seq: Sequence iterators. (line 85) 46867 * gsi_split_seq_after: Sequence iterators. (line 118) 46868 * gsi_split_seq_before: Sequence iterators. (line 123) 46869 * gsi_start: Sequence iterators. (line 39) 46870 * gsi_start <1>: Maintaining the CFG. 46871 (line 40) 46872 * gsi_start_bb: Sequence iterators. (line 45) 46873 * gsi_stmt: Sequence iterators. (line 71) 46874 * gsi_stmt_ptr: Sequence iterators. (line 79) 46875 * gt: Comparisons. (line 60) 46876 * 'gt' and attributes: Expressions. (line 83) 46877 * gtu: Comparisons. (line 64) 46878 * 'gtu' and attributes: Expressions. (line 83) 46879 * GTY: Type Information. (line 6) 46880 * GT_EXPR: Unary and Binary Expressions. 46881 (line 6) 46882 * 'H' in constraint: Simple Constraints. (line 96) 46883 * HAmode: Machine Modes. (line 143) 46884 * HANDLER: Statements for C++. (line 6) 46885 * HANDLER_BODY: Statements for C++. (line 6) 46886 * HANDLER_PARMS: Statements for C++. (line 6) 46887 * HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 434) 46888 * hard registers: Regs and Memory. (line 9) 46889 * HARD_FRAME_POINTER_IS_ARG_POINTER: Frame Registers. (line 57) 46890 * HARD_FRAME_POINTER_IS_FRAME_POINTER: Frame Registers. (line 50) 46891 * HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 19) 46892 * HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 19) 46893 * HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 52) 46894 * HARD_REGNO_MODE_OK: Values in Registers. 46895 (line 57) 46896 * HARD_REGNO_NREGS: Values in Registers. 46897 (line 10) 46898 * HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 46899 (line 24) 46900 * HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 46901 (line 42) 46902 * HARD_REGNO_RENAME_OK: Values in Registers. 46903 (line 117) 46904 * HAS_INIT_SECTION: Macros for Initialization. 46905 (line 18) 46906 * HAS_LONG_COND_BRANCH: Misc. (line 8) 46907 * HAS_LONG_UNCOND_BRANCH: Misc. (line 17) 46908 * HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 46909 * HAVE_POST_DECREMENT: Addressing Modes. (line 11) 46910 * HAVE_POST_INCREMENT: Addressing Modes. (line 10) 46911 * HAVE_POST_MODIFY_DISP: Addressing Modes. (line 17) 46912 * HAVE_POST_MODIFY_REG: Addressing Modes. (line 23) 46913 * HAVE_PRE_DECREMENT: Addressing Modes. (line 9) 46914 * HAVE_PRE_INCREMENT: Addressing Modes. (line 8) 46915 * HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 16) 46916 * HAVE_PRE_MODIFY_REG: Addressing Modes. (line 22) 46917 * HCmode: Machine Modes. (line 196) 46918 * HFmode: Machine Modes. (line 58) 46919 * high: Constants. (line 119) 46920 * HImode: Machine Modes. (line 29) 46921 * 'HImode', in 'insn': Insns. (line 275) 46922 * HONOR_REG_ALLOC_ORDER: Allocation Order. (line 36) 46923 * host configuration: Host Config. (line 6) 46924 * host functions: Host Common. (line 6) 46925 * host hooks: Host Common. (line 6) 46926 * host makefile fragment: Host Fragment. (line 6) 46927 * HOST_BIT_BUCKET: Filesystem. (line 51) 46928 * HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 46929 * HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 11) 46930 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 43) 46931 * HOST_HOOKS_GT_PCH_GET_ADDRESS: Host Common. (line 15) 46932 * HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 24) 46933 * HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 46934 * HOST_LONG_FORMAT: Host Misc. (line 45) 46935 * HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 46936 * HOST_OBJECT_SUFFIX: Filesystem. (line 40) 46937 * HOST_PTR_PRINTF: Host Misc. (line 49) 46938 * HOT_TEXT_SECTION_NAME: Sections. (line 42) 46939 * HQmode: Machine Modes. (line 107) 46940 * 'i' in constraint: Simple Constraints. (line 68) 46941 * 'I' in constraint: Simple Constraints. (line 79) 46942 * identifier: Identifiers. (line 6) 46943 * IDENTIFIER_LENGTH: Identifiers. (line 22) 46944 * IDENTIFIER_NODE: Identifiers. (line 6) 46945 * IDENTIFIER_OPNAME_P: Identifiers. (line 27) 46946 * IDENTIFIER_POINTER: Identifiers. (line 17) 46947 * IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 46948 * IEEE 754-2008: Decimal float library routines. 46949 (line 6) 46950 * IFCVT_MACHDEP_INIT: Misc. (line 559) 46951 * IFCVT_MODIFY_CANCEL: Misc. (line 553) 46952 * IFCVT_MODIFY_FINAL: Misc. (line 547) 46953 * IFCVT_MODIFY_INSN: Misc. (line 541) 46954 * IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 533) 46955 * IFCVT_MODIFY_TESTS: Misc. (line 523) 46956 * IF_COND: Statements for C++. (line 6) 46957 * if_marked: GTY Options. (line 161) 46958 * IF_STMT: Statements for C++. (line 6) 46959 * if_then_else: Comparisons. (line 80) 46960 * 'if_then_else' and attributes: Expressions. (line 32) 46961 * 'if_then_else' usage: Side Effects. (line 56) 46962 * IMAGPART_EXPR: Unary and Binary Expressions. 46963 (line 6) 46964 * Immediate Uses: SSA Operands. (line 271) 46965 * immediate_operand: Machine-Independent Predicates. 46966 (line 10) 46967 * IMMEDIATE_PREFIX: Instruction Output. (line 153) 46968 * include: Including Patterns. (line 6) 46969 * INCLUDE_DEFAULTS: Driver. (line 327) 46970 * inclusive-or, bitwise: Arithmetic. (line 164) 46971 * INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 181) 46972 * INCOMING_REGNO: Register Basics. (line 87) 46973 * INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 137) 46974 * INCOMING_STACK_BOUNDARY: Storage Layout. (line 159) 46975 * INDEX_REG_CLASS: Register Classes. (line 140) 46976 * 'indirect_jump' instruction pattern: Standard Names. (line 1218) 46977 * indirect_operand: Machine-Independent Predicates. 46978 (line 70) 46979 * INDIRECT_REF: Storage References. (line 6) 46980 * initialization routines: Initialization. (line 6) 46981 * INITIAL_ELIMINATION_OFFSET: Elimination. (line 84) 46982 * INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 81) 46983 * INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 34) 46984 * INIT_ARRAY_SECTION_ASM_OP: Sections. (line 106) 46985 * INIT_CUMULATIVE_ARGS: Register Arguments. (line 147) 46986 * INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 175) 46987 * INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 169) 46988 * INIT_ENVIRONMENT: Driver. (line 305) 46989 * INIT_EXPANDERS: Per-Function Data. (line 36) 46990 * INIT_EXPR: Unary and Binary Expressions. 46991 (line 6) 46992 * init_machine_status: Per-Function Data. (line 42) 46993 * init_one_libfunc: Library Calls. (line 15) 46994 * INIT_SECTION_ASM_OP: Sections. (line 90) 46995 * INIT_SECTION_ASM_OP <1>: Macros for Initialization. 46996 (line 9) 46997 * inlining: Target Attributes. (line 95) 46998 * insert_insn_on_edge: Maintaining the CFG. 46999 (line 105) 47000 * insn: Insns. (line 63) 47001 * 'insn' and '/f': Flags. (line 107) 47002 * 'insn' and '/j': Flags. (line 157) 47003 * 'insn' and '/s': Flags. (line 49) 47004 * 'insn' and '/s' <1>: Flags. (line 148) 47005 * 'insn' and '/u': Flags. (line 39) 47006 * 'insn' and '/v': Flags. (line 44) 47007 * insn attributes: Insn Attributes. (line 6) 47008 * insn canonicalization: Insn Canonicalizations. 47009 (line 6) 47010 * insn includes: Including Patterns. (line 6) 47011 * insn lengths, computing: Insn Lengths. (line 6) 47012 * insn notes, notes: Basic Blocks. (line 52) 47013 * insn splitting: Insn Splitting. (line 6) 47014 * insn-attr.h: Defining Attributes. 47015 (line 32) 47016 * insns: Insns. (line 6) 47017 * insns, generating: RTL Template. (line 6) 47018 * insns, recognizing: RTL Template. (line 6) 47019 * INSN_ANNULLED_BRANCH_P: Flags. (line 39) 47020 * INSN_CODE: Insns. (line 302) 47021 * INSN_DELETED_P: Flags. (line 44) 47022 * INSN_FROM_TARGET_P: Flags. (line 49) 47023 * insn_list: Insns. (line 546) 47024 * INSN_REFERENCES_ARE_DELAYED: Misc. (line 461) 47025 * INSN_SETS_ARE_DELAYED: Misc. (line 450) 47026 * INSN_UID: Insns. (line 23) 47027 * INSN_VAR_LOCATION: Insns. (line 243) 47028 * instruction attributes: Insn Attributes. (line 6) 47029 * instruction latency time: Processor pipeline description. 47030 (line 6) 47031 * instruction latency time <1>: Processor pipeline description. 47032 (line 105) 47033 * instruction latency time <2>: Processor pipeline description. 47034 (line 196) 47035 * instruction patterns: Patterns. (line 6) 47036 * instruction splitting: Insn Splitting. (line 6) 47037 * 'insv' instruction pattern: Standard Names. (line 1017) 47038 * 'insvM' instruction pattern: Standard Names. (line 969) 47039 * 'insvmisalignM' instruction pattern: Standard Names. (line 979) 47040 * int iterators in '.md' files: Int Iterators. (line 6) 47041 * INT16_TYPE: Type Layout. (line 253) 47042 * INT32_TYPE: Type Layout. (line 254) 47043 * INT64_TYPE: Type Layout. (line 255) 47044 * INT8_TYPE: Type Layout. (line 252) 47045 * INTEGER_CST: Constant expressions. 47046 (line 6) 47047 * INTEGER_TYPE: Types. (line 6) 47048 * Interdependence of Patterns: Dependent Patterns. (line 6) 47049 * interfacing to GCC output: Interface. (line 6) 47050 * interlock delays: Processor pipeline description. 47051 (line 6) 47052 * intermediate representation lowering: Parsing pass. (line 13) 47053 * INTMAX_TYPE: Type Layout. (line 229) 47054 * INTPTR_TYPE: Type Layout. (line 276) 47055 * introduction: Top. (line 6) 47056 * INT_FAST16_TYPE: Type Layout. (line 269) 47057 * INT_FAST32_TYPE: Type Layout. (line 270) 47058 * INT_FAST64_TYPE: Type Layout. (line 271) 47059 * INT_FAST8_TYPE: Type Layout. (line 268) 47060 * INT_LEAST16_TYPE: Type Layout. (line 261) 47061 * INT_LEAST32_TYPE: Type Layout. (line 262) 47062 * INT_LEAST64_TYPE: Type Layout. (line 263) 47063 * INT_LEAST8_TYPE: Type Layout. (line 260) 47064 * INT_TYPE_SIZE: Type Layout. (line 11) 47065 * INVOKE__main: Macros for Initialization. 47066 (line 50) 47067 * in_struct: Flags. (line 245) 47068 * 'in_struct', in 'code_label' and 'note': Flags. (line 59) 47069 * 'in_struct', in 'insn' and 'jump_insn' and 'call_insn': Flags. 47070 (line 49) 47071 * 'in_struct', in 'insn', 'jump_insn' and 'call_insn': Flags. 47072 (line 148) 47073 * 'in_struct', in 'subreg': Flags. (line 187) 47074 * ior: Arithmetic. (line 164) 47075 * 'ior' and attributes: Expressions. (line 50) 47076 * 'ior', canonicalization of: Insn Canonicalizations. 47077 (line 51) 47078 * 'iorM3' instruction pattern: Standard Names. (line 266) 47079 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 44) 47080 * IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 119) 47081 * is_gimple_addressable: Logical Operators. (line 113) 47082 * is_gimple_asm_val: Logical Operators. (line 117) 47083 * is_gimple_assign: Logical Operators. (line 149) 47084 * is_gimple_call: Logical Operators. (line 152) 47085 * is_gimple_call_addr: Logical Operators. (line 120) 47086 * is_gimple_constant: Logical Operators. (line 128) 47087 * is_gimple_debug: Logical Operators. (line 155) 47088 * is_gimple_ip_invariant: Logical Operators. (line 137) 47089 * is_gimple_ip_invariant_address: Logical Operators. (line 142) 47090 * is_gimple_mem_ref_addr: Logical Operators. (line 124) 47091 * is_gimple_min_invariant: Logical Operators. (line 131) 47092 * is_gimple_omp: 'GIMPLE_OMP_PARALLEL'. 47093 (line 64) 47094 * is_gimple_val: Logical Operators. (line 107) 47095 * iterators in '.md' files: Iterators. (line 6) 47096 * IV analysis on GIMPLE: Scalar evolutions. (line 6) 47097 * IV analysis on RTL: loop-iv. (line 6) 47098 * JMP_BUF_SIZE: Exception Region Output. 47099 (line 82) 47100 * jump: Flags. (line 286) 47101 * 'jump' instruction pattern: Standard Names. (line 1096) 47102 * jump instruction patterns: Jump Patterns. (line 6) 47103 * jump instructions and 'set': Side Effects. (line 56) 47104 * 'jump', in 'call_insn': Flags. (line 161) 47105 * 'jump', in 'insn': Flags. (line 157) 47106 * 'jump', in 'mem': Flags. (line 70) 47107 * Jumps: Jumps. (line 6) 47108 * JUMP_ALIGN: Alignment Output. (line 8) 47109 * jump_insn: Insns. (line 73) 47110 * 'jump_insn' and '/f': Flags. (line 107) 47111 * 'jump_insn' and '/s': Flags. (line 49) 47112 * 'jump_insn' and '/s' <1>: Flags. (line 148) 47113 * 'jump_insn' and '/u': Flags. (line 39) 47114 * 'jump_insn' and '/v': Flags. (line 44) 47115 * JUMP_LABEL: Insns. (line 80) 47116 * JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 150) 47117 * LABEL_ALIGN: Alignment Output. (line 57) 47118 * LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 26) 47119 * LABEL_ALTERNATE_NAME: Edges. (line 180) 47120 * LABEL_ALT_ENTRY_P: Insns. (line 146) 47121 * LABEL_DECL: Declarations. (line 6) 47122 * LABEL_KIND: Insns. (line 146) 47123 * LABEL_NUSES: Insns. (line 142) 47124 * LABEL_PRESERVE_P: Flags. (line 59) 47125 * label_ref: Constants. (line 96) 47126 * 'label_ref' and '/v': Flags. (line 65) 47127 * 'label_ref', RTL sharing: Sharing. (line 35) 47128 * LABEL_REF_NONLOCAL_P: Flags. (line 65) 47129 * language-dependent trees: Language-dependent trees. 47130 (line 6) 47131 * language-independent intermediate representation: Parsing pass. 47132 (line 13) 47133 * lang_hooks.gimplify_expr: Gimplification pass. 47134 (line 18) 47135 * lang_hooks.parse_file: Parsing pass. (line 6) 47136 * large return values: Aggregate Return. (line 6) 47137 * LARGEST_EXPONENT_IS_NORMAL: Storage Layout. (line 480) 47138 * LAST_STACK_REG: Stack Registers. (line 30) 47139 * LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 47140 * 'lceilMN2': Standard Names. (line 687) 47141 * LCSSA: LCSSA. (line 6) 47142 * LDD_SUFFIX: Macros for Initialization. 47143 (line 121) 47144 * LD_FINI_SWITCH: Macros for Initialization. 47145 (line 28) 47146 * LD_INIT_SWITCH: Macros for Initialization. 47147 (line 24) 47148 * le: Comparisons. (line 76) 47149 * 'le' and attributes: Expressions. (line 83) 47150 * leaf functions: Leaf Functions. (line 6) 47151 * leaf_function_p: Standard Names. (line 1180) 47152 * LEAF_REGISTERS: Leaf Functions. (line 23) 47153 * LEAF_REG_REMAP: Leaf Functions. (line 37) 47154 * left rotate: Arithmetic. (line 196) 47155 * left shift: Arithmetic. (line 174) 47156 * LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 47157 * LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 150) 47158 * length: GTY Options. (line 47) 47159 * less than: Comparisons. (line 68) 47160 * less than or equal: Comparisons. (line 76) 47161 * leu: Comparisons. (line 76) 47162 * 'leu' and attributes: Expressions. (line 83) 47163 * LE_EXPR: Unary and Binary Expressions. 47164 (line 6) 47165 * 'lfloorMN2': Standard Names. (line 682) 47166 * LIB2FUNCS_EXTRA: Target Fragment. (line 11) 47167 * LIBCALL_VALUE: Scalar Return. (line 56) 47168 * 'libgcc.a': Library Calls. (line 6) 47169 * LIBGCC2_CFLAGS: Target Fragment. (line 8) 47170 * LIBGCC2_GNU_PREFIX: Type Layout. (line 127) 47171 * LIBGCC2_HAS_DF_MODE: Type Layout. (line 108) 47172 * LIBGCC2_HAS_TF_MODE: Type Layout. (line 121) 47173 * LIBGCC2_HAS_XF_MODE: Type Layout. (line 115) 47174 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 102) 47175 * LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 963) 47176 * LIBGCC_SPEC: Driver. (line 115) 47177 * library subroutine names: Library Calls. (line 6) 47178 * LIBRARY_PATH_ENV: Misc. (line 501) 47179 * LIB_SPEC: Driver. (line 107) 47180 * LIMIT_RELOAD_CLASS: Register Classes. (line 296) 47181 * Linear loop transformations framework: Lambda. (line 6) 47182 * LINK_COMMAND_SPEC: Driver. (line 236) 47183 * LINK_EH_SPEC: Driver. (line 142) 47184 * LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 232) 47185 * LINK_LIBGCC_SPECIAL_1: Driver. (line 227) 47186 * LINK_SPEC: Driver. (line 100) 47187 * list: Containers. (line 6) 47188 * Liveness representation: Liveness information. 47189 (line 6) 47190 * load address instruction: Simple Constraints. (line 162) 47191 * LOAD_EXTEND_OP: Misc. (line 59) 47192 * 'load_multiple' instruction pattern: Standard Names. (line 136) 47193 * Local Register Allocator (LRA): RTL passes. (line 199) 47194 * LOCAL_ALIGNMENT: Storage Layout. (line 246) 47195 * LOCAL_CLASS_P: Classes. (line 73) 47196 * LOCAL_DECL_ALIGNMENT: Storage Layout. (line 283) 47197 * LOCAL_INCLUDE_DIR: Driver. (line 312) 47198 * LOCAL_LABEL_PREFIX: Instruction Output. (line 151) 47199 * LOCAL_REGNO: Register Basics. (line 101) 47200 * Logical Operators: Logical Operators. (line 6) 47201 * logical-and, bitwise: Arithmetic. (line 159) 47202 * LOGICAL_OP_NON_SHORT_CIRCUIT: Costs. (line 264) 47203 * 'logM2' instruction pattern: Standard Names. (line 595) 47204 * LOG_LINKS: Insns. (line 321) 47205 * 'longjmp' and automatic variables: Interface. (line 52) 47206 * LONG_ACCUM_TYPE_SIZE: Type Layout. (line 92) 47207 * LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 57) 47208 * LONG_FRACT_TYPE_SIZE: Type Layout. (line 72) 47209 * LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 97) 47210 * LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 77) 47211 * LONG_LONG_TYPE_SIZE: Type Layout. (line 32) 47212 * LONG_TYPE_SIZE: Type Layout. (line 21) 47213 * Loop analysis: Loop representation. 47214 (line 6) 47215 * Loop manipulation: Loop manipulation. (line 6) 47216 * Loop querying: Loop querying. (line 6) 47217 * Loop representation: Loop representation. 47218 (line 6) 47219 * Loop-closed SSA form: LCSSA. (line 6) 47220 * looping instruction patterns: Looping Patterns. (line 6) 47221 * LOOP_ALIGN: Alignment Output. (line 40) 47222 * LOOP_EXPR: Unary and Binary Expressions. 47223 (line 6) 47224 * lowering, language-dependent intermediate representation: Parsing pass. 47225 (line 13) 47226 * lo_sum: Arithmetic. (line 25) 47227 * 'lrintMN2': Standard Names. (line 672) 47228 * 'lroundMN2': Standard Names. (line 677) 47229 * lshiftrt: Arithmetic. (line 191) 47230 * 'lshiftrt' and attributes: Expressions. (line 83) 47231 * LSHIFT_EXPR: Unary and Binary Expressions. 47232 (line 6) 47233 * 'lshrM3' instruction pattern: Standard Names. (line 514) 47234 * lt: Comparisons. (line 68) 47235 * 'lt' and attributes: Expressions. (line 83) 47236 * LTGT_EXPR: Unary and Binary Expressions. 47237 (line 6) 47238 * lto: LTO. (line 6) 47239 * ltrans: LTO. (line 6) 47240 * ltu: Comparisons. (line 68) 47241 * LT_EXPR: Unary and Binary Expressions. 47242 (line 6) 47243 * 'm' in constraint: Simple Constraints. (line 17) 47244 * machine attributes: Target Attributes. (line 6) 47245 * machine description macros: Target Macros. (line 6) 47246 * machine descriptions: Machine Desc. (line 6) 47247 * machine mode conversions: Conversions. (line 6) 47248 * machine modes: Machine Modes. (line 6) 47249 * machine specific constraints: Machine Constraints. 47250 (line 6) 47251 * machine-independent predicates: Machine-Independent Predicates. 47252 (line 6) 47253 * macros, target description: Target Macros. (line 6) 47254 * 'maddMN4' instruction pattern: Standard Names. (line 437) 47255 * makefile fragment: Fragments. (line 6) 47256 * makefile targets: Makefile. (line 6) 47257 * MAKE_DECL_ONE_ONLY: Label Output. (line 246) 47258 * make_safe_from: Expander Definitions. 47259 (line 151) 47260 * MALLOC_ABI_ALIGNMENT: Storage Layout. (line 173) 47261 * Manipulating GIMPLE statements: Manipulating GIMPLE statements. 47262 (line 6) 47263 * marking roots: GGC Roots. (line 6) 47264 * mark_hook: GTY Options. (line 177) 47265 * MASK_RETURN_ADDR: Exception Region Output. 47266 (line 34) 47267 * matching constraint: Simple Constraints. (line 140) 47268 * matching operands: Output Template. (line 49) 47269 * match_dup: RTL Template. (line 73) 47270 * match_dup <1>: define_peephole2. (line 28) 47271 * 'match_dup' and attributes: Insn Lengths. (line 16) 47272 * match_operand: RTL Template. (line 16) 47273 * 'match_operand' and attributes: Expressions. (line 55) 47274 * match_operator: RTL Template. (line 95) 47275 * match_op_dup: RTL Template. (line 163) 47276 * match_parallel: RTL Template. (line 172) 47277 * match_par_dup: RTL Template. (line 219) 47278 * match_scratch: RTL Template. (line 58) 47279 * match_scratch <1>: define_peephole2. (line 28) 47280 * 'match_test' and attributes: Expressions. (line 64) 47281 * math library: Soft float library routines. 47282 (line 6) 47283 * math, in RTL: Arithmetic. (line 6) 47284 * matherr: Library Calls. (line 52) 47285 * MATH_LIBRARY: Misc. (line 494) 47286 * 'maxM3' instruction pattern: Standard Names. (line 301) 47287 * MAX_BITS_PER_WORD: Storage Layout. (line 59) 47288 * MAX_CONDITIONAL_EXECUTE: Misc. (line 516) 47289 * MAX_FIXED_MODE_SIZE: Storage Layout. (line 428) 47290 * MAX_MOVE_MAX: Misc. (line 105) 47291 * MAX_OFILE_ALIGNMENT: Storage Layout. (line 208) 47292 * MAX_REGS_PER_ADDRESS: Addressing Modes. (line 42) 47293 * MAX_STACK_ALIGNMENT: Storage Layout. (line 202) 47294 * maybe_undef: GTY Options. (line 186) 47295 * may_trap_p, tree_could_trap_p: Edges. (line 114) 47296 * mcount: Profiling. (line 12) 47297 * MD_CAN_REDIRECT_BRANCH: Misc. (line 678) 47298 * MD_EXEC_PREFIX: Driver. (line 267) 47299 * MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 93) 47300 * MD_HANDLE_UNWABI: Exception Handling. (line 112) 47301 * MD_STARTFILE_PREFIX: Driver. (line 295) 47302 * MD_STARTFILE_PREFIX_1: Driver. (line 300) 47303 * mem: Regs and Memory. (line 370) 47304 * 'mem' and '/c': Flags. (line 81) 47305 * 'mem' and '/f': Flags. (line 85) 47306 * 'mem' and '/j': Flags. (line 70) 47307 * 'mem' and '/u': Flags. (line 134) 47308 * 'mem' and '/v': Flags. (line 76) 47309 * 'mem', RTL sharing: Sharing. (line 40) 47310 * memory model: Memory model. (line 6) 47311 * memory reference, nonoffsettable: Simple Constraints. (line 254) 47312 * memory references in constraints: Simple Constraints. (line 17) 47313 * 'memory_barrier' instruction pattern: Standard Names. (line 1574) 47314 * MEMORY_MOVE_COST: Costs. (line 53) 47315 * memory_operand: Machine-Independent Predicates. 47316 (line 57) 47317 * MEM_ADDR_SPACE: Special Accessors. (line 48) 47318 * MEM_ALIAS_SET: Special Accessors. (line 9) 47319 * MEM_ALIGN: Special Accessors. (line 45) 47320 * MEM_EXPR: Special Accessors. (line 19) 47321 * MEM_KEEP_ALIAS_SET_P: Flags. (line 70) 47322 * MEM_NOTRAP_P: Flags. (line 81) 47323 * MEM_OFFSET: Special Accessors. (line 31) 47324 * MEM_OFFSET_KNOWN_P: Special Accessors. (line 27) 47325 * MEM_POINTER: Flags. (line 85) 47326 * MEM_READONLY_P: Flags. (line 134) 47327 * MEM_REF: Storage References. (line 6) 47328 * 'mem_signal_fenceMODE' instruction pattern: Standard Names. 47329 (line 1844) 47330 * MEM_SIZE: Special Accessors. (line 39) 47331 * MEM_SIZE_KNOWN_P: Special Accessors. (line 35) 47332 * 'mem_thread_fenceMODE' instruction pattern: Standard Names. 47333 (line 1836) 47334 * MEM_VOLATILE_P: Flags. (line 76) 47335 * METHOD_TYPE: Types. (line 6) 47336 * MINIMUM_ALIGNMENT: Storage Layout. (line 296) 47337 * MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 181) 47338 * 'minM3' instruction pattern: Standard Names. (line 301) 47339 * minus: Arithmetic. (line 38) 47340 * 'minus' and attributes: Expressions. (line 83) 47341 * 'minus', canonicalization of: Insn Canonicalizations. 47342 (line 27) 47343 * MINUS_EXPR: Unary and Binary Expressions. 47344 (line 6) 47345 * MIN_UNITS_PER_WORD: Storage Layout. (line 69) 47346 * MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 47347 * mod: Arithmetic. (line 137) 47348 * 'mod' and attributes: Expressions. (line 83) 47349 * mode classes: Machine Modes. (line 218) 47350 * mode iterators in '.md' files: Mode Iterators. (line 6) 47351 * mode switching: Mode Switching. (line 6) 47352 * MODES_TIEABLE_P: Values in Registers. 47353 (line 127) 47354 * MODE_ACCUM: Machine Modes. (line 248) 47355 * MODE_AFTER: Mode Switching. (line 48) 47356 * MODE_BASE_REG_CLASS: Register Classes. (line 116) 47357 * MODE_BASE_REG_REG_CLASS: Register Classes. (line 122) 47358 * MODE_CC: Machine Modes. (line 267) 47359 * MODE_CC <1>: MODE_CC Condition Codes. 47360 (line 6) 47361 * MODE_CODE_BASE_REG_CLASS: Register Classes. (line 129) 47362 * MODE_COMPLEX_FLOAT: Machine Modes. (line 259) 47363 * MODE_COMPLEX_INT: Machine Modes. (line 256) 47364 * MODE_DECIMAL_FLOAT: Machine Modes. (line 236) 47365 * MODE_ENTRY: Mode Switching. (line 54) 47366 * MODE_EXIT: Mode Switching. (line 60) 47367 * MODE_FLOAT: Machine Modes. (line 232) 47368 * MODE_FRACT: Machine Modes. (line 240) 47369 * MODE_FUNCTION: Machine Modes. (line 263) 47370 * MODE_INT: Machine Modes. (line 224) 47371 * MODE_NEEDED: Mode Switching. (line 41) 47372 * MODE_PARTIAL_INT: Machine Modes. (line 228) 47373 * MODE_PRIORITY_TO_MODE: Mode Switching. (line 66) 47374 * MODE_RANDOM: Machine Modes. (line 272) 47375 * MODE_UACCUM: Machine Modes. (line 252) 47376 * MODE_UFRACT: Machine Modes. (line 244) 47377 * modifiers in constraints: Modifiers. (line 6) 47378 * MODIFY_EXPR: Unary and Binary Expressions. 47379 (line 6) 47380 * MODIFY_JNI_METHOD_CALL: Misc. (line 765) 47381 * 'modM3' instruction pattern: Standard Names. (line 266) 47382 * modulo scheduling: RTL passes. (line 131) 47383 * MOVE_BY_PIECES_P: Costs. (line 164) 47384 * MOVE_MAX: Misc. (line 100) 47385 * MOVE_MAX_PIECES: Costs. (line 170) 47386 * MOVE_RATIO: Costs. (line 148) 47387 * 'movM' instruction pattern: Standard Names. (line 11) 47388 * 'movmemM' instruction pattern: Standard Names. (line 744) 47389 * 'movmisalignM' instruction pattern: Standard Names. (line 125) 47390 * 'movMODEcc' instruction pattern: Standard Names. (line 1031) 47391 * 'movstr' instruction pattern: Standard Names. (line 779) 47392 * 'movstrictM' instruction pattern: Standard Names. (line 119) 47393 * 'msubMN4' instruction pattern: Standard Names. (line 460) 47394 * 'mulhisi3' instruction pattern: Standard Names. (line 413) 47395 * 'mulM3' instruction pattern: Standard Names. (line 266) 47396 * 'mulqihi3' instruction pattern: Standard Names. (line 417) 47397 * 'mulsidi3' instruction pattern: Standard Names. (line 417) 47398 * mult: Arithmetic. (line 93) 47399 * 'mult' and attributes: Expressions. (line 83) 47400 * 'mult', canonicalization of: Insn Canonicalizations. 47401 (line 27) 47402 * 'mult', canonicalization of <1>: Insn Canonicalizations. 47403 (line 91) 47404 * MULTIARCH_DIRNAME: Target Fragment. (line 170) 47405 * MULTILIB_DEFAULTS: Driver. (line 252) 47406 * MULTILIB_DIRNAMES: Target Fragment. (line 44) 47407 * MULTILIB_EXCEPTIONS: Target Fragment. (line 70) 47408 * MULTILIB_EXTRA_OPTS: Target Fragment. (line 132) 47409 * MULTILIB_MATCHES: Target Fragment. (line 63) 47410 * MULTILIB_OPTIONS: Target Fragment. (line 24) 47411 * MULTILIB_OSDIRNAMES: Target Fragment. (line 139) 47412 * MULTILIB_REQUIRED: Target Fragment. (line 82) 47413 * MULTILIB_REUSE: Target Fragment. (line 103) 47414 * multiple alternative constraints: Multi-Alternative. (line 6) 47415 * MULTIPLE_SYMBOL_SPACES: Misc. (line 474) 47416 * multiplication: Arithmetic. (line 93) 47417 * multiplication with signed saturation: Arithmetic. (line 93) 47418 * multiplication with unsigned saturation: Arithmetic. (line 93) 47419 * MULT_EXPR: Unary and Binary Expressions. 47420 (line 6) 47421 * MULT_HIGHPART_EXPR: Unary and Binary Expressions. 47422 (line 6) 47423 * 'n' in constraint: Simple Constraints. (line 73) 47424 * name: Identifiers. (line 6) 47425 * named address spaces: Named Address Spaces. 47426 (line 6) 47427 * named patterns and conditions: Patterns. (line 47) 47428 * names, pattern: Standard Names. (line 6) 47429 * namespace, scope: Namespaces. (line 6) 47430 * NAMESPACE_DECL: Declarations. (line 6) 47431 * NAMESPACE_DECL <1>: Namespaces. (line 6) 47432 * NATIVE_SYSTEM_HEADER_COMPONENT: Driver. (line 322) 47433 * ne: Comparisons. (line 56) 47434 * 'ne' and attributes: Expressions. (line 83) 47435 * 'nearbyintM2' instruction pattern: Standard Names. (line 654) 47436 * neg: Arithmetic. (line 82) 47437 * 'neg' and attributes: Expressions. (line 83) 47438 * 'neg', canonicalization of: Insn Canonicalizations. 47439 (line 27) 47440 * NEGATE_EXPR: Unary and Binary Expressions. 47441 (line 6) 47442 * negation: Arithmetic. (line 82) 47443 * negation with signed saturation: Arithmetic. (line 82) 47444 * negation with unsigned saturation: Arithmetic. (line 82) 47445 * 'negM2' instruction pattern: Standard Names. (line 526) 47446 * nested functions, trampolines for: Trampolines. (line 6) 47447 * nested_ptr: GTY Options. (line 194) 47448 * next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks. (line 25) 47449 * NEXT_INSN: Insns. (line 30) 47450 * NEXT_OBJC_RUNTIME: Library Calls. (line 87) 47451 * NE_EXPR: Unary and Binary Expressions. 47452 (line 6) 47453 * nil: RTL Objects. (line 73) 47454 * NM_FLAGS: Macros for Initialization. 47455 (line 110) 47456 * nondeterministic finite state automaton: Processor pipeline description. 47457 (line 304) 47458 * nonimmediate_operand: Machine-Independent Predicates. 47459 (line 100) 47460 * nonlocal goto handler: Edges. (line 171) 47461 * 'nonlocal_goto' instruction pattern: Standard Names. (line 1406) 47462 * 'nonlocal_goto_receiver' instruction pattern: Standard Names. 47463 (line 1423) 47464 * nonmemory_operand: Machine-Independent Predicates. 47465 (line 96) 47466 * nonoffsettable memory reference: Simple Constraints. (line 254) 47467 * NON_LVALUE_EXPR: Unary and Binary Expressions. 47468 (line 6) 47469 * 'nop' instruction pattern: Standard Names. (line 1213) 47470 * NOP_EXPR: Unary and Binary Expressions. 47471 (line 6) 47472 * normal predicates: Predicates. (line 31) 47473 * not: Arithmetic. (line 155) 47474 * 'not' and attributes: Expressions. (line 50) 47475 * not equal: Comparisons. (line 56) 47476 * 'not', canonicalization of: Insn Canonicalizations. 47477 (line 27) 47478 * note: Insns. (line 173) 47479 * 'note' and '/i': Flags. (line 59) 47480 * 'note' and '/v': Flags. (line 44) 47481 * NOTE_INSN_BASIC_BLOCK: Basic Blocks. (line 50) 47482 * NOTE_INSN_BASIC_BLOCK <1>: Basic Blocks. (line 52) 47483 * NOTE_INSN_BLOCK_BEG: Insns. (line 198) 47484 * NOTE_INSN_BLOCK_END: Insns. (line 198) 47485 * NOTE_INSN_DELETED: Insns. (line 188) 47486 * NOTE_INSN_DELETED_LABEL: Insns. (line 193) 47487 * NOTE_INSN_EH_REGION_BEG: Insns. (line 204) 47488 * NOTE_INSN_EH_REGION_END: Insns. (line 204) 47489 * NOTE_INSN_FUNCTION_BEG: Insns. (line 228) 47490 * NOTE_INSN_LOOP_BEG: Insns. (line 212) 47491 * NOTE_INSN_LOOP_CONT: Insns. (line 218) 47492 * NOTE_INSN_LOOP_END: Insns. (line 212) 47493 * NOTE_INSN_LOOP_VTOP: Insns. (line 222) 47494 * NOTE_INSN_VAR_LOCATION: Insns. (line 232) 47495 * NOTE_LINE_NUMBER: Insns. (line 173) 47496 * NOTE_SOURCE_FILE: Insns. (line 173) 47497 * NOTE_VAR_LOCATION: Insns. (line 232) 47498 * NOTICE_UPDATE_CC: CC0 Condition Codes. 47499 (line 30) 47500 * NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 25) 47501 * NO_DBX_FUNCTION_END: DBX Hooks. (line 19) 47502 * NO_DBX_GCC_MARKER: File Names and DBX. (line 27) 47503 * NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 22) 47504 * NO_DOLLAR_IN_LABEL: Label Output. (line 64) 47505 * NO_DOT_IN_LABEL: Label Output. (line 70) 47506 * NO_FUNCTION_CSE: Costs. (line 260) 47507 * NO_IMPLICIT_EXTERN_C: Misc. (line 373) 47508 * NO_PROFILE_COUNTERS: Profiling. (line 27) 47509 * NO_REGS: Register Classes. (line 17) 47510 * Number of iterations analysis: Number of iterations. 47511 (line 6) 47512 * NUM_MACHINE_MODES: Machine Modes. (line 285) 47513 * NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 29) 47514 * N_REG_CLASSES: Register Classes. (line 81) 47515 * 'o' in constraint: Simple Constraints. (line 23) 47516 * OBJC_GEN_METHOD_LABEL: Label Output. (line 447) 47517 * OBJC_JBLEN: Misc. (line 958) 47518 * OBJECT_FORMAT_COFF: Macros for Initialization. 47519 (line 96) 47520 * offsettable address: Simple Constraints. (line 23) 47521 * OFFSET_TYPE: Types. (line 6) 47522 * OImode: Machine Modes. (line 51) 47523 * Omega a solver for linear programming problems: Omega. (line 6) 47524 * OMP_ATOMIC: OpenMP. (line 6) 47525 * OMP_CLAUSE: OpenMP. (line 6) 47526 * OMP_CONTINUE: OpenMP. (line 6) 47527 * OMP_CRITICAL: OpenMP. (line 6) 47528 * OMP_FOR: OpenMP. (line 6) 47529 * OMP_MASTER: OpenMP. (line 6) 47530 * OMP_ORDERED: OpenMP. (line 6) 47531 * OMP_PARALLEL: OpenMP. (line 6) 47532 * OMP_RETURN: OpenMP. (line 6) 47533 * OMP_SECTION: OpenMP. (line 6) 47534 * OMP_SECTIONS: OpenMP. (line 6) 47535 * OMP_SINGLE: OpenMP. (line 6) 47536 * 'one_cmplM2' instruction pattern: Standard Names. (line 741) 47537 * operand access: Accessors. (line 6) 47538 * Operand Access Routines: SSA Operands. (line 116) 47539 * operand constraints: Constraints. (line 6) 47540 * Operand Iterators: SSA Operands. (line 116) 47541 * operand predicates: Predicates. (line 6) 47542 * operand substitution: Output Template. (line 6) 47543 * Operands: Operands. (line 6) 47544 * operands: SSA Operands. (line 6) 47545 * operands <1>: Patterns. (line 53) 47546 * operator predicates: Predicates. (line 6) 47547 * 'optc-gen.awk': Options. (line 6) 47548 * Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 47549 * OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 8) 47550 * option specification files: Options. (line 6) 47551 * optional hardware or system features: Run-time Target. (line 59) 47552 * options, directory search: Including Patterns. (line 47) 47553 * OPTION_DEFAULT_SPECS: Driver. (line 25) 47554 * order of register allocation: Allocation Order. (line 6) 47555 * ordered_comparison_operator: Machine-Independent Predicates. 47556 (line 115) 47557 * ORDERED_EXPR: Unary and Binary Expressions. 47558 (line 6) 47559 * Ordering of Patterns: Pattern Ordering. (line 6) 47560 * ORIGINAL_REGNO: Special Accessors. (line 53) 47561 * other register constraints: Simple Constraints. (line 171) 47562 * outgoing_args_size: Stack Arguments. (line 48) 47563 * OUTGOING_REGNO: Register Basics. (line 94) 47564 * OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 73) 47565 * output of assembler code: File Framework. (line 6) 47566 * output statements: Output Statement. (line 6) 47567 * output templates: Output Template. (line 6) 47568 * output_asm_insn: Output Statement. (line 52) 47569 * OUTPUT_QUOTED_STRING: File Framework. (line 106) 47570 * OVERLAPPING_REGISTER_NAMES: Instruction Output. (line 20) 47571 * OVERLOAD: Functions for C++. (line 6) 47572 * OVERRIDE_ABI_FORMAT: Register Arguments. (line 139) 47573 * OVL_CURRENT: Functions for C++. (line 6) 47574 * OVL_NEXT: Functions for C++. (line 6) 47575 * 'p' in constraint: Simple Constraints. (line 162) 47576 * PAD_VARARGS_DOWN: Register Arguments. (line 220) 47577 * parallel: Side Effects. (line 209) 47578 * parameters, c++ abi: C++ ABI. (line 6) 47579 * parameters, miscellaneous: Misc. (line 6) 47580 * parameters, precompiled headers: PCH Target. (line 6) 47581 * paramN_is: GTY Options. (line 134) 47582 * param_is: GTY Options. (line 115) 47583 * parity: Arithmetic. (line 243) 47584 * 'parityM2' instruction pattern: Standard Names. (line 735) 47585 * PARM_BOUNDARY: Storage Layout. (line 138) 47586 * PARM_DECL: Declarations. (line 6) 47587 * PARSE_LDD_OUTPUT: Macros for Initialization. 47588 (line 125) 47589 * passes and files of the compiler: Passes. (line 6) 47590 * passing arguments: Interface. (line 36) 47591 * pass_duplicate_computed_gotos: Edges. (line 161) 47592 * PATH_SEPARATOR: Filesystem. (line 31) 47593 * PATTERN: Insns. (line 291) 47594 * pattern conditions: Patterns. (line 43) 47595 * pattern names: Standard Names. (line 6) 47596 * Pattern Ordering: Pattern Ordering. (line 6) 47597 * patterns: Patterns. (line 6) 47598 * pc: Regs and Memory. (line 357) 47599 * 'pc' and attributes: Insn Lengths. (line 20) 47600 * 'pc', RTL sharing: Sharing. (line 25) 47601 * PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 322) 47602 * PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 64) 47603 * PC_REGNUM: Register Basics. (line 108) 47604 * pc_rtx: Regs and Memory. (line 362) 47605 * PDImode: Machine Modes. (line 40) 47606 * peephole optimization, RTL representation: Side Effects. (line 243) 47607 * peephole optimizer definitions: Peephole Definitions. 47608 (line 6) 47609 * per-function data: Per-Function Data. (line 6) 47610 * percent sign: Output Template. (line 6) 47611 * PHI nodes: SSA. (line 31) 47612 * PHI_ARG_DEF: SSA. (line 70) 47613 * PHI_ARG_EDGE: SSA. (line 67) 47614 * PHI_ARG_ELT: SSA. (line 62) 47615 * PHI_NUM_ARGS: SSA. (line 58) 47616 * PHI_RESULT: SSA. (line 55) 47617 * PIC: PIC. (line 6) 47618 * PIC_OFFSET_TABLE_REGNUM: PIC. (line 15) 47619 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 25) 47620 * pipeline hazard recognizer: Processor pipeline description. 47621 (line 6) 47622 * pipeline hazard recognizer <1>: Processor pipeline description. 47623 (line 53) 47624 * Plugins: Plugins. (line 6) 47625 * plus: Arithmetic. (line 14) 47626 * 'plus' and attributes: Expressions. (line 83) 47627 * 'plus', canonicalization of: Insn Canonicalizations. 47628 (line 27) 47629 * PLUS_EXPR: Unary and Binary Expressions. 47630 (line 6) 47631 * Pmode: Misc. (line 329) 47632 * pmode_register_operand: Machine-Independent Predicates. 47633 (line 34) 47634 * pointer: Types. (line 6) 47635 * POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 81) 47636 * POINTER_PLUS_EXPR: Unary and Binary Expressions. 47637 (line 6) 47638 * POINTER_SIZE: Storage Layout. (line 75) 47639 * POINTER_TYPE: Types. (line 6) 47640 * popcount: Arithmetic. (line 239) 47641 * 'popcountM2' instruction pattern: Standard Names. (line 729) 47642 * pops_args: Function Entry. (line 104) 47643 * pop_operand: Machine-Independent Predicates. 47644 (line 87) 47645 * portability: Portability. (line 6) 47646 * position independent code: PIC. (line 6) 47647 * POSTDECREMENT_EXPR: Unary and Binary Expressions. 47648 (line 6) 47649 * POSTINCREMENT_EXPR: Unary and Binary Expressions. 47650 (line 6) 47651 * post_dec: Incdec. (line 25) 47652 * post_inc: Incdec. (line 30) 47653 * post_modify: Incdec. (line 33) 47654 * post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks. 47655 (line 34) 47656 * POWI_MAX_MULTS: Misc. (line 827) 47657 * 'powM3' instruction pattern: Standard Names. (line 603) 47658 * pragma: Misc. (line 379) 47659 * PREDECREMENT_EXPR: Unary and Binary Expressions. 47660 (line 6) 47661 * predefined macros: Run-time Target. (line 6) 47662 * predicates: Predicates. (line 6) 47663 * predicates and machine modes: Predicates. (line 31) 47664 * predication: Conditional Execution. 47665 (line 6) 47666 * predication <1>: Cond Exec Macros. (line 6) 47667 * predict.def: Profile information. 47668 (line 24) 47669 * PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 41) 47670 * PREFERRED_RELOAD_CLASS: Register Classes. (line 249) 47671 * PREFERRED_STACK_BOUNDARY: Storage Layout. (line 152) 47672 * prefetch: Side Effects. (line 316) 47673 * 'prefetch' and '/v': Flags. (line 214) 47674 * 'prefetch' instruction pattern: Standard Names. (line 1549) 47675 * PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 214) 47676 * PREINCREMENT_EXPR: Unary and Binary Expressions. 47677 (line 6) 47678 * presence_set: Processor pipeline description. 47679 (line 223) 47680 * preserving SSA form: SSA. (line 76) 47681 * preserving virtual SSA form: SSA. (line 184) 47682 * pretend_args_size: Function Entry. (line 110) 47683 * prev_active_insn: define_peephole. (line 60) 47684 * PREV_INSN: Insns. (line 26) 47685 * pre_dec: Incdec. (line 8) 47686 * PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 126) 47687 * pre_inc: Incdec. (line 22) 47688 * pre_modify: Incdec. (line 52) 47689 * PRINT_OPERAND: Instruction Output. (line 95) 47690 * PRINT_OPERAND_ADDRESS: Instruction Output. (line 122) 47691 * PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 115) 47692 * 'probe_stack' instruction pattern: Standard Names. (line 1398) 47693 * 'probe_stack_address' instruction pattern: Standard Names. (line 1391) 47694 * processor functional units: Processor pipeline description. 47695 (line 6) 47696 * processor functional units <1>: Processor pipeline description. 47697 (line 68) 47698 * processor pipeline description: Processor pipeline description. 47699 (line 6) 47700 * product: Arithmetic. (line 93) 47701 * profile feedback: Profile information. 47702 (line 14) 47703 * profile representation: Profile information. 47704 (line 6) 47705 * PROFILE_BEFORE_PROLOGUE: Profiling. (line 34) 47706 * PROFILE_HOOK: Profiling. (line 22) 47707 * profiling, code generation: Profiling. (line 6) 47708 * program counter: Regs and Memory. (line 358) 47709 * prologue: Function Entry. (line 6) 47710 * 'prologue' instruction pattern: Standard Names. (line 1487) 47711 * PROMOTE_MODE: Storage Layout. (line 92) 47712 * pseudo registers: Regs and Memory. (line 9) 47713 * PSImode: Machine Modes. (line 32) 47714 * PTRDIFF_TYPE: Type Layout. (line 200) 47715 * purge_dead_edges: Edges. (line 103) 47716 * purge_dead_edges <1>: Maintaining the CFG. 47717 (line 81) 47718 * push address instruction: Simple Constraints. (line 162) 47719 * 'pushM1' instruction pattern: Standard Names. (line 253) 47720 * PUSH_ARGS: Stack Arguments. (line 17) 47721 * PUSH_ARGS_REVERSED: Stack Arguments. (line 25) 47722 * push_operand: Machine-Independent Predicates. 47723 (line 80) 47724 * push_reload: Addressing Modes. (line 176) 47725 * PUSH_ROUNDING: Stack Arguments. (line 31) 47726 * PUT_CODE: RTL Objects. (line 47) 47727 * PUT_MODE: Machine Modes. (line 282) 47728 * PUT_REG_NOTE_KIND: Insns. (line 353) 47729 * PUT_SDB_: SDB and DWARF. (line 105) 47730 * QCmode: Machine Modes. (line 196) 47731 * QFmode: Machine Modes. (line 54) 47732 * QImode: Machine Modes. (line 25) 47733 * 'QImode', in 'insn': Insns. (line 275) 47734 * QQmode: Machine Modes. (line 103) 47735 * qualified type: Types. (line 6) 47736 * qualified type <1>: Types for C++. (line 6) 47737 * querying function unit reservations: Processor pipeline description. 47738 (line 90) 47739 * question mark: Multi-Alternative. (line 41) 47740 * quotient: Arithmetic. (line 117) 47741 * 'r' in constraint: Simple Constraints. (line 64) 47742 * RDIV_EXPR: Unary and Binary Expressions. 47743 (line 6) 47744 * READONLY_DATA_SECTION_ASM_OP: Sections. (line 62) 47745 * real operands: SSA Operands. (line 6) 47746 * REALPART_EXPR: Unary and Binary Expressions. 47747 (line 6) 47748 * REAL_ARITHMETIC: Floating Point. (line 64) 47749 * REAL_CST: Constant expressions. 47750 (line 6) 47751 * REAL_LIBGCC_SPEC: Driver. (line 124) 47752 * REAL_NM_FILE_NAME: Macros for Initialization. 47753 (line 105) 47754 * REAL_TYPE: Types. (line 6) 47755 * REAL_VALUES_EQUAL: Floating Point. (line 31) 47756 * REAL_VALUES_LESS: Floating Point. (line 37) 47757 * REAL_VALUE_ABS: Floating Point. (line 81) 47758 * REAL_VALUE_ATOF: Floating Point. (line 48) 47759 * REAL_VALUE_FIX: Floating Point. (line 40) 47760 * REAL_VALUE_FROM_INT: Floating Point. (line 90) 47761 * REAL_VALUE_ISINF: Floating Point. (line 58) 47762 * REAL_VALUE_ISNAN: Floating Point. (line 61) 47763 * REAL_VALUE_NEGATE: Floating Point. (line 78) 47764 * REAL_VALUE_NEGATIVE: Floating Point. (line 55) 47765 * REAL_VALUE_TO_INT: Floating Point. (line 84) 47766 * REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 143) 47767 * REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 141) 47768 * REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 142) 47769 * REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 139) 47770 * REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 140) 47771 * REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 138) 47772 * REAL_VALUE_TYPE: Floating Point. (line 25) 47773 * REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 43) 47774 * recognizing insns: RTL Template. (line 6) 47775 * recog_data.operand: Instruction Output. (line 54) 47776 * RECORD_TYPE: Types. (line 6) 47777 * RECORD_TYPE <1>: Classes. (line 6) 47778 * redirect_edge_and_branch: Profile information. 47779 (line 71) 47780 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 47781 (line 90) 47782 * 'reduc_smax_M' instruction pattern: Standard Names. (line 307) 47783 * 'reduc_smin_M' instruction pattern: Standard Names. (line 307) 47784 * 'reduc_splus_M' instruction pattern: Standard Names. (line 319) 47785 * 'reduc_umax_M' instruction pattern: Standard Names. (line 313) 47786 * 'reduc_umin_M' instruction pattern: Standard Names. (line 313) 47787 * 'reduc_uplus_M' instruction pattern: Standard Names. (line 325) 47788 * reference: Types. (line 6) 47789 * REFERENCE_TYPE: Types. (line 6) 47790 * reg: Regs and Memory. (line 9) 47791 * 'reg' and '/f': Flags. (line 94) 47792 * 'reg' and '/i': Flags. (line 89) 47793 * 'reg' and '/v': Flags. (line 98) 47794 * 'reg', RTL sharing: Sharing. (line 17) 47795 * regclass_for_constraint: C Constraint Interface. 47796 (line 58) 47797 * register allocation order: Allocation Order. (line 6) 47798 * register class definitions: Register Classes. (line 6) 47799 * register class preference constraints: Class Preferences. (line 6) 47800 * register pairs: Values in Registers. 47801 (line 69) 47802 * Register Transfer Language (RTL): RTL. (line 6) 47803 * register usage: Registers. (line 6) 47804 * registers arguments: Register Arguments. (line 6) 47805 * registers in constraints: Simple Constraints. (line 64) 47806 * REGISTER_MOVE_COST: Costs. (line 9) 47807 * REGISTER_NAMES: Instruction Output. (line 8) 47808 * register_operand: Machine-Independent Predicates. 47809 (line 29) 47810 * REGISTER_PREFIX: Instruction Output. (line 150) 47811 * REGISTER_TARGET_PRAGMAS: Misc. (line 379) 47812 * REGMODE_NATURAL_SIZE: Values in Registers. 47813 (line 49) 47814 * REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 172) 47815 * REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 150) 47816 * REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 160) 47817 * REGNO_OK_FOR_BASE_P: Register Classes. (line 146) 47818 * REGNO_OK_FOR_INDEX_P: Register Classes. (line 186) 47819 * REGNO_REG_CLASS: Register Classes. (line 105) 47820 * regs_ever_live: Function Entry. (line 21) 47821 * regular expressions: Processor pipeline description. 47822 (line 6) 47823 * regular expressions <1>: Processor pipeline description. 47824 (line 105) 47825 * REG_ALLOC_ORDER: Allocation Order. (line 8) 47826 * REG_BR_PRED: Insns. (line 532) 47827 * REG_BR_PROB: Insns. (line 526) 47828 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 47829 (line 82) 47830 * REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 47831 (line 52) 47832 * REG_CC_SETTER: Insns. (line 498) 47833 * REG_CC_USER: Insns. (line 498) 47834 * reg_class_contents: Register Basics. (line 59) 47835 * REG_CLASS_CONTENTS: Register Classes. (line 91) 47836 * REG_CLASS_FROM_CONSTRAINT: Old Constraints. (line 33) 47837 * REG_CLASS_FROM_LETTER: Old Constraints. (line 25) 47838 * REG_CLASS_NAMES: Register Classes. (line 86) 47839 * REG_CROSSING_JUMP: Insns. (line 412) 47840 * REG_DEAD: Insns. (line 364) 47841 * REG_DEAD, REG_UNUSED: Liveness information. 47842 (line 32) 47843 * REG_DEP_ANTI: Insns. (line 520) 47844 * REG_DEP_OUTPUT: Insns. (line 516) 47845 * REG_DEP_TRUE: Insns. (line 513) 47846 * REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 109) 47847 * REG_EQUAL: Insns. (line 427) 47848 * REG_EQUIV: Insns. (line 427) 47849 * REG_EXPR: Special Accessors. (line 58) 47850 * REG_FRAME_RELATED_EXPR: Insns. (line 538) 47851 * REG_FUNCTION_VALUE_P: Flags. (line 89) 47852 * REG_INC: Insns. (line 380) 47853 * 'reg_label' and '/v': Flags. (line 65) 47854 * REG_LABEL_OPERAND: Insns. (line 394) 47855 * REG_LABEL_TARGET: Insns. (line 403) 47856 * reg_names: Register Basics. (line 59) 47857 * reg_names <1>: Instruction Output. (line 107) 47858 * REG_NONNEG: Insns. (line 386) 47859 * REG_NOTES: Insns. (line 328) 47860 * REG_NOTE_KIND: Insns. (line 353) 47861 * REG_OFFSET: Special Accessors. (line 62) 47862 * REG_OK_STRICT: Addressing Modes. (line 99) 47863 * REG_PARM_STACK_SPACE: Stack Arguments. (line 58) 47864 * 'REG_PARM_STACK_SPACE', and 'TARGET_FUNCTION_ARG': Register Arguments. 47865 (line 50) 47866 * REG_POINTER: Flags. (line 94) 47867 * REG_SETJMP: Insns. (line 421) 47868 * REG_UNUSED: Insns. (line 373) 47869 * REG_USERVAR_P: Flags. (line 98) 47870 * REG_VALUE_IN_UNWIND_CONTEXT: Frame Registers. (line 158) 47871 * REG_WORDS_BIG_ENDIAN: Storage Layout. (line 35) 47872 * relative costs: Costs. (line 6) 47873 * RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 262) 47874 * reloading: RTL passes. (line 182) 47875 * reload_completed: Standard Names. (line 1180) 47876 * 'reload_in' instruction pattern: Standard Names. (line 98) 47877 * reload_in_progress: Standard Names. (line 57) 47878 * 'reload_out' instruction pattern: Standard Names. (line 98) 47879 * remainder: Arithmetic. (line 137) 47880 * 'remainderM3' instruction pattern: Standard Names. (line 549) 47881 * reorder: GTY Options. (line 220) 47882 * representation of RTL: RTL. (line 6) 47883 * reservation delays: Processor pipeline description. 47884 (line 6) 47885 * 'restore_stack_block' instruction pattern: Standard Names. (line 1312) 47886 * 'restore_stack_function' instruction pattern: Standard Names. 47887 (line 1312) 47888 * 'restore_stack_nonlocal' instruction pattern: Standard Names. 47889 (line 1312) 47890 * rest_of_decl_compilation: Parsing pass. (line 51) 47891 * rest_of_type_compilation: Parsing pass. (line 51) 47892 * RESULT_DECL: Declarations. (line 6) 47893 * return: Side Effects. (line 72) 47894 * 'return' instruction pattern: Standard Names. (line 1154) 47895 * return values in registers: Scalar Return. (line 6) 47896 * returning aggregate values: Aggregate Return. (line 6) 47897 * returning structures and unions: Interface. (line 10) 47898 * RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 64) 47899 * RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 133) 47900 * RETURN_ADDR_OFFSET: Exception Handling. (line 59) 47901 * RETURN_ADDR_RTX: Frame Layout. (line 122) 47902 * RETURN_EXPR: Statements for C++. (line 6) 47903 * RETURN_STMT: Statements for C++. (line 6) 47904 * return_val: Flags. (line 274) 47905 * 'return_val', in 'call_insn': Flags. (line 24) 47906 * 'return_val', in 'reg': Flags. (line 89) 47907 * 'return_val', in 'symbol_ref': Flags. (line 202) 47908 * reverse probability: Profile information. 47909 (line 66) 47910 * REVERSE_CONDITION: MODE_CC Condition Codes. 47911 (line 91) 47912 * REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 47913 (line 77) 47914 * right rotate: Arithmetic. (line 196) 47915 * right shift: Arithmetic. (line 191) 47916 * 'rintM2' instruction pattern: Standard Names. (line 662) 47917 * RISC: Processor pipeline description. 47918 (line 6) 47919 * RISC <1>: Processor pipeline description. 47920 (line 223) 47921 * roots, marking: GGC Roots. (line 6) 47922 * rotate: Arithmetic. (line 196) 47923 * rotate <1>: Arithmetic. (line 196) 47924 * rotatert: Arithmetic. (line 196) 47925 * 'rotlM3' instruction pattern: Standard Names. (line 514) 47926 * 'rotrM3' instruction pattern: Standard Names. (line 514) 47927 * 'roundM2' instruction pattern: Standard Names. (line 638) 47928 * ROUND_DIV_EXPR: Unary and Binary Expressions. 47929 (line 6) 47930 * ROUND_MOD_EXPR: Unary and Binary Expressions. 47931 (line 6) 47932 * ROUND_TOWARDS_ZERO: Storage Layout. (line 471) 47933 * ROUND_TYPE_ALIGN: Storage Layout. (line 419) 47934 * RSHIFT_EXPR: Unary and Binary Expressions. 47935 (line 6) 47936 * RTL addition: Arithmetic. (line 14) 47937 * RTL addition with signed saturation: Arithmetic. (line 14) 47938 * RTL addition with unsigned saturation: Arithmetic. (line 14) 47939 * RTL classes: RTL Classes. (line 6) 47940 * RTL comparison: Arithmetic. (line 46) 47941 * RTL comparison operations: Comparisons. (line 6) 47942 * RTL constant expression types: Constants. (line 6) 47943 * RTL constants: Constants. (line 6) 47944 * RTL declarations: RTL Declarations. (line 6) 47945 * RTL difference: Arithmetic. (line 38) 47946 * RTL expression: RTL Objects. (line 6) 47947 * RTL expressions for arithmetic: Arithmetic. (line 6) 47948 * RTL format: RTL Classes. (line 72) 47949 * RTL format characters: RTL Classes. (line 77) 47950 * RTL function-call insns: Calls. (line 6) 47951 * RTL insn template: RTL Template. (line 6) 47952 * RTL integers: RTL Objects. (line 6) 47953 * RTL memory expressions: Regs and Memory. (line 6) 47954 * RTL object types: RTL Objects. (line 6) 47955 * RTL postdecrement: Incdec. (line 6) 47956 * RTL postincrement: Incdec. (line 6) 47957 * RTL predecrement: Incdec. (line 6) 47958 * RTL preincrement: Incdec. (line 6) 47959 * RTL register expressions: Regs and Memory. (line 6) 47960 * RTL representation: RTL. (line 6) 47961 * RTL side effect expressions: Side Effects. (line 6) 47962 * RTL strings: RTL Objects. (line 6) 47963 * RTL structure sharing assumptions: Sharing. (line 6) 47964 * RTL subtraction: Arithmetic. (line 38) 47965 * RTL subtraction with signed saturation: Arithmetic. (line 38) 47966 * RTL subtraction with unsigned saturation: Arithmetic. (line 38) 47967 * RTL sum: Arithmetic. (line 14) 47968 * RTL vectors: RTL Objects. (line 6) 47969 * RTL_CONST_CALL_P: Flags. (line 19) 47970 * RTL_CONST_OR_PURE_CALL_P: Flags. (line 29) 47971 * RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33) 47972 * RTL_PURE_CALL_P: Flags. (line 24) 47973 * RTX (See RTL): RTL Objects. (line 6) 47974 * RTX codes, classes of: RTL Classes. (line 6) 47975 * RTX_FRAME_RELATED_P: Flags. (line 107) 47976 * run-time conventions: Interface. (line 6) 47977 * run-time target specification: Run-time Target. (line 6) 47978 * 's' in constraint: Simple Constraints. (line 100) 47979 * same_type_p: Types. (line 86) 47980 * SAmode: Machine Modes. (line 147) 47981 * 'satfractMN2' instruction pattern: Standard Names. (line 919) 47982 * 'satfractunsMN2' instruction pattern: Standard Names. (line 932) 47983 * satisfies_constraint_: C Constraint Interface. 47984 (line 46) 47985 * sat_fract: Conversions. (line 90) 47986 * SAVE_EXPR: Unary and Binary Expressions. 47987 (line 6) 47988 * 'save_stack_block' instruction pattern: Standard Names. (line 1312) 47989 * 'save_stack_function' instruction pattern: Standard Names. (line 1312) 47990 * 'save_stack_nonlocal' instruction pattern: Standard Names. (line 1312) 47991 * SBSS_SECTION_ASM_OP: Sections. (line 75) 47992 * Scalar evolutions: Scalar evolutions. (line 6) 47993 * scalars, returned as values: Scalar Return. (line 6) 47994 * SCHED_GROUP_P: Flags. (line 148) 47995 * SCmode: Machine Modes. (line 196) 47996 * scratch: Regs and Memory. (line 294) 47997 * scratch operands: Regs and Memory. (line 294) 47998 * 'scratch', RTL sharing: Sharing. (line 35) 47999 * scratch_operand: Machine-Independent Predicates. 48000 (line 49) 48001 * SDATA_SECTION_ASM_OP: Sections. (line 57) 48002 * SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 123) 48003 * SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 118) 48004 * SDB_DEBUGGING_INFO: SDB and DWARF. (line 8) 48005 * SDB_DELIM: SDB and DWARF. (line 111) 48006 * SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 128) 48007 * SDmode: Machine Modes. (line 85) 48008 * 'sdot_prodM' instruction pattern: Standard Names. (line 331) 48009 * search options: Including Patterns. (line 47) 48010 * SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 391) 48011 * SECONDARY_MEMORY_NEEDED: Register Classes. (line 447) 48012 * SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 466) 48013 * SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 457) 48014 * SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 392) 48015 * SECONDARY_RELOAD_CLASS: Register Classes. (line 390) 48016 * SELECT_CC_MODE: MODE_CC Condition Codes. 48017 (line 6) 48018 * sequence: Side Effects. (line 258) 48019 * Sequence iterators: Sequence iterators. (line 6) 48020 * set: Side Effects. (line 15) 48021 * 'set' and '/f': Flags. (line 107) 48022 * 'setmemM' instruction pattern: Standard Names. (line 787) 48023 * SETUP_FRAME_ADDRESSES: Frame Layout. (line 100) 48024 * SET_ASM_OP: Label Output. (line 416) 48025 * SET_ASM_OP <1>: Label Output. (line 427) 48026 * set_attr: Tagging Insns. (line 31) 48027 * set_attr_alternative: Tagging Insns. (line 49) 48028 * set_bb_seq: GIMPLE sequences. (line 75) 48029 * SET_BY_PIECES_P: Costs. (line 205) 48030 * SET_DEST: Side Effects. (line 69) 48031 * SET_IS_RETURN_P: Flags. (line 157) 48032 * SET_LABEL_KIND: Insns. (line 146) 48033 * set_optab_libfunc: Library Calls. (line 15) 48034 * SET_RATIO: Costs. (line 193) 48035 * SET_SRC: Side Effects. (line 69) 48036 * 'set_thread_pointerMODE' instruction pattern: Standard Names. 48037 (line 1856) 48038 * SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 48039 * SET_TYPE_STRUCTURAL_EQUALITY <1>: Types. (line 81) 48040 * SFmode: Machine Modes. (line 66) 48041 * SF_SIZE: Type Layout. (line 135) 48042 * sharing of RTL components: Sharing. (line 6) 48043 * shift: Arithmetic. (line 174) 48044 * SHIFT_COUNT_TRUNCATED: Misc. (line 112) 48045 * SHLIB_SUFFIX: Macros for Initialization. 48046 (line 133) 48047 * SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 82) 48048 * SHORT_FRACT_TYPE_SIZE: Type Layout. (line 62) 48049 * SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 86) 48050 * SHORT_TYPE_SIZE: Type Layout. (line 15) 48051 * 'sibcall_epilogue' instruction pattern: Standard Names. (line 1519) 48052 * sibling call: Edges. (line 121) 48053 * SIBLING_CALL_P: Flags. (line 161) 48054 * signed division: Arithmetic. (line 117) 48055 * signed division with signed saturation: Arithmetic. (line 117) 48056 * signed maximum: Arithmetic. (line 142) 48057 * signed minimum: Arithmetic. (line 142) 48058 * sign_extend: Conversions. (line 23) 48059 * sign_extract: Bit-Fields. (line 8) 48060 * 'sign_extract', canonicalization of: Insn Canonicalizations. 48061 (line 87) 48062 * SIG_ATOMIC_TYPE: Type Layout. (line 251) 48063 * SImode: Machine Modes. (line 37) 48064 * simple constraints: Simple Constraints. (line 6) 48065 * simple_return: Side Effects. (line 86) 48066 * 'simple_return' instruction pattern: Standard Names. (line 1169) 48067 * sincos math function, implicit usage: Library Calls. (line 78) 48068 * 'sincosM3' instruction pattern: Standard Names. (line 574) 48069 * 'sinM2' instruction pattern: Standard Names. (line 566) 48070 * SIZETYPE: Type Layout. (line 190) 48071 * SIZE_ASM_OP: Label Output. (line 33) 48072 * SIZE_TYPE: Type Layout. (line 174) 48073 * skip: GTY Options. (line 76) 48074 * SLOW_BYTE_ACCESS: Costs. (line 117) 48075 * SLOW_UNALIGNED_ACCESS: Costs. (line 132) 48076 * smax: Arithmetic. (line 142) 48077 * smin: Arithmetic. (line 142) 48078 * sms, swing, software pipelining: RTL passes. (line 131) 48079 * 'smulM3_highpart' instruction pattern: Standard Names. (line 429) 48080 * soft float library: Soft float library routines. 48081 (line 6) 48082 * special: GTY Options. (line 307) 48083 * special predicates: Predicates. (line 31) 48084 * SPECS: Target Fragment. (line 191) 48085 * speed of instructions: Costs. (line 6) 48086 * splitting instructions: Insn Splitting. (line 6) 48087 * split_block: Maintaining the CFG. 48088 (line 97) 48089 * SQmode: Machine Modes. (line 111) 48090 * sqrt: Arithmetic. (line 207) 48091 * 'sqrtM2' instruction pattern: Standard Names. (line 532) 48092 * square root: Arithmetic. (line 207) 48093 * SSA: SSA. (line 6) 48094 * 'ssaddM3' instruction pattern: Standard Names. (line 266) 48095 * 'ssashlM3' instruction pattern: Standard Names. (line 504) 48096 * SSA_NAME_DEF_STMT: SSA. (line 218) 48097 * SSA_NAME_VERSION: SSA. (line 223) 48098 * 'ssdivM3' instruction pattern: Standard Names. (line 266) 48099 * 'ssmaddMN4' instruction pattern: Standard Names. (line 452) 48100 * 'ssmsubMN4' instruction pattern: Standard Names. (line 476) 48101 * 'ssmulM3' instruction pattern: Standard Names. (line 266) 48102 * 'ssnegM2' instruction pattern: Standard Names. (line 526) 48103 * 'sssubM3' instruction pattern: Standard Names. (line 266) 48104 * 'ssum_widenM3' instruction pattern: Standard Names. (line 340) 48105 * ss_abs: Arithmetic. (line 201) 48106 * ss_ashift: Arithmetic. (line 174) 48107 * ss_div: Arithmetic. (line 117) 48108 * ss_minus: Arithmetic. (line 38) 48109 * ss_mult: Arithmetic. (line 93) 48110 * ss_neg: Arithmetic. (line 82) 48111 * ss_plus: Arithmetic. (line 14) 48112 * ss_truncate: Conversions. (line 43) 48113 * stack arguments: Stack Arguments. (line 6) 48114 * stack frame layout: Frame Layout. (line 6) 48115 * stack smashing protection: Stack Smashing Protection. 48116 (line 6) 48117 * STACK_ALIGNMENT_NEEDED: Frame Layout. (line 47) 48118 * STACK_BOUNDARY: Storage Layout. (line 144) 48119 * STACK_CHECK_BUILTIN: Stack Checking. (line 31) 48120 * STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 82) 48121 * STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 73) 48122 * STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 89) 48123 * STACK_CHECK_MOVING_SP: Stack Checking. (line 53) 48124 * STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 45) 48125 * STACK_CHECK_PROTECT: Stack Checking. (line 62) 48126 * STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 38) 48127 * STACK_DYNAMIC_OFFSET: Frame Layout. (line 73) 48128 * 'STACK_DYNAMIC_OFFSET' and virtual registers: Regs and Memory. 48129 (line 83) 48130 * STACK_GROWS_DOWNWARD: Frame Layout. (line 8) 48131 * STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 83) 48132 * STACK_POINTER_OFFSET: Frame Layout. (line 57) 48133 * 'STACK_POINTER_OFFSET' and virtual registers: Regs and Memory. 48134 (line 93) 48135 * STACK_POINTER_REGNUM: Frame Registers. (line 8) 48136 * 'STACK_POINTER_REGNUM' and virtual registers: Regs and Memory. 48137 (line 83) 48138 * stack_pointer_rtx: Frame Registers. (line 104) 48139 * 'stack_protect_set' instruction pattern: Standard Names. (line 1866) 48140 * 'stack_protect_test' instruction pattern: Standard Names. (line 1877) 48141 * STACK_PUSH_CODE: Frame Layout. (line 16) 48142 * STACK_REGS: Stack Registers. (line 19) 48143 * STACK_REG_COVER_CLASS: Stack Registers. (line 22) 48144 * STACK_SAVEAREA_MODE: Storage Layout. (line 435) 48145 * STACK_SIZE_MODE: Storage Layout. (line 446) 48146 * STACK_SLOT_ALIGNMENT: Storage Layout. (line 267) 48147 * standard pattern names: Standard Names. (line 6) 48148 * STANDARD_STARTFILE_PREFIX: Driver. (line 274) 48149 * STANDARD_STARTFILE_PREFIX_1: Driver. (line 281) 48150 * STANDARD_STARTFILE_PREFIX_2: Driver. (line 288) 48151 * STARTFILE_SPEC: Driver. (line 147) 48152 * STARTING_FRAME_OFFSET: Frame Layout. (line 38) 48153 * 'STARTING_FRAME_OFFSET' and virtual registers: Regs and Memory. 48154 (line 74) 48155 * Statement and operand traversals: Statement and operand traversals. 48156 (line 6) 48157 * Statement Sequences: Statement Sequences. 48158 (line 6) 48159 * Statements: Statements. (line 6) 48160 * statements: Function Properties. 48161 (line 6) 48162 * statements <1>: Statements for C++. (line 6) 48163 * Static profile estimation: Profile information. 48164 (line 24) 48165 * static single assignment: SSA. (line 6) 48166 * STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 77) 48167 * STATIC_CHAIN_REGNUM: Frame Registers. (line 76) 48168 * 'stdarg.h' and register arguments: Register Arguments. (line 45) 48169 * STDC_0_IN_SYSTEM_HEADERS: Misc. (line 350) 48170 * STMT_EXPR: Unary and Binary Expressions. 48171 (line 6) 48172 * STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 48173 * storage layout: Storage Layout. (line 6) 48174 * STORE_BY_PIECES_P: Costs. (line 212) 48175 * STORE_FLAG_VALUE: Misc. (line 201) 48176 * 'store_multiple' instruction pattern: Standard Names. (line 159) 48177 * strcpy: Storage Layout. (line 228) 48178 * STRICT_ALIGNMENT: Storage Layout. (line 317) 48179 * strict_low_part: RTL Declarations. (line 9) 48180 * strict_memory_address_p: Addressing Modes. (line 186) 48181 * STRING_CST: Constant expressions. 48182 (line 6) 48183 * STRING_POOL_ADDRESS_P: Flags. (line 165) 48184 * 'strlenM' instruction pattern: Standard Names. (line 854) 48185 * structure value address: Aggregate Return. (line 6) 48186 * structures, returning: Interface. (line 10) 48187 * STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 309) 48188 * 'subM3' instruction pattern: Standard Names. (line 266) 48189 * SUBOBJECT: Statements for C++. (line 6) 48190 * SUBOBJECT_CLEANUP: Statements for C++. (line 6) 48191 * subreg: Regs and Memory. (line 97) 48192 * 'subreg' and '/s': Flags. (line 187) 48193 * 'subreg' and '/u': Flags. (line 180) 48194 * 'subreg' and '/u' and '/v': Flags. (line 170) 48195 * 'subreg', in 'strict_low_part': RTL Declarations. (line 9) 48196 * SUBREG_BYTE: Regs and Memory. (line 285) 48197 * SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 170) 48198 * SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 180) 48199 * SUBREG_PROMOTED_VAR_P: Flags. (line 187) 48200 * SUBREG_REG: Regs and Memory. (line 285) 48201 * subst iterators in '.md' files: Subst Iterators. (line 6) 48202 * SUCCESS_EXIT_CODE: Host Misc. (line 12) 48203 * SUPPORTS_INIT_PRIORITY: Macros for Initialization. 48204 (line 57) 48205 * SUPPORTS_ONE_ONLY: Label Output. (line 255) 48206 * SUPPORTS_WEAK: Label Output. (line 229) 48207 * SWITCHABLE_TARGET: Run-time Target. (line 164) 48208 * SWITCH_BODY: Statements for C++. (line 6) 48209 * SWITCH_COND: Statements for C++. (line 6) 48210 * SWITCH_STMT: Statements for C++. (line 6) 48211 * symbolic label: Sharing. (line 20) 48212 * SYMBOL_FLAG_ANCHOR: Special Accessors. (line 117) 48213 * SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 99) 48214 * SYMBOL_FLAG_FUNCTION: Special Accessors. (line 92) 48215 * SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 113) 48216 * SYMBOL_FLAG_LOCAL: Special Accessors. (line 95) 48217 * SYMBOL_FLAG_SMALL: Special Accessors. (line 104) 48218 * SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 108) 48219 * symbol_ref: Constants. (line 86) 48220 * 'symbol_ref' and '/f': Flags. (line 165) 48221 * 'symbol_ref' and '/i': Flags. (line 202) 48222 * 'symbol_ref' and '/u': Flags. (line 10) 48223 * 'symbol_ref' and '/v': Flags. (line 206) 48224 * 'symbol_ref', RTL sharing: Sharing. (line 20) 48225 * SYMBOL_REF_ANCHOR_P: Special Accessors. (line 117) 48226 * SYMBOL_REF_BLOCK: Special Accessors. (line 130) 48227 * SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 135) 48228 * SYMBOL_REF_CONSTANT: Special Accessors. (line 78) 48229 * SYMBOL_REF_DATA: Special Accessors. (line 82) 48230 * SYMBOL_REF_DECL: Special Accessors. (line 67) 48231 * SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 99) 48232 * SYMBOL_REF_FLAG: Flags. (line 206) 48233 * 'SYMBOL_REF_FLAG', in 'TARGET_ENCODE_SECTION_INFO': Sections. 48234 (line 277) 48235 * SYMBOL_REF_FLAGS: Special Accessors. (line 86) 48236 * SYMBOL_REF_FUNCTION_P: Special Accessors. (line 92) 48237 * SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 113) 48238 * SYMBOL_REF_LOCAL_P: Special Accessors. (line 95) 48239 * SYMBOL_REF_SMALL_P: Special Accessors. (line 104) 48240 * SYMBOL_REF_TLS_MODEL: Special Accessors. (line 108) 48241 * SYMBOL_REF_USED: Flags. (line 197) 48242 * SYMBOL_REF_WEAK: Flags. (line 202) 48243 * 'sync_addMODE' instruction pattern: Standard Names. (line 1622) 48244 * 'sync_andMODE' instruction pattern: Standard Names. (line 1622) 48245 * 'sync_compare_and_swapMODE' instruction pattern: Standard Names. 48246 (line 1581) 48247 * 'sync_iorMODE' instruction pattern: Standard Names. (line 1622) 48248 * 'sync_lock_releaseMODE' instruction pattern: Standard Names. 48249 (line 1691) 48250 * 'sync_lock_test_and_setMODE' instruction pattern: Standard Names. 48251 (line 1664) 48252 * 'sync_nandMODE' instruction pattern: Standard Names. (line 1622) 48253 * 'sync_new_addMODE' instruction pattern: Standard Names. (line 1656) 48254 * 'sync_new_andMODE' instruction pattern: Standard Names. (line 1656) 48255 * 'sync_new_iorMODE' instruction pattern: Standard Names. (line 1656) 48256 * 'sync_new_nandMODE' instruction pattern: Standard Names. (line 1656) 48257 * 'sync_new_subMODE' instruction pattern: Standard Names. (line 1656) 48258 * 'sync_new_xorMODE' instruction pattern: Standard Names. (line 1656) 48259 * 'sync_old_addMODE' instruction pattern: Standard Names. (line 1638) 48260 * 'sync_old_andMODE' instruction pattern: Standard Names. (line 1638) 48261 * 'sync_old_iorMODE' instruction pattern: Standard Names. (line 1638) 48262 * 'sync_old_nandMODE' instruction pattern: Standard Names. (line 1638) 48263 * 'sync_old_subMODE' instruction pattern: Standard Names. (line 1638) 48264 * 'sync_old_xorMODE' instruction pattern: Standard Names. (line 1638) 48265 * 'sync_subMODE' instruction pattern: Standard Names. (line 1622) 48266 * 'sync_xorMODE' instruction pattern: Standard Names. (line 1622) 48267 * SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 176) 48268 * SYSROOT_SUFFIX_SPEC: Driver. (line 171) 48269 * 't-TARGET': Target Fragment. (line 6) 48270 * table jump: Basic Blocks. (line 67) 48271 * 'tablejump' instruction pattern: Standard Names. (line 1242) 48272 * tag: GTY Options. (line 82) 48273 * tagging insns: Tagging Insns. (line 6) 48274 * tail calls: Tail Calls. (line 6) 48275 * TAmode: Machine Modes. (line 155) 48276 * target attributes: Target Attributes. (line 6) 48277 * target description macros: Target Macros. (line 6) 48278 * target functions: Target Structure. (line 6) 48279 * target hooks: Target Structure. (line 6) 48280 * target makefile fragment: Target Fragment. (line 6) 48281 * target specifications: Run-time Target. (line 6) 48282 * targetm: Target Structure. (line 6) 48283 * targets, makefile: Makefile. (line 6) 48284 * TARGET_ADDRESS_COST: Costs. (line 300) 48285 * TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 48286 (line 43) 48287 * TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 48288 (line 85) 48289 * TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 48290 (line 61) 48291 * TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 48292 (line 69) 48293 * TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 48294 (line 36) 48295 * TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 48296 (line 76) 48297 * TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 48298 (line 50) 48299 * TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 394) 48300 * TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 701) 48301 * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 980) 48302 * TARGET_ALWAYS_STRIP_DOTDOT: Driver. (line 246) 48303 * TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 81) 48304 * TARGET_ARM_EABI_UNWINDER: Exception Region Output. 48305 (line 127) 48306 * TARGET_ARRAY_MODE_SUPPORTED_P: Register Arguments. (line 333) 48307 * TARGET_ASAN_SHADOW_OFFSET: Misc. (line 1008) 48308 * TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 9) 48309 * TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 7) 48310 * TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 8) 48311 * TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 10) 48312 * TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 266) 48313 * TARGET_ASM_BYTE_OP: Data Output. (line 6) 48314 * TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 202) 48315 * TARGET_ASM_CLOSE_PAREN: Data Output. (line 129) 48316 * TARGET_ASM_CODE_END: File Framework. (line 57) 48317 * TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 48318 (line 68) 48319 * TARGET_ASM_DECLARE_CONSTANT_NAME: Label Output. (line 149) 48320 * TARGET_ASM_DESTRUCTOR: Macros for Initialization. 48321 (line 82) 48322 * TARGET_ASM_EMIT_EXCEPT_PERSONALITY: Dispatch Tables. (line 80) 48323 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 73) 48324 * TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 61) 48325 * TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 302) 48326 * TARGET_ASM_FILE_END: File Framework. (line 35) 48327 * TARGET_ASM_FILE_START: File Framework. (line 8) 48328 * TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 16) 48329 * TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 29) 48330 * TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 82) 48331 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 59) 48332 * TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 53) 48333 * TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 65) 48334 * TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 9) 48335 * TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 213) 48336 * TARGET_ASM_FUNCTION_SECTION: File Framework. (line 121) 48337 * TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework. 48338 (line 131) 48339 * TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 194) 48340 * TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 185) 48341 * TARGET_ASM_INIT_SECTIONS: Sections. (line 159) 48342 * TARGET_ASM_INTEGER: Data Output. (line 25) 48343 * TARGET_ASM_INTERNAL_LABEL: Label Output. (line 345) 48344 * TARGET_ASM_JUMP_ALIGN_MAX_SKIP: Alignment Output. (line 21) 48345 * TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. 48346 (line 34) 48347 * TARGET_ASM_LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 68) 48348 * TARGET_ASM_LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 53) 48349 * TARGET_ASM_LTO_END: File Framework. (line 52) 48350 * TARGET_ASM_LTO_START: File Framework. (line 47) 48351 * TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 308) 48352 * TARGET_ASM_MERGEABLE_RODATA_PREFIX: Sections. (line 221) 48353 * TARGET_ASM_NAMED_SECTION: File Framework. (line 113) 48354 * TARGET_ASM_OPEN_PAREN: Data Output. (line 128) 48355 * TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 38) 48356 * TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 42) 48357 * TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 99) 48358 * TARGET_ASM_OUTPUT_IDENT: File Framework. (line 100) 48359 * TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 160) 48360 * TARGET_ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 91) 48361 * TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 162) 48362 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 207) 48363 * TARGET_ASM_RELOC_RW_MASK: Sections. (line 168) 48364 * TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 230) 48365 * TARGET_ASM_SELECT_SECTION: Sections. (line 179) 48366 * TARGET_ASM_TM_CLONE_TABLE_SECTION: Sections. (line 226) 48367 * TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 28) 48368 * TARGET_ASM_TTYPE: Exception Region Output. 48369 (line 121) 48370 * TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 13) 48371 * TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 11) 48372 * TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 12) 48373 * TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 14) 48374 * TARGET_ASM_UNIQUE_SECTION: Sections. (line 201) 48375 * TARGET_ASM_UNWIND_EMIT: Dispatch Tables. (line 87) 48376 * TARGET_ASM_UNWIND_EMIT_BEFORE_INSN: Dispatch Tables. (line 92) 48377 * TARGET_ATOMIC_TEST_AND_SET_TRUEVAL: Misc. (line 1018) 48378 * TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 10) 48379 * TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P: Target Attributes. (line 17) 48380 * TARGET_BINDS_LOCAL_P: Sections. (line 308) 48381 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 798) 48382 * TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 791) 48383 * TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 271) 48384 * TARGET_BUILTIN_DECL: Misc. (line 595) 48385 * TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 261) 48386 * TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 107) 48387 * TARGET_C99_FUNCTIONS: Library Calls. (line 70) 48388 * TARGET_CALLEE_COPIES: Register Arguments. (line 113) 48389 * TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 234) 48390 * TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 778) 48391 * TARGET_CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 48392 (line 54) 48393 * TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 292) 48394 * TARGET_CAN_ELIMINATE: Elimination. (line 73) 48395 * TARGET_CAN_FOLLOW_JUMP: Misc. (line 687) 48396 * TARGET_CAN_INLINE_P: Target Attributes. (line 157) 48397 * TARGET_CASE_VALUES_THRESHOLD: Misc. (line 46) 48398 * TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 48399 (line 119) 48400 * TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 26) 48401 * TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target. (line 119) 48402 * TARGET_CLASS_LIKELY_SPILLED_P: Register Classes. (line 489) 48403 * TARGET_CLASS_MAX_NREGS: Register Classes. (line 505) 48404 * TARGET_COMMUTATIVE_P: Misc. (line 694) 48405 * TARGET_COMPARE_VERSION_PRIORITY: Misc. (line 636) 48406 * TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 25) 48407 * TARGET_CONDITIONAL_REGISTER_USAGE: Register Basics. (line 59) 48408 * TARGET_CONST_ANCHOR: Misc. (line 991) 48409 * TARGET_CONST_NOT_OK_FOR_DEBUG_P: Addressing Modes. (line 230) 48410 * TARGET_CONVERT_TO_TYPE: Misc. (line 945) 48411 * TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 8) 48412 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 86) 48413 * TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 37) 48414 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 61) 48415 * TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 24) 48416 * TARGET_CXX_DECL_MANGLING_CONTEXT: C++ ABI. (line 92) 48417 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 52) 48418 * TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 17) 48419 * TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 11) 48420 * TARGET_CXX_GUARD_TYPE: C++ ABI. (line 6) 48421 * TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 28) 48422 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 42) 48423 * TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 68) 48424 * TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 73) 48425 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 79) 48426 * TARGET_C_PREINCLUDE: Misc. (line 361) 48427 * TARGET_DEBUG_UNWIND_INFO: SDB and DWARF. (line 36) 48428 * TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 518) 48429 * TARGET_DECLSPEC: Target Attributes. (line 72) 48430 * TARGET_DEFAULT_PACK_STRUCT: Misc. (line 438) 48431 * TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 166) 48432 * TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 55) 48433 * TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 430) 48434 * TARGET_DELAY_SCHED2: SDB and DWARF. (line 65) 48435 * TARGET_DELAY_VARTRACK: SDB and DWARF. (line 69) 48436 * TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 221) 48437 * TARGET_DIFFERENT_ADDR_DISPLACEMENT_P: Register Classes. (line 564) 48438 * TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 55) 48439 * TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 16) 48440 * TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 169) 48441 * TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 48442 (line 104) 48443 * TARGET_EDOM: Library Calls. (line 52) 48444 * TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 67) 48445 * TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 18) 48446 * TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 23) 48447 * TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 44) 48448 * TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 35) 48449 * TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 62) 48450 * TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 48) 48451 * TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 55) 48452 * TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 40) 48453 * TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 30) 48454 * TARGET_ENCODE_SECTION_INFO: Sections. (line 251) 48455 * 'TARGET_ENCODE_SECTION_INFO' and address validation: Addressing Modes. 48456 (line 82) 48457 * 'TARGET_ENCODE_SECTION_INFO' usage: Instruction Output. (line 127) 48458 * TARGET_ENUM_VA_LIST_P: Register Arguments. (line 275) 48459 * TARGET_EXCEPT_UNWIND_INFO: Exception Region Output. 48460 (line 45) 48461 * TARGET_EXECUTABLE_SUFFIX: Misc. (line 752) 48462 * TARGET_EXPAND_BUILTIN: Misc. (line 605) 48463 * TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 64) 48464 * TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 524) 48465 * TARGET_EXPR: Unary and Binary Expressions. 48466 (line 6) 48467 * TARGET_EXTRA_INCLUDES: Misc. (line 837) 48468 * TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 20) 48469 * TARGET_EXTRA_PRE_INCLUDES: Misc. (line 844) 48470 * TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 48471 (line 104) 48472 * TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 521) 48473 * target_flags: Run-time Target. (line 51) 48474 * TARGET_FLAGS_REGNUM: Register Arguments. (line 391) 48475 * TARGET_FLT_EVAL_METHOD: Type Layout. (line 147) 48476 * TARGET_FN_ABI_VA_LIST: Register Arguments. (line 287) 48477 * TARGET_FOLD_BUILTIN: Misc. (line 627) 48478 * TARGET_FORCE_AT_COMP_DIR: SDB and DWARF. (line 60) 48479 * TARGET_FORMAT_TYPES: Misc. (line 865) 48480 * TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 8) 48481 * TARGET_FUNCTION_ARG: Register Arguments. (line 10) 48482 * TARGET_FUNCTION_ARG_ADVANCE: Register Arguments. (line 184) 48483 * TARGET_FUNCTION_ARG_BOUNDARY: Register Arguments. (line 238) 48484 * TARGET_FUNCTION_ARG_ROUND_BOUNDARY: Register Arguments. (line 244) 48485 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 93) 48486 * TARGET_FUNCTION_INCOMING_ARG: Register Arguments. (line 65) 48487 * TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 6) 48488 * TARGET_FUNCTION_VALUE: Scalar Return. (line 9) 48489 * TARGET_FUNCTION_VALUE_REGNO_P: Scalar Return. (line 96) 48490 * TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc. (line 652) 48491 * TARGET_GET_DRAP_RTX: Misc. (line 974) 48492 * TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc. (line 645) 48493 * TARGET_GET_PCH_VALIDITY: PCH Target. (line 6) 48494 * TARGET_GET_RAW_ARG_MODE: Aggregate Return. (line 82) 48495 * TARGET_GET_RAW_RESULT_MODE: Aggregate Return. (line 76) 48496 * TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 297) 48497 * TARGET_HANDLE_C_OPTION: Run-time Target. (line 73) 48498 * TARGET_HANDLE_OPTION: Run-time Target. (line 59) 48499 * TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 48500 (line 141) 48501 * TARGET_HAS_SINCOS: Library Calls. (line 78) 48502 * TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 812) 48503 * TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 48504 (line 63) 48505 * TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 139) 48506 * TARGET_HAVE_SRODATA_SECTION: Sections. (line 297) 48507 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 144) 48508 * TARGET_HAVE_TLS: Sections. (line 317) 48509 * TARGET_INIT_BUILTINS: Misc. (line 579) 48510 * TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 48511 (line 113) 48512 * TARGET_INIT_LIBFUNCS: Library Calls. (line 15) 48513 * TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 80) 48514 * TARGET_INSTANTIATE_DECLS: Storage Layout. (line 532) 48515 * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 898) 48516 * TARGET_INVALID_BINARY_OP: Misc. (line 917) 48517 * TARGET_INVALID_CONVERSION: Misc. (line 904) 48518 * TARGET_INVALID_PARAMETER_TYPE: Misc. (line 923) 48519 * TARGET_INVALID_RETURN_TYPE: Misc. (line 930) 48520 * TARGET_INVALID_UNARY_OP: Misc. (line 910) 48521 * TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 659) 48522 * TARGET_IN_SMALL_DATA_P: Sections. (line 293) 48523 * TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 48) 48524 * TARGET_LEGITIMATE_COMBINED_INSN: Misc. (line 673) 48525 * TARGET_LEGITIMATE_CONSTANT_P: Addressing Modes. (line 213) 48526 * TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 129) 48527 * TARGET_LIBCALL_VALUE: Scalar Return. (line 65) 48528 * TARGET_LIBFUNC_GNU_PREFIX: Library Calls. (line 24) 48529 * TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 455) 48530 * TARGET_LIBGCC_SDATA_SECTION: Sections. (line 131) 48531 * TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 461) 48532 * TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 42) 48533 * TARGET_LOOP_UNROLL_ADJUST: Misc. (line 818) 48534 * TARGET_LRA_P: Register Classes. (line 548) 48535 * TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 564) 48536 * TARGET_MANGLE_ASSEMBLER_NAME: Label Output. (line 321) 48537 * TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 241) 48538 * TARGET_MANGLE_TYPE: Storage Layout. (line 536) 48539 * TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 38) 48540 * TARGET_MD_ASM_CLOBBERS: Misc. (line 483) 48541 * TARGET_MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 407) 48542 * TARGET_MEMMODEL_CHECK: Misc. (line 1013) 48543 * TARGET_MEMORY_MOVE_COST: Costs. (line 79) 48544 * TARGET_MEM_CONSTRAINT: Addressing Modes. (line 107) 48545 * TARGET_MEM_REF: Storage References. (line 6) 48546 * TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 45) 48547 * TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 37) 48548 * TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 32) 48549 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 90) 48550 * TARGET_MODE_DEPENDENT_ADDRESS_P: Addressing Modes. (line 196) 48551 * TARGET_MODE_REP_EXTENDED: Misc. (line 175) 48552 * TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 490) 48553 * TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 58) 48554 * 'TARGET_MUST_PASS_IN_STACK', and 'TARGET_FUNCTION_ARG': Register Arguments. 48555 (line 50) 48556 * TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 400) 48557 * TARGET_N_FORMAT_TYPES: Misc. (line 870) 48558 * TARGET_OBJC_CONSTRUCT_STRING_OBJECT: Run-time Target. (line 88) 48559 * TARGET_OBJC_DECLARE_CLASS_DEFINITION: Run-time Target. (line 109) 48560 * TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target. 48561 (line 104) 48562 * TARGET_OBJECT_SUFFIX: Misc. (line 747) 48563 * TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 45) 48564 * TARGET_OPTF: Misc. (line 852) 48565 * TARGET_OPTION_DEFAULT_PARAMS: Run-time Target. (line 160) 48566 * TARGET_OPTION_FUNCTION_VERSIONS: Target Attributes. (line 149) 48567 * TARGET_OPTION_INIT_STRUCT: Run-time Target. (line 156) 48568 * TARGET_OPTION_OPTIMIZATION_TABLE: Run-time Target. (line 142) 48569 * TARGET_OPTION_OVERRIDE: Target Attributes. (line 136) 48570 * TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 129) 48571 * TARGET_OPTION_PRINT: Target Attributes. (line 123) 48572 * TARGET_OPTION_RESTORE: Target Attributes. (line 117) 48573 * TARGET_OPTION_SAVE: Target Attributes. (line 112) 48574 * TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 100) 48575 * TARGET_OS_CPP_BUILTINS: Run-time Target. (line 41) 48576 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 874) 48577 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 880) 48578 * TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 884) 48579 * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 126) 48580 * TARGET_PASS_BY_REFERENCE: Register Arguments. (line 101) 48581 * TARGET_PCH_VALID_P: PCH Target. (line 11) 48582 * TARGET_POSIX_IO: Misc. (line 508) 48583 * TARGET_PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 284) 48584 * TARGET_PREFERRED_RELOAD_CLASS: Register Classes. (line 213) 48585 * TARGET_PREFERRED_RENAME_CLASS: Register Classes. (line 201) 48586 * TARGET_PREPARE_PCH_SAVE: PCH Target. (line 34) 48587 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 123) 48588 * TARGET_PROFILE_BEFORE_PROLOGUE: Sections. (line 301) 48589 * TARGET_PROMOTED_TYPE: Misc. (line 937) 48590 * TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 114) 48591 * TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 10) 48592 * TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 293) 48593 * TARGET_REF_MAY_ALIAS_ERRNO: Register Arguments. (line 308) 48594 * TARGET_REGISTER_MOVE_COST: Costs. (line 31) 48595 * TARGET_REGISTER_PRIORITY: Register Classes. (line 553) 48596 * TARGET_RELAXED_ORDERING: Misc. (line 889) 48597 * TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 616) 48598 * TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 15) 48599 * TARGET_RETURN_IN_MSB: Scalar Return. (line 117) 48600 * TARGET_RETURN_POPS_ARGS: Stack Arguments. (line 92) 48601 * TARGET_RTX_COSTS: Costs. (line 269) 48602 * TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 315) 48603 * TARGET_SCHED_ADJUST_COST: Scheduling. (line 35) 48604 * TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 50) 48605 * TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 272) 48606 * TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 287) 48607 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 87) 48608 * TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 234) 48609 * TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 158) 48610 * TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 142) 48611 * TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 151) 48612 * TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 130) 48613 * TARGET_SCHED_DISPATCH: Scheduling. (line 353) 48614 * TARGET_SCHED_DISPATCH_DO: Scheduling. (line 358) 48615 * TARGET_SCHED_EXPOSED_PIPELINE: Scheduling. (line 362) 48616 * TARGET_SCHED_FINISH: Scheduling. (line 108) 48617 * TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 123) 48618 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling. (line 214) 48619 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling. (line 203) 48620 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 48621 (line 165) 48622 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 48623 (line 193) 48624 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling. 48625 (line 324) 48626 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling. (line 219) 48627 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling. (line 229) 48628 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling. (line 224) 48629 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling. (line 208) 48630 * TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 291) 48631 * TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 312) 48632 * TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 267) 48633 * TARGET_SCHED_INIT: Scheduling. (line 97) 48634 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 147) 48635 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 139) 48636 * TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 115) 48637 * TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 276) 48638 * TARGET_SCHED_ISSUE_RATE: Scheduling. (line 11) 48639 * TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 245) 48640 * TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 306) 48641 * TARGET_SCHED_REASSOCIATION_WIDTH: Scheduling. (line 367) 48642 * TARGET_SCHED_REORDER: Scheduling. (line 58) 48643 * TARGET_SCHED_REORDER2: Scheduling. (line 75) 48644 * TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 283) 48645 * TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 337) 48646 * TARGET_SCHED_SMS_RES_MII: Scheduling. (line 344) 48647 * TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 294) 48648 * TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 22) 48649 * TARGET_SECONDARY_RELOAD: Register Classes. (line 312) 48650 * TARGET_SECTION_TYPE_FLAGS: File Framework. (line 149) 48651 * TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 71) 48652 * TARGET_SET_CURRENT_FUNCTION: Misc. (line 729) 48653 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 33) 48654 * TARGET_SET_UP_BY_PROLOGUE: Tail Calls. (line 29) 48655 * TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 138) 48656 * TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments. 48657 (line 357) 48658 * TARGET_SPILL_CLASS: Register Classes. (line 571) 48659 * TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 259) 48660 * TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 48661 (line 16) 48662 * TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 48663 (line 6) 48664 * TARGET_STATIC_CHAIN: Frame Registers. (line 90) 48665 * TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 107) 48666 * TARGET_STRING_OBJECT_REF_TYPE_P: Run-time Target. (line 114) 48667 * TARGET_STRIP_NAME_ENCODING: Sections. (line 288) 48668 * TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 44) 48669 * TARGET_SUPPORTS_SPLIT_STACK: Stack Smashing Protection. 48670 (line 25) 48671 * TARGET_SUPPORTS_WEAK: Label Output. (line 237) 48672 * TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 48673 (line 98) 48674 * TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 74) 48675 * TARGET_TRAMPOLINE_INIT: Trampolines. (line 54) 48676 * TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 720) 48677 * TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 48678 (line 72) 48679 * TARGET_UNWIND_WORD_MODE: Storage Layout. (line 467) 48680 * TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 970) 48681 * TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 123) 48682 * TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 53) 48683 * TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 248) 48684 * TARGET_USE_BLOCKS_FOR_DECL_P: Addressing Modes. (line 255) 48685 * TARGET_USE_JCR_SECTION: Misc. (line 952) 48686 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 66) 48687 * TARGET_VALID_POINTER_MODE: Register Arguments. (line 303) 48688 * TARGET_VECTORIZE_ADD_STMT_COST: Addressing Modes. (line 367) 48689 * TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes. 48690 (line 350) 48691 * TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 312) 48692 * TARGET_VECTORIZE_BUILTIN_GATHER: Addressing Modes. (line 398) 48693 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 271) 48694 * TARGET_VECTORIZE_BUILTIN_TM_LOAD: Addressing Modes. (line 390) 48695 * TARGET_VECTORIZE_BUILTIN_TM_STORE: Addressing Modes. (line 394) 48696 * TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 48697 (line 297) 48698 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 48699 (line 324) 48700 * TARGET_VECTORIZE_DESTROY_COST_DATA: Addressing Modes. (line 385) 48701 * TARGET_VECTORIZE_FINISH_COST: Addressing Modes. (line 378) 48702 * TARGET_VECTORIZE_INIT_COST: Addressing Modes. (line 358) 48703 * TARGET_VECTORIZE_PREFERRED_SIMD_MODE: Addressing Modes. (line 343) 48704 * TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. 48705 (line 333) 48706 * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 48707 (line 303) 48708 * TARGET_VECTORIZE_VEC_PERM_CONST_OK: Addressing Modes. (line 308) 48709 * TARGET_VECTOR_ALIGNMENT: Storage Layout. (line 260) 48710 * TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 327) 48711 * TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 346) 48712 * TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 340) 48713 * TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 329) 48714 * TARGET_WANT_DEBUG_PUB_SECTIONS: SDB and DWARF. (line 55) 48715 * TARGET_WARN_FUNC_RETURN: Tail Calls. (line 35) 48716 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 273) 48717 * TCmode: Machine Modes. (line 196) 48718 * TDmode: Machine Modes. (line 94) 48719 * TEMPLATE_DECL: Declarations. (line 6) 48720 * Temporaries: Temporaries. (line 6) 48721 * termination routines: Initialization. (line 6) 48722 * testing constraints: C Constraint Interface. 48723 (line 6) 48724 * TEXT_SECTION_ASM_OP: Sections. (line 37) 48725 * TFmode: Machine Modes. (line 98) 48726 * TF_SIZE: Type Layout. (line 138) 48727 * THEN_CLAUSE: Statements for C++. (line 6) 48728 * THREAD_MODEL_SPEC: Driver. (line 162) 48729 * THROW_EXPR: Unary and Binary Expressions. 48730 (line 6) 48731 * THUNK_DECL: Declarations. (line 6) 48732 * THUNK_DELTA: Declarations. (line 6) 48733 * TImode: Machine Modes. (line 48) 48734 * 'TImode', in 'insn': Insns. (line 275) 48735 * TLS_COMMON_ASM_OP: Sections. (line 80) 48736 * TLS_SECTION_ASM_FLAG: Sections. (line 85) 48737 * 'tm.h' macros: Target Macros. (line 6) 48738 * TQFmode: Machine Modes. (line 62) 48739 * TQmode: Machine Modes. (line 119) 48740 * trampolines for nested functions: Trampolines. (line 6) 48741 * TRAMPOLINE_ALIGNMENT: Trampolines. (line 48) 48742 * TRAMPOLINE_SECTION: Trampolines. (line 39) 48743 * TRAMPOLINE_SIZE: Trampolines. (line 44) 48744 * TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 110) 48745 * 'trap' instruction pattern: Standard Names. (line 1529) 48746 * tree: Tree overview. (line 6) 48747 * tree <1>: Macros and Functions. 48748 (line 6) 48749 * Tree SSA: Tree SSA. (line 6) 48750 * TREE_CHAIN: Macros and Functions. 48751 (line 6) 48752 * TREE_CODE: Tree overview. (line 6) 48753 * tree_int_cst_equal: Constant expressions. 48754 (line 6) 48755 * TREE_INT_CST_HIGH: Constant expressions. 48756 (line 6) 48757 * TREE_INT_CST_LOW: Constant expressions. 48758 (line 6) 48759 * tree_int_cst_lt: Constant expressions. 48760 (line 6) 48761 * TREE_LIST: Containers. (line 6) 48762 * TREE_OPERAND: Expression trees. (line 6) 48763 * TREE_PUBLIC: Function Basics. (line 6) 48764 * TREE_PUBLIC <1>: Function Properties. 48765 (line 28) 48766 * TREE_PURPOSE: Containers. (line 6) 48767 * TREE_READONLY: Function Properties. 48768 (line 37) 48769 * tree_size: Macros and Functions. 48770 (line 13) 48771 * TREE_STATIC: Function Properties. 48772 (line 31) 48773 * TREE_STRING_LENGTH: Constant expressions. 48774 (line 6) 48775 * TREE_STRING_POINTER: Constant expressions. 48776 (line 6) 48777 * TREE_THIS_VOLATILE: Function Properties. 48778 (line 34) 48779 * TREE_TYPE: Macros and Functions. 48780 (line 6) 48781 * TREE_TYPE <1>: Types. (line 6) 48782 * TREE_TYPE <2>: Working with declarations. 48783 (line 11) 48784 * TREE_TYPE <3>: Expression trees. (line 6) 48785 * TREE_TYPE <4>: Expression trees. (line 17) 48786 * TREE_TYPE <5>: Function Basics. (line 47) 48787 * TREE_TYPE <6>: Types for C++. (line 6) 48788 * TREE_VALUE: Containers. (line 6) 48789 * TREE_VEC: Containers. (line 6) 48790 * TREE_VEC_ELT: Containers. (line 6) 48791 * TREE_VEC_LENGTH: Containers. (line 6) 48792 * TRULY_NOOP_TRUNCATION: Misc. (line 162) 48793 * truncate: Conversions. (line 38) 48794 * 'truncMN2' instruction pattern: Standard Names. (line 897) 48795 * TRUNC_DIV_EXPR: Unary and Binary Expressions. 48796 (line 6) 48797 * TRUNC_MOD_EXPR: Unary and Binary Expressions. 48798 (line 6) 48799 * TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 48800 (line 6) 48801 * TRUTH_AND_EXPR: Unary and Binary Expressions. 48802 (line 6) 48803 * TRUTH_NOT_EXPR: Unary and Binary Expressions. 48804 (line 6) 48805 * TRUTH_ORIF_EXPR: Unary and Binary Expressions. 48806 (line 6) 48807 * TRUTH_OR_EXPR: Unary and Binary Expressions. 48808 (line 6) 48809 * TRUTH_XOR_EXPR: Unary and Binary Expressions. 48810 (line 6) 48811 * TRY_BLOCK: Statements for C++. (line 6) 48812 * TRY_HANDLERS: Statements for C++. (line 6) 48813 * TRY_STMTS: Statements for C++. (line 6) 48814 * Tuple specific accessors: Tuple specific accessors. 48815 (line 6) 48816 * tuples: Tuple representation. 48817 (line 6) 48818 * type: Types. (line 6) 48819 * type declaration: Declarations. (line 6) 48820 * TYPENAME_TYPE: Types for C++. (line 6) 48821 * TYPENAME_TYPE_FULLNAME: Types. (line 6) 48822 * TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 48823 * TYPEOF_TYPE: Types for C++. (line 6) 48824 * TYPE_ALIGN: Types. (line 6) 48825 * TYPE_ALIGN <1>: Types. (line 30) 48826 * TYPE_ALIGN <2>: Types for C++. (line 6) 48827 * TYPE_ALIGN <3>: Types for C++. (line 44) 48828 * TYPE_ARG_TYPES: Types. (line 6) 48829 * TYPE_ARG_TYPES <1>: Types for C++. (line 6) 48830 * TYPE_ASM_OP: Label Output. (line 76) 48831 * TYPE_ATTRIBUTES: Attributes. (line 24) 48832 * TYPE_BINFO: Classes. (line 6) 48833 * TYPE_BUILT_IN: Types for C++. (line 66) 48834 * TYPE_CANONICAL: Types. (line 6) 48835 * TYPE_CANONICAL <1>: Types. (line 41) 48836 * TYPE_CONTEXT: Types. (line 6) 48837 * TYPE_CONTEXT <1>: Types for C++. (line 6) 48838 * TYPE_DECL: Declarations. (line 6) 48839 * TYPE_FIELDS: Types. (line 6) 48840 * TYPE_FIELDS <1>: Types for C++. (line 6) 48841 * TYPE_FIELDS <2>: Classes. (line 6) 48842 * TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96) 48843 * TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81) 48844 * TYPE_HAS_MUTABLE_P: Classes. (line 86) 48845 * TYPE_HAS_NEW_OPERATOR: Classes. (line 93) 48846 * TYPE_MAIN_VARIANT: Types. (line 6) 48847 * TYPE_MAIN_VARIANT <1>: Types. (line 19) 48848 * TYPE_MAIN_VARIANT <2>: Types for C++. (line 6) 48849 * TYPE_MAX_VALUE: Types. (line 6) 48850 * TYPE_METHODS: Classes. (line 6) 48851 * TYPE_METHOD_BASETYPE: Types. (line 6) 48852 * TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 48853 * TYPE_MIN_VALUE: Types. (line 6) 48854 * TYPE_NAME: Types. (line 6) 48855 * TYPE_NAME <1>: Types. (line 33) 48856 * TYPE_NAME <2>: Types for C++. (line 6) 48857 * TYPE_NAME <3>: Types for C++. (line 47) 48858 * TYPE_NOTHROW_P: Functions for C++. (line 154) 48859 * TYPE_OFFSET_BASETYPE: Types. (line 6) 48860 * TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 48861 * TYPE_OPERAND_FMT: Label Output. (line 87) 48862 * TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104) 48863 * TYPE_OVERLOADS_ARROW: Classes. (line 107) 48864 * TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100) 48865 * TYPE_POLYMORPHIC_P: Classes. (line 77) 48866 * TYPE_PRECISION: Types. (line 6) 48867 * TYPE_PRECISION <1>: Types for C++. (line 6) 48868 * TYPE_PTRDATAMEM_P: Types for C++. (line 6) 48869 * TYPE_PTRDATAMEM_P <1>: Types for C++. (line 69) 48870 * TYPE_PTRFN_P: Types for C++. (line 76) 48871 * TYPE_PTROBV_P: Types for C++. (line 6) 48872 * TYPE_PTROB_P: Types for C++. (line 79) 48873 * TYPE_PTR_P: Types for C++. (line 72) 48874 * TYPE_QUAL_CONST: Types. (line 6) 48875 * TYPE_QUAL_CONST <1>: Types for C++. (line 6) 48876 * TYPE_QUAL_RESTRICT: Types. (line 6) 48877 * TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 48878 * TYPE_QUAL_VOLATILE: Types. (line 6) 48879 * TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 48880 * TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 48881 * TYPE_SIZE: Types. (line 6) 48882 * TYPE_SIZE <1>: Types. (line 25) 48883 * TYPE_SIZE <2>: Types for C++. (line 6) 48884 * TYPE_SIZE <3>: Types for C++. (line 39) 48885 * TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 48886 * TYPE_STRUCTURAL_EQUALITY_P <1>: Types. (line 77) 48887 * TYPE_UNQUALIFIED: Types. (line 6) 48888 * TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 48889 * TYPE_VFIELD: Classes. (line 6) 48890 * UDAmode: Machine Modes. (line 167) 48891 * udiv: Arithmetic. (line 131) 48892 * 'udivM3' instruction pattern: Standard Names. (line 266) 48893 * 'udivmodM4' instruction pattern: Standard Names. (line 501) 48894 * 'udot_prodM' instruction pattern: Standard Names. (line 332) 48895 * UDQmode: Machine Modes. (line 135) 48896 * UHAmode: Machine Modes. (line 159) 48897 * UHQmode: Machine Modes. (line 127) 48898 * UINT16_TYPE: Type Layout. (line 257) 48899 * UINT32_TYPE: Type Layout. (line 258) 48900 * UINT64_TYPE: Type Layout. (line 259) 48901 * UINT8_TYPE: Type Layout. (line 256) 48902 * UINTMAX_TYPE: Type Layout. (line 240) 48903 * UINTPTR_TYPE: Type Layout. (line 277) 48904 * UINT_FAST16_TYPE: Type Layout. (line 273) 48905 * UINT_FAST32_TYPE: Type Layout. (line 274) 48906 * UINT_FAST64_TYPE: Type Layout. (line 275) 48907 * UINT_FAST8_TYPE: Type Layout. (line 272) 48908 * UINT_LEAST16_TYPE: Type Layout. (line 265) 48909 * UINT_LEAST32_TYPE: Type Layout. (line 266) 48910 * UINT_LEAST64_TYPE: Type Layout. (line 267) 48911 * UINT_LEAST8_TYPE: Type Layout. (line 264) 48912 * 'umaddMN4' instruction pattern: Standard Names. (line 448) 48913 * umax: Arithmetic. (line 150) 48914 * 'umaxM3' instruction pattern: Standard Names. (line 266) 48915 * umin: Arithmetic. (line 150) 48916 * 'uminM3' instruction pattern: Standard Names. (line 266) 48917 * umod: Arithmetic. (line 137) 48918 * 'umodM3' instruction pattern: Standard Names. (line 266) 48919 * 'umsubMN4' instruction pattern: Standard Names. (line 472) 48920 * 'umulhisi3' instruction pattern: Standard Names. (line 420) 48921 * 'umulM3_highpart' instruction pattern: Standard Names. (line 434) 48922 * 'umulqihi3' instruction pattern: Standard Names. (line 420) 48923 * 'umulsidi3' instruction pattern: Standard Names. (line 420) 48924 * unchanging: Flags. (line 296) 48925 * 'unchanging', in 'call_insn': Flags. (line 19) 48926 * 'unchanging', in 'jump_insn', 'call_insn' and 'insn': Flags. 48927 (line 39) 48928 * 'unchanging', in 'mem': Flags. (line 134) 48929 * 'unchanging', in 'subreg': Flags. (line 170) 48930 * 'unchanging', in 'subreg' <1>: Flags. (line 180) 48931 * 'unchanging', in 'symbol_ref': Flags. (line 10) 48932 * UNEQ_EXPR: Unary and Binary Expressions. 48933 (line 6) 48934 * UNGE_EXPR: Unary and Binary Expressions. 48935 (line 6) 48936 * UNGT_EXPR: Unary and Binary Expressions. 48937 (line 6) 48938 * unions, returning: Interface. (line 10) 48939 * UNION_TYPE: Types. (line 6) 48940 * UNION_TYPE <1>: Classes. (line 6) 48941 * UNITS_PER_WORD: Storage Layout. (line 65) 48942 * UNKNOWN_TYPE: Types. (line 6) 48943 * UNKNOWN_TYPE <1>: Types for C++. (line 6) 48944 * UNLE_EXPR: Unary and Binary Expressions. 48945 (line 6) 48946 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 48) 48947 * UNLT_EXPR: Unary and Binary Expressions. 48948 (line 6) 48949 * UNORDERED_EXPR: Unary and Binary Expressions. 48950 (line 6) 48951 * unshare_all_rtl: Sharing. (line 58) 48952 * unsigned division: Arithmetic. (line 131) 48953 * unsigned division with unsigned saturation: Arithmetic. (line 131) 48954 * unsigned greater than: Comparisons. (line 64) 48955 * unsigned greater than <1>: Comparisons. (line 72) 48956 * unsigned less than: Comparisons. (line 68) 48957 * unsigned less than <1>: Comparisons. (line 76) 48958 * unsigned minimum and maximum: Arithmetic. (line 150) 48959 * unsigned_fix: Conversions. (line 77) 48960 * unsigned_float: Conversions. (line 62) 48961 * unsigned_fract_convert: Conversions. (line 97) 48962 * unsigned_sat_fract: Conversions. (line 103) 48963 * unspec: Side Effects. (line 291) 48964 * unspec <1>: Constant Definitions. 48965 (line 111) 48966 * unspec_volatile: Side Effects. (line 291) 48967 * unspec_volatile <1>: Constant Definitions. 48968 (line 99) 48969 * 'untyped_call' instruction pattern: Standard Names. (line 1139) 48970 * 'untyped_return' instruction pattern: Standard Names. (line 1202) 48971 * UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 48972 * update_ssa: SSA. (line 76) 48973 * update_stmt: Manipulating GIMPLE statements. 48974 (line 140) 48975 * update_stmt <1>: SSA Operands. (line 6) 48976 * update_stmt_if_modified: Manipulating GIMPLE statements. 48977 (line 143) 48978 * UQQmode: Machine Modes. (line 123) 48979 * 'usaddM3' instruction pattern: Standard Names. (line 266) 48980 * USAmode: Machine Modes. (line 163) 48981 * 'usashlM3' instruction pattern: Standard Names. (line 504) 48982 * 'usdivM3' instruction pattern: Standard Names. (line 266) 48983 * use: Side Effects. (line 168) 48984 * used: Flags. (line 314) 48985 * 'used', in 'symbol_ref': Flags. (line 197) 48986 * user: GTY Options. (line 314) 48987 * user gc: User GC. (line 6) 48988 * USER_LABEL_PREFIX: Instruction Output. (line 152) 48989 * USE_C_ALLOCA: Host Misc. (line 19) 48990 * USE_LD_AS_NEEDED: Driver. (line 135) 48991 * USE_LOAD_POST_DECREMENT: Costs. (line 225) 48992 * USE_LOAD_POST_INCREMENT: Costs. (line 220) 48993 * USE_LOAD_PRE_DECREMENT: Costs. (line 235) 48994 * USE_LOAD_PRE_INCREMENT: Costs. (line 230) 48995 * use_param: GTY Options. (line 115) 48996 * use_paramN: GTY Options. (line 134) 48997 * use_params: GTY Options. (line 143) 48998 * USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 193) 48999 * USE_STORE_POST_DECREMENT: Costs. (line 245) 49000 * USE_STORE_POST_INCREMENT: Costs. (line 240) 49001 * USE_STORE_PRE_DECREMENT: Costs. (line 255) 49002 * USE_STORE_PRE_INCREMENT: Costs. (line 250) 49003 * USING_STMT: Statements for C++. (line 6) 49004 * 'usmaddMN4' instruction pattern: Standard Names. (line 456) 49005 * 'usmsubMN4' instruction pattern: Standard Names. (line 480) 49006 * 'usmulhisi3' instruction pattern: Standard Names. (line 424) 49007 * 'usmulM3' instruction pattern: Standard Names. (line 266) 49008 * 'usmulqihi3' instruction pattern: Standard Names. (line 424) 49009 * 'usmulsidi3' instruction pattern: Standard Names. (line 424) 49010 * 'usnegM2' instruction pattern: Standard Names. (line 526) 49011 * USQmode: Machine Modes. (line 131) 49012 * 'ussubM3' instruction pattern: Standard Names. (line 266) 49013 * 'usum_widenM3' instruction pattern: Standard Names. (line 341) 49014 * us_ashift: Arithmetic. (line 174) 49015 * us_minus: Arithmetic. (line 38) 49016 * us_mult: Arithmetic. (line 93) 49017 * us_neg: Arithmetic. (line 82) 49018 * us_plus: Arithmetic. (line 14) 49019 * us_truncate: Conversions. (line 48) 49020 * UTAmode: Machine Modes. (line 171) 49021 * UTQmode: Machine Modes. (line 139) 49022 * 'V' in constraint: Simple Constraints. (line 43) 49023 * values, returned by functions: Scalar Return. (line 6) 49024 * varargs implementation: Varargs. (line 6) 49025 * variable: Declarations. (line 6) 49026 * Variable Location Debug Information in RTL: Debug Information. 49027 (line 6) 49028 * variable_size: GTY Options. (line 241) 49029 * VAR_DECL: Declarations. (line 6) 49030 * var_location: Debug Information. (line 14) 49031 * 'vashlM3' instruction pattern: Standard Names. (line 518) 49032 * 'vashrM3' instruction pattern: Standard Names. (line 518) 49033 * VA_ARG_EXPR: Unary and Binary Expressions. 49034 (line 6) 49035 * 'vcondMN' instruction pattern: Standard Names. (line 213) 49036 * vector: Containers. (line 6) 49037 * vector operations: Vector Operations. (line 6) 49038 * VECTOR_CST: Constant expressions. 49039 (line 6) 49040 * VECTOR_STORE_FLAG_VALUE: Misc. (line 293) 49041 * vec_concat: Vector Operations. (line 28) 49042 * vec_duplicate: Vector Operations. (line 33) 49043 * 'vec_extractM' instruction pattern: Standard Names. (line 203) 49044 * 'vec_initM' instruction pattern: Standard Names. (line 208) 49045 * 'vec_load_lanesMN' instruction pattern: Standard Names. (line 165) 49046 * VEC_LSHIFT_EXPR: Vectors. (line 6) 49047 * vec_merge: Vector Operations. (line 11) 49048 * VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 49049 * VEC_PACK_SAT_EXPR: Vectors. (line 6) 49050 * 'vec_pack_sfix_trunc_M' instruction pattern: Standard Names. 49051 (line 367) 49052 * 'vec_pack_ssat_M' instruction pattern: Standard Names. (line 360) 49053 * VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 49054 * 'vec_pack_trunc_M' instruction pattern: Standard Names. (line 353) 49055 * 'vec_pack_ufix_trunc_M' instruction pattern: Standard Names. 49056 (line 367) 49057 * 'vec_pack_usat_M' instruction pattern: Standard Names. (line 360) 49058 * 'vec_permM' instruction pattern: Standard Names. (line 223) 49059 * 'vec_perm_constM' instruction pattern: Standard Names. (line 239) 49060 * VEC_RSHIFT_EXPR: Vectors. (line 6) 49061 * vec_select: Vector Operations. (line 19) 49062 * 'vec_setM' instruction pattern: Standard Names. (line 198) 49063 * 'vec_shl_M' instruction pattern: Standard Names. (line 347) 49064 * 'vec_shr_M' instruction pattern: Standard Names. (line 347) 49065 * 'vec_store_lanesMN' instruction pattern: Standard Names. (line 187) 49066 * 'vec_unpacks_float_hi_M' instruction pattern: Standard Names. 49067 (line 388) 49068 * 'vec_unpacks_float_lo_M' instruction pattern: Standard Names. 49069 (line 388) 49070 * 'vec_unpacks_hi_M' instruction pattern: Standard Names. (line 374) 49071 * 'vec_unpacks_lo_M' instruction pattern: Standard Names. (line 374) 49072 * 'vec_unpacku_float_hi_M' instruction pattern: Standard Names. 49073 (line 388) 49074 * 'vec_unpacku_float_lo_M' instruction pattern: Standard Names. 49075 (line 388) 49076 * 'vec_unpacku_hi_M' instruction pattern: Standard Names. (line 381) 49077 * 'vec_unpacku_lo_M' instruction pattern: Standard Names. (line 381) 49078 * VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 49079 * VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 49080 * VEC_UNPACK_HI_EXPR: Vectors. (line 6) 49081 * VEC_UNPACK_LO_EXPR: Vectors. (line 6) 49082 * VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 49083 * VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 49084 * 'vec_widen_smult_even_M' instruction pattern: Standard Names. 49085 (line 397) 49086 * 'vec_widen_smult_hi_M' instruction pattern: Standard Names. 49087 (line 397) 49088 * 'vec_widen_smult_lo_M' instruction pattern: Standard Names. 49089 (line 397) 49090 * 'vec_widen_smult_odd_M' instruction pattern: Standard Names. 49091 (line 397) 49092 * 'vec_widen_sshiftl_hi_M' instruction pattern: Standard Names. 49093 (line 406) 49094 * 'vec_widen_sshiftl_lo_M' instruction pattern: Standard Names. 49095 (line 406) 49096 * 'vec_widen_umult_even_M' instruction pattern: Standard Names. 49097 (line 397) 49098 * 'vec_widen_umult_hi_M' instruction pattern: Standard Names. 49099 (line 397) 49100 * 'vec_widen_umult_lo_M' instruction pattern: Standard Names. 49101 (line 397) 49102 * 'vec_widen_umult_odd_M' instruction pattern: Standard Names. 49103 (line 397) 49104 * 'vec_widen_ushiftl_hi_M' instruction pattern: Standard Names. 49105 (line 406) 49106 * 'vec_widen_ushiftl_lo_M' instruction pattern: Standard Names. 49107 (line 406) 49108 * verify_flow_info: Maintaining the CFG. 49109 (line 117) 49110 * virtual operands: SSA Operands. (line 6) 49111 * VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 49112 * VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 49113 * VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 49114 * VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 49115 * VLIW: Processor pipeline description. 49116 (line 6) 49117 * VLIW <1>: Processor pipeline description. 49118 (line 223) 49119 * 'vlshrM3' instruction pattern: Standard Names. (line 518) 49120 * VMS: Filesystem. (line 37) 49121 * VMS_DEBUGGING_INFO: VMS Debug. (line 8) 49122 * VOIDmode: Machine Modes. (line 189) 49123 * VOID_TYPE: Types. (line 6) 49124 * volatil: Flags. (line 328) 49125 * 'volatil', in 'insn', 'call_insn', 'jump_insn', 'code_label', 'barrier', and 'note': Flags. 49126 (line 44) 49127 * 'volatil', in 'label_ref' and 'reg_label': Flags. (line 65) 49128 * 'volatil', in 'mem', 'asm_operands', and 'asm_input': Flags. 49129 (line 76) 49130 * 'volatil', in 'reg': Flags. (line 98) 49131 * 'volatil', in 'subreg': Flags. (line 170) 49132 * 'volatil', in 'subreg' <1>: Flags. (line 180) 49133 * 'volatil', in 'symbol_ref': Flags. (line 206) 49134 * volatile memory references: Flags. (line 329) 49135 * 'volatile', in 'prefetch': Flags. (line 214) 49136 * voting between constraint alternatives: Class Preferences. (line 6) 49137 * 'vrotlM3' instruction pattern: Standard Names. (line 518) 49138 * 'vrotrM3' instruction pattern: Standard Names. (line 518) 49139 * walk_dominator_tree: SSA. (line 253) 49140 * walk_gimple_op: Statement and operand traversals. 49141 (line 30) 49142 * walk_gimple_seq: Statement and operand traversals. 49143 (line 47) 49144 * walk_gimple_stmt: Statement and operand traversals. 49145 (line 10) 49146 * walk_use_def_chains: SSA. (line 229) 49147 * WCHAR_TYPE: Type Layout. (line 208) 49148 * WCHAR_TYPE_SIZE: Type Layout. (line 216) 49149 * which_alternative: Output Statement. (line 58) 49150 * WHILE_BODY: Statements for C++. (line 6) 49151 * WHILE_COND: Statements for C++. (line 6) 49152 * WHILE_STMT: Statements for C++. (line 6) 49153 * whopr: LTO. (line 6) 49154 * WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 153) 49155 * 'window_save' instruction pattern: Standard Names. (line 1500) 49156 * WINT_TYPE: Type Layout. (line 221) 49157 * WORDS_BIG_ENDIAN: Storage Layout. (line 28) 49158 * 'WORDS_BIG_ENDIAN', effect on 'subreg': Regs and Memory. (line 215) 49159 * word_mode: Machine Modes. (line 335) 49160 * WORD_REGISTER_OPERATIONS: Misc. (line 53) 49161 * wpa: LTO. (line 6) 49162 * 'X' in constraint: Simple Constraints. (line 122) 49163 * 'x-HOST': Host Fragment. (line 6) 49164 * XCmode: Machine Modes. (line 196) 49165 * XCOFF_DEBUGGING_INFO: DBX Options. (line 12) 49166 * XEXP: Accessors. (line 6) 49167 * XFmode: Machine Modes. (line 79) 49168 * XF_SIZE: Type Layout. (line 137) 49169 * XINT: Accessors. (line 6) 49170 * 'xm-MACHINE.h': Filesystem. (line 6) 49171 * 'xm-MACHINE.h' <1>: Host Misc. (line 6) 49172 * xor: Arithmetic. (line 169) 49173 * 'xor', canonicalization of: Insn Canonicalizations. 49174 (line 78) 49175 * 'xorM3' instruction pattern: Standard Names. (line 266) 49176 * XSTR: Accessors. (line 6) 49177 * XVEC: Accessors. (line 41) 49178 * XVECEXP: Accessors. (line 48) 49179 * XVECLEN: Accessors. (line 44) 49180 * XWINT: Accessors. (line 6) 49181 * zero_extend: Conversions. (line 28) 49182 * 'zero_extendMN2' instruction pattern: Standard Names. (line 907) 49183 * zero_extract: Bit-Fields. (line 30) 49184 * 'zero_extract', canonicalization of: Insn Canonicalizations. 49185 (line 87) 49186 49187 49188 49189 Tag Table: 49190 Node: Top1789 49191 Node: Contributing4877 49192 Node: Portability5606 49193 Node: Interface7394 49194 Node: Libgcc10435 49195 Node: Integer library routines12262 49196 Node: Soft float library routines19104 49197 Node: Decimal float library routines31042 49198 Node: Fixed-point fractional library routines46800 49199 Node: Exception handling routines147196 49200 Node: Miscellaneous routines148303 49201 Node: Languages150423 49202 Node: Source Tree151970 49203 Node: Configure Terms152552 49204 Node: Top Level155508 49205 Node: gcc Directory159083 49206 Node: Subdirectories160035 49207 Node: Configuration162203 49208 Node: Config Fragments162923 49209 Node: System Config164148 49210 Node: Configuration Files165084 49211 Node: Build167901 49212 Node: Makefile168313 49213 Ref: Makefile-Footnote-1175117 49214 Ref: Makefile-Footnote-2175264 49215 Node: Library Files175338 49216 Node: Headers175900 49217 Node: Documentation177983 49218 Node: Texinfo Manuals178842 49219 Node: Man Page Generation181171 49220 Node: Miscellaneous Docs183084 49221 Node: Front End184471 49222 Node: Front End Directory188145 49223 Node: Front End Config189461 49224 Node: Front End Makefile192277 49225 Node: Back End196045 49226 Node: Testsuites199826 49227 Node: Test Idioms200757 49228 Node: Test Directives204155 49229 Node: Directives204682 49230 Node: Selectors214979 49231 Node: Effective-Target Keywords216335 49232 Ref: arm_neon_ok223889 49233 Ref: arm_neonv2_ok224047 49234 Ref: arm_neon_fp16_ok224219 49235 Node: Add Options234594 49236 Node: Require Support235791 49237 Node: Final Actions238298 49238 Node: Ada Tests243463 49239 Node: C Tests244794 49240 Node: libgcj Tests249189 49241 Node: LTO Testing250316 49242 Node: gcov Testing251964 49243 Node: profopt Testing254954 49244 Node: compat Testing256669 49245 Node: Torture Tests260909 49246 Node: Options262524 49247 Node: Option file format262965 49248 Node: Option properties269954 49249 Node: Passes282830 49250 Node: Parsing pass283570 49251 Node: Gimplification pass287098 49252 Node: Pass manager288931 49253 Node: Tree SSA passes290726 49254 Node: RTL passes313180 49255 Node: RTL326295 49256 Node: RTL Objects328476 49257 Node: RTL Classes332350 49258 Node: Accessors337347 49259 Node: Special Accessors339741 49260 Node: Flags345528 49261 Node: Machine Modes360254 49262 Node: Constants372564 49263 Node: Regs and Memory379292 49264 Node: Arithmetic397180 49265 Node: Comparisons407262 49266 Node: Bit-Fields411554 49267 Node: Vector Operations413106 49268 Node: Conversions414987 49269 Node: RTL Declarations419485 49270 Node: Side Effects420306 49271 Node: Incdec436900 49272 Node: Assembler440236 49273 Node: Debug Information441781 49274 Node: Insns442978 49275 Node: Calls469469 49276 Node: Sharing472062 49277 Node: Reading RTL475173 49278 Node: GENERIC476164 49279 Node: Deficiencies478035 49280 Node: Tree overview478276 49281 Node: Macros and Functions482400 49282 Node: Identifiers483225 49283 Node: Containers484834 49284 Node: Types485991 49285 Node: Declarations498065 49286 Node: Working with declarations498560 49287 Node: Internal structure504164 49288 Node: Current structure hierarchy504548 49289 Node: Adding new DECL node types506641 49290 Node: Attributes510713 49291 Node: Expression trees511957 49292 Node: Constant expressions513711 49293 Node: Storage References517924 49294 Node: Unary and Binary Expressions521443 49295 Node: Vectors541295 49296 Node: Statements546027 49297 Node: Basic Statements546547 49298 Node: Blocks551054 49299 Node: Statement Sequences552458 49300 Node: Empty Statements552791 49301 Node: Jumps553365 49302 Node: Cleanups554018 49303 Node: OpenMP555785 49304 Node: Functions561630 49305 Node: Function Basics562101 49306 Node: Function Properties565785 49307 Node: Language-dependent trees568566 49308 Node: C and C++ Trees569453 49309 Node: Types for C++572357 49310 Node: Namespaces577327 49311 Node: Classes580433 49312 Node: Functions for C++585510 49313 Node: Statements for C++591761 49314 Node: C++ Expressions599814 49315 Node: Java Trees601319 49316 Node: GIMPLE601432 49317 Node: Tuple representation605056 49318 Node: GIMPLE instruction set613360 49319 Node: GIMPLE Exception Handling614976 49320 Node: Temporaries616888 49321 Ref: Temporaries-Footnote-1618206 49322 Node: Operands618271 49323 Node: Compound Expressions619032 49324 Node: Compound Lvalues619266 49325 Node: Conditional Expressions620028 49326 Node: Logical Operators620687 49327 Node: Manipulating GIMPLE statements627443 49328 Node: Tuple specific accessors633379 49329 Node: 'GIMPLE_ASM'634198 49330 Node: 'GIMPLE_ASSIGN'636831 49331 Node: 'GIMPLE_BIND'640937 49332 Node: 'GIMPLE_CALL'642745 49333 Node: 'GIMPLE_CATCH'647016 49334 Node: 'GIMPLE_COND'648160 49335 Node: 'GIMPLE_DEBUG'650948 49336 Node: 'GIMPLE_EH_FILTER'654326 49337 Node: 'GIMPLE_LABEL'655814 49338 Node: 'GIMPLE_NOP'656789 49339 Node: 'GIMPLE_OMP_ATOMIC_LOAD'657158 49340 Node: 'GIMPLE_OMP_ATOMIC_STORE'658068 49341 Node: 'GIMPLE_OMP_CONTINUE'658708 49342 Node: 'GIMPLE_OMP_CRITICAL'660058 49343 Node: 'GIMPLE_OMP_FOR'660996 49344 Node: 'GIMPLE_OMP_MASTER'664511 49345 Node: 'GIMPLE_OMP_ORDERED'664895 49346 Node: 'GIMPLE_OMP_PARALLEL'665295 49347 Node: 'GIMPLE_OMP_RETURN'668067 49348 Node: 'GIMPLE_OMP_SECTION'668718 49349 Node: 'GIMPLE_OMP_SECTIONS'669384 49350 Node: 'GIMPLE_OMP_SINGLE'670991 49351 Node: 'GIMPLE_PHI'671929 49352 Node: 'GIMPLE_RESX'673216 49353 Node: 'GIMPLE_RETURN'673935 49354 Node: 'GIMPLE_SWITCH'674503 49355 Node: 'GIMPLE_TRY'676305 49356 Node: 'GIMPLE_WITH_CLEANUP_EXPR'678096 49357 Node: GIMPLE sequences678979 49358 Node: Sequence iterators682185 49359 Node: Adding a new GIMPLE statement code690640 49360 Node: Statement and operand traversals691916 49361 Node: Tree SSA694508 49362 Node: Annotations696325 49363 Node: SSA Operands696851 49364 Node: SSA711376 49365 Node: Alias analysis723496 49366 Node: Memory model727270 49367 Node: Loop Analysis and Representation728629 49368 Node: Loop representation729806 49369 Node: Loop querying736723 49370 Node: Loop manipulation739539 49371 Node: LCSSA741900 49372 Node: Scalar evolutions743969 49373 Node: loop-iv747213 49374 Node: Number of iterations749135 49375 Node: Dependency analysis751941 49376 Node: Lambda758306 49377 Node: Omega759978 49378 Node: Control Flow761543 49379 Node: Basic Blocks763319 49380 Node: Edges768608 49381 Node: Profile information777237 49382 Node: Maintaining the CFG781921 49383 Node: Liveness information787782 49384 Node: Machine Desc789908 49385 Node: Overview792451 49386 Node: Patterns794491 49387 Node: Example797929 49388 Node: RTL Template799363 49389 Node: Output Template810018 49390 Node: Output Statement813981 49391 Node: Predicates818320 49392 Node: Machine-Independent Predicates821238 49393 Node: Defining Predicates826182 49394 Node: Constraints832145 49395 Node: Simple Constraints833627 49396 Node: Multi-Alternative846467 49397 Node: Class Preferences849308 49398 Node: Modifiers850200 49399 Node: Machine Constraints854446 49400 Node: Disable Insn Alternatives906312 49401 Node: Define Constraints909216 49402 Node: C Constraint Interface916001 49403 Node: Standard Names919653 49404 Ref: shift patterns942197 49405 Ref: prologue instruction pattern987100 49406 Ref: window_save instruction pattern987593 49407 Ref: epilogue instruction pattern987870 49408 Node: Pattern Ordering1005456 49409 Node: Dependent Patterns1006692 49410 Node: Jump Patterns1008312 49411 Ref: Jump Patterns-Footnote-11010459 49412 Node: Looping Patterns1010507 49413 Node: Insn Canonicalizations1015236 49414 Node: Expander Definitions1019821 49415 Node: Insn Splitting1028035 49416 Node: Including Patterns1037638 49417 Node: Peephole Definitions1039422 49418 Node: define_peephole1040675 49419 Node: define_peephole21047005 49420 Node: Insn Attributes1050072 49421 Node: Defining Attributes1051178 49422 Ref: define_enum_attr1054393 49423 Node: Expressions1055429 49424 Node: Tagging Insns1062179 49425 Node: Attr Example1066532 49426 Node: Insn Lengths1068905 49427 Node: Constant Attributes1071964 49428 Node: Delay Slots1073133 49429 Node: Processor pipeline description1076357 49430 Ref: Processor pipeline description-Footnote-11095175 49431 Node: Conditional Execution1095499 49432 Node: Define Subst1098562 49433 Node: Define Subst Example1100598 49434 Node: Define Subst Pattern Matching1103592 49435 Node: Define Subst Output Template1104818 49436 Node: Constant Definitions1106888 49437 Ref: define_enum1110670 49438 Node: Iterators1111158 49439 Node: Mode Iterators1111736 49440 Node: Defining Mode Iterators1112714 49441 Node: Substitutions1114208 49442 Node: Examples1116450 49443 Node: Code Iterators1117898 49444 Node: Int Iterators1120177 49445 Node: Subst Iterators1122638 49446 Node: Target Macros1124330 49447 Node: Target Structure1127418 49448 Node: Driver1129534 49449 Node: Run-time Target1148319 49450 Node: Per-Function Data1157484 49451 Node: Storage Layout1160248 49452 Node: Type Layout1186303 49453 Node: Registers1201626 49454 Node: Register Basics1202600 49455 Node: Allocation Order1208108 49456 Node: Values in Registers1210554 49457 Node: Leaf Functions1218032 49458 Node: Stack Registers1220891 49459 Node: Register Classes1222163 49460 Node: Old Constraints1252130 49461 Node: Stack and Calling1259270 49462 Node: Frame Layout1259804 49463 Node: Exception Handling1270680 49464 Node: Stack Checking1276892 49465 Node: Frame Registers1281706 49466 Node: Elimination1289965 49467 Node: Stack Arguments1294195 49468 Node: Register Arguments1301058 49469 Node: Scalar Return1321361 49470 Node: Aggregate Return1327448 49471 Node: Caller Saves1331659 49472 Node: Function Entry1332836 49473 Node: Profiling1343930 49474 Node: Tail Calls1345629 49475 Node: Stack Smashing Protection1347532 49476 Node: Varargs1349160 49477 Node: Trampolines1355847 49478 Node: Library Calls1361890 49479 Node: Addressing Modes1366829 49480 Node: Anchored Addresses1386844 49481 Node: Condition Code1389487 49482 Node: CC0 Condition Codes1391616 49483 Node: MODE_CC Condition Codes1394862 49484 Node: Cond Exec Macros1401386 49485 Node: Costs1401732 49486 Node: Scheduling1418194 49487 Node: Sections1437611 49488 Node: PIC1453309 49489 Node: Assembler Format1455368 49490 Node: File Framework1456506 49491 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1463438 49492 Node: Data Output1466708 49493 Node: Uninitialized Data1474477 49494 Node: Label Output1479488 49495 Node: Initialization1502444 49496 Node: Macros for Initialization1508405 49497 Node: Instruction Output1515124 49498 Node: Dispatch Tables1525619 49499 Node: Exception Region Output1529997 49500 Node: Alignment Output1536675 49501 Node: Debugging Info1541221 49502 Node: All Debuggers1541891 49503 Node: DBX Options1544746 49504 Node: DBX Hooks1550184 49505 Node: File Names and DBX1551493 49506 Node: SDB and DWARF1553605 49507 Node: VMS Debug1559677 49508 Node: Floating Point1560264 49509 Node: Mode Switching1564740 49510 Node: Target Attributes1568736 49511 Node: Emulated TLS1577050 49512 Node: MIPS Coprocessors1580440 49513 Node: PCH Target1581737 49514 Node: C++ ABI1583579 49515 Node: Named Address Spaces1588373 49516 Node: Misc1593307 49517 Ref: TARGET_SHIFT_TRUNCATION_MASK1600049 49518 Node: Host Config1645205 49519 Node: Host Common1646273 49520 Node: Filesystem1648647 49521 Node: Host Misc1652762 49522 Node: Fragments1655211 49523 Node: Target Fragment1656406 49524 Node: Host Fragment1667034 49525 Node: Collect21667274 49526 Node: Header Dirs1669910 49527 Node: Type Information1671333 49528 Node: GTY Options1674552 49529 Node: User GC1688886 49530 Node: GGC Roots1692617 49531 Node: Files1693330 49532 Node: Invoking the garbage collector1696037 49533 Node: Troubleshooting1697542 49534 Node: Plugins1698617 49535 Node: Plugins loading1699735 49536 Node: Plugin API1700605 49537 Node: Plugins pass1707633 49538 Node: Plugins GC1709604 49539 Node: Plugins description1711269 49540 Node: Plugins attr1711805 49541 Node: Plugins recording1713692 49542 Node: Plugins gate1714542 49543 Node: Plugins tracking1715133 49544 Node: Plugins building1715721 49545 Node: LTO1717508 49546 Node: LTO Overview1718369 49547 Node: LTO object file layout1724201 49548 Node: IPA1728831 49549 Node: WHOPR1737796 49550 Node: Internal flags1742485 49551 Node: Funding1743697 49552 Node: GNU Project1746181 49553 Node: Copying1746830 49554 Node: GNU Free Documentation License1784342 49555 Node: Contributors1809463 49556 Node: Option Index1846864 49557 Node: Concept Index1847668 49558 49559 End Tag Table 49560