1 This is doc/gccint.info, produced by makeinfo version 4.13 from 2 /tmp/build-mingw64-toolchain-digit/src/gcc-4.8.3/gcc/doc/gccint.texi. 3 4 Copyright (C) 1988-2013 Free Software Foundation, Inc. 5 6 Permission is granted to copy, distribute and/or modify this document 7 under the terms of the GNU Free Documentation License, Version 1.3 or 8 any later version published by the Free Software Foundation; with the 9 Invariant Sections being "Funding Free Software", the Front-Cover Texts 10 being (a) (see below), and with the Back-Cover Texts being (b) (see 11 below). A copy of the license is included in the section entitled "GNU 12 Free Documentation License". 13 14 (a) The FSF's Front-Cover Text is: 15 16 A GNU Manual 17 18 (b) The FSF's Back-Cover Text is: 19 20 You have freedom to copy and modify this GNU Manual, like GNU 21 software. Copies published by the Free Software Foundation raise 22 funds for GNU development. 23 24 INFO-DIR-SECTION Software development 25 START-INFO-DIR-ENTRY 26 * gccint: (gccint). Internals of the GNU Compiler Collection. 27 END-INFO-DIR-ENTRY 28 This file documents the internals of the GNU compilers. 29 30 Copyright (C) 1988-2013 Free Software Foundation, Inc. 31 32 Permission is granted to copy, distribute and/or modify this document 33 under the terms of the GNU Free Documentation License, Version 1.3 or 34 any later version published by the Free Software Foundation; with the 35 Invariant Sections being "Funding Free Software", the Front-Cover Texts 36 being (a) (see below), and with the Back-Cover Texts being (b) (see 37 below). A copy of the license is included in the section entitled "GNU 38 Free Documentation License". 39 40 (a) The FSF's Front-Cover Text is: 41 42 A GNU Manual 43 44 (b) The FSF's Back-Cover Text is: 45 46 You have freedom to copy and modify this GNU Manual, like GNU 47 software. Copies published by the Free Software Foundation raise 48 funds for GNU development. 49 50 51 52 File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 53 54 Introduction 55 ************ 56 57 This manual documents the internals of the GNU compilers, including how 58 to port them to new targets and some information about how to write 59 front ends for new languages. It corresponds to the compilers 60 (GCC) version 4.8.3. The use of the GNU compilers is documented in a 61 separate manual. *Note Introduction: (gcc)Top. 62 63 This manual is mainly a reference manual rather than a tutorial. It 64 discusses how to contribute to GCC (*note Contributing::), the 65 characteristics of the machines supported by GCC as hosts and targets 66 (*note Portability::), how GCC relates to the ABIs on such systems 67 (*note Interface::), and the characteristics of the languages for which 68 GCC front ends are written (*note Languages::). It then describes the 69 GCC source tree structure and build system, some of the interfaces to 70 GCC front ends, and how support for a target system is implemented in 71 GCC. 72 73 Additional tutorial information is linked to from 74 `http://gcc.gnu.org/readings.html'. 75 76 * Menu: 77 78 * Contributing:: How to contribute to testing and developing GCC. 79 * Portability:: Goals of GCC's portability features. 80 * Interface:: Function-call interface of GCC output. 81 * Libgcc:: Low-level runtime library used by GCC. 82 * Languages:: Languages for which GCC front ends are written. 83 * Source Tree:: GCC source tree structure and build system. 84 * Testsuites:: GCC testsuites. 85 * Options:: Option specification files. 86 * Passes:: Order of passes, what they do, and what each file is for. 87 * GENERIC:: Language-independent representation generated by Front Ends 88 * GIMPLE:: Tuple representation used by Tree SSA optimizers 89 * Tree SSA:: Analysis and optimization of GIMPLE 90 * RTL:: Machine-dependent low-level intermediate representation. 91 * Control Flow:: Maintaining and manipulating the control flow graph. 92 * Loop Analysis and Representation:: Analysis and representation of loops 93 * Machine Desc:: How to write machine description instruction patterns. 94 * Target Macros:: How to write the machine description C macros and functions. 95 * Host Config:: Writing the `xm-MACHINE.h' file. 96 * Fragments:: Writing the `t-TARGET' and `x-HOST' files. 97 * Collect2:: How `collect2' works; how it finds `ld'. 98 * Header Dirs:: Understanding the standard header file directories. 99 * Type Information:: GCC's memory management; generating type information. 100 * Plugins:: Extending the compiler with plugins. 101 * LTO:: Using Link-Time Optimization. 102 103 * Funding:: How to help assure funding for free software. 104 * GNU Project:: The GNU Project and GNU/Linux. 105 106 * Copying:: GNU General Public License says 107 how you can copy and share GCC. 108 * GNU Free Documentation License:: How you can copy and share this manual. 109 * Contributors:: People who have contributed to GCC. 110 111 * Option Index:: Index to command line options. 112 * Concept Index:: Index of concepts and symbol names. 113 114 115 File: gccint.info, Node: Contributing, Next: Portability, Prev: Top, Up: Top 116 117 1 Contributing to GCC Development 118 ********************************* 119 120 If you would like to help pretest GCC releases to assure they work well, 121 current development sources are available by SVN (see 122 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 123 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 124 125 If you would like to work on improvements to GCC, please read the 126 advice at these URLs: 127 128 `http://gcc.gnu.org/contribute.html' 129 `http://gcc.gnu.org/contributewhy.html' 130 131 for information on how to make useful contributions and avoid 132 duplication of effort. Suggested projects are listed at 133 `http://gcc.gnu.org/projects/'. 134 135 136 File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 137 138 2 GCC and Portability 139 ********************* 140 141 GCC itself aims to be portable to any machine where `int' is at least a 142 32-bit type. It aims to target machines with a flat (non-segmented) 143 byte addressed data address space (the code address space can be 144 separate). Target ABIs may have 8, 16, 32 or 64-bit `int' type. `char' 145 can be wider than 8 bits. 146 147 GCC gets most of the information about the target machine from a 148 machine description which gives an algebraic formula for each of the 149 machine's instructions. This is a very clean way to describe the 150 target. But when the compiler needs information that is difficult to 151 express in this fashion, ad-hoc parameters have been defined for 152 machine descriptions. The purpose of portability is to reduce the 153 total work needed on the compiler; it was not of interest for its own 154 sake. 155 156 GCC does not contain machine dependent code, but it does contain code 157 that depends on machine parameters such as endianness (whether the most 158 significant byte has the highest or lowest address of the bytes in a 159 word) and the availability of autoincrement addressing. In the 160 RTL-generation pass, it is often necessary to have multiple strategies 161 for generating code for a particular kind of syntax tree, strategies 162 that are usable for different combinations of parameters. Often, not 163 all possible cases have been addressed, but only the common ones or 164 only the ones that have been encountered. As a result, a new target 165 may require additional strategies. You will know if this happens 166 because the compiler will call `abort'. Fortunately, the new 167 strategies can be added in a machine-independent fashion, and will 168 affect only the target machines that need them. 169 170 171 File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 172 173 3 Interfacing to GCC Output 174 *************************** 175 176 GCC is normally configured to use the same function calling convention 177 normally in use on the target system. This is done with the 178 machine-description macros described (*note Target Macros::). 179 180 However, returning of structure and union values is done differently on 181 some target machines. As a result, functions compiled with PCC 182 returning such types cannot be called from code compiled with GCC, and 183 vice versa. This does not cause trouble often because few Unix library 184 routines return structures or unions. 185 186 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes 187 long in the same registers used for `int' or `double' return values. 188 (GCC typically allocates variables of such types in registers also.) 189 Structures and unions of other sizes are returned by storing them into 190 an address passed by the caller (usually in a register). The target 191 hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 192 193 By contrast, PCC on most target machines returns structures and unions 194 of any size by copying the data into an area of static storage, and then 195 returning the address of that storage as if it were a pointer value. 196 The caller must copy the data from that memory area to the place where 197 the value is wanted. This is slower than the method used by GCC, and 198 fails to be reentrant. 199 200 On some target machines, such as RISC machines and the 80386, the 201 standard system convention is to pass to the subroutine the address of 202 where to return the value. On these machines, GCC has been configured 203 to be compatible with the standard compiler, when this method is used. 204 It may not be compatible for structures of 1, 2, 4 or 8 bytes. 205 206 GCC uses the system's standard convention for passing arguments. On 207 some machines, the first few arguments are passed in registers; in 208 others, all are passed on the stack. It would be possible to use 209 registers for argument passing on any machine, and this would probably 210 result in a significant speedup. But the result would be complete 211 incompatibility with code that follows the standard convention. So this 212 change is practical only if you are switching to GCC as the sole C 213 compiler for the system. We may implement register argument passing on 214 certain machines once we have a complete GNU system so that we can 215 compile the libraries with GCC. 216 217 On some machines (particularly the SPARC), certain types of arguments 218 are passed "by invisible reference". This means that the value is 219 stored in memory, and the address of the memory location is passed to 220 the subroutine. 221 222 If you use `longjmp', beware of automatic variables. ISO C says that 223 automatic variables that are not declared `volatile' have undefined 224 values after a `longjmp'. And this is all GCC promises to do, because 225 it is very difficult to restore register variables correctly, and one 226 of GCC's features is that it can put variables in registers without 227 your asking it to. 228 229 230 File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 231 232 4 The GCC low-level runtime library 233 *********************************** 234 235 GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1' 236 on some platforms. GCC generates calls to routines in this library 237 automatically, whenever it needs to perform some operation that is too 238 complicated to emit inline code for. 239 240 Most of the routines in `libgcc' handle arithmetic operations that the 241 target processor cannot perform directly. This includes integer 242 multiply and divide on some machines, and all floating-point and 243 fixed-point operations on other machines. `libgcc' also includes 244 routines for exception handling, and a handful of miscellaneous 245 operations. 246 247 Some of these routines can be defined in mostly machine-independent C. 248 Others must be hand-written in assembly language for each processor 249 that needs them. 250 251 GCC will also generate calls to C library routines, such as `memcpy' 252 and `memset', in some cases. The set of routines that GCC may possibly 253 use is documented in *note Other Builtins: (gcc)Other Builtins. 254 255 These routines take arguments and return values of a specific machine 256 mode, not a specific C type. *Note Machine Modes::, for an explanation 257 of this concept. For illustrative purposes, in this chapter the 258 floating point type `float' is assumed to correspond to `SFmode'; 259 `double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'. 260 Similarly, the integer types `int' and `unsigned int' correspond to 261 `SImode'; `long' and `unsigned long' to `DImode'; and `long long' and 262 `unsigned long long' to `TImode'. 263 264 * Menu: 265 266 * Integer library routines:: 267 * Soft float library routines:: 268 * Decimal float library routines:: 269 * Fixed-point fractional library routines:: 270 * Exception handling routines:: 271 * Miscellaneous routines:: 272 273 274 File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 275 276 4.1 Routines for integer arithmetic 277 =================================== 278 279 The integer arithmetic routines are used on platforms that don't provide 280 hardware support for arithmetic operations on some modes. 281 282 4.1.1 Arithmetic functions 283 -------------------------- 284 285 -- Runtime Function: int __ashlsi3 (int A, int B) 286 -- Runtime Function: long __ashldi3 (long A, int B) 287 -- Runtime Function: long long __ashlti3 (long long A, int B) 288 These functions return the result of shifting A left by B bits. 289 290 -- Runtime Function: int __ashrsi3 (int A, int B) 291 -- Runtime Function: long __ashrdi3 (long A, int B) 292 -- Runtime Function: long long __ashrti3 (long long A, int B) 293 These functions return the result of arithmetically shifting A 294 right by B bits. 295 296 -- Runtime Function: int __divsi3 (int A, int B) 297 -- Runtime Function: long __divdi3 (long A, long B) 298 -- Runtime Function: long long __divti3 (long long A, long long B) 299 These functions return the quotient of the signed division of A and 300 B. 301 302 -- Runtime Function: int __lshrsi3 (int A, int B) 303 -- Runtime Function: long __lshrdi3 (long A, int B) 304 -- Runtime Function: long long __lshrti3 (long long A, int B) 305 These functions return the result of logically shifting A right by 306 B bits. 307 308 -- Runtime Function: int __modsi3 (int A, int B) 309 -- Runtime Function: long __moddi3 (long A, long B) 310 -- Runtime Function: long long __modti3 (long long A, long long B) 311 These functions return the remainder of the signed division of A 312 and B. 313 314 -- Runtime Function: int __mulsi3 (int A, int B) 315 -- Runtime Function: long __muldi3 (long A, long B) 316 -- Runtime Function: long long __multi3 (long long A, long long B) 317 These functions return the product of A and B. 318 319 -- Runtime Function: long __negdi2 (long A) 320 -- Runtime Function: long long __negti2 (long long A) 321 These functions return the negation of A. 322 323 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 324 int B) 325 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, 326 unsigned long B) 327 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 328 A, unsigned long long B) 329 These functions return the quotient of the unsigned division of A 330 and B. 331 332 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, 333 unsigned long B, unsigned long *C) 334 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long 335 long A, unsigned long long B, unsigned long long *C) 336 These functions calculate both the quotient and remainder of the 337 unsigned division of A and B. The return value is the quotient, 338 and the remainder is placed in variable pointed to by C. 339 340 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 341 int B) 342 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, 343 unsigned long B) 344 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 345 A, unsigned long long B) 346 These functions return the remainder of the unsigned division of A 347 and B. 348 349 4.1.2 Comparison functions 350 -------------------------- 351 352 The following functions implement integral comparisons. These functions 353 implement a low-level compare, upon which the higher level comparison 354 operators (such as less than and greater than or equal to) can be 355 constructed. The returned values lie in the range zero to two, to allow 356 the high-level operators to be implemented by testing the returned 357 result using either signed or unsigned comparison. 358 359 -- Runtime Function: int __cmpdi2 (long A, long B) 360 -- Runtime Function: int __cmpti2 (long long A, long long B) 361 These functions perform a signed comparison of A and B. If A is 362 less than B, they return 0; if A is greater than B, they return 2; 363 and if A and B are equal they return 1. 364 365 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 366 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned 367 long long B) 368 These functions perform an unsigned comparison of A and B. If A 369 is less than B, they return 0; if A is greater than B, they return 370 2; and if A and B are equal they return 1. 371 372 4.1.3 Trapping arithmetic functions 373 ----------------------------------- 374 375 The following functions implement trapping arithmetic. These functions 376 call the libc function `abort' upon signed arithmetic overflow. 377 378 -- Runtime Function: int __absvsi2 (int A) 379 -- Runtime Function: long __absvdi2 (long A) 380 These functions return the absolute value of A. 381 382 -- Runtime Function: int __addvsi3 (int A, int B) 383 -- Runtime Function: long __addvdi3 (long A, long B) 384 These functions return the sum of A and B; that is `A + B'. 385 386 -- Runtime Function: int __mulvsi3 (int A, int B) 387 -- Runtime Function: long __mulvdi3 (long A, long B) 388 The functions return the product of A and B; that is `A * B'. 389 390 -- Runtime Function: int __negvsi2 (int A) 391 -- Runtime Function: long __negvdi2 (long A) 392 These functions return the negation of A; that is `-A'. 393 394 -- Runtime Function: int __subvsi3 (int A, int B) 395 -- Runtime Function: long __subvdi3 (long A, long B) 396 These functions return the difference between B and A; that is `A 397 - B'. 398 399 4.1.4 Bit operations 400 -------------------- 401 402 -- Runtime Function: int __clzsi2 (int A) 403 -- Runtime Function: int __clzdi2 (long A) 404 -- Runtime Function: int __clzti2 (long long A) 405 These functions return the number of leading 0-bits in A, starting 406 at the most significant bit position. If A is zero, the result is 407 undefined. 408 409 -- Runtime Function: int __ctzsi2 (int A) 410 -- Runtime Function: int __ctzdi2 (long A) 411 -- Runtime Function: int __ctzti2 (long long A) 412 These functions return the number of trailing 0-bits in A, starting 413 at the least significant bit position. If A is zero, the result is 414 undefined. 415 416 -- Runtime Function: int __ffsdi2 (long A) 417 -- Runtime Function: int __ffsti2 (long long A) 418 These functions return the index of the least significant 1-bit in 419 A, or the value zero if A is zero. The least significant bit is 420 index one. 421 422 -- Runtime Function: int __paritysi2 (int A) 423 -- Runtime Function: int __paritydi2 (long A) 424 -- Runtime Function: int __parityti2 (long long A) 425 These functions return the value zero if the number of bits set in 426 A is even, and the value one otherwise. 427 428 -- Runtime Function: int __popcountsi2 (int A) 429 -- Runtime Function: int __popcountdi2 (long A) 430 -- Runtime Function: int __popcountti2 (long long A) 431 These functions return the number of bits set in A. 432 433 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 434 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 435 These functions return the A byteswapped. 436 437 438 File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 439 440 4.2 Routines for floating point emulation 441 ========================================= 442 443 The software floating point library is used on machines which do not 444 have hardware support for floating point. It is also used whenever 445 `-msoft-float' is used to disable generation of floating point 446 instructions. (Not all targets support this switch.) 447 448 For compatibility with other compilers, the floating point emulation 449 routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note 450 Library Calls::). In this section, the default names are used. 451 452 Presently the library does not support `XFmode', which is used for 453 `long double' on some architectures. 454 455 4.2.1 Arithmetic functions 456 -------------------------- 457 458 -- Runtime Function: float __addsf3 (float A, float B) 459 -- Runtime Function: double __adddf3 (double A, double B) 460 -- Runtime Function: long double __addtf3 (long double A, long double 461 B) 462 -- Runtime Function: long double __addxf3 (long double A, long double 463 B) 464 These functions return the sum of A and B. 465 466 -- Runtime Function: float __subsf3 (float A, float B) 467 -- Runtime Function: double __subdf3 (double A, double B) 468 -- Runtime Function: long double __subtf3 (long double A, long double 469 B) 470 -- Runtime Function: long double __subxf3 (long double A, long double 471 B) 472 These functions return the difference between B and A; that is, 473 A - B. 474 475 -- Runtime Function: float __mulsf3 (float A, float B) 476 -- Runtime Function: double __muldf3 (double A, double B) 477 -- Runtime Function: long double __multf3 (long double A, long double 478 B) 479 -- Runtime Function: long double __mulxf3 (long double A, long double 480 B) 481 These functions return the product of A and B. 482 483 -- Runtime Function: float __divsf3 (float A, float B) 484 -- Runtime Function: double __divdf3 (double A, double B) 485 -- Runtime Function: long double __divtf3 (long double A, long double 486 B) 487 -- Runtime Function: long double __divxf3 (long double A, long double 488 B) 489 These functions return the quotient of A and B; that is, A / B. 490 491 -- Runtime Function: float __negsf2 (float A) 492 -- Runtime Function: double __negdf2 (double A) 493 -- Runtime Function: long double __negtf2 (long double A) 494 -- Runtime Function: long double __negxf2 (long double A) 495 These functions return the negation of A. They simply flip the 496 sign bit, so they can produce negative zero and negative NaN. 497 498 4.2.2 Conversion functions 499 -------------------------- 500 501 -- Runtime Function: double __extendsfdf2 (float A) 502 -- Runtime Function: long double __extendsftf2 (float A) 503 -- Runtime Function: long double __extendsfxf2 (float A) 504 -- Runtime Function: long double __extenddftf2 (double A) 505 -- Runtime Function: long double __extenddfxf2 (double A) 506 These functions extend A to the wider mode of their return type. 507 508 -- Runtime Function: double __truncxfdf2 (long double A) 509 -- Runtime Function: double __trunctfdf2 (long double A) 510 -- Runtime Function: float __truncxfsf2 (long double A) 511 -- Runtime Function: float __trunctfsf2 (long double A) 512 -- Runtime Function: float __truncdfsf2 (double A) 513 These functions truncate A to the narrower mode of their return 514 type, rounding toward zero. 515 516 -- Runtime Function: int __fixsfsi (float A) 517 -- Runtime Function: int __fixdfsi (double A) 518 -- Runtime Function: int __fixtfsi (long double A) 519 -- Runtime Function: int __fixxfsi (long double A) 520 These functions convert A to a signed integer, rounding toward 521 zero. 522 523 -- Runtime Function: long __fixsfdi (float A) 524 -- Runtime Function: long __fixdfdi (double A) 525 -- Runtime Function: long __fixtfdi (long double A) 526 -- Runtime Function: long __fixxfdi (long double A) 527 These functions convert A to a signed long, rounding toward zero. 528 529 -- Runtime Function: long long __fixsfti (float A) 530 -- Runtime Function: long long __fixdfti (double A) 531 -- Runtime Function: long long __fixtfti (long double A) 532 -- Runtime Function: long long __fixxfti (long double A) 533 These functions convert A to a signed long long, rounding toward 534 zero. 535 536 -- Runtime Function: unsigned int __fixunssfsi (float A) 537 -- Runtime Function: unsigned int __fixunsdfsi (double A) 538 -- Runtime Function: unsigned int __fixunstfsi (long double A) 539 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 540 These functions convert A to an unsigned integer, rounding toward 541 zero. Negative values all become zero. 542 543 -- Runtime Function: unsigned long __fixunssfdi (float A) 544 -- Runtime Function: unsigned long __fixunsdfdi (double A) 545 -- Runtime Function: unsigned long __fixunstfdi (long double A) 546 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 547 These functions convert A to an unsigned long, rounding toward 548 zero. Negative values all become zero. 549 550 -- Runtime Function: unsigned long long __fixunssfti (float A) 551 -- Runtime Function: unsigned long long __fixunsdfti (double A) 552 -- Runtime Function: unsigned long long __fixunstfti (long double A) 553 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 554 These functions convert A to an unsigned long long, rounding 555 toward zero. Negative values all become zero. 556 557 -- Runtime Function: float __floatsisf (int I) 558 -- Runtime Function: double __floatsidf (int I) 559 -- Runtime Function: long double __floatsitf (int I) 560 -- Runtime Function: long double __floatsixf (int I) 561 These functions convert I, a signed integer, to floating point. 562 563 -- Runtime Function: float __floatdisf (long I) 564 -- Runtime Function: double __floatdidf (long I) 565 -- Runtime Function: long double __floatditf (long I) 566 -- Runtime Function: long double __floatdixf (long I) 567 These functions convert I, a signed long, to floating point. 568 569 -- Runtime Function: float __floattisf (long long I) 570 -- Runtime Function: double __floattidf (long long I) 571 -- Runtime Function: long double __floattitf (long long I) 572 -- Runtime Function: long double __floattixf (long long I) 573 These functions convert I, a signed long long, to floating point. 574 575 -- Runtime Function: float __floatunsisf (unsigned int I) 576 -- Runtime Function: double __floatunsidf (unsigned int I) 577 -- Runtime Function: long double __floatunsitf (unsigned int I) 578 -- Runtime Function: long double __floatunsixf (unsigned int I) 579 These functions convert I, an unsigned integer, to floating point. 580 581 -- Runtime Function: float __floatundisf (unsigned long I) 582 -- Runtime Function: double __floatundidf (unsigned long I) 583 -- Runtime Function: long double __floatunditf (unsigned long I) 584 -- Runtime Function: long double __floatundixf (unsigned long I) 585 These functions convert I, an unsigned long, to floating point. 586 587 -- Runtime Function: float __floatuntisf (unsigned long long I) 588 -- Runtime Function: double __floatuntidf (unsigned long long I) 589 -- Runtime Function: long double __floatuntitf (unsigned long long I) 590 -- Runtime Function: long double __floatuntixf (unsigned long long I) 591 These functions convert I, an unsigned long long, to floating 592 point. 593 594 4.2.3 Comparison functions 595 -------------------------- 596 597 There are two sets of basic comparison functions. 598 599 -- Runtime Function: int __cmpsf2 (float A, float B) 600 -- Runtime Function: int __cmpdf2 (double A, double B) 601 -- Runtime Function: int __cmptf2 (long double A, long double B) 602 These functions calculate a <=> b. That is, if A is less than B, 603 they return -1; if A is greater than B, they return 1; and if A 604 and B are equal they return 0. If either argument is NaN they 605 return 1, but you should not rely on this; if NaN is a 606 possibility, use one of the higher-level comparison functions. 607 608 -- Runtime Function: int __unordsf2 (float A, float B) 609 -- Runtime Function: int __unorddf2 (double A, double B) 610 -- Runtime Function: int __unordtf2 (long double A, long double B) 611 These functions return a nonzero value if either argument is NaN, 612 otherwise 0. 613 614 There is also a complete group of higher level functions which 615 correspond directly to comparison operators. They implement the ISO C 616 semantics for floating-point comparisons, taking NaN into account. Pay 617 careful attention to the return values defined for each set. Under the 618 hood, all of these routines are implemented as 619 620 if (__unordXf2 (a, b)) 621 return E; 622 return __cmpXf2 (a, b); 623 624 where E is a constant chosen to give the proper behavior for NaN. 625 Thus, the meaning of the return value is different for each set. Do 626 not rely on this implementation; only the semantics documented below 627 are guaranteed. 628 629 -- Runtime Function: int __eqsf2 (float A, float B) 630 -- Runtime Function: int __eqdf2 (double A, double B) 631 -- Runtime Function: int __eqtf2 (long double A, long double B) 632 These functions return zero if neither argument is NaN, and A and 633 B are equal. 634 635 -- Runtime Function: int __nesf2 (float A, float B) 636 -- Runtime Function: int __nedf2 (double A, double B) 637 -- Runtime Function: int __netf2 (long double A, long double B) 638 These functions return a nonzero value if either argument is NaN, 639 or if A and B are unequal. 640 641 -- Runtime Function: int __gesf2 (float A, float B) 642 -- Runtime Function: int __gedf2 (double A, double B) 643 -- Runtime Function: int __getf2 (long double A, long double B) 644 These functions return a value greater than or equal to zero if 645 neither argument is NaN, and A is greater than or equal to B. 646 647 -- Runtime Function: int __ltsf2 (float A, float B) 648 -- Runtime Function: int __ltdf2 (double A, double B) 649 -- Runtime Function: int __lttf2 (long double A, long double B) 650 These functions return a value less than zero if neither argument 651 is NaN, and A is strictly less than B. 652 653 -- Runtime Function: int __lesf2 (float A, float B) 654 -- Runtime Function: int __ledf2 (double A, double B) 655 -- Runtime Function: int __letf2 (long double A, long double B) 656 These functions return a value less than or equal to zero if 657 neither argument is NaN, and A is less than or equal to B. 658 659 -- Runtime Function: int __gtsf2 (float A, float B) 660 -- Runtime Function: int __gtdf2 (double A, double B) 661 -- Runtime Function: int __gttf2 (long double A, long double B) 662 These functions return a value greater than zero if neither 663 argument is NaN, and A is strictly greater than B. 664 665 4.2.4 Other floating-point functions 666 ------------------------------------ 667 668 -- Runtime Function: float __powisf2 (float A, int B) 669 -- Runtime Function: double __powidf2 (double A, int B) 670 -- Runtime Function: long double __powitf2 (long double A, int B) 671 -- Runtime Function: long double __powixf2 (long double A, int B) 672 These functions convert raise A to the power B. 673 674 -- Runtime Function: complex float __mulsc3 (float A, float B, float 675 C, float D) 676 -- Runtime Function: complex double __muldc3 (double A, double B, 677 double C, double D) 678 -- Runtime Function: complex long double __multc3 (long double A, long 679 double B, long double C, long double D) 680 -- Runtime Function: complex long double __mulxc3 (long double A, long 681 double B, long double C, long double D) 682 These functions return the product of A + iB and C + iD, following 683 the rules of C99 Annex G. 684 685 -- Runtime Function: complex float __divsc3 (float A, float B, float 686 C, float D) 687 -- Runtime Function: complex double __divdc3 (double A, double B, 688 double C, double D) 689 -- Runtime Function: complex long double __divtc3 (long double A, long 690 double B, long double C, long double D) 691 -- Runtime Function: complex long double __divxc3 (long double A, long 692 double B, long double C, long double D) 693 These functions return the quotient of A + iB and C + iD (i.e., (A 694 + iB) / (C + iD)), following the rules of C99 Annex G. 695 696 697 File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 698 699 4.3 Routines for decimal floating point emulation 700 ================================================= 701 702 The software decimal floating point library implements IEEE 754-2008 703 decimal floating point arithmetic and is only activated on selected 704 targets. 705 706 The software decimal floating point library supports either DPD 707 (Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 708 selected at configure time. 709 710 4.3.1 Arithmetic functions 711 -------------------------- 712 713 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 714 B) 715 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 716 B) 717 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 718 B) 719 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 720 B) 721 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 722 _Decimal128 B) 723 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 724 _Decimal128 B) 725 These functions return the sum of A and B. 726 727 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 728 B) 729 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 730 B) 731 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 732 B) 733 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 734 B) 735 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 736 _Decimal128 B) 737 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 738 _Decimal128 B) 739 These functions return the difference between B and A; that is, 740 A - B. 741 742 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 743 B) 744 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 745 B) 746 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 747 B) 748 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 749 B) 750 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 751 _Decimal128 B) 752 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 753 _Decimal128 B) 754 These functions return the product of A and B. 755 756 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 757 B) 758 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 759 B) 760 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 761 B) 762 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 763 B) 764 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 765 _Decimal128 B) 766 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 767 _Decimal128 B) 768 These functions return the quotient of A and B; that is, A / B. 769 770 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 771 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 772 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 773 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 774 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 775 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 776 These functions return the negation of A. They simply flip the 777 sign bit, so they can produce negative zero and negative NaN. 778 779 4.3.2 Conversion functions 780 -------------------------- 781 782 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 783 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 784 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 785 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 786 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 787 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 788 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 789 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 790 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 791 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 792 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 793 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 794 These functions convert the value A from one decimal floating type 795 to another. 796 797 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 798 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 799 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 800 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 801 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 802 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 803 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 804 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 805 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 806 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 807 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 808 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 809 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 810 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 811 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 812 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 813 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 814 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 815 These functions convert the value of A from a binary floating type 816 to a decimal floating type of a different size. 817 818 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 819 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 820 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 821 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 822 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 823 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 824 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 825 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 826 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 827 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 828 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 829 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 830 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 831 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 832 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 833 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 834 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 835 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 836 These functions convert the value of A from a decimal floating type 837 to a binary floating type of a different size. 838 839 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 840 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 841 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 842 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 843 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 844 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 845 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 846 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 847 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 848 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 849 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 850 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 851 These functions convert the value of A between decimal and binary 852 floating types of the same size. 853 854 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 855 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 856 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 857 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 858 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 859 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 860 These functions convert A to a signed integer. 861 862 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 863 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 864 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 865 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 866 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 867 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 868 These functions convert A to a signed long. 869 870 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 871 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 872 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 873 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 874 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 875 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 876 These functions convert A to an unsigned integer. Negative values 877 all become zero. 878 879 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 880 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 881 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 882 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 883 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 884 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 885 These functions convert A to an unsigned long. Negative values 886 all become zero. 887 888 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 889 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 890 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 891 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 892 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 893 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 894 These functions convert I, a signed integer, to decimal floating 895 point. 896 897 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 898 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 899 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 900 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 901 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 902 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 903 These functions convert I, a signed long, to decimal floating 904 point. 905 906 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 907 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 908 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 909 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 910 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 911 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 912 These functions convert I, an unsigned integer, to decimal 913 floating point. 914 915 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 916 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 917 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 918 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 919 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 920 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 921 These functions convert I, an unsigned long, to decimal floating 922 point. 923 924 4.3.3 Comparison functions 925 -------------------------- 926 927 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 928 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 929 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 930 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 931 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 932 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 933 These functions return a nonzero value if either argument is NaN, 934 otherwise 0. 935 936 There is also a complete group of higher level functions which 937 correspond directly to comparison operators. They implement the ISO C 938 semantics for floating-point comparisons, taking NaN into account. Pay 939 careful attention to the return values defined for each set. Under the 940 hood, all of these routines are implemented as 941 942 if (__bid_unordXd2 (a, b)) 943 return E; 944 return __bid_cmpXd2 (a, b); 945 946 where E is a constant chosen to give the proper behavior for NaN. 947 Thus, the meaning of the return value is different for each set. Do 948 not rely on this implementation; only the semantics documented below 949 are guaranteed. 950 951 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 952 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 953 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 954 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 955 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 956 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 957 These functions return zero if neither argument is NaN, and A and 958 B are equal. 959 960 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 961 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 962 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 963 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 964 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 965 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 966 These functions return a nonzero value if either argument is NaN, 967 or if A and B are unequal. 968 969 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 970 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 971 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 972 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 973 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 974 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 975 These functions return a value greater than or equal to zero if 976 neither argument is NaN, and A is greater than or equal to B. 977 978 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 979 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 980 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 981 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 982 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 983 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 984 These functions return a value less than zero if neither argument 985 is NaN, and A is strictly less than B. 986 987 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 988 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 989 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 990 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 991 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 992 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 993 These functions return a value less than or equal to zero if 994 neither argument is NaN, and A is less than or equal to B. 995 996 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 997 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 998 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 999 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 1000 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 1001 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 1002 These functions return a value greater than zero if neither 1003 argument is NaN, and A is strictly greater than B. 1004 1005 1006 File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1007 1008 4.4 Routines for fixed-point fractional emulation 1009 ================================================= 1010 1011 The software fixed-point library implements fixed-point fractional 1012 arithmetic, and is only activated on selected targets. 1013 1014 For ease of comprehension `fract' is an alias for the `_Fract' type, 1015 `accum' an alias for `_Accum', and `sat' an alias for `_Sat'. 1016 1017 For illustrative purposes, in this section the fixed-point fractional 1018 type `short fract' is assumed to correspond to machine mode `QQmode'; 1019 `unsigned short fract' to `UQQmode'; `fract' to `HQmode'; 1020 `unsigned fract' to `UHQmode'; `long fract' to `SQmode'; 1021 `unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and 1022 `unsigned long long fract' to `UDQmode'. Similarly the fixed-point 1023 accumulator type `short accum' corresponds to `HAmode'; 1024 `unsigned short accum' to `UHAmode'; `accum' to `SAmode'; 1025 `unsigned accum' to `USAmode'; `long accum' to `DAmode'; 1026 `unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and 1027 `unsigned long long accum' to `UTAmode'. 1028 1029 4.4.1 Arithmetic functions 1030 -------------------------- 1031 1032 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1033 B) 1034 -- Runtime Function: fract __addhq3 (fract A, fract B) 1035 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1036 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1037 long fract B) 1038 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1039 fract A, unsigned short fract B) 1040 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1041 unsigned fract B) 1042 -- Runtime Function: unsigned long fract __addusq3 (unsigned long 1043 fract A, unsigned long fract B) 1044 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1045 long fract A, unsigned long long fract B) 1046 -- Runtime Function: short accum __addha3 (short accum A, short accum 1047 B) 1048 -- Runtime Function: accum __addsa3 (accum A, accum B) 1049 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1050 -- Runtime Function: long long accum __addta3 (long long accum A, long 1051 long accum B) 1052 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1053 accum A, unsigned short accum B) 1054 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1055 unsigned accum B) 1056 -- Runtime Function: unsigned long accum __adduda3 (unsigned long 1057 accum A, unsigned long accum B) 1058 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1059 long accum A, unsigned long long accum B) 1060 These functions return the sum of A and B. 1061 1062 -- Runtime Function: short fract __ssaddqq3 (short fract A, short 1063 fract B) 1064 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1065 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1066 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1067 long long fract B) 1068 -- Runtime Function: short accum __ssaddha3 (short accum A, short 1069 accum B) 1070 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1071 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1072 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1073 long long accum B) 1074 These functions return the sum of A and B with signed saturation. 1075 1076 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1077 fract A, unsigned short fract B) 1078 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1079 unsigned fract B) 1080 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1081 fract A, unsigned long fract B) 1082 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1083 long long fract A, unsigned long long fract B) 1084 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1085 accum A, unsigned short accum B) 1086 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1087 unsigned accum B) 1088 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1089 accum A, unsigned long accum B) 1090 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1091 long long accum A, unsigned long long accum B) 1092 These functions return the sum of A and B with unsigned saturation. 1093 1094 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1095 B) 1096 -- Runtime Function: fract __subhq3 (fract A, fract B) 1097 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1098 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1099 long fract B) 1100 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1101 fract A, unsigned short fract B) 1102 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1103 unsigned fract B) 1104 -- Runtime Function: unsigned long fract __subusq3 (unsigned long 1105 fract A, unsigned long fract B) 1106 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1107 long fract A, unsigned long long fract B) 1108 -- Runtime Function: short accum __subha3 (short accum A, short accum 1109 B) 1110 -- Runtime Function: accum __subsa3 (accum A, accum B) 1111 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1112 -- Runtime Function: long long accum __subta3 (long long accum A, long 1113 long accum B) 1114 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1115 accum A, unsigned short accum B) 1116 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1117 unsigned accum B) 1118 -- Runtime Function: unsigned long accum __subuda3 (unsigned long 1119 accum A, unsigned long accum B) 1120 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1121 long accum A, unsigned long long accum B) 1122 These functions return the difference of A and B; that is, `A - B'. 1123 1124 -- Runtime Function: short fract __sssubqq3 (short fract A, short 1125 fract B) 1126 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1127 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1128 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1129 long long fract B) 1130 -- Runtime Function: short accum __sssubha3 (short accum A, short 1131 accum B) 1132 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1133 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1134 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1135 long long accum B) 1136 These functions return the difference of A and B with signed 1137 saturation; that is, `A - B'. 1138 1139 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1140 fract A, unsigned short fract B) 1141 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1142 unsigned fract B) 1143 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1144 fract A, unsigned long fract B) 1145 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1146 long long fract A, unsigned long long fract B) 1147 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1148 accum A, unsigned short accum B) 1149 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1150 unsigned accum B) 1151 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1152 accum A, unsigned long accum B) 1153 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1154 long long accum A, unsigned long long accum B) 1155 These functions return the difference of A and B with unsigned 1156 saturation; that is, `A - B'. 1157 1158 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1159 B) 1160 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1161 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1162 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1163 long fract B) 1164 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1165 fract A, unsigned short fract B) 1166 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1167 unsigned fract B) 1168 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long 1169 fract A, unsigned long fract B) 1170 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1171 long fract A, unsigned long long fract B) 1172 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1173 B) 1174 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1175 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1176 -- Runtime Function: long long accum __multa3 (long long accum A, long 1177 long accum B) 1178 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1179 accum A, unsigned short accum B) 1180 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1181 unsigned accum B) 1182 -- Runtime Function: unsigned long accum __muluda3 (unsigned long 1183 accum A, unsigned long accum B) 1184 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1185 long accum A, unsigned long long accum B) 1186 These functions return the product of A and B. 1187 1188 -- Runtime Function: short fract __ssmulqq3 (short fract A, short 1189 fract B) 1190 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1191 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1192 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1193 long long fract B) 1194 -- Runtime Function: short accum __ssmulha3 (short accum A, short 1195 accum B) 1196 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1197 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1198 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1199 long long accum B) 1200 These functions return the product of A and B with signed 1201 saturation. 1202 1203 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1204 fract A, unsigned short fract B) 1205 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1206 unsigned fract B) 1207 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1208 fract A, unsigned long fract B) 1209 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1210 long long fract A, unsigned long long fract B) 1211 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1212 accum A, unsigned short accum B) 1213 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1214 unsigned accum B) 1215 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1216 accum A, unsigned long accum B) 1217 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1218 long long accum A, unsigned long long accum B) 1219 These functions return the product of A and B with unsigned 1220 saturation. 1221 1222 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1223 B) 1224 -- Runtime Function: fract __divhq3 (fract A, fract B) 1225 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1226 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1227 long fract B) 1228 -- Runtime Function: short accum __divha3 (short accum A, short accum 1229 B) 1230 -- Runtime Function: accum __divsa3 (accum A, accum B) 1231 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1232 -- Runtime Function: long long accum __divta3 (long long accum A, long 1233 long accum B) 1234 These functions return the quotient of the signed division of A 1235 and B. 1236 1237 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1238 fract A, unsigned short fract B) 1239 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1240 unsigned fract B) 1241 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1242 fract A, unsigned long fract B) 1243 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned 1244 long long fract A, unsigned long long fract B) 1245 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1246 accum A, unsigned short accum B) 1247 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1248 unsigned accum B) 1249 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1250 accum A, unsigned long accum B) 1251 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned 1252 long long accum A, unsigned long long accum B) 1253 These functions return the quotient of the unsigned division of A 1254 and B. 1255 1256 -- Runtime Function: short fract __ssdivqq3 (short fract A, short 1257 fract B) 1258 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1259 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1260 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1261 long long fract B) 1262 -- Runtime Function: short accum __ssdivha3 (short accum A, short 1263 accum B) 1264 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1265 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1266 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1267 long long accum B) 1268 These functions return the quotient of the signed division of A 1269 and B with signed saturation. 1270 1271 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1272 fract A, unsigned short fract B) 1273 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1274 unsigned fract B) 1275 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1276 fract A, unsigned long fract B) 1277 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1278 long long fract A, unsigned long long fract B) 1279 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1280 accum A, unsigned short accum B) 1281 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1282 unsigned accum B) 1283 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1284 accum A, unsigned long accum B) 1285 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1286 long long accum A, unsigned long long accum B) 1287 These functions return the quotient of the unsigned division of A 1288 and B with unsigned saturation. 1289 1290 -- Runtime Function: short fract __negqq2 (short fract A) 1291 -- Runtime Function: fract __neghq2 (fract A) 1292 -- Runtime Function: long fract __negsq2 (long fract A) 1293 -- Runtime Function: long long fract __negdq2 (long long fract A) 1294 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1295 fract A) 1296 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1297 -- Runtime Function: unsigned long fract __negusq2 (unsigned long 1298 fract A) 1299 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1300 long fract A) 1301 -- Runtime Function: short accum __negha2 (short accum A) 1302 -- Runtime Function: accum __negsa2 (accum A) 1303 -- Runtime Function: long accum __negda2 (long accum A) 1304 -- Runtime Function: long long accum __negta2 (long long accum A) 1305 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1306 accum A) 1307 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1308 -- Runtime Function: unsigned long accum __neguda2 (unsigned long 1309 accum A) 1310 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1311 long accum A) 1312 These functions return the negation of A. 1313 1314 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1315 -- Runtime Function: fract __ssneghq2 (fract A) 1316 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1317 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1318 -- Runtime Function: short accum __ssnegha2 (short accum A) 1319 -- Runtime Function: accum __ssnegsa2 (accum A) 1320 -- Runtime Function: long accum __ssnegda2 (long accum A) 1321 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1322 These functions return the negation of A with signed saturation. 1323 1324 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1325 fract A) 1326 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1327 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1328 fract A) 1329 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1330 long long fract A) 1331 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1332 accum A) 1333 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1334 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1335 accum A) 1336 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1337 long long accum A) 1338 These functions return the negation of A with unsigned saturation. 1339 1340 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1341 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1342 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1343 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1344 B) 1345 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1346 fract A, int B) 1347 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1348 B) 1349 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1350 fract A, int B) 1351 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned 1352 long long fract A, int B) 1353 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1354 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1355 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1356 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1357 B) 1358 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1359 accum A, int B) 1360 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1361 B) 1362 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1363 accum A, int B) 1364 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned 1365 long long accum A, int B) 1366 These functions return the result of shifting A left by B bits. 1367 1368 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1369 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1370 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1371 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1372 B) 1373 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1374 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1375 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1376 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1377 B) 1378 These functions return the result of arithmetically shifting A 1379 right by B bits. 1380 1381 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1382 fract A, int B) 1383 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1384 B) 1385 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1386 fract A, int B) 1387 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned 1388 long long fract A, int B) 1389 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1390 accum A, int B) 1391 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1392 B) 1393 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1394 accum A, int B) 1395 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned 1396 long long accum A, int B) 1397 These functions return the result of logically shifting A right by 1398 B bits. 1399 1400 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1401 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1402 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1403 int B) 1404 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1405 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1406 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1407 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1408 int B) 1409 These functions return the result of shifting A left by B bits 1410 with signed saturation. 1411 1412 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1413 fract A, int B) 1414 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, 1415 int B) 1416 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1417 fract A, int B) 1418 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1419 long long fract A, int B) 1420 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1421 accum A, int B) 1422 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, 1423 int B) 1424 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1425 accum A, int B) 1426 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1427 long long accum A, int B) 1428 These functions return the result of shifting A left by B bits 1429 with unsigned saturation. 1430 1431 4.4.2 Comparison functions 1432 -------------------------- 1433 1434 The following functions implement fixed-point comparisons. These 1435 functions implement a low-level compare, upon which the higher level 1436 comparison operators (such as less than and greater than or equal to) 1437 can be constructed. The returned values lie in the range zero to two, 1438 to allow the high-level operators to be implemented by testing the 1439 returned result using either signed or unsigned comparison. 1440 1441 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1442 -- Runtime Function: int __cmphq2 (fract A, fract B) 1443 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1444 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1445 B) 1446 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1447 short fract B) 1448 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1449 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1450 long fract B) 1451 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1452 unsigned long long fract B) 1453 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1454 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1455 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1456 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1457 B) 1458 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1459 short accum B) 1460 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1461 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1462 long accum B) 1463 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1464 unsigned long long accum B) 1465 These functions perform a signed or unsigned comparison of A and B 1466 (depending on the selected machine mode). If A is less than B, 1467 they return 0; if A is greater than B, they return 2; and if A and 1468 B are equal they return 1. 1469 1470 4.4.3 Conversion functions 1471 -------------------------- 1472 1473 -- Runtime Function: fract __fractqqhq2 (short fract A) 1474 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1475 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1476 -- Runtime Function: short accum __fractqqha (short fract A) 1477 -- Runtime Function: accum __fractqqsa (short fract A) 1478 -- Runtime Function: long accum __fractqqda (short fract A) 1479 -- Runtime Function: long long accum __fractqqta (short fract A) 1480 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1481 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1482 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1483 -- Runtime Function: unsigned long long fract __fractqqudq (short 1484 fract A) 1485 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1486 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1487 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1488 -- Runtime Function: unsigned long long accum __fractqquta (short 1489 fract A) 1490 -- Runtime Function: signed char __fractqqqi (short fract A) 1491 -- Runtime Function: short __fractqqhi (short fract A) 1492 -- Runtime Function: int __fractqqsi (short fract A) 1493 -- Runtime Function: long __fractqqdi (short fract A) 1494 -- Runtime Function: long long __fractqqti (short fract A) 1495 -- Runtime Function: float __fractqqsf (short fract A) 1496 -- Runtime Function: double __fractqqdf (short fract A) 1497 -- Runtime Function: short fract __fracthqqq2 (fract A) 1498 -- Runtime Function: long fract __fracthqsq2 (fract A) 1499 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1500 -- Runtime Function: short accum __fracthqha (fract A) 1501 -- Runtime Function: accum __fracthqsa (fract A) 1502 -- Runtime Function: long accum __fracthqda (fract A) 1503 -- Runtime Function: long long accum __fracthqta (fract A) 1504 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1505 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1506 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1507 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1508 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1509 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1510 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1511 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1512 -- Runtime Function: signed char __fracthqqi (fract A) 1513 -- Runtime Function: short __fracthqhi (fract A) 1514 -- Runtime Function: int __fracthqsi (fract A) 1515 -- Runtime Function: long __fracthqdi (fract A) 1516 -- Runtime Function: long long __fracthqti (fract A) 1517 -- Runtime Function: float __fracthqsf (fract A) 1518 -- Runtime Function: double __fracthqdf (fract A) 1519 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1520 -- Runtime Function: fract __fractsqhq2 (long fract A) 1521 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1522 -- Runtime Function: short accum __fractsqha (long fract A) 1523 -- Runtime Function: accum __fractsqsa (long fract A) 1524 -- Runtime Function: long accum __fractsqda (long fract A) 1525 -- Runtime Function: long long accum __fractsqta (long fract A) 1526 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1527 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1528 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1529 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1530 A) 1531 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1532 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1533 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1534 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1535 A) 1536 -- Runtime Function: signed char __fractsqqi (long fract A) 1537 -- Runtime Function: short __fractsqhi (long fract A) 1538 -- Runtime Function: int __fractsqsi (long fract A) 1539 -- Runtime Function: long __fractsqdi (long fract A) 1540 -- Runtime Function: long long __fractsqti (long fract A) 1541 -- Runtime Function: float __fractsqsf (long fract A) 1542 -- Runtime Function: double __fractsqdf (long fract A) 1543 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1544 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1545 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1546 -- Runtime Function: short accum __fractdqha (long long fract A) 1547 -- Runtime Function: accum __fractdqsa (long long fract A) 1548 -- Runtime Function: long accum __fractdqda (long long fract A) 1549 -- Runtime Function: long long accum __fractdqta (long long fract A) 1550 -- Runtime Function: unsigned short fract __fractdquqq (long long 1551 fract A) 1552 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1553 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1554 A) 1555 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1556 fract A) 1557 -- Runtime Function: unsigned short accum __fractdquha (long long 1558 fract A) 1559 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1560 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1561 A) 1562 -- Runtime Function: unsigned long long accum __fractdquta (long long 1563 fract A) 1564 -- Runtime Function: signed char __fractdqqi (long long fract A) 1565 -- Runtime Function: short __fractdqhi (long long fract A) 1566 -- Runtime Function: int __fractdqsi (long long fract A) 1567 -- Runtime Function: long __fractdqdi (long long fract A) 1568 -- Runtime Function: long long __fractdqti (long long fract A) 1569 -- Runtime Function: float __fractdqsf (long long fract A) 1570 -- Runtime Function: double __fractdqdf (long long fract A) 1571 -- Runtime Function: short fract __fracthaqq (short accum A) 1572 -- Runtime Function: fract __fracthahq (short accum A) 1573 -- Runtime Function: long fract __fracthasq (short accum A) 1574 -- Runtime Function: long long fract __fracthadq (short accum A) 1575 -- Runtime Function: accum __fracthasa2 (short accum A) 1576 -- Runtime Function: long accum __fracthada2 (short accum A) 1577 -- Runtime Function: long long accum __fracthata2 (short accum A) 1578 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1579 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1580 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1581 -- Runtime Function: unsigned long long fract __fracthaudq (short 1582 accum A) 1583 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1584 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1585 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1586 -- Runtime Function: unsigned long long accum __fracthauta (short 1587 accum A) 1588 -- Runtime Function: signed char __fracthaqi (short accum A) 1589 -- Runtime Function: short __fracthahi (short accum A) 1590 -- Runtime Function: int __fracthasi (short accum A) 1591 -- Runtime Function: long __fracthadi (short accum A) 1592 -- Runtime Function: long long __fracthati (short accum A) 1593 -- Runtime Function: float __fracthasf (short accum A) 1594 -- Runtime Function: double __fracthadf (short accum A) 1595 -- Runtime Function: short fract __fractsaqq (accum A) 1596 -- Runtime Function: fract __fractsahq (accum A) 1597 -- Runtime Function: long fract __fractsasq (accum A) 1598 -- Runtime Function: long long fract __fractsadq (accum A) 1599 -- Runtime Function: short accum __fractsaha2 (accum A) 1600 -- Runtime Function: long accum __fractsada2 (accum A) 1601 -- Runtime Function: long long accum __fractsata2 (accum A) 1602 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1603 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1604 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1605 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1606 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1607 -- Runtime Function: unsigned accum __fractsausa (accum A) 1608 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1609 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1610 -- Runtime Function: signed char __fractsaqi (accum A) 1611 -- Runtime Function: short __fractsahi (accum A) 1612 -- Runtime Function: int __fractsasi (accum A) 1613 -- Runtime Function: long __fractsadi (accum A) 1614 -- Runtime Function: long long __fractsati (accum A) 1615 -- Runtime Function: float __fractsasf (accum A) 1616 -- Runtime Function: double __fractsadf (accum A) 1617 -- Runtime Function: short fract __fractdaqq (long accum A) 1618 -- Runtime Function: fract __fractdahq (long accum A) 1619 -- Runtime Function: long fract __fractdasq (long accum A) 1620 -- Runtime Function: long long fract __fractdadq (long accum A) 1621 -- Runtime Function: short accum __fractdaha2 (long accum A) 1622 -- Runtime Function: accum __fractdasa2 (long accum A) 1623 -- Runtime Function: long long accum __fractdata2 (long accum A) 1624 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1625 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1626 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1627 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1628 A) 1629 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1630 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1631 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1632 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1633 A) 1634 -- Runtime Function: signed char __fractdaqi (long accum A) 1635 -- Runtime Function: short __fractdahi (long accum A) 1636 -- Runtime Function: int __fractdasi (long accum A) 1637 -- Runtime Function: long __fractdadi (long accum A) 1638 -- Runtime Function: long long __fractdati (long accum A) 1639 -- Runtime Function: float __fractdasf (long accum A) 1640 -- Runtime Function: double __fractdadf (long accum A) 1641 -- Runtime Function: short fract __fracttaqq (long long accum A) 1642 -- Runtime Function: fract __fracttahq (long long accum A) 1643 -- Runtime Function: long fract __fracttasq (long long accum A) 1644 -- Runtime Function: long long fract __fracttadq (long long accum A) 1645 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1646 -- Runtime Function: accum __fracttasa2 (long long accum A) 1647 -- Runtime Function: long accum __fracttada2 (long long accum A) 1648 -- Runtime Function: unsigned short fract __fracttauqq (long long 1649 accum A) 1650 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1651 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1652 A) 1653 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1654 accum A) 1655 -- Runtime Function: unsigned short accum __fracttauha (long long 1656 accum A) 1657 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1658 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1659 A) 1660 -- Runtime Function: unsigned long long accum __fracttauta (long long 1661 accum A) 1662 -- Runtime Function: signed char __fracttaqi (long long accum A) 1663 -- Runtime Function: short __fracttahi (long long accum A) 1664 -- Runtime Function: int __fracttasi (long long accum A) 1665 -- Runtime Function: long __fracttadi (long long accum A) 1666 -- Runtime Function: long long __fracttati (long long accum A) 1667 -- Runtime Function: float __fracttasf (long long accum A) 1668 -- Runtime Function: double __fracttadf (long long accum A) 1669 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1670 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1671 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1672 -- Runtime Function: long long fract __fractuqqdq (unsigned short 1673 fract A) 1674 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1675 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1676 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1677 -- Runtime Function: long long accum __fractuqqta (unsigned short 1678 fract A) 1679 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1680 fract A) 1681 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned 1682 short fract A) 1683 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1684 short fract A) 1685 -- Runtime Function: unsigned short accum __fractuqquha (unsigned 1686 short fract A) 1687 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short 1688 fract A) 1689 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1690 fract A) 1691 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1692 short fract A) 1693 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1694 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1695 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1696 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1697 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1698 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1699 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1700 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1701 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1702 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1703 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1704 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1705 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1706 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1707 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1708 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1709 fract A) 1710 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned 1711 fract A) 1712 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1713 fract A) 1714 -- Runtime Function: unsigned short accum __fractuhquha (unsigned 1715 fract A) 1716 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1717 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1718 A) 1719 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1720 fract A) 1721 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1722 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1723 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1724 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1725 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1726 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1727 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1728 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1729 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1730 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1731 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1732 A) 1733 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1734 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1735 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1736 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1737 A) 1738 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned 1739 long fract A) 1740 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long 1741 fract A) 1742 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1743 long fract A) 1744 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1745 fract A) 1746 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1747 A) 1748 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1749 fract A) 1750 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1751 long fract A) 1752 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1753 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1754 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1755 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1756 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1757 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1758 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1759 -- Runtime Function: short fract __fractudqqq (unsigned long long 1760 fract A) 1761 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1762 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1763 A) 1764 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1765 fract A) 1766 -- Runtime Function: short accum __fractudqha (unsigned long long 1767 fract A) 1768 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1769 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1770 A) 1771 -- Runtime Function: long long accum __fractudqta (unsigned long long 1772 fract A) 1773 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned 1774 long long fract A) 1775 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1776 fract A) 1777 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1778 long fract A) 1779 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1780 long fract A) 1781 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1782 fract A) 1783 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1784 long fract A) 1785 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1786 long long fract A) 1787 -- Runtime Function: signed char __fractudqqi (unsigned long long 1788 fract A) 1789 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1790 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1791 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1792 -- Runtime Function: long long __fractudqti (unsigned long long fract 1793 A) 1794 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1795 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1796 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1797 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1798 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1799 -- Runtime Function: long long fract __fractuhadq (unsigned short 1800 accum A) 1801 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1802 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1803 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1804 -- Runtime Function: long long accum __fractuhata (unsigned short 1805 accum A) 1806 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned 1807 short accum A) 1808 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short 1809 accum A) 1810 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1811 accum A) 1812 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1813 short accum A) 1814 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1815 accum A) 1816 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned 1817 short accum A) 1818 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1819 short accum A) 1820 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1821 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1822 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1823 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1824 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1825 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1826 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1827 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1828 -- Runtime Function: fract __fractusahq (unsigned accum A) 1829 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1830 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1831 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1832 -- Runtime Function: accum __fractusasa (unsigned accum A) 1833 -- Runtime Function: long accum __fractusada (unsigned accum A) 1834 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1835 -- Runtime Function: unsigned short fract __fractusauqq (unsigned 1836 accum A) 1837 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1838 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1839 A) 1840 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1841 accum A) 1842 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1843 accum A) 1844 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned 1845 accum A) 1846 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1847 accum A) 1848 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1849 -- Runtime Function: short __fractusahi (unsigned accum A) 1850 -- Runtime Function: int __fractusasi (unsigned accum A) 1851 -- Runtime Function: long __fractusadi (unsigned accum A) 1852 -- Runtime Function: long long __fractusati (unsigned accum A) 1853 -- Runtime Function: float __fractusasf (unsigned accum A) 1854 -- Runtime Function: double __fractusadf (unsigned accum A) 1855 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1856 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1857 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1858 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1859 A) 1860 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1861 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1862 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1863 -- Runtime Function: long long accum __fractudata (unsigned long accum 1864 A) 1865 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1866 accum A) 1867 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1868 A) 1869 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1870 accum A) 1871 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1872 long accum A) 1873 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned 1874 long accum A) 1875 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long 1876 accum A) 1877 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1878 long accum A) 1879 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1880 -- Runtime Function: short __fractudahi (unsigned long accum A) 1881 -- Runtime Function: int __fractudasi (unsigned long accum A) 1882 -- Runtime Function: long __fractudadi (unsigned long accum A) 1883 -- Runtime Function: long long __fractudati (unsigned long accum A) 1884 -- Runtime Function: float __fractudasf (unsigned long accum A) 1885 -- Runtime Function: double __fractudadf (unsigned long accum A) 1886 -- Runtime Function: short fract __fractutaqq (unsigned long long 1887 accum A) 1888 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1889 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1890 A) 1891 -- Runtime Function: long long fract __fractutadq (unsigned long long 1892 accum A) 1893 -- Runtime Function: short accum __fractutaha (unsigned long long 1894 accum A) 1895 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1896 -- Runtime Function: long accum __fractutada (unsigned long long accum 1897 A) 1898 -- Runtime Function: long long accum __fractutata (unsigned long long 1899 accum A) 1900 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1901 long accum A) 1902 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1903 accum A) 1904 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1905 long accum A) 1906 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1907 long long accum A) 1908 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned 1909 long long accum A) 1910 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1911 accum A) 1912 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1913 long accum A) 1914 -- Runtime Function: signed char __fractutaqi (unsigned long long 1915 accum A) 1916 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1917 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1918 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1919 -- Runtime Function: long long __fractutati (unsigned long long accum 1920 A) 1921 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1922 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1923 -- Runtime Function: short fract __fractqiqq (signed char A) 1924 -- Runtime Function: fract __fractqihq (signed char A) 1925 -- Runtime Function: long fract __fractqisq (signed char A) 1926 -- Runtime Function: long long fract __fractqidq (signed char A) 1927 -- Runtime Function: short accum __fractqiha (signed char A) 1928 -- Runtime Function: accum __fractqisa (signed char A) 1929 -- Runtime Function: long accum __fractqida (signed char A) 1930 -- Runtime Function: long long accum __fractqita (signed char A) 1931 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1932 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1933 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1934 -- Runtime Function: unsigned long long fract __fractqiudq (signed 1935 char A) 1936 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1937 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1938 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1939 -- Runtime Function: unsigned long long accum __fractqiuta (signed 1940 char A) 1941 -- Runtime Function: short fract __fracthiqq (short A) 1942 -- Runtime Function: fract __fracthihq (short A) 1943 -- Runtime Function: long fract __fracthisq (short A) 1944 -- Runtime Function: long long fract __fracthidq (short A) 1945 -- Runtime Function: short accum __fracthiha (short A) 1946 -- Runtime Function: accum __fracthisa (short A) 1947 -- Runtime Function: long accum __fracthida (short A) 1948 -- Runtime Function: long long accum __fracthita (short A) 1949 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1950 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1951 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1952 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1953 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1954 -- Runtime Function: unsigned accum __fracthiusa (short A) 1955 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1956 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1957 -- Runtime Function: short fract __fractsiqq (int A) 1958 -- Runtime Function: fract __fractsihq (int A) 1959 -- Runtime Function: long fract __fractsisq (int A) 1960 -- Runtime Function: long long fract __fractsidq (int A) 1961 -- Runtime Function: short accum __fractsiha (int A) 1962 -- Runtime Function: accum __fractsisa (int A) 1963 -- Runtime Function: long accum __fractsida (int A) 1964 -- Runtime Function: long long accum __fractsita (int A) 1965 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1966 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1967 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1968 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1969 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1970 -- Runtime Function: unsigned accum __fractsiusa (int A) 1971 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1972 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1973 -- Runtime Function: short fract __fractdiqq (long A) 1974 -- Runtime Function: fract __fractdihq (long A) 1975 -- Runtime Function: long fract __fractdisq (long A) 1976 -- Runtime Function: long long fract __fractdidq (long A) 1977 -- Runtime Function: short accum __fractdiha (long A) 1978 -- Runtime Function: accum __fractdisa (long A) 1979 -- Runtime Function: long accum __fractdida (long A) 1980 -- Runtime Function: long long accum __fractdita (long A) 1981 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1982 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1983 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1984 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1985 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1986 -- Runtime Function: unsigned accum __fractdiusa (long A) 1987 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1988 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1989 -- Runtime Function: short fract __fracttiqq (long long A) 1990 -- Runtime Function: fract __fracttihq (long long A) 1991 -- Runtime Function: long fract __fracttisq (long long A) 1992 -- Runtime Function: long long fract __fracttidq (long long A) 1993 -- Runtime Function: short accum __fracttiha (long long A) 1994 -- Runtime Function: accum __fracttisa (long long A) 1995 -- Runtime Function: long accum __fracttida (long long A) 1996 -- Runtime Function: long long accum __fracttita (long long A) 1997 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 1998 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 1999 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 2000 -- Runtime Function: unsigned long long fract __fracttiudq (long long 2001 A) 2002 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2003 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2004 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2005 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2006 A) 2007 -- Runtime Function: short fract __fractsfqq (float A) 2008 -- Runtime Function: fract __fractsfhq (float A) 2009 -- Runtime Function: long fract __fractsfsq (float A) 2010 -- Runtime Function: long long fract __fractsfdq (float A) 2011 -- Runtime Function: short accum __fractsfha (float A) 2012 -- Runtime Function: accum __fractsfsa (float A) 2013 -- Runtime Function: long accum __fractsfda (float A) 2014 -- Runtime Function: long long accum __fractsfta (float A) 2015 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2016 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2017 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2018 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2019 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2020 -- Runtime Function: unsigned accum __fractsfusa (float A) 2021 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2022 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2023 -- Runtime Function: short fract __fractdfqq (double A) 2024 -- Runtime Function: fract __fractdfhq (double A) 2025 -- Runtime Function: long fract __fractdfsq (double A) 2026 -- Runtime Function: long long fract __fractdfdq (double A) 2027 -- Runtime Function: short accum __fractdfha (double A) 2028 -- Runtime Function: accum __fractdfsa (double A) 2029 -- Runtime Function: long accum __fractdfda (double A) 2030 -- Runtime Function: long long accum __fractdfta (double A) 2031 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2032 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2033 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2034 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2035 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2036 -- Runtime Function: unsigned accum __fractdfusa (double A) 2037 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2038 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2039 These functions convert from fractional and signed non-fractionals 2040 to fractionals and signed non-fractionals, without saturation. 2041 2042 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2043 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2044 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2045 -- Runtime Function: short accum __satfractqqha (short fract A) 2046 -- Runtime Function: accum __satfractqqsa (short fract A) 2047 -- Runtime Function: long accum __satfractqqda (short fract A) 2048 -- Runtime Function: long long accum __satfractqqta (short fract A) 2049 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2050 A) 2051 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2052 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2053 A) 2054 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2055 fract A) 2056 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2057 A) 2058 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2059 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2060 A) 2061 -- Runtime Function: unsigned long long accum __satfractqquta (short 2062 fract A) 2063 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2064 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2065 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2066 -- Runtime Function: short accum __satfracthqha (fract A) 2067 -- Runtime Function: accum __satfracthqsa (fract A) 2068 -- Runtime Function: long accum __satfracthqda (fract A) 2069 -- Runtime Function: long long accum __satfracthqta (fract A) 2070 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2071 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2072 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2073 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2074 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2075 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2076 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2077 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2078 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2079 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2080 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2081 -- Runtime Function: short accum __satfractsqha (long fract A) 2082 -- Runtime Function: accum __satfractsqsa (long fract A) 2083 -- Runtime Function: long accum __satfractsqda (long fract A) 2084 -- Runtime Function: long long accum __satfractsqta (long fract A) 2085 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2086 A) 2087 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2088 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2089 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2090 fract A) 2091 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2092 A) 2093 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2094 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2095 -- Runtime Function: unsigned long long accum __satfractsquta (long 2096 fract A) 2097 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2098 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2099 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2100 -- Runtime Function: short accum __satfractdqha (long long fract A) 2101 -- Runtime Function: accum __satfractdqsa (long long fract A) 2102 -- Runtime Function: long accum __satfractdqda (long long fract A) 2103 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2104 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2105 fract A) 2106 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2107 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2108 fract A) 2109 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2110 long fract A) 2111 -- Runtime Function: unsigned short accum __satfractdquha (long long 2112 fract A) 2113 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2114 -- Runtime Function: unsigned long accum __satfractdquda (long long 2115 fract A) 2116 -- Runtime Function: unsigned long long accum __satfractdquta (long 2117 long fract A) 2118 -- Runtime Function: short fract __satfracthaqq (short accum A) 2119 -- Runtime Function: fract __satfracthahq (short accum A) 2120 -- Runtime Function: long fract __satfracthasq (short accum A) 2121 -- Runtime Function: long long fract __satfracthadq (short accum A) 2122 -- Runtime Function: accum __satfracthasa2 (short accum A) 2123 -- Runtime Function: long accum __satfracthada2 (short accum A) 2124 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2125 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2126 A) 2127 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2128 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2129 A) 2130 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2131 accum A) 2132 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2133 A) 2134 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2135 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2136 A) 2137 -- Runtime Function: unsigned long long accum __satfracthauta (short 2138 accum A) 2139 -- Runtime Function: short fract __satfractsaqq (accum A) 2140 -- Runtime Function: fract __satfractsahq (accum A) 2141 -- Runtime Function: long fract __satfractsasq (accum A) 2142 -- Runtime Function: long long fract __satfractsadq (accum A) 2143 -- Runtime Function: short accum __satfractsaha2 (accum A) 2144 -- Runtime Function: long accum __satfractsada2 (accum A) 2145 -- Runtime Function: long long accum __satfractsata2 (accum A) 2146 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2147 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2148 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2149 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2150 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2151 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2152 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2153 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2154 -- Runtime Function: short fract __satfractdaqq (long accum A) 2155 -- Runtime Function: fract __satfractdahq (long accum A) 2156 -- Runtime Function: long fract __satfractdasq (long accum A) 2157 -- Runtime Function: long long fract __satfractdadq (long accum A) 2158 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2159 -- Runtime Function: accum __satfractdasa2 (long accum A) 2160 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2161 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2162 A) 2163 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2164 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2165 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2166 accum A) 2167 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2168 A) 2169 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2170 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2171 -- Runtime Function: unsigned long long accum __satfractdauta (long 2172 accum A) 2173 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2174 -- Runtime Function: fract __satfracttahq (long long accum A) 2175 -- Runtime Function: long fract __satfracttasq (long long accum A) 2176 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2177 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2178 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2179 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2180 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2181 accum A) 2182 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2183 -- Runtime Function: unsigned long fract __satfracttausq (long long 2184 accum A) 2185 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2186 long accum A) 2187 -- Runtime Function: unsigned short accum __satfracttauha (long long 2188 accum A) 2189 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2190 -- Runtime Function: unsigned long accum __satfracttauda (long long 2191 accum A) 2192 -- Runtime Function: unsigned long long accum __satfracttauta (long 2193 long accum A) 2194 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2195 A) 2196 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2197 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2198 A) 2199 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2200 fract A) 2201 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2202 A) 2203 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2204 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2205 A) 2206 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2207 fract A) 2208 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2209 fract A) 2210 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2211 short fract A) 2212 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2213 (unsigned short fract A) 2214 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2215 short fract A) 2216 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2217 fract A) 2218 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2219 short fract A) 2220 -- Runtime Function: unsigned long long accum __satfractuqquta 2221 (unsigned short fract A) 2222 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2223 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2224 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2225 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2226 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2227 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2228 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2229 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2230 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2231 fract A) 2232 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2233 fract A) 2234 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2235 (unsigned fract A) 2236 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2237 fract A) 2238 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2239 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2240 fract A) 2241 -- Runtime Function: unsigned long long accum __satfractuhquta 2242 (unsigned fract A) 2243 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2244 A) 2245 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2246 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2247 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2248 fract A) 2249 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2250 A) 2251 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2252 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2253 -- Runtime Function: long long accum __satfractusqta (unsigned long 2254 fract A) 2255 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2256 long fract A) 2257 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2258 fract A) 2259 -- Runtime Function: unsigned long long fract __satfractusqudq2 2260 (unsigned long fract A) 2261 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2262 long fract A) 2263 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2264 fract A) 2265 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2266 long fract A) 2267 -- Runtime Function: unsigned long long accum __satfractusquta 2268 (unsigned long fract A) 2269 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2270 fract A) 2271 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2272 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2273 fract A) 2274 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2275 long fract A) 2276 -- Runtime Function: short accum __satfractudqha (unsigned long long 2277 fract A) 2278 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2279 -- Runtime Function: long accum __satfractudqda (unsigned long long 2280 fract A) 2281 -- Runtime Function: long long accum __satfractudqta (unsigned long 2282 long fract A) 2283 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2284 long long fract A) 2285 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2286 long fract A) 2287 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2288 long long fract A) 2289 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2290 long long fract A) 2291 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2292 long fract A) 2293 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2294 long long fract A) 2295 -- Runtime Function: unsigned long long accum __satfractudquta 2296 (unsigned long long fract A) 2297 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2298 A) 2299 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2300 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2301 A) 2302 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2303 accum A) 2304 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2305 A) 2306 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2307 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2308 A) 2309 -- Runtime Function: long long accum __satfractuhata (unsigned short 2310 accum A) 2311 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2312 short accum A) 2313 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2314 accum A) 2315 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2316 short accum A) 2317 -- Runtime Function: unsigned long long fract __satfractuhaudq 2318 (unsigned short accum A) 2319 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2320 accum A) 2321 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2322 short accum A) 2323 -- Runtime Function: unsigned long long accum __satfractuhauta2 2324 (unsigned short accum A) 2325 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2326 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2327 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2328 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2329 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2330 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2331 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2332 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2333 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2334 accum A) 2335 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2336 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2337 accum A) 2338 -- Runtime Function: unsigned long long fract __satfractusaudq 2339 (unsigned accum A) 2340 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2341 accum A) 2342 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2343 accum A) 2344 -- Runtime Function: unsigned long long accum __satfractusauta2 2345 (unsigned accum A) 2346 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2347 A) 2348 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2349 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2350 -- Runtime Function: long long fract __satfractudadq (unsigned long 2351 accum A) 2352 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2353 A) 2354 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2355 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2356 -- Runtime Function: long long accum __satfractudata (unsigned long 2357 accum A) 2358 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2359 long accum A) 2360 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2361 accum A) 2362 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2363 long accum A) 2364 -- Runtime Function: unsigned long long fract __satfractudaudq 2365 (unsigned long accum A) 2366 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2367 long accum A) 2368 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2369 accum A) 2370 -- Runtime Function: unsigned long long accum __satfractudauta2 2371 (unsigned long accum A) 2372 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2373 accum A) 2374 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2375 -- Runtime Function: long fract __satfractutasq (unsigned long long 2376 accum A) 2377 -- Runtime Function: long long fract __satfractutadq (unsigned long 2378 long accum A) 2379 -- Runtime Function: short accum __satfractutaha (unsigned long long 2380 accum A) 2381 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2382 -- Runtime Function: long accum __satfractutada (unsigned long long 2383 accum A) 2384 -- Runtime Function: long long accum __satfractutata (unsigned long 2385 long accum A) 2386 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2387 long long accum A) 2388 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2389 long accum A) 2390 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2391 long long accum A) 2392 -- Runtime Function: unsigned long long fract __satfractutaudq 2393 (unsigned long long accum A) 2394 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2395 long long accum A) 2396 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2397 long accum A) 2398 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2399 long long accum A) 2400 -- Runtime Function: short fract __satfractqiqq (signed char A) 2401 -- Runtime Function: fract __satfractqihq (signed char A) 2402 -- Runtime Function: long fract __satfractqisq (signed char A) 2403 -- Runtime Function: long long fract __satfractqidq (signed char A) 2404 -- Runtime Function: short accum __satfractqiha (signed char A) 2405 -- Runtime Function: accum __satfractqisa (signed char A) 2406 -- Runtime Function: long accum __satfractqida (signed char A) 2407 -- Runtime Function: long long accum __satfractqita (signed char A) 2408 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2409 A) 2410 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2411 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2412 A) 2413 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2414 char A) 2415 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2416 A) 2417 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2418 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2419 A) 2420 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2421 char A) 2422 -- Runtime Function: short fract __satfracthiqq (short A) 2423 -- Runtime Function: fract __satfracthihq (short A) 2424 -- Runtime Function: long fract __satfracthisq (short A) 2425 -- Runtime Function: long long fract __satfracthidq (short A) 2426 -- Runtime Function: short accum __satfracthiha (short A) 2427 -- Runtime Function: accum __satfracthisa (short A) 2428 -- Runtime Function: long accum __satfracthida (short A) 2429 -- Runtime Function: long long accum __satfracthita (short A) 2430 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2431 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2432 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2433 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2434 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2435 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2436 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2437 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2438 -- Runtime Function: short fract __satfractsiqq (int A) 2439 -- Runtime Function: fract __satfractsihq (int A) 2440 -- Runtime Function: long fract __satfractsisq (int A) 2441 -- Runtime Function: long long fract __satfractsidq (int A) 2442 -- Runtime Function: short accum __satfractsiha (int A) 2443 -- Runtime Function: accum __satfractsisa (int A) 2444 -- Runtime Function: long accum __satfractsida (int A) 2445 -- Runtime Function: long long accum __satfractsita (int A) 2446 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2447 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2448 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2449 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2450 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2451 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2452 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2453 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2454 -- Runtime Function: short fract __satfractdiqq (long A) 2455 -- Runtime Function: fract __satfractdihq (long A) 2456 -- Runtime Function: long fract __satfractdisq (long A) 2457 -- Runtime Function: long long fract __satfractdidq (long A) 2458 -- Runtime Function: short accum __satfractdiha (long A) 2459 -- Runtime Function: accum __satfractdisa (long A) 2460 -- Runtime Function: long accum __satfractdida (long A) 2461 -- Runtime Function: long long accum __satfractdita (long A) 2462 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2463 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2464 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2465 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2466 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2467 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2468 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2469 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2470 -- Runtime Function: short fract __satfracttiqq (long long A) 2471 -- Runtime Function: fract __satfracttihq (long long A) 2472 -- Runtime Function: long fract __satfracttisq (long long A) 2473 -- Runtime Function: long long fract __satfracttidq (long long A) 2474 -- Runtime Function: short accum __satfracttiha (long long A) 2475 -- Runtime Function: accum __satfracttisa (long long A) 2476 -- Runtime Function: long accum __satfracttida (long long A) 2477 -- Runtime Function: long long accum __satfracttita (long long A) 2478 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2479 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2480 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2481 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2482 long A) 2483 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2484 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2485 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2486 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2487 long A) 2488 -- Runtime Function: short fract __satfractsfqq (float A) 2489 -- Runtime Function: fract __satfractsfhq (float A) 2490 -- Runtime Function: long fract __satfractsfsq (float A) 2491 -- Runtime Function: long long fract __satfractsfdq (float A) 2492 -- Runtime Function: short accum __satfractsfha (float A) 2493 -- Runtime Function: accum __satfractsfsa (float A) 2494 -- Runtime Function: long accum __satfractsfda (float A) 2495 -- Runtime Function: long long accum __satfractsfta (float A) 2496 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2497 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2498 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2499 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2500 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2501 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2502 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2503 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2504 -- Runtime Function: short fract __satfractdfqq (double A) 2505 -- Runtime Function: fract __satfractdfhq (double A) 2506 -- Runtime Function: long fract __satfractdfsq (double A) 2507 -- Runtime Function: long long fract __satfractdfdq (double A) 2508 -- Runtime Function: short accum __satfractdfha (double A) 2509 -- Runtime Function: accum __satfractdfsa (double A) 2510 -- Runtime Function: long accum __satfractdfda (double A) 2511 -- Runtime Function: long long accum __satfractdfta (double A) 2512 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2513 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2514 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2515 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2516 A) 2517 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2518 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2519 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2520 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2521 A) 2522 The functions convert from fractional and signed non-fractionals to 2523 fractionals, with saturation. 2524 2525 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2526 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2527 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2528 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2529 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2530 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2531 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2532 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2533 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2534 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2535 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2536 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2537 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2538 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2539 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2540 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2541 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2542 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2543 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2544 -- Runtime Function: unsigned long long __fractunsdqti (long long 2545 fract A) 2546 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2547 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2548 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2549 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2550 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2551 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2552 -- Runtime Function: unsigned short __fractunssahi (accum A) 2553 -- Runtime Function: unsigned int __fractunssasi (accum A) 2554 -- Runtime Function: unsigned long __fractunssadi (accum A) 2555 -- Runtime Function: unsigned long long __fractunssati (accum A) 2556 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2557 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2558 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2559 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2560 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2561 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2562 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2563 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2564 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2565 -- Runtime Function: unsigned long long __fractunstati (long long 2566 accum A) 2567 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2568 fract A) 2569 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2570 fract A) 2571 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short 2572 fract A) 2573 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2574 fract A) 2575 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned 2576 short fract A) 2577 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2578 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2579 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2580 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2581 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned 2582 fract A) 2583 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long 2584 fract A) 2585 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2586 fract A) 2587 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2588 A) 2589 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long 2590 fract A) 2591 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2592 fract A) 2593 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2594 fract A) 2595 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long 2596 long fract A) 2597 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2598 fract A) 2599 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2600 fract A) 2601 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2602 long fract A) 2603 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2604 accum A) 2605 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2606 accum A) 2607 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short 2608 accum A) 2609 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2610 accum A) 2611 -- Runtime Function: unsigned long long __fractunsuhati (unsigned 2612 short accum A) 2613 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2614 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2615 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2616 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2617 -- Runtime Function: unsigned long long __fractunsusati (unsigned 2618 accum A) 2619 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long 2620 accum A) 2621 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2622 accum A) 2623 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2624 A) 2625 -- Runtime Function: unsigned long __fractunsudadi (unsigned long 2626 accum A) 2627 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2628 accum A) 2629 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2630 accum A) 2631 -- Runtime Function: unsigned short __fractunsutahi (unsigned long 2632 long accum A) 2633 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2634 accum A) 2635 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2636 accum A) 2637 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2638 long accum A) 2639 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2640 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2641 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2642 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2643 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2644 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2645 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2646 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2647 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2648 char A) 2649 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2650 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned 2651 char A) 2652 -- Runtime Function: unsigned long long fract __fractunsqiudq 2653 (unsigned char A) 2654 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2655 char A) 2656 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2657 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned 2658 char A) 2659 -- Runtime Function: unsigned long long accum __fractunsqiuta 2660 (unsigned char A) 2661 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2662 -- Runtime Function: fract __fractunshihq (unsigned short A) 2663 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2664 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2665 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2666 -- Runtime Function: accum __fractunshisa (unsigned short A) 2667 -- Runtime Function: long accum __fractunshida (unsigned short A) 2668 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2669 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2670 short A) 2671 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2672 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2673 short A) 2674 -- Runtime Function: unsigned long long fract __fractunshiudq 2675 (unsigned short A) 2676 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2677 short A) 2678 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2679 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2680 short A) 2681 -- Runtime Function: unsigned long long accum __fractunshiuta 2682 (unsigned short A) 2683 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2684 -- Runtime Function: fract __fractunssihq (unsigned int A) 2685 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2686 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2687 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2688 -- Runtime Function: accum __fractunssisa (unsigned int A) 2689 -- Runtime Function: long accum __fractunssida (unsigned int A) 2690 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2691 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned 2692 int A) 2693 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2694 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2695 A) 2696 -- Runtime Function: unsigned long long fract __fractunssiudq 2697 (unsigned int A) 2698 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned 2699 int A) 2700 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2701 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2702 A) 2703 -- Runtime Function: unsigned long long accum __fractunssiuta 2704 (unsigned int A) 2705 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2706 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2707 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2708 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2709 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2710 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2711 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2712 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2713 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2714 long A) 2715 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2716 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned 2717 long A) 2718 -- Runtime Function: unsigned long long fract __fractunsdiudq 2719 (unsigned long A) 2720 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2721 long A) 2722 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2723 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned 2724 long A) 2725 -- Runtime Function: unsigned long long accum __fractunsdiuta 2726 (unsigned long A) 2727 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2728 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2729 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2730 -- Runtime Function: long long fract __fractunstidq (unsigned long 2731 long A) 2732 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2733 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2734 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2735 -- Runtime Function: long long accum __fractunstita (unsigned long 2736 long A) 2737 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2738 long long A) 2739 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long 2740 long A) 2741 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned 2742 long long A) 2743 -- Runtime Function: unsigned long long fract __fractunstiudq 2744 (unsigned long long A) 2745 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2746 long long A) 2747 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long 2748 long A) 2749 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned 2750 long long A) 2751 -- Runtime Function: unsigned long long accum __fractunstiuta 2752 (unsigned long long A) 2753 These functions convert from fractionals to unsigned 2754 non-fractionals; and from unsigned non-fractionals to fractionals, 2755 without saturation. 2756 2757 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2758 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2759 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2760 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2761 A) 2762 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2763 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2764 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2765 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2766 A) 2767 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2768 char A) 2769 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2770 A) 2771 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2772 char A) 2773 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2774 (unsigned char A) 2775 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2776 char A) 2777 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2778 A) 2779 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2780 char A) 2781 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2782 (unsigned char A) 2783 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2784 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2785 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2786 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2787 A) 2788 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2789 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2790 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2791 -- Runtime Function: long long accum __satfractunshita (unsigned short 2792 A) 2793 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2794 short A) 2795 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2796 A) 2797 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2798 short A) 2799 -- Runtime Function: unsigned long long fract __satfractunshiudq 2800 (unsigned short A) 2801 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2802 short A) 2803 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2804 A) 2805 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2806 short A) 2807 -- Runtime Function: unsigned long long accum __satfractunshiuta 2808 (unsigned short A) 2809 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2810 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2811 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2812 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2813 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2814 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2815 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2816 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2817 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2818 int A) 2819 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2820 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2821 int A) 2822 -- Runtime Function: unsigned long long fract __satfractunssiudq 2823 (unsigned int A) 2824 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2825 int A) 2826 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2827 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2828 int A) 2829 -- Runtime Function: unsigned long long accum __satfractunssiuta 2830 (unsigned int A) 2831 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2832 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2833 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2834 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2835 A) 2836 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2837 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2838 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2839 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2840 A) 2841 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2842 long A) 2843 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2844 A) 2845 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2846 long A) 2847 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2848 (unsigned long A) 2849 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2850 long A) 2851 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2852 A) 2853 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2854 long A) 2855 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2856 (unsigned long A) 2857 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2858 A) 2859 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2860 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2861 A) 2862 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2863 long A) 2864 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2865 A) 2866 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2867 -- Runtime Function: long accum __satfractunstida (unsigned long long 2868 A) 2869 -- Runtime Function: long long accum __satfractunstita (unsigned long 2870 long A) 2871 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2872 long long A) 2873 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2874 long A) 2875 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2876 long long A) 2877 -- Runtime Function: unsigned long long fract __satfractunstiudq 2878 (unsigned long long A) 2879 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2880 long long A) 2881 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2882 long A) 2883 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2884 long long A) 2885 -- Runtime Function: unsigned long long accum __satfractunstiuta 2886 (unsigned long long A) 2887 These functions convert from unsigned non-fractionals to 2888 fractionals, with saturation. 2889 2890 2891 File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2892 2893 4.5 Language-independent routines for exception handling 2894 ======================================================== 2895 2896 document me! 2897 2898 _Unwind_DeleteException 2899 _Unwind_Find_FDE 2900 _Unwind_ForcedUnwind 2901 _Unwind_GetGR 2902 _Unwind_GetIP 2903 _Unwind_GetLanguageSpecificData 2904 _Unwind_GetRegionStart 2905 _Unwind_GetTextRelBase 2906 _Unwind_GetDataRelBase 2907 _Unwind_RaiseException 2908 _Unwind_Resume 2909 _Unwind_SetGR 2910 _Unwind_SetIP 2911 _Unwind_FindEnclosingFunction 2912 _Unwind_SjLj_Register 2913 _Unwind_SjLj_Unregister 2914 _Unwind_SjLj_RaiseException 2915 _Unwind_SjLj_ForcedUnwind 2916 _Unwind_SjLj_Resume 2917 __deregister_frame 2918 __deregister_frame_info 2919 __deregister_frame_info_bases 2920 __register_frame 2921 __register_frame_info 2922 __register_frame_info_bases 2923 __register_frame_info_table 2924 __register_frame_info_table_bases 2925 __register_frame_table 2926 2927 2928 File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2929 2930 4.6 Miscellaneous runtime library routines 2931 ========================================== 2932 2933 4.6.1 Cache control functions 2934 ----------------------------- 2935 2936 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2937 This function clears the instruction cache between BEG and END. 2938 2939 4.6.2 Split stack functions and variables 2940 ----------------------------------------- 2941 2942 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void 2943 *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void 2944 **INITIAL_SP) 2945 When using `-fsplit-stack', this call may be used to iterate over 2946 the stack segments. It may be called like this: 2947 void *next_segment = NULL; 2948 void *next_sp = NULL; 2949 void *initial_sp = NULL; 2950 void *stack; 2951 size_t stack_size; 2952 while ((stack = __splitstack_find (next_segment, next_sp, 2953 &stack_size, &next_segment, 2954 &next_sp, &initial_sp)) 2955 != NULL) 2956 { 2957 /* Stack segment starts at stack and is 2958 stack_size bytes long. */ 2959 } 2960 2961 There is no way to iterate over the stack segments of a different 2962 thread. However, what is permitted is for one thread to call this 2963 with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, 2964 NEXT_SP, and INITIAL_SP to a different thread, and then to suspend 2965 one way or another. A different thread may run the subsequent 2966 `__splitstack_find' iterations. Of course, this will only work if 2967 the first thread is suspended while the second thread is calling 2968 `__splitstack_find'. If not, the second thread could be looking 2969 at the stack while it is changing, and anything could happen. 2970 2971 -- Variable: __morestack_segments 2972 -- Variable: __morestack_current_segment 2973 -- Variable: __morestack_initial_sp 2974 Internal variables used by the `-fsplit-stack' implementation. 2975 2976 2977 File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2978 2979 5 Language Front Ends in GCC 2980 **************************** 2981 2982 The interface to front ends for languages in GCC, and in particular the 2983 `tree' structure (*note GENERIC::), was initially designed for C, and 2984 many aspects of it are still somewhat biased towards C and C-like 2985 languages. It is, however, reasonably well suited to other procedural 2986 languages, and front ends for many such languages have been written for 2987 GCC. 2988 2989 Writing a compiler as a front end for GCC, rather than compiling 2990 directly to assembler or generating C code which is then compiled by 2991 GCC, has several advantages: 2992 2993 * GCC front ends benefit from the support for many different target 2994 machines already present in GCC. 2995 2996 * GCC front ends benefit from all the optimizations in GCC. Some of 2997 these, such as alias analysis, may work better when GCC is 2998 compiling directly from source code then when it is compiling from 2999 generated C code. 3000 3001 * Better debugging information is generated when compiling directly 3002 from source code than when going via intermediate generated C code. 3003 3004 Because of the advantages of writing a compiler as a GCC front end, 3005 GCC front ends have also been created for languages very different from 3006 those for which GCC was designed, such as the declarative 3007 logic/functional language Mercury. For these reasons, it may also be 3008 useful to implement compilers created for specialized purposes (for 3009 example, as part of a research project) as GCC front ends. 3010 3011 3012 File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 3013 3014 6 Source Tree Structure and Build System 3015 **************************************** 3016 3017 This chapter describes the structure of the GCC source tree, and how 3018 GCC is built. The user documentation for building and installing GCC 3019 is in a separate manual (`http://gcc.gnu.org/install/'), with which it 3020 is presumed that you are familiar. 3021 3022 * Menu: 3023 3024 * Configure Terms:: Configuration terminology and history. 3025 * Top Level:: The top level source directory. 3026 * gcc Directory:: The `gcc' subdirectory. 3027 3028 3029 File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 3030 3031 6.1 Configure Terms and History 3032 =============================== 3033 3034 The configure and build process has a long and colorful history, and can 3035 be confusing to anyone who doesn't know why things are the way they are. 3036 While there are other documents which describe the configuration process 3037 in detail, here are a few things that everyone working on GCC should 3038 know. 3039 3040 There are three system names that the build knows about: the machine 3041 you are building on ("build"), the machine that you are building for 3042 ("host"), and the machine that GCC will produce code for ("target"). 3043 When you configure GCC, you specify these with `--build=', `--host=', 3044 and `--target='. 3045 3046 Specifying the host without specifying the build should be avoided, as 3047 `configure' may (and once did) assume that the host you specify is also 3048 the build, which may not be true. 3049 3050 If build, host, and target are all the same, this is called a 3051 "native". If build and host are the same but target is different, this 3052 is called a "cross". If build, host, and target are all different this 3053 is called a "canadian" (for obscure reasons dealing with Canada's 3054 political party and the background of the person working on the build 3055 at that time). If host and target are the same, but build is 3056 different, you are using a cross-compiler to build a native for a 3057 different system. Some people call this a "host-x-host", "crossed 3058 native", or "cross-built native". If build and target are the same, 3059 but host is different, you are using a cross compiler to build a cross 3060 compiler that produces code for the machine you're building on. This 3061 is rare, so there is no common way of describing it. There is a 3062 proposal to call this a "crossback". 3063 3064 If build and host are the same, the GCC you are building will also be 3065 used to build the target libraries (like `libstdc++'). If build and 3066 host are different, you must have already built and installed a cross 3067 compiler that will be used to build the target libraries (if you 3068 configured with `--target=foo-bar', this compiler will be called 3069 `foo-bar-gcc'). 3070 3071 In the case of target libraries, the machine you're building for is the 3072 machine you specified with `--target'. So, build is the machine you're 3073 building on (no change there), host is the machine you're building for 3074 (the target libraries are built for the target, so host is the target 3075 you specified), and target doesn't apply (because you're not building a 3076 compiler, you're building libraries). The configure/make process will 3077 adjust these variables as needed. It also sets `$with_cross_host' to 3078 the original `--host' value in case you need it. 3079 3080 The `libiberty' support library is built up to three times: once for 3081 the host, once for the target (even if they are the same), and once for 3082 the build if build and host are different. This allows it to be used 3083 by all programs which are generated in the course of the build process. 3084 3085 3086 File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3087 3088 6.2 Top Level Source Directory 3089 ============================== 3090 3091 The top level source directory in a GCC distribution contains several 3092 files and directories that are shared with other software distributions 3093 such as that of GNU Binutils. It also contains several subdirectories 3094 that contain parts of GCC and its runtime libraries: 3095 3096 `boehm-gc' 3097 The Boehm conservative garbage collector, used as part of the Java 3098 runtime library. 3099 3100 `config' 3101 Autoconf macros and Makefile fragments used throughout the tree. 3102 3103 `contrib' 3104 Contributed scripts that may be found useful in conjunction with 3105 GCC. One of these, `contrib/texi2pod.pl', is used to generate man 3106 pages from Texinfo manuals as part of the GCC build process. 3107 3108 `fixincludes' 3109 The support for fixing system headers to work with GCC. See 3110 `fixincludes/README' for more information. The headers fixed by 3111 this mechanism are installed in `LIBSUBDIR/include-fixed'. Along 3112 with those headers, `README-fixinc' is also installed, as 3113 `LIBSUBDIR/include-fixed/README'. 3114 3115 `gcc' 3116 The main sources of GCC itself (except for runtime libraries), 3117 including optimizers, support for different target architectures, 3118 language front ends, and testsuites. *Note The `gcc' 3119 Subdirectory: gcc Directory, for details. 3120 3121 `gnattools' 3122 Support tools for GNAT. 3123 3124 `include' 3125 Headers for the `libiberty' library. 3126 3127 `intl' 3128 GNU `libintl', from GNU `gettext', for systems which do not 3129 include it in `libc'. 3130 3131 `libada' 3132 The Ada runtime library. 3133 3134 `libatomic' 3135 The runtime support library for atomic operations (e.g. for 3136 `__sync' and `__atomic'). 3137 3138 `libcpp' 3139 The C preprocessor library. 3140 3141 `libdecnumber' 3142 The Decimal Float support library. 3143 3144 `libffi' 3145 The `libffi' library, used as part of the Java runtime library. 3146 3147 `libgcc' 3148 The GCC runtime library. 3149 3150 `libgfortran' 3151 The Fortran runtime library. 3152 3153 `libgo' 3154 The Go runtime library. The bulk of this library is mirrored from 3155 the master Go repository (http://code.google.com/p/go/). 3156 3157 `libgomp' 3158 The GNU OpenMP runtime library. 3159 3160 `libiberty' 3161 The `libiberty' library, used for portability and for some 3162 generally useful data structures and algorithms. *Note 3163 Introduction: (libiberty)Top, for more information about this 3164 library. 3165 3166 `libitm' 3167 The runtime support library for transactional memory. 3168 3169 `libjava' 3170 The Java runtime library. 3171 3172 `libmudflap' 3173 The `libmudflap' library, used for instrumenting pointer and array 3174 dereferencing operations. 3175 3176 `libobjc' 3177 The Objective-C and Objective-C++ runtime library. 3178 3179 `libquadmath' 3180 The runtime support library for quad-precision math operations. 3181 3182 `libssp' 3183 The Stack protector runtime library. 3184 3185 `libstdc++-v3' 3186 The C++ runtime library. 3187 3188 `lto-plugin' 3189 Plugin used by `gold' if link-time optimizations are enabled. 3190 3191 `maintainer-scripts' 3192 Scripts used by the `gccadmin' account on `gcc.gnu.org'. 3193 3194 `zlib' 3195 The `zlib' compression library, used by the Java front end, as 3196 part of the Java runtime library, and for compressing and 3197 uncompressing GCC's intermediate language in LTO object files. 3198 3199 The build system in the top level directory, including how recursion 3200 into subdirectories works and how building runtime libraries for 3201 multilibs is handled, is documented in a separate manual, included with 3202 GNU Binutils. *Note GNU configure and build system: (configure)Top, 3203 for details. 3204 3205 3206 File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3207 3208 6.3 The `gcc' Subdirectory 3209 ========================== 3210 3211 The `gcc' directory contains many files that are part of the C sources 3212 of GCC, other files used as part of the configuration and build 3213 process, and subdirectories including documentation and a testsuite. 3214 The files that are sources of GCC are documented in a separate chapter. 3215 *Note Passes and Files of the Compiler: Passes. 3216 3217 * Menu: 3218 3219 * Subdirectories:: Subdirectories of `gcc'. 3220 * Configuration:: The configuration process, and the files it uses. 3221 * Build:: The build system in the `gcc' directory. 3222 * Makefile:: Targets in `gcc/Makefile'. 3223 * Library Files:: Library source files and headers under `gcc/'. 3224 * Headers:: Headers installed by GCC. 3225 * Documentation:: Building documentation in GCC. 3226 * Front End:: Anatomy of a language front end. 3227 * Back End:: Anatomy of a target back end. 3228 3229 3230 File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3231 3232 6.3.1 Subdirectories of `gcc' 3233 ----------------------------- 3234 3235 The `gcc' directory contains the following subdirectories: 3236 3237 `LANGUAGE' 3238 Subdirectories for various languages. Directories containing a 3239 file `config-lang.in' are language subdirectories. The contents of 3240 the subdirectories `c' (for C), `cp' (for C++), `objc' (for 3241 Objective-C), `objcp' (for Objective-C++), and `lto' (for LTO) are 3242 documented in this manual (*note Passes and Files of the Compiler: 3243 Passes.); those for other languages are not. *Note Anatomy of a 3244 Language Front End: Front End, for details of the files in these 3245 directories. 3246 3247 `common' 3248 Source files shared between the compiler drivers (such as `gcc') 3249 and the compilers proper (such as `cc1'). If an architecture 3250 defines target hooks shared between those places, it also has a 3251 subdirectory in `common/config'. *Note Target Structure::. 3252 3253 `config' 3254 Configuration files for supported architectures and operating 3255 systems. *Note Anatomy of a Target Back End: Back End, for 3256 details of the files in this directory. 3257 3258 `doc' 3259 Texinfo documentation for GCC, together with automatically 3260 generated man pages and support for converting the installation 3261 manual to HTML. *Note Documentation::. 3262 3263 `ginclude' 3264 System headers installed by GCC, mainly those required by the C 3265 standard of freestanding implementations. *Note Headers Installed 3266 by GCC: Headers, for details of when these and other headers are 3267 installed. 3268 3269 `po' 3270 Message catalogs with translations of messages produced by GCC into 3271 various languages, `LANGUAGE.po'. This directory also contains 3272 `gcc.pot', the template for these message catalogues, `exgettext', 3273 a wrapper around `gettext' to extract the messages from the GCC 3274 sources and create `gcc.pot', which is run by `make gcc.pot', and 3275 `EXCLUDES', a list of files from which messages should not be 3276 extracted. 3277 3278 `testsuite' 3279 The GCC testsuites (except for those for runtime libraries). 3280 *Note Testsuites::. 3281 3282 3283 File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3284 3285 6.3.2 Configuration in the `gcc' Directory 3286 ------------------------------------------ 3287 3288 The `gcc' directory is configured with an Autoconf-generated script 3289 `configure'. The `configure' script is generated from `configure.ac' 3290 and `aclocal.m4'. From the files `configure.ac' and `acconfig.h', 3291 Autoheader generates the file `config.in'. The file `cstamp-h.in' is 3292 used as a timestamp. 3293 3294 * Menu: 3295 3296 * Config Fragments:: Scripts used by `configure'. 3297 * System Config:: The `config.build', `config.host', and 3298 `config.gcc' files. 3299 * Configuration Files:: Files created by running `configure'. 3300 3301 3302 File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3303 3304 6.3.2.1 Scripts Used by `configure' 3305 ................................... 3306 3307 `configure' uses some other scripts to help in its work: 3308 3309 * The standard GNU `config.sub' and `config.guess' files, kept in 3310 the top level directory, are used. 3311 3312 * The file `config.gcc' is used to handle configuration specific to 3313 the particular target machine. The file `config.build' is used to 3314 handle configuration specific to the particular build machine. 3315 The file `config.host' is used to handle configuration specific to 3316 the particular host machine. (In general, these should only be 3317 used for features that cannot reasonably be tested in Autoconf 3318 feature tests.) *Note The `config.build'; `config.host'; and 3319 `config.gcc' Files: System Config, for details of the contents of 3320 these files. 3321 3322 * Each language subdirectory has a file `LANGUAGE/config-lang.in' 3323 that is used for front-end-specific configuration. *Note The 3324 Front End `config-lang.in' File: Front End Config, for details of 3325 this file. 3326 3327 * A helper script `configure.frag' is used as part of creating the 3328 output of `configure'. 3329 3330 3331 File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3332 3333 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files 3334 ................................................................. 3335 3336 The `config.build' file contains specific rules for particular systems 3337 which GCC is built on. This should be used as rarely as possible, as 3338 the behavior of the build system can always be detected by autoconf. 3339 3340 The `config.host' file contains specific rules for particular systems 3341 which GCC will run on. This is rarely needed. 3342 3343 The `config.gcc' file contains specific rules for particular systems 3344 which GCC will generate code for. This is usually needed. 3345 3346 Each file has a list of the shell variables it sets, with 3347 descriptions, at the top of the file. 3348 3349 FIXME: document the contents of these files, and what variables should 3350 be set to control build, host and target configuration. 3351 3352 3353 File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3354 3355 6.3.2.3 Files Created by `configure' 3356 .................................... 3357 3358 Here we spell out what files will be set up by `configure' in the `gcc' 3359 directory. Some other files are created as temporary files in the 3360 configuration process, and are not used in the subsequent build; these 3361 are not documented. 3362 3363 * `Makefile' is constructed from `Makefile.in', together with the 3364 host and target fragments (*note Makefile Fragments: Fragments.) 3365 `t-TARGET' and `x-HOST' from `config', if any, and language 3366 Makefile fragments `LANGUAGE/Make-lang.in'. 3367 3368 * `auto-host.h' contains information about the host machine 3369 determined by `configure'. If the host machine is different from 3370 the build machine, then `auto-build.h' is also created, containing 3371 such information about the build machine. 3372 3373 * `config.status' is a script that may be run to recreate the 3374 current configuration. 3375 3376 * `configargs.h' is a header containing details of the arguments 3377 passed to `configure' to configure GCC, and of the thread model 3378 used. 3379 3380 * `cstamp-h' is used as a timestamp. 3381 3382 * If a language `config-lang.in' file (*note The Front End 3383 `config-lang.in' File: Front End Config.) sets `outputs', then the 3384 files listed in `outputs' there are also generated. 3385 3386 The following configuration headers are created from the Makefile, 3387 using `mkconfig.sh', rather than directly by `configure'. `config.h', 3388 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if 3389 any, appropriate to the host, build and target machines respectively, 3390 the configuration headers for the target, and some definitions; for the 3391 host and build machines, these include the autoconfigured headers 3392 generated by `configure'. The other configuration headers are 3393 determined by `config.gcc'. They also contain the typedefs for `rtx', 3394 `rtvec' and `tree'. 3395 3396 * `config.h', for use in programs that run on the host machine. 3397 3398 * `bconfig.h', for use in programs that run on the build machine. 3399 3400 * `tconfig.h', for use in programs and libraries for the target 3401 machine. 3402 3403 * `tm_p.h', which includes the header `MACHINE-protos.h' that 3404 contains prototypes for functions in the target `MACHINE.c' file. 3405 The header `MACHINE-protos.h' can include prototypes of functions 3406 that use rtl and tree data structures inside appropriate `#ifdef 3407 RTX_CODE' and `#ifdef TREE_CODE' conditional code segements. The 3408 `MACHINE-protos.h' is included after the `rtl.h' and/or `tree.h' 3409 would have been included. The `tm_p.h' also includes the header 3410 `tm-preds.h' which is generated by `genpreds' program during the 3411 build to define the declarations and inline functions for the 3412 predicate functions. 3413 3414 3415 File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3416 3417 6.3.3 Build System in the `gcc' Directory 3418 ----------------------------------------- 3419 3420 FIXME: describe the build system, including what is built in what 3421 stages. Also list the various source files that are used in the build 3422 process but aren't source files of GCC itself and so aren't documented 3423 below (*note Passes::). 3424 3425 3426 File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3427 3428 6.3.4 Makefile Targets 3429 ---------------------- 3430 3431 These targets are available from the `gcc' directory: 3432 3433 `all' 3434 This is the default target. Depending on what your 3435 build/host/target configuration is, it coordinates all the things 3436 that need to be built. 3437 3438 `doc' 3439 Produce info-formatted documentation and man pages. Essentially it 3440 calls `make man' and `make info'. 3441 3442 `dvi' 3443 Produce DVI-formatted documentation. 3444 3445 `pdf' 3446 Produce PDF-formatted documentation. 3447 3448 `html' 3449 Produce HTML-formatted documentation. 3450 3451 `man' 3452 Generate man pages. 3453 3454 `info' 3455 Generate info-formatted pages. 3456 3457 `mostlyclean' 3458 Delete the files made while building the compiler. 3459 3460 `clean' 3461 That, and all the other files built by `make all'. 3462 3463 `distclean' 3464 That, and all the files created by `configure'. 3465 3466 `maintainer-clean' 3467 Distclean plus any file that can be generated from other files. 3468 Note that additional tools may be required beyond what is normally 3469 needed to build GCC. 3470 3471 `srcextra' 3472 Generates files in the source directory that are not 3473 version-controlled but should go into a release tarball. 3474 3475 `srcinfo' 3476 `srcman' 3477 Copies the info-formatted and manpage documentation into the source 3478 directory usually for the purpose of generating a release tarball. 3479 3480 `install' 3481 Installs GCC. 3482 3483 `uninstall' 3484 Deletes installed files, though this is not supported. 3485 3486 `check' 3487 Run the testsuite. This creates a `testsuite' subdirectory that 3488 has various `.sum' and `.log' files containing the results of the 3489 testing. You can run subsets with, for example, `make check-gcc'. 3490 You can specify specific tests by setting `RUNTESTFLAGS' to be the 3491 name of the `.exp' file, optionally followed by (for some tests) 3492 an equals and a file wildcard, like: 3493 3494 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3495 3496 Note that running the testsuite may require additional tools be 3497 installed, such as Tcl or DejaGnu. 3498 3499 The toplevel tree from which you start GCC compilation is not the GCC 3500 directory, but rather a complex Makefile that coordinates the various 3501 steps of the build, including bootstrapping the compiler and using the 3502 new compiler to build target libraries. 3503 3504 When GCC is configured for a native configuration, the default action 3505 for `make' is to do a full three-stage bootstrap. This means that GCC 3506 is built three times--once with the native compiler, once with the 3507 native-built compiler it just built, and once with the compiler it 3508 built the second time. In theory, the last two should produce the same 3509 results, which `make compare' can check. Each stage is configured 3510 separately and compiled into a separate directory, to minimize problems 3511 due to ABI incompatibilities between the native compiler and GCC. 3512 3513 If you do a change, rebuilding will also start from the first stage 3514 and "bubble" up the change through the three stages. Each stage is 3515 taken from its build directory (if it had been built previously), 3516 rebuilt, and copied to its subdirectory. This will allow you to, for 3517 example, continue a bootstrap after fixing a bug which causes the 3518 stage2 build to crash. It does not provide as good coverage of the 3519 compiler as bootstrapping from scratch, but it ensures that the new 3520 code is syntactically correct (e.g., that you did not use GCC extensions 3521 by mistake), and avoids spurious bootstrap comparison failures(1). 3522 3523 Other targets available from the top level include: 3524 3525 `bootstrap-lean' 3526 Like `bootstrap', except that the various stages are removed once 3527 they're no longer needed. This saves disk space. 3528 3529 `bootstrap2' 3530 `bootstrap2-lean' 3531 Performs only the first two stages of bootstrap. Unlike a 3532 three-stage bootstrap, this does not perform a comparison to test 3533 that the compiler is running properly. Note that the disk space 3534 required by a "lean" bootstrap is approximately independent of the 3535 number of stages. 3536 3537 `stageN-bubble (N = 1...4, profile, feedback)' 3538 Rebuild all the stages up to N, with the appropriate flags, 3539 "bubbling" the changes as described above. 3540 3541 `all-stageN (N = 1...4, profile, feedback)' 3542 Assuming that stage N has already been built, rebuild it with the 3543 appropriate flags. This is rarely needed. 3544 3545 `cleanstrap' 3546 Remove everything (`make clean') and rebuilds (`make bootstrap'). 3547 3548 `compare' 3549 Compares the results of stages 2 and 3. This ensures that the 3550 compiler is running properly, since it should produce the same 3551 object files regardless of how it itself was compiled. 3552 3553 `profiledbootstrap' 3554 Builds a compiler with profiling feedback information. In this 3555 case, the second and third stages are named `profile' and 3556 `feedback', respectively. For more information, see *note 3557 Building with profile feedback: (gccinstall)Building. 3558 3559 `restrap' 3560 Restart a bootstrap, so that everything that was not built with 3561 the system compiler is rebuilt. 3562 3563 `stageN-start (N = 1...4, profile, feedback)' 3564 For each package that is bootstrapped, rename directories so that, 3565 for example, `gcc' points to the stageN GCC, compiled with the 3566 stageN-1 GCC(2). 3567 3568 You will invoke this target if you need to test or debug the 3569 stageN GCC. If you only need to execute GCC (but you need not run 3570 `make' either to rebuild it or to run test suites), you should be 3571 able to work directly in the `stageN-gcc' directory. This makes 3572 it easier to debug multiple stages in parallel. 3573 3574 `stage' 3575 For each package that is bootstrapped, relocate its build directory 3576 to indicate its stage. For example, if the `gcc' directory points 3577 to the stage2 GCC, after invoking this target it will be renamed 3578 to `stage2-gcc'. 3579 3580 3581 If you wish to use non-default GCC flags when compiling the stage2 and 3582 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing 3583 `make'. 3584 3585 Usually, the first stage only builds the languages that the compiler 3586 is written in: typically, C and maybe Ada. If you are debugging a 3587 miscompilation of a different stage2 front-end (for example, of the 3588 Fortran front-end), you may want to have front-ends for other languages 3589 in the first stage as well. To do so, set `STAGE1_LANGUAGES' on the 3590 command line when doing `make'. 3591 3592 For example, in the aforementioned scenario of debugging a Fortran 3593 front-end miscompilation caused by the stage1 compiler, you may need a 3594 command like 3595 3596 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3597 3598 Alternatively, you can use per-language targets to build and test 3599 languages that are not enabled by default in stage1. For example, 3600 `make f951' will build a Fortran compiler even in the stage1 build 3601 directory. 3602 3603 ---------- Footnotes ---------- 3604 3605 (1) Except if the compiler was buggy and miscompiled some of the files 3606 that were not modified. In this case, it's best to use `make restrap'. 3607 3608 (2) Customarily, the system compiler is also termed the `stage0' GCC. 3609 3610 3611 File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3612 3613 6.3.5 Library Source Files and Headers under the `gcc' Directory 3614 ---------------------------------------------------------------- 3615 3616 FIXME: list here, with explanation, all the C source files and headers 3617 under the `gcc' directory that aren't built into the GCC executable but 3618 rather are part of runtime libraries and object files, such as 3619 `crtstuff.c' and `unwind-dw2.c'. *Note Headers Installed by GCC: 3620 Headers, for more information about the `ginclude' directory. 3621 3622 3623 File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3624 3625 6.3.6 Headers Installed by GCC 3626 ------------------------------ 3627 3628 In general, GCC expects the system C library to provide most of the 3629 headers to be used with it. However, GCC will fix those headers if 3630 necessary to make them work with GCC, and will install some headers 3631 required of freestanding implementations. These headers are installed 3632 in `LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3633 installed by GCC; these are not documented here. (FIXME: document them 3634 somewhere.) 3635 3636 Several of the headers GCC installs are in the `ginclude' directory. 3637 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are 3638 installed in `LIBSUBDIR/include', unless the target Makefile fragment 3639 (*note Target Fragment::) overrides this by setting `USER_H'. 3640 3641 In addition to these headers and those generated by fixing system 3642 headers to work with GCC, some other headers may also be installed in 3643 `LIBSUBDIR/include'. `config.gcc' may set `extra_headers'; this 3644 specifies additional headers under `config' to be installed on some 3645 systems. 3646 3647 GCC installs its own version of `<float.h>', from `ginclude/float.h'. 3648 This is done to cope with command-line options that change the 3649 representation of floating point numbers. 3650 3651 GCC also installs its own version of `<limits.h>'; this is generated 3652 from `glimits.h', together with `limitx.h' and `limity.h' if the system 3653 also has its own version of `<limits.h>'. (GCC provides its own header 3654 because it is required of ISO C freestanding implementations, but needs 3655 to include the system header from its own header as well because other 3656 standards such as POSIX specify additional values to be defined in 3657 `<limits.h>'.) The system's `<limits.h>' header is used via 3658 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if 3659 it does not need fixing to work with GCC; if it needs fixing, 3660 `syslimits.h' is the fixed copy. 3661 3662 GCC can also install `<tgmath.h>'. It will do this when `config.gcc' 3663 sets `use_gcc_tgmath' to `yes'. 3664 3665 3666 File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3667 3668 6.3.7 Building Documentation 3669 ---------------------------- 3670 3671 The main GCC documentation is in the form of manuals in Texinfo format. 3672 These are installed in Info format; DVI versions may be generated by 3673 `make dvi', PDF versions by `make pdf', and HTML versions by `make 3674 html'. In addition, some man pages are generated from the Texinfo 3675 manuals, there are some other text files with miscellaneous 3676 documentation, and runtime libraries have their own documentation 3677 outside the `gcc' directory. FIXME: document the documentation for 3678 runtime libraries somewhere. 3679 3680 * Menu: 3681 3682 * Texinfo Manuals:: GCC manuals in Texinfo format. 3683 * Man Page Generation:: Generating man pages from Texinfo manuals. 3684 * Miscellaneous Docs:: Miscellaneous text files with documentation. 3685 3686 3687 File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3688 3689 6.3.7.1 Texinfo Manuals 3690 ....................... 3691 3692 The manuals for GCC as a whole, and the C and C++ front ends, are in 3693 files `doc/*.texi'. Other front ends have their own manuals in files 3694 `LANGUAGE/*.texi'. Common files `doc/include/*.texi' are provided 3695 which may be included in multiple manuals; the following files are in 3696 `doc/include': 3697 3698 `fdl.texi' 3699 The GNU Free Documentation License. 3700 3701 `funding.texi' 3702 The section "Funding Free Software". 3703 3704 `gcc-common.texi' 3705 Common definitions for manuals. 3706 3707 `gpl_v3.texi' 3708 The GNU General Public License. 3709 3710 `texinfo.tex' 3711 A copy of `texinfo.tex' known to work with the GCC manuals. 3712 3713 DVI-formatted manuals are generated by `make dvi', which uses 3714 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)'). PDF-formatted 3715 manuals are generated by `make pdf', which uses `texi2pdf' (via the 3716 Makefile macro `$(TEXI2PDF)'). HTML formatted manuals are generated by 3717 `make html'. Info manuals are generated by `make info' (which is run 3718 as part of a bootstrap); this generates the manuals in the source 3719 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and 3720 they are included in release distributions. 3721 3722 Manuals are also provided on the GCC web site, in both HTML and 3723 PostScript forms. This is done via the script 3724 `maintainer-scripts/update_web_docs_svn'. Each manual to be provided 3725 online must be listed in the definition of `MANUALS' in that file; a 3726 file `NAME.texi' must only appear once in the source tree, and the 3727 output manual must have the same name as the source file. (However, 3728 other Texinfo files, included in manuals but not themselves the root 3729 files of manuals, may have names that appear more than once in the 3730 source tree.) The manual file `NAME.texi' should only include other 3731 files in its own directory or in `doc/include'. HTML manuals will be 3732 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and 3733 `dvips', and PDF manuals by `texi2pdf'. All Texinfo files that are 3734 parts of manuals must be version-controlled, even if they are generated 3735 files, for the generation of online manuals to work. 3736 3737 The installation manual, `doc/install.texi', is also provided on the 3738 GCC web site. The HTML version is generated by the script 3739 `doc/install.texi2html'. 3740 3741 3742 File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3743 3744 6.3.7.2 Man Page Generation 3745 ........................... 3746 3747 Because of user demand, in addition to full Texinfo manuals, man pages 3748 are provided which contain extracts from those manuals. These man 3749 pages are generated from the Texinfo manuals using 3750 `contrib/texi2pod.pl' and `pod2man'. (The man page for `g++', 3751 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the 3752 other man pages are generated from Texinfo manuals.) 3753 3754 Because many systems may not have the necessary tools installed to 3755 generate the man pages, they are only generated if the `configure' 3756 script detects that recent enough tools are installed, and the 3757 Makefiles allow generating man pages to fail without aborting the 3758 build. Man pages are also included in release distributions. They are 3759 generated in the source directory. 3760 3761 Magic comments in Texinfo files starting `@c man' control what parts 3762 of a Texinfo file go into a man page. Only a subset of Texinfo is 3763 supported by `texi2pod.pl', and it may be necessary to add support for 3764 more Texinfo features to this script when generating new man pages. To 3765 improve the man page output, some special Texinfo macros are provided 3766 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands: 3767 3768 `@gcctabopt' 3769 Use in the form `@table @gcctabopt' for tables of options, where 3770 for printed output the effect of `@code' is better than that of 3771 `@option' but for man page output a different effect is wanted. 3772 3773 `@gccoptlist' 3774 Use for summary lists of options in manuals. 3775 3776 `@gol' 3777 Use at the end of each line inside `@gccoptlist'. This is 3778 necessary to avoid problems with differences in how the 3779 `@gccoptlist' macro is handled by different Texinfo formatters. 3780 3781 FIXME: describe the `texi2pod.pl' input language and magic comments in 3782 more detail. 3783 3784 3785 File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3786 3787 6.3.7.3 Miscellaneous Documentation 3788 ................................... 3789 3790 In addition to the formal documentation that is installed by GCC, there 3791 are several other text files in the `gcc' subdirectory with 3792 miscellaneous documentation: 3793 3794 `ABOUT-GCC-NLS' 3795 Notes on GCC's Native Language Support. FIXME: this should be 3796 part of this manual rather than a separate file. 3797 3798 `ABOUT-NLS' 3799 Notes on the Free Translation Project. 3800 3801 `COPYING' 3802 `COPYING3' 3803 The GNU General Public License, Versions 2 and 3. 3804 3805 `COPYING.LIB' 3806 `COPYING3.LIB' 3807 The GNU Lesser General Public License, Versions 2.1 and 3. 3808 3809 `*ChangeLog*' 3810 `*/ChangeLog*' 3811 Change log files for various parts of GCC. 3812 3813 `LANGUAGES' 3814 Details of a few changes to the GCC front-end interface. FIXME: 3815 the information in this file should be part of general 3816 documentation of the front-end interface in this manual. 3817 3818 `ONEWS' 3819 Information about new features in old versions of GCC. (For recent 3820 versions, the information is on the GCC web site.) 3821 3822 `README.Portability' 3823 Information about portability issues when writing code in GCC. 3824 FIXME: why isn't this part of this manual or of the GCC Coding 3825 Conventions? 3826 3827 FIXME: document such files in subdirectories, at least `config', `c', 3828 `cp', `objc', `testsuite'. 3829 3830 3831 File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3832 3833 6.3.8 Anatomy of a Language Front End 3834 ------------------------------------- 3835 3836 A front end for a language in GCC has the following parts: 3837 3838 * A directory `LANGUAGE' under `gcc' containing source files for 3839 that front end. *Note The Front End `LANGUAGE' Directory: Front 3840 End Directory, for details. 3841 3842 * A mention of the language in the list of supported languages in 3843 `gcc/doc/install.texi'. 3844 3845 * A mention of the name under which the language's runtime library is 3846 recognized by `--enable-shared=PACKAGE' in the documentation of 3847 that option in `gcc/doc/install.texi'. 3848 3849 * A mention of any special prerequisites for building the front end 3850 in the documentation of prerequisites in `gcc/doc/install.texi'. 3851 3852 * Details of contributors to that front end in 3853 `gcc/doc/contrib.texi'. If the details are in that front end's 3854 own manual then there should be a link to that manual's list in 3855 `contrib.texi'. 3856 3857 * Information about support for that language in 3858 `gcc/doc/frontends.texi'. 3859 3860 * Information about standards for that language, and the front end's 3861 support for them, in `gcc/doc/standards.texi'. This may be a link 3862 to such information in the front end's own manual. 3863 3864 * Details of source file suffixes for that language and `-x LANG' 3865 options supported, in `gcc/doc/invoke.texi'. 3866 3867 * Entries in `default_compilers' in `gcc.c' for source file suffixes 3868 for that language. 3869 3870 * Preferably testsuites, which may be under `gcc/testsuite' or 3871 runtime library directories. FIXME: document somewhere how to 3872 write testsuite harnesses. 3873 3874 * Probably a runtime library for the language, outside the `gcc' 3875 directory. FIXME: document this further. 3876 3877 * Details of the directories of any runtime libraries in 3878 `gcc/doc/sourcebuild.texi'. 3879 3880 * Check targets in `Makefile.def' for the top-level `Makefile' to 3881 check just the compiler or the compiler and runtime library for the 3882 language. 3883 3884 If the front end is added to the official GCC source repository, the 3885 following are also necessary: 3886 3887 * At least one Bugzilla component for bugs in that front end and 3888 runtime libraries. This category needs to be added to the 3889 Bugzilla database. 3890 3891 * Normally, one or more maintainers of that front end listed in 3892 `MAINTAINERS'. 3893 3894 * Mentions on the GCC web site in `index.html' and `frontends.html', 3895 with any relevant links on `readings.html'. (Front ends that are 3896 not an official part of GCC may also be listed on 3897 `frontends.html', with relevant links.) 3898 3899 * A news item on `index.html', and possibly an announcement on the 3900 <gcc-announce (a] gcc.gnu.org> mailing list. 3901 3902 * The front end's manuals should be mentioned in 3903 `maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::) 3904 and the online manuals should be linked to from 3905 `onlinedocs/index.html'. 3906 3907 * Any old releases or CVS repositories of the front end, before its 3908 inclusion in GCC, should be made available on the GCC FTP site 3909 `ftp://gcc.gnu.org/pub/gcc/old-releases/'. 3910 3911 * The release and snapshot script `maintainer-scripts/gcc_release' 3912 should be updated to generate appropriate tarballs for this front 3913 end. 3914 3915 * If this front end includes its own version files that include the 3916 current date, `maintainer-scripts/update_version' should be 3917 updated accordingly. 3918 3919 * Menu: 3920 3921 * Front End Directory:: The front end `LANGUAGE' directory. 3922 * Front End Config:: The front end `config-lang.in' file. 3923 * Front End Makefile:: The front end `Make-lang.in' file. 3924 3925 3926 File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3927 3928 6.3.8.1 The Front End `LANGUAGE' Directory 3929 .......................................... 3930 3931 A front end `LANGUAGE' directory contains the source files of that 3932 front end (but not of any runtime libraries, which should be outside 3933 the `gcc' directory). This includes documentation, and possibly some 3934 subsidiary programs built alongside the front end. Certain files are 3935 special and other parts of the compiler depend on their names: 3936 3937 `config-lang.in' 3938 This file is required in all language subdirectories. *Note The 3939 Front End `config-lang.in' File: Front End Config, for details of 3940 its contents 3941 3942 `Make-lang.in' 3943 This file is required in all language subdirectories. *Note The 3944 Front End `Make-lang.in' File: Front End Makefile, for details of 3945 its contents. 3946 3947 `lang.opt' 3948 This file registers the set of switches that the front end accepts 3949 on the command line, and their `--help' text. *Note Options::. 3950 3951 `lang-specs.h' 3952 This file provides entries for `default_compilers' in `gcc.c' 3953 which override the default of giving an error that a compiler for 3954 that language is not installed. 3955 3956 `LANGUAGE-tree.def' 3957 This file, which need not exist, defines any language-specific tree 3958 codes. 3959 3960 3961 File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3962 3963 6.3.8.2 The Front End `config-lang.in' File 3964 ........................................... 3965 3966 Each language subdirectory contains a `config-lang.in' file. This file 3967 is a shell script that may define some variables describing the 3968 language: 3969 3970 `language' 3971 This definition must be present, and gives the name of the language 3972 for some purposes such as arguments to `--enable-languages'. 3973 3974 `lang_requires' 3975 If defined, this variable lists (space-separated) language front 3976 ends other than C that this front end requires to be enabled (with 3977 the names given being their `language' settings). For example, the 3978 Java front end depends on the C++ front end, so sets 3979 `lang_requires=c++'. 3980 3981 `subdir_requires' 3982 If defined, this variable lists (space-separated) front end 3983 directories other than C that this front end requires to be 3984 present. For example, the Objective-C++ front end uses source 3985 files from the C++ and Objective-C front ends, so sets 3986 `subdir_requires="cp objc"'. 3987 3988 `target_libs' 3989 If defined, this variable lists (space-separated) targets in the 3990 top level `Makefile' to build the runtime libraries for this 3991 language, such as `target-libobjc'. 3992 3993 `lang_dirs' 3994 If defined, this variable lists (space-separated) top level 3995 directories (parallel to `gcc'), apart from the runtime libraries, 3996 that should not be configured if this front end is not built. 3997 3998 `build_by_default' 3999 If defined to `no', this language front end is not built unless 4000 enabled in a `--enable-languages' argument. Otherwise, front ends 4001 are built by default, subject to any special logic in 4002 `configure.ac' (as is present to disable the Ada front end if the 4003 Ada compiler is not already installed). 4004 4005 `boot_language' 4006 If defined to `yes', this front end is built in stage1 of the 4007 bootstrap. This is only relevant to front ends written in their 4008 own languages. 4009 4010 `compilers' 4011 If defined, a space-separated list of compiler executables that 4012 will be run by the driver. The names here will each end with 4013 `\$(exeext)'. 4014 4015 `outputs' 4016 If defined, a space-separated list of files that should be 4017 generated by `configure' substituting values in them. This 4018 mechanism can be used to create a file `LANGUAGE/Makefile' from 4019 `LANGUAGE/Makefile.in', but this is deprecated, building 4020 everything from the single `gcc/Makefile' is preferred. 4021 4022 `gtfiles' 4023 If defined, a space-separated list of files that should be scanned 4024 by `gengtype.c' to generate the garbage collection tables and 4025 routines for this language. This excludes the files that are 4026 common to all front ends. *Note Type Information::. 4027 4028 4029 4030 File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 4031 4032 6.3.8.3 The Front End `Make-lang.in' File 4033 ......................................... 4034 4035 Each language subdirectory contains a `Make-lang.in' file. It contains 4036 targets `LANG.HOOK' (where `LANG' is the setting of `language' in 4037 `config-lang.in') for the following values of `HOOK', and any other 4038 Makefile rules required to build those targets (which may if necessary 4039 use other Makefiles specified in `outputs' in `config-lang.in', 4040 although this is deprecated). It also adds any testsuite targets that 4041 can use the standard rule in `gcc/Makefile.in' to the variable 4042 `lang_checks'. 4043 4044 `all.cross' 4045 `start.encap' 4046 `rest.encap' 4047 FIXME: exactly what goes in each of these targets? 4048 4049 `tags' 4050 Build an `etags' `TAGS' file in the language subdirectory in the 4051 source tree. 4052 4053 `info' 4054 Build info documentation for the front end, in the build directory. 4055 This target is only called by `make bootstrap' if a suitable 4056 version of `makeinfo' is available, so does not need to check for 4057 this, and should fail if an error occurs. 4058 4059 `dvi' 4060 Build DVI documentation for the front end, in the build directory. 4061 This should be done using `$(TEXI2DVI)', with appropriate `-I' 4062 arguments pointing to directories of included files. 4063 4064 `pdf' 4065 Build PDF documentation for the front end, in the build directory. 4066 This should be done using `$(TEXI2PDF)', with appropriate `-I' 4067 arguments pointing to directories of included files. 4068 4069 `html' 4070 Build HTML documentation for the front end, in the build directory. 4071 4072 `man' 4073 Build generated man pages for the front end from Texinfo manuals 4074 (*note Man Page Generation::), in the build directory. This target 4075 is only called if the necessary tools are available, but should 4076 ignore errors so as not to stop the build if errors occur; man 4077 pages are optional and the tools involved may be installed in a 4078 broken way. 4079 4080 `install-common' 4081 Install everything that is part of the front end, apart from the 4082 compiler executables listed in `compilers' in `config-lang.in'. 4083 4084 `install-info' 4085 Install info documentation for the front end, if it is present in 4086 the source directory. This target should have dependencies on 4087 info files that should be installed. 4088 4089 `install-man' 4090 Install man pages for the front end. This target should ignore 4091 errors. 4092 4093 `install-plugin' 4094 Install headers needed for plugins. 4095 4096 `srcextra' 4097 Copies its dependencies into the source directory. This generally 4098 should be used for generated files such as Bison output files 4099 which are not version-controlled, but should be included in any 4100 release tarballs. This target will be executed during a bootstrap 4101 if `--enable-generated-files-in-srcdir' was specified as a 4102 `configure' option. 4103 4104 `srcinfo' 4105 `srcman' 4106 Copies its dependencies into the source directory. These targets 4107 will be executed during a bootstrap if 4108 `--enable-generated-files-in-srcdir' was specified as a 4109 `configure' option. 4110 4111 `uninstall' 4112 Uninstall files installed by installing the compiler. This is 4113 currently documented not to be supported, so the hook need not do 4114 anything. 4115 4116 `mostlyclean' 4117 `clean' 4118 `distclean' 4119 `maintainer-clean' 4120 The language parts of the standard GNU `*clean' targets. *Note 4121 Standard Targets for Users: (standards)Standard Targets, for 4122 details of the standard targets. For GCC, `maintainer-clean' 4123 should delete all generated files in the source directory that are 4124 not version-controlled, but should not delete anything that is. 4125 4126 `Make-lang.in' must also define a variable `LANG_OBJS' to a list of 4127 host object files that are used by that language. 4128 4129 4130 File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4131 4132 6.3.9 Anatomy of a Target Back End 4133 ---------------------------------- 4134 4135 A back end for a target architecture in GCC has the following parts: 4136 4137 * A directory `MACHINE' under `gcc/config', containing a machine 4138 description `MACHINE.md' file (*note Machine Descriptions: Machine 4139 Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a 4140 source file `MACHINE.c' (*note Target Description Macros and 4141 Functions: Target Macros.), possibly a target Makefile fragment 4142 `t-MACHINE' (*note The Target Makefile Fragment: Target 4143 Fragment.), and maybe some other files. The names of these files 4144 may be changed from the defaults given by explicit specifications 4145 in `config.gcc'. 4146 4147 * If necessary, a file `MACHINE-modes.def' in the `MACHINE' 4148 directory, containing additional machine modes to represent 4149 condition codes. *Note Condition Code::, for further details. 4150 4151 * An optional `MACHINE.opt' file in the `MACHINE' directory, 4152 containing a list of target-specific options. You can also add 4153 other option files using the `extra_options' variable in 4154 `config.gcc'. *Note Options::. 4155 4156 * Entries in `config.gcc' (*note The `config.gcc' File: System 4157 Config.) for the systems with this target architecture. 4158 4159 * Documentation in `gcc/doc/invoke.texi' for any command-line 4160 options supported by this target (*note Run-time Target 4161 Specification: Run-time Target.). This means both entries in the 4162 summary table of options and details of the individual options. 4163 4164 * Documentation in `gcc/doc/extend.texi' for any target-specific 4165 attributes supported (*note Defining target-specific uses of 4166 `__attribute__': Target Attributes.), including where the same 4167 attribute is already supported on some targets, which are 4168 enumerated in the manual. 4169 4170 * Documentation in `gcc/doc/extend.texi' for any target-specific 4171 pragmas supported. 4172 4173 * Documentation in `gcc/doc/extend.texi' of any target-specific 4174 built-in functions supported. 4175 4176 * Documentation in `gcc/doc/extend.texi' of any target-specific 4177 format checking styles supported. 4178 4179 * Documentation in `gcc/doc/md.texi' of any target-specific 4180 constraint letters (*note Constraints for Particular Machines: 4181 Machine Constraints.). 4182 4183 * A note in `gcc/doc/contrib.texi' under the person or people who 4184 contributed the target support. 4185 4186 * Entries in `gcc/doc/install.texi' for all target triplets 4187 supported with this target architecture, giving details of any 4188 special notes about installation for this target, or saying that 4189 there are no special notes if there are none. 4190 4191 * Possibly other support outside the `gcc' directory for runtime 4192 libraries. FIXME: reference docs for this. The `libstdc++' 4193 porting manual needs to be installed as info for this to work, or 4194 to be a chapter of this manual. 4195 4196 If the back end is added to the official GCC source repository, the 4197 following are also necessary: 4198 4199 * An entry for the target architecture in `readings.html' on the GCC 4200 web site, with any relevant links. 4201 4202 * Details of the properties of the back end and target architecture 4203 in `backends.html' on the GCC web site. 4204 4205 * A news item about the contribution of support for that target 4206 architecture, in `index.html' on the GCC web site. 4207 4208 * Normally, one or more maintainers of that target listed in 4209 `MAINTAINERS'. Some existing architectures may be unmaintained, 4210 but it would be unusual to add support for a target that does not 4211 have a maintainer when support is added. 4212 4213 * Target triplets covering all `config.gcc' stanzas for the target, 4214 in the list in `contrib/config-list.mk'. 4215 4216 4217 File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4218 4219 7 Testsuites 4220 ************ 4221 4222 GCC contains several testsuites to help maintain compiler quality. 4223 Most of the runtime libraries and language front ends in GCC have 4224 testsuites. Currently only the C language testsuites are documented 4225 here; FIXME: document the others. 4226 4227 * Menu: 4228 4229 * Test Idioms:: Idioms used in testsuite code. 4230 * Test Directives:: Directives used within DejaGnu tests. 4231 * Ada Tests:: The Ada language testsuites. 4232 * C Tests:: The C language testsuites. 4233 * libgcj Tests:: The Java library testsuites. 4234 * LTO Testing:: Support for testing link-time optimizations. 4235 * gcov Testing:: Support for testing gcov. 4236 * profopt Testing:: Support for testing profile-directed optimizations. 4237 * compat Testing:: Support for testing binary compatibility. 4238 * Torture Tests:: Support for torture testing using multiple options. 4239 4240 4241 File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4242 4243 7.1 Idioms Used in Testsuite Code 4244 ================================= 4245 4246 In general, C testcases have a trailing `-N.c', starting with `-1.c', 4247 in case other testcases with similar names are added later. If the 4248 test is a test of some well-defined feature, it should have a name 4249 referring to that feature such as `FEATURE-1.c'. If it does not test a 4250 well-defined feature but just happens to exercise a bug somewhere in 4251 the compiler, and a bug report has been filed for this bug in the GCC 4252 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name. 4253 Otherwise (for miscellaneous bugs not filed in the GCC bug database), 4254 and previously more generally, test cases are named after the date on 4255 which they were added. This allows people to tell at a glance whether 4256 a test failure is because of a recently found bug that has not yet been 4257 fixed, or whether it may be a regression, but does not give any other 4258 information about the bug or where discussion of it may be found. Some 4259 other language testsuites follow similar conventions. 4260 4261 In the `gcc.dg' testsuite, it is often necessary to test that an error 4262 is indeed a hard error and not just a warning--for example, where it is 4263 a constraint violation in the C standard, which must become an error 4264 with `-pedantic-errors'. The following idiom, where the first line 4265 shown is line LINE of the file and the line that generates the error, 4266 is used for this: 4267 4268 /* { dg-bogus "warning" "warning in place of error" } */ 4269 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4270 4271 It may be necessary to check that an expression is an integer constant 4272 expression and has a certain value. To check that `E' has value `V', 4273 an idiom similar to the following is used: 4274 4275 char x[((E) == (V) ? 1 : -1)]; 4276 4277 In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions 4278 about the types of expressions. See, for example, 4279 `gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4280 rules for the types of conditional expressions in the C standard; see, 4281 for example, `gcc.dg/c99-intconst-1.c'. 4282 4283 It is useful to be able to test that optimizations are being made 4284 properly. This cannot be done in all cases, but it can be done where 4285 the optimization will lead to code being optimized away (for example, 4286 where flow analysis or alias analysis should show that certain code 4287 cannot be called) or to functions not being called because they have 4288 been expanded as built-in functions. Such tests go in 4289 `gcc.c-torture/execute'. Where code should be optimized away, a call 4290 to a nonexistent function such as `link_failure ()' may be inserted; a 4291 definition 4292 4293 #ifndef __OPTIMIZE__ 4294 void 4295 link_failure (void) 4296 { 4297 abort (); 4298 } 4299 #endif 4300 4301 will also be needed so that linking still succeeds when the test is run 4302 without optimization. When all calls to a built-in function should 4303 have been optimized and no calls to the non-built-in version of the 4304 function should remain, that function may be defined as `static' to 4305 call `abort ()' (although redeclaring a function as static may not work 4306 on all targets). 4307 4308 All testcases must be portable. Target-specific testcases must have 4309 appropriate code to avoid causing failures on unsupported systems; 4310 unfortunately, the mechanisms for this differ by directory. 4311 4312 FIXME: discuss non-C testsuites here. 4313 4314 4315 File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4316 4317 7.2 Directives used within DejaGnu tests 4318 ======================================== 4319 4320 * Menu: 4321 4322 * Directives:: Syntax and descriptions of test directives. 4323 * Selectors:: Selecting targets to which a test applies. 4324 * Effective-Target Keywords:: Keywords describing target attributes. 4325 * Add Options:: Features for `dg-add-options' 4326 * Require Support:: Variants of `dg-require-SUPPORT' 4327 * Final Actions:: Commands for use in `dg-final' 4328 4329 4330 File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4331 4332 7.2.1 Syntax and Descriptions of test directives 4333 ------------------------------------------------ 4334 4335 Test directives appear within comments in a test source file and begin 4336 with `dg-'. Some of these are defined within DejaGnu and others are 4337 local to the GCC testsuite. 4338 4339 The order in which test directives appear in a test can be important: 4340 directives local to GCC sometimes override information used by the 4341 DejaGnu directives, which know nothing about the GCC directives, so the 4342 DejaGnu directives must precede GCC directives. 4343 4344 Several test directives include selectors (*note Selectors::) which 4345 are usually preceded by the keyword `target' or `xfail'. 4346 4347 7.2.1.1 Specify how to build the test 4348 ..................................... 4349 4350 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4351 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4352 is executed. It is one of: 4353 4354 `preprocess' 4355 Compile with `-E' to run only the preprocessor. 4356 4357 `compile' 4358 Compile with `-S' to produce an assembly code file. 4359 4360 `assemble' 4361 Compile with `-c' to produce a relocatable object file. 4362 4363 `link' 4364 Compile, assemble, and link to produce an executable file. 4365 4366 `run' 4367 Produce and run an executable file, which is expected to 4368 return an exit code of 0. 4369 4370 The default is `compile'. That can be overridden for a set of 4371 tests by redefining `dg-do-what-default' within the `.exp' file 4372 for those tests. 4373 4374 If the directive includes the optional `{ target SELECTOR }' then 4375 the test is skipped unless the target system matches the SELECTOR. 4376 4377 If DO-WHAT-KEYWORD is `run' and the directive includes the 4378 optional `{ xfail SELECTOR }' and the selector is met then the 4379 test is expected to fail. The `xfail' clause is ignored for other 4380 values of DO-WHAT-KEYWORD; those tests can use directive 4381 `dg-xfail-if'. 4382 4383 7.2.1.2 Specify additional compiler options 4384 ........................................... 4385 4386 `{ dg-options OPTIONS [{ target SELECTOR }] }' 4387 This DejaGnu directive provides a list of compiler options, to be 4388 used if the target system matches SELECTOR, that replace the 4389 default options used for this set of tests. 4390 4391 `{ dg-add-options FEATURE ... }' 4392 Add any compiler options that are needed to access certain 4393 features. This directive does nothing on targets that enable the 4394 features by default, or that don't provide them at all. It must 4395 come after all `dg-options' directives. For supported values of 4396 FEATURE see *note Add Options::. 4397 4398 `{ dg-additional-options OPTIONS [{ target SELECTOR }] }' 4399 This directive provides a list of compiler options, to be used if 4400 the target system matches SELECTOR, that are added to the default 4401 options used for this set of tests. 4402 4403 7.2.1.3 Modify the test timeout value 4404 ..................................... 4405 4406 The normal timeout limit, in seconds, is found by searching the 4407 following in order: 4408 4409 * the value defined by an earlier `dg-timeout' directive in the test 4410 4411 * variable TOOL_TIMEOUT defined by the set of tests 4412 4413 * GCC,TIMEOUT set in the target board 4414 4415 * 300 4416 4417 `{ dg-timeout N [{target SELECTOR }] }' 4418 Set the time limit for the compilation and for the execution of 4419 the test to the specified number of seconds. 4420 4421 `{ dg-timeout-factor X [{ target SELECTOR }] }' 4422 Multiply the normal time limit for compilation and execution of 4423 the test by the specified floating-point factor. 4424 4425 7.2.1.4 Skip a test for some targets 4426 .................................... 4427 4428 `{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4429 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4430 element is a string of zero or more GCC options. Skip the test if 4431 all of the following conditions are met: 4432 * the test system is included in SELECTOR 4433 4434 * for at least one of the option strings in INCLUDE-OPTS, every 4435 option from that string is in the set of options with which 4436 the test would be compiled; use `"*"' for an INCLUDE-OPTS list 4437 that matches any options; that is the default if INCLUDE-OPTS 4438 is not specified 4439 4440 * for each of the option strings in EXCLUDE-OPTS, at least one 4441 option from that string is not in the set of options with 4442 which the test would be compiled; use `""' for an empty 4443 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4444 specified 4445 4446 For example, to skip a test if option `-Os' is present: 4447 4448 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4449 4450 To skip a test if both options `-O2' and `-g' are present: 4451 4452 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4453 4454 To skip a test if either `-O2' or `-O3' is present: 4455 4456 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4457 4458 To skip a test unless option `-Os' is present: 4459 4460 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4461 4462 To skip a test if either `-O2' or `-O3' is used with `-g' but not 4463 if `-fpic' is also present: 4464 4465 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4466 4467 `{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4468 Skip the test if the test target, including current multilib flags, 4469 is not covered by the effective-target keyword. If the directive 4470 includes the optional `{ SELECTOR }' then the effective-target 4471 test is only performed if the target system matches the SELECTOR. 4472 This directive must appear after any `dg-do' directive in the test 4473 and before any `dg-additional-sources' directive. *Note 4474 Effective-Target Keywords::. 4475 4476 `{ dg-require-SUPPORT args }' 4477 Skip the test if the target does not provide the required support. 4478 These directives must appear after any `dg-do' directive in the 4479 test and before any `dg-additional-sources' directive. They 4480 require at least one argument, which can be an empty string if the 4481 specific procedure does not examine the argument. *Note Require 4482 Support::, for a complete list of these directives. 4483 4484 7.2.1.5 Expect a test to fail for some targets 4485 .............................................. 4486 4487 `{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4488 Expect the test to fail if the conditions (which are the same as 4489 for `dg-skip-if') are met. This does not affect the execute step. 4490 4491 `{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4492 Expect the execute step of a test to fail if the conditions (which 4493 are the same as for `dg-skip-if') are met. 4494 4495 7.2.1.6 Expect the test executable to fail 4496 .......................................... 4497 4498 `{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4499 Expect the test executable to return a nonzero exit status if the 4500 conditions (which are the same as for `dg-skip-if') are met. 4501 4502 7.2.1.7 Verify compiler messages 4503 ................................ 4504 4505 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4506 This DejaGnu directive appears on a source line that is expected 4507 to get an error message, or else specifies the source line 4508 associated with the message. If there is no message for that line 4509 or if the text of that message is not matched by REGEXP then the 4510 check fails and COMMENT is included in the `FAIL' message. The 4511 check does not look for the string `error' unless it is part of 4512 REGEXP. 4513 4514 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4515 This DejaGnu directive appears on a source line that is expected 4516 to get a warning message, or else specifies the source line 4517 associated with the message. If there is no message for that line 4518 or if the text of that message is not matched by REGEXP then the 4519 check fails and COMMENT is included in the `FAIL' message. The 4520 check does not look for the string `warning' unless it is part of 4521 REGEXP. 4522 4523 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4524 The line is expected to get a message other than an error or 4525 warning. If there is no message for that line or if the text of 4526 that message is not matched by REGEXP then the check fails and 4527 COMMENT is included in the `FAIL' message. 4528 4529 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4530 This DejaGnu directive appears on a source line that should not 4531 get a message matching REGEXP, or else specifies the source line 4532 associated with the bogus message. It is usually used with `xfail' 4533 to indicate that the message is a known problem for a particular 4534 set of targets. 4535 4536 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4537 This DejaGnu directive indicates that the test is expected to fail 4538 due to compiler messages that are not handled by `dg-error', 4539 `dg-warning' or `dg-bogus'. For this directive `xfail' has the 4540 same effect as `target'. 4541 4542 `{ dg-prune-output REGEXP }' 4543 Prune messages matching REGEXP from the test output. 4544 4545 7.2.1.8 Verify output of the test executable 4546 ............................................ 4547 4548 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4549 This DejaGnu directive compares REGEXP to the combined output that 4550 the test executable writes to `stdout' and `stderr'. 4551 4552 7.2.1.9 Specify additional files for a test 4553 ........................................... 4554 4555 `{ dg-additional-files "FILELIST" }' 4556 Specify additional files, other than source files, that must be 4557 copied to the system where the compiler runs. 4558 4559 `{ dg-additional-sources "FILELIST" }' 4560 Specify additional source files to appear in the compile line 4561 following the main test file. 4562 4563 7.2.1.10 Add checks at the end of a test 4564 ........................................ 4565 4566 `{ dg-final { LOCAL-DIRECTIVE } }' 4567 This DejaGnu directive is placed within a comment anywhere in the 4568 source file and is processed after the test has been compiled and 4569 run. Multiple `dg-final' commands are processed in the order in 4570 which they appear in the source file. *Note Final Actions::, for 4571 a list of directives that can be used within `dg-final'. 4572 4573 4574 File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4575 4576 7.2.2 Selecting targets to which a test applies 4577 ----------------------------------------------- 4578 4579 Several test directives include SELECTORs to limit the targets for 4580 which a test is run or to declare that a test is expected to fail on 4581 particular targets. 4582 4583 A selector is: 4584 * one or more target triplets, possibly including wildcard 4585 characters; use `*-*-*' to match any target 4586 4587 * a single effective-target keyword (*note Effective-Target 4588 Keywords::) 4589 4590 * a logical expression 4591 4592 Depending on the context, the selector specifies whether a test is 4593 skipped and reported as unsupported or is expected to fail. A context 4594 that allows either `target' or `xfail' also allows `{ target SELECTOR1 4595 xfail SELECTOR2 }' to skip the test for targets that don't match 4596 SELECTOR1 and the test to fail for targets that match SELECTOR2. 4597 4598 A selector expression appears within curly braces and uses a single 4599 logical operator: one of `!', `&&', or `||'. An operand is another 4600 selector expression, an effective-target keyword, a single target 4601 triplet, or a list of target triplets within quotes or curly braces. 4602 For example: 4603 4604 { target { ! "hppa*-*-* ia64*-*-*" } } 4605 { target { powerpc*-*-* && lp64 } } 4606 { xfail { lp64 || vect_no_align } } 4607 4608 4609 File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4610 4611 7.2.3 Keywords describing target attributes 4612 ------------------------------------------- 4613 4614 Effective-target keywords identify sets of targets that support 4615 particular functionality. They are used to limit tests to be run only 4616 for particular targets, or to specify that particular sets of targets 4617 are expected to fail some tests. 4618 4619 Effective-target keywords are defined in `lib/target-supports.exp' in 4620 the GCC testsuite, with the exception of those that are documented as 4621 being local to a particular test directory. 4622 4623 The `effective target' takes into account all of the compiler options 4624 with which the test will be compiled, including the multilib options. 4625 By convention, keywords ending in `_nocache' can also include options 4626 specified for the particular test in an earlier `dg-options' or 4627 `dg-add-options' directive. 4628 4629 7.2.3.1 Data type sizes 4630 ....................... 4631 4632 `ilp32' 4633 Target has 32-bit `int', `long', and pointers. 4634 4635 `lp64' 4636 Target has 32-bit `int', 64-bit `long' and pointers. 4637 4638 `llp64' 4639 Target has 32-bit `int' and `long', 64-bit `long long' and 4640 pointers. 4641 4642 `double64' 4643 Target has 64-bit `double'. 4644 4645 `double64plus' 4646 Target has `double' that is 64 bits or longer. 4647 4648 `int32plus' 4649 Target has `int' that is at 32 bits or longer. 4650 4651 `int16' 4652 Target has `int' that is 16 bits or shorter. 4653 4654 `long_neq_int' 4655 Target has `int' and `long' with different sizes. 4656 4657 `large_double' 4658 Target supports `double' that is longer than `float'. 4659 4660 `large_long_double' 4661 Target supports `long double' that is longer than `double'. 4662 4663 `ptr32plus' 4664 Target has pointers that are 32 bits or longer. 4665 4666 `size32plus' 4667 Target supports array and structure sizes that are 32 bits or 4668 longer. 4669 4670 `4byte_wchar_t' 4671 Target has `wchar_t' that is at least 4 bytes. 4672 4673 7.2.3.2 Fortran-specific attributes 4674 ................................... 4675 4676 `fortran_integer_16' 4677 Target supports Fortran `integer' that is 16 bytes or longer. 4678 4679 `fortran_large_int' 4680 Target supports Fortran `integer' kinds larger than `integer(8)'. 4681 4682 `fortran_large_real' 4683 Target supports Fortran `real' kinds larger than `real(8)'. 4684 4685 7.2.3.3 Vector-specific attributes 4686 .................................. 4687 4688 `vect_condition' 4689 Target supports vector conditional operations. 4690 4691 `vect_double' 4692 Target supports hardware vectors of `double'. 4693 4694 `vect_float' 4695 Target supports hardware vectors of `float'. 4696 4697 `vect_int' 4698 Target supports hardware vectors of `int'. 4699 4700 `vect_long' 4701 Target supports hardware vectors of `long'. 4702 4703 `vect_long_long' 4704 Target supports hardware vectors of `long long'. 4705 4706 `vect_aligned_arrays' 4707 Target aligns arrays to vector alignment boundary. 4708 4709 `vect_hw_misalign' 4710 Target supports a vector misalign access. 4711 4712 `vect_no_align' 4713 Target does not support a vector alignment mechanism. 4714 4715 `vect_no_int_max' 4716 Target does not support a vector max instruction on `int'. 4717 4718 `vect_no_int_add' 4719 Target does not support a vector add instruction on `int'. 4720 4721 `vect_no_bitwise' 4722 Target does not support vector bitwise instructions. 4723 4724 `vect_char_mult' 4725 Target supports `vector char' multiplication. 4726 4727 `vect_short_mult' 4728 Target supports `vector short' multiplication. 4729 4730 `vect_int_mult' 4731 Target supports `vector int' multiplication. 4732 4733 `vect_extract_even_odd' 4734 Target supports vector even/odd element extraction. 4735 4736 `vect_extract_even_odd_wide' 4737 Target supports vector even/odd element extraction of vectors with 4738 elements `SImode' or larger. 4739 4740 `vect_interleave' 4741 Target supports vector interleaving. 4742 4743 `vect_strided' 4744 Target supports vector interleaving and extract even/odd. 4745 4746 `vect_strided_wide' 4747 Target supports vector interleaving and extract even/odd for wide 4748 element types. 4749 4750 `vect_perm' 4751 Target supports vector permutation. 4752 4753 `vect_shift' 4754 Target supports a hardware vector shift operation. 4755 4756 `vect_widen_sum_hi_to_si' 4757 Target supports a vector widening summation of `short' operands 4758 into `int' results, or can promote (unpack) from `short' to `int'. 4759 4760 `vect_widen_sum_qi_to_hi' 4761 Target supports a vector widening summation of `char' operands 4762 into `short' results, or can promote (unpack) from `char' to 4763 `short'. 4764 4765 `vect_widen_sum_qi_to_si' 4766 Target supports a vector widening summation of `char' operands 4767 into `int' results. 4768 4769 `vect_widen_mult_qi_to_hi' 4770 Target supports a vector widening multiplication of `char' operands 4771 into `short' results, or can promote (unpack) from `char' to 4772 `short' and perform non-widening multiplication of `short'. 4773 4774 `vect_widen_mult_hi_to_si' 4775 Target supports a vector widening multiplication of `short' 4776 operands into `int' results, or can promote (unpack) from `short' 4777 to `int' and perform non-widening multiplication of `int'. 4778 4779 `vect_sdot_qi' 4780 Target supports a vector dot-product of `signed char'. 4781 4782 `vect_udot_qi' 4783 Target supports a vector dot-product of `unsigned char'. 4784 4785 `vect_sdot_hi' 4786 Target supports a vector dot-product of `signed short'. 4787 4788 `vect_udot_hi' 4789 Target supports a vector dot-product of `unsigned short'. 4790 4791 `vect_pack_trunc' 4792 Target supports a vector demotion (packing) of `short' to `char' 4793 and from `int' to `short' using modulo arithmetic. 4794 4795 `vect_unpack' 4796 Target supports a vector promotion (unpacking) of `char' to `short' 4797 and from `char' to `int'. 4798 4799 `vect_intfloat_cvt' 4800 Target supports conversion from `signed int' to `float'. 4801 4802 `vect_uintfloat_cvt' 4803 Target supports conversion from `unsigned int' to `float'. 4804 4805 `vect_floatint_cvt' 4806 Target supports conversion from `float' to `signed int'. 4807 4808 `vect_floatuint_cvt' 4809 Target supports conversion from `float' to `unsigned int'. 4810 4811 7.2.3.4 Thread Local Storage attributes 4812 ....................................... 4813 4814 `tls' 4815 Target supports thread-local storage. 4816 4817 `tls_native' 4818 Target supports native (rather than emulated) thread-local storage. 4819 4820 `tls_runtime' 4821 Test system supports executing TLS executables. 4822 4823 7.2.3.5 Decimal floating point attributes 4824 ......................................... 4825 4826 `dfp' 4827 Targets supports compiling decimal floating point extension to C. 4828 4829 `dfp_nocache' 4830 Including the options used to compile this particular test, the 4831 target supports compiling decimal floating point extension to C. 4832 4833 `dfprt' 4834 Test system can execute decimal floating point tests. 4835 4836 `dfprt_nocache' 4837 Including the options used to compile this particular test, the 4838 test system can execute decimal floating point tests. 4839 4840 `hard_dfp' 4841 Target generates decimal floating point instructions with current 4842 options. 4843 4844 7.2.3.6 ARM-specific attributes 4845 ............................... 4846 4847 `arm32' 4848 ARM target generates 32-bit code. 4849 4850 `arm_eabi' 4851 ARM target adheres to the ABI for the ARM Architecture. 4852 4853 `arm_hf_eabi' 4854 ARM target adheres to the VFP and Advanced SIMD Register Arguments 4855 variant of the ABI for the ARM Architecture (as selected with 4856 `-mfloat-abi=hard'). 4857 4858 `arm_hard_vfp_ok' 4859 ARM target supports `-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4860 may be incompatible with these options. 4861 4862 `arm_iwmmxt_ok' 4863 ARM target supports `-mcpu=iwmmxt'. Some multilibs may be 4864 incompatible with this option. 4865 4866 `arm_neon' 4867 ARM target supports generating NEON instructions. 4868 4869 `arm_neon_hw' 4870 Test system supports executing NEON instructions. 4871 4872 `arm_neonv2_hw' 4873 Test system supports executing NEON v2 instructions. 4874 4875 `arm_neon_ok' 4876 ARM Target supports `-mfpu=neon -mfloat-abi=softfp' or compatible 4877 options. Some multilibs may be incompatible with these options. 4878 4879 `arm_neonv2_ok' 4880 ARM Target supports `-mfpu=neon-vfpv4 -mfloat-abi=softfp' or 4881 compatible options. Some multilibs may be incompatible with these 4882 options. 4883 4884 `arm_neon_fp16_ok' 4885 ARM Target supports `-mfpu=neon-fp16 -mfloat-abi=softfp' or 4886 compatible options. Some multilibs may be incompatible with these 4887 options. 4888 4889 `arm_thumb1_ok' 4890 ARM target generates Thumb-1 code for `-mthumb'. 4891 4892 `arm_thumb2_ok' 4893 ARM target generates Thumb-2 code for `-mthumb'. 4894 4895 `arm_vfp_ok' 4896 ARM target supports `-mfpu=vfp -mfloat-abi=softfp'. Some 4897 multilibs may be incompatible with these options. 4898 4899 `arm_v8_vfp_ok' 4900 ARM target supports `-mfpu=fp-armv8 -mfloat-abi=softfp'. Some 4901 multilibs may be incompatible with these options. 4902 4903 `arm_v8_neon_ok' 4904 ARM target supports `-mfpu=neon-fp-armv8 -mfloat-abi=softfp'. 4905 Some multilibs may be incompatible with these options. 4906 4907 `arm_prefer_ldrd_strd' 4908 ARM target prefers `LDRD' and `STRD' instructions over `LDM' and 4909 `STM' instructions. 4910 4911 4912 7.2.3.7 MIPS-specific attributes 4913 ................................ 4914 4915 `mips64' 4916 MIPS target supports 64-bit instructions. 4917 4918 `nomips16' 4919 MIPS target does not produce MIPS16 code. 4920 4921 `mips16_attribute' 4922 MIPS target can generate MIPS16 code. 4923 4924 `mips_loongson' 4925 MIPS target is a Loongson-2E or -2F target using an ABI that 4926 supports the Loongson vector modes. 4927 4928 `mips_newabi_large_long_double' 4929 MIPS target supports `long double' larger than `double' when using 4930 the new ABI. 4931 4932 `mpaired_single' 4933 MIPS target supports `-mpaired-single'. 4934 4935 7.2.3.8 PowerPC-specific attributes 4936 ................................... 4937 4938 `dfp_hw' 4939 PowerPC target supports executing hardware DFP instructions. 4940 4941 `p8vector_hw' 4942 PowerPC target supports executing VSX instructions (ISA 2.07). 4943 4944 `powerpc64' 4945 Test system supports executing 64-bit instructions. 4946 4947 `powerpc_altivec' 4948 PowerPC target supports AltiVec. 4949 4950 `powerpc_altivec_ok' 4951 PowerPC target supports `-maltivec'. 4952 4953 `powerpc_eabi_ok' 4954 PowerPC target supports `-meabi'. 4955 4956 `powerpc_elfv2' 4957 PowerPC target supports `-mabi=elfv2'. 4958 4959 `powerpc_fprs' 4960 PowerPC target supports floating-point registers. 4961 4962 `powerpc_hard_double' 4963 PowerPC target supports hardware double-precision floating-point. 4964 4965 `powerpc_htm_ok' 4966 PowerPC target supports `-mhtm' 4967 4968 `powerpc_p8vector_ok' 4969 PowerPC target supports `-mpower8-vector' 4970 4971 `powerpc_ppu_ok' 4972 PowerPC target supports `-mcpu=cell'. 4973 4974 `powerpc_spe' 4975 PowerPC target supports PowerPC SPE. 4976 4977 `powerpc_spe_nocache' 4978 Including the options used to compile this particular test, the 4979 PowerPC target supports PowerPC SPE. 4980 4981 `powerpc_spu' 4982 PowerPC target supports PowerPC SPU. 4983 4984 `powerpc_vsx_ok' 4985 PowerPC target supports `-mvsx'. 4986 4987 `powerpc_405_nocache' 4988 Including the options used to compile this particular test, the 4989 PowerPC target supports PowerPC 405. 4990 4991 `ppc_recip_hw' 4992 PowerPC target supports executing reciprocal estimate instructions. 4993 4994 `spu_auto_overlay' 4995 SPU target has toolchain that supports automatic overlay 4996 generation. 4997 4998 `vmx_hw' 4999 PowerPC target supports executing AltiVec instructions. 5000 5001 `vsx_hw' 5002 PowerPC target supports executing VSX instructions (ISA 2.06). 5003 5004 7.2.3.9 Other hardware attributes 5005 ................................. 5006 5007 `avx' 5008 Target supports compiling `avx' instructions. 5009 5010 `avx_runtime' 5011 Target supports the execution of `avx' instructions. 5012 5013 `cell_hw' 5014 Test system can execute AltiVec and Cell PPU instructions. 5015 5016 `coldfire_fpu' 5017 Target uses a ColdFire FPU. 5018 5019 `hard_float' 5020 Target supports FPU instructions. 5021 5022 `sse' 5023 Target supports compiling `sse' instructions. 5024 5025 `sse_runtime' 5026 Target supports the execution of `sse' instructions. 5027 5028 `sse2' 5029 Target supports compiling `sse2' instructions. 5030 5031 `sse2_runtime' 5032 Target supports the execution of `sse2' instructions. 5033 5034 `sync_char_short' 5035 Target supports atomic operations on `char' and `short'. 5036 5037 `sync_int_long' 5038 Target supports atomic operations on `int' and `long'. 5039 5040 `ultrasparc_hw' 5041 Test environment appears to run executables on a simulator that 5042 accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS' 5043 or `EM_SPARCV9' executables. 5044 5045 `vect_cmdline_needed' 5046 Target requires a command line argument to enable a SIMD 5047 instruction set. 5048 5049 7.2.3.10 Environment attributes 5050 ............................... 5051 5052 `c' 5053 The language for the compiler under test is C. 5054 5055 `c++' 5056 The language for the compiler under test is C++. 5057 5058 `c99_runtime' 5059 Target provides a full C99 runtime. 5060 5061 `correct_iso_cpp_string_wchar_protos' 5062 Target `string.h' and `wchar.h' headers provide C++ required 5063 overloads for `strchr' etc. functions. 5064 5065 `dummy_wcsftime' 5066 Target uses a dummy `wcsftime' function that always returns zero. 5067 5068 `fd_truncate' 5069 Target can truncate a file from a file descriptor, as used by 5070 `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'. 5071 5072 `freestanding' 5073 Target is `freestanding' as defined in section 4 of the C99 5074 standard. Effectively, it is a target which supports no extra 5075 headers or libraries other than what is considered essential. 5076 5077 `init_priority' 5078 Target supports constructors with initialization priority 5079 arguments. 5080 5081 `inttypes_types' 5082 Target has the basic signed and unsigned types in `inttypes.h'. 5083 This is for tests that GCC's notions of these types agree with 5084 those in the header, as some systems have only `inttypes.h'. 5085 5086 `lax_strtofp' 5087 Target might have errors of a few ULP in string to floating-point 5088 conversion functions and overflow is not always detected correctly 5089 by those functions. 5090 5091 `mmap' 5092 Target supports `mmap'. 5093 5094 `newlib' 5095 Target supports Newlib. 5096 5097 `pow10' 5098 Target provides `pow10' function. 5099 5100 `pthread' 5101 Target can compile using `pthread.h' with no errors or warnings. 5102 5103 `pthread_h' 5104 Target has `pthread.h'. 5105 5106 `run_expensive_tests' 5107 Expensive testcases (usually those that consume excessive amounts 5108 of CPU time) should be run on this target. This can be enabled by 5109 setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a 5110 non-empty string. 5111 5112 `simulator' 5113 Test system runs executables on a simulator (i.e. slowly) rather 5114 than hardware (i.e. fast). 5115 5116 `stdint_types' 5117 Target has the basic signed and unsigned C types in `stdint.h'. 5118 This will be obsolete when GCC ensures a working `stdint.h' for 5119 all targets. 5120 5121 `trampolines' 5122 Target supports trampolines. 5123 5124 `uclibc' 5125 Target supports uClibc. 5126 5127 `unwrapped' 5128 Target does not use a status wrapper. 5129 5130 `vxworks_kernel' 5131 Target is a VxWorks kernel. 5132 5133 `vxworks_rtp' 5134 Target is a VxWorks RTP. 5135 5136 `wchar' 5137 Target supports wide characters. 5138 5139 7.2.3.11 Other attributes 5140 ......................... 5141 5142 `automatic_stack_alignment' 5143 Target supports automatic stack alignment. 5144 5145 `cxa_atexit' 5146 Target uses `__cxa_atexit'. 5147 5148 `default_packed' 5149 Target has packed layout of structure members by default. 5150 5151 `fgraphite' 5152 Target supports Graphite optimizations. 5153 5154 `fixed_point' 5155 Target supports fixed-point extension to C. 5156 5157 `fopenmp' 5158 Target supports OpenMP via `-fopenmp'. 5159 5160 `fpic' 5161 Target supports `-fpic' and `-fPIC'. 5162 5163 `freorder' 5164 Target supports `-freorder-blocks-and-partition'. 5165 5166 `fstack_protector' 5167 Target supports `-fstack-protector'. 5168 5169 `gas' 5170 Target uses GNU `as'. 5171 5172 `gc_sections' 5173 Target supports `--gc-sections'. 5174 5175 `gld' 5176 Target uses GNU `ld'. 5177 5178 `keeps_null_pointer_checks' 5179 Target keeps null pointer checks, either due to the use of 5180 `-fno-delete-null-pointer-checks' or hardwired into the target. 5181 5182 `lto' 5183 Compiler has been configured to support link-time optimization 5184 (LTO). 5185 5186 `naked_functions' 5187 Target supports the `naked' function attribute. 5188 5189 `named_sections' 5190 Target supports named sections. 5191 5192 `natural_alignment_32' 5193 Target uses natural alignment (aligned to type size) for types of 5194 32 bits or less. 5195 5196 `target_natural_alignment_64' 5197 Target uses natural alignment (aligned to type size) for types of 5198 64 bits or less. 5199 5200 `nonpic' 5201 Target does not generate PIC by default. 5202 5203 `pcc_bitfield_type_matters' 5204 Target defines `PCC_BITFIELD_TYPE_MATTERS'. 5205 5206 `pe_aligned_commons' 5207 Target supports `-mpe-aligned-commons'. 5208 5209 `pie' 5210 Target supports `-pie', `-fpie' and `-fPIE'. 5211 5212 `section_anchors' 5213 Target supports section anchors. 5214 5215 `short_enums' 5216 Target defaults to short enums. 5217 5218 `static' 5219 Target supports `-static'. 5220 5221 `static_libgfortran' 5222 Target supports statically linking `libgfortran'. 5223 5224 `string_merging' 5225 Target supports merging string constants at link time. 5226 5227 `ucn' 5228 Target supports compiling and assembling UCN. 5229 5230 `ucn_nocache' 5231 Including the options used to compile this particular test, the 5232 target supports compiling and assembling UCN. 5233 5234 `unaligned_stack' 5235 Target does not guarantee that its `STACK_BOUNDARY' is greater than 5236 or equal to the required vector alignment. 5237 5238 `vector_alignment_reachable' 5239 Vector alignment is reachable for types of 32 bits or less. 5240 5241 `vector_alignment_reachable_for_64bit' 5242 Vector alignment is reachable for types of 64 bits or less. 5243 5244 `wchar_t_char16_t_compatible' 5245 Target supports `wchar_t' that is compatible with `char16_t'. 5246 5247 `wchar_t_char32_t_compatible' 5248 Target supports `wchar_t' that is compatible with `char32_t'. 5249 5250 7.2.3.12 Local to tests in `gcc.target/i386' 5251 ............................................ 5252 5253 `3dnow' 5254 Target supports compiling `3dnow' instructions. 5255 5256 `aes' 5257 Target supports compiling `aes' instructions. 5258 5259 `fma4' 5260 Target supports compiling `fma4' instructions. 5261 5262 `ms_hook_prologue' 5263 Target supports attribute `ms_hook_prologue'. 5264 5265 `pclmul' 5266 Target supports compiling `pclmul' instructions. 5267 5268 `sse3' 5269 Target supports compiling `sse3' instructions. 5270 5271 `sse4' 5272 Target supports compiling `sse4' instructions. 5273 5274 `sse4a' 5275 Target supports compiling `sse4a' instructions. 5276 5277 `ssse3' 5278 Target supports compiling `ssse3' instructions. 5279 5280 `vaes' 5281 Target supports compiling `vaes' instructions. 5282 5283 `vpclmul' 5284 Target supports compiling `vpclmul' instructions. 5285 5286 `xop' 5287 Target supports compiling `xop' instructions. 5288 5289 7.2.3.13 Local to tests in `gcc.target/spu/ea' 5290 .............................................. 5291 5292 `ealib' 5293 Target `__ea' library functions are available. 5294 5295 7.2.3.14 Local to tests in `gcc.test-framework' 5296 ............................................... 5297 5298 `no' 5299 Always returns 0. 5300 5301 `yes' 5302 Always returns 1. 5303 5304 5305 File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5306 5307 7.2.4 Features for `dg-add-options' 5308 ----------------------------------- 5309 5310 The supported values of FEATURE for directive `dg-add-options' are: 5311 5312 `arm_neon' 5313 NEON support. Only ARM targets support this feature, and only then 5314 in certain modes; see the *note arm_neon_ok effective target 5315 keyword: arm_neon_ok. 5316 5317 `arm_neon_fp16' 5318 NEON and half-precision floating point support. Only ARM targets 5319 support this feature, and only then in certain modes; see the 5320 *note arm_neon_fp16_ok effective target keyword: arm_neon_ok. 5321 5322 `bind_pic_locally' 5323 Add the target-specific flags needed to enable functions to bind 5324 locally when using pic/PIC passes in the testsuite. 5325 5326 `c99_runtime' 5327 Add the target-specific flags needed to access the C99 runtime. 5328 5329 `ieee' 5330 Add the target-specific flags needed to enable full IEEE 5331 compliance mode. 5332 5333 `mips16_attribute' 5334 `mips16' function attributes. Only MIPS targets support this 5335 feature, and only then in certain modes. 5336 5337 `tls' 5338 Add the target-specific flags needed to use thread-local storage. 5339 5340 5341 File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5342 5343 7.2.5 Variants of `dg-require-SUPPORT' 5344 -------------------------------------- 5345 5346 A few of the `dg-require' directives take arguments. 5347 5348 `dg-require-iconv CODESET' 5349 Skip the test if the target does not support iconv. CODESET is 5350 the codeset to convert to. 5351 5352 `dg-require-profiling PROFOPT' 5353 Skip the test if the target does not support profiling with option 5354 PROFOPT. 5355 5356 `dg-require-visibility VIS' 5357 Skip the test if the target does not support the `visibility' 5358 attribute. If VIS is `""', support for `visibility("hidden")' is 5359 checked, for `visibility("VIS")' otherwise. 5360 5361 The original `dg-require' directives were defined before there was 5362 support for effective-target keywords. The directives that do not take 5363 arguments could be replaced with effective-target keywords. 5364 5365 `dg-require-alias ""' 5366 Skip the test if the target does not support the `alias' attribute. 5367 5368 `dg-require-ascii-locale ""' 5369 Skip the test if the host does not support an ASCII locale. 5370 5371 `dg-require-compat-dfp ""' 5372 Skip this test unless both compilers in a `compat' testsuite 5373 support decimal floating point. 5374 5375 `dg-require-cxa-atexit ""' 5376 Skip the test if the target does not support `__cxa_atexit'. This 5377 is equivalent to `dg-require-effective-target cxa_atexit'. 5378 5379 `dg-require-dll ""' 5380 Skip the test if the target does not support DLL attributes. 5381 5382 `dg-require-fork ""' 5383 Skip the test if the target does not support `fork'. 5384 5385 `dg-require-gc-sections ""' 5386 Skip the test if the target's linker does not support the 5387 `--gc-sections' flags. This is equivalent to 5388 `dg-require-effective-target gc-sections'. 5389 5390 `dg-require-host-local ""' 5391 Skip the test if the host is remote, rather than the same as the 5392 build system. Some tests are incompatible with DejaGnu's handling 5393 of remote hosts, which involves copying the source file to the 5394 host and compiling it with a relative path and "`-o a.out'". 5395 5396 `dg-require-mkfifo ""' 5397 Skip the test if the target does not support `mkfifo'. 5398 5399 `dg-require-named-sections ""' 5400 Skip the test is the target does not support named sections. This 5401 is equivalent to `dg-require-effective-target named_sections'. 5402 5403 `dg-require-weak ""' 5404 Skip the test if the target does not support weak symbols. 5405 5406 `dg-require-weak-override ""' 5407 Skip the test if the target does not support overriding weak 5408 symbols. 5409 5410 5411 File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5412 5413 7.2.6 Commands for use in `dg-final' 5414 ------------------------------------ 5415 5416 The GCC testsuite defines the following directives to be used within 5417 `dg-final'. 5418 5419 7.2.6.1 Scan a particular file 5420 .............................. 5421 5422 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 5423 Passes if REGEXP matches text in FILENAME. 5424 5425 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 5426 Passes if REGEXP does not match text in FILENAME. 5427 5428 `scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 5429 Passes if REGEXP matches in Fortran module MODULE. 5430 5431 7.2.6.2 Scan the assembly output 5432 ................................ 5433 5434 `scan-assembler REGEX [{ target/xfail SELECTOR }]' 5435 Passes if REGEX matches text in the test's assembler output. 5436 5437 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 5438 Passes if REGEX does not match text in the test's assembler output. 5439 5440 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 5441 Passes if REGEX is matched exactly NUM times in the test's 5442 assembler output. 5443 5444 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 5445 Passes if REGEX matches text in the test's demangled assembler 5446 output. 5447 5448 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 5449 Passes if REGEX does not match text in the test's demangled 5450 assembler output. 5451 5452 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 5453 Passes if SYMBOL is defined as a hidden symbol in the test's 5454 assembly output. 5455 5456 `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 5457 Passes if SYMBOL is not defined as a hidden symbol in the test's 5458 assembly output. 5459 5460 7.2.6.3 Scan optimization dump files 5461 .................................... 5462 5463 These commands are available for KIND of `tree', `rtl', and `ipa'. 5464 5465 `scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 5466 Passes if REGEX matches text in the dump file with suffix SUFFIX. 5467 5468 `scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5469 Passes if REGEX does not match text in the dump file with suffix 5470 SUFFIX. 5471 5472 `scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 5473 Passes if REGEX is found exactly NUM times in the dump file with 5474 suffix SUFFIX. 5475 5476 `scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 5477 Passes if REGEX matches demangled text in the dump file with 5478 suffix SUFFIX. 5479 5480 `scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5481 Passes if REGEX does not match demangled text in the dump file with 5482 suffix SUFFIX. 5483 5484 7.2.6.4 Verify that an output files exists or not 5485 ................................................. 5486 5487 `output-exists [{ target/xfail SELECTOR }]' 5488 Passes if compiler output file exists. 5489 5490 `output-exists-not [{ target/xfail SELECTOR }]' 5491 Passes if compiler output file does not exist. 5492 5493 7.2.6.5 Check for LTO tests 5494 ........................... 5495 5496 `scan-symbol REGEXP [{ target/xfail SELECTOR }]' 5497 Passes if the pattern is present in the final executable. 5498 5499 7.2.6.6 Checks for `gcov' tests 5500 ............................... 5501 5502 `run-gcov SOURCEFILE' 5503 Check line counts in `gcov' tests. 5504 5505 `run-gcov [branches] [calls] { OPTS SOURCEFILE }' 5506 Check branch and/or call counts, in addition to line counts, in 5507 `gcov' tests. 5508 5509 7.2.6.7 Clean up generated test files 5510 ..................................... 5511 5512 `cleanup-coverage-files' 5513 Removes coverage data files generated for this test. 5514 5515 `cleanup-ipa-dump SUFFIX' 5516 Removes IPA dump files generated for this test. 5517 5518 `cleanup-modules "LIST-OF-EXTRA-MODULES"' 5519 Removes Fortran module files generated for this test, excluding the 5520 module names listed in keep-modules. Cleaning up module files is 5521 usually done automatically by the testsuite by looking at the 5522 source files and removing the modules after the test has been 5523 executed. 5524 module MoD1 5525 end module MoD1 5526 module Mod2 5527 end module Mod2 5528 module moD3 5529 end module moD3 5530 module mod4 5531 end module mod4 5532 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant 5533 ! { dg-final { keep-modules "mod3 mod4" } } 5534 5535 `keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"' 5536 Whitespace separated list of module names that should not be 5537 deleted by cleanup-modules. If the list of modules is empty, all 5538 modules defined in this file are kept. 5539 module maybe_unneeded 5540 end module maybe_unneeded 5541 module keep1 5542 end module keep1 5543 module keep2 5544 end module keep2 5545 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two 5546 ! { dg-final { keep-modules "" } } ! keep all 5547 5548 `cleanup-profile-file' 5549 Removes profiling files generated for this test. 5550 5551 `cleanup-repo-files' 5552 Removes files generated for this test for `-frepo'. 5553 5554 `cleanup-rtl-dump SUFFIX' 5555 Removes RTL dump files generated for this test. 5556 5557 `cleanup-saved-temps' 5558 Removes files for the current test which were kept for 5559 `-save-temps'. 5560 5561 `cleanup-tree-dump SUFFIX' 5562 Removes tree dump files matching SUFFIX which were generated for 5563 this test. 5564 5565 5566 File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 5567 5568 7.3 Ada Language Testsuites 5569 =========================== 5570 5571 The Ada testsuite includes executable tests from the ACATS testsuite, 5572 publicly available at `http://www.ada-auth.org/acats.html'. 5573 5574 These tests are integrated in the GCC testsuite in the `ada/acats' 5575 directory, and enabled automatically when running `make check', assuming 5576 the Ada language has been enabled when configuring GCC. 5577 5578 You can also run the Ada testsuite independently, using `make 5579 check-ada', or run a subset of the tests by specifying which chapter to 5580 run, e.g.: 5581 5582 $ make check-ada CHAPTERS="c3 c9" 5583 5584 The tests are organized by directory, each directory corresponding to 5585 a chapter of the Ada Reference Manual. So for example, `c9' corresponds 5586 to chapter 9, which deals with tasking features of the language. 5587 5588 There is also an extra chapter called `gcc' containing a template for 5589 creating new executable tests, although this is deprecated in favor of 5590 the `gnat.dg' testsuite. 5591 5592 The tests are run using two `sh' scripts: `run_acats' and 5593 `run_all.sh'. To run the tests using a simulator or a cross target, 5594 see the small customization section at the top of `run_all.sh'. 5595 5596 These tests are run using the build tree: they can be run without doing 5597 a `make install'. 5598 5599 5600 File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 5601 5602 7.4 C Language Testsuites 5603 ========================= 5604 5605 GCC contains the following C language testsuites, in the 5606 `gcc/testsuite' directory: 5607 5608 `gcc.dg' 5609 This contains tests of particular features of the C compiler, 5610 using the more modern `dg' harness. Correctness tests for various 5611 compiler features should go here if possible. 5612 5613 Magic comments determine whether the file is preprocessed, 5614 compiled, linked or run. In these tests, error and warning 5615 message texts are compared against expected texts or regular 5616 expressions given in comments. These tests are run with the 5617 options `-ansi -pedantic' unless other options are given in the 5618 test. Except as noted below they are not run with multiple 5619 optimization options. 5620 5621 `gcc.dg/compat' 5622 This subdirectory contains tests for binary compatibility using 5623 `lib/compat.exp', which in turn uses the language-independent 5624 support (*note Support for testing binary compatibility: compat 5625 Testing.). 5626 5627 `gcc.dg/cpp' 5628 This subdirectory contains tests of the preprocessor. 5629 5630 `gcc.dg/debug' 5631 This subdirectory contains tests for debug formats. Tests in this 5632 subdirectory are run for each debug format that the compiler 5633 supports. 5634 5635 `gcc.dg/format' 5636 This subdirectory contains tests of the `-Wformat' format 5637 checking. Tests in this directory are run with and without 5638 `-DWIDE'. 5639 5640 `gcc.dg/noncompile' 5641 This subdirectory contains tests of code that should not compile 5642 and does not need any special compilation options. They are run 5643 with multiple optimization options, since sometimes invalid code 5644 crashes the compiler with optimization. 5645 5646 `gcc.dg/special' 5647 FIXME: describe this. 5648 5649 `gcc.c-torture' 5650 This contains particular code fragments which have historically 5651 broken easily. These tests are run with multiple optimization 5652 options, so tests for features which only break at some 5653 optimization levels belong here. This also contains tests to 5654 check that certain optimizations occur. It might be worthwhile to 5655 separate the correctness tests cleanly from the code quality 5656 tests, but it hasn't been done yet. 5657 5658 `gcc.c-torture/compat' 5659 FIXME: describe this. 5660 5661 This directory should probably not be used for new tests. 5662 5663 `gcc.c-torture/compile' 5664 This testsuite contains test cases that should compile, but do not 5665 need to link or run. These test cases are compiled with several 5666 different combinations of optimization options. All warnings are 5667 disabled for these test cases, so this directory is not suitable if 5668 you wish to test for the presence or absence of compiler warnings. 5669 While special options can be set, and tests disabled on specific 5670 platforms, by the use of `.x' files, mostly these test cases 5671 should not contain platform dependencies. FIXME: discuss how 5672 defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used. 5673 5674 `gcc.c-torture/execute' 5675 This testsuite contains test cases that should compile, link and 5676 run; otherwise the same comments as for `gcc.c-torture/compile' 5677 apply. 5678 5679 `gcc.c-torture/execute/ieee' 5680 This contains tests which are specific to IEEE floating point. 5681 5682 `gcc.c-torture/unsorted' 5683 FIXME: describe this. 5684 5685 This directory should probably not be used for new tests. 5686 5687 `gcc.misc-tests' 5688 This directory contains C tests that require special handling. 5689 Some of these tests have individual expect files, and others share 5690 special-purpose expect files: 5691 5692 ``bprob*.c'' 5693 Test `-fbranch-probabilities' using 5694 `gcc.misc-tests/bprob.exp', which in turn uses the generic, 5695 language-independent framework (*note Support for testing 5696 profile-directed optimizations: profopt Testing.). 5697 5698 ``gcov*.c'' 5699 Test `gcov' output using `gcov.exp', which in turn uses the 5700 language-independent support (*note Support for testing gcov: 5701 gcov Testing.). 5702 5703 ``i386-pf-*.c'' 5704 Test i386-specific support for data prefetch using 5705 `i386-prefetch.exp'. 5706 5707 `gcc.test-framework' 5708 5709 ``dg-*.c'' 5710 Test the testsuite itself using 5711 `gcc.test-framework/test-framework.exp'. 5712 5713 5714 FIXME: merge in `testsuite/README.gcc' and discuss the format of test 5715 cases and magic comments more. 5716 5717 5718 File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites 5719 5720 7.5 The Java library testsuites. 5721 ================================ 5722 5723 Runtime tests are executed via `make check' in the 5724 `TARGET/libjava/testsuite' directory in the build tree. Additional 5725 runtime tests can be checked into this testsuite. 5726 5727 Regression testing of the core packages in libgcj is also covered by 5728 the Mauve testsuite. The Mauve Project develops tests for the Java 5729 Class Libraries. These tests are run as part of libgcj testing by 5730 placing the Mauve tree within the libjava testsuite sources at 5731 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location 5732 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'. 5733 5734 To detect regressions, a mechanism in `mauve.exp' compares the 5735 failures for a test run against the list of expected failures in 5736 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 5737 Update this file when adding new failing tests to Mauve, or when fixing 5738 bugs in libgcj that had caused Mauve test failures. 5739 5740 We encourage developers to contribute test cases to Mauve. 5741 5742 5743 File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites 5744 5745 7.6 Support for testing link-time optimizations 5746 =============================================== 5747 5748 Tests for link-time optimizations usually require multiple source files 5749 that are compiled separately, perhaps with different sets of options. 5750 There are several special-purpose test directives used for these tests. 5751 5752 `{ dg-lto-do DO-WHAT-KEYWORD }' 5753 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 5754 is executed. It is one of: 5755 5756 `assemble' 5757 Compile with `-c' to produce a relocatable object file. 5758 5759 `link' 5760 Compile, assemble, and link to produce an executable file. 5761 5762 `run' 5763 Produce and run an executable file, which is expected to 5764 return an exit code of 0. 5765 5766 The default is `assemble'. That can be overridden for a set of 5767 tests by redefining `dg-do-what-default' within the `.exp' file 5768 for those tests. 5769 5770 Unlike `dg-do', `dg-lto-do' does not support an optional `target' 5771 or `xfail' list. Use `dg-skip-if', `dg-xfail-if', or 5772 `dg-xfail-run-if'. 5773 5774 `{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 5775 This directive provides a list of one or more sets of compiler 5776 options to override LTO_OPTIONS. Each test will be compiled and 5777 run with each of these sets of options. 5778 5779 `{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}' 5780 This directive adds OPTIONS to the linker options used. 5781 5782 `{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}' 5783 This directive removes OPTIONS from the set of linker options used. 5784 5785 5786 File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 5787 5788 7.7 Support for testing `gcov' 5789 ============================== 5790 5791 Language-independent support for testing `gcov', and for checking that 5792 branch profiling produces expected values, is provided by the expect 5793 file `lib/gcov.exp'. `gcov' tests also rely on procedures in 5794 `lib/gcc-dg.exp' to compile and run the test program. A typical `gcov' 5795 test contains the following DejaGnu commands within comments: 5796 5797 { dg-options "-fprofile-arcs -ftest-coverage" } 5798 { dg-do run { target native } } 5799 { dg-final { run-gcov sourcefile } } 5800 5801 Checks of `gcov' output can include line counts, branch percentages, 5802 and call return percentages. All of these checks are requested via 5803 commands that appear in comments in the test's source file. Commands 5804 to check line counts are processed by default. Commands to check 5805 branch percentages and call return percentages are processed if the 5806 `run-gcov' command has arguments `branches' or `calls', respectively. 5807 For example, the following specifies checking both, as well as passing 5808 `-b' to `gcov': 5809 5810 { dg-final { run-gcov branches calls { -b sourcefile } } } 5811 5812 A line count command appears within a comment on the source line that 5813 is expected to get the specified count and has the form `count(CNT)'. 5814 A test should only check line counts for lines that will get the same 5815 count for any architecture. 5816 5817 Commands to check branch percentages (`branch') and call return 5818 percentages (`returns') are very similar to each other. A beginning 5819 command appears on or before the first of a range of lines that will 5820 report the percentage, and the ending command follows that range of 5821 lines. The beginning command can include a list of percentages, all of 5822 which are expected to be found within the range. A range is terminated 5823 by the next command of the same kind. A command `branch(end)' or 5824 `returns(end)' marks the end of a range without starting a new one. 5825 For example: 5826 5827 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 5828 /* branch(end) */ 5829 foo (i, j); 5830 5831 For a call return percentage, the value specified is the percentage of 5832 calls reported to return. For a branch percentage, the value is either 5833 the expected percentage or 100 minus that value, since the direction of 5834 a branch can differ depending on the target or the optimization level. 5835 5836 Not all branches and calls need to be checked. A test should not 5837 check for branches that might be optimized away or replaced with 5838 predicated instructions. Don't check for calls inserted by the 5839 compiler or ones that might be inlined or optimized away. 5840 5841 A single test can check for combinations of line counts, branch 5842 percentages, and call return percentages. The command to check a line 5843 count must appear on the line that will report that count, but commands 5844 to check branch percentages and call return percentages can bracket the 5845 lines that report them. 5846 5847 5848 File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 5849 5850 7.8 Support for testing profile-directed optimizations 5851 ====================================================== 5852 5853 The file `profopt.exp' provides language-independent support for 5854 checking correct execution of a test built with profile-directed 5855 optimization. This testing requires that a test program be built and 5856 executed twice. The first time it is compiled to generate profile 5857 data, and the second time it is compiled to use the data that was 5858 generated during the first execution. The second execution is to 5859 verify that the test produces the expected results. 5860 5861 To check that the optimization actually generated better code, a test 5862 can be built and run a third time with normal optimizations to verify 5863 that the performance is better with the profile-directed optimizations. 5864 `profopt.exp' has the beginnings of this kind of support. 5865 5866 `profopt.exp' provides generic support for profile-directed 5867 optimizations. Each set of tests that uses it provides information 5868 about a specific optimization: 5869 5870 `tool' 5871 tool being tested, e.g., `gcc' 5872 5873 `profile_option' 5874 options used to generate profile data 5875 5876 `feedback_option' 5877 options used to optimize using that profile data 5878 5879 `prof_ext' 5880 suffix of profile data files 5881 5882 `PROFOPT_OPTIONS' 5883 list of options with which to run each test, similar to the lists 5884 for torture tests 5885 5886 `{ dg-final-generate { LOCAL-DIRECTIVE } }' 5887 This directive is similar to `dg-final', but the LOCAL-DIRECTIVE 5888 is run after the generation of profile data. 5889 5890 `{ dg-final-use { LOCAL-DIRECTIVE } }' 5891 The LOCAL-DIRECTIVE is run after the profile data have been used. 5892 5893 5894 File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 5895 5896 7.9 Support for testing binary compatibility 5897 ============================================ 5898 5899 The file `compat.exp' provides language-independent support for binary 5900 compatibility testing. It supports testing interoperability of two 5901 compilers that follow the same ABI, or of multiple sets of compiler 5902 options that should not affect binary compatibility. It is intended to 5903 be used for testsuites that complement ABI testsuites. 5904 5905 A test supported by this framework has three parts, each in a separate 5906 source file: a main program and two pieces that interact with each 5907 other to split up the functionality being tested. 5908 5909 `TESTNAME_main.SUFFIX' 5910 Contains the main program, which calls a function in file 5911 `TESTNAME_x.SUFFIX'. 5912 5913 `TESTNAME_x.SUFFIX' 5914 Contains at least one call to a function in `TESTNAME_y.SUFFIX'. 5915 5916 `TESTNAME_y.SUFFIX' 5917 Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'. 5918 5919 Within each test, the main program and one functional piece are 5920 compiled by the GCC under test. The other piece can be compiled by an 5921 alternate compiler. If no alternate compiler is specified, then all 5922 three source files are all compiled by the GCC under test. You can 5923 specify pairs of sets of compiler options. The first element of such a 5924 pair specifies options used with the GCC under test, and the second 5925 element of the pair specifies options used with the alternate compiler. 5926 Each test is compiled with each pair of options. 5927 5928 `compat.exp' defines default pairs of compiler options. These can be 5929 overridden by defining the environment variable `COMPAT_OPTIONS' as: 5930 5931 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 5932 ...[list {TSTN} {ALTN}]]" 5933 5934 where TSTI and ALTI are lists of options, with TSTI used by the 5935 compiler under test and ALTI used by the alternate compiler. For 5936 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 5937 the test is first built with `-g -O0' by the compiler under test and 5938 with `-O3' by the alternate compiler. The test is built a second time 5939 using `-fpic' by the compiler under test and `-fPIC -O2' by the 5940 alternate compiler. 5941 5942 An alternate compiler is specified by defining an environment variable 5943 to be the full pathname of an installed compiler; for C define 5944 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'. These 5945 will be written to the `site.exp' file used by DejaGnu. The default is 5946 to build each test with the compiler under test using the first of each 5947 pair of compiler options from `COMPAT_OPTIONS'. When 5948 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is 5949 built using the compiler under test but with combinations of the 5950 options from `COMPAT_OPTIONS'. 5951 5952 To run only the C++ compatibility suite using the compiler under test 5953 and another version of GCC using specific compiler options, do the 5954 following from `OBJDIR/gcc': 5955 5956 rm site.exp 5957 make -k \ 5958 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 5959 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 5960 check-c++ \ 5961 RUNTESTFLAGS="compat.exp" 5962 5963 A test that fails when the source files are compiled with different 5964 compilers, but passes when the files are compiled with the same 5965 compiler, demonstrates incompatibility of the generated code or runtime 5966 support. A test that fails for the alternate compiler but passes for 5967 the compiler under test probably tests for a bug that was fixed in the 5968 compiler under test but is present in the alternate compiler. 5969 5970 The binary compatibility tests support a small number of test framework 5971 commands that appear within comments in a test file. 5972 5973 `dg-require-*' 5974 These commands can be used in `TESTNAME_main.SUFFIX' to skip the 5975 test if specific support is not available on the target. 5976 5977 `dg-options' 5978 The specified options are used for compiling this particular source 5979 file, appended to the options from `COMPAT_OPTIONS'. When this 5980 command appears in `TESTNAME_main.SUFFIX' the options are also 5981 used to link the test program. 5982 5983 `dg-xfail-if' 5984 This command can be used in a secondary source file to specify that 5985 compilation is expected to fail for particular options on 5986 particular targets. 5987 5988 5989 File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites 5990 5991 7.10 Support for torture testing using multiple options 5992 ======================================================= 5993 5994 Throughout the compiler testsuite there are several directories whose 5995 tests are run multiple times, each with a different set of options. 5996 These are known as torture tests. `lib/torture-options.exp' defines 5997 procedures to set up these lists: 5998 5999 `torture-init' 6000 Initialize use of torture lists. 6001 6002 `set-torture-options' 6003 Set lists of torture options to use for tests with and without 6004 loops. Optionally combine a set of torture options with a set of 6005 other options, as is done with Objective-C runtime options. 6006 6007 `torture-finish' 6008 Finalize use of torture lists. 6009 6010 The `.exp' file for a set of tests that use torture options must 6011 include calls to these three procedures if: 6012 6013 * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 6014 6015 * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where 6016 TOOL is `c', `fortran', or `objc'. 6017 6018 * It calls `dg-pch'. 6019 6020 It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to 6021 call the torture procedures if the tests should use the list in 6022 DG_TORTURE_OPTIONS defined in `gcc-dg.exp'. 6023 6024 Most uses of torture options can override the default lists by defining 6025 TORTURE_OPTIONS or add to the default list by defining 6026 ADDITIONAL_TORTURE_OPTIONS. Define these in a `.dejagnurc' file or add 6027 them to the `site.exp' file; for example 6028 6029 set ADDITIONAL_TORTURE_OPTIONS [list \ 6030 { -O2 -ftree-loop-linear } \ 6031 { -O2 -fpeel-loops } ] 6032 6033 6034 File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 6035 6036 8 Option specification files 6037 **************************** 6038 6039 Most GCC command-line options are described by special option 6040 definition files, the names of which conventionally end in `.opt'. 6041 This chapter describes the format of these files. 6042 6043 * Menu: 6044 6045 * Option file format:: The general layout of the files 6046 * Option properties:: Supported option properties 6047 6048 6049 File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 6050 6051 8.1 Option file format 6052 ====================== 6053 6054 Option files are a simple list of records in which each field occupies 6055 its own line and in which the records themselves are separated by blank 6056 lines. Comments may appear on their own line anywhere within the file 6057 and are preceded by semicolons. Whitespace is allowed before the 6058 semicolon. 6059 6060 The files can contain the following types of record: 6061 6062 * A language definition record. These records have two fields: the 6063 string `Language' and the name of the language. Once a language 6064 has been declared in this way, it can be used as an option 6065 property. *Note Option properties::. 6066 6067 * A target specific save record to save additional information. These 6068 records have two fields: the string `TargetSave', and a 6069 declaration type to go in the `cl_target_option' structure. 6070 6071 * A variable record to define a variable used to store option 6072 information. These records have two fields: the string 6073 `Variable', and a declaration of the type and name of the 6074 variable, optionally with an initializer (but without any trailing 6075 `;'). These records may be used for variables used for many 6076 options where declaring the initializer in a single option 6077 definition record, or duplicating it in many records, would be 6078 inappropriate, or for variables set in option handlers rather than 6079 referenced by `Var' properties. 6080 6081 * A variable record to define a variable used to store option 6082 information. These records have two fields: the string 6083 `TargetVariable', and a declaration of the type and name of the 6084 variable, optionally with an initializer (but without any trailing 6085 `;'). `TargetVariable' is a combination of `Variable' and 6086 `TargetSave' records in that the variable is defined in the 6087 `gcc_options' structure, but these variables are also stored in 6088 the `cl_target_option' structure. The variables are saved in the 6089 target save code and restored in the target restore code. 6090 6091 * A variable record to record any additional files that the 6092 `options.h' file should include. This is useful to provide 6093 enumeration or structure definitions needed for target variables. 6094 These records have two fields: the string `HeaderInclude' and the 6095 name of the include file. 6096 6097 * A variable record to record any additional files that the 6098 `options.c' or `options-save.c' file should include. This is 6099 useful to provide inline functions needed for target variables 6100 and/or `#ifdef' sequences to properly set up the initialization. 6101 These records have two fields: the string `SourceInclude' and the 6102 name of the include file. 6103 6104 * An enumeration record to define a set of strings that may be used 6105 as arguments to an option or options. These records have three 6106 fields: the string `Enum', a space-separated list of properties 6107 and help text used to describe the set of strings in `--help' 6108 output. Properties use the same format as option properties; the 6109 following are valid: 6110 `Name(NAME)' 6111 This property is required; NAME must be a name (suitable for 6112 use in C identifiers) used to identify the set of strings in 6113 `Enum' option properties. 6114 6115 `Type(TYPE)' 6116 This property is required; TYPE is the C type for variables 6117 set by options using this enumeration together with `Var'. 6118 6119 `UnknownError(MESSAGE)' 6120 The message MESSAGE will be used as an error message if the 6121 argument is invalid; for enumerations without `UnknownError', 6122 a generic error message is used. MESSAGE should contain a 6123 single `%qs' format, which will be used to format the invalid 6124 argument. 6125 6126 * An enumeration value record to define one of the strings in a set 6127 given in an `Enum' record. These records have two fields: the 6128 string `EnumValue' and a space-separated list of properties. 6129 Properties use the same format as option properties; the following 6130 are valid: 6131 `Enum(NAME)' 6132 This property is required; NAME says which `Enum' record this 6133 `EnumValue' record corresponds to. 6134 6135 `String(STRING)' 6136 This property is required; STRING is the string option 6137 argument being described by this record. 6138 6139 `Value(VALUE)' 6140 This property is required; it says what value (representable 6141 as `int') should be used for the given string. 6142 6143 `Canonical' 6144 This property is optional. If present, it says the present 6145 string is the canonical one among all those with the given 6146 value. Other strings yielding that value will be mapped to 6147 this one so specs do not need to handle them. 6148 6149 `DriverOnly' 6150 This property is optional. If present, the present string 6151 will only be accepted by the driver. This is used for cases 6152 such as `-march=native' that are processed by the driver so 6153 that `gcc -v' shows how the options chosen depended on the 6154 system on which the compiler was run. 6155 6156 * An option definition record. These records have the following 6157 fields: 6158 1. the name of the option, with the leading "-" removed 6159 6160 2. a space-separated list of option properties (*note Option 6161 properties::) 6162 6163 3. the help text to use for `--help' (omitted if the second field 6164 contains the `Undocumented' property). 6165 6166 By default, all options beginning with "f", "W" or "m" are 6167 implicitly assumed to take a "no-" form. This form should not be 6168 listed separately. If an option beginning with one of these 6169 letters does not have a "no-" form, you can use the 6170 `RejectNegative' property to reject it. 6171 6172 The help text is automatically line-wrapped before being displayed. 6173 Normally the name of the option is printed on the left-hand side of 6174 the output and the help text is printed on the right. However, if 6175 the help text contains a tab character, the text to the left of 6176 the tab is used instead of the option's name and the text to the 6177 right of the tab forms the help text. This allows you to 6178 elaborate on what type of argument the option takes. 6179 6180 * A target mask record. These records have one field of the form 6181 `Mask(X)'. The options-processing script will automatically 6182 allocate a bit in `target_flags' (*note Run-time Target::) for 6183 each mask name X and set the macro `MASK_X' to the appropriate 6184 bitmask. It will also declare a `TARGET_X' macro that has the 6185 value 1 when bit `MASK_X' is set and 0 otherwise. 6186 6187 They are primarily intended to declare target masks that are not 6188 associated with user options, either because these masks represent 6189 internal switches or because the options are not available on all 6190 configurations and yet the masks always need to be defined. 6191 6192 6193 File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 6194 6195 8.2 Option properties 6196 ===================== 6197 6198 The second field of an option record can specify any of the following 6199 properties. When an option takes an argument, it is enclosed in 6200 parentheses following the option property name. The parser that 6201 handles option files is quite simplistic, and will be tricked by any 6202 nested parentheses within the argument text itself; in this case, the 6203 entire option argument can be wrapped in curly braces within the 6204 parentheses to demarcate it, e.g.: 6205 6206 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 6207 6208 `Common' 6209 The option is available for all languages and targets. 6210 6211 `Target' 6212 The option is available for all languages but is target-specific. 6213 6214 `Driver' 6215 The option is handled by the compiler driver using code not shared 6216 with the compilers proper (`cc1' etc.). 6217 6218 `LANGUAGE' 6219 The option is available when compiling for the given language. 6220 6221 It is possible to specify several different languages for the same 6222 option. Each LANGUAGE must have been declared by an earlier 6223 `Language' record. *Note Option file format::. 6224 6225 `RejectDriver' 6226 The option is only handled by the compilers proper (`cc1' etc.) 6227 and should not be accepted by the driver. 6228 6229 `RejectNegative' 6230 The option does not have a "no-" form. All options beginning with 6231 "f", "W" or "m" are assumed to have a "no-" form unless this 6232 property is used. 6233 6234 `Negative(OTHERNAME)' 6235 The option will turn off another option OTHERNAME, which is the 6236 option name with the leading "-" removed. This chain action will 6237 propagate through the `Negative' property of the option to be 6238 turned off. 6239 6240 As a consequence, if you have a group of mutually-exclusive 6241 options, their `Negative' properties should form a circular chain. 6242 For example, if options `-A', `-B' and `-C' are mutually 6243 exclusive, their respective `Negative' properties should be 6244 `Negative(B)', `Negative(C)' and `Negative(A)'. 6245 6246 `Joined' 6247 `Separate' 6248 The option takes a mandatory argument. `Joined' indicates that 6249 the option and argument can be included in the same `argv' entry 6250 (as with `-mflush-func=NAME', for example). `Separate' indicates 6251 that the option and argument can be separate `argv' entries (as 6252 with `-o'). An option is allowed to have both of these properties. 6253 6254 `JoinedOrMissing' 6255 The option takes an optional argument. If the argument is given, 6256 it will be part of the same `argv' entry as the option itself. 6257 6258 This property cannot be used alongside `Joined' or `Separate'. 6259 6260 `MissingArgError(MESSAGE)' 6261 For an option marked `Joined' or `Separate', the message MESSAGE 6262 will be used as an error message if the mandatory argument is 6263 missing; for options without `MissingArgError', a generic error 6264 message is used. MESSAGE should contain a single `%qs' format, 6265 which will be used to format the name of the option passed. 6266 6267 `Args(N)' 6268 For an option marked `Separate', indicate that it takes N 6269 arguments. The default is 1. 6270 6271 `UInteger' 6272 The option's argument is a non-negative integer. The option parser 6273 will check and convert the argument before passing it to the 6274 relevant option handler. `UInteger' should also be used on 6275 options like `-falign-loops' where both `-falign-loops' and 6276 `-falign-loops'=N are supported to make sure the saved options are 6277 given a full integer. 6278 6279 `ToLower' 6280 The option's argument should be converted to lowercase as part of 6281 putting it in canonical form, and before comparing with the strings 6282 indicated by any `Enum' property. 6283 6284 `NoDriverArg' 6285 For an option marked `Separate', the option only takes an argument 6286 in the compiler proper, not in the driver. This is for 6287 compatibility with existing options that are used both directly and 6288 via `-Wp,'; new options should not have this property. 6289 6290 `Var(VAR)' 6291 The state of this option should be stored in variable VAR 6292 (actually a macro for `global_options.x_VAR'). The way that the 6293 state is stored depends on the type of option: 6294 6295 * If the option uses the `Mask' or `InverseMask' properties, 6296 VAR is the integer variable that contains the mask. 6297 6298 * If the option is a normal on/off switch, VAR is an integer 6299 variable that is nonzero when the option is enabled. The 6300 options parser will set the variable to 1 when the positive 6301 form of the option is used and 0 when the "no-" form is used. 6302 6303 * If the option takes an argument and has the `UInteger' 6304 property, VAR is an integer variable that stores the value of 6305 the argument. 6306 6307 * If the option takes an argument and has the `Enum' property, 6308 VAR is a variable (type given in the `Type' property of the 6309 `Enum' record whose `Name' property has the same argument as 6310 the `Enum' property of this option) that stores the value of 6311 the argument. 6312 6313 * If the option has the `Defer' property, VAR is a pointer to a 6314 `VEC(cl_deferred_option,heap)' that stores the option for 6315 later processing. (VAR is declared with type `void *' and 6316 needs to be cast to `VEC(cl_deferred_option,heap)' before 6317 use.) 6318 6319 * Otherwise, if the option takes an argument, VAR is a pointer 6320 to the argument string. The pointer will be null if the 6321 argument is optional and wasn't given. 6322 6323 The option-processing script will usually zero-initialize VAR. 6324 You can modify this behavior using `Init'. 6325 6326 `Var(VAR, SET)' 6327 The option controls an integer variable VAR and is active when VAR 6328 equals SET. The option parser will set VAR to SET when the 6329 positive form of the option is used and `!SET' when the "no-" form 6330 is used. 6331 6332 VAR is declared in the same way as for the single-argument form 6333 described above. 6334 6335 `Init(VALUE)' 6336 The variable specified by the `Var' property should be statically 6337 initialized to VALUE. If more than one option using the same 6338 variable specifies `Init', all must specify the same initializer. 6339 6340 `Mask(NAME)' 6341 The option is associated with a bit in the `target_flags' variable 6342 (*note Run-time Target::) and is active when that bit is set. You 6343 may also specify `Var' to select a variable other than 6344 `target_flags'. 6345 6346 The options-processing script will automatically allocate a unique 6347 bit for the option. If the option is attached to `target_flags', 6348 the script will set the macro `MASK_NAME' to the appropriate 6349 bitmask. It will also declare a `TARGET_NAME' macro that has the 6350 value 1 when the option is active and 0 otherwise. If you use 6351 `Var' to attach the option to a different variable, the bitmask 6352 macro with be called `OPTION_MASK_NAME'. 6353 6354 `InverseMask(OTHERNAME)' 6355 `InverseMask(OTHERNAME, THISNAME)' 6356 The option is the inverse of another option that has the 6357 `Mask(OTHERNAME)' property. If THISNAME is given, the 6358 options-processing script will declare a `TARGET_THISNAME' macro 6359 that is 1 when the option is active and 0 otherwise. 6360 6361 `Enum(NAME)' 6362 The option's argument is a string from the set of strings 6363 associated with the corresponding `Enum' record. The string is 6364 checked and converted to the integer specified in the corresponding 6365 `EnumValue' record before being passed to option handlers. 6366 6367 `Defer' 6368 The option should be stored in a vector, specified with `Var', for 6369 later processing. 6370 6371 `Alias(OPT)' 6372 `Alias(OPT, ARG)' 6373 `Alias(OPT, POSARG, NEGARG)' 6374 The option is an alias for `-OPT' (or the negative form of that 6375 option, depending on `NegativeAlias'). In the first form, any 6376 argument passed to the alias is considered to be passed to `-OPT', 6377 and `-OPT' is considered to be negated if the alias is used in 6378 negated form. In the second form, the alias may not be negated or 6379 have an argument, and POSARG is considered to be passed as an 6380 argument to `-OPT'. In the third form, the alias may not have an 6381 argument, if the alias is used in the positive form then POSARG is 6382 considered to be passed to `-OPT', and if the alias is used in the 6383 negative form then NEGARG is considered to be passed to `-OPT'. 6384 6385 Aliases should not specify `Var' or `Mask' or `UInteger'. Aliases 6386 should normally specify the same languages as the target of the 6387 alias; the flags on the target will be used to determine any 6388 diagnostic for use of an option for the wrong language, while 6389 those on the alias will be used to identify what command-line text 6390 is the option and what text is any argument to that option. 6391 6392 When an `Alias' definition is used for an option, driver specs do 6393 not need to handle it and no `OPT_' enumeration value is defined 6394 for it; only the canonical form of the option will be seen in those 6395 places. 6396 6397 `NegativeAlias' 6398 For an option marked with `Alias(OPT)', the option is considered 6399 to be an alias for the positive form of `-OPT' if negated and for 6400 the negative form of `-OPT' if not negated. `NegativeAlias' may 6401 not be used with the forms of `Alias' taking more than one 6402 argument. 6403 6404 `Ignore' 6405 This option is ignored apart from printing any warning specified 6406 using `Warn'. The option will not be seen by specs and no `OPT_' 6407 enumeration value is defined for it. 6408 6409 `SeparateAlias' 6410 For an option marked with `Joined', `Separate' and `Alias', the 6411 option only acts as an alias when passed a separate argument; with 6412 a joined argument it acts as a normal option, with an `OPT_' 6413 enumeration value. This is for compatibility with the Java `-d' 6414 option and should not be used for new options. 6415 6416 `Warn(MESSAGE)' 6417 If this option is used, output the warning MESSAGE. MESSAGE is a 6418 format string, either taking a single operand with a `%qs' format 6419 which is the option name, or not taking any operands, which is 6420 passed to the `warning' function. If an alias is marked `Warn', 6421 the target of the alias must not also be marked `Warn'. 6422 6423 `Report' 6424 The state of the option should be printed by `-fverbose-asm'. 6425 6426 `Warning' 6427 This is a warning option and should be shown as such in `--help' 6428 output. This flag does not currently affect anything other than 6429 `--help'. 6430 6431 `Optimization' 6432 This is an optimization option. It should be shown as such in 6433 `--help' output, and any associated variable named using `Var' 6434 should be saved and restored when the optimization level is 6435 changed with `optimize' attributes. 6436 6437 `Undocumented' 6438 The option is deliberately missing documentation and should not be 6439 included in the `--help' output. 6440 6441 `Condition(COND)' 6442 The option should only be accepted if preprocessor condition COND 6443 is true. Note that any C declarations associated with the option 6444 will be present even if COND is false; COND simply controls 6445 whether the option is accepted and whether it is printed in the 6446 `--help' output. 6447 6448 `Save' 6449 Build the `cl_target_option' structure to hold a copy of the 6450 option, add the functions `cl_target_option_save' and 6451 `cl_target_option_restore' to save and restore the options. 6452 6453 `SetByCombined' 6454 The option may also be set by a combined option such as 6455 `-ffast-math'. This causes the `gcc_options' struct to have a 6456 field `frontend_set_NAME', where `NAME' is the name of the field 6457 holding the value of this option (without the leading `x_'). This 6458 gives the front end a way to indicate that the value has been set 6459 explicitly and should not be changed by the combined option. For 6460 example, some front ends use this to prevent `-ffast-math' and 6461 `-fno-fast-math' from changing the value of `-fmath-errno' for 6462 languages that do not use `errno'. 6463 6464 `EnabledBy(OPT)' 6465 `EnabledBy(OPT && OPT2)' 6466 If not explicitly set, the option is set to the value of `-OPT'. 6467 The second form specifies that the option is only set if both OPT 6468 and OPT2 are set. 6469 6470 `LangEnabledBy(LANGUAGE, OPT)' 6471 `LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)' 6472 When compiling for the given language, the option is set to the 6473 value of `-OPT', if not explicitly set. In the second form, if OPT 6474 is used in the positive form then POSARG is considered to be 6475 passed to the option, and if OPT is used in the negative form then 6476 NEGARG is considered to be passed to the option. It is possible 6477 to specify several different languages. Each LANGUAGE must have 6478 been declared by an earlier `Language' record. *Note Option file 6479 format::. 6480 6481 `NoDWARFRecord' 6482 The option is omitted from the producer string written by 6483 `-grecord-gcc-switches'. 6484 6485 6486 File: gccint.info, Node: Passes, Next: GENERIC, Prev: Options, Up: Top 6487 6488 9 Passes and Files of the Compiler 6489 ********************************** 6490 6491 This chapter is dedicated to giving an overview of the optimization and 6492 code generation passes of the compiler. In the process, it describes 6493 some of the language front end interface, though this description is no 6494 where near complete. 6495 6496 * Menu: 6497 6498 * Parsing pass:: The language front end turns text into bits. 6499 * Gimplification pass:: The bits are turned into something we can optimize. 6500 * Pass manager:: Sequencing the optimization passes. 6501 * Tree SSA passes:: Optimizations on a high-level representation. 6502 * RTL passes:: Optimizations on a low-level representation. 6503 6504 6505 File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes 6506 6507 9.1 Parsing pass 6508 ================ 6509 6510 The language front end is invoked only once, via 6511 `lang_hooks.parse_file', to parse the entire input. The language front 6512 end may use any intermediate language representation deemed 6513 appropriate. The C front end uses GENERIC trees (*note GENERIC::), plus 6514 a double handful of language specific tree codes defined in 6515 `c-common.def'. The Fortran front end uses a completely different 6516 private representation. 6517 6518 At some point the front end must translate the representation used in 6519 the front end to a representation understood by the language-independent 6520 portions of the compiler. Current practice takes one of two forms. 6521 The C front end manually invokes the gimplifier (*note GIMPLE::) on 6522 each function, and uses the gimplifier callbacks to convert the 6523 language-specific tree nodes directly to GIMPLE before passing the 6524 function off to be compiled. The Fortran front end converts from a 6525 private representation to GENERIC, which is later lowered to GIMPLE 6526 when the function is compiled. Which route to choose probably depends 6527 on how well GENERIC (plus extensions) can be made to match up with the 6528 source language and necessary parsing data structures. 6529 6530 BUG: Gimplification must occur before nested function lowering, and 6531 nested function lowering must be done by the front end before passing 6532 the data off to cgraph. 6533 6534 TODO: Cgraph should control nested function lowering. It would only 6535 be invoked when it is certain that the outer-most function is used. 6536 6537 TODO: Cgraph needs a gimplify_function callback. It should be invoked 6538 when (1) it is certain that the function is used, (2) warning flags 6539 specified by the user require some amount of compilation in order to 6540 honor, (3) the language indicates that semantic analysis is not 6541 complete until gimplification occurs. Hum... this sounds overly 6542 complicated. Perhaps we should just have the front end gimplify 6543 always; in most cases it's only one function call. 6544 6545 The front end needs to pass all function definitions and top level 6546 declarations off to the middle-end so that they can be compiled and 6547 emitted to the object file. For a simple procedural language, it is 6548 usually most convenient to do this as each top level declaration or 6549 definition is seen. There is also a distinction to be made between 6550 generating functional code and generating complete debug information. 6551 The only thing that is absolutely required for functional code is that 6552 function and data _definitions_ be passed to the middle-end. For 6553 complete debug information, function, data and type declarations should 6554 all be passed as well. 6555 6556 In any case, the front end needs each complete top-level function or 6557 data declaration, and each data definition should be passed to 6558 `rest_of_decl_compilation'. Each complete type definition should be 6559 passed to `rest_of_type_compilation'. Each function definition should 6560 be passed to `cgraph_finalize_function'. 6561 6562 TODO: I know rest_of_compilation currently has all sorts of RTL 6563 generation semantics. I plan to move all code generation bits (both 6564 Tree and RTL) to compile_function. Should we hide cgraph from the 6565 front ends and move back to rest_of_compilation as the official 6566 interface? Possibly we should rename all three interfaces such that 6567 the names match in some meaningful way and that is more descriptive 6568 than "rest_of". 6569 6570 The middle-end will, at its option, emit the function and data 6571 definitions immediately or queue them for later processing. 6572 6573 6574 File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes 6575 6576 9.2 Gimplification pass 6577 ======================= 6578 6579 "Gimplification" is a whimsical term for the process of converting the 6580 intermediate representation of a function into the GIMPLE language 6581 (*note GIMPLE::). The term stuck, and so words like "gimplification", 6582 "gimplify", "gimplifier" and the like are sprinkled throughout this 6583 section of code. 6584 6585 While a front end may certainly choose to generate GIMPLE directly if 6586 it chooses, this can be a moderately complex process unless the 6587 intermediate language used by the front end is already fairly simple. 6588 Usually it is easier to generate GENERIC trees plus extensions and let 6589 the language-independent gimplifier do most of the work. 6590 6591 The main entry point to this pass is `gimplify_function_tree' located 6592 in `gimplify.c'. From here we process the entire function gimplifying 6593 each statement in turn. The main workhorse for this pass is 6594 `gimplify_expr'. Approximately everything passes through here at least 6595 once, and it is from here that we invoke the `lang_hooks.gimplify_expr' 6596 callback. 6597 6598 The callback should examine the expression in question and return 6599 `GS_UNHANDLED' if the expression is not a language specific construct 6600 that requires attention. Otherwise it should alter the expression in 6601 some way to such that forward progress is made toward producing valid 6602 GIMPLE. If the callback is certain that the transformation is complete 6603 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'. 6604 Otherwise it should return `GS_OK', which will cause the expression to 6605 be processed again. If the callback encounters an error during the 6606 transformation (because the front end is relying on the gimplification 6607 process to finish semantic checks), it should return `GS_ERROR'. 6608 6609 6610 File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes 6611 6612 9.3 Pass manager 6613 ================ 6614 6615 The pass manager is located in `passes.c', `tree-optimize.c' and 6616 `tree-pass.h'. Its job is to run all of the individual passes in the 6617 correct order, and take care of standard bookkeeping that applies to 6618 every pass. 6619 6620 The theory of operation is that each pass defines a structure that 6621 represents everything we need to know about that pass--when it should 6622 be run, how it should be run, what intermediate language form or 6623 on-the-side data structures it needs. We register the pass to be run 6624 in some particular order, and the pass manager arranges for everything 6625 to happen in the correct order. 6626 6627 The actuality doesn't completely live up to the theory at present. 6628 Command-line switches and `timevar_id_t' enumerations must still be 6629 defined elsewhere. The pass manager validates constraints but does not 6630 attempt to (re-)generate data structures or lower intermediate language 6631 form based on the requirements of the next pass. Nevertheless, what is 6632 present is useful, and a far sight better than nothing at all. 6633 6634 Each pass should have a unique name. Each pass may have its own dump 6635 file (for GCC debugging purposes). Passes with a name starting with a 6636 star do not dump anything. Sometimes passes are supposed to share a 6637 dump file / option name. To still give these unique names, you can use 6638 a prefix that is delimited by a space from the part that is used for 6639 the dump file / option name. E.g. When the pass name is "ud dce", the 6640 name used for dump file/options is "dce". 6641 6642 TODO: describe the global variables set up by the pass manager, and a 6643 brief description of how a new pass should use it. I need to look at 6644 what info RTL passes use first... 6645 6646 6647 File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 6648 6649 9.4 Tree SSA passes 6650 =================== 6651 6652 The following briefly describes the Tree optimization passes that are 6653 run after gimplification and what source files they are located in. 6654 6655 * Remove useless statements 6656 6657 This pass is an extremely simple sweep across the gimple code in 6658 which we identify obviously dead code and remove it. Here we do 6659 things like simplify `if' statements with constant conditions, 6660 remove exception handling constructs surrounding code that 6661 obviously cannot throw, remove lexical bindings that contain no 6662 variables, and other assorted simplistic cleanups. The idea is to 6663 get rid of the obvious stuff quickly rather than wait until later 6664 when it's more work to get rid of it. This pass is located in 6665 `tree-cfg.c' and described by `pass_remove_useless_stmts'. 6666 6667 * Mudflap declaration registration 6668 6669 If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize 6670 Options.) is enabled, we generate code to register some variable 6671 declarations with the mudflap runtime. Specifically, the runtime 6672 tracks the lifetimes of those variable declarations that have 6673 their addresses taken, or whose bounds are unknown at compile time 6674 (`extern'). This pass generates new exception handling constructs 6675 (`try'/`finally'), and so must run before those are lowered. In 6676 addition, the pass enqueues declarations of static variables whose 6677 lifetimes extend to the entire program. The pass is located in 6678 `tree-mudflap.c' and is described by `pass_mudflap_1'. 6679 6680 * OpenMP lowering 6681 6682 If OpenMP generation (`-fopenmp') is enabled, this pass lowers 6683 OpenMP constructs into GIMPLE. 6684 6685 Lowering of OpenMP constructs involves creating replacement 6686 expressions for local variables that have been mapped using data 6687 sharing clauses, exposing the control flow of most synchronization 6688 directives and adding region markers to facilitate the creation of 6689 the control flow graph. The pass is located in `omp-low.c' and is 6690 described by `pass_lower_omp'. 6691 6692 * OpenMP expansion 6693 6694 If OpenMP generation (`-fopenmp') is enabled, this pass expands 6695 parallel regions into their own functions to be invoked by the 6696 thread library. The pass is located in `omp-low.c' and is 6697 described by `pass_expand_omp'. 6698 6699 * Lower control flow 6700 6701 This pass flattens `if' statements (`COND_EXPR') and moves lexical 6702 bindings (`BIND_EXPR') out of line. After this pass, all `if' 6703 statements will have exactly two `goto' statements in its `then' 6704 and `else' arms. Lexical binding information for each statement 6705 will be found in `TREE_BLOCK' rather than being inferred from its 6706 position under a `BIND_EXPR'. This pass is found in 6707 `gimple-low.c' and is described by `pass_lower_cf'. 6708 6709 * Lower exception handling control flow 6710 6711 This pass decomposes high-level exception handling constructs 6712 (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that 6713 explicitly represents the control flow involved. After this pass, 6714 `lookup_stmt_eh_region' will return a non-negative number for any 6715 statement that may have EH control flow semantics; examine 6716 `tree_can_throw_internal' or `tree_can_throw_external' for exact 6717 semantics. Exact control flow may be extracted from 6718 `foreach_reachable_handler'. The EH region nesting tree is defined 6719 in `except.h' and built in `except.c'. The lowering pass itself 6720 is in `tree-eh.c' and is described by `pass_lower_eh'. 6721 6722 * Build the control flow graph 6723 6724 This pass decomposes a function into basic blocks and creates all 6725 of the edges that connect them. It is located in `tree-cfg.c' and 6726 is described by `pass_build_cfg'. 6727 6728 * Find all referenced variables 6729 6730 This pass walks the entire function and collects an array of all 6731 variables referenced in the function, `referenced_vars'. The 6732 index at which a variable is found in the array is used as a UID 6733 for the variable within this function. This data is needed by the 6734 SSA rewriting routines. The pass is located in `tree-dfa.c' and 6735 is described by `pass_referenced_vars'. 6736 6737 * Enter static single assignment form 6738 6739 This pass rewrites the function such that it is in SSA form. After 6740 this pass, all `is_gimple_reg' variables will be referenced by 6741 `SSA_NAME', and all occurrences of other variables will be 6742 annotated with `VDEFS' and `VUSES'; PHI nodes will have been 6743 inserted as necessary for each basic block. This pass is located 6744 in `tree-ssa.c' and is described by `pass_build_ssa'. 6745 6746 * Warn for uninitialized variables 6747 6748 This pass scans the function for uses of `SSA_NAME's that are fed 6749 by default definition. For non-parameter variables, such uses are 6750 uninitialized. The pass is run twice, before and after 6751 optimization (if turned on). In the first pass we only warn for 6752 uses that are positively uninitialized; in the second pass we warn 6753 for uses that are possibly uninitialized. The pass is located in 6754 `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and 6755 `pass_late_warn_uninitialized'. 6756 6757 * Dead code elimination 6758 6759 This pass scans the function for statements without side effects 6760 whose result is unused. It does not do memory life analysis, so 6761 any value that is stored in memory is considered used. The pass 6762 is run multiple times throughout the optimization process. It is 6763 located in `tree-ssa-dce.c' and is described by `pass_dce'. 6764 6765 * Dominator optimizations 6766 6767 This pass performs trivial dominator-based copy and constant 6768 propagation, expression simplification, and jump threading. It is 6769 run multiple times throughout the optimization process. It is 6770 located in `tree-ssa-dom.c' and is described by `pass_dominator'. 6771 6772 * Forward propagation of single-use variables 6773 6774 This pass attempts to remove redundant computation by substituting 6775 variables that are used once into the expression that uses them and 6776 seeing if the result can be simplified. It is located in 6777 `tree-ssa-forwprop.c' and is described by `pass_forwprop'. 6778 6779 * Copy Renaming 6780 6781 This pass attempts to change the name of compiler temporaries 6782 involved in copy operations such that SSA->normal can coalesce the 6783 copy away. When compiler temporaries are copies of user 6784 variables, it also renames the compiler temporary to the user 6785 variable resulting in better use of user symbols. It is located 6786 in `tree-ssa-copyrename.c' and is described by `pass_copyrename'. 6787 6788 * PHI node optimizations 6789 6790 This pass recognizes forms of PHI inputs that can be represented as 6791 conditional expressions and rewrites them into straight line code. 6792 It is located in `tree-ssa-phiopt.c' and is described by 6793 `pass_phiopt'. 6794 6795 * May-alias optimization 6796 6797 This pass performs a flow sensitive SSA-based points-to analysis. 6798 The resulting may-alias, must-alias, and escape analysis 6799 information is used to promote variables from in-memory 6800 addressable objects to non-aliased variables that can be renamed 6801 into SSA form. We also update the `VDEF'/`VUSE' memory tags for 6802 non-renameable aggregates so that we get fewer false kills. The 6803 pass is located in `tree-ssa-alias.c' and is described by 6804 `pass_may_alias'. 6805 6806 Interprocedural points-to information is located in 6807 `tree-ssa-structalias.c' and described by `pass_ipa_pta'. 6808 6809 * Profiling 6810 6811 This pass rewrites the function in order to collect runtime block 6812 and value profiling data. Such data may be fed back into the 6813 compiler on a subsequent run so as to allow optimization based on 6814 expected execution frequencies. The pass is located in 6815 `predict.c' and is described by `pass_profile'. 6816 6817 * Lower complex arithmetic 6818 6819 This pass rewrites complex arithmetic operations into their 6820 component scalar arithmetic operations. The pass is located in 6821 `tree-complex.c' and is described by `pass_lower_complex'. 6822 6823 * Scalar replacement of aggregates 6824 6825 This pass rewrites suitable non-aliased local aggregate variables 6826 into a set of scalar variables. The resulting scalar variables are 6827 rewritten into SSA form, which allows subsequent optimization 6828 passes to do a significantly better job with them. The pass is 6829 located in `tree-sra.c' and is described by `pass_sra'. 6830 6831 * Dead store elimination 6832 6833 This pass eliminates stores to memory that are subsequently 6834 overwritten by another store, without any intervening loads. The 6835 pass is located in `tree-ssa-dse.c' and is described by `pass_dse'. 6836 6837 * Tail recursion elimination 6838 6839 This pass transforms tail recursion into a loop. It is located in 6840 `tree-tailcall.c' and is described by `pass_tail_recursion'. 6841 6842 * Forward store motion 6843 6844 This pass sinks stores and assignments down the flowgraph closer 6845 to their use point. The pass is located in `tree-ssa-sink.c' and 6846 is described by `pass_sink_code'. 6847 6848 * Partial redundancy elimination 6849 6850 This pass eliminates partially redundant computations, as well as 6851 performing load motion. The pass is located in `tree-ssa-pre.c' 6852 and is described by `pass_pre'. 6853 6854 Just before partial redundancy elimination, if 6855 `-funsafe-math-optimizations' is on, GCC tries to convert 6856 divisions to multiplications by the reciprocal. The pass is 6857 located in `tree-ssa-math-opts.c' and is described by 6858 `pass_cse_reciprocal'. 6859 6860 * Full redundancy elimination 6861 6862 This is a simpler form of PRE that only eliminates redundancies 6863 that occur on all paths. It is located in `tree-ssa-pre.c' and 6864 described by `pass_fre'. 6865 6866 * Loop optimization 6867 6868 The main driver of the pass is placed in `tree-ssa-loop.c' and 6869 described by `pass_loop'. 6870 6871 The optimizations performed by this pass are: 6872 6873 Loop invariant motion. This pass moves only invariants that would 6874 be hard to handle on RTL level (function calls, operations that 6875 expand to nontrivial sequences of insns). With `-funswitch-loops' 6876 it also moves operands of conditions that are invariant out of the 6877 loop, so that we can use just trivial invariantness analysis in 6878 loop unswitching. The pass also includes store motion. The pass 6879 is implemented in `tree-ssa-loop-im.c'. 6880 6881 Canonical induction variable creation. This pass creates a simple 6882 counter for number of iterations of the loop and replaces the exit 6883 condition of the loop using it, in case when a complicated 6884 analysis is necessary to determine the number of iterations. 6885 Later optimizations then may determine the number easily. The 6886 pass is implemented in `tree-ssa-loop-ivcanon.c'. 6887 6888 Induction variable optimizations. This pass performs standard 6889 induction variable optimizations, including strength reduction, 6890 induction variable merging and induction variable elimination. 6891 The pass is implemented in `tree-ssa-loop-ivopts.c'. 6892 6893 Loop unswitching. This pass moves the conditional jumps that are 6894 invariant out of the loops. To achieve this, a duplicate of the 6895 loop is created for each possible outcome of conditional jump(s). 6896 The pass is implemented in `tree-ssa-loop-unswitch.c'. This pass 6897 should eventually replace the RTL level loop unswitching in 6898 `loop-unswitch.c', but currently the RTL level pass is not 6899 completely redundant yet due to deficiencies in tree level alias 6900 analysis. 6901 6902 The optimizations also use various utility functions contained in 6903 `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and 6904 `cfgloopmanip.c'. 6905 6906 Vectorization. This pass transforms loops to operate on vector 6907 types instead of scalar types. Data parallelism across loop 6908 iterations is exploited to group data elements from consecutive 6909 iterations into a vector and operate on them in parallel. 6910 Depending on available target support the loop is conceptually 6911 unrolled by a factor `VF' (vectorization factor), which is the 6912 number of elements operated upon in parallel in each iteration, 6913 and the `VF' copies of each scalar operation are fused to form a 6914 vector operation. Additional loop transformations such as peeling 6915 and versioning may take place to align the number of iterations, 6916 and to align the memory accesses in the loop. The pass is 6917 implemented in `tree-vectorizer.c' (the main driver), 6918 `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific 6919 parts and general loop utilities), `tree-vect-slp' (loop-aware SLP 6920 functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'. 6921 Analysis of data references is in `tree-data-ref.c'. 6922 6923 SLP Vectorization. This pass performs vectorization of 6924 straight-line code. The pass is implemented in `tree-vectorizer.c' 6925 (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and 6926 `tree-vect-data-refs.c'. 6927 6928 Autoparallelization. This pass splits the loop iteration space to 6929 run into several threads. The pass is implemented in 6930 `tree-parloops.c'. 6931 6932 Graphite is a loop transformation framework based on the polyhedral 6933 model. Graphite stands for Gimple Represented as Polyhedra. The 6934 internals of this infrastructure are documented in 6935 `http://gcc.gnu.org/wiki/Graphite'. The passes working on this 6936 representation are implemented in the various `graphite-*' files. 6937 6938 * Tree level if-conversion for vectorizer 6939 6940 This pass applies if-conversion to simple loops to help vectorizer. 6941 We identify if convertible loops, if-convert statements and merge 6942 basic blocks in one big block. The idea is to present loop in such 6943 form so that vectorizer can have one to one mapping between 6944 statements and available vector operations. This pass is located 6945 in `tree-if-conv.c' and is described by `pass_if_conversion'. 6946 6947 * Conditional constant propagation 6948 6949 This pass relaxes a lattice of values in order to identify those 6950 that must be constant even in the presence of conditional branches. 6951 The pass is located in `tree-ssa-ccp.c' and is described by 6952 `pass_ccp'. 6953 6954 A related pass that works on memory loads and stores, and not just 6955 register values, is located in `tree-ssa-ccp.c' and described by 6956 `pass_store_ccp'. 6957 6958 * Conditional copy propagation 6959 6960 This is similar to constant propagation but the lattice of values 6961 is the "copy-of" relation. It eliminates redundant copies from the 6962 code. The pass is located in `tree-ssa-copy.c' and described by 6963 `pass_copy_prop'. 6964 6965 A related pass that works on memory copies, and not just register 6966 copies, is located in `tree-ssa-copy.c' and described by 6967 `pass_store_copy_prop'. 6968 6969 * Value range propagation 6970 6971 This transformation is similar to constant propagation but instead 6972 of propagating single constant values, it propagates known value 6973 ranges. The implementation is based on Patterson's range 6974 propagation algorithm (Accurate Static Branch Prediction by Value 6975 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 6976 Patterson's algorithm, this implementation does not propagate 6977 branch probabilities nor it uses more than a single range per SSA 6978 name. This means that the current implementation cannot be used 6979 for branch prediction (though adapting it would not be difficult). 6980 The pass is located in `tree-vrp.c' and is described by `pass_vrp'. 6981 6982 * Folding built-in functions 6983 6984 This pass simplifies built-in functions, as applicable, with 6985 constant arguments or with inferable string lengths. It is 6986 located in `tree-ssa-ccp.c' and is described by 6987 `pass_fold_builtins'. 6988 6989 * Split critical edges 6990 6991 This pass identifies critical edges and inserts empty basic blocks 6992 such that the edge is no longer critical. The pass is located in 6993 `tree-cfg.c' and is described by `pass_split_crit_edges'. 6994 6995 * Control dependence dead code elimination 6996 6997 This pass is a stronger form of dead code elimination that can 6998 eliminate unnecessary control flow statements. It is located in 6999 `tree-ssa-dce.c' and is described by `pass_cd_dce'. 7000 7001 * Tail call elimination 7002 7003 This pass identifies function calls that may be rewritten into 7004 jumps. No code transformation is actually applied here, but the 7005 data and control flow problem is solved. The code transformation 7006 requires target support, and so is delayed until RTL. In the 7007 meantime `CALL_EXPR_TAILCALL' is set indicating the possibility. 7008 The pass is located in `tree-tailcall.c' and is described by 7009 `pass_tail_calls'. The RTL transformation is handled by 7010 `fixup_tail_calls' in `calls.c'. 7011 7012 * Warn for function return without value 7013 7014 For non-void functions, this pass locates return statements that do 7015 not specify a value and issues a warning. Such a statement may 7016 have been injected by falling off the end of the function. This 7017 pass is run last so that we have as much time as possible to prove 7018 that the statement is not reachable. It is located in 7019 `tree-cfg.c' and is described by `pass_warn_function_return'. 7020 7021 * Mudflap statement annotation 7022 7023 If mudflap is enabled, we rewrite some memory accesses with code to 7024 validate that the memory access is correct. In particular, 7025 expressions involving pointer dereferences (`INDIRECT_REF', 7026 `ARRAY_REF', etc.) are replaced by code that checks the selected 7027 address range against the mudflap runtime's database of valid 7028 regions. This check includes an inline lookup into a 7029 direct-mapped cache, based on shift/mask operations of the pointer 7030 value, with a fallback function call into the runtime. The pass 7031 is located in `tree-mudflap.c' and is described by 7032 `pass_mudflap_2'. 7033 7034 * Leave static single assignment form 7035 7036 This pass rewrites the function such that it is in normal form. At 7037 the same time, we eliminate as many single-use temporaries as 7038 possible, so the intermediate language is no longer GIMPLE, but 7039 GENERIC. The pass is located in `tree-outof-ssa.c' and is 7040 described by `pass_del_ssa'. 7041 7042 * Merge PHI nodes that feed into one another 7043 7044 This is part of the CFG cleanup passes. It attempts to join PHI 7045 nodes from a forwarder CFG block into another block with PHI 7046 nodes. The pass is located in `tree-cfgcleanup.c' and is 7047 described by `pass_merge_phi'. 7048 7049 * Return value optimization 7050 7051 If a function always returns the same local variable, and that 7052 local variable is an aggregate type, then the variable is replaced 7053 with the return value for the function (i.e., the function's 7054 DECL_RESULT). This is equivalent to the C++ named return value 7055 optimization applied to GIMPLE. The pass is located in 7056 `tree-nrv.c' and is described by `pass_nrv'. 7057 7058 * Return slot optimization 7059 7060 If a function returns a memory object and is called as `var = 7061 foo()', this pass tries to change the call so that the address of 7062 `var' is sent to the caller to avoid an extra memory copy. This 7063 pass is located in `tree-nrv.c' and is described by 7064 `pass_return_slot'. 7065 7066 * Optimize calls to `__builtin_object_size' 7067 7068 This is a propagation pass similar to CCP that tries to remove 7069 calls to `__builtin_object_size' when the size of the object can be 7070 computed at compile-time. This pass is located in 7071 `tree-object-size.c' and is described by `pass_object_sizes'. 7072 7073 * Loop invariant motion 7074 7075 This pass removes expensive loop-invariant computations out of 7076 loops. The pass is located in `tree-ssa-loop.c' and described by 7077 `pass_lim'. 7078 7079 * Loop nest optimizations 7080 7081 This is a family of loop transformations that works on loop nests. 7082 It includes loop interchange, scaling, skewing and reversal and 7083 they are all geared to the optimization of data locality in array 7084 traversals and the removal of dependencies that hamper 7085 optimizations such as loop parallelization and vectorization. The 7086 pass is located in `tree-loop-linear.c' and described by 7087 `pass_linear_transform'. 7088 7089 * Removal of empty loops 7090 7091 This pass removes loops with no code in them. The pass is located 7092 in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'. 7093 7094 * Unrolling of small loops 7095 7096 This pass completely unrolls loops with few iterations. The pass 7097 is located in `tree-ssa-loop-ivcanon.c' and described by 7098 `pass_complete_unroll'. 7099 7100 * Predictive commoning 7101 7102 This pass makes the code reuse the computations from the previous 7103 iterations of the loops, especially loads and stores to memory. 7104 It does so by storing the values of these computations to a bank 7105 of temporary variables that are rotated at the end of loop. To 7106 avoid the need for this rotation, the loop is then unrolled and 7107 the copies of the loop body are rewritten to use the appropriate 7108 version of the temporary variable. This pass is located in 7109 `tree-predcom.c' and described by `pass_predcom'. 7110 7111 * Array prefetching 7112 7113 This pass issues prefetch instructions for array references inside 7114 loops. The pass is located in `tree-ssa-loop-prefetch.c' and 7115 described by `pass_loop_prefetch'. 7116 7117 * Reassociation 7118 7119 This pass rewrites arithmetic expressions to enable optimizations 7120 that operate on them, like redundancy elimination and 7121 vectorization. The pass is located in `tree-ssa-reassoc.c' and 7122 described by `pass_reassoc'. 7123 7124 * Optimization of `stdarg' functions 7125 7126 This pass tries to avoid the saving of register arguments into the 7127 stack on entry to `stdarg' functions. If the function doesn't use 7128 any `va_start' macros, no registers need to be saved. If 7129 `va_start' macros are used, the `va_list' variables don't escape 7130 the function, it is only necessary to save registers that will be 7131 used in `va_arg' macros. For instance, if `va_arg' is only used 7132 with integral types in the function, floating point registers 7133 don't need to be saved. This pass is located in `tree-stdarg.c' 7134 and described by `pass_stdarg'. 7135 7136 7137 7138 File: gccint.info, Node: RTL passes, Prev: Tree SSA passes, Up: Passes 7139 7140 9.5 RTL passes 7141 ============== 7142 7143 The following briefly describes the RTL generation and optimization 7144 passes that are run after the Tree optimization passes. 7145 7146 * RTL generation 7147 7148 The source files for RTL generation include `stmt.c', `calls.c', 7149 `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and 7150 `emit-rtl.c'. Also, the file `insn-emit.c', generated from the 7151 machine description by the program `genemit', is used in this 7152 pass. The header file `expr.h' is used for communication within 7153 this pass. 7154 7155 The header files `insn-flags.h' and `insn-codes.h', generated from 7156 the machine description by the programs `genflags' and `gencodes', 7157 tell this pass which standard names are available for use and 7158 which patterns correspond to them. 7159 7160 * Generation of exception landing pads 7161 7162 This pass generates the glue that handles communication between the 7163 exception handling library routines and the exception handlers 7164 within the function. Entry points in the function that are 7165 invoked by the exception handling library are called "landing 7166 pads". The code for this pass is located in `except.c'. 7167 7168 * Control flow graph cleanup 7169 7170 This pass removes unreachable code, simplifies jumps to next, 7171 jumps to jump, jumps across jumps, etc. The pass is run multiple 7172 times. For historical reasons, it is occasionally referred to as 7173 the "jump optimization pass". The bulk of the code for this pass 7174 is in `cfgcleanup.c', and there are support routines in `cfgrtl.c' 7175 and `jump.c'. 7176 7177 * Forward propagation of single-def values 7178 7179 This pass attempts to remove redundant computation by substituting 7180 variables that come from a single definition, and seeing if the 7181 result can be simplified. It performs copy propagation and 7182 addressing mode selection. The pass is run twice, with values 7183 being propagated into loops only on the second run. The code is 7184 located in `fwprop.c'. 7185 7186 * Common subexpression elimination 7187 7188 This pass removes redundant computation within basic blocks, and 7189 optimizes addressing modes based on cost. The pass is run twice. 7190 The code for this pass is located in `cse.c'. 7191 7192 * Global common subexpression elimination 7193 7194 This pass performs two different types of GCSE depending on 7195 whether you are optimizing for size or not (LCM based GCSE tends 7196 to increase code size for a gain in speed, while Morel-Renvoise 7197 based GCSE does not). When optimizing for size, GCSE is done 7198 using Morel-Renvoise Partial Redundancy Elimination, with the 7199 exception that it does not try to move invariants out of 7200 loops--that is left to the loop optimization pass. If MR PRE 7201 GCSE is done, code hoisting (aka unification) is also done, as 7202 well as load motion. If you are optimizing for speed, LCM (lazy 7203 code motion) based GCSE is done. LCM is based on the work of 7204 Knoop, Ruthing, and Steffen. LCM based GCSE also does loop 7205 invariant code motion. We also perform load and store motion when 7206 optimizing for speed. Regardless of which type of GCSE is used, 7207 the GCSE pass also performs global constant and copy propagation. 7208 The source file for this pass is `gcse.c', and the LCM routines 7209 are in `lcm.c'. 7210 7211 * Loop optimization 7212 7213 This pass performs several loop related optimizations. The source 7214 files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop 7215 analysis and manipulation code. Initialization and finalization 7216 of loop structures is handled by `loop-init.c'. A loop invariant 7217 motion pass is implemented in `loop-invariant.c'. Basic block 7218 level optimizations--unrolling, peeling and unswitching loops-- 7219 are implemented in `loop-unswitch.c' and `loop-unroll.c'. 7220 Replacing of the exit condition of loops by special 7221 machine-dependent instructions is handled by `loop-doloop.c'. 7222 7223 * Jump bypassing 7224 7225 This pass is an aggressive form of GCSE that transforms the control 7226 flow graph of a function by propagating constants into conditional 7227 branch instructions. The source file for this pass is `gcse.c'. 7228 7229 * If conversion 7230 7231 This pass attempts to replace conditional branches and surrounding 7232 assignments with arithmetic, boolean value producing comparison 7233 instructions, and conditional move instructions. In the very last 7234 invocation after reload/LRA, it will generate predicated 7235 instructions when supported by the target. The code is located in 7236 `ifcvt.c'. 7237 7238 * Web construction 7239 7240 This pass splits independent uses of each pseudo-register. This 7241 can improve effect of the other transformation, such as CSE or 7242 register allocation. The code for this pass is located in `web.c'. 7243 7244 * Instruction combination 7245 7246 This pass attempts to combine groups of two or three instructions 7247 that are related by data flow into single instructions. It 7248 combines the RTL expressions for the instructions by substitution, 7249 simplifies the result using algebra, and then attempts to match 7250 the result against the machine description. The code is located 7251 in `combine.c'. 7252 7253 * Register movement 7254 7255 This pass looks for cases where matching constraints would force an 7256 instruction to need a reload, and this reload would be a 7257 register-to-register move. It then attempts to change the 7258 registers used by the instruction to avoid the move instruction. 7259 The code is located in `regmove.c'. 7260 7261 * Mode switching optimization 7262 7263 This pass looks for instructions that require the processor to be 7264 in a specific "mode" and minimizes the number of mode changes 7265 required to satisfy all users. What these modes are, and what 7266 they apply to are completely target-specific. The code for this 7267 pass is located in `mode-switching.c'. 7268 7269 * Modulo scheduling 7270 7271 This pass looks at innermost loops and reorders their instructions 7272 by overlapping different iterations. Modulo scheduling is 7273 performed immediately before instruction scheduling. The code for 7274 this pass is located in `modulo-sched.c'. 7275 7276 * Instruction scheduling 7277 7278 This pass looks for instructions whose output will not be 7279 available by the time that it is used in subsequent instructions. 7280 Memory loads and floating point instructions often have this 7281 behavior on RISC machines. It re-orders instructions within a 7282 basic block to try to separate the definition and use of items 7283 that otherwise would cause pipeline stalls. This pass is 7284 performed twice, before and after register allocation. The code 7285 for this pass is located in `haifa-sched.c', `sched-deps.c', 7286 `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'. 7287 7288 * Register allocation 7289 7290 These passes make sure that all occurrences of pseudo registers are 7291 eliminated, either by allocating them to a hard register, replacing 7292 them by an equivalent expression (e.g. a constant) or by placing 7293 them on the stack. This is done in several subpasses: 7294 7295 * Register move optimizations. This pass makes some simple RTL 7296 code transformations which improve the subsequent register 7297 allocation. The source file is `regmove.c'. 7298 7299 * The integrated register allocator (IRA). It is called 7300 integrated because coalescing, register live range splitting, 7301 and hard register preferencing are done on-the-fly during 7302 coloring. It also has better integration with the reload/LRA 7303 pass. Pseudo-registers spilled by the allocator or the 7304 reload/LRA have still a chance to get hard-registers if the 7305 reload/LRA evicts some pseudo-registers from hard-registers. 7306 The allocator helps to choose better pseudos for spilling 7307 based on their live ranges and to coalesce stack slots 7308 allocated for the spilled pseudo-registers. IRA is a regional 7309 register allocator which is transformed into Chaitin-Briggs 7310 allocator if there is one region. By default, IRA chooses 7311 regions using register pressure but the user can force it to 7312 use one region or regions corresponding to all loops. 7313 7314 Source files of the allocator are `ira.c', `ira-build.c', 7315 `ira-costs.c', `ira-conflicts.c', `ira-color.c', 7316 `ira-emit.c', `ira-lives', plus header files `ira.h' and 7317 `ira-int.h' used for the communication between the allocator 7318 and the rest of the compiler and between the IRA files. 7319 7320 * Reloading. This pass renumbers pseudo registers with the 7321 hardware registers numbers they were allocated. Pseudo 7322 registers that did not get hard registers are replaced with 7323 stack slots. Then it finds instructions that are invalid 7324 because a value has failed to end up in a register, or has 7325 ended up in a register of the wrong kind. It fixes up these 7326 instructions by reloading the problematical values 7327 temporarily into registers. Additional instructions are 7328 generated to do the copying. 7329 7330 The reload pass also optionally eliminates the frame pointer 7331 and inserts instructions to save and restore call-clobbered 7332 registers around calls. 7333 7334 Source files are `reload.c' and `reload1.c', plus the header 7335 `reload.h' used for communication between them. 7336 7337 * This pass is a modern replacement of the reload pass. Source 7338 files are `lra.c', `lra-assign.c', `lra-coalesce.c', 7339 `lra-constraints.c', `lra-eliminations.c', `lra-equivs.c', 7340 `lra-lives.c', `lra-saves.c', `lra-spills.c', the header 7341 `lra-int.h' used for communication between them, and the 7342 header `lra.h' used for communication between LRA and the 7343 rest of compiler. 7344 7345 Unlike the reload pass, intermediate LRA decisions are 7346 reflected in RTL as much as possible. This reduces the 7347 number of target-dependent macros and hooks, leaving 7348 instruction constraints as the primary source of control. 7349 7350 LRA is run on targets for which TARGET_LRA_P returns true. 7351 7352 * Basic block reordering 7353 7354 This pass implements profile guided code positioning. If profile 7355 information is not available, various types of static analysis are 7356 performed to make the predictions normally coming from the profile 7357 feedback (IE execution frequency, branch probability, etc). It is 7358 implemented in the file `bb-reorder.c', and the various prediction 7359 routines are in `predict.c'. 7360 7361 * Variable tracking 7362 7363 This pass computes where the variables are stored at each position 7364 in code and generates notes describing the variable locations to 7365 RTL code. The location lists are then generated according to these 7366 notes to debug information if the debugging information format 7367 supports location lists. The code is located in `var-tracking.c'. 7368 7369 * Delayed branch scheduling 7370 7371 This optional pass attempts to find instructions that can go into 7372 the delay slots of other instructions, usually jumps and calls. 7373 The code for this pass is located in `reorg.c'. 7374 7375 * Branch shortening 7376 7377 On many RISC machines, branch instructions have a limited range. 7378 Thus, longer sequences of instructions must be used for long 7379 branches. In this pass, the compiler figures out what how far 7380 each instruction will be from each other instruction, and 7381 therefore whether the usual instructions, or the longer sequences, 7382 must be used for each branch. The code for this pass is located 7383 in `final.c'. 7384 7385 * Register-to-stack conversion 7386 7387 Conversion from usage of some hard registers to usage of a register 7388 stack may be done at this point. Currently, this is supported only 7389 for the floating-point registers of the Intel 80387 coprocessor. 7390 The code for this pass is located in `reg-stack.c'. 7391 7392 * Final 7393 7394 This pass outputs the assembler code for the function. The source 7395 files are `final.c' plus `insn-output.c'; the latter is generated 7396 automatically from the machine description by the tool `genoutput'. 7397 The header file `conditions.h' is used for communication between 7398 these files. If mudflap is enabled, the queue of deferred 7399 declarations and any addressed constants (e.g., string literals) 7400 is processed by `mudflap_finish_file' into a synthetic constructor 7401 function containing calls into the mudflap runtime. 7402 7403 * Debugging information output 7404 7405 This is run after final because it must output the stack slot 7406 offsets for pseudo registers that did not get hard registers. 7407 Source files are `dbxout.c' for DBX symbol table format, 7408 `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF 7409 symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for 7410 DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol 7411 table format. 7412 7413 7414 7415 File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top 7416 7417 10 RTL Representation 7418 ********************* 7419 7420 The last part of the compiler work is done on a low-level intermediate 7421 representation called Register Transfer Language. In this language, the 7422 instructions to be output are described, pretty much one by one, in an 7423 algebraic form that describes what the instruction does. 7424 7425 RTL is inspired by Lisp lists. It has both an internal form, made up 7426 of structures that point at other structures, and a textual form that 7427 is used in the machine description and in printed debugging dumps. The 7428 textual form uses nested parentheses to indicate the pointers in the 7429 internal form. 7430 7431 * Menu: 7432 7433 * RTL Objects:: Expressions vs vectors vs strings vs integers. 7434 * RTL Classes:: Categories of RTL expression objects, and their structure. 7435 * Accessors:: Macros to access expression operands or vector elts. 7436 * Special Accessors:: Macros to access specific annotations on RTL. 7437 * Flags:: Other flags in an RTL expression. 7438 * Machine Modes:: Describing the size and format of a datum. 7439 * Constants:: Expressions with constant values. 7440 * Regs and Memory:: Expressions representing register contents or memory. 7441 * Arithmetic:: Expressions representing arithmetic on other expressions. 7442 * Comparisons:: Expressions representing comparison of expressions. 7443 * Bit-Fields:: Expressions representing bit-fields in memory or reg. 7444 * Vector Operations:: Expressions involving vector datatypes. 7445 * Conversions:: Extending, truncating, floating or fixing. 7446 * RTL Declarations:: Declaring volatility, constancy, etc. 7447 * Side Effects:: Expressions for storing in registers, etc. 7448 * Incdec:: Embedded side-effects for autoincrement addressing. 7449 * Assembler:: Representing `asm' with operands. 7450 * Debug Information:: Expressions representing debugging information. 7451 * Insns:: Expression types for entire insns. 7452 * Calls:: RTL representation of function call insns. 7453 * Sharing:: Some expressions are unique; others *must* be copied. 7454 * Reading RTL:: Reading textual RTL from a file. 7455 7456 7457 File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 7458 7459 10.1 RTL Object Types 7460 ===================== 7461 7462 RTL uses five kinds of objects: expressions, integers, wide integers, 7463 strings and vectors. Expressions are the most important ones. An RTL 7464 expression ("RTX", for short) is a C structure, but it is usually 7465 referred to with a pointer; a type that is given the typedef name `rtx'. 7466 7467 An integer is simply an `int'; their written form uses decimal digits. 7468 A wide integer is an integral object whose type is `HOST_WIDE_INT'; 7469 their written form uses decimal digits. 7470 7471 A string is a sequence of characters. In core it is represented as a 7472 `char *' in usual C fashion, and it is written in C syntax as well. 7473 However, strings in RTL may never be null. If you write an empty 7474 string in a machine description, it is represented in core as a null 7475 pointer rather than as a pointer to a null character. In certain 7476 contexts, these null pointers instead of strings are valid. Within RTL 7477 code, strings are most commonly found inside `symbol_ref' expressions, 7478 but they appear in other contexts in the RTL expressions that make up 7479 machine descriptions. 7480 7481 In a machine description, strings are normally written with double 7482 quotes, as you would in C. However, strings in machine descriptions may 7483 extend over many lines, which is invalid C, and adjacent string 7484 constants are not concatenated as they are in C. Any string constant 7485 may be surrounded with a single set of parentheses. Sometimes this 7486 makes the machine description easier to read. 7487 7488 There is also a special syntax for strings, which can be useful when C 7489 code is embedded in a machine description. Wherever a string can 7490 appear, it is also valid to write a C-style brace block. The entire 7491 brace block, including the outermost pair of braces, is considered to be 7492 the string constant. Double quote characters inside the braces are not 7493 special. Therefore, if you write string constants in the C code, you 7494 need not escape each quote character with a backslash. 7495 7496 A vector contains an arbitrary number of pointers to expressions. The 7497 number of elements in the vector is explicitly present in the vector. 7498 The written form of a vector consists of square brackets (`[...]') 7499 surrounding the elements, in sequence and with whitespace separating 7500 them. Vectors of length zero are not created; null pointers are used 7501 instead. 7502 7503 Expressions are classified by "expression codes" (also called RTX 7504 codes). The expression code is a name defined in `rtl.def', which is 7505 also (in uppercase) a C enumeration constant. The possible expression 7506 codes and their meanings are machine-independent. The code of an RTX 7507 can be extracted with the macro `GET_CODE (X)' and altered with 7508 `PUT_CODE (X, NEWCODE)'. 7509 7510 The expression code determines how many operands the expression 7511 contains, and what kinds of objects they are. In RTL, unlike Lisp, you 7512 cannot tell by looking at an operand what kind of object it is. 7513 Instead, you must know from its context--from the expression code of 7514 the containing expression. For example, in an expression of code 7515 `subreg', the first operand is to be regarded as an expression and the 7516 second operand as an integer. In an expression of code `plus', there 7517 are two operands, both of which are to be regarded as expressions. In 7518 a `symbol_ref' expression, there is one operand, which is to be 7519 regarded as a string. 7520 7521 Expressions are written as parentheses containing the name of the 7522 expression type, its flags and machine mode if any, and then the 7523 operands of the expression (separated by spaces). 7524 7525 Expression code names in the `md' file are written in lowercase, but 7526 when they appear in C code they are written in uppercase. In this 7527 manual, they are shown as follows: `const_int'. 7528 7529 In a few contexts a null pointer is valid where an expression is 7530 normally wanted. The written form of this is `(nil)'. 7531 7532 7533 File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 7534 7535 10.2 RTL Classes and Formats 7536 ============================ 7537 7538 The various expression codes are divided into several "classes", which 7539 are represented by single characters. You can determine the class of 7540 an RTX code with the macro `GET_RTX_CLASS (CODE)'. Currently, 7541 `rtl.def' defines these classes: 7542 7543 `RTX_OBJ' 7544 An RTX code that represents an actual object, such as a register 7545 (`REG') or a memory location (`MEM', `SYMBOL_REF'). `LO_SUM') is 7546 also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in 7547 this class, but in class `x'. 7548 7549 `RTX_CONST_OBJ' 7550 An RTX code that represents a constant object. `HIGH' is also 7551 included in this class. 7552 7553 `RTX_COMPARE' 7554 An RTX code for a non-symmetric comparison, such as `GEU' or `LT'. 7555 7556 `RTX_COMM_COMPARE' 7557 An RTX code for a symmetric (commutative) comparison, such as `EQ' 7558 or `ORDERED'. 7559 7560 `RTX_UNARY' 7561 An RTX code for a unary arithmetic operation, such as `NEG', 7562 `NOT', or `ABS'. This category also includes value extension 7563 (sign or zero) and conversions between integer and floating point. 7564 7565 `RTX_COMM_ARITH' 7566 An RTX code for a commutative binary operation, such as `PLUS' or 7567 `AND'. `NE' and `EQ' are comparisons, so they have class `<'. 7568 7569 `RTX_BIN_ARITH' 7570 An RTX code for a non-commutative binary operation, such as 7571 `MINUS', `DIV', or `ASHIFTRT'. 7572 7573 `RTX_BITFIELD_OPS' 7574 An RTX code for a bit-field operation. Currently only 7575 `ZERO_EXTRACT' and `SIGN_EXTRACT'. These have three inputs and 7576 are lvalues (so they can be used for insertion as well). *Note 7577 Bit-Fields::. 7578 7579 `RTX_TERNARY' 7580 An RTX code for other three input operations. Currently only 7581 `IF_THEN_ELSE', `VEC_MERGE', `SIGN_EXTRACT', `ZERO_EXTRACT', and 7582 `FMA'. 7583 7584 `RTX_INSN' 7585 An RTX code for an entire instruction: `INSN', `JUMP_INSN', and 7586 `CALL_INSN'. *Note Insns::. 7587 7588 `RTX_MATCH' 7589 An RTX code for something that matches in insns, such as 7590 `MATCH_DUP'. These only occur in machine descriptions. 7591 7592 `RTX_AUTOINC' 7593 An RTX code for an auto-increment addressing mode, such as 7594 `POST_INC'. 7595 7596 `RTX_EXTRA' 7597 All other RTX codes. This category includes the remaining codes 7598 used only in machine descriptions (`DEFINE_*', etc.). It also 7599 includes all the codes describing side effects (`SET', `USE', 7600 `CLOBBER', etc.) and the non-insns that may appear on an insn 7601 chain, such as `NOTE', `BARRIER', and `CODE_LABEL'. `SUBREG' is 7602 also part of this class. 7603 7604 For each expression code, `rtl.def' specifies the number of contained 7605 objects and their kinds using a sequence of characters called the 7606 "format" of the expression code. For example, the format of `subreg' 7607 is `ei'. 7608 7609 These are the most commonly used format characters: 7610 7611 `e' 7612 An expression (actually a pointer to an expression). 7613 7614 `i' 7615 An integer. 7616 7617 `w' 7618 A wide integer. 7619 7620 `s' 7621 A string. 7622 7623 `E' 7624 A vector of expressions. 7625 7626 A few other format characters are used occasionally: 7627 7628 `u' 7629 `u' is equivalent to `e' except that it is printed differently in 7630 debugging dumps. It is used for pointers to insns. 7631 7632 `n' 7633 `n' is equivalent to `i' except that it is printed differently in 7634 debugging dumps. It is used for the line number or code number of 7635 a `note' insn. 7636 7637 `S' 7638 `S' indicates a string which is optional. In the RTL objects in 7639 core, `S' is equivalent to `s', but when the object is read, from 7640 an `md' file, the string value of this operand may be omitted. An 7641 omitted string is taken to be the null string. 7642 7643 `V' 7644 `V' indicates a vector which is optional. In the RTL objects in 7645 core, `V' is equivalent to `E', but when the object is read from 7646 an `md' file, the vector value of this operand may be omitted. An 7647 omitted vector is effectively the same as a vector of no elements. 7648 7649 `B' 7650 `B' indicates a pointer to basic block structure. 7651 7652 `0' 7653 `0' means a slot whose contents do not fit any normal category. 7654 `0' slots are not printed at all in dumps, and are often used in 7655 special ways by small parts of the compiler. 7656 7657 There are macros to get the number of operands and the format of an 7658 expression code: 7659 7660 `GET_RTX_LENGTH (CODE)' 7661 Number of operands of an RTX of code CODE. 7662 7663 `GET_RTX_FORMAT (CODE)' 7664 The format of an RTX of code CODE, as a C string. 7665 7666 Some classes of RTX codes always have the same format. For example, it 7667 is safe to assume that all comparison operations have format `ee'. 7668 7669 `1' 7670 All codes of this class have format `e'. 7671 7672 `<' 7673 `c' 7674 `2' 7675 All codes of these classes have format `ee'. 7676 7677 `b' 7678 `3' 7679 All codes of these classes have format `eee'. 7680 7681 `i' 7682 All codes of this class have formats that begin with `iuueiee'. 7683 *Note Insns::. Note that not all RTL objects linked onto an insn 7684 chain are of class `i'. 7685 7686 `o' 7687 `m' 7688 `x' 7689 You can make no assumptions about the format of these codes. 7690 7691 7692 File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 7693 7694 10.3 Access to Operands 7695 ======================= 7696 7697 Operands of expressions are accessed using the macros `XEXP', `XINT', 7698 `XWINT' and `XSTR'. Each of these macros takes two arguments: an 7699 expression-pointer (RTX) and an operand number (counting from zero). 7700 Thus, 7701 7702 XEXP (X, 2) 7703 7704 accesses operand 2 of expression X, as an expression. 7705 7706 XINT (X, 2) 7707 7708 accesses the same operand as an integer. `XSTR', used in the same 7709 fashion, would access it as a string. 7710 7711 Any operand can be accessed as an integer, as an expression or as a 7712 string. You must choose the correct method of access for the kind of 7713 value actually stored in the operand. You would do this based on the 7714 expression code of the containing expression. That is also how you 7715 would know how many operands there are. 7716 7717 For example, if X is a `subreg' expression, you know that it has two 7718 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X, 7719 1)'. If you did `XINT (X, 0)', you would get the address of the 7720 expression operand but cast as an integer; that might occasionally be 7721 useful, but it would be cleaner to write `(int) XEXP (X, 0)'. `XEXP 7722 (X, 1)' would also compile without error, and would return the second, 7723 integer operand cast as an expression pointer, which would probably 7724 result in a crash when accessed. Nothing stops you from writing `XEXP 7725 (X, 28)' either, but this will access memory past the end of the 7726 expression with unpredictable results. 7727 7728 Access to operands which are vectors is more complicated. You can use 7729 the macro `XVEC' to get the vector-pointer itself, or the macros 7730 `XVECEXP' and `XVECLEN' to access the elements and length of a vector. 7731 7732 `XVEC (EXP, IDX)' 7733 Access the vector-pointer which is operand number IDX in EXP. 7734 7735 `XVECLEN (EXP, IDX)' 7736 Access the length (number of elements) in the vector which is in 7737 operand number IDX in EXP. This value is an `int'. 7738 7739 `XVECEXP (EXP, IDX, ELTNUM)' 7740 Access element number ELTNUM in the vector which is in operand 7741 number IDX in EXP. This value is an RTX. 7742 7743 It is up to you to make sure that ELTNUM is not negative and is 7744 less than `XVECLEN (EXP, IDX)'. 7745 7746 All the macros defined in this section expand into lvalues and 7747 therefore can be used to assign the operands, lengths and vector 7748 elements as well as to access them. 7749 7750 7751 File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 7752 7753 10.4 Access to Special Operands 7754 =============================== 7755 7756 Some RTL nodes have special annotations associated with them. 7757 7758 `MEM' 7759 7760 `MEM_ALIAS_SET (X)' 7761 If 0, X is not in any alias set, and may alias anything. 7762 Otherwise, X can only alias `MEM's in a conflicting alias 7763 set. This value is set in a language-dependent manner in the 7764 front-end, and should not be altered in the back-end. In 7765 some front-ends, these numbers may correspond in some way to 7766 types, or other language-level entities, but they need not, 7767 and the back-end makes no such assumptions. These set 7768 numbers are tested with `alias_sets_conflict_p'. 7769 7770 `MEM_EXPR (X)' 7771 If this register is known to hold the value of some user-level 7772 declaration, this is that tree node. It may also be a 7773 `COMPONENT_REF', in which case this is some field reference, 7774 and `TREE_OPERAND (X, 0)' contains the declaration, or 7775 another `COMPONENT_REF', or null if there is no compile-time 7776 object associated with the reference. 7777 7778 `MEM_OFFSET_KNOWN_P (X)' 7779 True if the offset of the memory reference from `MEM_EXPR' is 7780 known. `MEM_OFFSET (X)' provides the offset if so. 7781 7782 `MEM_OFFSET (X)' 7783 The offset from the start of `MEM_EXPR'. The value is only 7784 valid if `MEM_OFFSET_KNOWN_P (X)' is true. 7785 7786 `MEM_SIZE_KNOWN_P (X)' 7787 True if the size of the memory reference is known. `MEM_SIZE 7788 (X)' provides its size if so. 7789 7790 `MEM_SIZE (X)' 7791 The size in bytes of the memory reference. This is mostly 7792 relevant for `BLKmode' references as otherwise the size is 7793 implied by the mode. The value is only valid if 7794 `MEM_SIZE_KNOWN_P (X)' is true. 7795 7796 `MEM_ALIGN (X)' 7797 The known alignment in bits of the memory reference. 7798 7799 `MEM_ADDR_SPACE (X)' 7800 The address space of the memory reference. This will 7801 commonly be zero for the generic address space. 7802 7803 `REG' 7804 7805 `ORIGINAL_REGNO (X)' 7806 This field holds the number the register "originally" had; 7807 for a pseudo register turned into a hard reg this will hold 7808 the old pseudo register number. 7809 7810 `REG_EXPR (X)' 7811 If this register is known to hold the value of some user-level 7812 declaration, this is that tree node. 7813 7814 `REG_OFFSET (X)' 7815 If this register is known to hold the value of some user-level 7816 declaration, this is the offset into that logical storage. 7817 7818 `SYMBOL_REF' 7819 7820 `SYMBOL_REF_DECL (X)' 7821 If the `symbol_ref' X was created for a `VAR_DECL' or a 7822 `FUNCTION_DECL', that tree is recorded here. If this value is 7823 null, then X was created by back end code generation routines, 7824 and there is no associated front end symbol table entry. 7825 7826 `SYMBOL_REF_DECL' may also point to a tree of class `'c'', 7827 that is, some sort of constant. In this case, the 7828 `symbol_ref' is an entry in the per-file constant pool; 7829 again, there is no associated front end symbol table entry. 7830 7831 `SYMBOL_REF_CONSTANT (X)' 7832 If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 7833 pool entry for X. It is null otherwise. 7834 7835 `SYMBOL_REF_DATA (X)' 7836 A field of opaque type used to store `SYMBOL_REF_DECL' or 7837 `SYMBOL_REF_CONSTANT'. 7838 7839 `SYMBOL_REF_FLAGS (X)' 7840 In a `symbol_ref', this is used to communicate various 7841 predicates about the symbol. Some of these are common enough 7842 to be computed by common code, some are specific to the 7843 target. The common bits are: 7844 7845 `SYMBOL_FLAG_FUNCTION' 7846 Set if the symbol refers to a function. 7847 7848 `SYMBOL_FLAG_LOCAL' 7849 Set if the symbol is local to this "module". See 7850 `TARGET_BINDS_LOCAL_P'. 7851 7852 `SYMBOL_FLAG_EXTERNAL' 7853 Set if this symbol is not defined in this translation 7854 unit. Note that this is not the inverse of 7855 `SYMBOL_FLAG_LOCAL'. 7856 7857 `SYMBOL_FLAG_SMALL' 7858 Set if the symbol is located in the small data section. 7859 See `TARGET_IN_SMALL_DATA_P'. 7860 7861 `SYMBOL_REF_TLS_MODEL (X)' 7862 This is a multi-bit field accessor that returns the 7863 `tls_model' to be used for a thread-local storage 7864 symbol. It returns zero for non-thread-local symbols. 7865 7866 `SYMBOL_FLAG_HAS_BLOCK_INFO' 7867 Set if the symbol has `SYMBOL_REF_BLOCK' and 7868 `SYMBOL_REF_BLOCK_OFFSET' fields. 7869 7870 `SYMBOL_FLAG_ANCHOR' 7871 Set if the symbol is used as a section anchor. "Section 7872 anchors" are symbols that have a known position within 7873 an `object_block' and that can be used to access nearby 7874 members of that block. They are used to implement 7875 `-fsection-anchors'. 7876 7877 If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO' 7878 will be too. 7879 7880 Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for 7881 the target's use. 7882 7883 `SYMBOL_REF_BLOCK (X)' 7884 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block' 7885 structure to which the symbol belongs, or `NULL' if it has not 7886 been assigned a block. 7887 7888 `SYMBOL_REF_BLOCK_OFFSET (X)' 7889 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 7890 the first object in `SYMBOL_REF_BLOCK (X)'. The value is negative 7891 if X has not yet been assigned to a block, or it has not been 7892 given an offset within that block. 7893 7894 7895 File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 7896 7897 10.5 Flags in an RTL Expression 7898 =============================== 7899 7900 RTL expressions contain several flags (one-bit bit-fields) that are 7901 used in certain types of expression. Most often they are accessed with 7902 the following macros, which expand into lvalues. 7903 7904 `CONSTANT_POOL_ADDRESS_P (X)' 7905 Nonzero in a `symbol_ref' if it refers to part of the current 7906 function's constant pool. For most targets these addresses are in 7907 a `.rodata' section entirely separate from the function, but for 7908 some targets the addresses are close to the beginning of the 7909 function. In either case GCC assumes these addresses can be 7910 addressed directly, perhaps with the help of base registers. 7911 Stored in the `unchanging' field and printed as `/u'. 7912 7913 `RTL_CONST_CALL_P (X)' 7914 In a `call_insn' indicates that the insn represents a call to a 7915 const function. Stored in the `unchanging' field and printed as 7916 `/u'. 7917 7918 `RTL_PURE_CALL_P (X)' 7919 In a `call_insn' indicates that the insn represents a call to a 7920 pure function. Stored in the `return_val' field and printed as 7921 `/i'. 7922 7923 `RTL_CONST_OR_PURE_CALL_P (X)' 7924 In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' 7925 is true. 7926 7927 `RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 7928 In a `call_insn' indicates that the insn represents a possibly 7929 infinite looping call to a const or pure function. Stored in the 7930 `call' field and printed as `/c'. Only true if one of 7931 `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true. 7932 7933 `INSN_ANNULLED_BRANCH_P (X)' 7934 In a `jump_insn', `call_insn', or `insn' indicates that the branch 7935 is an annulling one. See the discussion under `sequence' below. 7936 Stored in the `unchanging' field and printed as `/u'. 7937 7938 `INSN_DELETED_P (X)' 7939 In an `insn', `call_insn', `jump_insn', `code_label', `barrier', 7940 or `note', nonzero if the insn has been deleted. Stored in the 7941 `volatil' field and printed as `/v'. 7942 7943 `INSN_FROM_TARGET_P (X)' 7944 In an `insn' or `jump_insn' or `call_insn' in a delay slot of a 7945 branch, indicates that the insn is from the target of the branch. 7946 If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn 7947 will only be executed if the branch is taken. For annulled 7948 branches with `INSN_FROM_TARGET_P' clear, the insn will be 7949 executed only if the branch is not taken. When 7950 `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be 7951 executed. Stored in the `in_struct' field and printed as `/s'. 7952 7953 `LABEL_PRESERVE_P (X)' 7954 In a `code_label' or `note', indicates that the label is 7955 referenced by code or data not visible to the RTL of a given 7956 function. Labels referenced by a non-local goto will have this 7957 bit set. Stored in the `in_struct' field and printed as `/s'. 7958 7959 `LABEL_REF_NONLOCAL_P (X)' 7960 In `label_ref' and `reg_label' expressions, nonzero if this is a 7961 reference to a non-local label. Stored in the `volatil' field and 7962 printed as `/v'. 7963 7964 `MEM_KEEP_ALIAS_SET_P (X)' 7965 In `mem' expressions, 1 if we should keep the alias set for this 7966 mem unchanged when we access a component. Set to 1, for example, 7967 when we are already in a non-addressable component of an aggregate. 7968 Stored in the `jump' field and printed as `/j'. 7969 7970 `MEM_VOLATILE_P (X)' 7971 In `mem', `asm_operands', and `asm_input' expressions, nonzero for 7972 volatile memory references. Stored in the `volatil' field and 7973 printed as `/v'. 7974 7975 `MEM_NOTRAP_P (X)' 7976 In `mem', nonzero for memory references that will not trap. 7977 Stored in the `call' field and printed as `/c'. 7978 7979 `MEM_POINTER (X)' 7980 Nonzero in a `mem' if the memory reference holds a pointer. 7981 Stored in the `frame_related' field and printed as `/f'. 7982 7983 `REG_FUNCTION_VALUE_P (X)' 7984 Nonzero in a `reg' if it is the place in which this function's 7985 value is going to be returned. (This happens only in a hard 7986 register.) Stored in the `return_val' field and printed as `/i'. 7987 7988 `REG_POINTER (X)' 7989 Nonzero in a `reg' if the register holds a pointer. Stored in the 7990 `frame_related' field and printed as `/f'. 7991 7992 `REG_USERVAR_P (X)' 7993 In a `reg', nonzero if it corresponds to a variable present in the 7994 user's source code. Zero for temporaries generated internally by 7995 the compiler. Stored in the `volatil' field and printed as `/v'. 7996 7997 The same hard register may be used also for collecting the values 7998 of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero 7999 in this kind of use. 8000 8001 `RTX_FRAME_RELATED_P (X)' 8002 Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or 8003 `set' which is part of a function prologue and sets the stack 8004 pointer, sets the frame pointer, or saves a register. This flag 8005 should also be set on an instruction that sets up a temporary 8006 register to use in place of the frame pointer. Stored in the 8007 `frame_related' field and printed as `/f'. 8008 8009 In particular, on RISC targets where there are limits on the sizes 8010 of immediate constants, it is sometimes impossible to reach the 8011 register save area directly from the stack pointer. In that case, 8012 a temporary register is used that is near enough to the register 8013 save area, and the Canonical Frame Address, i.e., DWARF2's logical 8014 frame pointer, register must (temporarily) be changed to be this 8015 temporary register. So, the instruction that sets this temporary 8016 register must be marked as `RTX_FRAME_RELATED_P'. 8017 8018 If the marked instruction is overly complex (defined in terms of 8019 what `dwarf2out_frame_debug_expr' can handle), you will also have 8020 to create a `REG_FRAME_RELATED_EXPR' note and attach it to the 8021 instruction. This note should contain a simple expression of the 8022 computation performed by this instruction, i.e., one that 8023 `dwarf2out_frame_debug_expr' can handle. 8024 8025 This flag is required for exception handling support on targets 8026 with RTL prologues. 8027 8028 `MEM_READONLY_P (X)' 8029 Nonzero in a `mem', if the memory is statically allocated and 8030 read-only. 8031 8032 Read-only in this context means never modified during the lifetime 8033 of the program, not necessarily in ROM or in write-disabled pages. 8034 A common example of the later is a shared library's global offset 8035 table. This table is initialized by the runtime loader, so the 8036 memory is technically writable, but after control is transferred 8037 from the runtime loader to the application, this memory will never 8038 be subsequently modified. 8039 8040 Stored in the `unchanging' field and printed as `/u'. 8041 8042 `SCHED_GROUP_P (X)' 8043 During instruction scheduling, in an `insn', `call_insn' or 8044 `jump_insn', indicates that the previous insn must be scheduled 8045 together with this insn. This is used to ensure that certain 8046 groups of instructions will not be split up by the instruction 8047 scheduling pass, for example, `use' insns before a `call_insn' may 8048 not be separated from the `call_insn'. Stored in the `in_struct' 8049 field and printed as `/s'. 8050 8051 `SET_IS_RETURN_P (X)' 8052 For a `set', nonzero if it is for a return. Stored in the `jump' 8053 field and printed as `/j'. 8054 8055 `SIBLING_CALL_P (X)' 8056 For a `call_insn', nonzero if the insn is a sibling call. Stored 8057 in the `jump' field and printed as `/j'. 8058 8059 `STRING_POOL_ADDRESS_P (X)' 8060 For a `symbol_ref' expression, nonzero if it addresses this 8061 function's string constant pool. Stored in the `frame_related' 8062 field and printed as `/f'. 8063 8064 `SUBREG_PROMOTED_UNSIGNED_P (X)' 8065 Returns a value greater then zero for a `subreg' that has 8066 `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 8067 kept zero-extended, zero if it is kept sign-extended, and less 8068 then zero if it is extended some other way via the `ptr_extend' 8069 instruction. Stored in the `unchanging' field and `volatil' 8070 field, printed as `/u' and `/v'. This macro may only be used to 8071 get the value it may not be used to change the value. Use 8072 `SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 8073 8074 `SUBREG_PROMOTED_UNSIGNED_SET (X)' 8075 Set the `unchanging' and `volatil' fields in a `subreg' to reflect 8076 zero, sign, or other extension. If `volatil' is zero, then 8077 `unchanging' as nonzero means zero extension and as zero means 8078 sign extension. If `volatil' is nonzero then some other type of 8079 extension was done via the `ptr_extend' instruction. 8080 8081 `SUBREG_PROMOTED_VAR_P (X)' 8082 Nonzero in a `subreg' if it was made when accessing an object that 8083 was promoted to a wider mode in accord with the `PROMOTED_MODE' 8084 machine description macro (*note Storage Layout::). In this case, 8085 the mode of the `subreg' is the declared mode of the object and 8086 the mode of `SUBREG_REG' is the mode of the register that holds 8087 the object. Promoted variables are always either sign- or 8088 zero-extended to the wider mode on every assignment. Stored in 8089 the `in_struct' field and printed as `/s'. 8090 8091 `SYMBOL_REF_USED (X)' 8092 In a `symbol_ref', indicates that X has been used. This is 8093 normally only used to ensure that X is only declared external 8094 once. Stored in the `used' field. 8095 8096 `SYMBOL_REF_WEAK (X)' 8097 In a `symbol_ref', indicates that X has been declared weak. 8098 Stored in the `return_val' field and printed as `/i'. 8099 8100 `SYMBOL_REF_FLAG (X)' 8101 In a `symbol_ref', this is used as a flag for machine-specific 8102 purposes. Stored in the `volatil' field and printed as `/v'. 8103 8104 Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by 8105 `SYMBOL_REF_FLAGS'. Certainly use of `SYMBOL_REF_FLAGS' is 8106 mandatory if the target requires more than one bit of storage. 8107 8108 `PREFETCH_SCHEDULE_BARRIER_P (X)' 8109 In a `prefetch', indicates that the prefetch is a scheduling 8110 barrier. No other INSNs will be moved over it. Stored in the 8111 `volatil' field and printed as `/v'. 8112 8113 These are the fields to which the above macros refer: 8114 8115 `call' 8116 In a `mem', 1 means that the memory reference will not trap. 8117 8118 In a `call', 1 means that this pure or const call may possibly 8119 infinite loop. 8120 8121 In an RTL dump, this flag is represented as `/c'. 8122 8123 `frame_related' 8124 In an `insn' or `set' expression, 1 means that it is part of a 8125 function prologue and sets the stack pointer, sets the frame 8126 pointer, saves a register, or sets up a temporary register to use 8127 in place of the frame pointer. 8128 8129 In `reg' expressions, 1 means that the register holds a pointer. 8130 8131 In `mem' expressions, 1 means that the memory reference holds a 8132 pointer. 8133 8134 In `symbol_ref' expressions, 1 means that the reference addresses 8135 this function's string constant pool. 8136 8137 In an RTL dump, this flag is represented as `/f'. 8138 8139 `in_struct' 8140 In `reg' expressions, it is 1 if the register has its entire life 8141 contained within the test expression of some loop. 8142 8143 In `subreg' expressions, 1 means that the `subreg' is accessing an 8144 object that has had its mode promoted from a wider mode. 8145 8146 In `label_ref' expressions, 1 means that the referenced label is 8147 outside the innermost loop containing the insn in which the 8148 `label_ref' was found. 8149 8150 In `code_label' expressions, it is 1 if the label may never be 8151 deleted. This is used for labels which are the target of 8152 non-local gotos. Such a label that would have been deleted is 8153 replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'. 8154 8155 In an `insn' during dead-code elimination, 1 means that the insn is 8156 dead code. 8157 8158 In an `insn' or `jump_insn' during reorg for an insn in the delay 8159 slot of a branch, 1 means that this insn is from the target of the 8160 branch. 8161 8162 In an `insn' during instruction scheduling, 1 means that this insn 8163 must be scheduled as part of a group together with the previous 8164 insn. 8165 8166 In an RTL dump, this flag is represented as `/s'. 8167 8168 `return_val' 8169 In `reg' expressions, 1 means the register contains the value to 8170 be returned by the current function. On machines that pass 8171 parameters in registers, the same register number may be used for 8172 parameters as well, but this flag is not set on such uses. 8173 8174 In `symbol_ref' expressions, 1 means the referenced symbol is weak. 8175 8176 In `call' expressions, 1 means the call is pure. 8177 8178 In an RTL dump, this flag is represented as `/i'. 8179 8180 `jump' 8181 In a `mem' expression, 1 means we should keep the alias set for 8182 this mem unchanged when we access a component. 8183 8184 In a `set', 1 means it is for a return. 8185 8186 In a `call_insn', 1 means it is a sibling call. 8187 8188 In an RTL dump, this flag is represented as `/j'. 8189 8190 `unchanging' 8191 In `reg' and `mem' expressions, 1 means that the value of the 8192 expression never changes. 8193 8194 In `subreg' expressions, it is 1 if the `subreg' references an 8195 unsigned object whose mode has been promoted to a wider mode. 8196 8197 In an `insn' or `jump_insn' in the delay slot of a branch 8198 instruction, 1 means an annulling branch should be used. 8199 8200 In a `symbol_ref' expression, 1 means that this symbol addresses 8201 something in the per-function constant pool. 8202 8203 In a `call_insn' 1 means that this instruction is a call to a const 8204 function. 8205 8206 In an RTL dump, this flag is represented as `/u'. 8207 8208 `used' 8209 This flag is used directly (without an access macro) at the end of 8210 RTL generation for a function, to count the number of times an 8211 expression appears in insns. Expressions that appear more than 8212 once are copied, according to the rules for shared structure 8213 (*note Sharing::). 8214 8215 For a `reg', it is used directly (without an access macro) by the 8216 leaf register renumbering code to ensure that each register is only 8217 renumbered once. 8218 8219 In a `symbol_ref', it indicates that an external declaration for 8220 the symbol has already been written. 8221 8222 `volatil' 8223 In a `mem', `asm_operands', or `asm_input' expression, it is 1 if 8224 the memory reference is volatile. Volatile memory references may 8225 not be deleted, reordered or combined. 8226 8227 In a `symbol_ref' expression, it is used for machine-specific 8228 purposes. 8229 8230 In a `reg' expression, it is 1 if the value is a user-level 8231 variable. 0 indicates an internal compiler temporary. 8232 8233 In an `insn', 1 means the insn has been deleted. 8234 8235 In `label_ref' and `reg_label' expressions, 1 means a reference to 8236 a non-local label. 8237 8238 In `prefetch' expressions, 1 means that the containing insn is a 8239 scheduling barrier. 8240 8241 In an RTL dump, this flag is represented as `/v'. 8242 8243 8244 File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 8245 8246 10.6 Machine Modes 8247 ================== 8248 8249 A machine mode describes a size of data object and the representation 8250 used for it. In the C code, machine modes are represented by an 8251 enumeration type, `enum machine_mode', defined in `machmode.def'. Each 8252 RTL expression has room for a machine mode and so do certain kinds of 8253 tree expressions (declarations and types, to be precise). 8254 8255 In debugging dumps and machine descriptions, the machine mode of an RTL 8256 expression is written after the expression code with a colon to separate 8257 them. The letters `mode' which appear at the end of each machine mode 8258 name are omitted. For example, `(reg:SI 38)' is a `reg' expression 8259 with machine mode `SImode'. If the mode is `VOIDmode', it is not 8260 written at all. 8261 8262 Here is a table of machine modes. The term "byte" below refers to an 8263 object of `BITS_PER_UNIT' bits (*note Storage Layout::). 8264 8265 `BImode' 8266 "Bit" mode represents a single bit, for predicate registers. 8267 8268 `QImode' 8269 "Quarter-Integer" mode represents a single byte treated as an 8270 integer. 8271 8272 `HImode' 8273 "Half-Integer" mode represents a two-byte integer. 8274 8275 `PSImode' 8276 "Partial Single Integer" mode represents an integer which occupies 8277 four bytes but which doesn't really use all four. On some 8278 machines, this is the right mode to use for pointers. 8279 8280 `SImode' 8281 "Single Integer" mode represents a four-byte integer. 8282 8283 `PDImode' 8284 "Partial Double Integer" mode represents an integer which occupies 8285 eight bytes but which doesn't really use all eight. On some 8286 machines, this is the right mode to use for certain pointers. 8287 8288 `DImode' 8289 "Double Integer" mode represents an eight-byte integer. 8290 8291 `TImode' 8292 "Tetra Integer" (?) mode represents a sixteen-byte integer. 8293 8294 `OImode' 8295 "Octa Integer" (?) mode represents a thirty-two-byte integer. 8296 8297 `QFmode' 8298 "Quarter-Floating" mode represents a quarter-precision (single 8299 byte) floating point number. 8300 8301 `HFmode' 8302 "Half-Floating" mode represents a half-precision (two byte) 8303 floating point number. 8304 8305 `TQFmode' 8306 "Three-Quarter-Floating" (?) mode represents a 8307 three-quarter-precision (three byte) floating point number. 8308 8309 `SFmode' 8310 "Single Floating" mode represents a four byte floating point 8311 number. In the common case, of a processor with IEEE arithmetic 8312 and 8-bit bytes, this is a single-precision IEEE floating point 8313 number; it can also be used for double-precision (on processors 8314 with 16-bit bytes) and single-precision VAX and IBM types. 8315 8316 `DFmode' 8317 "Double Floating" mode represents an eight byte floating point 8318 number. In the common case, of a processor with IEEE arithmetic 8319 and 8-bit bytes, this is a double-precision IEEE floating point 8320 number. 8321 8322 `XFmode' 8323 "Extended Floating" mode represents an IEEE extended floating point 8324 number. This mode only has 80 meaningful bits (ten bytes). Some 8325 processors require such numbers to be padded to twelve bytes, 8326 others to sixteen; this mode is used for either. 8327 8328 `SDmode' 8329 "Single Decimal Floating" mode represents a four byte decimal 8330 floating point number (as distinct from conventional binary 8331 floating point). 8332 8333 `DDmode' 8334 "Double Decimal Floating" mode represents an eight byte decimal 8335 floating point number. 8336 8337 `TDmode' 8338 "Tetra Decimal Floating" mode represents a sixteen byte decimal 8339 floating point number all 128 of whose bits are meaningful. 8340 8341 `TFmode' 8342 "Tetra Floating" mode represents a sixteen byte floating point 8343 number all 128 of whose bits are meaningful. One common use is the 8344 IEEE quad-precision format. 8345 8346 `QQmode' 8347 "Quarter-Fractional" mode represents a single byte treated as a 8348 signed fractional number. The default format is "s.7". 8349 8350 `HQmode' 8351 "Half-Fractional" mode represents a two-byte signed fractional 8352 number. The default format is "s.15". 8353 8354 `SQmode' 8355 "Single Fractional" mode represents a four-byte signed fractional 8356 number. The default format is "s.31". 8357 8358 `DQmode' 8359 "Double Fractional" mode represents an eight-byte signed 8360 fractional number. The default format is "s.63". 8361 8362 `TQmode' 8363 "Tetra Fractional" mode represents a sixteen-byte signed 8364 fractional number. The default format is "s.127". 8365 8366 `UQQmode' 8367 "Unsigned Quarter-Fractional" mode represents a single byte 8368 treated as an unsigned fractional number. The default format is 8369 ".8". 8370 8371 `UHQmode' 8372 "Unsigned Half-Fractional" mode represents a two-byte unsigned 8373 fractional number. The default format is ".16". 8374 8375 `USQmode' 8376 "Unsigned Single Fractional" mode represents a four-byte unsigned 8377 fractional number. The default format is ".32". 8378 8379 `UDQmode' 8380 "Unsigned Double Fractional" mode represents an eight-byte unsigned 8381 fractional number. The default format is ".64". 8382 8383 `UTQmode' 8384 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 8385 fractional number. The default format is ".128". 8386 8387 `HAmode' 8388 "Half-Accumulator" mode represents a two-byte signed accumulator. 8389 The default format is "s8.7". 8390 8391 `SAmode' 8392 "Single Accumulator" mode represents a four-byte signed 8393 accumulator. The default format is "s16.15". 8394 8395 `DAmode' 8396 "Double Accumulator" mode represents an eight-byte signed 8397 accumulator. The default format is "s32.31". 8398 8399 `TAmode' 8400 "Tetra Accumulator" mode represents a sixteen-byte signed 8401 accumulator. The default format is "s64.63". 8402 8403 `UHAmode' 8404 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 8405 accumulator. The default format is "8.8". 8406 8407 `USAmode' 8408 "Unsigned Single Accumulator" mode represents a four-byte unsigned 8409 accumulator. The default format is "16.16". 8410 8411 `UDAmode' 8412 "Unsigned Double Accumulator" mode represents an eight-byte 8413 unsigned accumulator. The default format is "32.32". 8414 8415 `UTAmode' 8416 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 8417 unsigned accumulator. The default format is "64.64". 8418 8419 `CCmode' 8420 "Condition Code" mode represents the value of a condition code, 8421 which is a machine-specific set of bits used to represent the 8422 result of a comparison operation. Other machine-specific modes 8423 may also be used for the condition code. These modes are not used 8424 on machines that use `cc0' (*note Condition Code::). 8425 8426 `BLKmode' 8427 "Block" mode represents values that are aggregates to which none of 8428 the other modes apply. In RTL, only memory references can have 8429 this mode, and only if they appear in string-move or vector 8430 instructions. On machines which have no such instructions, 8431 `BLKmode' will not appear in RTL. 8432 8433 `VOIDmode' 8434 Void mode means the absence of a mode or an unspecified mode. For 8435 example, RTL expressions of code `const_int' have mode `VOIDmode' 8436 because they can be taken to have whatever mode the context 8437 requires. In debugging dumps of RTL, `VOIDmode' is expressed by 8438 the absence of any mode. 8439 8440 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 8441 These modes stand for a complex number represented as a pair of 8442 floating point values. The floating point values are in `QFmode', 8443 `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively. 8444 8445 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 8446 These modes stand for a complex number represented as a pair of 8447 integer values. The integer values are in `QImode', `HImode', 8448 `SImode', `DImode', `TImode', and `OImode', respectively. 8449 8450 The machine description defines `Pmode' as a C macro which expands 8451 into the machine mode used for addresses. Normally this is the mode 8452 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines. 8453 8454 The only modes which a machine description must support are `QImode', 8455 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and 8456 `DOUBLE_TYPE_SIZE'. The compiler will attempt to use `DImode' for 8457 8-byte structures and unions, but this can be prevented by overriding 8458 the definition of `MAX_FIXED_MODE_SIZE'. Alternatively, you can have 8459 the compiler use `TImode' for 16-byte structures and unions. Likewise, 8460 you can arrange for the C type `short int' to avoid using `HImode'. 8461 8462 Very few explicit references to machine modes remain in the compiler 8463 and these few references will soon be removed. Instead, the machine 8464 modes are divided into mode classes. These are represented by the 8465 enumeration type `enum mode_class' defined in `machmode.h'. The 8466 possible mode classes are: 8467 8468 `MODE_INT' 8469 Integer modes. By default these are `BImode', `QImode', `HImode', 8470 `SImode', `DImode', `TImode', and `OImode'. 8471 8472 `MODE_PARTIAL_INT' 8473 The "partial integer" modes, `PQImode', `PHImode', `PSImode' and 8474 `PDImode'. 8475 8476 `MODE_FLOAT' 8477 Floating point modes. By default these are `QFmode', `HFmode', 8478 `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'. 8479 8480 `MODE_DECIMAL_FLOAT' 8481 Decimal floating point modes. By default these are `SDmode', 8482 `DDmode' and `TDmode'. 8483 8484 `MODE_FRACT' 8485 Signed fractional modes. By default these are `QQmode', `HQmode', 8486 `SQmode', `DQmode' and `TQmode'. 8487 8488 `MODE_UFRACT' 8489 Unsigned fractional modes. By default these are `UQQmode', 8490 `UHQmode', `USQmode', `UDQmode' and `UTQmode'. 8491 8492 `MODE_ACCUM' 8493 Signed accumulator modes. By default these are `HAmode', 8494 `SAmode', `DAmode' and `TAmode'. 8495 8496 `MODE_UACCUM' 8497 Unsigned accumulator modes. By default these are `UHAmode', 8498 `USAmode', `UDAmode' and `UTAmode'. 8499 8500 `MODE_COMPLEX_INT' 8501 Complex integer modes. (These are not currently implemented). 8502 8503 `MODE_COMPLEX_FLOAT' 8504 Complex floating point modes. By default these are `QCmode', 8505 `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'. 8506 8507 `MODE_FUNCTION' 8508 Algol or Pascal function variables including a static chain. 8509 (These are not currently implemented). 8510 8511 `MODE_CC' 8512 Modes representing condition code values. These are `CCmode' plus 8513 any `CC_MODE' modes listed in the `MACHINE-modes.def'. *Note Jump 8514 Patterns::, also see *note Condition Code::. 8515 8516 `MODE_RANDOM' 8517 This is a catchall mode class for modes which don't fit into the 8518 above classes. Currently `VOIDmode' and `BLKmode' are in 8519 `MODE_RANDOM'. 8520 8521 Here are some C macros that relate to machine modes: 8522 8523 `GET_MODE (X)' 8524 Returns the machine mode of the RTX X. 8525 8526 `PUT_MODE (X, NEWMODE)' 8527 Alters the machine mode of the RTX X to be NEWMODE. 8528 8529 `NUM_MACHINE_MODES' 8530 Stands for the number of machine modes available on the target 8531 machine. This is one greater than the largest numeric value of any 8532 machine mode. 8533 8534 `GET_MODE_NAME (M)' 8535 Returns the name of mode M as a string. 8536 8537 `GET_MODE_CLASS (M)' 8538 Returns the mode class of mode M. 8539 8540 `GET_MODE_WIDER_MODE (M)' 8541 Returns the next wider natural mode. For example, the expression 8542 `GET_MODE_WIDER_MODE (QImode)' returns `HImode'. 8543 8544 `GET_MODE_SIZE (M)' 8545 Returns the size in bytes of a datum of mode M. 8546 8547 `GET_MODE_BITSIZE (M)' 8548 Returns the size in bits of a datum of mode M. 8549 8550 `GET_MODE_IBIT (M)' 8551 Returns the number of integral bits of a datum of fixed-point mode 8552 M. 8553 8554 `GET_MODE_FBIT (M)' 8555 Returns the number of fractional bits of a datum of fixed-point 8556 mode M. 8557 8558 `GET_MODE_MASK (M)' 8559 Returns a bitmask containing 1 for all bits in a word that fit 8560 within mode M. This macro can only be used for modes whose 8561 bitsize is less than or equal to `HOST_BITS_PER_INT'. 8562 8563 `GET_MODE_ALIGNMENT (M)' 8564 Return the required alignment, in bits, for an object of mode M. 8565 8566 `GET_MODE_UNIT_SIZE (M)' 8567 Returns the size in bytes of the subunits of a datum of mode M. 8568 This is the same as `GET_MODE_SIZE' except in the case of complex 8569 modes. For them, the unit size is the size of the real or 8570 imaginary part. 8571 8572 `GET_MODE_NUNITS (M)' 8573 Returns the number of units contained in a mode, i.e., 8574 `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'. 8575 8576 `GET_CLASS_NARROWEST_MODE (C)' 8577 Returns the narrowest mode in mode class C. 8578 8579 The global variables `byte_mode' and `word_mode' contain modes whose 8580 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or 8581 `BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode' 8582 and `SImode', respectively. 8583 8584 8585 File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 8586 8587 10.7 Constant Expression Types 8588 ============================== 8589 8590 The simplest RTL expressions are those that represent constant values. 8591 8592 `(const_int I)' 8593 This type of expression represents the integer value I. I is 8594 customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)', 8595 which is equivalent to `XWINT (EXP, 0)'. 8596 8597 Constants generated for modes with fewer bits than in 8598 `HOST_WIDE_INT' must be sign extended to full width (e.g., with 8599 `gen_int_mode'). For constants for modes with more bits than in 8600 `HOST_WIDE_INT' the implied high order bits of that constant are 8601 copies of the top bit. Note however that values are neither 8602 inherently signed nor inherently unsigned; where necessary, 8603 signedness is determined by the rtl operation instead. 8604 8605 There is only one expression object for the integer value zero; it 8606 is the value of the variable `const0_rtx'. Likewise, the only 8607 expression for integer value one is found in `const1_rtx', the only 8608 expression for integer value two is found in `const2_rtx', and the 8609 only expression for integer value negative one is found in 8610 `constm1_rtx'. Any attempt to create an expression of code 8611 `const_int' and value zero, one, two or negative one will return 8612 `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as 8613 appropriate. 8614 8615 Similarly, there is only one object for the integer whose value is 8616 `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If 8617 `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will 8618 point to the same object. If `STORE_FLAG_VALUE' is -1, 8619 `const_true_rtx' and `constm1_rtx' will point to the same object. 8620 8621 `(const_double:M I0 I1 ...)' 8622 Represents either a floating-point constant of mode M or an 8623 integer constant too large to fit into `HOST_BITS_PER_WIDE_INT' 8624 bits but small enough to fit within twice that number of bits (GCC 8625 does not provide a mechanism to represent even larger constants). 8626 In the latter case, M will be `VOIDmode'. For integral values 8627 constants for modes with more bits than twice the number in 8628 `HOST_WIDE_INT' the implied high order bits of that constant are 8629 copies of the top bit of `CONST_DOUBLE_HIGH'. Note however that 8630 integral values are neither inherently signed nor inherently 8631 unsigned; where necessary, signedness is determined by the rtl 8632 operation instead. 8633 8634 If M is `VOIDmode', the bits of the value are stored in I0 and I1. 8635 I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and 8636 I1 with `CONST_DOUBLE_HIGH'. 8637 8638 If the constant is floating point (regardless of its precision), 8639 then the number of integers used to store the value depends on the 8640 size of `REAL_VALUE_TYPE' (*note Floating Point::). The integers 8641 represent a floating point number, but not precisely in the target 8642 machine's or host machine's floating point format. To convert 8643 them to the precise bit pattern used by the target machine, use 8644 the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 8645 Output::). 8646 8647 `(const_fixed:M ...)' 8648 Represents a fixed-point constant of mode M. The operand is a 8649 data structure of type `struct fixed_value' and is accessed with 8650 the macro `CONST_FIXED_VALUE'. The high part of data is accessed 8651 with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with 8652 `CONST_FIXED_VALUE_LOW'. 8653 8654 `(const_vector:M [X0 X1 ...])' 8655 Represents a vector constant. The square brackets stand for the 8656 vector containing the constant elements. X0, X1 and so on are the 8657 `const_int', `const_double' or `const_fixed' elements. 8658 8659 The number of units in a `const_vector' is obtained with the macro 8660 `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'. 8661 8662 Individual elements in a vector constant are accessed with the 8663 macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V 8664 is the vector constant and N is the element desired. 8665 8666 `(const_string STR)' 8667 Represents a constant string with value STR. Currently this is 8668 used only for insn attributes (*note Insn Attributes::) since 8669 constant strings in C are placed in memory. 8670 8671 `(symbol_ref:MODE SYMBOL)' 8672 Represents the value of an assembler label for data. SYMBOL is a 8673 string that describes the name of the assembler label. If it 8674 starts with a `*', the label is the rest of SYMBOL not including 8675 the `*'. Otherwise, the label is SYMBOL, usually prefixed with 8676 `_'. 8677 8678 The `symbol_ref' contains a mode, which is usually `Pmode'. 8679 Usually that is the only mode for which a symbol is directly valid. 8680 8681 `(label_ref:MODE LABEL)' 8682 Represents the value of an assembler label for code. It contains 8683 one operand, an expression, which must be a `code_label' or a 8684 `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the 8685 instruction sequence to identify the place where the label should 8686 go. 8687 8688 The reason for using a distinct expression type for code label 8689 references is so that jump optimization can distinguish them. 8690 8691 The `label_ref' contains a mode, which is usually `Pmode'. 8692 Usually that is the only mode for which a label is directly valid. 8693 8694 `(const:M EXP)' 8695 Represents a constant that is the result of an assembly-time 8696 arithmetic computation. The operand, EXP, is an expression that 8697 contains only constants (`const_int', `symbol_ref' and `label_ref' 8698 expressions) combined with `plus' and `minus'. However, not all 8699 combinations are valid, since the assembler cannot do arbitrary 8700 arithmetic on relocatable symbols. 8701 8702 M should be `Pmode'. 8703 8704 `(high:M EXP)' 8705 Represents the high-order bits of EXP, usually a `symbol_ref'. 8706 The number of bits is machine-dependent and is normally the number 8707 of bits specified in an instruction that initializes the high 8708 order bits of a register. It is used with `lo_sum' to represent 8709 the typical two-instruction sequence used in RISC machines to 8710 reference a global memory location. 8711 8712 M should be `Pmode'. 8713 8714 The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in 8715 mode MODE. If mode MODE is of mode class `MODE_INT', it returns 8716 `const0_rtx'. If mode MODE is of mode class `MODE_FLOAT', it returns a 8717 `CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 8718 `CONST_VECTOR' expression in mode MODE. Similarly, the macro 8719 `CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 8720 and similarly for `CONST2_RTX'. The `CONST1_RTX' and `CONST2_RTX' 8721 macros are undefined for vector modes. 8722 8723 8724 File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 8725 8726 10.8 Registers and Memory 8727 ========================= 8728 8729 Here are the RTL expression types for describing access to machine 8730 registers and to main memory. 8731 8732 `(reg:M N)' 8733 For small values of the integer N (those that are less than 8734 `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 8735 register number N: a "hard register". For larger values of N, it 8736 stands for a temporary value or "pseudo register". The compiler's 8737 strategy is to generate code assuming an unlimited number of such 8738 pseudo registers, and later convert them into hard registers or 8739 into memory references. 8740 8741 M is the machine mode of the reference. It is necessary because 8742 machines can generally refer to each register in more than one 8743 mode. For example, a register may contain a full word but there 8744 may be instructions to refer to it as a half word or as a single 8745 byte, as well as instructions to refer to it as a floating point 8746 number of various precisions. 8747 8748 Even for a register that the machine can access in only one mode, 8749 the mode must always be specified. 8750 8751 The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine 8752 description, since the number of hard registers on the machine is 8753 an invariant characteristic of the machine. Note, however, that 8754 not all of the machine registers must be general registers. All 8755 the machine registers that can be used for storage of data are 8756 given hard register numbers, even those that can be used only in 8757 certain instructions or can hold only certain types of data. 8758 8759 A hard register may be accessed in various modes throughout one 8760 function, but each pseudo register is given a natural mode and is 8761 accessed only in that mode. When it is necessary to describe an 8762 access to a pseudo register using a nonnatural mode, a `subreg' 8763 expression is used. 8764 8765 A `reg' expression with a machine mode that specifies more than 8766 one word of data may actually stand for several consecutive 8767 registers. If in addition the register number specifies a 8768 hardware register, then it actually represents several consecutive 8769 hardware registers starting with the specified one. 8770 8771 Each pseudo register number used in a function's RTL code is 8772 represented by a unique `reg' expression. 8773 8774 Some pseudo register numbers, those within the range of 8775 `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear 8776 during the RTL generation phase and are eliminated before the 8777 optimization phases. These represent locations in the stack frame 8778 that cannot be determined until RTL generation for the function 8779 has been completed. The following virtual register numbers are 8780 defined: 8781 8782 `VIRTUAL_INCOMING_ARGS_REGNUM' 8783 This points to the first word of the incoming arguments 8784 passed on the stack. Normally these arguments are placed 8785 there by the caller, but the callee may have pushed some 8786 arguments that were previously passed in registers. 8787 8788 When RTL generation is complete, this virtual register is 8789 replaced by the sum of the register given by 8790 `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'. 8791 8792 `VIRTUAL_STACK_VARS_REGNUM' 8793 If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 8794 points to immediately above the first variable on the stack. 8795 Otherwise, it points to the first variable on the stack. 8796 8797 `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 8798 register given by `FRAME_POINTER_REGNUM' and the value 8799 `STARTING_FRAME_OFFSET'. 8800 8801 `VIRTUAL_STACK_DYNAMIC_REGNUM' 8802 This points to the location of dynamically allocated memory 8803 on the stack immediately after the stack pointer has been 8804 adjusted by the amount of memory desired. 8805 8806 This virtual register is replaced by the sum of the register 8807 given by `STACK_POINTER_REGNUM' and the value 8808 `STACK_DYNAMIC_OFFSET'. 8809 8810 `VIRTUAL_OUTGOING_ARGS_REGNUM' 8811 This points to the location in the stack at which outgoing 8812 arguments should be written when the stack is pre-pushed 8813 (arguments pushed using push insns should always use 8814 `STACK_POINTER_REGNUM'). 8815 8816 This virtual register is replaced by the sum of the register 8817 given by `STACK_POINTER_REGNUM' and the value 8818 `STACK_POINTER_OFFSET'. 8819 8820 `(subreg:M1 REG:M2 BYTENUM)' 8821 `subreg' expressions are used to refer to a register in a machine 8822 mode other than its natural one, or to refer to one register of a 8823 multi-part `reg' that actually refers to several registers. 8824 8825 Each pseudo register has a natural mode. If it is necessary to 8826 operate on it in a different mode, the register must be enclosed 8827 in a `subreg'. 8828 8829 There are currently three supported types for the first operand of 8830 a `subreg': 8831 * pseudo registers This is the most common case. Most 8832 `subreg's have pseudo `reg's as their first operand. 8833 8834 * mem `subreg's of `mem' were common in earlier versions of GCC 8835 and are still supported. During the reload pass these are 8836 replaced by plain `mem's. On machines that do not do 8837 instruction scheduling, use of `subreg's of `mem' are still 8838 used, but this is no longer recommended. Such `subreg's are 8839 considered to be `register_operand's rather than 8840 `memory_operand's before and during reload. Because of this, 8841 the scheduling passes cannot properly schedule instructions 8842 with `subreg's of `mem', so for machines that do scheduling, 8843 `subreg's of `mem' should never be used. To support this, 8844 the combine and recog passes have explicit code to inhibit 8845 the creation of `subreg's of `mem' when `INSN_SCHEDULING' is 8846 defined. 8847 8848 The use of `subreg's of `mem' after the reload pass is an area 8849 that is not well understood and should be avoided. There is 8850 still some code in the compiler to support this, but this 8851 code has possibly rotted. This use of `subreg's is 8852 discouraged and will most likely not be supported in the 8853 future. 8854 8855 * hard registers It is seldom necessary to wrap hard registers 8856 in `subreg's; such registers would normally reduce to a 8857 single `reg' rtx. This use of `subreg's is discouraged and 8858 may not be supported in the future. 8859 8860 8861 `subreg's of `subreg's are not supported. Using 8862 `simplify_gen_subreg' is the recommended way to avoid this problem. 8863 8864 `subreg's come in two distinct flavors, each having its own usage 8865 and rules: 8866 8867 Paradoxical subregs 8868 When M1 is strictly wider than M2, the `subreg' expression is 8869 called "paradoxical". The canonical test for this class of 8870 `subreg' is: 8871 8872 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2) 8873 8874 Paradoxical `subreg's can be used as both lvalues and rvalues. 8875 When used as an lvalue, the low-order bits of the source value 8876 are stored in REG and the high-order bits are discarded. 8877 When used as an rvalue, the low-order bits of the `subreg' are 8878 taken from REG while the high-order bits may or may not be 8879 defined. 8880 8881 The high-order bits of rvalues are in the following 8882 circumstances: 8883 8884 * `subreg's of `mem' When M2 is smaller than a word, the 8885 macro `LOAD_EXTEND_OP', can control how the high-order 8886 bits are defined. 8887 8888 * `subreg' of `reg's The upper bits are defined when 8889 `SUBREG_PROMOTED_VAR_P' is true. 8890 `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 8891 bits hold. Such subregs usually represent local 8892 variables, register variables and parameter pseudo 8893 variables that have been promoted to a wider mode. 8894 8895 8896 BYTENUM is always zero for a paradoxical `subreg', even on 8897 big-endian targets. 8898 8899 For example, the paradoxical `subreg': 8900 8901 (set (subreg:SI (reg:HI X) 0) Y) 8902 8903 stores the lower 2 bytes of Y in X and discards the upper 2 8904 bytes. A subsequent: 8905 8906 (set Z (subreg:SI (reg:HI X) 0)) 8907 8908 would set the lower two bytes of Z to Y and set the upper two 8909 bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is 8910 false. 8911 8912 Normal subregs 8913 When M1 is at least as narrow as M2 the `subreg' expression 8914 is called "normal". 8915 8916 Normal `subreg's restrict consideration to certain bits of 8917 REG. There are two cases. If M1 is smaller than a word, the 8918 `subreg' refers to the least-significant part (or "lowpart") 8919 of one word of REG. If M1 is word-sized or greater, the 8920 `subreg' refers to one or more complete words. 8921 8922 When used as an lvalue, `subreg' is a word-based accessor. 8923 Storing to a `subreg' modifies all the words of REG that 8924 overlap the `subreg', but it leaves the other words of REG 8925 alone. 8926 8927 When storing to a normal `subreg' that is smaller than a word, 8928 the other bits of the referenced word are usually left in an 8929 undefined state. This laxity makes it easier to generate 8930 efficient code for such instructions. To represent an 8931 instruction that preserves all the bits outside of those in 8932 the `subreg', use `strict_low_part' or `zero_extract' around 8933 the `subreg'. 8934 8935 BYTENUM must identify the offset of the first byte of the 8936 `subreg' from the start of REG, assuming that REG is laid out 8937 in memory order. The memory order of bytes is defined by two 8938 target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN': 8939 8940 * `WORDS_BIG_ENDIAN', if set to 1, says that byte number 8941 zero is part of the most significant word; otherwise, it 8942 is part of the least significant word. 8943 8944 * `BYTES_BIG_ENDIAN', if set to 1, says that byte number 8945 zero is the most significant byte within a word; 8946 otherwise, it is the least significant byte within a 8947 word. 8948 8949 On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with 8950 `WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 8951 floating point values as if they had the same endianness as 8952 integer values. This works because they handle them solely 8953 as a collection of integer values, with no particular 8954 numerical value. Only real.c and the runtime libraries care 8955 about `FLOAT_WORDS_BIG_ENDIAN'. 8956 8957 Thus, 8958 8959 (subreg:HI (reg:SI X) 2) 8960 8961 on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the 8962 same as 8963 8964 (subreg:HI (reg:SI X) 0) 8965 8966 on a little-endian, `UNITS_PER_WORD == 4' target. Both 8967 `subreg's access the lower two bytes of register X. 8968 8969 8970 A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the 8971 corresponding `MODE_INT' mode, except that it has an unknown 8972 number of undefined bits. For example: 8973 8974 (subreg:PSI (reg:SI 0) 0) 8975 8976 accesses the whole of `(reg:SI 0)', but the exact relationship 8977 between the `PSImode' value and the `SImode' value is not defined. 8978 If we assume `UNITS_PER_WORD <= 4', then the following two 8979 `subreg's: 8980 8981 (subreg:PSI (reg:DI 0) 0) 8982 (subreg:PSI (reg:DI 0) 4) 8983 8984 represent independent 4-byte accesses to the two halves of 8985 `(reg:DI 0)'. Both `subreg's have an unknown number of undefined 8986 bits. 8987 8988 If `UNITS_PER_WORD <= 2' then these two `subreg's: 8989 8990 (subreg:HI (reg:PSI 0) 0) 8991 (subreg:HI (reg:PSI 0) 2) 8992 8993 represent independent 2-byte accesses that together span the whole 8994 of `(reg:PSI 0)'. Storing to the first `subreg' does not affect 8995 the value of the second, and vice versa. `(reg:PSI 0)' has an 8996 unknown number of undefined bits, so the assignment: 8997 8998 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 8999 9000 does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value 9001 `(reg:HI 4)'. 9002 9003 The rules above apply to both pseudo REGs and hard REGs. If the 9004 semantics are not correct for particular combinations of M1, M2 9005 and hard REG, the target-specific code must ensure that those 9006 combinations are never used. For example: 9007 9008 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS) 9009 9010 must be true for every class CLASS that includes REG. 9011 9012 The first operand of a `subreg' expression is customarily accessed 9013 with the `SUBREG_REG' macro and the second operand is customarily 9014 accessed with the `SUBREG_BYTE' macro. 9015 9016 It has been several years since a platform in which 9017 `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been 9018 tested. Anyone wishing to support such a platform in the future 9019 may be confronted with code rot. 9020 9021 `(scratch:M)' 9022 This represents a scratch register that will be required for the 9023 execution of a single instruction and not used subsequently. It is 9024 converted into a `reg' by either the local register allocator or 9025 the reload pass. 9026 9027 `scratch' is usually present inside a `clobber' operation (*note 9028 Side Effects::). 9029 9030 `(cc0)' 9031 This refers to the machine's condition code register. It has no 9032 operands and may not have a machine mode. There are two ways to 9033 use it: 9034 9035 * To stand for a complete set of condition code flags. This is 9036 best on most machines, where each comparison sets the entire 9037 series of flags. 9038 9039 With this technique, `(cc0)' may be validly used in only two 9040 contexts: as the destination of an assignment (in test and 9041 compare instructions) and in comparison operators comparing 9042 against zero (`const_int' with value zero; that is to say, 9043 `const0_rtx'). 9044 9045 * To stand for a single flag that is the result of a single 9046 condition. This is useful on machines that have only a 9047 single flag bit, and in which comparison instructions must 9048 specify the condition to test. 9049 9050 With this technique, `(cc0)' may be validly used in only two 9051 contexts: as the destination of an assignment (in test and 9052 compare instructions) where the source is a comparison 9053 operator, and as the first operand of `if_then_else' (in a 9054 conditional branch). 9055 9056 There is only one expression object of code `cc0'; it is the value 9057 of the variable `cc0_rtx'. Any attempt to create an expression of 9058 code `cc0' will return `cc0_rtx'. 9059 9060 Instructions can set the condition code implicitly. On many 9061 machines, nearly all instructions set the condition code based on 9062 the value that they compute or store. It is not necessary to 9063 record these actions explicitly in the RTL because the machine 9064 description includes a prescription for recognizing the 9065 instructions that do so (by means of the macro 9066 `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions 9067 whose sole purpose is to set the condition code, and instructions 9068 that use the condition code, need mention `(cc0)'. 9069 9070 On some machines, the condition code register is given a register 9071 number and a `reg' is used instead of `(cc0)'. This is usually the 9072 preferable approach if only a small subset of instructions modify 9073 the condition code. Other machines store condition codes in 9074 general registers; in such cases a pseudo register should be used. 9075 9076 Some machines, such as the SPARC and RS/6000, have two sets of 9077 arithmetic instructions, one that sets and one that does not set 9078 the condition code. This is best handled by normally generating 9079 the instruction that does not set the condition code, and making a 9080 pattern that both performs the arithmetic and sets the condition 9081 code register (which would not be `(cc0)' in this case). For 9082 examples, search for `addcc' and `andcc' in `sparc.md'. 9083 9084 `(pc)' 9085 This represents the machine's program counter. It has no operands 9086 and may not have a machine mode. `(pc)' may be validly used only 9087 in certain specific contexts in jump instructions. 9088 9089 There is only one expression object of code `pc'; it is the value 9090 of the variable `pc_rtx'. Any attempt to create an expression of 9091 code `pc' will return `pc_rtx'. 9092 9093 All instructions that do not jump alter the program counter 9094 implicitly by incrementing it, but there is no need to mention 9095 this in the RTL. 9096 9097 `(mem:M ADDR ALIAS)' 9098 This RTX represents a reference to main memory at an address 9099 represented by the expression ADDR. M specifies how large a unit 9100 of memory is accessed. ALIAS specifies an alias set for the 9101 reference. In general two items are in different alias sets if 9102 they cannot reference the same memory address. 9103 9104 The construct `(mem:BLK (scratch))' is considered to alias all 9105 other memories. Thus it may be used as a memory barrier in 9106 epilogue stack deallocation patterns. 9107 9108 `(concatM RTX RTX)' 9109 This RTX represents the concatenation of two other RTXs. This is 9110 used for complex values. It should only appear in the RTL 9111 attached to declarations and during RTL generation. It should not 9112 appear in the ordinary insn chain. 9113 9114 `(concatnM [RTX ...])' 9115 This RTX represents the concatenation of all the RTX to make a 9116 single value. Like `concat', this should only appear in 9117 declarations, and not in the insn chain. 9118 9119 9120 File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 9121 9122 10.9 RTL Expressions for Arithmetic 9123 =================================== 9124 9125 Unless otherwise specified, all the operands of arithmetic expressions 9126 must be valid for mode M. An operand is valid for mode M if it has 9127 mode M, or if it is a `const_int' or `const_double' and M is a mode of 9128 class `MODE_INT'. 9129 9130 For commutative binary operations, constants should be placed in the 9131 second operand. 9132 9133 `(plus:M X Y)' 9134 `(ss_plus:M X Y)' 9135 `(us_plus:M X Y)' 9136 These three expressions all represent the sum of the values 9137 represented by X and Y carried out in machine mode M. They differ 9138 in their behavior on overflow of integer modes. `plus' wraps 9139 round modulo the width of M; `ss_plus' saturates at the maximum 9140 signed value representable in M; `us_plus' saturates at the 9141 maximum unsigned value. 9142 9143 `(lo_sum:M X Y)' 9144 This expression represents the sum of X and the low-order bits of 9145 Y. It is used with `high' (*note Constants::) to represent the 9146 typical two-instruction sequence used in RISC machines to 9147 reference a global memory location. 9148 9149 The number of low order bits is machine-dependent but is normally 9150 the number of bits in a `Pmode' item minus the number of bits set 9151 by `high'. 9152 9153 M should be `Pmode'. 9154 9155 `(minus:M X Y)' 9156 `(ss_minus:M X Y)' 9157 `(us_minus:M X Y)' 9158 These three expressions represent the result of subtracting Y from 9159 X, carried out in mode M. Behavior on overflow is the same as for 9160 the three variants of `plus' (see above). 9161 9162 `(compare:M X Y)' 9163 Represents the result of subtracting Y from X for purposes of 9164 comparison. The result is computed without overflow, as if with 9165 infinite precision. 9166 9167 Of course, machines can't really subtract with infinite precision. 9168 However, they can pretend to do so when only the sign of the 9169 result will be used, which is the case when the result is stored 9170 in the condition code. And that is the _only_ way this kind of 9171 expression may validly be used: as a value to be stored in the 9172 condition codes, either `(cc0)' or a register. *Note 9173 Comparisons::. 9174 9175 The mode M is not related to the modes of X and Y, but instead is 9176 the mode of the condition code value. If `(cc0)' is used, it is 9177 `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often 9178 `CCmode'. *Note Condition Code::. If M is `VOIDmode' or 9179 `CCmode', the operation returns sufficient information (in an 9180 unspecified format) so that any comparison operator can be applied 9181 to the result of the `COMPARE' operation. For other modes in 9182 class `MODE_CC', the operation only returns a subset of this 9183 information. 9184 9185 Normally, X and Y must have the same mode. Otherwise, `compare' 9186 is valid only if the mode of X is in class `MODE_INT' and Y is a 9187 `const_int' or `const_double' with mode `VOIDmode'. The mode of X 9188 determines what mode the comparison is to be done in; thus it must 9189 not be `VOIDmode'. 9190 9191 If one of the operands is a constant, it should be placed in the 9192 second operand and the comparison code adjusted as appropriate. 9193 9194 A `compare' specifying two `VOIDmode' constants is not valid since 9195 there is no way to know in what mode the comparison is to be 9196 performed; the comparison must either be folded during the 9197 compilation or the first operand must be loaded into a register 9198 while its mode is still known. 9199 9200 `(neg:M X)' 9201 `(ss_neg:M X)' 9202 `(us_neg:M X)' 9203 These two expressions represent the negation (subtraction from 9204 zero) of the value represented by X, carried out in mode M. They 9205 differ in the behavior on overflow of integer modes. In the case 9206 of `neg', the negation of the operand may be a number not 9207 representable in mode M, in which case it is truncated to M. 9208 `ss_neg' and `us_neg' ensure that an out-of-bounds result 9209 saturates to the maximum or minimum signed or unsigned value. 9210 9211 `(mult:M X Y)' 9212 `(ss_mult:M X Y)' 9213 `(us_mult:M X Y)' 9214 Represents the signed product of the values represented by X and Y 9215 carried out in machine mode M. `ss_mult' and `us_mult' ensure 9216 that an out-of-bounds result saturates to the maximum or minimum 9217 signed or unsigned value. 9218 9219 Some machines support a multiplication that generates a product 9220 wider than the operands. Write the pattern for this as 9221 9222 (mult:M (sign_extend:M X) (sign_extend:M Y)) 9223 9224 where M is wider than the modes of X and Y, which need not be the 9225 same. 9226 9227 For unsigned widening multiplication, use the same idiom, but with 9228 `zero_extend' instead of `sign_extend'. 9229 9230 `(fma:M X Y Z)' 9231 Represents the `fma', `fmaf', and `fmal' builtin functions that do 9232 a combined multiply of X and Y and then adding toZ without doing 9233 an intermediate rounding step. 9234 9235 `(div:M X Y)' 9236 `(ss_div:M X Y)' 9237 Represents the quotient in signed division of X by Y, carried out 9238 in machine mode M. If M is a floating point mode, it represents 9239 the exact quotient; otherwise, the integerized quotient. `ss_div' 9240 ensures that an out-of-bounds result saturates to the maximum or 9241 minimum signed value. 9242 9243 Some machines have division instructions in which the operands and 9244 quotient widths are not all the same; you should represent such 9245 instructions using `truncate' and `sign_extend' as in, 9246 9247 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 9248 9249 `(udiv:M X Y)' 9250 `(us_div:M X Y)' 9251 Like `div' but represents unsigned division. `us_div' ensures 9252 that an out-of-bounds result saturates to the maximum or minimum 9253 unsigned value. 9254 9255 `(mod:M X Y)' 9256 `(umod:M X Y)' 9257 Like `div' and `udiv' but represent the remainder instead of the 9258 quotient. 9259 9260 `(smin:M X Y)' 9261 `(smax:M X Y)' 9262 Represents the smaller (for `smin') or larger (for `smax') of X 9263 and Y, interpreted as signed values in mode M. When used with 9264 floating point, if both operands are zeros, or if either operand 9265 is `NaN', then it is unspecified which of the two operands is 9266 returned as the result. 9267 9268 `(umin:M X Y)' 9269 `(umax:M X Y)' 9270 Like `smin' and `smax', but the values are interpreted as unsigned 9271 integers. 9272 9273 `(not:M X)' 9274 Represents the bitwise complement of the value represented by X, 9275 carried out in mode M, which must be a fixed-point machine mode. 9276 9277 `(and:M X Y)' 9278 Represents the bitwise logical-and of the values represented by X 9279 and Y, carried out in machine mode M, which must be a fixed-point 9280 machine mode. 9281 9282 `(ior:M X Y)' 9283 Represents the bitwise inclusive-or of the values represented by X 9284 and Y, carried out in machine mode M, which must be a fixed-point 9285 mode. 9286 9287 `(xor:M X Y)' 9288 Represents the bitwise exclusive-or of the values represented by X 9289 and Y, carried out in machine mode M, which must be a fixed-point 9290 mode. 9291 9292 `(ashift:M X C)' 9293 `(ss_ashift:M X C)' 9294 `(us_ashift:M X C)' 9295 These three expressions represent the result of arithmetically 9296 shifting X left by C places. They differ in their behavior on 9297 overflow of integer modes. An `ashift' operation is a plain shift 9298 with no special behavior in case of a change in the sign bit; 9299 `ss_ashift' and `us_ashift' saturates to the minimum or maximum 9300 representable value if any of the bits shifted out differs from 9301 the final sign bit. 9302 9303 X have mode M, a fixed-point machine mode. C be a fixed-point 9304 mode or be a constant with mode `VOIDmode'; which mode is 9305 determined by the mode called for in the machine description entry 9306 for the left-shift instruction. For example, on the VAX, the mode 9307 of C is `QImode' regardless of M. 9308 9309 `(lshiftrt:M X C)' 9310 `(ashiftrt:M X C)' 9311 Like `ashift' but for right shift. Unlike the case for left shift, 9312 these two operations are distinct. 9313 9314 `(rotate:M X C)' 9315 `(rotatert:M X C)' 9316 Similar but represent left and right rotate. If C is a constant, 9317 use `rotate'. 9318 9319 `(abs:M X)' 9320 9321 `(ss_abs:M X)' 9322 Represents the absolute value of X, computed in mode M. `ss_abs' 9323 ensures that an out-of-bounds result saturates to the maximum 9324 signed value. 9325 9326 `(sqrt:M X)' 9327 Represents the square root of X, computed in mode M. Most often M 9328 will be a floating point mode. 9329 9330 `(ffs:M X)' 9331 Represents one plus the index of the least significant 1-bit in X, 9332 represented as an integer of mode M. (The value is zero if X is 9333 zero.) The mode of X must be M or `VOIDmode'. 9334 9335 `(clrsb:M X)' 9336 Represents the number of redundant leading sign bits in X, 9337 represented as an integer of mode M, starting at the most 9338 significant bit position. This is one less than the number of 9339 leading sign bits (either 0 or 1), with no special cases. The 9340 mode of X must be M or `VOIDmode'. 9341 9342 `(clz:M X)' 9343 Represents the number of leading 0-bits in X, represented as an 9344 integer of mode M, starting at the most significant bit position. 9345 If X is zero, the value is determined by 9346 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 9347 of the few expressions that is not invariant under widening. The 9348 mode of X must be M or `VOIDmode'. 9349 9350 `(ctz:M X)' 9351 Represents the number of trailing 0-bits in X, represented as an 9352 integer of mode M, starting at the least significant bit position. 9353 If X is zero, the value is determined by 9354 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 9355 `ctz(x)' is equivalent to `ffs(X) - 1'. The mode of X must be M 9356 or `VOIDmode'. 9357 9358 `(popcount:M X)' 9359 Represents the number of 1-bits in X, represented as an integer of 9360 mode M. The mode of X must be M or `VOIDmode'. 9361 9362 `(parity:M X)' 9363 Represents the number of 1-bits modulo 2 in X, represented as an 9364 integer of mode M. The mode of X must be M or `VOIDmode'. 9365 9366 `(bswap:M X)' 9367 Represents the value X with the order of bytes reversed, carried 9368 out in mode M, which must be a fixed-point machine mode. The mode 9369 of X must be M or `VOIDmode'. 9370 9371 9372 File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 9373 9374 10.10 Comparison Operations 9375 =========================== 9376 9377 Comparison operators test a relation on two operands and are considered 9378 to represent a machine-dependent nonzero value described by, but not 9379 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation 9380 holds, or zero if it does not, for comparison operators whose results 9381 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 9382 relation holds, or zero if it does not, for comparison operators that 9383 return floating-point values, and a vector of either 9384 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 9385 zeros if it does not, for comparison operators that return vector 9386 results. The mode of the comparison operation is independent of the 9387 mode of the data being compared. If the comparison operation is being 9388 tested (e.g., the first operand of an `if_then_else'), the mode must be 9389 `VOIDmode'. 9390 9391 There are two ways that comparison operations may be used. The 9392 comparison operators may be used to compare the condition codes `(cc0)' 9393 against zero, as in `(eq (cc0) (const_int 0))'. Such a construct 9394 actually refers to the result of the preceding instruction in which the 9395 condition codes were set. The instruction setting the condition code 9396 must be adjacent to the instruction using the condition code; only 9397 `note' insns may separate them. 9398 9399 Alternatively, a comparison operation may directly compare two data 9400 objects. The mode of the comparison is determined by the operands; they 9401 must both be valid for a common machine mode. A comparison with both 9402 operands constant would be invalid as the machine mode could not be 9403 deduced from it, but such a comparison should never exist in RTL due to 9404 constant folding. 9405 9406 In the example above, if `(cc0)' were last set to `(compare X Y)', the 9407 comparison operation is identical to `(eq X Y)'. Usually only one style 9408 of comparisons is supported on a particular machine, but the combine 9409 pass will try to merge the operations to produce the `eq' shown in case 9410 it exists in the context of the particular insn involved. 9411 9412 Inequality comparisons come in two flavors, signed and unsigned. Thus, 9413 there are distinct expression codes `gt' and `gtu' for signed and 9414 unsigned greater-than. These can produce different results for the same 9415 pair of integer values: for example, 1 is signed greater-than -1 but not 9416 unsigned greater-than, because -1 when regarded as unsigned is actually 9417 `0xffffffff' which is greater than 1. 9418 9419 The signed comparisons are also used for floating point values. 9420 Floating point comparisons are distinguished by the machine modes of 9421 the operands. 9422 9423 `(eq:M X Y)' 9424 `STORE_FLAG_VALUE' if the values represented by X and Y are equal, 9425 otherwise 0. 9426 9427 `(ne:M X Y)' 9428 `STORE_FLAG_VALUE' if the values represented by X and Y are not 9429 equal, otherwise 0. 9430 9431 `(gt:M X Y)' 9432 `STORE_FLAG_VALUE' if the X is greater than Y. If they are 9433 fixed-point, the comparison is done in a signed sense. 9434 9435 `(gtu:M X Y)' 9436 Like `gt' but does unsigned comparison, on fixed-point numbers 9437 only. 9438 9439 `(lt:M X Y)' 9440 `(ltu:M X Y)' 9441 Like `gt' and `gtu' but test for "less than". 9442 9443 `(ge:M X Y)' 9444 `(geu:M X Y)' 9445 Like `gt' and `gtu' but test for "greater than or equal". 9446 9447 `(le:M X Y)' 9448 `(leu:M X Y)' 9449 Like `gt' and `gtu' but test for "less than or equal". 9450 9451 `(if_then_else COND THEN ELSE)' 9452 This is not a comparison operation but is listed here because it is 9453 always used in conjunction with a comparison operation. To be 9454 precise, COND is a comparison expression. This expression 9455 represents a choice, according to COND, between the value 9456 represented by THEN and the one represented by ELSE. 9457 9458 On most machines, `if_then_else' expressions are valid only to 9459 express conditional jumps. 9460 9461 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 9462 Similar to `if_then_else', but more general. Each of TEST1, 9463 TEST2, ... is performed in turn. The result of this expression is 9464 the VALUE corresponding to the first nonzero test, or DEFAULT if 9465 none of the tests are nonzero expressions. 9466 9467 This is currently not valid for instruction patterns and is 9468 supported only for insn attributes. *Note Insn Attributes::. 9469 9470 9471 File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 9472 9473 10.11 Bit-Fields 9474 ================ 9475 9476 Special expression codes exist to represent bit-field instructions. 9477 9478 `(sign_extract:M LOC SIZE POS)' 9479 This represents a reference to a sign-extended bit-field contained 9480 or starting in LOC (a memory or register reference). The bit-field 9481 is SIZE bits wide and starts at bit POS. The compilation option 9482 `BITS_BIG_ENDIAN' says which end of the memory unit POS counts 9483 from. 9484 9485 If LOC is in memory, its mode must be a single-byte integer mode. 9486 If LOC is in a register, the mode to use is specified by the 9487 operand of the `insv' or `extv' pattern (*note Standard Names::) 9488 and is usually a full-word integer mode, which is the default if 9489 none is specified. 9490 9491 The mode of POS is machine-specific and is also specified in the 9492 `insv' or `extv' pattern. 9493 9494 The mode M is the same as the mode that would be used for LOC if 9495 it were a register. 9496 9497 A `sign_extract' can not appear as an lvalue, or part thereof, in 9498 RTL. 9499 9500 `(zero_extract:M LOC SIZE POS)' 9501 Like `sign_extract' but refers to an unsigned or zero-extended 9502 bit-field. The same sequence of bits are extracted, but they are 9503 filled to an entire word with zeros instead of by sign-extension. 9504 9505 Unlike `sign_extract', this type of expressions can be lvalues in 9506 RTL; they may appear on the left side of an assignment, indicating 9507 insertion of a value into the specified bit-field. 9508 9509 9510 File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 9511 9512 10.12 Vector Operations 9513 ======================= 9514 9515 All normal RTL expressions can be used with vector modes; they are 9516 interpreted as operating on each part of the vector independently. 9517 Additionally, there are a few new expressions to describe specific 9518 vector operations. 9519 9520 `(vec_merge:M VEC1 VEC2 ITEMS)' 9521 This describes a merge operation between two vectors. The result 9522 is a vector of mode M; its elements are selected from either VEC1 9523 or VEC2. Which elements are selected is described by ITEMS, which 9524 is a bit mask represented by a `const_int'; a zero bit indicates 9525 the corresponding element in the result vector is taken from VEC2 9526 while a set bit indicates it is taken from VEC1. 9527 9528 `(vec_select:M VEC1 SELECTION)' 9529 This describes an operation that selects parts of a vector. VEC1 9530 is the source vector, and SELECTION is a `parallel' that contains a 9531 `const_int' for each of the subparts of the result vector, giving 9532 the number of the source subpart that should be stored into it. 9533 The result mode M is either the submode for a single element of 9534 VEC1 (if only one subpart is selected), or another vector mode 9535 with that element submode (if multiple subparts are selected). 9536 9537 `(vec_concat:M X1 X2)' 9538 Describes a vector concat operation. The result is a 9539 concatenation of the vectors or scalars X1 and X2; its length is 9540 the sum of the lengths of the two inputs. 9541 9542 `(vec_duplicate:M X)' 9543 This operation converts a scalar into a vector or a small vector 9544 into a larger one by duplicating the input values. The output 9545 vector mode must have the same submodes as the input vector mode 9546 or the scalar modes, and the number of output parts must be an 9547 integer multiple of the number of input parts. 9548 9549 9550 9551 File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 9552 9553 10.13 Conversions 9554 ================= 9555 9556 All conversions between machine modes must be represented by explicit 9557 conversion operations. For example, an expression which is the sum of 9558 a byte and a full word cannot be written as `(plus:SI (reg:QI 34) 9559 (reg:SI 80))' because the `plus' operation requires two operands of the 9560 same machine mode. Therefore, the byte-sized operand is enclosed in a 9561 conversion operation, as in 9562 9563 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 9564 9565 The conversion operation is not a mere placeholder, because there may 9566 be more than one way of converting from a given starting mode to the 9567 desired final mode. The conversion operation code says how to do it. 9568 9569 For all conversion operations, X must not be `VOIDmode' because the 9570 mode in which to do the conversion would not be known. The conversion 9571 must either be done at compile-time or X must be placed into a register. 9572 9573 `(sign_extend:M X)' 9574 Represents the result of sign-extending the value X to machine 9575 mode M. M must be a fixed-point mode and X a fixed-point value of 9576 a mode narrower than M. 9577 9578 `(zero_extend:M X)' 9579 Represents the result of zero-extending the value X to machine 9580 mode M. M must be a fixed-point mode and X a fixed-point value of 9581 a mode narrower than M. 9582 9583 `(float_extend:M X)' 9584 Represents the result of extending the value X to machine mode M. 9585 M must be a floating point mode and X a floating point value of a 9586 mode narrower than M. 9587 9588 `(truncate:M X)' 9589 Represents the result of truncating the value X to machine mode M. 9590 M must be a fixed-point mode and X a fixed-point value of a mode 9591 wider than M. 9592 9593 `(ss_truncate:M X)' 9594 Represents the result of truncating the value X to machine mode M, 9595 using signed saturation in the case of overflow. Both M and the 9596 mode of X must be fixed-point modes. 9597 9598 `(us_truncate:M X)' 9599 Represents the result of truncating the value X to machine mode M, 9600 using unsigned saturation in the case of overflow. Both M and the 9601 mode of X must be fixed-point modes. 9602 9603 `(float_truncate:M X)' 9604 Represents the result of truncating the value X to machine mode M. 9605 M must be a floating point mode and X a floating point value of a 9606 mode wider than M. 9607 9608 `(float:M X)' 9609 Represents the result of converting fixed point value X, regarded 9610 as signed, to floating point mode M. 9611 9612 `(unsigned_float:M X)' 9613 Represents the result of converting fixed point value X, regarded 9614 as unsigned, to floating point mode M. 9615 9616 `(fix:M X)' 9617 When M is a floating-point mode, represents the result of 9618 converting floating point value X (valid for mode M) to an 9619 integer, still represented in floating point mode M, by rounding 9620 towards zero. 9621 9622 When M is a fixed-point mode, represents the result of converting 9623 floating point value X to mode M, regarded as signed. How 9624 rounding is done is not specified, so this operation may be used 9625 validly in compiling C code only for integer-valued operands. 9626 9627 `(unsigned_fix:M X)' 9628 Represents the result of converting floating point value X to 9629 fixed point mode M, regarded as unsigned. How rounding is done is 9630 not specified. 9631 9632 `(fract_convert:M X)' 9633 Represents the result of converting fixed-point value X to 9634 fixed-point mode M, signed integer value X to fixed-point mode M, 9635 floating-point value X to fixed-point mode M, fixed-point value X 9636 to integer mode M regarded as signed, or fixed-point value X to 9637 floating-point mode M. When overflows or underflows happen, the 9638 results are undefined. 9639 9640 `(sat_fract:M X)' 9641 Represents the result of converting fixed-point value X to 9642 fixed-point mode M, signed integer value X to fixed-point mode M, 9643 or floating-point value X to fixed-point mode M. When overflows 9644 or underflows happen, the results are saturated to the maximum or 9645 the minimum. 9646 9647 `(unsigned_fract_convert:M X)' 9648 Represents the result of converting fixed-point value X to integer 9649 mode M regarded as unsigned, or unsigned integer value X to 9650 fixed-point mode M. When overflows or underflows happen, the 9651 results are undefined. 9652 9653 `(unsigned_sat_fract:M X)' 9654 Represents the result of converting unsigned integer value X to 9655 fixed-point mode M. When overflows or underflows happen, the 9656 results are saturated to the maximum or the minimum. 9657 9658 9659 File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 9660 9661 10.14 Declarations 9662 ================== 9663 9664 Declaration expression codes do not represent arithmetic operations but 9665 rather state assertions about their operands. 9666 9667 `(strict_low_part (subreg:M (reg:N R) 0))' 9668 This expression code is used in only one context: as the 9669 destination operand of a `set' expression. In addition, the 9670 operand of this expression must be a non-paradoxical `subreg' 9671 expression. 9672 9673 The presence of `strict_low_part' says that the part of the 9674 register which is meaningful in mode N, but is not part of mode M, 9675 is not to be altered. Normally, an assignment to such a subreg is 9676 allowed to have undefined effects on the rest of the register when 9677 M is less than a word. 9678 9679 9680 File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 9681 9682 10.15 Side Effect Expressions 9683 ============================= 9684 9685 The expression codes described so far represent values, not actions. 9686 But machine instructions never produce values; they are meaningful only 9687 for their side effects on the state of the machine. Special expression 9688 codes are used to represent side effects. 9689 9690 The body of an instruction is always one of these side effect codes; 9691 the codes described above, which represent values, appear only as the 9692 operands of these. 9693 9694 `(set LVAL X)' 9695 Represents the action of storing the value of X into the place 9696 represented by LVAL. LVAL must be an expression representing a 9697 place that can be stored in: `reg' (or `subreg', `strict_low_part' 9698 or `zero_extract'), `mem', `pc', `parallel', or `cc0'. 9699 9700 If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then 9701 X must be valid for that mode. 9702 9703 If LVAL is a `reg' whose machine mode is less than the full width 9704 of the register, then it means that the part of the register 9705 specified by the machine mode is given the specified value and the 9706 rest of the register receives an undefined value. Likewise, if 9707 LVAL is a `subreg' whose machine mode is narrower than the mode of 9708 the register, the rest of the register can be changed in an 9709 undefined way. 9710 9711 If LVAL is a `strict_low_part' of a subreg, then the part of the 9712 register specified by the machine mode of the `subreg' is given 9713 the value X and the rest of the register is not changed. 9714 9715 If LVAL is a `zero_extract', then the referenced part of the 9716 bit-field (a memory or register reference) specified by the 9717 `zero_extract' is given the value X and the rest of the bit-field 9718 is not changed. Note that `sign_extract' can not appear in LVAL. 9719 9720 If LVAL is `(cc0)', it has no machine mode, and X may be either a 9721 `compare' expression or a value that may have any mode. The 9722 latter case represents a "test" instruction. The expression `(set 9723 (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N) 9724 (const_int 0)))'. Use the former expression to save space during 9725 the compilation. 9726 9727 If LVAL is a `parallel', it is used to represent the case of a 9728 function returning a structure in multiple registers. Each element 9729 of the `parallel' is an `expr_list' whose first operand is a `reg' 9730 and whose second operand is a `const_int' representing the offset 9731 (in bytes) into the structure at which the data in that register 9732 corresponds. The first element may be null to indicate that the 9733 structure is also passed partly in memory. 9734 9735 If LVAL is `(pc)', we have a jump instruction, and the 9736 possibilities for X are very limited. It may be a `label_ref' 9737 expression (unconditional jump). It may be an `if_then_else' 9738 (conditional jump), in which case either the second or the third 9739 operand must be `(pc)' (for the case which does not jump) and the 9740 other of the two must be a `label_ref' (for the case which does 9741 jump). X may also be a `mem' or `(plus:SI (pc) Y)', where Y may 9742 be a `reg' or a `mem'; these unusual patterns are used to 9743 represent jumps through branch tables. 9744 9745 If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not 9746 be `VOIDmode' and the mode of X must be valid for the mode of LVAL. 9747 9748 LVAL is customarily accessed with the `SET_DEST' macro and X with 9749 the `SET_SRC' macro. 9750 9751 `(return)' 9752 As the sole expression in a pattern, represents a return from the 9753 current function, on machines where this can be done with one 9754 instruction, such as VAXen. On machines where a multi-instruction 9755 "epilogue" must be executed in order to return from the function, 9756 returning is done by jumping to a label which precedes the 9757 epilogue, and the `return' expression code is never used. 9758 9759 Inside an `if_then_else' expression, represents the value to be 9760 placed in `pc' to return to the caller. 9761 9762 Note that an insn pattern of `(return)' is logically equivalent to 9763 `(set (pc) (return))', but the latter form is never used. 9764 9765 `(simple_return)' 9766 Like `(return)', but truly represents only a function return, while 9767 `(return)' may represent an insn that also performs other functions 9768 of the function epilogue. Like `(return)', this may also occur in 9769 conditional jumps. 9770 9771 `(call FUNCTION NARGS)' 9772 Represents a function call. FUNCTION is a `mem' expression whose 9773 address is the address of the function to be called. NARGS is an 9774 expression which can be used for two purposes: on some machines it 9775 represents the number of bytes of stack argument; on others, it 9776 represents the number of argument registers. 9777 9778 Each machine has a standard machine mode which FUNCTION must have. 9779 The machine description defines macro `FUNCTION_MODE' to expand 9780 into the requisite mode name. The purpose of this mode is to 9781 specify what kind of addressing is allowed, on machines where the 9782 allowed kinds of addressing depend on the machine mode being 9783 addressed. 9784 9785 `(clobber X)' 9786 Represents the storing or possible storing of an unpredictable, 9787 undescribed value into X, which must be a `reg', `scratch', 9788 `parallel' or `mem' expression. 9789 9790 One place this is used is in string instructions that store 9791 standard values into particular hard registers. It may not be 9792 worth the trouble to describe the values that are stored, but it 9793 is essential to inform the compiler that the registers will be 9794 altered, lest it attempt to keep data in them across the string 9795 instruction. 9796 9797 If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it 9798 means that all memory locations must be presumed clobbered. If X 9799 is a `parallel', it has the same meaning as a `parallel' in a 9800 `set' expression. 9801 9802 Note that the machine description classifies certain hard 9803 registers as "call-clobbered". All function call instructions are 9804 assumed by default to clobber these registers, so there is no need 9805 to use `clobber' expressions to indicate this fact. Also, each 9806 function call is assumed to have the potential to alter any memory 9807 location, unless the function is declared `const'. 9808 9809 If the last group of expressions in a `parallel' are each a 9810 `clobber' expression whose arguments are `reg' or `match_scratch' 9811 (*note RTL Template::) expressions, the combiner phase can add the 9812 appropriate `clobber' expressions to an insn it has constructed 9813 when doing so will cause a pattern to be matched. 9814 9815 This feature can be used, for example, on a machine that whose 9816 multiply and add instructions don't use an MQ register but which 9817 has an add-accumulate instruction that does clobber the MQ 9818 register. Similarly, a combined instruction might require a 9819 temporary register while the constituent instructions might not. 9820 9821 When a `clobber' expression for a register appears inside a 9822 `parallel' with other side effects, the register allocator 9823 guarantees that the register is unoccupied both before and after 9824 that insn if it is a hard register clobber. For pseudo-register 9825 clobber, the register allocator and the reload pass do not assign 9826 the same hard register to the clobber and the input operands if 9827 there is an insn alternative containing the `&' constraint (*note 9828 Modifiers::) for the clobber and the hard register is in register 9829 classes of the clobber in the alternative. You can clobber either 9830 a specific hard register, a pseudo register, or a `scratch' 9831 expression; in the latter two cases, GCC will allocate a hard 9832 register that is available there for use as a temporary. 9833 9834 For instructions that require a temporary register, you should use 9835 `scratch' instead of a pseudo-register because this will allow the 9836 combiner phase to add the `clobber' when required. You do this by 9837 coding (`clobber' (`match_scratch' ...)). If you do clobber a 9838 pseudo register, use one which appears nowhere else--generate a 9839 new one each time. Otherwise, you may confuse CSE. 9840 9841 There is one other known use for clobbering a pseudo register in a 9842 `parallel': when one of the input operands of the insn is also 9843 clobbered by the insn. In this case, using the same pseudo 9844 register in the clobber and elsewhere in the insn produces the 9845 expected results. 9846 9847 `(use X)' 9848 Represents the use of the value of X. It indicates that the value 9849 in X at this point in the program is needed, even though it may 9850 not be apparent why this is so. Therefore, the compiler will not 9851 attempt to delete previous instructions whose only effect is to 9852 store a value in X. X must be a `reg' expression. 9853 9854 In some situations, it may be tempting to add a `use' of a 9855 register in a `parallel' to describe a situation where the value 9856 of a special register will modify the behavior of the instruction. 9857 A hypothetical example might be a pattern for an addition that can 9858 either wrap around or use saturating addition depending on the 9859 value of a special control register: 9860 9861 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 9862 (reg:SI 4)] 0)) 9863 (use (reg:SI 1))]) 9864 9865 This will not work, several of the optimizers only look at 9866 expressions locally; it is very likely that if you have multiple 9867 insns with identical inputs to the `unspec', they will be 9868 optimized away even if register 1 changes in between. 9869 9870 This means that `use' can _only_ be used to describe that the 9871 register is live. You should think twice before adding `use' 9872 statements, more often you will want to use `unspec' instead. The 9873 `use' RTX is most commonly useful to describe that a fixed 9874 register is implicitly used in an insn. It is also safe to use in 9875 patterns where the compiler knows for other reasons that the result 9876 of the whole pattern is variable, such as `movmemM' or `call' 9877 patterns. 9878 9879 During the reload phase, an insn that has a `use' as pattern can 9880 carry a reg_equal note. These `use' insns will be deleted before 9881 the reload phase exits. 9882 9883 During the delayed branch scheduling phase, X may be an insn. 9884 This indicates that X previously was located at this place in the 9885 code and its data dependencies need to be taken into account. 9886 These `use' insns will be deleted before the delayed branch 9887 scheduling phase exits. 9888 9889 `(parallel [X0 X1 ...])' 9890 Represents several side effects performed in parallel. The square 9891 brackets stand for a vector; the operand of `parallel' is a vector 9892 of expressions. X0, X1 and so on are individual side effect 9893 expressions--expressions of code `set', `call', `return', 9894 `simple_return', `clobber' or `use'. 9895 9896 "In parallel" means that first all the values used in the 9897 individual side-effects are computed, and second all the actual 9898 side-effects are performed. For example, 9899 9900 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 9901 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 9902 9903 says unambiguously that the values of hard register 1 and the 9904 memory location addressed by it are interchanged. In both places 9905 where `(reg:SI 1)' appears as a memory address it refers to the 9906 value in register 1 _before_ the execution of the insn. 9907 9908 It follows that it is _incorrect_ to use `parallel' and expect the 9909 result of one `set' to be available for the next one. For 9910 example, people sometimes attempt to represent a jump-if-zero 9911 instruction this way: 9912 9913 (parallel [(set (cc0) (reg:SI 34)) 9914 (set (pc) (if_then_else 9915 (eq (cc0) (const_int 0)) 9916 (label_ref ...) 9917 (pc)))]) 9918 9919 But this is incorrect, because it says that the jump condition 9920 depends on the condition code value _before_ this instruction, not 9921 on the new value that is set by this instruction. 9922 9923 Peephole optimization, which takes place together with final 9924 assembly code output, can produce insns whose patterns consist of 9925 a `parallel' whose elements are the operands needed to output the 9926 resulting assembler code--often `reg', `mem' or constant 9927 expressions. This would not be well-formed RTL at any other stage 9928 in compilation, but it is ok then because no further optimization 9929 remains to be done. However, the definition of the macro 9930 `NOTICE_UPDATE_CC', if any, must deal with such insns if you 9931 define any peephole optimizations. 9932 9933 `(cond_exec [COND EXPR])' 9934 Represents a conditionally executed expression. The EXPR is 9935 executed only if the COND is nonzero. The COND expression must 9936 not have side-effects, but the EXPR may very well have 9937 side-effects. 9938 9939 `(sequence [INSNS ...])' 9940 Represents a sequence of insns. Each of the INSNS that appears in 9941 the vector is suitable for appearing in the chain of insns, so it 9942 must be an `insn', `jump_insn', `call_insn', `code_label', 9943 `barrier' or `note'. 9944 9945 A `sequence' RTX is never placed in an actual insn during RTL 9946 generation. It represents the sequence of insns that result from a 9947 `define_expand' _before_ those insns are passed to `emit_insn' to 9948 insert them in the chain of insns. When actually inserted, the 9949 individual sub-insns are separated out and the `sequence' is 9950 forgotten. 9951 9952 After delay-slot scheduling is completed, an insn and all the 9953 insns that reside in its delay slots are grouped together into a 9954 `sequence'. The insn requiring the delay slot is the first insn 9955 in the vector; subsequent insns are to be placed in the delay slot. 9956 9957 `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 9958 indicate that a branch insn should be used that will conditionally 9959 annul the effect of the insns in the delay slots. In such a case, 9960 `INSN_FROM_TARGET_P' indicates that the insn is from the target of 9961 the branch and should be executed only if the branch is taken; 9962 otherwise the insn should be executed only if the branch is not 9963 taken. *Note Delay Slots::. 9964 9965 These expression codes appear in place of a side effect, as the body of 9966 an insn, though strictly speaking they do not always describe side 9967 effects as such: 9968 9969 `(asm_input S)' 9970 Represents literal assembler code as described by the string S. 9971 9972 `(unspec [OPERANDS ...] INDEX)' 9973 `(unspec_volatile [OPERANDS ...] INDEX)' 9974 Represents a machine-specific operation on OPERANDS. INDEX 9975 selects between multiple machine-specific operations. 9976 `unspec_volatile' is used for volatile operations and operations 9977 that may trap; `unspec' is used for other operations. 9978 9979 These codes may appear inside a `pattern' of an insn, inside a 9980 `parallel', or inside an expression. 9981 9982 `(addr_vec:M [LR0 LR1 ...])' 9983 Represents a table of jump addresses. The vector elements LR0, 9984 etc., are `label_ref' expressions. The mode M specifies how much 9985 space is given to each address; normally M would be `Pmode'. 9986 9987 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 9988 Represents a table of jump addresses expressed as offsets from 9989 BASE. The vector elements LR0, etc., are `label_ref' expressions 9990 and so is BASE. The mode M specifies how much space is given to 9991 each address-difference. MIN and MAX are set up by branch 9992 shortening and hold a label with a minimum and a maximum address, 9993 respectively. FLAGS indicates the relative position of BASE, MIN 9994 and MAX to the containing insn and of MIN and MAX to BASE. See 9995 rtl.def for details. 9996 9997 `(prefetch:M ADDR RW LOCALITY)' 9998 Represents prefetch of memory at address ADDR. Operand RW is 1 if 9999 the prefetch is for data to be written, 0 otherwise; targets that 10000 do not support write prefetches should treat this as a normal 10001 prefetch. Operand LOCALITY specifies the amount of temporal 10002 locality; 0 if there is none or 1, 2, or 3 for increasing levels 10003 of temporal locality; targets that do not support locality hints 10004 should ignore this. 10005 10006 This insn is used to minimize cache-miss latency by moving data 10007 into a cache before it is accessed. It should use only 10008 non-faulting data prefetch instructions. 10009 10010 10011 File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 10012 10013 10.16 Embedded Side-Effects on Addresses 10014 ======================================== 10015 10016 Six special side-effect expression codes appear as memory addresses. 10017 10018 `(pre_dec:M X)' 10019 Represents the side effect of decrementing X by a standard amount 10020 and represents also the value that X has after being decremented. 10021 X must be a `reg' or `mem', but most machines allow only a `reg'. 10022 M must be the machine mode for pointers on the machine in use. 10023 The amount X is decremented by is the length in bytes of the 10024 machine mode of the containing memory reference of which this 10025 expression serves as the address. Here is an example of its use: 10026 10027 (mem:DF (pre_dec:SI (reg:SI 39))) 10028 10029 This says to decrement pseudo register 39 by the length of a 10030 `DFmode' value and use the result to address a `DFmode' value. 10031 10032 `(pre_inc:M X)' 10033 Similar, but specifies incrementing X instead of decrementing it. 10034 10035 `(post_dec:M X)' 10036 Represents the same side effect as `pre_dec' but a different 10037 value. The value represented here is the value X has before being 10038 decremented. 10039 10040 `(post_inc:M X)' 10041 Similar, but specifies incrementing X instead of decrementing it. 10042 10043 `(post_modify:M X Y)' 10044 Represents the side effect of setting X to Y and represents X 10045 before X is modified. X must be a `reg' or `mem', but most 10046 machines allow only a `reg'. M must be the machine mode for 10047 pointers on the machine in use. 10048 10049 The expression Y must be one of three forms: `(plus:M X Z)', 10050 `(minus:M X Z)', or `(plus:M X I)', where Z is an index register 10051 and I is a constant. 10052 10053 Here is an example of its use: 10054 10055 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 10056 (reg:SI 48)))) 10057 10058 This says to modify pseudo register 42 by adding the contents of 10059 pseudo register 48 to it, after the use of what ever 42 points to. 10060 10061 `(pre_modify:M X EXPR)' 10062 Similar except side effects happen before the use. 10063 10064 These embedded side effect expressions must be used with care. 10065 Instruction patterns may not use them. Until the `flow' pass of the 10066 compiler, they may occur only to represent pushes onto the stack. The 10067 `flow' pass finds cases where registers are incremented or decremented 10068 in one instruction and used as an address shortly before or after; 10069 these cases are then transformed to use pre- or post-increment or 10070 -decrement. 10071 10072 If a register used as the operand of these expressions is used in 10073 another address in an insn, the original value of the register is used. 10074 Uses of the register outside of an address are not permitted within the 10075 same insn as a use in an embedded side effect expression because such 10076 insns behave differently on different machines and hence must be treated 10077 as ambiguous and disallowed. 10078 10079 An instruction that can be represented with an embedded side effect 10080 could also be represented using `parallel' containing an additional 10081 `set' to describe how the address register is altered. This is not 10082 done because machines that allow these operations at all typically 10083 allow them wherever a memory address is called for. Describing them as 10084 additional parallel stores would require doubling the number of entries 10085 in the machine description. 10086 10087 10088 File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 10089 10090 10.17 Assembler Instructions as Expressions 10091 =========================================== 10092 10093 The RTX code `asm_operands' represents a value produced by a 10094 user-specified assembler instruction. It is used to represent an `asm' 10095 statement with arguments. An `asm' statement with a single output 10096 operand, like this: 10097 10098 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 10099 10100 is represented using a single `asm_operands' RTX which represents the 10101 value that is stored in `outputvar': 10102 10103 (set RTX-FOR-OUTPUTVAR 10104 (asm_operands "foo %1,%2,%0" "a" 0 10105 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 10106 [(asm_input:M1 "g") 10107 (asm_input:M2 "di")])) 10108 10109 Here the operands of the `asm_operands' RTX are the assembler template 10110 string, the output-operand's constraint, the index-number of the output 10111 operand among the output operands specified, a vector of input operand 10112 RTX's, and a vector of input-operand modes and constraints. The mode 10113 M1 is the mode of the sum `x+y'; M2 is that of `*z'. 10114 10115 When an `asm' statement has multiple output values, its insn has 10116 several such `set' RTX's inside of a `parallel'. Each `set' contains 10117 an `asm_operands'; all of these share the same assembler template and 10118 vectors, but each contains the constraint for the respective output 10119 operand. They are also distinguished by the output-operand index 10120 number, which is 0, 1, ... for successive output operands. 10121 10122 10123 File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 10124 10125 10.18 Variable Location Debug Information in RTL 10126 ================================================ 10127 10128 Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to 10129 determine what user variables memory and register references refer to. 10130 10131 Variable tracking at assignments uses these notes only when they refer 10132 to variables that live at fixed locations (e.g., addressable variables, 10133 global non-automatic variables). For variables whose location may 10134 vary, it relies on the following types of notes. 10135 10136 `(var_location:MODE VAR EXP STAT)' 10137 Binds variable `var', a tree, to value EXP, an RTL expression. It 10138 appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with 10139 slightly different meanings. MODE, if present, represents the 10140 mode of EXP, which is useful if it is a modeless expression. STAT 10141 is only meaningful in notes, indicating whether the variable is 10142 known to be initialized or uninitialized. 10143 10144 `(debug_expr:MODE DECL)' 10145 Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that 10146 points back to it, within value expressions in `VAR_LOCATION' 10147 nodes. 10148 10149 10150 10151 File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 10152 10153 10.19 Insns 10154 =========== 10155 10156 The RTL representation of the code for a function is a doubly-linked 10157 chain of objects called "insns". Insns are expressions with special 10158 codes that are used for no other purpose. Some insns are actual 10159 instructions; others represent dispatch tables for `switch' statements; 10160 others represent labels to jump to or various sorts of declarative 10161 information. 10162 10163 In addition to its own specific data, each insn must have a unique 10164 id-number that distinguishes it from all other insns in the current 10165 function (after delayed branch scheduling, copies of an insn with the 10166 same id-number may be present in multiple places in a function, but 10167 these copies will always be identical and will only appear inside a 10168 `sequence'), and chain pointers to the preceding and following insns. 10169 These three fields occupy the same position in every insn, independent 10170 of the expression code of the insn. They could be accessed with `XEXP' 10171 and `XINT', but instead three special macros are always used: 10172 10173 `INSN_UID (I)' 10174 Accesses the unique id of insn I. 10175 10176 `PREV_INSN (I)' 10177 Accesses the chain pointer to the insn preceding I. If I is the 10178 first insn, this is a null pointer. 10179 10180 `NEXT_INSN (I)' 10181 Accesses the chain pointer to the insn following I. If I is the 10182 last insn, this is a null pointer. 10183 10184 The first insn in the chain is obtained by calling `get_insns'; the 10185 last insn is the result of calling `get_last_insn'. Within the chain 10186 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must 10187 always correspond: if INSN is not the first insn, 10188 10189 NEXT_INSN (PREV_INSN (INSN)) == INSN 10190 10191 is always true and if INSN is not the last insn, 10192 10193 PREV_INSN (NEXT_INSN (INSN)) == INSN 10194 10195 is always true. 10196 10197 After delay slot scheduling, some of the insns in the chain might be 10198 `sequence' expressions, which contain a vector of insns. The value of 10199 `NEXT_INSN' in all but the last of these insns is the next insn in the 10200 vector; the value of `NEXT_INSN' of the last insn in the vector is the 10201 same as the value of `NEXT_INSN' for the `sequence' in which it is 10202 contained. Similar rules apply for `PREV_INSN'. 10203 10204 This means that the above invariants are not necessarily true for insns 10205 inside `sequence' expressions. Specifically, if INSN is the first insn 10206 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing 10207 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN 10208 (INSN))' if INSN is the last insn in the `sequence' expression. You 10209 can use these expressions to find the containing `sequence' expression. 10210 10211 Every insn has one of the following expression codes: 10212 10213 `insn' 10214 The expression code `insn' is used for instructions that do not 10215 jump and do not do function calls. `sequence' expressions are 10216 always contained in insns with code `insn' even if one of those 10217 insns should jump or do function calls. 10218 10219 Insns with code `insn' have four additional fields beyond the three 10220 mandatory ones listed above. These four are described in a table 10221 below. 10222 10223 `jump_insn' 10224 The expression code `jump_insn' is used for instructions that may 10225 jump (or, more generally, may contain `label_ref' expressions to 10226 which `pc' can be set in that instruction). If there is an 10227 instruction to return from the current function, it is recorded as 10228 a `jump_insn'. 10229 10230 `jump_insn' insns have the same extra fields as `insn' insns, 10231 accessed in the same way and in addition contain a field 10232 `JUMP_LABEL' which is defined once jump optimization has completed. 10233 10234 For simple conditional and unconditional jumps, this field contains 10235 the `code_label' to which this insn will (possibly conditionally) 10236 branch. In a more complex jump, `JUMP_LABEL' records one of the 10237 labels that the insn refers to; other jump target labels are 10238 recorded as `REG_LABEL_TARGET' notes. The exception is `addr_vec' 10239 and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only 10240 way to find the labels is to scan the entire body of the insn. 10241 10242 Return insns count as jumps, but since they do not refer to any 10243 labels, their `JUMP_LABEL' is `NULL_RTX'. 10244 10245 `call_insn' 10246 The expression code `call_insn' is used for instructions that may 10247 do function calls. It is important to distinguish these 10248 instructions because they imply that certain registers and memory 10249 locations may be altered unpredictably. 10250 10251 `call_insn' insns have the same extra fields as `insn' insns, 10252 accessed in the same way and in addition contain a field 10253 `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 10254 `expr_list' expressions) containing `use', `clobber' and sometimes 10255 `set' expressions that denote hard registers and `mem's used or 10256 clobbered by the called function. 10257 10258 A `mem' generally points to a stack slot in which arguments passed 10259 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 10260 Register Arguments.) are stored. If the argument is caller-copied 10261 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 10262 will be mentioned in `clobber' and `use' entries; if it's 10263 callee-copied, only a `use' will appear, and the `mem' may point 10264 to addresses that are not stack slots. 10265 10266 Registers occurring inside a `clobber' in this list augment 10267 registers specified in `CALL_USED_REGISTERS' (*note Register 10268 Basics::). 10269 10270 If the list contains a `set' involving two registers, it indicates 10271 that the function returns one of its arguments. Such a `set' may 10272 look like a no-op if the same register holds the argument and the 10273 return value. 10274 10275 `code_label' 10276 A `code_label' insn represents a label that a jump insn can jump 10277 to. It contains two special fields of data in addition to the 10278 three standard ones. `CODE_LABEL_NUMBER' is used to hold the 10279 "label number", a number that identifies this label uniquely among 10280 all the labels in the compilation (not just in the current 10281 function). Ultimately, the label is represented in the assembler 10282 output as an assembler label, usually of the form `LN' where N is 10283 the label number. 10284 10285 When a `code_label' appears in an RTL expression, it normally 10286 appears within a `label_ref' which represents the address of the 10287 label, as a number. 10288 10289 Besides as a `code_label', a label can also be represented as a 10290 `note' of type `NOTE_INSN_DELETED_LABEL'. 10291 10292 The field `LABEL_NUSES' is only defined once the jump optimization 10293 phase is completed. It contains the number of times this label is 10294 referenced in the current function. 10295 10296 The field `LABEL_KIND' differentiates four different types of 10297 labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY', 10298 `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'. The only labels 10299 that do not have type `LABEL_NORMAL' are "alternate entry points" 10300 to the current function. These may be static (visible only in the 10301 containing translation unit), global (exposed to all translation 10302 units), or weak (global, but can be overridden by another symbol 10303 with the same name). 10304 10305 Much of the compiler treats all four kinds of label identically. 10306 Some of it needs to know whether or not a label is an alternate 10307 entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is 10308 provided. It is equivalent to testing whether `LABEL_KIND (label) 10309 == LABEL_NORMAL'. The only place that cares about the distinction 10310 between static, global, and weak alternate entry points, besides 10311 the front-end code that creates them, is the function 10312 `output_alternate_entry_point', in `final.c'. 10313 10314 To set the kind of a label, use the `SET_LABEL_KIND' macro. 10315 10316 `barrier' 10317 Barriers are placed in the instruction stream when control cannot 10318 flow past them. They are placed after unconditional jump 10319 instructions to indicate that the jumps are unconditional and 10320 after calls to `volatile' functions, which do not return (e.g., 10321 `exit'). They contain no information beyond the three standard 10322 fields. 10323 10324 `note' 10325 `note' insns are used to represent additional debugging and 10326 declarative information. They contain two nonstandard fields, an 10327 integer which is accessed with the macro `NOTE_LINE_NUMBER' and a 10328 string accessed with `NOTE_SOURCE_FILE'. 10329 10330 If `NOTE_LINE_NUMBER' is positive, the note represents the 10331 position of a source line and `NOTE_SOURCE_FILE' is the source 10332 file name that the line came from. These notes control generation 10333 of line number data in the assembler output. 10334 10335 Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a 10336 code with one of the following values (and `NOTE_SOURCE_FILE' must 10337 contain a null pointer): 10338 10339 `NOTE_INSN_DELETED' 10340 Such a note is completely ignorable. Some passes of the 10341 compiler delete insns by altering them into notes of this 10342 kind. 10343 10344 `NOTE_INSN_DELETED_LABEL' 10345 This marks what used to be a `code_label', but was not used 10346 for other purposes than taking its address and was 10347 transformed to mark that no code jumps to it. 10348 10349 `NOTE_INSN_BLOCK_BEG' 10350 `NOTE_INSN_BLOCK_END' 10351 These types of notes indicate the position of the beginning 10352 and end of a level of scoping of variable names. They 10353 control the output of debugging information. 10354 10355 `NOTE_INSN_EH_REGION_BEG' 10356 `NOTE_INSN_EH_REGION_END' 10357 These types of notes indicate the position of the beginning 10358 and end of a level of scoping for exception handling. 10359 `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note' 10360 of type `NOTE_INSN_DELETED_LABEL' is associated with the 10361 given region. 10362 10363 `NOTE_INSN_LOOP_BEG' 10364 `NOTE_INSN_LOOP_END' 10365 These types of notes indicate the position of the beginning 10366 and end of a `while' or `for' loop. They enable the loop 10367 optimizer to find loops quickly. 10368 10369 `NOTE_INSN_LOOP_CONT' 10370 Appears at the place in a loop that `continue' statements 10371 jump to. 10372 10373 `NOTE_INSN_LOOP_VTOP' 10374 This note indicates the place in a loop where the exit test 10375 begins for those loops in which the exit test has been 10376 duplicated. This position becomes another virtual start of 10377 the loop when considering loop invariants. 10378 10379 `NOTE_INSN_FUNCTION_BEG' 10380 Appears at the start of the function body, after the function 10381 prologue. 10382 10383 `NOTE_INSN_VAR_LOCATION' 10384 This note is used to generate variable location debugging 10385 information. It indicates that the user variable in its 10386 `VAR_LOCATION' operand is at the location given in the RTL 10387 expression, or holds a value that can be computed by 10388 evaluating the RTL expression from that static point in the 10389 program up to the next such note for the same user variable. 10390 10391 10392 These codes are printed symbolically when they appear in debugging 10393 dumps. 10394 10395 `debug_insn' 10396 The expression code `debug_insn' is used for pseudo-instructions 10397 that hold debugging information for variable tracking at 10398 assignments (see `-fvar-tracking-assignments' option). They are 10399 the RTL representation of `GIMPLE_DEBUG' statements (*note 10400 `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user 10401 variable tree to an RTL representation of the `value' in the 10402 corresponding statement. A `DEBUG_EXPR' in it stands for the 10403 value bound to the corresponding `DEBUG_EXPR_DECL'. 10404 10405 Throughout optimization passes, binding information is kept in 10406 pseudo-instruction form, so that, unlike notes, it gets the same 10407 treatment and adjustments that regular instructions would. It is 10408 the variable tracking pass that turns these pseudo-instructions 10409 into var location notes, analyzing control flow, value 10410 equivalences and changes to registers and memory referenced in 10411 value expressions, propagating the values of debug temporaries and 10412 determining expressions that can be used to compute the value of 10413 each user variable at as many points (ranges, actually) in the 10414 program as possible. 10415 10416 Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an 10417 `INSN_VAR_LOCATION' denotes a value at that specific point in the 10418 program, rather than an expression that can be evaluated at any 10419 later point before an overriding `VAR_LOCATION' is encountered. 10420 E.g., if a user variable is bound to a `REG' and then a subsequent 10421 insn modifies the `REG', the note location would keep mapping the 10422 user variable to the register across the insn, whereas the insn 10423 location would keep the variable bound to the value, so that the 10424 variable tracking pass would emit another location note for the 10425 variable at the point in which the register is modified. 10426 10427 10428 The machine mode of an insn is normally `VOIDmode', but some phases 10429 use the mode for various purposes. 10430 10431 The common subexpression elimination pass sets the mode of an insn to 10432 `QImode' when it is the first insn in a block that has already been 10433 processed. 10434 10435 The second Haifa scheduling pass, for targets that can multiple issue, 10436 sets the mode of an insn to `TImode' when it is believed that the 10437 instruction begins an issue group. That is, when the instruction 10438 cannot issue simultaneously with the previous. This may be relied on 10439 by later passes, in particular machine-dependent reorg. 10440 10441 Here is a table of the extra fields of `insn', `jump_insn' and 10442 `call_insn' insns: 10443 10444 `PATTERN (I)' 10445 An expression for the side effect performed by this insn. This 10446 must be one of the following codes: `set', `call', `use', 10447 `clobber', `return', `simple_return', `asm_input', `asm_output', 10448 `addr_vec', `addr_diff_vec', `trap_if', `unspec', 10449 `unspec_volatile', `parallel', `cond_exec', or `sequence'. If it 10450 is a `parallel', each element of the `parallel' must be one these 10451 codes, except that `parallel' expressions cannot be nested and 10452 `addr_vec' and `addr_diff_vec' are not permitted inside a 10453 `parallel' expression. 10454 10455 `INSN_CODE (I)' 10456 An integer that says which pattern in the machine description 10457 matches this insn, or -1 if the matching has not yet been 10458 attempted. 10459 10460 Such matching is never attempted and this field remains -1 on an 10461 insn whose pattern consists of a single `use', `clobber', 10462 `asm_input', `addr_vec' or `addr_diff_vec' expression. 10463 10464 Matching is also never attempted on insns that result from an `asm' 10465 statement. These contain at least one `asm_operands' expression. 10466 The function `asm_noperands' returns a non-negative value for such 10467 insns. 10468 10469 In the debugging output, this field is printed as a number 10470 followed by a symbolic representation that locates the pattern in 10471 the `md' file as some small positive or negative offset from a 10472 named pattern. 10473 10474 `LOG_LINKS (I)' 10475 A list (chain of `insn_list' expressions) giving information about 10476 dependencies between instructions within a basic block. Neither a 10477 jump nor a label may come between the related insns. These are 10478 only used by the schedulers and by combine. This is a deprecated 10479 data structure. Def-use and use-def chains are now preferred. 10480 10481 `REG_NOTES (I)' 10482 A list (chain of `expr_list' and `insn_list' expressions) giving 10483 miscellaneous information about the insn. It is often information 10484 pertaining to the registers used in this insn. 10485 10486 The `LOG_LINKS' field of an insn is a chain of `insn_list' 10487 expressions. Each of these has two operands: the first is an insn, and 10488 the second is another `insn_list' expression (the next one in the 10489 chain). The last `insn_list' in the chain has a null pointer as second 10490 operand. The significant thing about the chain is which insns appear 10491 in it (as first operands of `insn_list' expressions). Their order is 10492 not significant. 10493 10494 This list is originally set up by the flow analysis pass; it is a null 10495 pointer until then. Flow only adds links for those data dependencies 10496 which can be used for instruction combination. For each insn, the flow 10497 analysis pass adds a link to insns which store into registers values 10498 that are used for the first time in this insn. 10499 10500 The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS' 10501 field but it includes `expr_list' expressions in addition to 10502 `insn_list' expressions. There are several kinds of register notes, 10503 which are distinguished by the machine mode, which in a register note 10504 is really understood as being an `enum reg_note'. The first operand OP 10505 of the note is data whose meaning depends on the kind of note. 10506 10507 The macro `REG_NOTE_KIND (X)' returns the kind of register note. Its 10508 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 10509 register note type of X to be NEWKIND. 10510 10511 Register notes are of three classes: They may say something about an 10512 input to an insn, they may say something about an output of an insn, or 10513 they may create a linkage between two insns. There are also a set of 10514 values that are only used in `LOG_LINKS'. 10515 10516 These register notes annotate inputs to an insn: 10517 10518 `REG_DEAD' 10519 The value in OP dies in this insn; that is to say, altering the 10520 value immediately after this insn would not affect the future 10521 behavior of the program. 10522 10523 It does not follow that the register OP has no useful value after 10524 this insn since OP is not necessarily modified by this insn. 10525 Rather, no subsequent instruction uses the contents of OP. 10526 10527 `REG_UNUSED' 10528 The register OP being set by this insn will not be used in a 10529 subsequent insn. This differs from a `REG_DEAD' note, which 10530 indicates that the value in an input will not be used subsequently. 10531 These two notes are independent; both may be present for the same 10532 register. 10533 10534 `REG_INC' 10535 The register OP is incremented (or decremented; at this level 10536 there is no distinction) by an embedded side effect inside this 10537 insn. This means it appears in a `post_inc', `pre_inc', 10538 `post_dec' or `pre_dec' expression. 10539 10540 `REG_NONNEG' 10541 The register OP is known to have a nonnegative value when this 10542 insn is reached. This is used so that decrement and branch until 10543 zero instructions, such as the m68k dbra, can be matched. 10544 10545 The `REG_NONNEG' note is added to insns only if the machine 10546 description has a `decrement_and_branch_until_zero' pattern. 10547 10548 `REG_LABEL_OPERAND' 10549 This insn uses OP, a `code_label' or a `note' of type 10550 `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a 10551 `jump_insn' that refers to the operand as an ordinary operand. 10552 The label may still eventually be a jump target, but if so in an 10553 indirect jump in a subsequent insn. The presence of this note 10554 allows jump optimization to be aware that OP is, in fact, being 10555 used, and flow optimization to build an accurate flow graph. 10556 10557 `REG_LABEL_TARGET' 10558 This insn is a `jump_insn' but not an `addr_vec' or 10559 `addr_diff_vec'. It uses OP, a `code_label' as a direct or 10560 indirect jump target. Its purpose is similar to that of 10561 `REG_LABEL_OPERAND'. This note is only present if the insn has 10562 multiple targets; the last label in the insn (in the highest 10563 numbered insn-field) goes into the `JUMP_LABEL' field and does not 10564 have a `REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 10565 10566 `REG_CROSSING_JUMP' 10567 This insn is a branching instruction (either an unconditional jump 10568 or an indirect jump) which crosses between hot and cold sections, 10569 which could potentially be very far apart in the executable. The 10570 presence of this note indicates to other optimizations that this 10571 branching instruction should not be "collapsed" into a simpler 10572 branching construct. It is used when the optimization to 10573 partition basic blocks into hot and cold sections is turned on. 10574 10575 `REG_SETJMP' 10576 Appears attached to each `CALL_INSN' to `setjmp' or a related 10577 function. 10578 10579 The following notes describe attributes of outputs of an insn: 10580 10581 `REG_EQUIV' 10582 `REG_EQUAL' 10583 This note is only valid on an insn that sets only one register and 10584 indicates that that register will be equal to OP at run time; the 10585 scope of this equivalence differs between the two types of notes. 10586 The value which the insn explicitly copies into the register may 10587 look different from OP, but they will be equal at run time. If the 10588 output of the single `set' is a `strict_low_part' expression, the 10589 note refers to the register that is contained in `SUBREG_REG' of 10590 the `subreg' expression. 10591 10592 For `REG_EQUIV', the register is equivalent to OP throughout the 10593 entire function, and could validly be replaced in all its 10594 occurrences by OP. ("Validly" here refers to the data flow of the 10595 program; simple replacement may make some insns invalid.) For 10596 example, when a constant is loaded into a register that is never 10597 assigned any other value, this kind of note is used. 10598 10599 When a parameter is copied into a pseudo-register at entry to a 10600 function, a note of this kind records that the register is 10601 equivalent to the stack slot where the parameter was passed. 10602 Although in this case the register may be set by other insns, it 10603 is still valid to replace the register by the stack slot 10604 throughout the function. 10605 10606 A `REG_EQUIV' note is also used on an instruction which copies a 10607 register parameter into a pseudo-register at entry to a function, 10608 if there is a stack slot where that parameter could be stored. 10609 Although other insns may set the pseudo-register, it is valid for 10610 the compiler to replace the pseudo-register by stack slot 10611 throughout the function, provided the compiler ensures that the 10612 stack slot is properly initialized by making the replacement in 10613 the initial copy instruction as well. This is used on machines 10614 for which the calling convention allocates stack space for 10615 register parameters. See `REG_PARM_STACK_SPACE' in *note Stack 10616 Arguments::. 10617 10618 In the case of `REG_EQUAL', the register that is set by this insn 10619 will be equal to OP at run time at the end of this insn but not 10620 necessarily elsewhere in the function. In this case, OP is 10621 typically an arithmetic expression. For example, when a sequence 10622 of insns such as a library call is used to perform an arithmetic 10623 operation, this kind of note is attached to the insn that produces 10624 or copies the final value. 10625 10626 These two notes are used in different ways by the compiler passes. 10627 `REG_EQUAL' is used by passes prior to register allocation (such as 10628 common subexpression elimination and loop optimization) to tell 10629 them how to think of that value. `REG_EQUIV' notes are used by 10630 register allocation to indicate that there is an available 10631 substitute expression (either a constant or a `mem' expression for 10632 the location of a parameter on the stack) that may be used in 10633 place of a register if insufficient registers are available. 10634 10635 Except for stack homes for parameters, which are indicated by a 10636 `REG_EQUIV' note and are not useful to the early optimization 10637 passes and pseudo registers that are equivalent to a memory 10638 location throughout their entire life, which is not detected until 10639 later in the compilation, all equivalences are initially indicated 10640 by an attached `REG_EQUAL' note. In the early stages of register 10641 allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note 10642 if OP is a constant and the insn represents the only set of its 10643 destination register. 10644 10645 Thus, compiler passes prior to register allocation need only check 10646 for `REG_EQUAL' notes and passes subsequent to register allocation 10647 need only check for `REG_EQUIV' notes. 10648 10649 These notes describe linkages between insns. They occur in pairs: one 10650 insn has one of a pair of notes that points to a second insn, which has 10651 the inverse note pointing back to the first insn. 10652 10653 `REG_CC_SETTER' 10654 `REG_CC_USER' 10655 On machines that use `cc0', the insns which set and use `cc0' set 10656 and use `cc0' are adjacent. However, when branch delay slot 10657 filling is done, this may no longer be true. In this case a 10658 `REG_CC_USER' note will be placed on the insn setting `cc0' to 10659 point to the insn using `cc0' and a `REG_CC_SETTER' note will be 10660 placed on the insn using `cc0' to point to the insn setting `cc0'. 10661 10662 These values are only used in the `LOG_LINKS' field, and indicate the 10663 type of dependency that each link represents. Links which indicate a 10664 data dependence (a read after write dependence) do not use any code, 10665 they simply have mode `VOIDmode', and are printed without any 10666 descriptive text. 10667 10668 `REG_DEP_TRUE' 10669 This indicates a true dependence (a read after write dependence). 10670 10671 `REG_DEP_OUTPUT' 10672 This indicates an output dependence (a write after write 10673 dependence). 10674 10675 `REG_DEP_ANTI' 10676 This indicates an anti dependence (a write after read dependence). 10677 10678 10679 These notes describe information gathered from gcov profile data. They 10680 are stored in the `REG_NOTES' field of an insn as an `expr_list'. 10681 10682 `REG_BR_PROB' 10683 This is used to specify the ratio of branches to non-branches of a 10684 branch insn according to the profile data. The value is stored as 10685 a value between 0 and REG_BR_PROB_BASE; larger values indicate a 10686 higher probability that the branch will be taken. 10687 10688 `REG_BR_PRED' 10689 These notes are found in JUMP insns after delayed branch scheduling 10690 has taken place. They indicate both the direction and the 10691 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 10692 values. 10693 10694 `REG_FRAME_RELATED_EXPR' 10695 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 10696 expression is used in place of the actual insn pattern. This is 10697 done in cases where the pattern is either complex or misleading. 10698 10699 For convenience, the machine mode in an `insn_list' or `expr_list' is 10700 printed using these symbolic codes in debugging dumps. 10701 10702 The only difference between the expression codes `insn_list' and 10703 `expr_list' is that the first operand of an `insn_list' is assumed to 10704 be an insn and is printed in debugging dumps as the insn's unique id; 10705 the first operand of an `expr_list' is printed in the ordinary way as 10706 an expression. 10707 10708 10709 File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 10710 10711 10.20 RTL Representation of Function-Call Insns 10712 =============================================== 10713 10714 Insns that call subroutines have the RTL expression code `call_insn'. 10715 These insns must satisfy special rules, and their bodies must use a 10716 special RTL expression code, `call'. 10717 10718 A `call' expression has two operands, as follows: 10719 10720 (call (mem:FM ADDR) NBYTES) 10721 10722 Here NBYTES is an operand that represents the number of bytes of 10723 argument data being passed to the subroutine, FM is a machine mode 10724 (which must equal as the definition of the `FUNCTION_MODE' macro in the 10725 machine description) and ADDR represents the address of the subroutine. 10726 10727 For a subroutine that returns no value, the `call' expression as shown 10728 above is the entire body of the insn, except that the insn might also 10729 contain `use' or `clobber' expressions. 10730 10731 For a subroutine that returns a value whose mode is not `BLKmode', the 10732 value is returned in a hard register. If this register's number is R, 10733 then the body of the call insn looks like this: 10734 10735 (set (reg:M R) 10736 (call (mem:FM ADDR) NBYTES)) 10737 10738 This RTL expression makes it clear (to the optimizer passes) that the 10739 appropriate register receives a useful value in this insn. 10740 10741 When a subroutine returns a `BLKmode' value, it is handled by passing 10742 to the subroutine the address of a place to store the value. So the 10743 call insn itself does not "return" any value, and it has the same RTL 10744 form as a call that returns nothing. 10745 10746 On some machines, the call instruction itself clobbers some register, 10747 for example to contain the return address. `call_insn' insns on these 10748 machines should have a body which is a `parallel' that contains both 10749 the `call' expression and `clobber' expressions that indicate which 10750 registers are destroyed. Similarly, if the call instruction requires 10751 some register other than the stack pointer that is not explicitly 10752 mentioned in its RTL, a `use' subexpression should mention that 10753 register. 10754 10755 Functions that are called are assumed to modify all registers listed in 10756 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::) 10757 and, with the exception of `const' functions and library calls, to 10758 modify all of memory. 10759 10760 Insns containing just `use' expressions directly precede the 10761 `call_insn' insn to indicate which registers contain inputs to the 10762 function. Similarly, if registers other than those in 10763 `CALL_USED_REGISTERS' are clobbered by the called function, insns 10764 containing a single `clobber' follow immediately after the call to 10765 indicate which registers. 10766 10767 10768 File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 10769 10770 10.21 Structure Sharing Assumptions 10771 =================================== 10772 10773 The compiler assumes that certain kinds of RTL expressions are unique; 10774 there do not exist two distinct objects representing the same value. 10775 In other cases, it makes an opposite assumption: that no RTL expression 10776 object of a certain kind appears in more than one place in the 10777 containing structure. 10778 10779 These assumptions refer to a single function; except for the RTL 10780 objects that describe global variables and external functions, and a 10781 few standard objects such as small integer constants, no RTL objects 10782 are common to two functions. 10783 10784 * Each pseudo-register has only a single `reg' object to represent 10785 it, and therefore only a single machine mode. 10786 10787 * For any symbolic label, there is only one `symbol_ref' object 10788 referring to it. 10789 10790 * All `const_int' expressions with equal values are shared. 10791 10792 * There is only one `pc' expression. 10793 10794 * There is only one `cc0' expression. 10795 10796 * There is only one `const_double' expression with value 0 for each 10797 floating point mode. Likewise for values 1 and 2. 10798 10799 * There is only one `const_vector' expression with value 0 for each 10800 vector mode, be it an integer or a double constant vector. 10801 10802 * No `label_ref' or `scratch' appears in more than one place in the 10803 RTL structure; in other words, it is safe to do a tree-walk of all 10804 the insns in the function and assume that each time a `label_ref' 10805 or `scratch' is seen it is distinct from all others that are seen. 10806 10807 * Only one `mem' object is normally created for each static variable 10808 or stack slot, so these objects are frequently shared in all the 10809 places they appear. However, separate but equal objects for these 10810 variables are occasionally made. 10811 10812 * When a single `asm' statement has multiple output operands, a 10813 distinct `asm_operands' expression is made for each output operand. 10814 However, these all share the vector which contains the sequence of 10815 input operands. This sharing is used later on to test whether two 10816 `asm_operands' expressions come from the same statement, so all 10817 optimizations must carefully preserve the sharing if they copy the 10818 vector at all. 10819 10820 * No RTL object appears in more than one place in the RTL structure 10821 except as described above. Many passes of the compiler rely on 10822 this by assuming that they can modify RTL objects in place without 10823 unwanted side-effects on other insns. 10824 10825 * During initial RTL generation, shared structure is freely 10826 introduced. After all the RTL for a function has been generated, 10827 all shared structure is copied by `unshare_all_rtl' in 10828 `emit-rtl.c', after which the above rules are guaranteed to be 10829 followed. 10830 10831 * During the combiner pass, shared structure within an insn can exist 10832 temporarily. However, the shared structure is copied before the 10833 combiner is finished with the insn. This is done by calling 10834 `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'. 10835 10836 10837 File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 10838 10839 10.22 Reading RTL 10840 ================= 10841 10842 To read an RTL object from a file, call `read_rtx'. It takes one 10843 argument, a stdio stream, and returns a single RTL object. This routine 10844 is defined in `read-rtl.c'. It is not available in the compiler 10845 itself, only the various programs that generate the compiler back end 10846 from the machine description. 10847 10848 People frequently have the idea of using RTL stored as text in a file 10849 as an interface between a language front end and the bulk of GCC. This 10850 idea is not feasible. 10851 10852 GCC was designed to use RTL internally only. Correct RTL for a given 10853 program is very dependent on the particular target machine. And the RTL 10854 does not contain all the information about the program. 10855 10856 The proper way to interface GCC to a new language front end is with 10857 the "tree" data structure, described in the files `tree.h' and 10858 `tree.def'. The documentation for this structure (*note GENERIC::) is 10859 incomplete. 10860 10861 10862 File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: Passes, Up: Top 10863 10864 11 GENERIC 10865 ********** 10866 10867 The purpose of GENERIC is simply to provide a language-independent way 10868 of representing an entire function in trees. To this end, it was 10869 necessary to add a few new tree codes to the back end, but most 10870 everything was already there. If you can express it with the codes in 10871 `gcc/tree.def', it's GENERIC. 10872 10873 Early on, there was a great deal of debate about how to think about 10874 statements in a tree IL. In GENERIC, a statement is defined as any 10875 expression whose value, if any, is ignored. A statement will always 10876 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a 10877 non-statement expression may also have side effects. A `CALL_EXPR', 10878 for instance. 10879 10880 It would be possible for some local optimizations to work on the 10881 GENERIC form of a function; indeed, the adapted tree inliner works fine 10882 on GENERIC, but the current compiler performs inlining after lowering 10883 to GIMPLE (a restricted form described in the next section). Indeed, 10884 currently the frontends perform this lowering before handing off to 10885 `tree_rest_of_compilation', but this seems inelegant. 10886 10887 * Menu: 10888 10889 * Deficiencies:: Topics net yet covered in this document. 10890 * Tree overview:: All about `tree's. 10891 * Types:: Fundamental and aggregate types. 10892 * Declarations:: Type declarations and variables. 10893 * Attributes:: Declaration and type attributes. 10894 * Expressions: Expression trees. Operating on data. 10895 * Statements:: Control flow and related trees. 10896 * Functions:: Function bodies, linkage, and other aspects. 10897 * Language-dependent trees:: Topics and trees specific to language front ends. 10898 * C and C++ Trees:: Trees specific to C and C++. 10899 * Java Trees:: Trees specific to Java. 10900 10901 10902 File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 10903 10904 11.1 Deficiencies 10905 ================= 10906 10907 There are many places in which this document is incomplet and incorrekt. 10908 It is, as of yet, only _preliminary_ documentation. 10909 10910 10911 File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 10912 10913 11.2 Overview 10914 ============= 10915 10916 The central data structure used by the internal representation is the 10917 `tree'. These nodes, while all of the C type `tree', are of many 10918 varieties. A `tree' is a pointer type, but the object to which it 10919 points may be of a variety of types. From this point forward, we will 10920 refer to trees in ordinary type, rather than in `this font', except 10921 when talking about the actual C type `tree'. 10922 10923 You can tell what kind of node a particular tree is by using the 10924 `TREE_CODE' macro. Many, many macros take trees as input and return 10925 trees as output. However, most macros require a certain kind of tree 10926 node as input. In other words, there is a type-system for trees, but 10927 it is not reflected in the C type-system. 10928 10929 For safety, it is useful to configure GCC with `--enable-checking'. 10930 Although this results in a significant performance penalty (since all 10931 tree types are checked at run-time), and is therefore inappropriate in a 10932 release version, it is extremely helpful during the development process. 10933 10934 Many macros behave as predicates. Many, although not all, of these 10935 predicates end in `_P'. Do not rely on the result type of these macros 10936 being of any particular type. You may, however, rely on the fact that 10937 the type can be compared to `0', so that statements like 10938 if (TEST_P (t) && !TEST_P (y)) 10939 x = 1; 10940 and 10941 int i = (TEST_P (t) != 0); 10942 are legal. Macros that return `int' values now may be changed to 10943 return `tree' values, or other pointers in the future. Even those that 10944 continue to return `int' may return multiple nonzero codes where 10945 previously they returned only zero and one. Therefore, you should not 10946 write code like 10947 if (TEST_P (t) == 1) 10948 as this code is not guaranteed to work correctly in the future. 10949 10950 You should not take the address of values returned by the macros or 10951 functions described here. In particular, no guarantee is given that the 10952 values are lvalues. 10953 10954 In general, the names of macros are all in uppercase, while the names 10955 of functions are entirely in lowercase. There are rare exceptions to 10956 this rule. You should assume that any macro or function whose name is 10957 made up entirely of uppercase letters may evaluate its arguments more 10958 than once. You may assume that a macro or function whose name is made 10959 up entirely of lowercase letters will evaluate its arguments only once. 10960 10961 The `error_mark_node' is a special tree. Its tree code is 10962 `ERROR_MARK', but since there is only ever one node with that code, the 10963 usual practice is to compare the tree against `error_mark_node'. (This 10964 test is just a test for pointer equality.) If an error has occurred 10965 during front-end processing the flag `errorcount' will be set. If the 10966 front end has encountered code it cannot handle, it will issue a 10967 message to the user and set `sorrycount'. When these flags are set, 10968 any macro or function which normally returns a tree of a particular 10969 kind may instead return the `error_mark_node'. Thus, if you intend to 10970 do any processing of erroneous code, you must be prepared to deal with 10971 the `error_mark_node'. 10972 10973 Occasionally, a particular tree slot (like an operand to an expression, 10974 or a particular field in a declaration) will be referred to as 10975 "reserved for the back end". These slots are used to store RTL when 10976 the tree is converted to RTL for use by the GCC back end. However, if 10977 that process is not taking place (e.g., if the front end is being hooked 10978 up to an intelligent editor), then those slots may be used by the back 10979 end presently in use. 10980 10981 If you encounter situations that do not match this documentation, such 10982 as tree nodes of types not mentioned here, or macros documented to 10983 return entities of a particular kind that instead return entities of 10984 some different kind, you have found a bug, either in the front end or in 10985 the documentation. Please report these bugs as you would any other bug. 10986 10987 * Menu: 10988 10989 * Macros and Functions::Macros and functions that can be used with all trees. 10990 * Identifiers:: The names of things. 10991 * Containers:: Lists and vectors. 10992 10993 10994 File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 10995 10996 11.2.1 Trees 10997 ------------ 10998 10999 All GENERIC trees have two fields in common. First, `TREE_CHAIN' is a 11000 pointer that can be used as a singly-linked list to other trees. The 11001 other is `TREE_TYPE'. Many trees store the type of an expression or 11002 declaration in this field. 11003 11004 These are some other functions for handling trees: 11005 11006 `tree_size' 11007 Return the number of bytes a tree takes. 11008 11009 `build0' 11010 `build1' 11011 `build2' 11012 `build3' 11013 `build4' 11014 `build5' 11015 `build6' 11016 These functions build a tree and supply values to put in each 11017 parameter. The basic signature is `code, type, [operands]'. 11018 `code' is the `TREE_CODE', and `type' is a tree representing the 11019 `TREE_TYPE'. These are followed by the operands, each of which is 11020 also a tree. 11021 11022 11023 11024 File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 11025 11026 11.2.2 Identifiers 11027 ------------------ 11028 11029 An `IDENTIFIER_NODE' represents a slightly more general concept that 11030 the standard C or C++ concept of identifier. In particular, an 11031 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters. 11032 11033 There are never two distinct `IDENTIFIER_NODE's representing the same 11034 identifier. Therefore, you may use pointer equality to compare 11035 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'. Use 11036 `get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied 11037 string. 11038 11039 You can use the following macros to access identifiers: 11040 `IDENTIFIER_POINTER' 11041 The string represented by the identifier, represented as a 11042 `char*'. This string is always `NUL'-terminated, and contains no 11043 embedded `NUL' characters. 11044 11045 `IDENTIFIER_LENGTH' 11046 The length of the string returned by `IDENTIFIER_POINTER', not 11047 including the trailing `NUL'. This value of `IDENTIFIER_LENGTH 11048 (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'. 11049 11050 `IDENTIFIER_OPNAME_P' 11051 This predicate holds if the identifier represents the name of an 11052 overloaded operator. In this case, you should not depend on the 11053 contents of either the `IDENTIFIER_POINTER' or the 11054 `IDENTIFIER_LENGTH'. 11055 11056 `IDENTIFIER_TYPENAME_P' 11057 This predicate holds if the identifier represents the name of a 11058 user-defined conversion operator. In this case, the `TREE_TYPE' of 11059 the `IDENTIFIER_NODE' holds the type to which the conversion 11060 operator converts. 11061 11062 11063 11064 File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 11065 11066 11.2.3 Containers 11067 ----------------- 11068 11069 Two common container data structures can be represented directly with 11070 tree nodes. A `TREE_LIST' is a singly linked list containing two trees 11071 per node. These are the `TREE_PURPOSE' and `TREE_VALUE' of each node. 11072 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional 11073 information, while the `TREE_VALUE' contains the majority of the 11074 payload. In other cases, the `TREE_PURPOSE' is simply `NULL_TREE', 11075 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of 11076 equal stature.) Given one `TREE_LIST' node, the next node is found by 11077 following the `TREE_CHAIN'. If the `TREE_CHAIN' is `NULL_TREE', then 11078 you have reached the end of the list. 11079 11080 A `TREE_VEC' is a simple vector. The `TREE_VEC_LENGTH' is an integer 11081 (not a tree) giving the number of nodes in the vector. The nodes 11082 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two 11083 arguments. The first is the `TREE_VEC' in question; the second is an 11084 integer indicating which element in the vector is desired. The 11085 elements are indexed from zero. 11086 11087 11088 File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 11089 11090 11.3 Types 11091 ========== 11092 11093 All types have corresponding tree nodes. However, you should not assume 11094 that there is exactly one tree node corresponding to each type. There 11095 are often multiple nodes corresponding to the same type. 11096 11097 For the most part, different kinds of types have different tree codes. 11098 (For example, pointer types use a `POINTER_TYPE' code while arrays use 11099 an `ARRAY_TYPE' code.) However, pointers to member functions use the 11100 `RECORD_TYPE' code. Therefore, when writing a `switch' statement that 11101 depends on the code associated with a particular type, you should take 11102 care to handle pointers to member functions under the `RECORD_TYPE' 11103 case label. 11104 11105 The following functions and macros deal with cv-qualification of types: 11106 `TYPE_MAIN_VARIANT' 11107 This macro returns the unqualified version of a type. It may be 11108 applied to an unqualified type, but it is not always the identity 11109 function in that case. 11110 11111 A few other macros and functions are usable with all types: 11112 `TYPE_SIZE' 11113 The number of bits required to represent the type, represented as 11114 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be 11115 `NULL_TREE'. 11116 11117 `TYPE_ALIGN' 11118 The alignment of the type, in bits, represented as an `int'. 11119 11120 `TYPE_NAME' 11121 This macro returns a declaration (in the form of a `TYPE_DECL') for 11122 the type. (Note this macro does _not_ return an 11123 `IDENTIFIER_NODE', as you might expect, given its name!) You can 11124 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual 11125 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type 11126 that is not a built-in type, the result of a typedef, or a named 11127 class type. 11128 11129 `TYPE_CANONICAL' 11130 This macro returns the "canonical" type for the given type node. 11131 Canonical types are used to improve performance in the C++ and 11132 Objective-C++ front ends by allowing efficient comparison between 11133 two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of 11134 the types are equal, the types are equivalent; otherwise, the types 11135 are not equivalent. The notion of equivalence for canonical types 11136 is the same as the notion of type equivalence in the language 11137 itself. For instance, 11138 11139 When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type 11140 for the given type node. In this case, comparison between this 11141 type and any other type requires the compiler to perform a deep, 11142 "structural" comparison to see if the two type nodes have the same 11143 form and properties. 11144 11145 The canonical type for a node is always the most fundamental type 11146 in the equivalence class of types. For instance, `int' is its own 11147 canonical type. A typedef `I' of `int' will have `int' as its 11148 canonical type. Similarly, `I*' and a typedef `IP' (defined to 11149 `I*') will has `int*' as their canonical type. When building a new 11150 type node, be sure to set `TYPE_CANONICAL' to the appropriate 11151 canonical type. If the new type is a compound type (built from 11152 other types), and any of those other types require structural 11153 equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the 11154 new type also requires structural equality. Finally, if for some 11155 reason you cannot guarantee that `TYPE_CANONICAL' will point to 11156 the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make 11157 sure that the new type-and any type constructed based on 11158 it-requires structural equality. If you suspect that the canonical 11159 type system is miscomparing types, pass `--param 11160 verify-canonical-types=1' to the compiler or configure with 11161 `--enable-checking' to force the compiler to verify its 11162 canonical-type comparisons against the structural comparisons; the 11163 compiler will then print any warnings if the canonical types 11164 miscompare. 11165 11166 `TYPE_STRUCTURAL_EQUALITY_P' 11167 This predicate holds when the node requires structural equality 11168 checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'. 11169 11170 `SET_TYPE_STRUCTURAL_EQUALITY' 11171 This macro states that the type node it is given requires 11172 structural equality checks, e.g., it sets `TYPE_CANONICAL' to 11173 `NULL_TREE'. 11174 11175 `same_type_p' 11176 This predicate takes two types as input, and holds if they are the 11177 same type. For example, if one type is a `typedef' for the other, 11178 or both are `typedef's for the same type. This predicate also 11179 holds if the two trees given as input are simply copies of one 11180 another; i.e., there is no difference between them at the source 11181 level, but, for whatever reason, a duplicate has been made in the 11182 representation. You should never use `==' (pointer equality) to 11183 compare types; always use `same_type_p' instead. 11184 11185 Detailed below are the various kinds of types, and the macros that can 11186 be used to access them. Although other kinds of types are used 11187 elsewhere in G++, the types described here are the only ones that you 11188 will encounter while examining the intermediate representation. 11189 11190 `VOID_TYPE' 11191 Used to represent the `void' type. 11192 11193 `INTEGER_TYPE' 11194 Used to represent the various integral types, including `char', 11195 `short', `int', `long', and `long long'. This code is not used 11196 for enumeration types, nor for the `bool' type. The 11197 `TYPE_PRECISION' is the number of bits used in the representation, 11198 represented as an `unsigned int'. (Note that in the general case 11199 this is not the same value as `TYPE_SIZE'; suppose that there were 11200 a 24-bit integer type, but that alignment requirements for the ABI 11201 required 32-bit alignment. Then, `TYPE_SIZE' would be an 11202 `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.) The 11203 integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it 11204 is signed. 11205 11206 The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer 11207 that may be represented by this type. Similarly, the 11208 `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that 11209 may be represented by this type. 11210 11211 `REAL_TYPE' 11212 Used to represent the `float', `double', and `long double' types. 11213 The number of bits in the floating-point representation is given 11214 by `TYPE_PRECISION', as in the `INTEGER_TYPE' case. 11215 11216 `FIXED_POINT_TYPE' 11217 Used to represent the `short _Fract', `_Fract', `long _Fract', 11218 `long long _Fract', `short _Accum', `_Accum', `long _Accum', and 11219 `long long _Accum' types. The number of bits in the fixed-point 11220 representation is given by `TYPE_PRECISION', as in the 11221 `INTEGER_TYPE' case. There may be padding bits, fractional bits 11222 and integral bits. The number of fractional bits is given by 11223 `TYPE_FBIT', and the number of integral bits is given by 11224 `TYPE_IBIT'. The fixed-point type is unsigned if `TYPE_UNSIGNED' 11225 holds; otherwise, it is signed. The fixed-point type is 11226 saturating if `TYPE_SATURATING' holds; otherwise, it is not 11227 saturating. 11228 11229 `COMPLEX_TYPE' 11230 Used to represent GCC built-in `__complex__' data types. The 11231 `TREE_TYPE' is the type of the real and imaginary parts. 11232 11233 `ENUMERAL_TYPE' 11234 Used to represent an enumeration type. The `TYPE_PRECISION' gives 11235 (as an `int'), the number of bits used to represent the type. If 11236 there are no negative enumeration constants, `TYPE_UNSIGNED' will 11237 hold. The minimum and maximum enumeration constants may be 11238 obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively; 11239 each of these macros returns an `INTEGER_CST'. 11240 11241 The actual enumeration constants themselves may be obtained by 11242 looking at the `TYPE_VALUES'. This macro will return a 11243 `TREE_LIST', containing the constants. The `TREE_PURPOSE' of each 11244 node will be an `IDENTIFIER_NODE' giving the name of the constant; 11245 the `TREE_VALUE' will be an `INTEGER_CST' giving the value 11246 assigned to that constant. These constants will appear in the 11247 order in which they were declared. The `TREE_TYPE' of each of 11248 these constants will be the type of enumeration type itself. 11249 11250 `BOOLEAN_TYPE' 11251 Used to represent the `bool' type. 11252 11253 `POINTER_TYPE' 11254 Used to represent pointer types, and pointer to data member types. 11255 The `TREE_TYPE' gives the type to which this type points. 11256 11257 `REFERENCE_TYPE' 11258 Used to represent reference types. The `TREE_TYPE' gives the type 11259 to which this type refers. 11260 11261 `FUNCTION_TYPE' 11262 Used to represent the type of non-member functions and of static 11263 member functions. The `TREE_TYPE' gives the return type of the 11264 function. The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument 11265 types. The `TREE_VALUE' of each node in this list is the type of 11266 the corresponding argument; the `TREE_PURPOSE' is an expression 11267 for the default argument value, if any. If the last node in the 11268 list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is 11269 the `void_type_node'), then functions of this type do not take 11270 variable arguments. Otherwise, they do take a variable number of 11271 arguments. 11272 11273 Note that in C (but not in C++) a function declared like `void f()' 11274 is an unprototyped function taking a variable number of arguments; 11275 the `TYPE_ARG_TYPES' of such a function will be `NULL'. 11276 11277 `METHOD_TYPE' 11278 Used to represent the type of a non-static member function. Like a 11279 `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'. The 11280 type of `*this', i.e., the class of which functions of this type 11281 are a member, is given by the `TYPE_METHOD_BASETYPE'. The 11282 `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE', 11283 and includes the `this' argument. 11284 11285 `ARRAY_TYPE' 11286 Used to represent array types. The `TREE_TYPE' gives the type of 11287 the elements in the array. If the array-bound is present in the 11288 type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose 11289 `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper 11290 bounds of the array, respectively. The `TYPE_MIN_VALUE' will 11291 always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE' 11292 will be one less than the number of elements in the array, i.e., 11293 the highest value which may be used to index an element in the 11294 array. 11295 11296 `RECORD_TYPE' 11297 Used to represent `struct' and `class' types, as well as pointers 11298 to member functions and similar constructs in other languages. 11299 `TYPE_FIELDS' contains the items contained in this type, each of 11300 which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or 11301 `TYPE_DECL'. You may not make any assumptions about the ordering 11302 of the fields in the type or whether one or more of them overlap. 11303 11304 `UNION_TYPE' 11305 Used to represent `union' types. Similar to `RECORD_TYPE' except 11306 that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position 11307 zero. 11308 11309 `QUAL_UNION_TYPE' 11310 Used to represent part of a variant record in Ada. Similar to 11311 `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER' 11312 field, which contains a boolean expression that indicates whether 11313 the field is present in the object. The type will only have one 11314 field, so each field's `DECL_QUALIFIER' is only evaluated if none 11315 of the expressions in the previous fields in `TYPE_FIELDS' are 11316 nonzero. Normally these expressions will reference a field in the 11317 outer object using a `PLACEHOLDER_EXPR'. 11318 11319 `LANG_TYPE' 11320 This node is used to represent a language-specific type. The front 11321 end must handle it. 11322 11323 `OFFSET_TYPE' 11324 This node is used to represent a pointer-to-data member. For a 11325 data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the 11326 `TREE_TYPE' is the type of `m'. 11327 11328 11329 There are variables whose values represent some of the basic types. 11330 These include: 11331 `void_type_node' 11332 A node for `void'. 11333 11334 `integer_type_node' 11335 A node for `int'. 11336 11337 `unsigned_type_node.' 11338 A node for `unsigned int'. 11339 11340 `char_type_node.' 11341 A node for `char'. 11342 It may sometimes be useful to compare one of these variables with a 11343 type in hand, using `same_type_p'. 11344 11345 11346 File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 11347 11348 11.4 Declarations 11349 ================= 11350 11351 This section covers the various kinds of declarations that appear in the 11352 internal representation, except for declarations of functions 11353 (represented by `FUNCTION_DECL' nodes), which are described in *note 11354 Functions::. 11355 11356 * Menu: 11357 11358 * Working with declarations:: Macros and functions that work on 11359 declarations. 11360 * Internal structure:: How declaration nodes are represented. 11361 11362 11363 File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 11364 11365 11.4.1 Working with declarations 11366 -------------------------------- 11367 11368 Some macros can be used with any kind of declaration. These include: 11369 `DECL_NAME' 11370 This macro returns an `IDENTIFIER_NODE' giving the name of the 11371 entity. 11372 11373 `TREE_TYPE' 11374 This macro returns the type of the entity declared. 11375 11376 `EXPR_FILENAME' 11377 This macro returns the name of the file in which the entity was 11378 declared, as a `char*'. For an entity declared implicitly by the 11379 compiler (like `__builtin_memcpy'), this will be the string 11380 `"<internal>"'. 11381 11382 `EXPR_LINENO' 11383 This macro returns the line number at which the entity was 11384 declared, as an `int'. 11385 11386 `DECL_ARTIFICIAL' 11387 This predicate holds if the declaration was implicitly generated 11388 by the compiler. For example, this predicate will hold of an 11389 implicitly declared member function, or of the `TYPE_DECL' 11390 implicitly generated for a class type. Recall that in C++ code 11391 like: 11392 struct S {}; 11393 is roughly equivalent to C code like: 11394 struct S {}; 11395 typedef struct S S; 11396 The implicitly generated `typedef' declaration is represented by a 11397 `TYPE_DECL' for which `DECL_ARTIFICIAL' holds. 11398 11399 11400 The various kinds of declarations include: 11401 `LABEL_DECL' 11402 These nodes are used to represent labels in function bodies. For 11403 more information, see *note Functions::. These nodes only appear 11404 in block scopes. 11405 11406 `CONST_DECL' 11407 These nodes are used to represent enumeration constants. The 11408 value of the constant is given by `DECL_INITIAL' which will be an 11409 `INTEGER_CST' with the same type as the `TREE_TYPE' of the 11410 `CONST_DECL', i.e., an `ENUMERAL_TYPE'. 11411 11412 `RESULT_DECL' 11413 These nodes represent the value returned by a function. When a 11414 value is assigned to a `RESULT_DECL', that indicates that the 11415 value should be returned, via bitwise copy, by the function. You 11416 can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as 11417 with a `VAR_DECL'. 11418 11419 `TYPE_DECL' 11420 These nodes represent `typedef' declarations. The `TREE_TYPE' is 11421 the type declared to have the name given by `DECL_NAME'. In some 11422 cases, there is no associated name. 11423 11424 `VAR_DECL' 11425 These nodes represent variables with namespace or block scope, as 11426 well as static data members. The `DECL_SIZE' and `DECL_ALIGN' are 11427 analogous to `TYPE_SIZE' and `TYPE_ALIGN'. For a declaration, you 11428 should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the 11429 `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since 11430 special attributes may have been applied to the variable to give 11431 it a particular size and alignment. You may use the predicates 11432 `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the 11433 storage class specifiers `static' or `extern' were used to declare 11434 a variable. 11435 11436 If this variable is initialized (but does not require a 11437 constructor), the `DECL_INITIAL' will be an expression for the 11438 initializer. The initializer should be evaluated, and a bitwise 11439 copy into the variable performed. If the `DECL_INITIAL' is the 11440 `error_mark_node', there is an initializer, but it is given by an 11441 explicit statement later in the code; no bitwise copy is required. 11442 11443 GCC provides an extension that allows either automatic variables, 11444 or global variables, to be placed in particular registers. This 11445 extension is being used for a particular `VAR_DECL' if 11446 `DECL_REGISTER' holds for the `VAR_DECL', and if 11447 `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'. In that case, 11448 `DECL_ASSEMBLER_NAME' is the name of the register into which the 11449 variable will be placed. 11450 11451 `PARM_DECL' 11452 Used to represent a parameter to a function. Treat these nodes 11453 similarly to `VAR_DECL' nodes. These nodes only appear in the 11454 `DECL_ARGUMENTS' for a `FUNCTION_DECL'. 11455 11456 The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will 11457 actually be used when a value is passed to this function. It may 11458 be a wider type than the `TREE_TYPE' of the parameter; for 11459 example, the ordinary type might be `short' while the 11460 `DECL_ARG_TYPE' is `int'. 11461 11462 `DEBUG_EXPR_DECL' 11463 Used to represent an anonymous debug-information temporary created 11464 to hold an expression as it is optimized away, so that its value 11465 can be referenced in debug bind statements. 11466 11467 `FIELD_DECL' 11468 These nodes represent non-static data members. The `DECL_SIZE' and 11469 `DECL_ALIGN' behave as for `VAR_DECL' nodes. The position of the 11470 field within the parent record is specified by a combination of 11471 three attributes. `DECL_FIELD_OFFSET' is the position, counting 11472 in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the 11473 bit of the field closest to the beginning of the structure. 11474 `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 11475 field within this word; this may be nonzero even for fields that 11476 are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than 11477 the natural alignment of the field's type. 11478 11479 If `DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 11480 bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was 11481 originally specified for it, while DECL_TYPE may be a modified 11482 type with lesser precision, according to the size of the bit field. 11483 11484 `NAMESPACE_DECL' 11485 Namespaces provide a name hierarchy for other declarations. They 11486 appear in the `DECL_CONTEXT' of other `_DECL' nodes. 11487 11488 11489 11490 File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 11491 11492 11.4.2 Internal structure 11493 ------------------------- 11494 11495 `DECL' nodes are represented internally as a hierarchy of structures. 11496 11497 * Menu: 11498 11499 * Current structure hierarchy:: The current DECL node structure 11500 hierarchy. 11501 * Adding new DECL node types:: How to add a new DECL node to a 11502 frontend. 11503 11504 11505 File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 11506 11507 11.4.2.1 Current structure hierarchy 11508 .................................... 11509 11510 `struct tree_decl_minimal' 11511 This is the minimal structure to inherit from in order for common 11512 `DECL' macros to work. The fields it contains are a unique ID, 11513 source location, context, and name. 11514 11515 `struct tree_decl_common' 11516 This structure inherits from `struct tree_decl_minimal'. It 11517 contains fields that most `DECL' nodes need, such as a field to 11518 store alignment, machine mode, size, and attributes. 11519 11520 `struct tree_field_decl' 11521 This structure inherits from `struct tree_decl_common'. It is 11522 used to represent `FIELD_DECL'. 11523 11524 `struct tree_label_decl' 11525 This structure inherits from `struct tree_decl_common'. It is 11526 used to represent `LABEL_DECL'. 11527 11528 `struct tree_translation_unit_decl' 11529 This structure inherits from `struct tree_decl_common'. It is 11530 used to represent `TRANSLATION_UNIT_DECL'. 11531 11532 `struct tree_decl_with_rtl' 11533 This structure inherits from `struct tree_decl_common'. It 11534 contains a field to store the low-level RTL associated with a 11535 `DECL' node. 11536 11537 `struct tree_result_decl' 11538 This structure inherits from `struct tree_decl_with_rtl'. It is 11539 used to represent `RESULT_DECL'. 11540 11541 `struct tree_const_decl' 11542 This structure inherits from `struct tree_decl_with_rtl'. It is 11543 used to represent `CONST_DECL'. 11544 11545 `struct tree_parm_decl' 11546 This structure inherits from `struct tree_decl_with_rtl'. It is 11547 used to represent `PARM_DECL'. 11548 11549 `struct tree_decl_with_vis' 11550 This structure inherits from `struct tree_decl_with_rtl'. It 11551 contains fields necessary to store visibility information, as well 11552 as a section name and assembler name. 11553 11554 `struct tree_var_decl' 11555 This structure inherits from `struct tree_decl_with_vis'. It is 11556 used to represent `VAR_DECL'. 11557 11558 `struct tree_function_decl' 11559 This structure inherits from `struct tree_decl_with_vis'. It is 11560 used to represent `FUNCTION_DECL'. 11561 11562 11563 11564 File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 11565 11566 11.4.2.2 Adding new DECL node types 11567 ................................... 11568 11569 Adding a new `DECL' tree consists of the following steps 11570 11571 Add a new tree code for the `DECL' node 11572 For language specific `DECL' nodes, there is a `.def' file in each 11573 frontend directory where the tree code should be added. For 11574 `DECL' nodes that are part of the middle-end, the code should be 11575 added to `tree.def'. 11576 11577 Create a new structure type for the `DECL' node 11578 These structures should inherit from one of the existing 11579 structures in the language hierarchy by using that structure as 11580 the first member. 11581 11582 struct tree_foo_decl 11583 { 11584 struct tree_decl_with_vis common; 11585 } 11586 11587 Would create a structure name `tree_foo_decl' that inherits from 11588 `struct tree_decl_with_vis'. 11589 11590 For language specific `DECL' nodes, this new structure type should 11591 go in the appropriate `.h' file. For `DECL' nodes that are part 11592 of the middle-end, the structure type should go in `tree.h'. 11593 11594 Add a member to the tree structure enumerator for the node 11595 For garbage collection and dynamic checking purposes, each `DECL' 11596 node structure type is required to have a unique enumerator value 11597 specified with it. For language specific `DECL' nodes, this new 11598 enumerator value should go in the appropriate `.def' file. For 11599 `DECL' nodes that are part of the middle-end, the enumerator 11600 values are specified in `treestruct.def'. 11601 11602 Update `union tree_node' 11603 In order to make your new structure type usable, it must be added 11604 to `union tree_node'. For language specific `DECL' nodes, a new 11605 entry should be added to the appropriate `.h' file of the form 11606 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 11607 For `DECL' nodes that are part of the middle-end, the additional 11608 member goes directly into `union tree_node' in `tree.h'. 11609 11610 Update dynamic checking info 11611 In order to be able to check whether accessing a named portion of 11612 `union tree_node' is legal, and whether a certain `DECL' node 11613 contains one of the enumerated `DECL' node structures in the 11614 hierarchy, a simple lookup table is used. This lookup table needs 11615 to be kept up to date with the tree structure hierarchy, or else 11616 checking and containment macros will fail inappropriately. 11617 11618 For language specific `DECL' nodes, their is an `init_ts' function 11619 in an appropriate `.c' file, which initializes the lookup table. 11620 Code setting up the table for new `DECL' nodes should be added 11621 there. For each `DECL' tree code and enumerator value 11622 representing a member of the inheritance hierarchy, the table 11623 should contain 1 if that tree code inherits (directly or 11624 indirectly) from that member. Thus, a `FOO_DECL' node derived 11625 from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL', 11626 would be set up as follows 11627 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 11628 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 11629 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 11630 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 11631 11632 For `DECL' nodes that are part of the middle-end, the setup code 11633 goes into `tree.c'. 11634 11635 Add macros to access any new fields and flags 11636 Each added field or flag should have a macro that is used to access 11637 it, that performs appropriate checking to ensure only the right 11638 type of `DECL' nodes access the field. 11639 11640 These macros generally take the following form 11641 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 11642 However, if the structure is simply a base class for further 11643 structures, something like the following should be used 11644 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 11645 #define BASE_STRUCT_FIELDNAME(NODE) \ 11646 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 11647 11648 11649 11650 File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 11651 11652 11.5 Attributes in trees 11653 ======================== 11654 11655 Attributes, as specified using the `__attribute__' keyword, are 11656 represented internally as a `TREE_LIST'. The `TREE_PURPOSE' is the 11657 name of the attribute, as an `IDENTIFIER_NODE'. The `TREE_VALUE' is a 11658 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE' 11659 if there are no arguments; the arguments are stored as the `TREE_VALUE' 11660 of successive entries in the list, and may be identifiers or 11661 expressions. The `TREE_CHAIN' of the attribute is the next attribute 11662 in a list of attributes applying to the same declaration or type, or 11663 `NULL_TREE' if there are no further attributes in the list. 11664 11665 Attributes may be attached to declarations and to types; these 11666 attributes may be accessed with the following macros. All attributes 11667 are stored in this way, and many also cause other changes to the 11668 declaration or type or to other internal compiler data structures. 11669 11670 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 11671 This macro returns the attributes on the declaration DECL. 11672 11673 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 11674 This macro returns the attributes on the type TYPE. 11675 11676 11677 File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 11678 11679 11.6 Expressions 11680 ================ 11681 11682 The internal representation for expressions is for the most part quite 11683 straightforward. However, there are a few facts that one must bear in 11684 mind. In particular, the expression "tree" is actually a directed 11685 acyclic graph. (For example there may be many references to the integer 11686 constant zero throughout the source program; many of these will be 11687 represented by the same expression node.) You should not rely on 11688 certain kinds of node being shared, nor should you rely on certain 11689 kinds of nodes being unshared. 11690 11691 The following macros can be used with all expression nodes: 11692 11693 `TREE_TYPE' 11694 Returns the type of the expression. This value may not be 11695 precisely the same type that would be given the expression in the 11696 original program. 11697 11698 In what follows, some nodes that one might expect to always have type 11699 `bool' are documented to have either integral or boolean type. At some 11700 point in the future, the C front end may also make use of this same 11701 intermediate representation, and at this point these nodes will 11702 certainly have integral type. The previous sentence is not meant to 11703 imply that the C++ front end does not or will not give these nodes 11704 integral type. 11705 11706 Below, we list the various kinds of expression nodes. Except where 11707 noted otherwise, the operands to an expression are accessed using the 11708 `TREE_OPERAND' macro. For example, to access the first operand to a 11709 binary plus expression `expr', use: 11710 11711 TREE_OPERAND (expr, 0) 11712 As this example indicates, the operands are zero-indexed. 11713 11714 * Menu: 11715 11716 * Constants: Constant expressions. 11717 * Storage References:: 11718 * Unary and Binary Expressions:: 11719 * Vectors:: 11720 11721 11722 File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 11723 11724 11.6.1 Constant expressions 11725 --------------------------- 11726 11727 The table below begins with constants, moves on to unary expressions, 11728 then proceeds to binary expressions, and concludes with various other 11729 kinds of expressions: 11730 11731 `INTEGER_CST' 11732 These nodes represent integer constants. Note that the type of 11733 these constants is obtained with `TREE_TYPE'; they are not always 11734 of type `int'. In particular, `char' constants are represented 11735 with `INTEGER_CST' nodes. The value of the integer constant `e' is 11736 given by 11737 ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT) 11738 + TREE_INST_CST_LOW (e)) 11739 HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms. 11740 Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a 11741 `HOST_WIDE_INT'. The value of an `INTEGER_CST' is interpreted as 11742 a signed or unsigned quantity depending on the type of the 11743 constant. In general, the expression given above will overflow, 11744 so it should not be used to calculate the value of the constant. 11745 11746 The variable `integer_zero_node' is an integer constant with value 11747 zero. Similarly, `integer_one_node' is an integer constant with 11748 value one. The `size_zero_node' and `size_one_node' variables are 11749 analogous, but have type `size_t' rather than `int'. 11750 11751 The function `tree_int_cst_lt' is a predicate which holds if its 11752 first argument is less than its second. Both constants are 11753 assumed to have the same signedness (i.e., either both should be 11754 signed or both should be unsigned.) The full width of the 11755 constant is used when doing the comparison; the usual rules about 11756 promotions and conversions are ignored. Similarly, 11757 `tree_int_cst_equal' holds if the two constants are equal. The 11758 `tree_int_cst_sgn' function returns the sign of a constant. The 11759 value is `1', `0', or `-1' according on whether the constant is 11760 greater than, equal to, or less than zero. Again, the signedness 11761 of the constant's type is taken into account; an unsigned constant 11762 is never less than zero, no matter what its bit-pattern. 11763 11764 `REAL_CST' 11765 FIXME: Talk about how to obtain representations of this constant, 11766 do comparisons, and so forth. 11767 11768 `FIXED_CST' 11769 These nodes represent fixed-point constants. The type of these 11770 constants is obtained with `TREE_TYPE'. `TREE_FIXED_CST_PTR' 11771 points to a `struct fixed_value'; `TREE_FIXED_CST' returns the 11772 structure itself. `struct fixed_value' contains `data' with the 11773 size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated 11774 fixed-point machine mode for `data'. 11775 11776 `COMPLEX_CST' 11777 These nodes are used to represent complex number constants, that 11778 is a `__complex__' whose parts are constant nodes. The 11779 `TREE_REALPART' and `TREE_IMAGPART' return the real and the 11780 imaginary parts respectively. 11781 11782 `VECTOR_CST' 11783 These nodes are used to represent vector constants, whose parts are 11784 constant nodes. Each individual constant node is either an 11785 integer or a double constant node. The first operand is a 11786 `TREE_LIST' of the constant nodes and is accessed through 11787 `TREE_VECTOR_CST_ELTS'. 11788 11789 `STRING_CST' 11790 These nodes represent string-constants. The `TREE_STRING_LENGTH' 11791 returns the length of the string, as an `int'. The 11792 `TREE_STRING_POINTER' is a `char*' containing the string itself. 11793 The string may not be `NUL'-terminated, and it may contain 11794 embedded `NUL' characters. Therefore, the `TREE_STRING_LENGTH' 11795 includes the trailing `NUL' if it is present. 11796 11797 For wide string constants, the `TREE_STRING_LENGTH' is the number 11798 of bytes in the string, and the `TREE_STRING_POINTER' points to an 11799 array of the bytes of the string, as represented on the target 11800 system (that is, as integers in the target endianness). Wide and 11801 non-wide string constants are distinguished only by the `TREE_TYPE' 11802 of the `STRING_CST'. 11803 11804 FIXME: The formats of string constants are not well-defined when 11805 the target system bytes are not the same width as host system 11806 bytes. 11807 11808 11809 11810 File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 11811 11812 11.6.2 References to storage 11813 ---------------------------- 11814 11815 `ARRAY_REF' 11816 These nodes represent array accesses. The first operand is the 11817 array; the second is the index. To calculate the address of the 11818 memory accessed, you must scale the index by the size of the type 11819 of the array elements. The type of these expressions must be the 11820 type of a component of the array. The third and fourth operands 11821 are used after gimplification to represent the lower bound and 11822 component size but should not be used directly; call 11823 `array_ref_low_bound' and `array_ref_element_size' instead. 11824 11825 `ARRAY_RANGE_REF' 11826 These nodes represent access to a range (or "slice") of an array. 11827 The operands are the same as that for `ARRAY_REF' and have the same 11828 meanings. The type of these expressions must be an array whose 11829 component type is the same as that of the first operand. The 11830 range of that array type determines the amount of data these 11831 expressions access. 11832 11833 `TARGET_MEM_REF' 11834 These nodes represent memory accesses whose address directly map to 11835 an addressing mode of the target architecture. The first argument 11836 is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed 11837 address. The second argument is `TMR_BASE' and the third one is 11838 `TMR_INDEX'. The fourth argument is `TMR_STEP' and must be an 11839 `INTEGER_CST'. The fifth argument is `TMR_OFFSET' and must be an 11840 `INTEGER_CST'. Any of the arguments may be NULL if the 11841 appropriate component does not appear in the address. Address of 11842 the `TARGET_MEM_REF' is determined in the following way. 11843 11844 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 11845 11846 The sixth argument is the reference to the original memory access, 11847 which is preserved for the purposes of the RTL alias analysis. 11848 The seventh argument is a tag representing the results of tree 11849 level alias analysis. 11850 11851 `ADDR_EXPR' 11852 These nodes are used to represent the address of an object. (These 11853 expressions will always have pointer or reference type.) The 11854 operand may be another expression, or it may be a declaration. 11855 11856 As an extension, GCC allows users to take the address of a label. 11857 In this case, the operand of the `ADDR_EXPR' will be a 11858 `LABEL_DECL'. The type of such an expression is `void*'. 11859 11860 If the object addressed is not an lvalue, a temporary is created, 11861 and the address of the temporary is used. 11862 11863 `INDIRECT_REF' 11864 These nodes are used to represent the object pointed to by a 11865 pointer. The operand is the pointer being dereferenced; it will 11866 always have pointer or reference type. 11867 11868 `MEM_REF' 11869 These nodes are used to represent the object pointed to by a 11870 pointer offset by a constant. The first operand is the pointer 11871 being dereferenced; it will always have pointer or reference type. 11872 The second operand is a pointer constant. Its type is specifying 11873 the type to be used for type-based alias analysis. 11874 11875 `COMPONENT_REF' 11876 These nodes represent non-static data member accesses. The first 11877 operand is the object (rather than a pointer to it); the second 11878 operand is the `FIELD_DECL' for the data member. The third 11879 operand represents the byte offset of the field, but should not be 11880 used directly; call `component_ref_field_offset' instead. 11881 11882 11883 11884 File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 11885 11886 11.6.3 Unary and Binary Expressions 11887 ----------------------------------- 11888 11889 `NEGATE_EXPR' 11890 These nodes represent unary negation of the single operand, for 11891 both integer and floating-point types. The type of negation can be 11892 determined by looking at the type of the expression. 11893 11894 The behavior of this operation on signed arithmetic overflow is 11895 controlled by the `flag_wrapv' and `flag_trapv' variables. 11896 11897 `ABS_EXPR' 11898 These nodes represent the absolute value of the single operand, for 11899 both integer and floating-point types. This is typically used to 11900 implement the `abs', `labs' and `llabs' builtins for integer 11901 types, and the `fabs', `fabsf' and `fabsl' builtins for floating 11902 point types. The type of abs operation can be determined by 11903 looking at the type of the expression. 11904 11905 This node is not used for complex types. To represent the modulus 11906 or complex abs of a complex value, use the `BUILT_IN_CABS', 11907 `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to 11908 implement the C99 `cabs', `cabsf' and `cabsl' built-in functions. 11909 11910 `BIT_NOT_EXPR' 11911 These nodes represent bitwise complement, and will always have 11912 integral type. The only operand is the value to be complemented. 11913 11914 `TRUTH_NOT_EXPR' 11915 These nodes represent logical negation, and will always have 11916 integral (or boolean) type. The operand is the value being 11917 negated. The type of the operand and that of the result are 11918 always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 11919 11920 `PREDECREMENT_EXPR' 11921 `PREINCREMENT_EXPR' 11922 `POSTDECREMENT_EXPR' 11923 `POSTINCREMENT_EXPR' 11924 These nodes represent increment and decrement expressions. The 11925 value of the single operand is computed, and the operand 11926 incremented or decremented. In the case of `PREDECREMENT_EXPR' and 11927 `PREINCREMENT_EXPR', the value of the expression is the value 11928 resulting after the increment or decrement; in the case of 11929 `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before 11930 the increment or decrement occurs. The type of the operand, like 11931 that of the result, will be either integral, boolean, or 11932 floating-point. 11933 11934 `FIX_TRUNC_EXPR' 11935 These nodes represent conversion of a floating-point value to an 11936 integer. The single operand will have a floating-point type, while 11937 the complete expression will have an integral (or boolean) type. 11938 The operand is rounded towards zero. 11939 11940 `FLOAT_EXPR' 11941 These nodes represent conversion of an integral (or boolean) value 11942 to a floating-point value. The single operand will have integral 11943 type, while the complete expression will have a floating-point 11944 type. 11945 11946 FIXME: How is the operand supposed to be rounded? Is this 11947 dependent on `-mieee'? 11948 11949 `COMPLEX_EXPR' 11950 These nodes are used to represent complex numbers constructed from 11951 two expressions of the same (integer or real) type. The first 11952 operand is the real part and the second operand is the imaginary 11953 part. 11954 11955 `CONJ_EXPR' 11956 These nodes represent the conjugate of their operand. 11957 11958 `REALPART_EXPR' 11959 `IMAGPART_EXPR' 11960 These nodes represent respectively the real and the imaginary parts 11961 of complex numbers (their sole argument). 11962 11963 `NON_LVALUE_EXPR' 11964 These nodes indicate that their one and only operand is not an 11965 lvalue. A back end can treat these identically to the single 11966 operand. 11967 11968 `NOP_EXPR' 11969 These nodes are used to represent conversions that do not require 11970 any code-generation. For example, conversion of a `char*' to an 11971 `int*' does not require any code be generated; such a conversion is 11972 represented by a `NOP_EXPR'. The single operand is the expression 11973 to be converted. The conversion from a pointer to a reference is 11974 also represented with a `NOP_EXPR'. 11975 11976 `CONVERT_EXPR' 11977 These nodes are similar to `NOP_EXPR's, but are used in those 11978 situations where code may need to be generated. For example, if an 11979 `int*' is converted to an `int' code may need to be generated on 11980 some platforms. These nodes are never used for C++-specific 11981 conversions, like conversions between pointers to different 11982 classes in an inheritance hierarchy. Any adjustments that need to 11983 be made in such cases are always indicated explicitly. Similarly, 11984 a user-defined conversion is never represented by a 11985 `CONVERT_EXPR'; instead, the function calls are made explicit. 11986 11987 `FIXED_CONVERT_EXPR' 11988 These nodes are used to represent conversions that involve 11989 fixed-point values. For example, from a fixed-point value to 11990 another fixed-point value, from an integer to a fixed-point value, 11991 from a fixed-point value to an integer, from a floating-point 11992 value to a fixed-point value, or from a fixed-point value to a 11993 floating-point value. 11994 11995 `LSHIFT_EXPR' 11996 `RSHIFT_EXPR' 11997 These nodes represent left and right shifts, respectively. The 11998 first operand is the value to shift; it will always be of integral 11999 type. The second operand is an expression for the number of bits 12000 by which to shift. Right shift should be treated as arithmetic, 12001 i.e., the high-order bits should be zero-filled when the 12002 expression has unsigned type and filled with the sign bit when the 12003 expression has signed type. Note that the result is undefined if 12004 the second operand is larger than or equal to the first operand's 12005 type size. Unlike most nodes, these can have a vector as first 12006 operand and a scalar as second operand. 12007 12008 `BIT_IOR_EXPR' 12009 `BIT_XOR_EXPR' 12010 `BIT_AND_EXPR' 12011 These nodes represent bitwise inclusive or, bitwise exclusive or, 12012 and bitwise and, respectively. Both operands will always have 12013 integral type. 12014 12015 `TRUTH_ANDIF_EXPR' 12016 `TRUTH_ORIF_EXPR' 12017 These nodes represent logical "and" and logical "or", respectively. 12018 These operators are not strict; i.e., the second operand is 12019 evaluated only if the value of the expression is not determined by 12020 evaluation of the first operand. The type of the operands and 12021 that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 12022 12023 `TRUTH_AND_EXPR' 12024 `TRUTH_OR_EXPR' 12025 `TRUTH_XOR_EXPR' 12026 These nodes represent logical and, logical or, and logical 12027 exclusive or. They are strict; both arguments are always 12028 evaluated. There are no corresponding operators in C or C++, but 12029 the front end will sometimes generate these expressions anyhow, if 12030 it can tell that strictness does not matter. The type of the 12031 operands and that of the result are always of `BOOLEAN_TYPE' or 12032 `INTEGER_TYPE'. 12033 12034 `POINTER_PLUS_EXPR' 12035 This node represents pointer arithmetic. The first operand is 12036 always a pointer/reference type. The second operand is always an 12037 unsigned integer type compatible with sizetype. This is the only 12038 binary arithmetic operand that can operate on pointer types. 12039 12040 `PLUS_EXPR' 12041 `MINUS_EXPR' 12042 `MULT_EXPR' 12043 These nodes represent various binary arithmetic operations. 12044 Respectively, these operations are addition, subtraction (of the 12045 second operand from the first) and multiplication. Their operands 12046 may have either integral or floating type, but there will never be 12047 case in which one operand is of floating type and the other is of 12048 integral type. 12049 12050 The behavior of these operations on signed arithmetic overflow is 12051 controlled by the `flag_wrapv' and `flag_trapv' variables. 12052 12053 `MULT_HIGHPART_EXPR' 12054 This node represents the "high-part" of a widening multiplication. 12055 For an integral type with B bits of precision, the result is the 12056 most significant B bits of the full 2B product. 12057 12058 `RDIV_EXPR' 12059 This node represents a floating point division operation. 12060 12061 `TRUNC_DIV_EXPR' 12062 `FLOOR_DIV_EXPR' 12063 `CEIL_DIV_EXPR' 12064 `ROUND_DIV_EXPR' 12065 These nodes represent integer division operations that return an 12066 integer result. `TRUNC_DIV_EXPR' rounds towards zero, 12067 `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR' 12068 rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to 12069 the closest integer. Integer division in C and C++ is truncating, 12070 i.e. `TRUNC_DIV_EXPR'. 12071 12072 The behavior of these operations on signed arithmetic overflow, 12073 when dividing the minimum signed integer by minus one, is 12074 controlled by the `flag_wrapv' and `flag_trapv' variables. 12075 12076 `TRUNC_MOD_EXPR' 12077 `FLOOR_MOD_EXPR' 12078 `CEIL_MOD_EXPR' 12079 `ROUND_MOD_EXPR' 12080 These nodes represent the integer remainder or modulus operation. 12081 The integer modulus of two operands `a' and `b' is defined as `a - 12082 (a/b)*b' where the division calculated using the corresponding 12083 division operator. Hence for `TRUNC_MOD_EXPR' this definition 12084 assumes division using truncation towards zero, i.e. 12085 `TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 12086 division, i.e. `TRUNC_MOD_EXPR'. 12087 12088 `EXACT_DIV_EXPR' 12089 The `EXACT_DIV_EXPR' code is used to represent integer divisions 12090 where the numerator is known to be an exact multiple of the 12091 denominator. This allows the backend to choose between the faster 12092 of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the 12093 current target. 12094 12095 `LT_EXPR' 12096 `LE_EXPR' 12097 `GT_EXPR' 12098 `GE_EXPR' 12099 `EQ_EXPR' 12100 `NE_EXPR' 12101 These nodes represent the less than, less than or equal to, greater 12102 than, greater than or equal to, equal, and not equal comparison 12103 operators. The first and second operands will either be both of 12104 integral type, both of floating type or both of vector type. The 12105 result type of these expressions will always be of integral, 12106 boolean or signed integral vector type. These operations return 12107 the result type's zero value for false, the result type's one 12108 value for true, and a vector whose elements are zero (false) or 12109 minus one (true) for vectors. 12110 12111 For floating point comparisons, if we honor IEEE NaNs and either 12112 operand is NaN, then `NE_EXPR' always returns true and the 12113 remaining operators always return false. On some targets, 12114 comparisons against an IEEE NaN, other than equality and 12115 inequality, may generate a floating point exception. 12116 12117 `ORDERED_EXPR' 12118 `UNORDERED_EXPR' 12119 These nodes represent non-trapping ordered and unordered comparison 12120 operators. These operations take two floating point operands and 12121 determine whether they are ordered or unordered relative to each 12122 other. If either operand is an IEEE NaN, their comparison is 12123 defined to be unordered, otherwise the comparison is defined to be 12124 ordered. The result type of these expressions will always be of 12125 integral or boolean type. These operations return the result 12126 type's zero value for false, and the result type's one value for 12127 true. 12128 12129 `UNLT_EXPR' 12130 `UNLE_EXPR' 12131 `UNGT_EXPR' 12132 `UNGE_EXPR' 12133 `UNEQ_EXPR' 12134 `LTGT_EXPR' 12135 These nodes represent the unordered comparison operators. These 12136 operations take two floating point operands and determine whether 12137 the operands are unordered or are less than, less than or equal to, 12138 greater than, greater than or equal to, or equal respectively. For 12139 example, `UNLT_EXPR' returns true if either operand is an IEEE NaN 12140 or the first operand is less than the second. With the possible 12141 exception of `LTGT_EXPR', all of these operations are guaranteed 12142 not to generate a floating point exception. The result type of 12143 these expressions will always be of integral or boolean type. 12144 These operations return the result type's zero value for false, 12145 and the result type's one value for true. 12146 12147 `MODIFY_EXPR' 12148 These nodes represent assignment. The left-hand side is the first 12149 operand; the right-hand side is the second operand. The left-hand 12150 side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or 12151 other lvalue. 12152 12153 These nodes are used to represent not only assignment with `=' but 12154 also compound assignments (like `+='), by reduction to `=' 12155 assignment. In other words, the representation for `i += 3' looks 12156 just like that for `i = i + 3'. 12157 12158 `INIT_EXPR' 12159 These nodes are just like `MODIFY_EXPR', but are used only when a 12160 variable is initialized, rather than assigned to subsequently. 12161 This means that we can assume that the target of the 12162 initialization is not used in computing its own value; any 12163 reference to the lhs in computing the rhs is undefined. 12164 12165 `COMPOUND_EXPR' 12166 These nodes represent comma-expressions. The first operand is an 12167 expression whose value is computed and thrown away prior to the 12168 evaluation of the second operand. The value of the entire 12169 expression is the value of the second operand. 12170 12171 `COND_EXPR' 12172 These nodes represent `?:' expressions. The first operand is of 12173 boolean or integral type. If it evaluates to a nonzero value, the 12174 second operand should be evaluated, and returned as the value of 12175 the expression. Otherwise, the third operand is evaluated, and 12176 returned as the value of the expression. 12177 12178 The second operand must have the same type as the entire 12179 expression, unless it unconditionally throws an exception or calls 12180 a noreturn function, in which case it should have void type. The 12181 same constraints apply to the third operand. This allows array 12182 bounds checks to be represented conveniently as `(i >= 0 && i < 12183 10) ? i : abort()'. 12184 12185 As a GNU extension, the C language front-ends allow the second 12186 operand of the `?:' operator may be omitted in the source. For 12187 example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x' 12188 is an expression without side-effects. In the tree 12189 representation, however, the second operand is always present, 12190 possibly protected by `SAVE_EXPR' if the first argument does cause 12191 side-effects. 12192 12193 `CALL_EXPR' 12194 These nodes are used to represent calls to functions, including 12195 non-static member functions. `CALL_EXPR's are implemented as 12196 expression nodes with a variable number of operands. Rather than 12197 using `TREE_OPERAND' to extract them, it is preferable to use the 12198 specialized accessor macros and functions that operate 12199 specifically on `CALL_EXPR' nodes. 12200 12201 `CALL_EXPR_FN' returns a pointer to the function to call; it is 12202 always an expression whose type is a `POINTER_TYPE'. 12203 12204 The number of arguments to the call is returned by 12205 `call_expr_nargs', while the arguments themselves can be accessed 12206 with the `CALL_EXPR_ARG' macro. The arguments are zero-indexed 12207 and numbered left-to-right. You can iterate over the arguments 12208 using `FOR_EACH_CALL_EXPR_ARG', as in: 12209 12210 tree call, arg; 12211 call_expr_arg_iterator iter; 12212 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 12213 /* arg is bound to successive arguments of call. */ 12214 ...; 12215 12216 For non-static member functions, there will be an operand 12217 corresponding to the `this' pointer. There will always be 12218 expressions corresponding to all of the arguments, even if the 12219 function is declared with default arguments and some arguments are 12220 not explicitly provided at the call sites. 12221 12222 `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is 12223 used to implement nested functions. This operand is otherwise 12224 null. 12225 12226 `CLEANUP_POINT_EXPR' 12227 These nodes represent full-expressions. The single operand is an 12228 expression to evaluate. Any destructor calls engendered by the 12229 creation of temporaries during the evaluation of that expression 12230 should be performed immediately after the expression is evaluated. 12231 12232 `CONSTRUCTOR' 12233 These nodes represent the brace-enclosed initializers for a 12234 structure or array. The first operand is reserved for use by the 12235 back end. The second operand is a `TREE_LIST'. If the 12236 `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or 12237 `UNION_TYPE', then the `TREE_PURPOSE' of each node in the 12238 `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each 12239 node will be the expression used to initialize that field. 12240 12241 If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then 12242 the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an 12243 `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's. A single 12244 `INTEGER_CST' indicates which element of the array (indexed from 12245 zero) is being assigned to. A `RANGE_EXPR' indicates an inclusive 12246 range of elements to initialize. In both cases the `TREE_VALUE' 12247 is the corresponding initializer. It is re-evaluated for each 12248 element of a `RANGE_EXPR'. If the `TREE_PURPOSE' is `NULL_TREE', 12249 then the initializer is for the next available array element. 12250 12251 In the front end, you should not depend on the fields appearing in 12252 any particular order. However, in the middle end, fields must 12253 appear in declaration order. You should not assume that all 12254 fields will be represented. Unrepresented fields will be set to 12255 zero. 12256 12257 `COMPOUND_LITERAL_EXPR' 12258 These nodes represent ISO C99 compound literals. The 12259 `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an 12260 anonymous `VAR_DECL' for the unnamed object represented by the 12261 compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a 12262 `CONSTRUCTOR' representing the brace-enclosed list of initializers 12263 in the compound literal. That anonymous `VAR_DECL' can also be 12264 accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro. 12265 12266 `SAVE_EXPR' 12267 A `SAVE_EXPR' represents an expression (possibly involving 12268 side-effects) that is used more than once. The side-effects should 12269 occur only the first time the expression is evaluated. Subsequent 12270 uses should just reuse the computed value. The first operand to 12271 the `SAVE_EXPR' is the expression to evaluate. The side-effects 12272 should be executed where the `SAVE_EXPR' is first encountered in a 12273 depth-first preorder traversal of the expression tree. 12274 12275 `TARGET_EXPR' 12276 A `TARGET_EXPR' represents a temporary object. The first operand 12277 is a `VAR_DECL' for the temporary variable. The second operand is 12278 the initializer for the temporary. The initializer is evaluated 12279 and, if non-void, copied (bitwise) into the temporary. If the 12280 initializer is void, that means that it will perform the 12281 initialization itself. 12282 12283 Often, a `TARGET_EXPR' occurs on the right-hand side of an 12284 assignment, or as the second operand to a comma-expression which is 12285 itself the right-hand side of an assignment, etc. In this case, 12286 we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is 12287 "orphaned". For a normal `TARGET_EXPR' the temporary variable 12288 should be treated as an alias for the left-hand side of the 12289 assignment, rather than as a new temporary variable. 12290 12291 The third operand to the `TARGET_EXPR', if present, is a 12292 cleanup-expression (i.e., destructor call) for the temporary. If 12293 this expression is orphaned, then this expression must be executed 12294 when the statement containing this expression is complete. These 12295 cleanups must always be executed in the order opposite to that in 12296 which they were encountered. Note that if a temporary is created 12297 on one branch of a conditional operator (i.e., in the second or 12298 third operand to a `COND_EXPR'), the cleanup must be run only if 12299 that branch is actually executed. 12300 12301 `VA_ARG_EXPR' 12302 This node is used to implement support for the C/C++ variable 12303 argument-list mechanism. It represents expressions like `va_arg 12304 (ap, type)'. Its `TREE_TYPE' yields the tree representation for 12305 `type' and its sole argument yields the representation for `ap'. 12306 12307 12308 12309 File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 12310 12311 11.6.4 Vectors 12312 -------------- 12313 12314 `VEC_LSHIFT_EXPR' 12315 `VEC_RSHIFT_EXPR' 12316 These nodes represent whole vector left and right shifts, 12317 respectively. The first operand is the vector to shift; it will 12318 always be of vector type. The second operand is an expression for 12319 the number of bits by which to shift. Note that the result is 12320 undefined if the second operand is larger than or equal to the 12321 first operand's type size. 12322 12323 `VEC_WIDEN_MULT_HI_EXPR' 12324 `VEC_WIDEN_MULT_LO_EXPR' 12325 These nodes represent widening vector multiplication of the high 12326 and low parts of the two input vectors, respectively. Their 12327 operands are vectors that contain the same number of elements 12328 (`N') of the same integral type. The result is a vector that 12329 contains half as many elements, of an integral type whose size is 12330 twice as wide. In the case of `VEC_WIDEN_MULT_HI_EXPR' the high 12331 `N/2' elements of the two vector are multiplied to produce the 12332 vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR' 12333 the low `N/2' elements of the two vector are multiplied to produce 12334 the vector of `N/2' products. 12335 12336 `VEC_UNPACK_HI_EXPR' 12337 `VEC_UNPACK_LO_EXPR' 12338 These nodes represent unpacking of the high and low parts of the 12339 input vector, respectively. The single operand is a vector that 12340 contains `N' elements of the same integral or floating point type. 12341 The result is a vector that contains half as many elements, of an 12342 integral or floating point type whose size is twice as wide. In 12343 the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the 12344 vector are extracted and widened (promoted). In the case of 12345 `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are 12346 extracted and widened (promoted). 12347 12348 `VEC_UNPACK_FLOAT_HI_EXPR' 12349 `VEC_UNPACK_FLOAT_LO_EXPR' 12350 These nodes represent unpacking of the high and low parts of the 12351 input vector, where the values are converted from fixed point to 12352 floating point. The single operand is a vector that contains `N' 12353 elements of the same integral type. The result is a vector that 12354 contains half as many elements of a floating point type whose size 12355 is twice as wide. In the case of `VEC_UNPACK_HI_EXPR' the high 12356 `N/2' elements of the vector are extracted, converted and widened. 12357 In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the 12358 vector are extracted, converted and widened. 12359 12360 `VEC_PACK_TRUNC_EXPR' 12361 This node represents packing of truncated elements of the two 12362 input vectors into the output vector. Input operands are vectors 12363 that contain the same number of elements of the same integral or 12364 floating point type. The result is a vector that contains twice 12365 as many elements of an integral or floating point type whose size 12366 is half as wide. The elements of the two vectors are demoted and 12367 merged (concatenated) to form the output vector. 12368 12369 `VEC_PACK_SAT_EXPR' 12370 This node represents packing of elements of the two input vectors 12371 into the output vector using saturation. Input operands are 12372 vectors that contain the same number of elements of the same 12373 integral type. The result is a vector that contains twice as many 12374 elements of an integral type whose size is half as wide. The 12375 elements of the two vectors are demoted and merged (concatenated) 12376 to form the output vector. 12377 12378 `VEC_PACK_FIX_TRUNC_EXPR' 12379 This node represents packing of elements of the two input vectors 12380 into the output vector, where the values are converted from 12381 floating point to fixed point. Input operands are vectors that 12382 contain the same number of elements of a floating point type. The 12383 result is a vector that contains twice as many elements of an 12384 integral type whose size is half as wide. The elements of the two 12385 vectors are merged (concatenated) to form the output vector. 12386 12387 `VEC_COND_EXPR' 12388 These nodes represent `?:' expressions. The three operands must be 12389 vectors of the same size and number of elements. The second and 12390 third operands must have the same type as the entire expression. 12391 The first operand is of signed integral vector type. If an 12392 element of the first operand evaluates to a zero value, the 12393 corresponding element of the result is taken from the third 12394 operand. If it evaluates to a minus one value, it is taken from 12395 the second operand. It should never evaluate to any other value 12396 currently, but optimizations should not rely on that property. In 12397 contrast with a `COND_EXPR', all operands are always evaluated. 12398 12399 12400 File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 12401 12402 11.7 Statements 12403 =============== 12404 12405 Most statements in GIMPLE are assignment statements, represented by 12406 `GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 12407 a reference to a volatile object is converted into a `GIMPLE_ASSIGN'. 12408 12409 There are also several varieties of complex statements. 12410 12411 * Menu: 12412 12413 * Basic Statements:: 12414 * Blocks:: 12415 * Statement Sequences:: 12416 * Empty Statements:: 12417 * Jumps:: 12418 * Cleanups:: 12419 * OpenMP:: 12420 12421 12422 File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 12423 12424 11.7.1 Basic Statements 12425 ----------------------- 12426 12427 `ASM_EXPR' 12428 Used to represent an inline assembly statement. For an inline 12429 assembly statement like: 12430 asm ("mov x, y"); 12431 The `ASM_STRING' macro will return a `STRING_CST' node for `"mov 12432 x, y"'. If the original statement made use of the 12433 extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and 12434 `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the 12435 statement, represented as `STRING_CST' nodes. The 12436 extended-assembly syntax looks like: 12437 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 12438 The first string is the `ASM_STRING', containing the instruction 12439 template. The next two strings are the output and inputs, 12440 respectively; this statement has no clobbers. As this example 12441 indicates, "plain" assembly statements are merely a special case 12442 of extended assembly statements; they have no cv-qualifiers, 12443 outputs, inputs, or clobbers. All of the strings will be 12444 `NUL'-terminated, and will contain no embedded `NUL'-characters. 12445 12446 If the assembly statement is declared `volatile', or if the 12447 statement was not an extended assembly statement, and is therefore 12448 implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold 12449 of the `ASM_EXPR'. 12450 12451 `DECL_EXPR' 12452 Used to represent a local declaration. The `DECL_EXPR_DECL' macro 12453 can be used to obtain the entity declared. This declaration may 12454 be a `LABEL_DECL', indicating that the label declared is a local 12455 label. (As an extension, GCC allows the declaration of labels 12456 with scope.) In C, this declaration may be a `FUNCTION_DECL', 12457 indicating the use of the GCC nested function extension. For more 12458 information, *note Functions::. 12459 12460 `LABEL_EXPR' 12461 Used to represent a label. The `LABEL_DECL' declared by this 12462 statement can be obtained with the `LABEL_EXPR_LABEL' macro. The 12463 `IDENTIFIER_NODE' giving the name of the label can be obtained from 12464 the `LABEL_DECL' with `DECL_NAME'. 12465 12466 `GOTO_EXPR' 12467 Used to represent a `goto' statement. The `GOTO_DESTINATION' will 12468 usually be a `LABEL_DECL'. However, if the "computed goto" 12469 extension has been used, the `GOTO_DESTINATION' will be an 12470 arbitrary expression indicating the destination. This expression 12471 will always have pointer type. 12472 12473 `RETURN_EXPR' 12474 Used to represent a `return' statement. Operand 0 represents the 12475 value to return. It should either be the `RESULT_DECL' for the 12476 containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the 12477 function's `RESULT_DECL'. It will be `NULL_TREE' if the statement 12478 was just 12479 return; 12480 12481 `LOOP_EXPR' 12482 These nodes represent "infinite" loops. The `LOOP_EXPR_BODY' 12483 represents the body of the loop. It should be executed forever, 12484 unless an `EXIT_EXPR' is encountered. 12485 12486 `EXIT_EXPR' 12487 These nodes represent conditional exits from the nearest enclosing 12488 `LOOP_EXPR'. The single operand is the condition; if it is 12489 nonzero, then the loop should be exited. An `EXIT_EXPR' will only 12490 appear within a `LOOP_EXPR'. 12491 12492 `SWITCH_STMT' 12493 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is 12494 the expression on which the switch is occurring. See the 12495 documentation for an `IF_STMT' for more information on the 12496 representation used for the condition. The `SWITCH_STMT_BODY' is 12497 the body of the switch statement. The `SWITCH_STMT_TYPE' is the 12498 original type of switch expression as given in the source, before 12499 any compiler conversions. 12500 12501 `CASE_LABEL_EXPR' 12502 Use to represent a `case' label, range of `case' labels, or a 12503 `default' label. If `CASE_LOW' is `NULL_TREE', then this is a 12504 `default' label. Otherwise, if `CASE_HIGH' is `NULL_TREE', then 12505 this is an ordinary `case' label. In this case, `CASE_LOW' is an 12506 expression giving the value of the label. Both `CASE_LOW' and 12507 `CASE_HIGH' are `INTEGER_CST' nodes. These values will have the 12508 same type as the condition expression in the switch statement. 12509 12510 Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the 12511 statement is a range of case labels. Such statements originate 12512 with the extension that allows users to write things of the form: 12513 case 2 ... 5: 12514 The first value will be `CASE_LOW', while the second will be 12515 `CASE_HIGH'. 12516 12517 12518 12519 File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 12520 12521 11.7.2 Blocks 12522 ------------- 12523 12524 Block scopes and the variables they declare in GENERIC are expressed 12525 using the `BIND_EXPR' code, which in previous versions of GCC was 12526 primarily used for the C statement-expression extension. 12527 12528 Variables in a block are collected into `BIND_EXPR_VARS' in 12529 declaration order through their `TREE_CHAIN' field. Any runtime 12530 initialization is moved out of `DECL_INITIAL' and into a statement in 12531 the controlled block. When gimplifying from C or C++, this 12532 initialization replaces the `DECL_STMT'. These variables will never 12533 require cleanups. The scope of these variables is just the body 12534 12535 Variable-length arrays (VLAs) complicate this process, as their size 12536 often refers to variables initialized earlier in the block. To handle 12537 this, we currently split the block at that point, and move the VLA into 12538 a new, inner `BIND_EXPR'. This strategy may change in the future. 12539 12540 A C++ program will usually contain more `BIND_EXPR's than there are 12541 syntactic blocks in the source code, since several C++ constructs have 12542 implicit scopes associated with them. On the other hand, although the 12543 C++ front end uses pseudo-scopes to handle cleanups for objects with 12544 destructors, these don't translate into the GIMPLE form; multiple 12545 declarations at the same level use the same `BIND_EXPR'. 12546 12547 12548 File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 12549 12550 11.7.3 Statement Sequences 12551 -------------------------- 12552 12553 Multiple statements at the same nesting level are collected into a 12554 `STATEMENT_LIST'. Statement lists are modified and traversed using the 12555 interface in `tree-iterator.h'. 12556 12557 12558 File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 12559 12560 11.7.4 Empty Statements 12561 ----------------------- 12562 12563 Whenever possible, statements with no effect are discarded. But if 12564 they are nested within another construct which cannot be discarded for 12565 some reason, they are instead replaced with an empty statement, 12566 generated by `build_empty_stmt'. Initially, all empty statements were 12567 shared, after the pattern of the Java front end, but this caused a lot 12568 of trouble in practice. 12569 12570 An empty statement is represented as `(void)0'. 12571 12572 12573 File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 12574 12575 11.7.5 Jumps 12576 ------------ 12577 12578 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'. 12579 12580 The operand of a `GOTO_EXPR' must be either a label or a variable 12581 containing the address to jump to. 12582 12583 The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL', 12584 or a `MODIFY_EXPR' which sets the return value. It would be nice to 12585 move the `MODIFY_EXPR' into a separate statement, but the special 12586 return semantics in `expand_return' make that difficult. It may still 12587 happen in the future, perhaps by moving most of that logic into 12588 `expand_assignment'. 12589 12590 12591 File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 12592 12593 11.7.6 Cleanups 12594 --------------- 12595 12596 Destructors for local C++ objects and similar dynamic cleanups are 12597 represented in GIMPLE by a `TRY_FINALLY_EXPR'. `TRY_FINALLY_EXPR' has 12598 two operands, both of which are a sequence of statements to execute. 12599 The first sequence is executed. When it completes the second sequence 12600 is executed. 12601 12602 The first sequence may complete in the following ways: 12603 12604 1. Execute the last statement in the sequence and fall off the end. 12605 12606 2. Execute a goto statement (`GOTO_EXPR') to an ordinary label 12607 outside the sequence. 12608 12609 3. Execute a return statement (`RETURN_EXPR'). 12610 12611 4. Throw an exception. This is currently not explicitly represented 12612 in GIMPLE. 12613 12614 12615 The second sequence is not executed if the first sequence completes by 12616 calling `setjmp' or `exit' or any other function that does not return. 12617 The second sequence is also not executed if the first sequence 12618 completes via a non-local goto or a computed goto (in general the 12619 compiler does not know whether such a goto statement exits the first 12620 sequence or not, so we assume that it doesn't). 12621 12622 After the second sequence is executed, if it completes normally by 12623 falling off the end, execution continues wherever the first sequence 12624 would have continued, by falling off the end, or doing a goto, etc. 12625 12626 `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 12627 to appear on every edge out of the controlled block; this reduces the 12628 freedom to move code across these edges. Therefore, the EH lowering 12629 pass which runs before most of the optimization passes eliminates these 12630 expressions by explicitly adding the cleanup to each edge. Rethrowing 12631 the exception is represented using `RESX_EXPR'. 12632 12633 12634 File: gccint.info, Node: OpenMP, Prev: Cleanups, Up: Statements 12635 12636 11.7.7 OpenMP 12637 ------------- 12638 12639 All the statements starting with `OMP_' represent directives and 12640 clauses used by the OpenMP API `http://www.openmp.org/'. 12641 12642 `OMP_PARALLEL' 12643 Represents `#pragma omp parallel [clause1 ... clauseN]'. It has 12644 four operands: 12645 12646 Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High 12647 GIMPLE forms. It contains the body of code to be executed by all 12648 the threads. During GIMPLE lowering, this operand becomes `NULL' 12649 and the body is emitted linearly after `OMP_PARALLEL'. 12650 12651 Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated 12652 with the directive. 12653 12654 Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it 12655 contains the `FUNCTION_DECL' for the function that will contain 12656 the body of the parallel region. 12657 12658 Operand `OMP_PARALLEL_DATA_ARG' is also created by 12659 `pass_lower_omp'. If there are shared variables to be communicated 12660 to the children threads, this operand will contain the `VAR_DECL' 12661 that contains all the shared values and variables. 12662 12663 `OMP_FOR' 12664 Represents `#pragma omp for [clause1 ... clauseN]'. It has 5 12665 operands: 12666 12667 Operand `OMP_FOR_BODY' contains the loop body. 12668 12669 Operand `OMP_FOR_CLAUSES' is the list of clauses associated with 12670 the directive. 12671 12672 Operand `OMP_FOR_INIT' is the loop initialization code of the form 12673 `VAR = N1'. 12674 12675 Operand `OMP_FOR_COND' is the loop conditional expression of the 12676 form `VAR {<,>,<=,>=} N2'. 12677 12678 Operand `OMP_FOR_INCR' is the loop index increment of the form 12679 `VAR {+=,-=} INCR'. 12680 12681 Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands 12682 `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'. These 12683 side-effects are part of the `OMP_FOR' block but must be evaluated 12684 before the start of loop body. 12685 12686 The loop index variable `VAR' must be a signed integer variable, 12687 which is implicitly private to each thread. Bounds `N1' and `N2' 12688 and the increment expression `INCR' are required to be loop 12689 invariant integer expressions that are evaluated without any 12690 synchronization. The evaluation order, frequency of evaluation and 12691 side-effects are unspecified by the standard. 12692 12693 `OMP_SECTIONS' 12694 Represents `#pragma omp sections [clause1 ... clauseN]'. 12695 12696 Operand `OMP_SECTIONS_BODY' contains the sections body, which in 12697 turn contains a set of `OMP_SECTION' nodes for each of the 12698 concurrent sections delimited by `#pragma omp section'. 12699 12700 Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated 12701 with the directive. 12702 12703 `OMP_SECTION' 12704 Section delimiter for `OMP_SECTIONS'. 12705 12706 `OMP_SINGLE' 12707 Represents `#pragma omp single'. 12708 12709 Operand `OMP_SINGLE_BODY' contains the body of code to be executed 12710 by a single thread. 12711 12712 Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated 12713 with the directive. 12714 12715 `OMP_MASTER' 12716 Represents `#pragma omp master'. 12717 12718 Operand `OMP_MASTER_BODY' contains the body of code to be executed 12719 by the master thread. 12720 12721 `OMP_ORDERED' 12722 Represents `#pragma omp ordered'. 12723 12724 Operand `OMP_ORDERED_BODY' contains the body of code to be 12725 executed in the sequential order dictated by the loop index 12726 variable. 12727 12728 `OMP_CRITICAL' 12729 Represents `#pragma omp critical [name]'. 12730 12731 Operand `OMP_CRITICAL_BODY' is the critical section. 12732 12733 Operand `OMP_CRITICAL_NAME' is an optional identifier to label the 12734 critical section. 12735 12736 `OMP_RETURN' 12737 This does not represent any OpenMP directive, it is an artificial 12738 marker to indicate the end of the body of an OpenMP. It is used by 12739 the flow graph (`tree-cfg.c') and OpenMP region building code 12740 (`omp-low.c'). 12741 12742 `OMP_CONTINUE' 12743 Similarly, this instruction does not represent an OpenMP 12744 directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the 12745 place where the code needs to loop to the next iteration (in the 12746 case of `OMP_FOR') or the next section (in the case of 12747 `OMP_SECTIONS'). 12748 12749 In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'. 12750 But if there are cleanups that need to occur right after the 12751 looping body, it will be emitted between `OMP_CONTINUE' and 12752 `OMP_RETURN'. 12753 12754 `OMP_ATOMIC' 12755 Represents `#pragma omp atomic'. 12756 12757 Operand 0 is the address at which the atomic operation is to be 12758 performed. 12759 12760 Operand 1 is the expression to evaluate. The gimplifier tries 12761 three alternative code generation strategies. Whenever possible, 12762 an atomic update built-in is used. If that fails, a 12763 compare-and-swap loop is attempted. If that also fails, a regular 12764 critical section around the expression is used. 12765 12766 `OMP_CLAUSE' 12767 Represents clauses associated with one of the `OMP_' directives. 12768 Clauses are represented by separate sub-codes defined in `tree.h'. 12769 Clauses codes can be one of: `OMP_CLAUSE_PRIVATE', 12770 `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE', 12771 `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN', 12772 `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF', 12773 `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE', 12774 `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT', 12775 `OMP_CLAUSE_REDUCTION', `OMP_CLAUSE_COLLAPSE', `OMP_CLAUSE_UNTIED', 12776 `OMP_CLAUSE_FINAL', and `OMP_CLAUSE_MERGEABLE'. Each code 12777 represents the corresponding OpenMP clause. 12778 12779 Clauses associated with the same directive are chained together 12780 via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of 12781 variables are restricted to exactly one, accessed with 12782 `OMP_CLAUSE_VAR'. Therefore, multiple variables under the same 12783 clause `C' need to be represented as multiple `C' clauses chained 12784 together. This facilitates adding new clauses during compilation. 12785 12786 12787 12788 File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 12789 12790 11.8 Functions 12791 ============== 12792 12793 A function is represented by a `FUNCTION_DECL' node. It stores the 12794 basic pieces of the function such as body, parameters, and return type 12795 as well as information on the surrounding context, visibility, and 12796 linkage. 12797 12798 * Menu: 12799 12800 * Function Basics:: Function names, body, and parameters. 12801 * Function Properties:: Context, linkage, etc. 12802 12803 12804 File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 12805 12806 11.8.1 Function Basics 12807 ---------------------- 12808 12809 A function has four core parts: the name, the parameters, the result, 12810 and the body. The following macros and functions access these parts of 12811 a `FUNCTION_DECL' as well as other basic features: 12812 `DECL_NAME' 12813 This macro returns the unqualified name of the function, as an 12814 `IDENTIFIER_NODE'. For an instantiation of a function template, 12815 the `DECL_NAME' is the unqualified name of the template, not 12816 something like `f<int>'. The value of `DECL_NAME' is undefined 12817 when used on a constructor, destructor, overloaded operator, or 12818 type-conversion operator, or any function that is implicitly 12819 generated by the compiler. See below for macros that can be used 12820 to distinguish these cases. 12821 12822 `DECL_ASSEMBLER_NAME' 12823 This macro returns the mangled name of the function, also an 12824 `IDENTIFIER_NODE'. This name does not contain leading underscores 12825 on systems that prefix all identifiers with underscores. The 12826 mangled name is computed in the same way on all platforms; if 12827 special processing is required to deal with the object file format 12828 used on a particular platform, it is the responsibility of the 12829 back end to perform those modifications. (Of course, the back end 12830 should not modify `DECL_ASSEMBLER_NAME' itself.) 12831 12832 Using `DECL_ASSEMBLER_NAME' will cause additional memory to be 12833 allocated (for the mangled name of the entity) so it should be used 12834 only when emitting assembly code. It should not be used within the 12835 optimizers to determine whether or not two declarations are the 12836 same, even though some of the existing optimizers do use it in 12837 that way. These uses will be removed over time. 12838 12839 `DECL_ARGUMENTS' 12840 This macro returns the `PARM_DECL' for the first argument to the 12841 function. Subsequent `PARM_DECL' nodes can be obtained by 12842 following the `TREE_CHAIN' links. 12843 12844 `DECL_RESULT' 12845 This macro returns the `RESULT_DECL' for the function. 12846 12847 `DECL_SAVED_TREE' 12848 This macro returns the complete body of the function. 12849 12850 `TREE_TYPE' 12851 This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the 12852 function. 12853 12854 `DECL_INITIAL' 12855 A function that has a definition in the current translation unit 12856 will have a non-`NULL' `DECL_INITIAL'. However, back ends should 12857 not make use of the particular value given by `DECL_INITIAL'. 12858 12859 It should contain a tree of `BLOCK' nodes that mirrors the scopes 12860 that variables are bound in the function. Each block contains a 12861 list of decls declared in a basic block, a pointer to a chain of 12862 blocks at the next lower scope level, then a pointer to the next 12863 block at the same level and a backpointer to the parent `BLOCK' or 12864 `FUNCTION_DECL'. So given a function as follows: 12865 12866 void foo() 12867 { 12868 int a; 12869 { 12870 int b; 12871 } 12872 int c; 12873 } 12874 12875 you would get the following: 12876 12877 tree foo = FUNCTION_DECL; 12878 tree decl_a = VAR_DECL; 12879 tree decl_b = VAR_DECL; 12880 tree decl_c = VAR_DECL; 12881 tree block_a = BLOCK; 12882 tree block_b = BLOCK; 12883 tree block_c = BLOCK; 12884 BLOCK_VARS(block_a) = decl_a; 12885 BLOCK_SUBBLOCKS(block_a) = block_b; 12886 BLOCK_CHAIN(block_a) = block_c; 12887 BLOCK_SUPERCONTEXT(block_a) = foo; 12888 BLOCK_VARS(block_b) = decl_b; 12889 BLOCK_SUPERCONTEXT(block_b) = block_a; 12890 BLOCK_VARS(block_c) = decl_c; 12891 BLOCK_SUPERCONTEXT(block_c) = foo; 12892 DECL_INITIAL(foo) = block_a; 12893 12894 12895 12896 File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 12897 12898 11.8.2 Function Properties 12899 -------------------------- 12900 12901 To determine the scope of a function, you can use the `DECL_CONTEXT' 12902 macro. This macro will return the class (either a `RECORD_TYPE' or a 12903 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function 12904 is a member. For a virtual function, this macro returns the class in 12905 which the function was actually defined, not the base class in which 12906 the virtual declaration occurred. 12907 12908 In C, the `DECL_CONTEXT' for a function maybe another function. This 12909 representation indicates that the GNU nested function extension is in 12910 use. For details on the semantics of nested functions, see the GCC 12911 Manual. The nested function can refer to local variables in its 12912 containing function. Such references are not explicitly marked in the 12913 tree structure; back ends must look at the `DECL_CONTEXT' for the 12914 referenced `VAR_DECL'. If the `DECL_CONTEXT' for the referenced 12915 `VAR_DECL' is not the same as the function currently being processed, 12916 and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference 12917 is to a local variable in a containing function, and the back end must 12918 take appropriate action. 12919 12920 `DECL_EXTERNAL' 12921 This predicate holds if the function is undefined. 12922 12923 `TREE_PUBLIC' 12924 This predicate holds if the function has external linkage. 12925 12926 `TREE_STATIC' 12927 This predicate holds if the function has been defined. 12928 12929 `TREE_THIS_VOLATILE' 12930 This predicate holds if the function does not return normally. 12931 12932 `TREE_READONLY' 12933 This predicate holds if the function can only read its arguments. 12934 12935 `DECL_PURE_P' 12936 This predicate holds if the function can only read its arguments, 12937 but may also read global memory. 12938 12939 `DECL_VIRTUAL_P' 12940 This predicate holds if the function is virtual. 12941 12942 `DECL_ARTIFICIAL' 12943 This macro holds if the function was implicitly generated by the 12944 compiler, rather than explicitly declared. In addition to 12945 implicitly generated class member functions, this macro holds for 12946 the special functions created to implement static initialization 12947 and destruction, to compute run-time type information, and so 12948 forth. 12949 12950 `DECL_FUNCTION_SPECIFIC_TARGET' 12951 This macro returns a tree node that holds the target options that 12952 are to be used to compile this particular function or `NULL_TREE' 12953 if the function is to be compiled with the target options 12954 specified on the command line. 12955 12956 `DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 12957 This macro returns a tree node that holds the optimization options 12958 that are to be used to compile this particular function or 12959 `NULL_TREE' if the function is to be compiled with the 12960 optimization options specified on the command line. 12961 12962 12963 12964 File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 12965 12966 11.9 Language-dependent trees 12967 ============================= 12968 12969 Front ends may wish to keep some state associated with various GENERIC 12970 trees while parsing. To support this, trees provide a set of flags 12971 that may be used by the front end. They are accessed using 12972 `TREE_LANG_FLAG_n' where `n' is currently 0 through 6. 12973 12974 If necessary, a front end can use some language-dependent tree codes 12975 in its GENERIC representation, so long as it provides a hook for 12976 converting them to GIMPLE and doesn't expect them to work with any 12977 (hypothetical) optimizers that run before the conversion to GIMPLE. The 12978 intermediate representation used while parsing C and C++ looks very 12979 little like GENERIC, but the C and C++ gimplifier hooks are perfectly 12980 happy to take it as input and spit out GIMPLE. 12981 12982 12983 File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC 12984 12985 11.10 C and C++ Trees 12986 ===================== 12987 12988 This section documents the internal representation used by GCC to 12989 represent C and C++ source programs. When presented with a C or C++ 12990 source program, GCC parses the program, performs semantic analysis 12991 (including the generation of error messages), and then produces the 12992 internal representation described here. This representation contains a 12993 complete representation for the entire translation unit provided as 12994 input to the front end. This representation is then typically processed 12995 by a code-generator in order to produce machine code, but could also be 12996 used in the creation of source browsers, intelligent editors, automatic 12997 documentation generators, interpreters, and any other programs needing 12998 the ability to process C or C++ code. 12999 13000 This section explains the internal representation. In particular, it 13001 documents the internal representation for C and C++ source constructs, 13002 and the macros, functions, and variables that can be used to access 13003 these constructs. The C++ representation is largely a superset of the 13004 representation used in the C front end. There is only one construct 13005 used in C that does not appear in the C++ front end and that is the GNU 13006 "nested function" extension. Many of the macros documented here do not 13007 apply in C because the corresponding language constructs do not appear 13008 in C. 13009 13010 The C and C++ front ends generate a mix of GENERIC trees and ones 13011 specific to C and C++. These language-specific trees are higher-level 13012 constructs than the ones in GENERIC to make the parser's job easier. 13013 This section describes those trees that aren't part of GENERIC as well 13014 as aspects of GENERIC trees that are treated in a language-specific 13015 manner. 13016 13017 If you are developing a "back end", be it is a code-generator or some 13018 other tool, that uses this representation, you may occasionally find 13019 that you need to ask questions not easily answered by the functions and 13020 macros available here. If that situation occurs, it is quite likely 13021 that GCC already supports the functionality you desire, but that the 13022 interface is simply not documented here. In that case, you should ask 13023 the GCC maintainers (via mail to <gcc (a] gcc.gnu.org>) about documenting 13024 the functionality you require. Similarly, if you find yourself writing 13025 functions that do not deal directly with your back end, but instead 13026 might be useful to other people using the GCC front end, you should 13027 submit your patches for inclusion in GCC. 13028 13029 * Menu: 13030 13031 * Types for C++:: Fundamental and aggregate types. 13032 * Namespaces:: Namespaces. 13033 * Classes:: Classes. 13034 * Functions for C++:: Overloading and accessors for C++. 13035 * Statements for C++:: Statements specific to C and C++. 13036 * C++ Expressions:: From `typeid' to `throw'. 13037 13038 13039 File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 13040 13041 11.10.1 Types for C++ 13042 --------------------- 13043 13044 In C++, an array type is not qualified; rather the type of the array 13045 elements is qualified. This situation is reflected in the intermediate 13046 representation. The macros described here will always examine the 13047 qualification of the underlying element type when applied to an array 13048 type. (If the element type is itself an array, then the recursion 13049 continues until a non-array type is found, and the qualification of this 13050 type is examined.) So, for example, `CP_TYPE_CONST_P' will hold of the 13051 type `const int ()[7]', denoting an array of seven `int's. 13052 13053 The following functions and macros deal with cv-qualification of types: 13054 `cp_type_quals' 13055 This function returns the set of type qualifiers applied to this 13056 type. This value is `TYPE_UNQUALIFIED' if no qualifiers have been 13057 applied. The `TYPE_QUAL_CONST' bit is set if the type is 13058 `const'-qualified. The `TYPE_QUAL_VOLATILE' bit is set if the 13059 type is `volatile'-qualified. The `TYPE_QUAL_RESTRICT' bit is set 13060 if the type is `restrict'-qualified. 13061 13062 `CP_TYPE_CONST_P' 13063 This macro holds if the type is `const'-qualified. 13064 13065 `CP_TYPE_VOLATILE_P' 13066 This macro holds if the type is `volatile'-qualified. 13067 13068 `CP_TYPE_RESTRICT_P' 13069 This macro holds if the type is `restrict'-qualified. 13070 13071 `CP_TYPE_CONST_NON_VOLATILE_P' 13072 This predicate holds for a type that is `const'-qualified, but 13073 _not_ `volatile'-qualified; other cv-qualifiers are ignored as 13074 well: only the `const'-ness is tested. 13075 13076 13077 A few other macros and functions are usable with all types: 13078 `TYPE_SIZE' 13079 The number of bits required to represent the type, represented as 13080 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be 13081 `NULL_TREE'. 13082 13083 `TYPE_ALIGN' 13084 The alignment of the type, in bits, represented as an `int'. 13085 13086 `TYPE_NAME' 13087 This macro returns a declaration (in the form of a `TYPE_DECL') for 13088 the type. (Note this macro does _not_ return an 13089 `IDENTIFIER_NODE', as you might expect, given its name!) You can 13090 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual 13091 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type 13092 that is not a built-in type, the result of a typedef, or a named 13093 class type. 13094 13095 `CP_INTEGRAL_TYPE' 13096 This predicate holds if the type is an integral type. Notice that 13097 in C++, enumerations are _not_ integral types. 13098 13099 `ARITHMETIC_TYPE_P' 13100 This predicate holds if the type is an integral type (in the C++ 13101 sense) or a floating point type. 13102 13103 `CLASS_TYPE_P' 13104 This predicate holds for a class-type. 13105 13106 `TYPE_BUILT_IN' 13107 This predicate holds for a built-in type. 13108 13109 `TYPE_PTRDATAMEM_P' 13110 This predicate holds if the type is a pointer to data member. 13111 13112 `TYPE_PTR_P' 13113 This predicate holds if the type is a pointer type, and the 13114 pointee is not a data member. 13115 13116 `TYPE_PTRFN_P' 13117 This predicate holds for a pointer to function type. 13118 13119 `TYPE_PTROB_P' 13120 This predicate holds for a pointer to object type. Note however 13121 that it does not hold for the generic pointer to object type `void 13122 *'. You may use `TYPE_PTROBV_P' to test for a pointer to object 13123 type as well as `void *'. 13124 13125 13126 The table below describes types specific to C and C++ as well as 13127 language-dependent info about GENERIC types. 13128 13129 `POINTER_TYPE' 13130 Used to represent pointer types, and pointer to data member types. 13131 If `TREE_TYPE' is a pointer to data member type, then 13132 `TYPE_PTRDATAMEM_P' will hold. For a pointer to data member type 13133 of the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type 13134 `X', while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'. 13135 13136 `RECORD_TYPE' 13137 Used to represent `struct' and `class' types in C and C++. If 13138 `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 13139 type. In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a 13140 `POINTER_TYPE' pointing to a `METHOD_TYPE'. The `METHOD_TYPE' is 13141 the type of a function pointed to by the pointer-to-member 13142 function. If `TYPE_PTRMEMFUNC_P' does not hold, this type is a 13143 class type. For more information, *note Classes::. 13144 13145 `UNKNOWN_TYPE' 13146 This node is used to represent a type the knowledge of which is 13147 insufficient for a sound processing. 13148 13149 `TYPENAME_TYPE' 13150 Used to represent a construct of the form `typename T::A'. The 13151 `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for 13152 `A'. If the type is specified via a template-id, then 13153 `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'. The 13154 `TREE_TYPE' is non-`NULL' if the node is implicitly generated in 13155 support for the implicit typename extension; in which case the 13156 `TREE_TYPE' is a type node for the base-class. 13157 13158 `TYPEOF_TYPE' 13159 Used to represent the `__typeof__' extension. The `TYPE_FIELDS' 13160 is the expression the type of which is being represented. 13161 13162 13163 13164 File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 13165 13166 11.10.2 Namespaces 13167 ------------------ 13168 13169 The root of the entire intermediate representation is the variable 13170 `global_namespace'. This is the namespace specified with `::' in C++ 13171 source code. All other namespaces, types, variables, functions, and so 13172 forth can be found starting with this namespace. 13173 13174 However, except for the fact that it is distinguished as the root of 13175 the representation, the global namespace is no different from any other 13176 namespace. Thus, in what follows, we describe namespaces generally, 13177 rather than the global namespace in particular. 13178 13179 A namespace is represented by a `NAMESPACE_DECL' node. 13180 13181 The following macros and functions can be used on a `NAMESPACE_DECL': 13182 13183 `DECL_NAME' 13184 This macro is used to obtain the `IDENTIFIER_NODE' corresponding to 13185 the unqualified name of the name of the namespace (*note 13186 Identifiers::). The name of the global namespace is `::', even 13187 though in C++ the global namespace is unnamed. However, you 13188 should use comparison with `global_namespace', rather than 13189 `DECL_NAME' to determine whether or not a namespace is the global 13190 one. An unnamed namespace will have a `DECL_NAME' equal to 13191 `anonymous_namespace_name'. Within a single translation unit, all 13192 unnamed namespaces will have the same name. 13193 13194 `DECL_CONTEXT' 13195 This macro returns the enclosing namespace. The `DECL_CONTEXT' for 13196 the `global_namespace' is `NULL_TREE'. 13197 13198 `DECL_NAMESPACE_ALIAS' 13199 If this declaration is for a namespace alias, then 13200 `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 13201 alias. 13202 13203 Do not attempt to use `cp_namespace_decls' for a namespace which is 13204 an alias. Instead, follow `DECL_NAMESPACE_ALIAS' links until you 13205 reach an ordinary, non-alias, namespace, and call 13206 `cp_namespace_decls' there. 13207 13208 `DECL_NAMESPACE_STD_P' 13209 This predicate holds if the namespace is the special `::std' 13210 namespace. 13211 13212 `cp_namespace_decls' 13213 This function will return the declarations contained in the 13214 namespace, including types, overloaded functions, other 13215 namespaces, and so forth. If there are no declarations, this 13216 function will return `NULL_TREE'. The declarations are connected 13217 through their `TREE_CHAIN' fields. 13218 13219 Although most entries on this list will be declarations, 13220 `TREE_LIST' nodes may also appear. In this case, the `TREE_VALUE' 13221 will be an `OVERLOAD'. The value of the `TREE_PURPOSE' is 13222 unspecified; back ends should ignore this value. As with the 13223 other kinds of declarations returned by `cp_namespace_decls', the 13224 `TREE_CHAIN' will point to the next declaration in this list. 13225 13226 For more information on the kinds of declarations that can occur 13227 on this list, *Note Declarations::. Some declarations will not 13228 appear on this list. In particular, no `FIELD_DECL', 13229 `LABEL_DECL', or `PARM_DECL' nodes will appear here. 13230 13231 This function cannot be used with namespaces that have 13232 `DECL_NAMESPACE_ALIAS' set. 13233 13234 13235 13236 File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 13237 13238 11.10.3 Classes 13239 --------------- 13240 13241 Besides namespaces, the other high-level scoping construct in C++ is the 13242 class. (Throughout this manual the term "class" is used to mean the 13243 types referred to in the ANSI/ISO C++ Standard as classes; these include 13244 types defined with the `class', `struct', and `union' keywords.) 13245 13246 A class type is represented by either a `RECORD_TYPE' or a 13247 `UNION_TYPE'. A class declared with the `union' tag is represented by 13248 a `UNION_TYPE', while classes declared with either the `struct' or the 13249 `class' tag are represented by `RECORD_TYPE's. You can use the 13250 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 13251 type is a `class' as opposed to a `struct'. This macro will be true 13252 only for classes declared with the `class' tag. 13253 13254 Almost all non-function members are available on the `TYPE_FIELDS' 13255 list. Given one member, the next can be found by following the 13256 `TREE_CHAIN'. You should not depend in any way on the order in which 13257 fields appear on this list. All nodes on this list will be `DECL' 13258 nodes. A `FIELD_DECL' is used to represent a non-static data member, a 13259 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL' 13260 is used to represent a type. Note that the `CONST_DECL' for an 13261 enumeration constant will appear on this list, if the enumeration type 13262 was declared in the class. (Of course, the `TYPE_DECL' for the 13263 enumeration type will appear here as well.) There are no entries for 13264 base classes on this list. In particular, there is no `FIELD_DECL' for 13265 the "base-class portion" of an object. 13266 13267 The `TYPE_VFIELD' is a compiler-generated field used to point to 13268 virtual function tables. It may or may not appear on the `TYPE_FIELDS' 13269 list. However, back ends should handle the `TYPE_VFIELD' just like all 13270 the entries on the `TYPE_FIELDS' list. 13271 13272 The function members are available on the `TYPE_METHODS' list. Again, 13273 subsequent members are found by following the `TREE_CHAIN' field. If a 13274 function is overloaded, each of the overloaded functions appears; no 13275 `OVERLOAD' nodes appear on the `TYPE_METHODS' list. Implicitly 13276 declared functions (including default constructors, copy constructors, 13277 assignment operators, and destructors) will appear on this list as well. 13278 13279 Every class has an associated "binfo", which can be obtained with 13280 `TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 13281 given by `TYPE_BINFO' is the degenerate case, whereby every class is 13282 considered to be its own base-class. The base binfos for a particular 13283 binfo are held in a vector, whose length is obtained with 13284 `BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 13285 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'. To add a new binfo, use 13286 `BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 13287 `BINFO_BASE_BINFOS', but normally you do not need to use that. The 13288 class type associated with a binfo is given by `BINFO_TYPE'. It is not 13289 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 13290 and qualified types. Neither is it the case that `TYPE_BINFO 13291 (BINFO_TYPE (y))' is the same binfo as `y'. The reason is that if `y' 13292 is a binfo representing a base-class `B' of a derived class `D', then 13293 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be 13294 `B' as its own base-class, rather than as a base-class of `D'. 13295 13296 The access to a base type can be found with `BINFO_BASE_ACCESS'. This 13297 will produce `access_public_node', `access_private_node' or 13298 `access_protected_node'. If bases are always public, 13299 `BINFO_BASE_ACCESSES' may be `NULL'. 13300 13301 `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 13302 virtually or not. The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1' 13303 to `BINFO_FLAG_6' can be used for language specific use. 13304 13305 The following macros can be used on a tree node representing a 13306 class-type. 13307 13308 `LOCAL_CLASS_P' 13309 This predicate holds if the class is local class _i.e._ declared 13310 inside a function body. 13311 13312 `TYPE_POLYMORPHIC_P' 13313 This predicate holds if the class has at least one virtual function 13314 (declared or inherited). 13315 13316 `TYPE_HAS_DEFAULT_CONSTRUCTOR' 13317 This predicate holds whenever its argument represents a class-type 13318 with default constructor. 13319 13320 `CLASSTYPE_HAS_MUTABLE' 13321 `TYPE_HAS_MUTABLE_P' 13322 These predicates hold for a class-type having a mutable data 13323 member. 13324 13325 `CLASSTYPE_NON_POD_P' 13326 This predicate holds only for class-types that are not PODs. 13327 13328 `TYPE_HAS_NEW_OPERATOR' 13329 This predicate holds for a class-type that defines `operator new'. 13330 13331 `TYPE_HAS_ARRAY_NEW_OPERATOR' 13332 This predicate holds for a class-type for which `operator new[]' 13333 is defined. 13334 13335 `TYPE_OVERLOADS_CALL_EXPR' 13336 This predicate holds for class-type for which the function call 13337 `operator()' is overloaded. 13338 13339 `TYPE_OVERLOADS_ARRAY_REF' 13340 This predicate holds for a class-type that overloads `operator[]' 13341 13342 `TYPE_OVERLOADS_ARROW' 13343 This predicate holds for a class-type for which `operator->' is 13344 overloaded. 13345 13346 13347 13348 File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 13349 13350 11.10.4 Functions for C++ 13351 ------------------------- 13352 13353 A function is represented by a `FUNCTION_DECL' node. A set of 13354 overloaded functions is sometimes represented by an `OVERLOAD' node. 13355 13356 An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros 13357 should be used on an `OVERLOAD'. An `OVERLOAD' node is similar to a 13358 `TREE_LIST'. Use `OVL_CURRENT' to get the function associated with an 13359 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the 13360 list of overloaded functions. The macros `OVL_CURRENT' and `OVL_NEXT' 13361 are actually polymorphic; you can use them to work with `FUNCTION_DECL' 13362 nodes as well as with overloads. In the case of a `FUNCTION_DECL', 13363 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT' 13364 will always be `NULL_TREE'. 13365 13366 To determine the scope of a function, you can use the `DECL_CONTEXT' 13367 macro. This macro will return the class (either a `RECORD_TYPE' or a 13368 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function 13369 is a member. For a virtual function, this macro returns the class in 13370 which the function was actually defined, not the base class in which 13371 the virtual declaration occurred. 13372 13373 If a friend function is defined in a class scope, the 13374 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 13375 it was defined. For example, in 13376 class C { friend void f() {} }; 13377 the `DECL_CONTEXT' for `f' will be the `global_namespace', but the 13378 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'. 13379 13380 The following macros and functions can be used on a `FUNCTION_DECL': 13381 `DECL_MAIN_P' 13382 This predicate holds for a function that is the program entry point 13383 `::code'. 13384 13385 `DECL_LOCAL_FUNCTION_P' 13386 This predicate holds if the function was declared at block scope, 13387 even though it has a global scope. 13388 13389 `DECL_ANTICIPATED' 13390 This predicate holds if the function is a built-in function but its 13391 prototype is not yet explicitly declared. 13392 13393 `DECL_EXTERN_C_FUNCTION_P' 13394 This predicate holds if the function is declared as an ``extern 13395 "C"'' function. 13396 13397 `DECL_LINKONCE_P' 13398 This macro holds if multiple copies of this function may be 13399 emitted in various translation units. It is the responsibility of 13400 the linker to merge the various copies. Template instantiations 13401 are the most common example of functions for which 13402 `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all 13403 translation units which require them, and then relies on the 13404 linker to remove duplicate instantiations. 13405 13406 FIXME: This macro is not yet implemented. 13407 13408 `DECL_FUNCTION_MEMBER_P' 13409 This macro holds if the function is a member of a class, rather 13410 than a member of a namespace. 13411 13412 `DECL_STATIC_FUNCTION_P' 13413 This predicate holds if the function a static member function. 13414 13415 `DECL_NONSTATIC_MEMBER_FUNCTION_P' 13416 This macro holds for a non-static member function. 13417 13418 `DECL_CONST_MEMFUNC_P' 13419 This predicate holds for a `const'-member function. 13420 13421 `DECL_VOLATILE_MEMFUNC_P' 13422 This predicate holds for a `volatile'-member function. 13423 13424 `DECL_CONSTRUCTOR_P' 13425 This macro holds if the function is a constructor. 13426 13427 `DECL_NONCONVERTING_P' 13428 This predicate holds if the constructor is a non-converting 13429 constructor. 13430 13431 `DECL_COMPLETE_CONSTRUCTOR_P' 13432 This predicate holds for a function which is a constructor for an 13433 object of a complete type. 13434 13435 `DECL_BASE_CONSTRUCTOR_P' 13436 This predicate holds for a function which is a constructor for a 13437 base class sub-object. 13438 13439 `DECL_COPY_CONSTRUCTOR_P' 13440 This predicate holds for a function which is a copy-constructor. 13441 13442 `DECL_DESTRUCTOR_P' 13443 This macro holds if the function is a destructor. 13444 13445 `DECL_COMPLETE_DESTRUCTOR_P' 13446 This predicate holds if the function is the destructor for an 13447 object a complete type. 13448 13449 `DECL_OVERLOADED_OPERATOR_P' 13450 This macro holds if the function is an overloaded operator. 13451 13452 `DECL_CONV_FN_P' 13453 This macro holds if the function is a type-conversion operator. 13454 13455 `DECL_GLOBAL_CTOR_P' 13456 This predicate holds if the function is a file-scope initialization 13457 function. 13458 13459 `DECL_GLOBAL_DTOR_P' 13460 This predicate holds if the function is a file-scope finalization 13461 function. 13462 13463 `DECL_THUNK_P' 13464 This predicate holds if the function is a thunk. 13465 13466 These functions represent stub code that adjusts the `this' pointer 13467 and then jumps to another function. When the jumped-to function 13468 returns, control is transferred directly to the caller, without 13469 returning to the thunk. The first parameter to the thunk is 13470 always the `this' pointer; the thunk should add `THUNK_DELTA' to 13471 this value. (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.) 13472 13473 Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the 13474 adjusted `this' pointer must be adjusted again. The complete 13475 calculation is given by the following pseudo-code: 13476 13477 this += THUNK_DELTA 13478 if (THUNK_VCALL_OFFSET) 13479 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 13480 13481 Finally, the thunk should jump to the location given by 13482 `DECL_INITIAL'; this will always be an expression for the address 13483 of a function. 13484 13485 `DECL_NON_THUNK_FUNCTION_P' 13486 This predicate holds if the function is _not_ a thunk function. 13487 13488 `GLOBAL_INIT_PRIORITY' 13489 If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then 13490 this gives the initialization priority for the function. The 13491 linker will arrange that all functions for which 13492 `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 13493 before `main' is called. When the program exits, all functions for 13494 which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 13495 13496 `TYPE_RAISES_EXCEPTIONS' 13497 This macro returns the list of exceptions that a (member-)function 13498 can raise. The returned list, if non `NULL', is comprised of nodes 13499 whose `TREE_VALUE' represents a type. 13500 13501 `TYPE_NOTHROW_P' 13502 This predicate holds when the exception-specification of its 13503 arguments is of the form ``()''. 13504 13505 `DECL_ARRAY_DELETE_OPERATOR_P' 13506 This predicate holds if the function an overloaded `operator 13507 delete[]'. 13508 13509 13510 13511 File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 13512 13513 11.10.5 Statements for C++ 13514 -------------------------- 13515 13516 A function that has a definition in the current translation unit will 13517 have a non-`NULL' `DECL_INITIAL'. However, back ends should not make 13518 use of the particular value given by `DECL_INITIAL'. 13519 13520 The `DECL_SAVED_TREE' macro will give the complete body of the 13521 function. 13522 13523 11.10.5.1 Statements 13524 .................... 13525 13526 There are tree nodes corresponding to all of the source-level statement 13527 constructs, used within the C and C++ frontends. These are enumerated 13528 here, together with a list of the various macros that can be used to 13529 obtain information about them. There are a few macros that can be used 13530 with all statements: 13531 13532 `STMT_IS_FULL_EXPR_P' 13533 In C++, statements normally constitute "full expressions"; 13534 temporaries created during a statement are destroyed when the 13535 statement is complete. However, G++ sometimes represents 13536 expressions by statements; these statements will not have 13537 `STMT_IS_FULL_EXPR_P' set. Temporaries created during such 13538 statements should be destroyed when the innermost enclosing 13539 statement with `STMT_IS_FULL_EXPR_P' set is exited. 13540 13541 13542 Here is the list of the various statement nodes, and the macros used to 13543 access them. This documentation describes the use of these nodes in 13544 non-template functions (including instantiations of template functions). 13545 In template functions, the same nodes are used, but sometimes in 13546 slightly different ways. 13547 13548 Many of the statements have substatements. For example, a `while' 13549 loop will have a body, which is itself a statement. If the substatement 13550 is `NULL_TREE', it is considered equivalent to a statement consisting 13551 of a single `;', i.e., an expression statement in which the expression 13552 has been omitted. A substatement may in fact be a list of statements, 13553 connected via their `TREE_CHAIN's. So, you should always process the 13554 statement tree by looping over substatements, like this: 13555 void process_stmt (stmt) 13556 tree stmt; 13557 { 13558 while (stmt) 13559 { 13560 switch (TREE_CODE (stmt)) 13561 { 13562 case IF_STMT: 13563 process_stmt (THEN_CLAUSE (stmt)); 13564 /* More processing here. */ 13565 break; 13566 13567 ... 13568 } 13569 13570 stmt = TREE_CHAIN (stmt); 13571 } 13572 } 13573 In other words, while the `then' clause of an `if' statement in C++ 13574 can be only one statement (although that one statement may be a 13575 compound statement), the intermediate representation will sometimes use 13576 several statements chained together. 13577 13578 `BREAK_STMT' 13579 Used to represent a `break' statement. There are no additional 13580 fields. 13581 13582 `CLEANUP_STMT' 13583 Used to represent an action that should take place upon exit from 13584 the enclosing scope. Typically, these actions are calls to 13585 destructors for local objects, but back ends cannot rely on this 13586 fact. If these nodes are in fact representing such destructors, 13587 `CLEANUP_DECL' will be the `VAR_DECL' destroyed. Otherwise, 13588 `CLEANUP_DECL' will be `NULL_TREE'. In any case, the 13589 `CLEANUP_EXPR' is the expression to execute. The cleanups 13590 executed on exit from a scope should be run in the reverse order 13591 of the order in which the associated `CLEANUP_STMT's were 13592 encountered. 13593 13594 `CONTINUE_STMT' 13595 Used to represent a `continue' statement. There are no additional 13596 fields. 13597 13598 `CTOR_STMT' 13599 Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if 13600 `CTOR_END_P' holds of the main body of a constructor. See also 13601 `SUBOBJECT' for more information on how to use these nodes. 13602 13603 `DO_STMT' 13604 Used to represent a `do' loop. The body of the loop is given by 13605 `DO_BODY' while the termination condition for the loop is given by 13606 `DO_COND'. The condition for a `do'-statement is always an 13607 expression. 13608 13609 `EMPTY_CLASS_EXPR' 13610 Used to represent a temporary object of a class with no data whose 13611 address is never taken. (All such objects are interchangeable.) 13612 The `TREE_TYPE' represents the type of the object. 13613 13614 `EXPR_STMT' 13615 Used to represent an expression statement. Use `EXPR_STMT_EXPR' to 13616 obtain the expression. 13617 13618 `FOR_STMT' 13619 Used to represent a `for' statement. The `FOR_INIT_STMT' is the 13620 initialization statement for the loop. The `FOR_COND' is the 13621 termination condition. The `FOR_EXPR' is the expression executed 13622 right before the `FOR_COND' on each loop iteration; often, this 13623 expression increments a counter. The body of the loop is given by 13624 `FOR_BODY'. Note that `FOR_INIT_STMT' and `FOR_BODY' return 13625 statements, while `FOR_COND' and `FOR_EXPR' return expressions. 13626 13627 `HANDLER' 13628 Used to represent a C++ `catch' block. The `HANDLER_TYPE' is the 13629 type of exception that will be caught by this handler; it is equal 13630 (by pointer equality) to `NULL' if this handler is for all types. 13631 `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and 13632 `HANDLER_BODY' is the code for the block itself. 13633 13634 `IF_STMT' 13635 Used to represent an `if' statement. The `IF_COND' is the 13636 expression. 13637 13638 If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a 13639 statement (usually a `DECL_STMT'). Each time the condition is 13640 evaluated, the statement should be executed. Then, the 13641 `TREE_VALUE' should be used as the conditional expression itself. 13642 This representation is used to handle C++ code like this: 13643 13644 C++ distinguishes between this and `COND_EXPR' for handling 13645 templates. 13646 13647 if (int i = 7) ... 13648 13649 where there is a new local variable (or variables) declared within 13650 the condition. 13651 13652 The `THEN_CLAUSE' represents the statement given by the `then' 13653 condition, while the `ELSE_CLAUSE' represents the statement given 13654 by the `else' condition. 13655 13656 `SUBOBJECT' 13657 In a constructor, these nodes are used to mark the point at which a 13658 subobject of `this' is fully constructed. If, after this point, an 13659 exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is 13660 encountered, the `SUBOBJECT_CLEANUP' must be executed. The 13661 cleanups must be executed in the reverse order in which they 13662 appear. 13663 13664 `SWITCH_STMT' 13665 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is 13666 the expression on which the switch is occurring. See the 13667 documentation for an `IF_STMT' for more information on the 13668 representation used for the condition. The `SWITCH_STMT_BODY' is 13669 the body of the switch statement. The `SWITCH_STMT_TYPE' is the 13670 original type of switch expression as given in the source, before 13671 any compiler conversions. 13672 13673 `TRY_BLOCK' 13674 Used to represent a `try' block. The body of the try block is 13675 given by `TRY_STMTS'. Each of the catch blocks is a `HANDLER' 13676 node. The first handler is given by `TRY_HANDLERS'. Subsequent 13677 handlers are obtained by following the `TREE_CHAIN' link from one 13678 handler to the next. The body of the handler is given by 13679 `HANDLER_BODY'. 13680 13681 If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS' 13682 will not be a `HANDLER' node. Instead, it will be an expression 13683 that should be executed if an exception is thrown in the try 13684 block. It must rethrow the exception after executing that code. 13685 And, if an exception is thrown while the expression is executing, 13686 `terminate' must be called. 13687 13688 `USING_STMT' 13689 Used to represent a `using' directive. The namespace is given by 13690 `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 13691 is needed inside template functions, to implement using directives 13692 during instantiation. 13693 13694 `WHILE_STMT' 13695 Used to represent a `while' loop. The `WHILE_COND' is the 13696 termination condition for the loop. See the documentation for an 13697 `IF_STMT' for more information on the representation used for the 13698 condition. 13699 13700 The `WHILE_BODY' is the body of the loop. 13701 13702 13703 13704 File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 13705 13706 11.10.6 C++ Expressions 13707 ----------------------- 13708 13709 This section describes expressions specific to the C and C++ front ends. 13710 13711 `TYPEID_EXPR' 13712 Used to represent a `typeid' expression. 13713 13714 `NEW_EXPR' 13715 `VEC_NEW_EXPR' 13716 Used to represent a call to `new' and `new[]' respectively. 13717 13718 `DELETE_EXPR' 13719 `VEC_DELETE_EXPR' 13720 Used to represent a call to `delete' and `delete[]' respectively. 13721 13722 `MEMBER_REF' 13723 Represents a reference to a member of a class. 13724 13725 `THROW_EXPR' 13726 Represents an instance of `throw' in the program. Operand 0, 13727 which is the expression to throw, may be `NULL_TREE'. 13728 13729 `AGGR_INIT_EXPR' 13730 An `AGGR_INIT_EXPR' represents the initialization as the return 13731 value of a function call, or as the result of a constructor. An 13732 `AGGR_INIT_EXPR' will only appear as a full-expression, or as the 13733 second operand of a `TARGET_EXPR'. `AGGR_INIT_EXPR's have a 13734 representation similar to that of `CALL_EXPR's. You can use the 13735 `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the 13736 function to call and the arguments to pass. 13737 13738 If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the 13739 initialization is via a constructor call. The address of the 13740 `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is 13741 taken, and this value replaces the first argument in the argument 13742 list. 13743 13744 In either case, the expression is void. 13745 13746 13747 13748 File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC 13749 13750 11.11 Java Trees 13751 ================ 13752 13753 13754 File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 13755 13756 12 GIMPLE 13757 ********* 13758 13759 GIMPLE is a three-address representation derived from GENERIC by 13760 breaking down GENERIC expressions into tuples of no more than 3 13761 operands (with some exceptions like function calls). GIMPLE was 13762 heavily influenced by the SIMPLE IL used by the McCAT compiler project 13763 at McGill University, though we have made some different choices. For 13764 one thing, SIMPLE doesn't support `goto'. 13765 13766 Temporaries are introduced to hold intermediate values needed to 13767 compute complex expressions. Additionally, all the control structures 13768 used in GENERIC are lowered into conditional jumps, lexical scopes are 13769 removed and exception regions are converted into an on the side 13770 exception region tree. 13771 13772 The compiler pass which converts GENERIC into GIMPLE is referred to as 13773 the `gimplifier'. The gimplifier works recursively, generating GIMPLE 13774 tuples out of the original GENERIC expressions. 13775 13776 One of the early implementation strategies used for the GIMPLE 13777 representation was to use the same internal data structures used by 13778 front ends to represent parse trees. This simplified implementation 13779 because we could leverage existing functionality and interfaces. 13780 However, GIMPLE is a much more restrictive representation than abstract 13781 syntax trees (AST), therefore it does not require the full structural 13782 complexity provided by the main tree data structure. 13783 13784 The GENERIC representation of a function is stored in the 13785 `DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node. 13786 It is converted to GIMPLE by a call to `gimplify_function_tree'. 13787 13788 If a front end wants to include language-specific tree codes in the 13789 tree representation which it provides to the back end, it must provide a 13790 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 13791 front end trees to GIMPLE. Usually such a hook will involve much of 13792 the same code for expanding front end trees to RTL. This function can 13793 return fully lowered GIMPLE, or it can return GENERIC trees and let the 13794 main gimplifier lower them the rest of the way; this is often simpler. 13795 GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 13796 of the IL before the pass `pass_lower_cf'. High GIMPLE contains some 13797 container statements like lexical scopes (represented by `GIMPLE_BIND') 13798 and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes 13799 all of the implicit jumps for control and exception expressions 13800 directly in the IL and EH region trees. 13801 13802 The C and C++ front ends currently convert directly from front end 13803 trees to GIMPLE, and hand that off to the back end rather than first 13804 converting to GENERIC. Their gimplifier hooks know about all the 13805 `_STMT' nodes and how to convert them to GENERIC forms. There was some 13806 work done on a genericization pass which would run first, but the 13807 existence of `STMT_EXPR' meant that in order to convert all of the C 13808 statements into GENERIC equivalents would involve walking the entire 13809 tree anyway, so it was simpler to lower all the way. This might change 13810 in the future if someone writes an optimization pass which would work 13811 better with higher-level trees, but currently the optimizers all expect 13812 GIMPLE. 13813 13814 You can request to dump a C-like representation of the GIMPLE form 13815 with the flag `-fdump-tree-gimple'. 13816 13817 * Menu: 13818 13819 * Tuple representation:: 13820 * GIMPLE instruction set:: 13821 * GIMPLE Exception Handling:: 13822 * Temporaries:: 13823 * Operands:: 13824 * Manipulating GIMPLE statements:: 13825 * Tuple specific accessors:: 13826 * GIMPLE sequences:: 13827 * Sequence iterators:: 13828 * Adding a new GIMPLE statement code:: 13829 * Statement and operand traversals:: 13830 13831 13832 File: gccint.info, Node: Tuple representation, Next: GIMPLE instruction set, Up: GIMPLE 13833 13834 12.1 Tuple representation 13835 ========================= 13836 13837 GIMPLE instructions are tuples of variable size divided in two groups: 13838 a header describing the instruction and its locations, and a variable 13839 length body with all the operands. Tuples are organized into a 13840 hierarchy with 3 main classes of tuples. 13841 13842 12.1.1 `gimple_statement_base' (gsbase) 13843 --------------------------------------- 13844 13845 This is the root of the hierarchy, it holds basic information needed by 13846 most GIMPLE statements. There are some fields that may not be relevant 13847 to every GIMPLE statement, but those were moved into the base structure 13848 to take advantage of holes left by other fields (thus making the 13849 structure more compact). The structure takes 4 words (32 bytes) on 64 13850 bit hosts: 13851 13852 Field Size (bits) 13853 `code' 8 13854 `subcode' 16 13855 `no_warning' 1 13856 `visited' 1 13857 `nontemporal_move' 1 13858 `plf' 2 13859 `modified' 1 13860 `has_volatile_ops' 1 13861 `references_memory_p' 1 13862 `uid' 32 13863 `location' 32 13864 `num_ops' 32 13865 `bb' 64 13866 `block' 63 13867 Total size 32 bytes 13868 13869 * `code' Main identifier for a GIMPLE instruction. 13870 13871 * `subcode' Used to distinguish different variants of the same basic 13872 instruction or provide flags applicable to a given code. The 13873 `subcode' flags field has different uses depending on the code of 13874 the instruction, but mostly it distinguishes instructions of the 13875 same family. The most prominent use of this field is in 13876 assignments, where subcode indicates the operation done on the RHS 13877 of the assignment. For example, a = b + c is encoded as 13878 `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 13879 13880 * `no_warning' Bitflag to indicate whether a warning has already 13881 been issued on this statement. 13882 13883 * `visited' General purpose "visited" marker. Set and cleared by 13884 each pass when needed. 13885 13886 * `nontemporal_move' Bitflag used in assignments that represent 13887 non-temporal moves. Although this bitflag is only used in 13888 assignments, it was moved into the base to take advantage of the 13889 bit holes left by the previous fields. 13890 13891 * `plf' Pass Local Flags. This 2-bit mask can be used as general 13892 purpose markers by any pass. Passes are responsible for clearing 13893 and setting these two flags accordingly. 13894 13895 * `modified' Bitflag to indicate whether the statement has been 13896 modified. Used mainly by the operand scanner to determine when to 13897 re-scan a statement for operands. 13898 13899 * `has_volatile_ops' Bitflag to indicate whether this statement 13900 contains operands that have been marked volatile. 13901 13902 * `references_memory_p' Bitflag to indicate whether this statement 13903 contains memory references (i.e., its operands are either global 13904 variables, or pointer dereferences or anything that must reside in 13905 memory). 13906 13907 * `uid' This is an unsigned integer used by passes that want to 13908 assign IDs to every statement. These IDs must be assigned and used 13909 by each pass. 13910 13911 * `location' This is a `location_t' identifier to specify source code 13912 location for this statement. It is inherited from the front end. 13913 13914 * `num_ops' Number of operands that this statement has. This 13915 specifies the size of the operand vector embedded in the tuple. 13916 Only used in some tuples, but it is declared in the base tuple to 13917 take advantage of the 32-bit hole left by the previous fields. 13918 13919 * `bb' Basic block holding the instruction. 13920 13921 * `block' Lexical block holding this statement. Also used for debug 13922 information generation. 13923 13924 12.1.2 `gimple_statement_with_ops' 13925 ---------------------------------- 13926 13927 This tuple is actually split in two: `gimple_statement_with_ops_base' 13928 and `gimple_statement_with_ops'. This is needed to accommodate the way 13929 the operand vector is allocated. The operand vector is defined to be an 13930 array of 1 element. So, to allocate a dynamic number of operands, the 13931 memory allocator (`gimple_alloc') simply allocates enough memory to 13932 hold the structure itself plus `N - 1' operands which run "off the end" 13933 of the structure. For example, to allocate space for a tuple with 3 13934 operands, `gimple_alloc' reserves `sizeof (struct 13935 gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 13936 13937 On the other hand, several fields in this tuple need to be shared with 13938 the `gimple_statement_with_memory_ops' tuple. So, these common fields 13939 are placed in `gimple_statement_with_ops_base' which is then inherited 13940 from the other two tuples. 13941 13942 `gsbase' 256 13943 `def_ops' 64 13944 `use_ops' 64 13945 `op' `num_ops' * 64 13946 Total size 48 + 8 * `num_ops' bytes 13947 13948 * `gsbase' Inherited from `struct gimple_statement_base'. 13949 13950 * `def_ops' Array of pointers into the operand array indicating all 13951 the slots that contain a variable written-to by the statement. 13952 This array is also used for immediate use chaining. Note that it 13953 would be possible to not rely on this array, but the changes 13954 required to implement this are pretty invasive. 13955 13956 * `use_ops' Similar to `def_ops' but for variables read by the 13957 statement. 13958 13959 * `op' Array of trees with `num_ops' slots. 13960 13961 12.1.3 `gimple_statement_with_memory_ops' 13962 ----------------------------------------- 13963 13964 This tuple is essentially identical to `gimple_statement_with_ops', 13965 except that it contains 4 additional fields to hold vectors related 13966 memory stores and loads. Similar to the previous case, the structure 13967 is split in two to accommodate for the operand vector 13968 (`gimple_statement_with_memory_ops_base' and 13969 `gimple_statement_with_memory_ops'). 13970 13971 Field Size (bits) 13972 `gsbase' 256 13973 `def_ops' 64 13974 `use_ops' 64 13975 `vdef_ops' 64 13976 `vuse_ops' 64 13977 `stores' 64 13978 `loads' 64 13979 `op' `num_ops' * 64 13980 Total size 80 + 8 * `num_ops' bytes 13981 13982 * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is 13983 one entry per memory symbol written by this statement. This is 13984 used to maintain the memory SSA use-def and def-def chains. 13985 13986 * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is 13987 one entry per memory symbol loaded by this statement. This is used 13988 to maintain the memory SSA use-def chains. 13989 13990 * `stores' Bitset with all the UIDs for the symbols written-to by the 13991 statement. This is different than `vdef_ops' in that all the 13992 affected symbols are mentioned in this set. If memory 13993 partitioning is enabled, the `vdef_ops' vector will refer to memory 13994 partitions. Furthermore, no SSA information is stored in this set. 13995 13996 * `loads' Similar to `stores', but for memory loads. (Note that there 13997 is some amount of redundancy here, it should be possible to reduce 13998 memory utilization further by removing these sets). 13999 14000 All the other tuples are defined in terms of these three basic ones. 14001 Each tuple will add some fields. The main gimple type is defined to be 14002 the union of all these structures (`GTY' markers elided for clarity): 14003 14004 union gimple_statement_d 14005 { 14006 struct gimple_statement_base gsbase; 14007 struct gimple_statement_with_ops gsops; 14008 struct gimple_statement_with_memory_ops gsmem; 14009 struct gimple_statement_omp omp; 14010 struct gimple_statement_bind gimple_bind; 14011 struct gimple_statement_catch gimple_catch; 14012 struct gimple_statement_eh_filter gimple_eh_filter; 14013 struct gimple_statement_phi gimple_phi; 14014 struct gimple_statement_resx gimple_resx; 14015 struct gimple_statement_try gimple_try; 14016 struct gimple_statement_wce gimple_wce; 14017 struct gimple_statement_asm gimple_asm; 14018 struct gimple_statement_omp_critical gimple_omp_critical; 14019 struct gimple_statement_omp_for gimple_omp_for; 14020 struct gimple_statement_omp_parallel gimple_omp_parallel; 14021 struct gimple_statement_omp_task gimple_omp_task; 14022 struct gimple_statement_omp_sections gimple_omp_sections; 14023 struct gimple_statement_omp_single gimple_omp_single; 14024 struct gimple_statement_omp_continue gimple_omp_continue; 14025 struct gimple_statement_omp_atomic_load gimple_omp_atomic_load; 14026 struct gimple_statement_omp_atomic_store gimple_omp_atomic_store; 14027 }; 14028 14029 14030 File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Tuple representation, Up: GIMPLE 14031 14032 12.2 GIMPLE instruction set 14033 =========================== 14034 14035 The following table briefly describes the GIMPLE instruction set. 14036 14037 Instruction High GIMPLE Low GIMPLE 14038 `GIMPLE_ASM' x x 14039 `GIMPLE_ASSIGN' x x 14040 `GIMPLE_BIND' x 14041 `GIMPLE_CALL' x x 14042 `GIMPLE_CATCH' x 14043 `GIMPLE_COND' x x 14044 `GIMPLE_DEBUG' x x 14045 `GIMPLE_EH_FILTER' x 14046 `GIMPLE_GOTO' x x 14047 `GIMPLE_LABEL' x x 14048 `GIMPLE_NOP' x x 14049 `GIMPLE_OMP_ATOMIC_LOAD' x x 14050 `GIMPLE_OMP_ATOMIC_STORE' x x 14051 `GIMPLE_OMP_CONTINUE' x x 14052 `GIMPLE_OMP_CRITICAL' x x 14053 `GIMPLE_OMP_FOR' x x 14054 `GIMPLE_OMP_MASTER' x x 14055 `GIMPLE_OMP_ORDERED' x x 14056 `GIMPLE_OMP_PARALLEL' x x 14057 `GIMPLE_OMP_RETURN' x x 14058 `GIMPLE_OMP_SECTION' x x 14059 `GIMPLE_OMP_SECTIONS' x x 14060 `GIMPLE_OMP_SECTIONS_SWITCH' x x 14061 `GIMPLE_OMP_SINGLE' x x 14062 `GIMPLE_PHI' x 14063 `GIMPLE_RESX' x 14064 `GIMPLE_RETURN' x x 14065 `GIMPLE_SWITCH' x x 14066 `GIMPLE_TRY' x 14067 14068 14069 File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 14070 14071 12.3 Exception Handling 14072 ======================= 14073 14074 Other exception handling constructs are represented using 14075 `GIMPLE_TRY_CATCH'. `GIMPLE_TRY_CATCH' has two operands. The first 14076 operand is a sequence of statements to execute. If executing these 14077 statements does not throw an exception, then the second operand is 14078 ignored. Otherwise, if an exception is thrown, then the second operand 14079 of the `GIMPLE_TRY_CATCH' is checked. The second operand may have the 14080 following forms: 14081 14082 1. A sequence of statements to execute. When an exception occurs, 14083 these statements are executed, and then the exception is rethrown. 14084 14085 2. A sequence of `GIMPLE_CATCH' statements. Each `GIMPLE_CATCH' has 14086 a list of applicable exception types and handler code. If the 14087 thrown exception matches one of the caught types, the associated 14088 handler code is executed. If the handler code falls off the 14089 bottom, execution continues after the original `GIMPLE_TRY_CATCH'. 14090 14091 3. A `GIMPLE_EH_FILTER' statement. This has a list of permitted 14092 exception types, and code to handle a match failure. If the 14093 thrown exception does not match one of the allowed types, the 14094 associated match failure code is executed. If the thrown exception 14095 does match, it continues unwinding the stack looking for the next 14096 handler. 14097 14098 14099 Currently throwing an exception is not directly represented in GIMPLE, 14100 since it is implemented by calling a function. At some point in the 14101 future we will want to add some way to express that the call will throw 14102 an exception of a known type. 14103 14104 Just before running the optimizers, the compiler lowers the high-level 14105 EH constructs above into a set of `goto's, magic labels, and EH 14106 regions. Continuing to unwind at the end of a cleanup is represented 14107 with a `GIMPLE_RESX'. 14108 14109 14110 File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 14111 14112 12.4 Temporaries 14113 ================ 14114 14115 When gimplification encounters a subexpression that is too complex, it 14116 creates a new temporary variable to hold the value of the 14117 subexpression, and adds a new statement to initialize it before the 14118 current statement. These special temporaries are known as `expression 14119 temporaries', and are allocated using `get_formal_tmp_var'. The 14120 compiler tries to always evaluate identical expressions into the same 14121 temporary, to simplify elimination of redundant calculations. 14122 14123 We can only use expression temporaries when we know that it will not 14124 be reevaluated before its value is used, and that it will not be 14125 otherwise modified(1). Other temporaries can be allocated using 14126 `get_initialized_tmp_var' or `create_tmp_var'. 14127 14128 Currently, an expression like `a = b + 5' is not reduced any further. 14129 We tried converting it to something like 14130 T1 = b + 5; 14131 a = T1; 14132 but this bloated the representation for minimal benefit. However, a 14133 variable which must live in memory cannot appear in an expression; its 14134 value is explicitly loaded into a temporary first. Similarly, storing 14135 the value of an expression to a memory variable goes through a 14136 temporary. 14137 14138 ---------- Footnotes ---------- 14139 14140 (1) These restrictions are derived from those in Morgan 4.8. 14141 14142 14143 File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 14144 14145 12.5 Operands 14146 ============= 14147 14148 In general, expressions in GIMPLE consist of an operation and the 14149 appropriate number of simple operands; these operands must either be a 14150 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register 14151 variable. More complex operands are factored out into temporaries, so 14152 that 14153 a = b + c + d 14154 becomes 14155 T1 = b + c; 14156 a = T1 + d; 14157 14158 The same rule holds for arguments to a `GIMPLE_CALL'. 14159 14160 The target of an assignment is usually a variable, but can also be a 14161 `MEM_REF' or a compound lvalue as described below. 14162 14163 * Menu: 14164 14165 * Compound Expressions:: 14166 * Compound Lvalues:: 14167 * Conditional Expressions:: 14168 * Logical Operators:: 14169 14170 14171 File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 14172 14173 12.5.1 Compound Expressions 14174 --------------------------- 14175 14176 The left-hand side of a C comma expression is simply moved into a 14177 separate statement. 14178 14179 14180 File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 14181 14182 12.5.2 Compound Lvalues 14183 ----------------------- 14184 14185 Currently compound lvalues involving array and structure field 14186 references are not broken down; an expression like `a.b[2] = 42' is not 14187 reduced any further (though complex array subscripts are). This 14188 restriction is a workaround for limitations in later optimizers; if we 14189 were to convert this to 14190 14191 T1 = &a.b; 14192 T1[2] = 42; 14193 14194 alias analysis would not remember that the reference to `T1[2]' came 14195 by way of `a.b', so it would think that the assignment could alias 14196 another member of `a'; this broke `struct-alias-1.c'. Future optimizer 14197 improvements may make this limitation unnecessary. 14198 14199 14200 File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 14201 14202 12.5.3 Conditional Expressions 14203 ------------------------------ 14204 14205 A C `?:' expression is converted into an `if' statement with each 14206 branch assigning to the same temporary. So, 14207 14208 a = b ? c : d; 14209 becomes 14210 if (b == 1) 14211 T1 = c; 14212 else 14213 T1 = d; 14214 a = T1; 14215 14216 The GIMPLE level if-conversion pass re-introduces `?:' expression, if 14217 appropriate. It is used to vectorize loops with conditions using vector 14218 conditional operations. 14219 14220 Note that in GIMPLE, `if' statements are represented using 14221 `GIMPLE_COND', as described below. 14222 14223 14224 File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 14225 14226 12.5.4 Logical Operators 14227 ------------------------ 14228 14229 Except when they appear in the condition operand of a `GIMPLE_COND', 14230 logical `and' and `or' operators are simplified as follows: `a = b && 14231 c' becomes 14232 14233 T1 = (bool)b; 14234 if (T1 == true) 14235 T1 = (bool)c; 14236 a = T1; 14237 14238 Note that `T1' in this example cannot be an expression temporary, 14239 because it has two different assignments. 14240 14241 12.5.5 Manipulating operands 14242 ---------------------------- 14243 14244 All gimple operands are of type `tree'. But only certain types of 14245 trees are allowed to be used as operand tuples. Basic validation is 14246 controlled by the function `get_gimple_rhs_class', which given a tree 14247 code, returns an `enum' with the following values of type `enum 14248 gimple_rhs_class' 14249 14250 * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 14251 14252 * `GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation. 14253 14254 * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 14255 14256 * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 14257 14258 * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 14259 split into simpler operands (for instance, `SSA_NAME', `VAR_DECL', 14260 `COMPONENT_REF', etc). 14261 14262 This operand class also acts as an escape hatch for tree nodes 14263 that may be flattened out into the operand vector, but would need 14264 more than two slots on the RHS. For instance, a `COND_EXPR' 14265 expression of the form `(a op b) ? x : y' could be flattened out 14266 on the operand vector using 4 slots, but it would also require 14267 additional processing to distinguish `c = a op b' from `c = a op b 14268 ? x : y'. Something similar occurs with `ASSERT_EXPR'. In time, 14269 these special case tree expressions should be flattened into the 14270 operand vector. 14271 14272 For tree nodes in the categories `GIMPLE_TERNARY_RHS', 14273 `GIMPLE_BINARY_RHS' and `GIMPLE_UNARY_RHS', they cannot be stored 14274 inside tuples directly. They first need to be flattened and separated 14275 into individual components. For instance, given the GENERIC expression 14276 14277 a = b + c 14278 14279 its tree representation is: 14280 14281 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 14282 14283 In this case, the GIMPLE form for this statement is logically 14284 identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS 14285 of the assignment is not represented as a tree, instead the two 14286 operands are taken out of the `PLUS_EXPR' sub-tree and flattened into 14287 the GIMPLE tuple as follows: 14288 14289 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 14290 14291 12.5.6 Operand vector allocation 14292 -------------------------------- 14293 14294 The operand vector is stored at the bottom of the three tuple 14295 structures that accept operands. This means, that depending on the code 14296 of a given statement, its operand vector will be at different offsets 14297 from the base of the structure. To access tuple operands use the 14298 following accessors 14299 14300 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 14301 Returns the number of operands in statement G. 14302 14303 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 14304 Returns operand `I' from statement `G'. 14305 14306 -- GIMPLE function: tree * gimple_ops (gimple g) 14307 Returns a pointer into the operand vector for statement `G'. This 14308 is computed using an internal table called `gimple_ops_offset_'[]. 14309 This table is indexed by the gimple code of `G'. 14310 14311 When the compiler is built, this table is filled-in using the 14312 sizes of the structures used by each statement code defined in 14313 gimple.def. Since the operand vector is at the bottom of the 14314 structure, for a gimple code `C' the offset is computed as sizeof 14315 (struct-of `C') - sizeof (tree). 14316 14317 This mechanism adds one memory indirection to every access when 14318 using `gimple_op'(), if this becomes a bottleneck, a pass can 14319 choose to memoize the result from `gimple_ops'() and use that to 14320 access the operands. 14321 14322 12.5.7 Operand validation 14323 ------------------------- 14324 14325 When adding a new operand to a gimple statement, the operand will be 14326 validated according to what each tuple accepts in its operand vector. 14327 These predicates are called by the `gimple_NAME_set_...()'. Each tuple 14328 will use one of the following predicates (Note, this list is not 14329 exhaustive): 14330 14331 -- GIMPLE function: bool is_gimple_val (tree t) 14332 Returns true if t is a "GIMPLE value", which are all the 14333 non-addressable stack variables (variables for which 14334 `is_gimple_reg' returns true) and constants (expressions for which 14335 `is_gimple_min_invariant' returns true). 14336 14337 -- GIMPLE function: bool is_gimple_addressable (tree t) 14338 Returns true if t is a symbol or memory reference whose address 14339 can be taken. 14340 14341 -- GIMPLE function: bool is_gimple_asm_val (tree t) 14342 Similar to `is_gimple_val' but it also accepts hard registers. 14343 14344 -- GIMPLE function: bool is_gimple_call_addr (tree t) 14345 Return true if t is a valid expression to use as the function 14346 called by a `GIMPLE_CALL'. 14347 14348 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t) 14349 Return true if t is a valid expression to use as first operand of 14350 a `MEM_REF' expression. 14351 14352 -- GIMPLE function: bool is_gimple_constant (tree t) 14353 Return true if t is a valid gimple constant. 14354 14355 -- GIMPLE function: bool is_gimple_min_invariant (tree t) 14356 Return true if t is a valid minimal invariant. This is different 14357 from constants, in that the specific value of t may not be known 14358 at compile time, but it is known that it doesn't change (e.g., the 14359 address of a function local variable). 14360 14361 -- GIMPLE function: bool is_gimple_ip_invariant (tree t) 14362 Return true if t is an interprocedural invariant. This means that 14363 t is a valid invariant in all functions (e.g. it can be an address 14364 of a global variable but not of a local one). 14365 14366 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t) 14367 Return true if t is an `ADDR_EXPR' that does not change once the 14368 program is running (and which is valid in all functions). 14369 14370 12.5.8 Statement validation 14371 --------------------------- 14372 14373 -- GIMPLE function: bool is_gimple_assign (gimple g) 14374 Return true if the code of g is `GIMPLE_ASSIGN'. 14375 14376 -- GIMPLE function: bool is_gimple_call (gimple g) 14377 Return true if the code of g is `GIMPLE_CALL'. 14378 14379 -- GIMPLE function: bool is_gimple_debug (gimple g) 14380 Return true if the code of g is `GIMPLE_DEBUG'. 14381 14382 -- GIMPLE function: bool gimple_assign_cast_p (gimple g) 14383 Return true if g is a `GIMPLE_ASSIGN' that performs a type cast 14384 operation. 14385 14386 -- GIMPLE function: bool gimple_debug_bind_p (gimple g) 14387 Return true if g is a `GIMPLE_DEBUG' that binds the value of an 14388 expression to a variable. 14389 14390 14391 File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 14392 14393 12.6 Manipulating GIMPLE statements 14394 =================================== 14395 14396 This section documents all the functions available to handle each of 14397 the GIMPLE instructions. 14398 14399 12.6.1 Common accessors 14400 ----------------------- 14401 14402 The following are common accessors for gimple statements. 14403 14404 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 14405 Return the code for statement `G'. 14406 14407 -- GIMPLE function: basic_block gimple_bb (gimple g) 14408 Return the basic block to which statement `G' belongs to. 14409 14410 -- GIMPLE function: tree gimple_block (gimple g) 14411 Return the lexical scope block holding statement `G'. 14412 14413 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 14414 Return the type of the main expression computed by `STMT'. Return 14415 `void_type_node' if `STMT' computes nothing. This will only return 14416 something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and 14417 `GIMPLE_CALL'. For all other tuple codes, it will return 14418 `void_type_node'. 14419 14420 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 14421 Return the tree code for the expression computed by `STMT'. This 14422 is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and 14423 `GIMPLE_COND'. If `STMT' is `GIMPLE_CALL', it will return 14424 `CALL_EXPR'. For `GIMPLE_COND', it returns the code of the 14425 comparison predicate. For `GIMPLE_ASSIGN' it returns the code of 14426 the operation performed by the `RHS' of the assignment. 14427 14428 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 14429 Set the lexical scope block of `G' to `BLOCK'. 14430 14431 -- GIMPLE function: location_t gimple_locus (gimple g) 14432 Return locus information for statement `G'. 14433 14434 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 14435 Set locus information for statement `G'. 14436 14437 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 14438 Return true if `G' does not have locus information. 14439 14440 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 14441 Return true if no warnings should be emitted for statement `STMT'. 14442 14443 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 14444 visited_p) 14445 Set the visited status on statement `STMT' to `VISITED_P'. 14446 14447 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 14448 Return the visited status on statement `STMT'. 14449 14450 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 14451 plf, bool val_p) 14452 Set pass local flag `PLF' on statement `STMT' to `VAL_P'. 14453 14454 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum 14455 plf_mask plf) 14456 Return the value of pass local flag `PLF' on statement `STMT'. 14457 14458 -- GIMPLE function: bool gimple_has_ops (gimple g) 14459 Return true if statement `G' has register or memory operands. 14460 14461 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 14462 Return true if statement `G' has memory operands. 14463 14464 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 14465 Return the number of operands for statement `G'. 14466 14467 -- GIMPLE function: tree * gimple_ops (gimple g) 14468 Return the array of operands for statement `G'. 14469 14470 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 14471 Return operand `I' for statement `G'. 14472 14473 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i) 14474 Return a pointer to operand `I' for statement `G'. 14475 14476 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 14477 Set operand `I' of statement `G' to `OP'. 14478 14479 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 14480 Return the set of symbols that have had their address taken by 14481 `STMT'. 14482 14483 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g) 14484 Return the set of `DEF' operands for statement `G'. 14485 14486 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 14487 def_optype_d *def) 14488 Set `DEF' to be the set of `DEF' operands for statement `G'. 14489 14490 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g) 14491 Return the set of `USE' operands for statement `G'. 14492 14493 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 14494 use_optype_d *use) 14495 Set `USE' to be the set of `USE' operands for statement `G'. 14496 14497 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g) 14498 Return the set of `VUSE' operands for statement `G'. 14499 14500 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 14501 voptype_d *ops) 14502 Set `OPS' to be the set of `VUSE' operands for statement `G'. 14503 14504 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g) 14505 Return the set of `VDEF' operands for statement `G'. 14506 14507 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 14508 voptype_d *ops) 14509 Set `OPS' to be the set of `VDEF' operands for statement `G'. 14510 14511 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 14512 Return the set of symbols loaded by statement `G'. Each element of 14513 the set is the `DECL_UID' of the corresponding symbol. 14514 14515 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 14516 Return the set of symbols stored by statement `G'. Each element of 14517 the set is the `DECL_UID' of the corresponding symbol. 14518 14519 -- GIMPLE function: bool gimple_modified_p (gimple g) 14520 Return true if statement `G' has operands and the modified field 14521 has been set. 14522 14523 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 14524 Return true if statement `STMT' contains volatile operands. 14525 14526 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, 14527 bool volatilep) 14528 Return true if statement `STMT' contains volatile operands. 14529 14530 -- GIMPLE function: void update_stmt (gimple s) 14531 Mark statement `S' as modified, and update it. 14532 14533 -- GIMPLE function: void update_stmt_if_modified (gimple s) 14534 Update statement `S' if it has been marked modified. 14535 14536 -- GIMPLE function: gimple gimple_copy (gimple stmt) 14537 Return a deep copy of statement `STMT'. 14538 14539 14540 File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 14541 14542 12.7 Tuple specific accessors 14543 ============================= 14544 14545 * Menu: 14546 14547 * `GIMPLE_ASM':: 14548 * `GIMPLE_ASSIGN':: 14549 * `GIMPLE_BIND':: 14550 * `GIMPLE_CALL':: 14551 * `GIMPLE_CATCH':: 14552 * `GIMPLE_COND':: 14553 * `GIMPLE_DEBUG':: 14554 * `GIMPLE_EH_FILTER':: 14555 * `GIMPLE_LABEL':: 14556 * `GIMPLE_NOP':: 14557 * `GIMPLE_OMP_ATOMIC_LOAD':: 14558 * `GIMPLE_OMP_ATOMIC_STORE':: 14559 * `GIMPLE_OMP_CONTINUE':: 14560 * `GIMPLE_OMP_CRITICAL':: 14561 * `GIMPLE_OMP_FOR':: 14562 * `GIMPLE_OMP_MASTER':: 14563 * `GIMPLE_OMP_ORDERED':: 14564 * `GIMPLE_OMP_PARALLEL':: 14565 * `GIMPLE_OMP_RETURN':: 14566 * `GIMPLE_OMP_SECTION':: 14567 * `GIMPLE_OMP_SECTIONS':: 14568 * `GIMPLE_OMP_SINGLE':: 14569 * `GIMPLE_PHI':: 14570 * `GIMPLE_RESX':: 14571 * `GIMPLE_RETURN':: 14572 * `GIMPLE_SWITCH':: 14573 * `GIMPLE_TRY':: 14574 * `GIMPLE_WITH_CLEANUP_EXPR':: 14575 14576 14577 File: gccint.info, Node: `GIMPLE_ASM', Next: `GIMPLE_ASSIGN', Up: Tuple specific accessors 14578 14579 12.7.1 `GIMPLE_ASM' 14580 ------------------- 14581 14582 -- GIMPLE function: gimple gimple_build_asm (const char *string, 14583 ninputs, noutputs, nclobbers, ...) 14584 Build a `GIMPLE_ASM' statement. This statement is used for 14585 building in-line assembly constructs. `STRING' is the assembly 14586 code. `NINPUT' is the number of register inputs. `NOUTPUT' is the 14587 number of register outputs. `NCLOBBERS' is the number of clobbered 14588 registers. The rest of the arguments trees for each input, 14589 output, and clobbered registers. 14590 14591 -- GIMPLE function: gimple gimple_build_asm_vec (const char *, 14592 VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *) 14593 Identical to gimple_build_asm, but the arguments are passed in 14594 VECs. 14595 14596 -- GIMPLE function: unsigned gimple_asm_ninputs (gimple g) 14597 Return the number of input operands for `GIMPLE_ASM' `G'. 14598 14599 -- GIMPLE function: unsigned gimple_asm_noutputs (gimple g) 14600 Return the number of output operands for `GIMPLE_ASM' `G'. 14601 14602 -- GIMPLE function: unsigned gimple_asm_nclobbers (gimple g) 14603 Return the number of clobber operands for `GIMPLE_ASM' `G'. 14604 14605 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index) 14606 Return input operand `INDEX' of `GIMPLE_ASM' `G'. 14607 14608 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned 14609 index, tree in_op) 14610 Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'. 14611 14612 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned 14613 index) 14614 Return output operand `INDEX' of `GIMPLE_ASM' `G'. 14615 14616 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned 14617 index, tree out_op) 14618 Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'. 14619 14620 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned 14621 index) 14622 Return clobber operand `INDEX' of `GIMPLE_ASM' `G'. 14623 14624 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned 14625 index, tree clobber_op) 14626 Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'. 14627 14628 -- GIMPLE function: const char * gimple_asm_string (gimple g) 14629 Return the string representing the assembly instruction in 14630 `GIMPLE_ASM' `G'. 14631 14632 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g) 14633 Return true if `G' is an asm statement marked volatile. 14634 14635 -- GIMPLE function: void gimple_asm_set_volatile (gimple g) 14636 Mark asm statement `G' as volatile. 14637 14638 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g) 14639 Remove volatile marker from asm statement `G'. 14640 14641 14642 File: gccint.info, Node: `GIMPLE_ASSIGN', Next: `GIMPLE_BIND', Prev: `GIMPLE_ASM', Up: Tuple specific accessors 14643 14644 12.7.2 `GIMPLE_ASSIGN' 14645 ---------------------- 14646 14647 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs) 14648 Build a `GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 14649 passed in lhs. The right-hand side can be either a unary or 14650 binary tree expression. The expression tree rhs will be flattened 14651 and its operands assigned to the corresponding operand slots in 14652 the new statement. This function is useful when you already have 14653 a tree expression that you want to convert into a tuple. However, 14654 try to avoid building expression trees for the sole purpose of 14655 calling this function. If you already have the operands in 14656 separate trees, it is better to use `gimple_build_assign_with_ops'. 14657 14658 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 14659 gimple_seq *seq_p) 14660 Build a new `GIMPLE_ASSIGN' tuple and append it to the end of 14661 `*SEQ_P'. 14662 14663 `DST'/`SRC' are the destination and source respectively. You can pass 14664 ungimplified trees in `DST' or `SRC', in which case they will be 14665 converted to a gimple operand if necessary. 14666 14667 This function returns the newly created `GIMPLE_ASSIGN' tuple. 14668 14669 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum 14670 tree_code subcode, tree lhs, tree op1, tree op2) 14671 This function is similar to `gimple_build_assign', but is used to 14672 build a `GIMPLE_ASSIGN' statement when the operands of the 14673 right-hand side of the assignment are already split into different 14674 operands. 14675 14676 The left-hand side is an lvalue passed in lhs. Subcode is the 14677 `tree_code' for the right-hand side of the assignment. Op1 and op2 14678 are the operands. If op2 is null, subcode must be a `tree_code' 14679 for a unary expression. 14680 14681 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 14682 Return the code of the expression computed on the `RHS' of 14683 assignment statement `G'. 14684 14685 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 14686 (gimple g) 14687 Return the gimple rhs class of the code for the expression 14688 computed on the rhs of assignment statement `G'. This will never 14689 return `GIMPLE_INVALID_RHS'. 14690 14691 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 14692 Return the `LHS' of assignment statement `G'. 14693 14694 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g) 14695 Return a pointer to the `LHS' of assignment statement `G'. 14696 14697 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 14698 Return the first operand on the `RHS' of assignment statement `G'. 14699 14700 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g) 14701 Return the address of the first operand on the `RHS' of assignment 14702 statement `G'. 14703 14704 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 14705 Return the second operand on the `RHS' of assignment statement `G'. 14706 14707 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g) 14708 Return the address of the second operand on the `RHS' of assignment 14709 statement `G'. 14710 14711 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g) 14712 Return the third operand on the `RHS' of assignment statement `G'. 14713 14714 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g) 14715 Return the address of the third operand on the `RHS' of assignment 14716 statement `G'. 14717 14718 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 14719 Set `LHS' to be the `LHS' operand of assignment statement `G'. 14720 14721 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 14722 Set `RHS' to be the first operand on the `RHS' of assignment 14723 statement `G'. 14724 14725 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 14726 Set `RHS' to be the second operand on the `RHS' of assignment 14727 statement `G'. 14728 14729 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs) 14730 Set `RHS' to be the third operand on the `RHS' of assignment 14731 statement `G'. 14732 14733 -- GIMPLE function: bool gimple_assign_cast_p (gimple s) 14734 Return true if `S' is a type-cast assignment. 14735 14736 14737 File: gccint.info, Node: `GIMPLE_BIND', Next: `GIMPLE_CALL', Prev: `GIMPLE_ASSIGN', Up: Tuple specific accessors 14738 14739 12.7.3 `GIMPLE_BIND' 14740 -------------------- 14741 14742 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq 14743 body) 14744 Build a `GIMPLE_BIND' statement with a list of variables in `VARS' 14745 and a body of statements in sequence `BODY'. 14746 14747 -- GIMPLE function: tree gimple_bind_vars (gimple g) 14748 Return the variables declared in the `GIMPLE_BIND' statement `G'. 14749 14750 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars) 14751 Set `VARS' to be the set of variables declared in the `GIMPLE_BIND' 14752 statement `G'. 14753 14754 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars) 14755 Append `VARS' to the set of variables declared in the `GIMPLE_BIND' 14756 statement `G'. 14757 14758 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g) 14759 Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement 14760 `G'. 14761 14762 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq 14763 seq) 14764 Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement 14765 `G'. 14766 14767 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt) 14768 Append a statement to the end of a `GIMPLE_BIND''s body. 14769 14770 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq 14771 seq) 14772 Append a sequence of statements to the end of a `GIMPLE_BIND''s 14773 body. 14774 14775 -- GIMPLE function: tree gimple_bind_block (gimple g) 14776 Return the `TREE_BLOCK' node associated with `GIMPLE_BIND' 14777 statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in 14778 trees. 14779 14780 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block) 14781 Set `BLOCK' to be the `TREE_BLOCK' node associated with 14782 `GIMPLE_BIND' statement `G'. 14783 14784 14785 File: gccint.info, Node: `GIMPLE_CALL', Next: `GIMPLE_CATCH', Prev: `GIMPLE_BIND', Up: Tuple specific accessors 14786 14787 12.7.4 `GIMPLE_CALL' 14788 -------------------- 14789 14790 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs, 14791 ...) 14792 Build a `GIMPLE_CALL' statement to function `FN'. The argument 14793 `FN' must be either a `FUNCTION_DECL' or a gimple call address as 14794 determined by `is_gimple_call_addr'. `NARGS' are the number of 14795 arguments. The rest of the arguments follow the argument `NARGS', 14796 and must be trees that are valid as rvalues in gimple (i.e., each 14797 operand is validated with `is_gimple_operand'). 14798 14799 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr) 14800 Build a `GIMPLE_CALL' from a `CALL_EXPR' node. The arguments and 14801 the function are taken from the expression directly. This routine 14802 assumes that `call_expr' is already in GIMPLE form. That is, its 14803 operands are GIMPLE values and the function call needs no further 14804 simplification. All the call flags in `call_expr' are copied over 14805 to the new `GIMPLE_CALL'. 14806 14807 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree, 14808 heap) *args) 14809 Identical to `gimple_build_call' but the arguments are stored in a 14810 `VEC'(). 14811 14812 -- GIMPLE function: tree gimple_call_lhs (gimple g) 14813 Return the `LHS' of call statement `G'. 14814 14815 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g) 14816 Return a pointer to the `LHS' of call statement `G'. 14817 14818 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 14819 Set `LHS' to be the `LHS' operand of call statement `G'. 14820 14821 -- GIMPLE function: tree gimple_call_fn (gimple g) 14822 Return the tree node representing the function called by call 14823 statement `G'. 14824 14825 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn) 14826 Set `FN' to be the function called by call statement `G'. This has 14827 to be a gimple value specifying the address of the called function. 14828 14829 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 14830 If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it. 14831 Otherwise return `NULL'. This function is analogous to 14832 `get_callee_fndecl' in `GENERIC'. 14833 14834 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 14835 Set the called function to `FNDECL'. 14836 14837 -- GIMPLE function: tree gimple_call_return_type (gimple g) 14838 Return the type returned by call statement `G'. 14839 14840 -- GIMPLE function: tree gimple_call_chain (gimple g) 14841 Return the static chain for call statement `G'. 14842 14843 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain) 14844 Set `CHAIN' to be the static chain for call statement `G'. 14845 14846 -- GIMPLE function: unsigned gimple_call_num_args (gimple g) 14847 Return the number of arguments used by call statement `G'. 14848 14849 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 14850 Return the argument at position `INDEX' for call statement `G'. 14851 The first argument is 0. 14852 14853 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned 14854 index) 14855 Return a pointer to the argument at position `INDEX' for call 14856 statement `G'. 14857 14858 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned 14859 index, tree arg) 14860 Set `ARG' to be the argument at position `INDEX' for call statement 14861 `G'. 14862 14863 -- GIMPLE function: void gimple_call_set_tail (gimple s) 14864 Mark call statement `S' as being a tail call (i.e., a call just 14865 before the exit of a function). These calls are candidate for tail 14866 call optimization. 14867 14868 -- GIMPLE function: bool gimple_call_tail_p (gimple s) 14869 Return true if `GIMPLE_CALL' `S' is marked as a tail call. 14870 14871 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s) 14872 Mark `GIMPLE_CALL' `S' as being uninlinable. 14873 14874 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s) 14875 Return true if `GIMPLE_CALL' `S' cannot be inlined. 14876 14877 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 14878 Return true if `S' is a noreturn call. 14879 14880 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt, 14881 bitmap args_to_skip) 14882 Build a `GIMPLE_CALL' identical to `STMT' but skipping the 14883 arguments in the positions marked by the set `ARGS_TO_SKIP'. 14884 14885 14886 File: gccint.info, Node: `GIMPLE_CATCH', Next: `GIMPLE_COND', Prev: `GIMPLE_CALL', Up: Tuple specific accessors 14887 14888 12.7.5 `GIMPLE_CATCH' 14889 --------------------- 14890 14891 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq 14892 handler) 14893 Build a `GIMPLE_CATCH' statement. `TYPES' are the tree types this 14894 catch handles. `HANDLER' is a sequence of statements with the code 14895 for the handler. 14896 14897 -- GIMPLE function: tree gimple_catch_types (gimple g) 14898 Return the types handled by `GIMPLE_CATCH' statement `G'. 14899 14900 -- GIMPLE function: tree * gimple_catch_types_ptr (gimple g) 14901 Return a pointer to the types handled by `GIMPLE_CATCH' statement 14902 `G'. 14903 14904 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g) 14905 Return the GIMPLE sequence representing the body of the handler of 14906 `GIMPLE_CATCH' statement `G'. 14907 14908 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t) 14909 Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'. 14910 14911 -- GIMPLE function: void gimple_catch_set_handler (gimple g, 14912 gimple_seq handler) 14913 Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'. 14914 14915 14916 File: gccint.info, Node: `GIMPLE_COND', Next: `GIMPLE_DEBUG', Prev: `GIMPLE_CATCH', Up: Tuple specific accessors 14917 14918 12.7.6 `GIMPLE_COND' 14919 -------------------- 14920 14921 -- GIMPLE function: gimple gimple_build_cond (enum tree_code 14922 pred_code, tree lhs, tree rhs, tree t_label, tree f_label) 14923 Build a `GIMPLE_COND' statement. `A' `GIMPLE_COND' statement 14924 compares `LHS' and `RHS' and if the condition in `PRED_CODE' is 14925 true, jump to the label in `t_label', otherwise jump to the label 14926 in `f_label'. `PRED_CODE' are relational operator tree codes like 14927 `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc. 14928 14929 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond, 14930 tree t_label, tree f_label) 14931 Build a `GIMPLE_COND' statement from the conditional expression 14932 tree `COND'. `T_LABEL' and `F_LABEL' are as in 14933 `gimple_build_cond'. 14934 14935 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 14936 Return the code of the predicate computed by conditional statement 14937 `G'. 14938 14939 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum 14940 tree_code code) 14941 Set `CODE' to be the predicate code for the conditional statement 14942 `G'. 14943 14944 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 14945 Return the `LHS' of the predicate computed by conditional statement 14946 `G'. 14947 14948 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs) 14949 Set `LHS' to be the `LHS' operand of the predicate computed by 14950 conditional statement `G'. 14951 14952 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 14953 Return the `RHS' operand of the predicate computed by conditional 14954 `G'. 14955 14956 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs) 14957 Set `RHS' to be the `RHS' operand of the predicate computed by 14958 conditional statement `G'. 14959 14960 -- GIMPLE function: tree gimple_cond_true_label (gimple g) 14961 Return the label used by conditional statement `G' when its 14962 predicate evaluates to true. 14963 14964 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree 14965 label) 14966 Set `LABEL' to be the label used by conditional statement `G' when 14967 its predicate evaluates to true. 14968 14969 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree 14970 label) 14971 Set `LABEL' to be the label used by conditional statement `G' when 14972 its predicate evaluates to false. 14973 14974 -- GIMPLE function: tree gimple_cond_false_label (gimple g) 14975 Return the label used by conditional statement `G' when its 14976 predicate evaluates to false. 14977 14978 -- GIMPLE function: void gimple_cond_make_false (gimple g) 14979 Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'. 14980 14981 -- GIMPLE function: void gimple_cond_make_true (gimple g) 14982 Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'. 14983 14984 14985 File: gccint.info, Node: `GIMPLE_DEBUG', Next: `GIMPLE_EH_FILTER', Prev: `GIMPLE_COND', Up: Tuple specific accessors 14986 14987 12.7.7 `GIMPLE_DEBUG' 14988 --------------------- 14989 14990 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree 14991 value, gimple stmt) 14992 Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of 14993 `subcode'. The effect of this statement is to tell debug 14994 information generation machinery that the value of user variable 14995 `var' is given by `value' at that point, and to remain with that 14996 value until `var' runs out of scope, a dynamically-subsequent 14997 debug bind statement overrides the binding, or conflicting values 14998 reach a control flow merge point. Even if components of the 14999 `value' expression change afterwards, the variable is supposed to 15000 retain the same value, though not necessarily the same location. 15001 15002 It is expected that `var' be most often a tree for automatic user 15003 variables (`VAR_DECL' or `PARM_DECL') that satisfy the 15004 requirements for gimple registers, but it may also be a tree for a 15005 scalarized component of a user variable (`ARRAY_REF', 15006 `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL'). 15007 15008 As for `value', it can be an arbitrary tree expression, but it is 15009 recommended that it be in a suitable form for a gimple assignment 15010 `RHS'. It is not expected that user variables that could appear 15011 as `var' ever appear in `value', because in the latter we'd have 15012 their `SSA_NAME's instead, but even if they were not in SSA form, 15013 user variables appearing in `value' are to be regarded as part of 15014 the executable code space, whereas those in `var' are to be 15015 regarded as part of the source code space. There is no way to 15016 refer to the value bound to a user variable within a `value' 15017 expression. 15018 15019 If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information 15020 generation machinery is informed that the variable `var' is 15021 unbound, i.e., that its value is indeterminate, which sometimes 15022 means it is really unavailable, and other times that the compiler 15023 could not keep track of it. 15024 15025 Block and location information for the newly-created stmt are 15026 taken from `stmt', if given. 15027 15028 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 15029 Return the user variable VAR that is bound at `stmt'. 15030 15031 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 15032 Return the value expression that is bound to a user variable at 15033 `stmt'. 15034 15035 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple 15036 stmt) 15037 Return a pointer to the value expression that is bound to a user 15038 variable at `stmt'. 15039 15040 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 15041 var) 15042 Modify the user variable bound at `stmt' to VAR. 15043 15044 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, 15045 tree var) 15046 Modify the value bound to the user variable bound at `stmt' to 15047 VALUE. 15048 15049 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 15050 Modify the value bound to the user variable bound at `stmt' so 15051 that the variable becomes unbound. 15052 15053 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 15054 Return `TRUE' if `stmt' binds a user variable to a value, and 15055 `FALSE' if it unbinds the variable. 15056 15057 15058 File: gccint.info, Node: `GIMPLE_EH_FILTER', Next: `GIMPLE_LABEL', Prev: `GIMPLE_DEBUG', Up: Tuple specific accessors 15059 15060 12.7.8 `GIMPLE_EH_FILTER' 15061 ------------------------- 15062 15063 -- GIMPLE function: gimple gimple_build_eh_filter (tree types, 15064 gimple_seq failure) 15065 Build a `GIMPLE_EH_FILTER' statement. `TYPES' are the filter's 15066 types. `FAILURE' is a sequence with the filter's failure action. 15067 15068 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 15069 Return the types handled by `GIMPLE_EH_FILTER' statement `G'. 15070 15071 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g) 15072 Return a pointer to the types handled by `GIMPLE_EH_FILTER' 15073 statement `G'. 15074 15075 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 15076 Return the sequence of statement to execute when `GIMPLE_EH_FILTER' 15077 statement fails. 15078 15079 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree 15080 types) 15081 Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER' 15082 `G'. 15083 15084 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g, 15085 gimple_seq failure) 15086 Set `FAILURE' to be the sequence of statements to execute on 15087 failure for `GIMPLE_EH_FILTER' `G'. 15088 15089 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g) 15090 Return the `EH_FILTER_MUST_NOT_THROW' flag. 15091 15092 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple 15093 g, bool mntp) 15094 Set the `EH_FILTER_MUST_NOT_THROW' flag. 15095 15096 15097 File: gccint.info, Node: `GIMPLE_LABEL', Next: `GIMPLE_NOP', Prev: `GIMPLE_EH_FILTER', Up: Tuple specific accessors 15098 15099 12.7.9 `GIMPLE_LABEL' 15100 --------------------- 15101 15102 -- GIMPLE function: gimple gimple_build_label (tree label) 15103 Build a `GIMPLE_LABEL' statement with corresponding to the tree 15104 label, `LABEL'. 15105 15106 -- GIMPLE function: tree gimple_label_label (gimple g) 15107 Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'. 15108 15109 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label) 15110 Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL' 15111 statement `G'. 15112 15113 -- GIMPLE function: gimple gimple_build_goto (tree dest) 15114 Build a `GIMPLE_GOTO' statement to label `DEST'. 15115 15116 -- GIMPLE function: tree gimple_goto_dest (gimple g) 15117 Return the destination of the unconditional jump `G'. 15118 15119 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest) 15120 Set `DEST' to be the destination of the unconditional jump `G'. 15121 15122 15123 File: gccint.info, Node: `GIMPLE_NOP', Next: `GIMPLE_OMP_ATOMIC_LOAD', Prev: `GIMPLE_LABEL', Up: Tuple specific accessors 15124 15125 12.7.10 `GIMPLE_NOP' 15126 -------------------- 15127 15128 -- GIMPLE function: gimple gimple_build_nop (void) 15129 Build a `GIMPLE_NOP' statement. 15130 15131 -- GIMPLE function: bool gimple_nop_p (gimple g) 15132 Returns `TRUE' if statement `G' is a `GIMPLE_NOP'. 15133 15134 15135 File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_LOAD', Next: `GIMPLE_OMP_ATOMIC_STORE', Prev: `GIMPLE_NOP', Up: Tuple specific accessors 15136 15137 12.7.11 `GIMPLE_OMP_ATOMIC_LOAD' 15138 -------------------------------- 15139 15140 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs, 15141 tree rhs) 15142 Build a `GIMPLE_OMP_ATOMIC_LOAD' statement. `LHS' is the left-hand 15143 side of the assignment. `RHS' is the right-hand side of the 15144 assignment. 15145 15146 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g, 15147 tree lhs) 15148 Set the `LHS' of an atomic load. 15149 15150 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g) 15151 Get the `LHS' of an atomic load. 15152 15153 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g, 15154 tree rhs) 15155 Set the `RHS' of an atomic set. 15156 15157 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g) 15158 Get the `RHS' of an atomic set. 15159 15160 15161 File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_STORE', Next: `GIMPLE_OMP_CONTINUE', Prev: `GIMPLE_OMP_ATOMIC_LOAD', Up: Tuple specific accessors 15162 15163 12.7.12 `GIMPLE_OMP_ATOMIC_STORE' 15164 --------------------------------- 15165 15166 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val) 15167 Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to 15168 be stored. 15169 15170 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g, 15171 tree val) 15172 Set the value being stored in an atomic store. 15173 15174 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g) 15175 Return the value being stored in an atomic store. 15176 15177 15178 File: gccint.info, Node: `GIMPLE_OMP_CONTINUE', Next: `GIMPLE_OMP_CRITICAL', Prev: `GIMPLE_OMP_ATOMIC_STORE', Up: Tuple specific accessors 15179 15180 12.7.13 `GIMPLE_OMP_CONTINUE' 15181 ----------------------------- 15182 15183 -- GIMPLE function: gimple gimple_build_omp_continue (tree 15184 control_def, tree control_use) 15185 Build a `GIMPLE_OMP_CONTINUE' statement. `CONTROL_DEF' is the 15186 definition of the control variable. `CONTROL_USE' is the use of 15187 the control variable. 15188 15189 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s) 15190 Return the definition of the control variable on a 15191 `GIMPLE_OMP_CONTINUE' in `S'. 15192 15193 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s) 15194 Same as above, but return the pointer. 15195 15196 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s) 15197 Set the control variable definition for a `GIMPLE_OMP_CONTINUE' 15198 statement in `S'. 15199 15200 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s) 15201 Return the use of the control variable on a `GIMPLE_OMP_CONTINUE' 15202 in `S'. 15203 15204 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s) 15205 Same as above, but return the pointer. 15206 15207 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s) 15208 Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement 15209 in `S'. 15210 15211 15212 File: gccint.info, Node: `GIMPLE_OMP_CRITICAL', Next: `GIMPLE_OMP_FOR', Prev: `GIMPLE_OMP_CONTINUE', Up: Tuple specific accessors 15213 15214 12.7.14 `GIMPLE_OMP_CRITICAL' 15215 ----------------------------- 15216 15217 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body, 15218 tree name) 15219 Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of 15220 statements for which only one thread can execute. `NAME' is an 15221 optional identifier for this critical block. 15222 15223 -- GIMPLE function: tree gimple_omp_critical_name (gimple g) 15224 Return the name associated with `OMP_CRITICAL' statement `G'. 15225 15226 -- GIMPLE function: tree * gimple_omp_critical_name_ptr (gimple g) 15227 Return a pointer to the name associated with `OMP' critical 15228 statement `G'. 15229 15230 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree 15231 name) 15232 Set `NAME' to be the name associated with `OMP' critical statement 15233 `G'. 15234 15235 15236 File: gccint.info, Node: `GIMPLE_OMP_FOR', Next: `GIMPLE_OMP_MASTER', Prev: `GIMPLE_OMP_CRITICAL', Up: Tuple specific accessors 15237 15238 12.7.15 `GIMPLE_OMP_FOR' 15239 ------------------------ 15240 15241 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree 15242 clauses, tree index, tree initial, tree final, tree incr, 15243 gimple_seq pre_body, enum tree_code omp_for_cond) 15244 Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of 15245 statements inside the for loop. `CLAUSES', are any of the `OMP' 15246 loop construct's clauses: private, firstprivate, lastprivate, 15247 reductions, ordered, schedule, and nowait. `PRE_BODY' is the 15248 sequence of statements that are loop invariant. `INDEX' is the 15249 index variable. `INITIAL' is the initial value of `INDEX'. 15250 `FINAL' is final value of `INDEX'. OMP_FOR_COND is the predicate 15251 used to compare `INDEX' and `FINAL'. `INCR' is the increment 15252 expression. 15253 15254 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 15255 Return the clauses associated with `OMP_FOR' `G'. 15256 15257 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g) 15258 Return a pointer to the `OMP_FOR' `G'. 15259 15260 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 15261 clauses) 15262 Set `CLAUSES' to be the list of clauses associated with `OMP_FOR' 15263 `G'. 15264 15265 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 15266 Return the index variable for `OMP_FOR' `G'. 15267 15268 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g) 15269 Return a pointer to the index variable for `OMP_FOR' `G'. 15270 15271 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 15272 index) 15273 Set `INDEX' to be the index variable for `OMP_FOR' `G'. 15274 15275 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 15276 Return the initial value for `OMP_FOR' `G'. 15277 15278 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g) 15279 Return a pointer to the initial value for `OMP_FOR' `G'. 15280 15281 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 15282 initial) 15283 Set `INITIAL' to be the initial value for `OMP_FOR' `G'. 15284 15285 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 15286 Return the final value for `OMP_FOR' `G'. 15287 15288 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g) 15289 turn a pointer to the final value for `OMP_FOR' `G'. 15290 15291 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 15292 final) 15293 Set `FINAL' to be the final value for `OMP_FOR' `G'. 15294 15295 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 15296 Return the increment value for `OMP_FOR' `G'. 15297 15298 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g) 15299 Return a pointer to the increment value for `OMP_FOR' `G'. 15300 15301 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 15302 Set `INCR' to be the increment value for `OMP_FOR' `G'. 15303 15304 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 15305 Return the sequence of statements to execute before the `OMP_FOR' 15306 statement `G' starts. 15307 15308 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 15309 gimple_seq pre_body) 15310 Set `PRE_BODY' to be the sequence of statements to execute before 15311 the `OMP_FOR' statement `G' starts. 15312 15313 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 15314 tree_code cond) 15315 Set `COND' to be the condition code for `OMP_FOR' `G'. 15316 15317 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 15318 Return the condition code associated with `OMP_FOR' `G'. 15319 15320 15321 File: gccint.info, Node: `GIMPLE_OMP_MASTER', Next: `GIMPLE_OMP_ORDERED', Prev: `GIMPLE_OMP_FOR', Up: Tuple specific accessors 15322 15323 12.7.16 `GIMPLE_OMP_MASTER' 15324 --------------------------- 15325 15326 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 15327 Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of 15328 statements to be executed by just the master. 15329 15330 15331 File: gccint.info, Node: `GIMPLE_OMP_ORDERED', Next: `GIMPLE_OMP_PARALLEL', Prev: `GIMPLE_OMP_MASTER', Up: Tuple specific accessors 15332 15333 12.7.17 `GIMPLE_OMP_ORDERED' 15334 ---------------------------- 15335 15336 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 15337 Build a `GIMPLE_OMP_ORDERED' statement. 15338 15339 `BODY' is the sequence of statements inside a loop that will executed 15340 in sequence. 15341 15342 15343 File: gccint.info, Node: `GIMPLE_OMP_PARALLEL', Next: `GIMPLE_OMP_RETURN', Prev: `GIMPLE_OMP_ORDERED', Up: Tuple specific accessors 15344 15345 12.7.18 `GIMPLE_OMP_PARALLEL' 15346 ----------------------------- 15347 15348 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body, 15349 tree clauses, tree child_fn, tree data_arg) 15350 Build a `GIMPLE_OMP_PARALLEL' statement. 15351 15352 `BODY' is sequence of statements which are executed in parallel. 15353 `CLAUSES', are the `OMP' parallel construct's clauses. `CHILD_FN' is 15354 the function created for the parallel threads to execute. `DATA_ARG' 15355 are the shared data argument(s). 15356 15357 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 15358 Return true if `OMP' parallel statement `G' has the 15359 `GF_OMP_PARALLEL_COMBINED' flag set. 15360 15361 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 15362 Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel 15363 statement `G'. 15364 15365 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 15366 Return the body for the `OMP' statement `G'. 15367 15368 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 15369 body) 15370 Set `BODY' to be the body for the `OMP' statement `G'. 15371 15372 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 15373 Return the clauses associated with `OMP_PARALLEL' `G'. 15374 15375 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr (gimple g) 15376 Return a pointer to the clauses associated with `OMP_PARALLEL' `G'. 15377 15378 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g, 15379 tree clauses) 15380 Set `CLAUSES' to be the list of clauses associated with 15381 `OMP_PARALLEL' `G'. 15382 15383 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g) 15384 Return the child function used to hold the body of `OMP_PARALLEL' 15385 `G'. 15386 15387 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr (gimple g) 15388 Return a pointer to the child function used to hold the body of 15389 `OMP_PARALLEL' `G'. 15390 15391 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g, 15392 tree child_fn) 15393 Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'. 15394 15395 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g) 15396 Return the artificial argument used to send variables and values 15397 from the parent to the children threads in `OMP_PARALLEL' `G'. 15398 15399 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr (gimple g) 15400 Return a pointer to the data argument for `OMP_PARALLEL' `G'. 15401 15402 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g, 15403 tree data_arg) 15404 Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'. 15405 15406 -- GIMPLE function: bool is_gimple_omp (gimple stmt) 15407 Returns true when the gimple statement `STMT' is any of the OpenMP 15408 types. 15409 15410 15411 File: gccint.info, Node: `GIMPLE_OMP_RETURN', Next: `GIMPLE_OMP_SECTION', Prev: `GIMPLE_OMP_PARALLEL', Up: Tuple specific accessors 15412 15413 12.7.19 `GIMPLE_OMP_RETURN' 15414 --------------------------- 15415 15416 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 15417 Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is 15418 a non-waiting return. 15419 15420 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 15421 Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'. 15422 15423 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 15424 Return true if `OMP' return statement `G' has the 15425 `GF_OMP_RETURN_NOWAIT' flag set. 15426 15427 15428 File: gccint.info, Node: `GIMPLE_OMP_SECTION', Next: `GIMPLE_OMP_SECTIONS', Prev: `GIMPLE_OMP_RETURN', Up: Tuple specific accessors 15429 15430 12.7.20 `GIMPLE_OMP_SECTION' 15431 ---------------------------- 15432 15433 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 15434 Build a `GIMPLE_OMP_SECTION' statement for a sections statement. 15435 15436 `BODY' is the sequence of statements in the section. 15437 15438 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 15439 Return true if `OMP' section statement `G' has the 15440 `GF_OMP_SECTION_LAST' flag set. 15441 15442 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 15443 Set the `GF_OMP_SECTION_LAST' flag on `G'. 15444 15445 15446 File: gccint.info, Node: `GIMPLE_OMP_SECTIONS', Next: `GIMPLE_OMP_SINGLE', Prev: `GIMPLE_OMP_SECTION', Up: Tuple specific accessors 15447 15448 12.7.21 `GIMPLE_OMP_SECTIONS' 15449 ----------------------------- 15450 15451 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body, 15452 tree clauses) 15453 Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of 15454 section statements. `CLAUSES' are any of the `OMP' sections 15455 construct's clauses: private, firstprivate, lastprivate, 15456 reduction, and nowait. 15457 15458 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 15459 Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement. 15460 15461 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 15462 Return the control variable associated with the 15463 `GIMPLE_OMP_SECTIONS' in `G'. 15464 15465 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g) 15466 Return a pointer to the clauses associated with the 15467 `GIMPLE_OMP_SECTIONS' in `G'. 15468 15469 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 15470 tree control) 15471 Set `CONTROL' to be the set of clauses associated with the 15472 `GIMPLE_OMP_SECTIONS' in `G'. 15473 15474 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 15475 Return the clauses associated with `OMP_SECTIONS' `G'. 15476 15477 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g) 15478 Return a pointer to the clauses associated with `OMP_SECTIONS' `G'. 15479 15480 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 15481 tree clauses) 15482 Set `CLAUSES' to be the set of clauses associated with 15483 `OMP_SECTIONS' `G'. 15484 15485 15486 File: gccint.info, Node: `GIMPLE_OMP_SINGLE', Next: `GIMPLE_PHI', Prev: `GIMPLE_OMP_SECTIONS', Up: Tuple specific accessors 15487 15488 12.7.22 `GIMPLE_OMP_SINGLE' 15489 --------------------------- 15490 15491 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body, 15492 tree clauses) 15493 Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of 15494 statements that will be executed once. `CLAUSES' are any of the 15495 `OMP' single construct's clauses: private, firstprivate, 15496 copyprivate, nowait. 15497 15498 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 15499 Return the clauses associated with `OMP_SINGLE' `G'. 15500 15501 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g) 15502 Return a pointer to the clauses associated with `OMP_SINGLE' `G'. 15503 15504 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree 15505 clauses) 15506 Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'. 15507 15508 15509 File: gccint.info, Node: `GIMPLE_PHI', Next: `GIMPLE_RESX', Prev: `GIMPLE_OMP_SINGLE', Up: Tuple specific accessors 15510 15511 12.7.23 `GIMPLE_PHI' 15512 -------------------- 15513 15514 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 15515 Return the maximum number of arguments supported by `GIMPLE_PHI' 15516 `G'. 15517 15518 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 15519 Return the number of arguments in `GIMPLE_PHI' `G'. This must 15520 always be exactly the number of incoming edges for the basic block 15521 holding `G'. 15522 15523 -- GIMPLE function: tree gimple_phi_result (gimple g) 15524 Return the `SSA' name created by `GIMPLE_PHI' `G'. 15525 15526 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g) 15527 Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'. 15528 15529 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result) 15530 Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'. 15531 15532 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index) 15533 Return the `PHI' argument corresponding to incoming edge `INDEX' 15534 for `GIMPLE_PHI' `G'. 15535 15536 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct 15537 phi_arg_d * phiarg) 15538 Set `PHIARG' to be the argument corresponding to incoming edge 15539 `INDEX' for `GIMPLE_PHI' `G'. 15540 15541 15542 File: gccint.info, Node: `GIMPLE_RESX', Next: `GIMPLE_RETURN', Prev: `GIMPLE_PHI', Up: Tuple specific accessors 15543 15544 12.7.24 `GIMPLE_RESX' 15545 --------------------- 15546 15547 -- GIMPLE function: gimple gimple_build_resx (int region) 15548 Build a `GIMPLE_RESX' statement which is a statement. This 15549 statement is a placeholder for _Unwind_Resume before we know if a 15550 function call or a branch is needed. `REGION' is the exception 15551 region from which control is flowing. 15552 15553 -- GIMPLE function: int gimple_resx_region (gimple g) 15554 Return the region number for `GIMPLE_RESX' `G'. 15555 15556 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region) 15557 Set `REGION' to be the region number for `GIMPLE_RESX' `G'. 15558 15559 15560 File: gccint.info, Node: `GIMPLE_RETURN', Next: `GIMPLE_SWITCH', Prev: `GIMPLE_RESX', Up: Tuple specific accessors 15561 15562 12.7.25 `GIMPLE_RETURN' 15563 ----------------------- 15564 15565 -- GIMPLE function: gimple gimple_build_return (tree retval) 15566 Build a `GIMPLE_RETURN' statement whose return value is retval. 15567 15568 -- GIMPLE function: tree gimple_return_retval (gimple g) 15569 Return the return value for `GIMPLE_RETURN' `G'. 15570 15571 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree 15572 retval) 15573 Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'. 15574 15575 15576 File: gccint.info, Node: `GIMPLE_SWITCH', Next: `GIMPLE_TRY', Prev: `GIMPLE_RETURN', Up: Tuple specific accessors 15577 15578 12.7.26 `GIMPLE_SWITCH' 15579 ----------------------- 15580 15581 -- GIMPLE function: gimple gimple_build_switch (tree index, tree 15582 default_label, `VEC'(tree,heap) *args) 15583 Build a `GIMPLE_SWITCH' statement. `INDEX' is the index variable 15584 to switch on, and `DEFAULT_LABEL' represents the default label. 15585 `ARGS' is a vector of `CASE_LABEL_EXPR' trees that contain the 15586 non-default case labels. Each label is a tree of code 15587 `CASE_LABEL_EXPR'. 15588 15589 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g) 15590 Return the number of labels associated with the switch statement 15591 `G'. 15592 15593 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g, 15594 unsigned nlabels) 15595 Set `NLABELS' to be the number of labels for the switch statement 15596 `G'. 15597 15598 -- GIMPLE function: tree gimple_switch_index (gimple g) 15599 Return the index variable used by the switch statement `G'. 15600 15601 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index) 15602 Set `INDEX' to be the index variable for switch statement `G'. 15603 15604 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index) 15605 Return the label numbered `INDEX'. The default label is 0, followed 15606 by any labels in a switch statement. 15607 15608 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned 15609 index, tree label) 15610 Set the label number `INDEX' to `LABEL'. 0 is always the default 15611 label. 15612 15613 -- GIMPLE function: tree gimple_switch_default_label (gimple g) 15614 Return the default label for a switch statement. 15615 15616 -- GIMPLE function: void gimple_switch_set_default_label (gimple g, 15617 tree label) 15618 Set the default label for a switch statement. 15619 15620 15621 File: gccint.info, Node: `GIMPLE_TRY', Next: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_SWITCH', Up: Tuple specific accessors 15622 15623 12.7.27 `GIMPLE_TRY' 15624 -------------------- 15625 15626 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval, 15627 gimple_seq cleanup, unsigned int kind) 15628 Build a `GIMPLE_TRY' statement. `EVAL' is a sequence with the 15629 expression to evaluate. `CLEANUP' is a sequence of statements to 15630 run at clean-up time. `KIND' is the enumeration value 15631 `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 15632 or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 15633 construct. 15634 15635 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 15636 Return the kind of try block represented by `GIMPLE_TRY' `G'. This 15637 is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'. 15638 15639 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 15640 Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15641 15642 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 15643 Return the sequence of statements used as the body for `GIMPLE_TRY' 15644 `G'. 15645 15646 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 15647 Return the sequence of statements used as the cleanup body for 15648 `GIMPLE_TRY' `G'. 15649 15650 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 15651 bool catch_is_cleanup) 15652 Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15653 15654 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq 15655 eval) 15656 Set `EVAL' to be the sequence of statements to use as the body for 15657 `GIMPLE_TRY' `G'. 15658 15659 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq 15660 cleanup) 15661 Set `CLEANUP' to be the sequence of statements to use as the 15662 cleanup body for `GIMPLE_TRY' `G'. 15663 15664 15665 File: gccint.info, Node: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_TRY', Up: Tuple specific accessors 15666 15667 12.7.28 `GIMPLE_WITH_CLEANUP_EXPR' 15668 ---------------------------------- 15669 15670 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 15671 Build a `GIMPLE_WITH_CLEANUP_EXPR' statement. `CLEANUP' is the 15672 clean-up expression. 15673 15674 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 15675 Return the cleanup sequence for cleanup statement `G'. 15676 15677 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 15678 cleanup) 15679 Set `CLEANUP' to be the cleanup sequence for `G'. 15680 15681 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 15682 Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple. 15683 15684 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, 15685 bool eh_only_p) 15686 Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple. 15687 15688 15689 File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 15690 15691 12.8 GIMPLE sequences 15692 ===================== 15693 15694 GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in 15695 `GENERIC'. They are used to chain statements together, and when used 15696 in conjunction with sequence iterators, provide a framework for 15697 iterating through statements. 15698 15699 GIMPLE sequences are of type struct `gimple_sequence', but are more 15700 commonly passed by reference to functions dealing with sequences. The 15701 type for a sequence pointer is `gimple_seq' which is the same as struct 15702 `gimple_sequence' *. When declaring a local sequence, you can define a 15703 local variable of type struct `gimple_sequence'. When declaring a 15704 sequence allocated on the garbage collected heap, use the function 15705 `gimple_seq_alloc' documented below. 15706 15707 There are convenience functions for iterating through sequences in the 15708 section entitled Sequence Iterators. 15709 15710 Below is a list of functions to manipulate and query sequences. 15711 15712 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 15713 g) 15714 Link a gimple statement to the end of the sequence *`SEQ' if `G' is 15715 not `NULL'. If *`SEQ' is `NULL', allocate a sequence before 15716 linking. 15717 15718 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 15719 gimple_seq src) 15720 Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is 15721 not `NULL'. If *`DEST' is `NULL', allocate a new sequence before 15722 appending. 15723 15724 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 15725 Perform a deep copy of sequence `SRC' and return the result. 15726 15727 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 15728 Reverse the order of the statements in the sequence `SEQ'. Return 15729 `SEQ'. 15730 15731 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 15732 Return the first statement in sequence `S'. 15733 15734 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 15735 Return the last statement in sequence `S'. 15736 15737 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 15738 last) 15739 Set the last statement in sequence `S' to the statement in `LAST'. 15740 15741 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 15742 first) 15743 Set the first statement in sequence `S' to the statement in 15744 `FIRST'. 15745 15746 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 15747 Initialize sequence `S' to an empty sequence. 15748 15749 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 15750 Allocate a new sequence in the garbage collected store and return 15751 it. 15752 15753 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 15754 src) 15755 Copy the sequence `SRC' into the sequence `DEST'. 15756 15757 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 15758 Return true if the sequence `S' is empty. 15759 15760 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 15761 Returns the sequence of statements in `BB'. 15762 15763 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 15764 Sets the sequence of statements in `BB' to `SEQ'. 15765 15766 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 15767 Determine whether `SEQ' contains exactly one statement. 15768 15769 15770 File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 15771 15772 12.9 Sequence iterators 15773 ======================= 15774 15775 Sequence iterators are convenience constructs for iterating through 15776 statements in a sequence. Given a sequence `SEQ', here is a typical 15777 use of gimple sequence iterators: 15778 15779 gimple_stmt_iterator gsi; 15780 15781 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 15782 { 15783 gimple g = gsi_stmt (gsi); 15784 /* Do something with gimple statement `G'. */ 15785 } 15786 15787 Backward iterations are possible: 15788 15789 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 15790 15791 Forward and backward iterations on basic blocks are possible with 15792 `gsi_start_bb' and `gsi_last_bb'. 15793 15794 In the documentation below we sometimes refer to enum 15795 `gsi_iterator_update'. The valid options for this enumeration are: 15796 15797 * `GSI_NEW_STMT' Only valid when a single statement is added. Move 15798 the iterator to it. 15799 15800 * `GSI_SAME_STMT' Leave the iterator at the same statement. 15801 15802 * `GSI_CONTINUE_LINKING' Move iterator to whatever position is 15803 suitable for linking other statements in the same direction. 15804 15805 Below is a list of the functions used to manipulate and use statement 15806 iterators. 15807 15808 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 15809 Return a new iterator pointing to the sequence `SEQ''s first 15810 statement. If `SEQ' is empty, the iterator's basic block is 15811 `NULL'. Use `gsi_start_bb' instead when the iterator needs to 15812 always have the correct basic block set. 15813 15814 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 15815 Return a new iterator pointing to the first statement in basic 15816 block `BB'. 15817 15818 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 15819 Return a new iterator initially pointing to the last statement of 15820 sequence `SEQ'. If `SEQ' is empty, the iterator's basic block is 15821 `NULL'. Use `gsi_last_bb' instead when the iterator needs to 15822 always have the correct basic block set. 15823 15824 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 15825 Return a new iterator pointing to the last statement in basic 15826 block `BB'. 15827 15828 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 15829 Return `TRUE' if at the end of `I'. 15830 15831 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 15832 Return `TRUE' if we're one statement before the end of `I'. 15833 15834 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 15835 Advance the iterator to the next gimple statement. 15836 15837 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 15838 Advance the iterator to the previous gimple statement. 15839 15840 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 15841 Return the current stmt. 15842 15843 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 15844 bb) 15845 Return a block statement iterator that points to the first 15846 non-label statement in block `BB'. 15847 15848 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i) 15849 Return a pointer to the current stmt. 15850 15851 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 15852 Return the basic block associated with this iterator. 15853 15854 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 15855 Return the sequence associated with this iterator. 15856 15857 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 15858 remove_eh_info) 15859 Remove the current stmt from the sequence. The iterator is 15860 updated to point to the next statement. When `REMOVE_EH_INFO' is 15861 true we remove the statement pointed to by iterator `I' from the 15862 `EH' tables. Otherwise we do not modify the `EH' tables. 15863 Generally, `REMOVE_EH_INFO' should be true when the statement is 15864 going to be removed from the `IL' and not reinserted elsewhere. 15865 15866 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 15867 gimple_seq seq, enum gsi_iterator_update mode) 15868 Links the sequence of statements `SEQ' before the statement pointed 15869 by iterator `I'. `MODE' indicates what to do with the iterator 15870 after insertion (see `enum gsi_iterator_update' above). 15871 15872 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 15873 gimple g, enum gsi_iterator_update mode) 15874 Links statement `G' before the statement pointed-to by iterator 15875 `I'. Updates iterator `I' according to `MODE'. 15876 15877 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 15878 gimple_seq seq, enum gsi_iterator_update mode) 15879 Links sequence `SEQ' after the statement pointed-to by iterator 15880 `I'. `MODE' is as in `gsi_insert_after'. 15881 15882 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 15883 gimple g, enum gsi_iterator_update mode) 15884 Links statement `G' after the statement pointed-to by iterator `I'. 15885 `MODE' is as in `gsi_insert_after'. 15886 15887 -- GIMPLE function: gimple_seq gsi_split_seq_after 15888 (gimple_stmt_iterator i) 15889 Move all statements in the sequence after `I' to a new sequence. 15890 Return this new sequence. 15891 15892 -- GIMPLE function: gimple_seq gsi_split_seq_before 15893 (gimple_stmt_iterator *i) 15894 Move all statements in the sequence before `I' to a new sequence. 15895 Return this new sequence. 15896 15897 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 15898 stmt, bool update_eh_info) 15899 Replace the statement pointed-to by `I' to `STMT'. If 15900 `UPDATE_EH_INFO' is true, the exception handling information of 15901 the original statement is moved to the new statement. 15902 15903 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 15904 gimple stmt, enum gsi_iterator_update mode) 15905 Insert statement `STMT' before the statement pointed-to by iterator 15906 `I', update `STMT''s basic block and scan it for new operands. 15907 `MODE' specifies how to update iterator `I' after insertion (see 15908 enum `gsi_iterator_update'). 15909 15910 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 15911 *i, gimple_seq seq, enum gsi_iterator_update mode) 15912 Like `gsi_insert_before', but for all the statements in `SEQ'. 15913 15914 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 15915 gimple stmt, enum gsi_iterator_update mode) 15916 Insert statement `STMT' after the statement pointed-to by iterator 15917 `I', update `STMT''s basic block and scan it for new operands. 15918 `MODE' specifies how to update iterator `I' after insertion (see 15919 enum `gsi_iterator_update'). 15920 15921 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator 15922 *i, gimple_seq seq, enum gsi_iterator_update mode) 15923 Like `gsi_insert_after', but for all the statements in `SEQ'. 15924 15925 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 15926 Finds iterator for `STMT'. 15927 15928 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 15929 gimple_stmt_iterator *to) 15930 Move the statement at `FROM' so it comes right after the statement 15931 at `TO'. 15932 15933 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 15934 gimple_stmt_iterator *to) 15935 Move the statement at `FROM' so it comes right before the statement 15936 at `TO'. 15937 15938 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 15939 *from, basic_block bb) 15940 Move the statement at `FROM' to the end of basic block `BB'. 15941 15942 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 15943 Add `STMT' to the pending list of edge `E'. No actual insertion is 15944 made until a call to `gsi_commit_edge_inserts'() is made. 15945 15946 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 15947 seq) 15948 Add the sequence of statements in `SEQ' to the pending list of edge 15949 `E'. No actual insertion is made until a call to 15950 `gsi_commit_edge_inserts'() is made. 15951 15952 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 15953 gimple stmt) 15954 Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'. If a 15955 new block has to be created, it is returned. 15956 15957 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 15958 basic_block *new_bb) 15959 Commit insertions pending at edge `E'. If a new block is created, 15960 set `NEW_BB' to this block, otherwise set it to `NULL'. 15961 15962 -- GIMPLE function: void gsi_commit_edge_inserts (void) 15963 This routine will commit all pending edge insertions, creating any 15964 new basic blocks which are necessary. 15965 15966 15967 File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 15968 15969 12.10 Adding a new GIMPLE statement code 15970 ======================================== 15971 15972 The first step in adding a new GIMPLE statement code, is modifying the 15973 file `gimple.def', which contains all the GIMPLE codes. Then you must 15974 add a corresponding structure, and an entry in `union 15975 gimple_statement_d', both of which are located in `gimple.h'. This in 15976 turn, will require you to add a corresponding `GTY' tag in 15977 `gsstruct.def', and code to handle this tag in `gss_for_code' which is 15978 located in `gimple.c'. 15979 15980 In order for the garbage collector to know the size of the structure 15981 you created in `gimple.h', you need to add a case to handle your new 15982 GIMPLE statement in `gimple_size' which is located in `gimple.c'. 15983 15984 You will probably want to create a function to build the new gimple 15985 statement in `gimple.c'. The function should be called 15986 `gimple_build_NEW-TUPLE-NAME', and should return the new tuple of type 15987 gimple. 15988 15989 If your new statement requires accessors for any members or operands 15990 it may have, put simple inline accessors in `gimple.h' and any 15991 non-trivial accessors in `gimple.c' with a corresponding prototype in 15992 `gimple.h'. 15993 15994 15995 File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 15996 15997 12.11 Statement and operand traversals 15998 ====================================== 15999 16000 There are two functions available for walking statements and sequences: 16001 `walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third 16002 function for walking the operands in a statement: `walk_gimple_op'. 16003 16004 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 16005 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 16006 walk_stmt_info *wi) 16007 This function is used to walk the current statement in `GSI', 16008 optionally using traversal state stored in `WI'. If `WI' is 16009 `NULL', no state is kept during the traversal. 16010 16011 The callback `CALLBACK_STMT' is called. If `CALLBACK_STMT' returns 16012 true, it means that the callback function has handled all the 16013 operands of the statement and it is not necessary to walk its 16014 operands. 16015 16016 If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is 16017 called on each operand of the statement via `walk_gimple_op'. If 16018 `walk_gimple_op' returns non-`NULL' for any operand, the remaining 16019 operands are not scanned. 16020 16021 The return value is that returned by the last call to 16022 `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified. 16023 16024 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 16025 callback_op, struct walk_stmt_info *wi) 16026 Use this function to walk the operands of statement `STMT'. Every 16027 operand is walked via `walk_tree' with optional state information 16028 in `WI'. 16029 16030 `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'. 16031 Additional parameters to `walk_tree' must be stored in `WI'. For 16032 each operand `OP', `walk_tree' is called as: 16033 16034 walk_tree (&`OP', `CALLBACK_OP', `WI', `PSET') 16035 16036 If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining 16037 operands are not scanned. The return value is that returned by 16038 the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is 16039 specified. 16040 16041 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 16042 callback_stmt, walk_tree_fn callback_op, struct 16043 walk_stmt_info *wi) 16044 This function walks all the statements in the sequence `SEQ' 16045 calling `walk_gimple_stmt' on each one. `WI' is as in 16046 `walk_gimple_stmt'. If `walk_gimple_stmt' returns non-`NULL', the 16047 walk is stopped and the value returned. Otherwise, all the 16048 statements are walked and `NULL_TREE' returned. 16049 16050 16051 File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top 16052 16053 13 Analysis and Optimization of GIMPLE tuples 16054 ********************************************* 16055 16056 GCC uses three main intermediate languages to represent the program 16057 during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 16058 language-independent representation generated by each front end. It is 16059 used to serve as an interface between the parser and optimizer. 16060 GENERIC is a common representation that is able to represent programs 16061 written in all the languages supported by GCC. 16062 16063 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 16064 target and language independent optimizations (e.g., inlining, constant 16065 propagation, tail call elimination, redundancy elimination, etc). Much 16066 like GENERIC, GIMPLE is a language independent, tree based 16067 representation. However, it differs from GENERIC in that the GIMPLE 16068 grammar is more restrictive: expressions contain no more than 3 16069 operands (except function calls), it has no control flow structures and 16070 expressions with side-effects are only allowed on the right hand side 16071 of assignments. See the chapter describing GENERIC and GIMPLE for more 16072 details. 16073 16074 This chapter describes the data structures and functions used in the 16075 GIMPLE optimizers (also known as "tree optimizers" or "middle end"). 16076 In particular, it focuses on all the macros, data structures, functions 16077 and programming constructs needed to implement optimization passes for 16078 GIMPLE. 16079 16080 * Menu: 16081 16082 * Annotations:: Attributes for variables. 16083 * SSA Operands:: SSA names referenced by GIMPLE statements. 16084 * SSA:: Static Single Assignment representation. 16085 * Alias analysis:: Representing aliased loads and stores. 16086 * Memory model:: Memory model used by the middle-end. 16087 16088 16089 File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 16090 16091 13.1 Annotations 16092 ================ 16093 16094 The optimizers need to associate attributes with variables during the 16095 optimization process. For instance, we need to know whether a variable 16096 has aliases. All these attributes are stored in data structures called 16097 annotations which are then linked to the field `ann' in `struct 16098 tree_common'. 16099 16100 Presently, we define annotations for variables (`var_ann_t'). 16101 Annotations are defined and documented in `tree-flow.h'. 16102 16103 16104 File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 16105 16106 13.2 SSA Operands 16107 ================= 16108 16109 Almost every GIMPLE statement will contain a reference to a variable or 16110 memory location. Since statements come in different shapes and sizes, 16111 their operands are going to be located at various spots inside the 16112 statement's tree. To facilitate access to the statement's operands, 16113 they are organized into lists associated inside each statement's 16114 annotation. Each element in an operand list is a pointer to a 16115 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node. This provides a very 16116 convenient way of examining and replacing operands. 16117 16118 Data flow analysis and optimization is done on all tree nodes 16119 representing variables. Any node for which `SSA_VAR_P' returns nonzero 16120 is considered when scanning statement operands. However, not all 16121 `SSA_VAR_P' variables are processed in the same way. For the purposes 16122 of optimization, we need to distinguish between references to local 16123 scalar variables and references to globals, statics, structures, 16124 arrays, aliased variables, etc. The reason is simple, the compiler can 16125 gather complete data flow information for a local scalar. On the other 16126 hand, a global variable may be modified by a function call, it may not 16127 be possible to keep track of all the elements of an array or the fields 16128 of a structure, etc. 16129 16130 The operand scanner gathers two kinds of operands: "real" and 16131 "virtual". An operand for which `is_gimple_reg' returns true is 16132 considered real, otherwise it is a virtual operand. We also 16133 distinguish between uses and definitions. An operand is used if its 16134 value is loaded by the statement (e.g., the operand at the RHS of an 16135 assignment). If the statement assigns a new value to the operand, the 16136 operand is considered a definition (e.g., the operand at the LHS of an 16137 assignment). 16138 16139 Virtual and real operands also have very different data flow 16140 properties. Real operands are unambiguous references to the full 16141 object that they represent. For instance, given 16142 16143 { 16144 int a, b; 16145 a = b 16146 } 16147 16148 Since `a' and `b' are non-aliased locals, the statement `a = b' will 16149 have one real definition and one real use because variable `a' is 16150 completely modified with the contents of variable `b'. Real definition 16151 are also known as "killing definitions". Similarly, the use of `b' 16152 reads all its bits. 16153 16154 In contrast, virtual operands are used with variables that can have a 16155 partial or ambiguous reference. This includes structures, arrays, 16156 globals, and aliased variables. In these cases, we have two types of 16157 definitions. For globals, structures, and arrays, we can determine from 16158 a statement whether a variable of these types has a killing definition. 16159 If the variable does, then the statement is marked as having a "must 16160 definition" of that variable. However, if a statement is only defining 16161 a part of the variable (i.e. a field in a structure), or if we know 16162 that a statement might define the variable but we cannot say for sure, 16163 then we mark that statement as having a "may definition". For 16164 instance, given 16165 16166 { 16167 int a, b, *p; 16168 16169 if (...) 16170 p = &a; 16171 else 16172 p = &b; 16173 *p = 5; 16174 return *p; 16175 } 16176 16177 The assignment `*p = 5' may be a definition of `a' or `b'. If we 16178 cannot determine statically where `p' is pointing to at the time of the 16179 store operation, we create virtual definitions to mark that statement 16180 as a potential definition site for `a' and `b'. Memory loads are 16181 similarly marked with virtual use operands. Virtual operands are shown 16182 in tree dumps right before the statement that contains them. To 16183 request a tree dump with virtual operands, use the `-vops' option to 16184 `-fdump-tree': 16185 16186 { 16187 int a, b, *p; 16188 16189 if (...) 16190 p = &a; 16191 else 16192 p = &b; 16193 # a = VDEF <a> 16194 # b = VDEF <b> 16195 *p = 5; 16196 16197 # VUSE <a> 16198 # VUSE <b> 16199 return *p; 16200 } 16201 16202 Notice that `VDEF' operands have two copies of the referenced 16203 variable. This indicates that this is not a killing definition of that 16204 variable. In this case we refer to it as a "may definition" or 16205 "aliased store". The presence of the second copy of the variable in 16206 the `VDEF' operand will become important when the function is converted 16207 into SSA form. This will be used to link all the non-killing 16208 definitions to prevent optimizations from making incorrect assumptions 16209 about them. 16210 16211 Operands are updated as soon as the statement is finished via a call 16212 to `update_stmt'. If statement elements are changed via `SET_USE' or 16213 `SET_DEF', then no further action is required (i.e., those macros take 16214 care of updating the statement). If changes are made by manipulating 16215 the statement's tree directly, then a call must be made to 16216 `update_stmt' when complete. Calling one of the `bsi_insert' routines 16217 or `bsi_replace' performs an implicit call to `update_stmt'. 16218 16219 13.2.1 Operand Iterators And Access Routines 16220 -------------------------------------------- 16221 16222 Operands are collected by `tree-ssa-operands.c'. They are stored 16223 inside each statement's annotation and can be accessed through either 16224 the operand iterators or an access routine. 16225 16226 The following access routines are available for examining operands: 16227 16228 1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 16229 NULL unless there is exactly one operand matching the specified 16230 flags. If there is exactly one operand, the operand is returned 16231 as either a `tree', `def_operand_p', or `use_operand_p'. 16232 16233 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 16234 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 16235 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 16236 16237 2. `ZERO_SSA_OPERANDS': This macro returns true if there are no 16238 operands matching the specified flags. 16239 16240 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 16241 return; 16242 16243 3. `NUM_SSA_OPERANDS': This macro Returns the number of operands 16244 matching 'flags'. This actually executes a loop to perform the 16245 count, so only use this if it is really needed. 16246 16247 int count = NUM_SSA_OPERANDS (stmt, flags) 16248 16249 If you wish to iterate over some or all operands, use the 16250 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 16251 all the operands for a statement: 16252 16253 void 16254 print_ops (tree stmt) 16255 { 16256 ssa_op_iter; 16257 tree var; 16258 16259 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 16260 print_generic_expr (stderr, var, TDF_SLIM); 16261 } 16262 16263 How to choose the appropriate iterator: 16264 16265 1. Determine whether you are need to see the operand pointers, or 16266 just the trees, and choose the appropriate macro: 16267 16268 Need Macro: 16269 ---- ------- 16270 use_operand_p FOR_EACH_SSA_USE_OPERAND 16271 def_operand_p FOR_EACH_SSA_DEF_OPERAND 16272 tree FOR_EACH_SSA_TREE_OPERAND 16273 16274 2. You need to declare a variable of the type you are interested in, 16275 and an ssa_op_iter structure which serves as the loop controlling 16276 variable. 16277 16278 3. Determine which operands you wish to use, and specify the flags of 16279 those you are interested in. They are documented in 16280 `tree-ssa-operands.h': 16281 16282 #define SSA_OP_USE 0x01 /* Real USE operands. */ 16283 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 16284 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 16285 #define SSA_OP_VMAYUSE 0x08 /* USE portion of VDEFS. */ 16286 #define SSA_OP_VDEF 0x10 /* DEF portion of VDEFS. */ 16287 16288 /* These are commonly grouped operand flags. */ 16289 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) 16290 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 16291 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 16292 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 16293 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 16294 16295 So if you want to look at the use pointers for all the `USE' and 16296 `VUSE' operands, you would do something like: 16297 16298 use_operand_p use_p; 16299 ssa_op_iter iter; 16300 16301 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 16302 { 16303 process_use_ptr (use_p); 16304 } 16305 16306 The `TREE' macro is basically the same as the `USE' and `DEF' macros, 16307 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and 16308 `DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use 16309 and defs flags can be mixed. 16310 16311 tree var; 16312 ssa_op_iter iter; 16313 16314 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 16315 { 16316 print_generic_expr (stderr, var, TDF_SLIM); 16317 } 16318 16319 `VDEF's are broken into two flags, one for the `DEF' portion 16320 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE'). If all 16321 you want to look at are the `VDEF's together, there is a fourth 16322 iterator macro for this, which returns both a def_operand_p and a 16323 use_operand_p for each `VDEF' in the statement. Note that you don't 16324 need any flags for this one. 16325 16326 use_operand_p use_p; 16327 def_operand_p def_p; 16328 ssa_op_iter iter; 16329 16330 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) 16331 { 16332 my_code; 16333 } 16334 16335 There are many examples in the code as well, as well as the 16336 documentation in `tree-ssa-operands.h'. 16337 16338 There are also a couple of variants on the stmt iterators regarding PHI 16339 nodes. 16340 16341 `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND', 16342 except it works over `PHI' arguments instead of statement operands. 16343 16344 /* Look at every virtual PHI use. */ 16345 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 16346 { 16347 my_code; 16348 } 16349 16350 /* Look at every real PHI use. */ 16351 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 16352 my_code; 16353 16354 /* Look at every PHI use. */ 16355 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 16356 my_code; 16357 16358 `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 16359 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 16360 statement or a `PHI' node. These should be used when it is appropriate 16361 but they are not quite as efficient as the individual `FOR_EACH_PHI' 16362 and `FOR_EACH_SSA' routines. 16363 16364 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 16365 { 16366 my_code; 16367 } 16368 16369 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 16370 { 16371 my_code; 16372 } 16373 16374 13.2.2 Immediate Uses 16375 --------------------- 16376 16377 Immediate use information is now always available. Using the immediate 16378 use iterators, you may examine every use of any `SSA_NAME'. For 16379 instance, to change each use of `ssa_var' to `ssa_var2' and call 16380 fold_stmt on each stmt after that is done: 16381 16382 use_operand_p imm_use_p; 16383 imm_use_iterator iterator; 16384 tree ssa_var, stmt; 16385 16386 16387 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 16388 { 16389 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 16390 SET_USE (imm_use_p, ssa_var_2); 16391 fold_stmt (stmt); 16392 } 16393 16394 There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is 16395 used when the immediate uses are not changed, i.e., you are looking at 16396 the uses, but not setting them. 16397 16398 If they do get changed, then care must be taken that things are not 16399 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and 16400 `FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 16401 sanity of the use list by moving all the uses for a statement into a 16402 controlled position, and then iterating over those uses. Then the 16403 optimization can manipulate the stmt when all the uses have been 16404 processed. This is a little slower than the FAST version since it adds 16405 a placeholder element and must sort through the list a bit for each 16406 statement. This placeholder element must be also be removed if the 16407 loop is terminated early. The macro `BREAK_FROM_IMM_USE_SAFE' is 16408 provided to do this : 16409 16410 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 16411 { 16412 if (stmt == last_stmt) 16413 BREAK_FROM_SAFE_IMM_USE (iter); 16414 16415 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 16416 SET_USE (imm_use_p, ssa_var_2); 16417 fold_stmt (stmt); 16418 } 16419 16420 There are checks in `verify_ssa' which verify that the immediate use 16421 list is up to date, as well as checking that an optimization didn't 16422 break from the loop without using this macro. It is safe to simply 16423 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse. 16424 16425 Some useful functions and macros: 16426 1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of 16427 `ssa_var'. 16428 16429 2. `has_single_use (ssa_var)' : Returns true if there is only a 16430 single use of `ssa_var'. 16431 16432 3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 16433 Returns true if there is only a single use of `ssa_var', and also 16434 returns the use pointer and statement it occurs in, in the second 16435 and third parameters. 16436 16437 4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of 16438 `ssa_var'. It is better not to use this if possible since it simply 16439 utilizes a loop to count the uses. 16440 16441 5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI' 16442 node, return the index number for the use. An assert is triggered 16443 if the use isn't located in a `PHI' node. 16444 16445 6. `USE_STMT (use_p)' : Return the statement a use occurs in. 16446 16447 Note that uses are not put into an immediate use list until their 16448 statement is actually inserted into the instruction stream via a 16449 `bsi_*' routine. 16450 16451 It is also still possible to utilize lazy updating of statements, but 16452 this should be used only when absolutely required. Both alias analysis 16453 and the dominator optimizations currently do this. 16454 16455 When lazy updating is being used, the immediate use information is out 16456 of date and cannot be used reliably. Lazy updating is achieved by 16457 simply marking statements modified via calls to `mark_stmt_modified' 16458 instead of `update_stmt'. When lazy updating is no longer required, 16459 all the modified statements must have `update_stmt' called in order to 16460 bring them up to date. This must be done before the optimization is 16461 finished, or `verify_ssa' will trigger an abort. 16462 16463 This is done with a simple loop over the instruction stream: 16464 block_stmt_iterator bsi; 16465 basic_block bb; 16466 FOR_EACH_BB (bb) 16467 { 16468 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 16469 update_stmt_if_modified (bsi_stmt (bsi)); 16470 } 16471 16472 16473 File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 16474 16475 13.3 Static Single Assignment 16476 ============================= 16477 16478 Most of the tree optimizers rely on the data flow information provided 16479 by the Static Single Assignment (SSA) form. We implement the SSA form 16480 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 16481 Zadeck. Efficiently Computing Static Single Assignment Form and the 16482 Control Dependence Graph. ACM Transactions on Programming Languages 16483 and Systems, 13(4):451-490, October 1991'. 16484 16485 The SSA form is based on the premise that program variables are 16486 assigned in exactly one location in the program. Multiple assignments 16487 to the same variable create new versions of that variable. Naturally, 16488 actual programs are seldom in SSA form initially because variables tend 16489 to be assigned multiple times. The compiler modifies the program 16490 representation so that every time a variable is assigned in the code, a 16491 new version of the variable is created. Different versions of the same 16492 variable are distinguished by subscripting the variable name with its 16493 version number. Variables used in the right-hand side of expressions 16494 are renamed so that their version number matches that of the most 16495 recent assignment. 16496 16497 We represent variable versions using `SSA_NAME' nodes. The renaming 16498 process in `tree-ssa.c' wraps every real and virtual operand with an 16499 `SSA_NAME' node which contains the version number and the statement 16500 that created the `SSA_NAME'. Only definitions and virtual definitions 16501 may create new `SSA_NAME' nodes. 16502 16503 Sometimes, flow of control makes it impossible to determine the most 16504 recent version of a variable. In these cases, the compiler inserts an 16505 artificial definition for that variable called "PHI function" or "PHI 16506 node". This new definition merges all the incoming versions of the 16507 variable to create a new name for it. For instance, 16508 16509 if (...) 16510 a_1 = 5; 16511 else if (...) 16512 a_2 = 2; 16513 else 16514 a_3 = 13; 16515 16516 # a_4 = PHI <a_1, a_2, a_3> 16517 return a_4; 16518 16519 Since it is not possible to determine which of the three branches will 16520 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to 16521 use at the return statement. So, the SSA renamer creates a new version 16522 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'. 16523 Hence, PHI nodes mean "one of these operands. I don't know which". 16524 16525 The following macros can be used to examine PHI nodes 16526 16527 -- Macro: PHI_RESULT (PHI) 16528 Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 16529 16530 -- Macro: PHI_NUM_ARGS (PHI) 16531 Returns the number of arguments in PHI. This number is exactly 16532 the number of incoming edges to the basic block holding PHI. 16533 16534 -- Macro: PHI_ARG_ELT (PHI, I) 16535 Returns a tuple representing the Ith argument of PHI. Each 16536 element of this tuple contains an `SSA_NAME' VAR and the incoming 16537 edge through which VAR flows. 16538 16539 -- Macro: PHI_ARG_EDGE (PHI, I) 16540 Returns the incoming edge for the Ith argument of PHI. 16541 16542 -- Macro: PHI_ARG_DEF (PHI, I) 16543 Returns the `SSA_NAME' for the Ith argument of PHI. 16544 16545 13.3.1 Preserving the SSA form 16546 ------------------------------ 16547 16548 Some optimization passes make changes to the function that invalidate 16549 the SSA property. This can happen when a pass has added new symbols or 16550 changed the program so that variables that were previously aliased 16551 aren't anymore. Whenever something like this happens, the affected 16552 symbols must be renamed into SSA form again. Transformations that emit 16553 new code or replicate existing statements will also need to update the 16554 SSA form. 16555 16556 Since GCC implements two different SSA forms for register and virtual 16557 variables, keeping the SSA form up to date depends on whether you are 16558 updating register or virtual names. In both cases, the general idea 16559 behind incremental SSA updates is similar: when new SSA names are 16560 created, they typically are meant to replace other existing names in 16561 the program. 16562 16563 For instance, given the following code: 16564 16565 1 L0: 16566 2 x_1 = PHI (0, x_5) 16567 3 if (x_1 < 10) 16568 4 if (x_1 > 7) 16569 5 y_2 = 0 16570 6 else 16571 7 y_3 = x_1 + x_7 16572 8 endif 16573 9 x_5 = x_1 + 1 16574 10 goto L0; 16575 11 endif 16576 16577 Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8'). 16578 16579 1 L0: 16580 2 x_1 = PHI (0, x_5) 16581 3 if (x_1 < 10) 16582 4 x_10 = ... 16583 5 if (x_1 > 7) 16584 6 y_2 = 0 16585 7 else 16586 8 x_11 = ... 16587 9 y_3 = x_1 + x_7 16588 10 endif 16589 11 x_5 = x_1 + 1 16590 12 goto L0; 16591 13 endif 16592 16593 We want to replace all the uses of `x_1' with the new definitions of 16594 `x_10' and `x_11'. Note that the only uses that should be replaced are 16595 those at lines `5', `9' and `11'. Also, the use of `x_7' at line `9' 16596 should _not_ be replaced (this is why we cannot just mark symbol `x' for 16597 renaming). 16598 16599 Additionally, we may need to insert a PHI node at line `11' because 16600 that is a merge point for `x_10' and `x_11'. So the use of `x_1' at 16601 line `11' will be replaced with the new PHI node. The insertion of PHI 16602 nodes is optional. They are not strictly necessary to preserve the SSA 16603 form, and depending on what the caller inserted, they may not even be 16604 useful for the optimizers. 16605 16606 Updating the SSA form is a two step process. First, the pass has to 16607 identify which names need to be updated and/or which symbols need to be 16608 renamed into SSA form for the first time. When new names are 16609 introduced to replace existing names in the program, the mapping 16610 between the old and the new names are registered by calling 16611 `register_new_name_mapping' (note that if your pass creates new code by 16612 duplicating basic blocks, the call to `tree_duplicate_bb' will set up 16613 the necessary mappings automatically). 16614 16615 After the replacement mappings have been registered and new symbols 16616 marked for renaming, a call to `update_ssa' makes the registered 16617 changes. This can be done with an explicit call or by creating `TODO' 16618 flags in the `tree_opt_pass' structure for your pass. There are 16619 several `TODO' flags that control the behavior of `update_ssa': 16620 16621 * `TODO_update_ssa'. Update the SSA form inserting PHI nodes for 16622 newly exposed symbols and virtual names marked for updating. When 16623 updating real names, only insert PHI nodes for a real name `O_j' 16624 in blocks reached by all the new and old definitions for `O_j'. 16625 If the iterated dominance frontier for `O_j' is not pruned, we may 16626 end up inserting PHI nodes in blocks that have one or more edges 16627 with no incoming definition for `O_j'. This would lead to 16628 uninitialized warnings for `O_j''s symbol. 16629 16630 * `TODO_update_ssa_no_phi'. Update the SSA form without inserting 16631 any new PHI nodes at all. This is used by passes that have either 16632 inserted all the PHI nodes themselves or passes that need only to 16633 patch use-def and def-def chains for virtuals (e.g., DCE). 16634 16635 * `TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 16636 needed. No pruning of the IDF is done. This is used by passes 16637 that need the PHI nodes for `O_j' even if it means that some 16638 arguments will come from the default definition of `O_j''s symbol 16639 (e.g., `pass_linear_transform'). 16640 16641 WARNING: If you need to use this flag, chances are that your pass 16642 may be doing something wrong. Inserting PHI nodes for an old name 16643 where not all edges carry a new replacement may lead to silent 16644 codegen errors or spurious uninitialized warnings. 16645 16646 * `TODO_update_ssa_only_virtuals'. Passes that update the SSA form 16647 on their own may want to delegate the updating of virtual names to 16648 the generic updater. Since FUD chains are easier to maintain, 16649 this simplifies the work they need to do. NOTE: If this flag is 16650 used, any OLD->NEW mappings for real names are explicitly 16651 destroyed and only the symbols marked for renaming are processed. 16652 16653 13.3.2 Preserving the virtual SSA form 16654 -------------------------------------- 16655 16656 The virtual SSA form is harder to preserve than the non-virtual SSA form 16657 mainly because the set of virtual operands for a statement may change at 16658 what some would consider unexpected times. In general, statement 16659 modifications should be bracketed between calls to `push_stmt_changes' 16660 and `pop_stmt_changes'. For example, 16661 16662 munge_stmt (tree stmt) 16663 { 16664 push_stmt_changes (&stmt); 16665 ... rewrite STMT ... 16666 pop_stmt_changes (&stmt); 16667 } 16668 16669 The call to `push_stmt_changes' saves the current state of the 16670 statement operands and the call to `pop_stmt_changes' compares the 16671 saved state with the current one and does the appropriate symbol 16672 marking for the SSA renamer. 16673 16674 It is possible to modify several statements at a time, provided that 16675 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as 16676 when processing a stack of statements. 16677 16678 Additionally, if the pass discovers that it did not need to make 16679 changes to the statement after calling `push_stmt_changes', it can 16680 simply discard the topmost change buffer by calling 16681 `discard_stmt_changes'. This will avoid the expensive operand re-scan 16682 operation and the buffer comparison that determines if symbols need to 16683 be marked for renaming. 16684 16685 13.3.3 Examining `SSA_NAME' nodes 16686 --------------------------------- 16687 16688 The following macros can be used to examine `SSA_NAME' nodes 16689 16690 -- Macro: SSA_NAME_DEF_STMT (VAR) 16691 Returns the statement S that creates the `SSA_NAME' VAR. If S is 16692 an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it 16693 means that the first reference to this variable is a USE or a VUSE. 16694 16695 -- Macro: SSA_NAME_VERSION (VAR) 16696 Returns the version number of the `SSA_NAME' object VAR. 16697 16698 13.3.4 Walking use-def chains 16699 ----------------------------- 16700 16701 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA) 16702 Walks use-def chains starting at the `SSA_NAME' node VAR. Calls 16703 function FN at each reaching definition found. Function FN takes 16704 three arguments: VAR, its defining statement (DEF_STMT) and a 16705 generic pointer to whatever state information that FN may want to 16706 maintain (DATA). Function FN is able to stop the walk by 16707 returning `true', otherwise in order to continue the walk, FN 16708 should return `false'. 16709 16710 Note, that if DEF_STMT is a `PHI' node, the semantics are slightly 16711 different. For each argument ARG of the PHI node, this function 16712 will: 16713 16714 1. Walk the use-def chains for ARG. 16715 16716 2. Call `FN (ARG, PHI, DATA)'. 16717 16718 Note how the first argument to FN is no longer the original 16719 variable VAR, but the PHI argument currently being examined. If 16720 FN wants to get at VAR, it should call `PHI_RESULT' (PHI). 16721 16722 13.3.5 Walking the dominator tree 16723 --------------------------------- 16724 16725 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 16726 This function walks the dominator tree for the current CFG calling 16727 a set of callback functions defined in STRUCT DOM_WALK_DATA in 16728 `domwalk.h'. The call back functions you need to define give you 16729 hooks to execute custom code at various points during traversal: 16730 16731 1. Once to initialize any local data needed while processing BB 16732 and its children. This local data is pushed into an internal 16733 stack which is automatically pushed and popped as the walker 16734 traverses the dominator tree. 16735 16736 2. Once before traversing all the statements in the BB. 16737 16738 3. Once for every statement inside BB. 16739 16740 4. Once after traversing all the statements and before recursing 16741 into BB's dominator children. 16742 16743 5. It then recurses into all the dominator children of BB. 16744 16745 6. After recursing into all the dominator children of BB it can, 16746 optionally, traverse every statement in BB again (i.e., 16747 repeating steps 2 and 3). 16748 16749 7. Once after walking the statements in BB and BB's dominator 16750 children. At this stage, the block local data stack is 16751 popped. 16752 16753 16754 File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 16755 16756 13.4 Alias analysis 16757 =================== 16758 16759 Alias analysis in GIMPLE SSA form consists of two pieces. First the 16760 virtual SSA web ties conflicting memory accesses and provides a SSA 16761 use-def chain and SSA immediate-use chains for walking possibly 16762 dependent memory accesses. Second an alias-oracle can be queried to 16763 disambiguate explicit and implicit memory references. 16764 16765 1. Memory SSA form. 16766 16767 All statements that may use memory have exactly one accompanied 16768 use of a virtual SSA name that represents the state of memory at 16769 the given point in the IL. 16770 16771 All statements that may define memory have exactly one accompanied 16772 definition of a virtual SSA name using the previous state of memory 16773 and defining the new state of memory after the given point in the 16774 IL. 16775 16776 int i; 16777 int foo (void) 16778 { 16779 # .MEM_3 = VDEF <.MEM_2(D)> 16780 i = 1; 16781 # VUSE <.MEM_3> 16782 return i; 16783 } 16784 16785 The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'. 16786 The store to the global variable `i' defines `.MEM_3' invalidating 16787 `.MEM_2(D)'. The load from `i' uses that new state `.MEM_3'. 16788 16789 The virtual SSA web serves as constraints to SSA optimizers 16790 preventing illegitimate code-motion and optimization. It also 16791 provides a way to walk related memory statements. 16792 16793 2. Points-to and escape analysis. 16794 16795 Points-to analysis builds a set of constraints from the GIMPLE SSA 16796 IL representing all pointer operations and facts we do or do not 16797 know about pointers. Solving this set of constraints yields a 16798 conservatively correct solution for each pointer variable in the 16799 program (though we are only interested in SSA name pointers) as to 16800 what it may possibly point to. 16801 16802 This points-to solution for a given SSA name pointer is stored in 16803 the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record. 16804 The following accessor functions are available: 16805 16806 * `pt_solution_includes' 16807 16808 * `pt_solutions_intersect' 16809 16810 Points-to analysis also computes the solution for two special set 16811 of pointers, `ESCAPED' and `CALLUSED'. Those represent all memory 16812 that has escaped the scope of analysis or that is used by pure or 16813 nested const calls. 16814 16815 3. Type-based alias analysis 16816 16817 Type-based alias analysis is frontend dependent though generic 16818 support is provided by the middle-end in `alias.c'. TBAA code is 16819 used by both tree optimizers and RTL optimizers. 16820 16821 Every language that wishes to perform language-specific alias 16822 analysis should define a function that computes, given a `tree' 16823 node, an alias set for the node. Nodes in different alias sets 16824 are not allowed to alias. For an example, see the C front-end 16825 function `c_get_alias_set'. 16826 16827 4. Tree alias-oracle 16828 16829 The tree alias-oracle provides means to disambiguate two memory 16830 references and memory references against statements. The following 16831 queries are available: 16832 16833 * `refs_may_alias_p' 16834 16835 * `ref_maybe_used_by_stmt_p' 16836 16837 * `stmt_may_clobber_ref_p' 16838 16839 In addition to those two kind of statement walkers are available 16840 walking statements related to a reference ref. 16841 `walk_non_aliased_vuses' walks over dominating memory defining 16842 statements and calls back if the statement does not clobber ref 16843 providing the non-aliased VUSE. The walk stops at the first 16844 clobbering statement or if asked to. `walk_aliased_vdefs' walks 16845 over dominating memory defining statements and calls back on each 16846 statement clobbering ref providing its aliasing VDEF. The walk 16847 stops if asked to. 16848 16849 16850 16851 File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 16852 16853 13.5 Memory model 16854 ================= 16855 16856 The memory model used by the middle-end models that of the C/C++ 16857 languages. The middle-end has the notion of an effective type of a 16858 memory region which is used for type-based alias analysis. 16859 16860 The following is a refinement of ISO C99 6.5/6, clarifying the block 16861 copy case to follow common sense and extending the concept of a dynamic 16862 effective type to objects with a declared type as required for C++. 16863 16864 The effective type of an object for an access to its stored value is 16865 the declared type of the object or the effective type determined by 16866 a previous store to it. If a value is stored into an object through 16867 an lvalue having a type that is not a character type, then the 16868 type of the lvalue becomes the effective type of the object for that 16869 access and for subsequent accesses that do not modify the stored value. 16870 If a value is copied into an object using `memcpy' or `memmove', 16871 or is copied as an array of character type, then the effective type 16872 of the modified object for that access and for subsequent accesses that 16873 do not modify the value is undetermined. For all other accesses to an 16874 object, the effective type of the object is simply the type of the 16875 lvalue used for the access. 16876 16877 16878 File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top 16879 16880 14 Analysis and Representation of Loops 16881 *************************************** 16882 16883 GCC provides extensive infrastructure for work with natural loops, i.e., 16884 strongly connected components of CFG with only one entry block. This 16885 chapter describes representation of loops in GCC, both on GIMPLE and in 16886 RTL, as well as the interfaces to loop-related analyses (induction 16887 variable analysis and number of iterations analysis). 16888 16889 * Menu: 16890 16891 * Loop representation:: Representation and analysis of loops. 16892 * Loop querying:: Getting information about loops. 16893 * Loop manipulation:: Loop manipulation functions. 16894 * LCSSA:: Loop-closed SSA form. 16895 * Scalar evolutions:: Induction variables on GIMPLE. 16896 * loop-iv:: Induction variables on RTL. 16897 * Number of iterations:: Number of iterations analysis. 16898 * Dependency analysis:: Data dependency analysis. 16899 * Lambda:: Linear loop transformations framework. 16900 * Omega:: A solver for linear programming problems. 16901 16902 16903 File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 16904 16905 14.1 Loop representation 16906 ======================== 16907 16908 This chapter describes the representation of loops in GCC, and functions 16909 that can be used to build, modify and analyze this representation. Most 16910 of the interfaces and data structures are declared in `cfgloop.h'. At 16911 the moment, loop structures are analyzed and this information is 16912 updated only by the optimization passes that deal with loops, but some 16913 efforts are being made to make it available throughout most of the 16914 optimization passes. 16915 16916 In general, a natural loop has one entry block (header) and possibly 16917 several back edges (latches) leading to the header from the inside of 16918 the loop. Loops with several latches may appear if several loops share 16919 a single header, or if there is a branching in the middle of the loop. 16920 The representation of loops in GCC however allows only loops with a 16921 single latch. During loop analysis, headers of such loops are split and 16922 forwarder blocks are created in order to disambiguate their structures. 16923 Heuristic based on profile information and structure of the induction 16924 variables in the loops is used to determine whether the latches 16925 correspond to sub-loops or to control flow in a single loop. This means 16926 that the analysis sometimes changes the CFG, and if you run it in the 16927 middle of an optimization pass, you must be able to deal with the new 16928 blocks. You may avoid CFG changes by passing 16929 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 16930 however that most other loop manipulation functions will not work 16931 correctly for loops with multiple latch edges (the functions that only 16932 query membership of blocks to loops and subloop relationships, or 16933 enumerate and test loop exits, can be expected to work). 16934 16935 Body of the loop is the set of blocks that are dominated by its header, 16936 and reachable from its latch against the direction of edges in CFG. The 16937 loops are organized in a containment hierarchy (tree) such that all the 16938 loops immediately contained inside loop L are the children of L in the 16939 tree. This tree is represented by the `struct loops' structure. The 16940 root of this tree is a fake loop that contains all blocks in the 16941 function. Each of the loops is represented in a `struct loop' 16942 structure. Each loop is assigned an index (`num' field of the `struct 16943 loop' structure), and the pointer to the loop is stored in the 16944 corresponding field of the `larray' vector in the loops structure. The 16945 indices do not have to be continuous, there may be empty (`NULL') 16946 entries in the `larray' created by deleting loops. Also, there is no 16947 guarantee on the relative order of a loop and its subloops in the 16948 numbering. The index of a loop never changes. 16949 16950 The entries of the `larray' field should not be accessed directly. 16951 The function `get_loop' returns the loop description for a loop with 16952 the given index. `number_of_loops' function returns number of loops in 16953 the function. To traverse all loops, use `FOR_EACH_LOOP' macro. The 16954 `flags' argument of the macro is used to determine the direction of 16955 traversal and the set of loops visited. Each loop is guaranteed to be 16956 visited exactly once, regardless of the changes to the loop tree, and 16957 the loops may be removed during the traversal. The newly created loops 16958 are never traversed, if they need to be visited, this must be done 16959 separately after their creation. The `FOR_EACH_LOOP' macro allocates 16960 temporary variables. If the `FOR_EACH_LOOP' loop were ended using 16961 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro 16962 must be used instead. 16963 16964 Each basic block contains the reference to the innermost loop it 16965 belongs to (`loop_father'). For this reason, it is only possible to 16966 have one `struct loops' structure initialized at the same time for each 16967 CFG. The global variable `current_loops' contains the `struct loops' 16968 structure. Many of the loop manipulation functions assume that 16969 dominance information is up-to-date. 16970 16971 The loops are analyzed through `loop_optimizer_init' function. The 16972 argument of this function is a set of flags represented in an integer 16973 bitmask. These flags specify what other properties of the loop 16974 structures should be calculated/enforced and preserved later: 16975 16976 * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 16977 to CFG will be performed in the loop analysis, in particular, 16978 loops with multiple latch edges will not be disambiguated. If a 16979 loop has multiple latches, its latch block is set to NULL. Most of 16980 the loop manipulation functions will not work for loops in this 16981 shape. No other flags that require CFG changes can be passed to 16982 loop_optimizer_init. 16983 16984 * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a 16985 way that each loop has only one entry edge, and additionally, the 16986 source block of this entry edge has only one successor. This 16987 creates a natural place where the code can be moved out of the 16988 loop, and ensures that the entry edge of the loop leads from its 16989 immediate super-loop. 16990 16991 * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 16992 the latch block of each loop to have only one successor. This 16993 ensures that the latch of the loop does not belong to any of its 16994 sub-loops, and makes manipulation with the loops significantly 16995 easier. Most of the loop manipulation functions assume that the 16996 loops are in this shape. Note that with this flag, the "normal" 16997 loop without any control flow inside and with one exit consists of 16998 two basic blocks. 16999 17000 * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 17001 the strongly connected components that are not natural loops (have 17002 more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP' 17003 and `EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 17004 and edges that belong to natural loops that are in such an 17005 irreducible region (but it is set for the entry and exit edges of 17006 such a loop, if they lead to/from this region). 17007 17008 * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 17009 updated for each loop. This makes some functions (e.g., 17010 `get_loop_exit_edges') more efficient. Some functions (e.g., 17011 `single_exit') can be used only if the lists of exits are recorded. 17012 17013 These properties may also be computed/enforced later, using functions 17014 `create_preheaders', `force_single_succ_latches', 17015 `mark_irreducible_loops' and `record_loop_exits'. 17016 17017 The memory occupied by the loops structures should be freed with 17018 `loop_optimizer_finalize' function. 17019 17020 The CFG manipulation functions in general do not update loop 17021 structures. Specialized versions that additionally do so are provided 17022 for the most common tasks. On GIMPLE, `cleanup_tree_cfg_loop' function 17023 can be used to cleanup CFG while updating the loops structures if 17024 `current_loops' is set. 17025 17026 17027 File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 17028 17029 14.2 Loop querying 17030 ================== 17031 17032 The functions to query the information about loops are declared in 17033 `cfgloop.h'. Some of the information can be taken directly from the 17034 structures. `loop_father' field of each basic block contains the 17035 innermost loop to that the block belongs. The most useful fields of 17036 loop structure (that are kept up-to-date at all times) are: 17037 17038 * `header', `latch': Header and latch basic blocks of the loop. 17039 17040 * `num_nodes': Number of basic blocks in the loop (including the 17041 basic blocks of the sub-loops). 17042 17043 * `depth': The depth of the loop in the loops tree, i.e., the number 17044 of super-loops of the loop. 17045 17046 * `outer', `inner', `next': The super-loop, the first sub-loop, and 17047 the sibling of the loop in the loops tree. 17048 17049 There are other fields in the loop structures, many of them used only 17050 by some of the passes, or not updated during CFG changes; in general, 17051 they should not be accessed directly. 17052 17053 The most important functions to query loop structures are: 17054 17055 * `flow_loops_dump': Dumps the information about loops to a file. 17056 17057 * `verify_loop_structure': Checks consistency of the loop structures. 17058 17059 * `loop_latch_edge': Returns the latch edge of a loop. 17060 17061 * `loop_preheader_edge': If loops have preheaders, returns the 17062 preheader edge of a loop. 17063 17064 * `flow_loop_nested_p': Tests whether loop is a sub-loop of another 17065 loop. 17066 17067 * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a 17068 loop (including its sub-loops). 17069 17070 * `find_common_loop': Finds the common super-loop of two loops. 17071 17072 * `superloop_at_depth': Returns the super-loop of a loop with the 17073 given depth. 17074 17075 * `tree_num_loop_insns', `num_loop_insns': Estimates the number of 17076 insns in the loop, on GIMPLE and on RTL. 17077 17078 * `loop_exit_edge_p': Tests whether edge is an exit from a loop. 17079 17080 * `mark_loop_exit_edges': Marks all exit edges of all loops with 17081 `EDGE_LOOP_EXIT' flag. 17082 17083 * `get_loop_body', `get_loop_body_in_dom_order', 17084 `get_loop_body_in_bfs_order': Enumerates the basic blocks in the 17085 loop in depth-first search order in reversed CFG, ordered by 17086 dominance relation, and breath-first search order, respectively. 17087 17088 * `single_exit': Returns the single exit edge of the loop, or `NULL' 17089 if the loop has more than one exit. You can only use this 17090 function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 17091 17092 * `get_loop_exit_edges': Enumerates the exit edges of a loop. 17093 17094 * `just_once_each_iteration_p': Returns true if the basic block is 17095 executed exactly once during each iteration of a loop (that is, it 17096 does not belong to a sub-loop, and it dominates the latch of the 17097 loop). 17098 17099 17100 File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 17101 17102 14.3 Loop manipulation 17103 ====================== 17104 17105 The loops tree can be manipulated using the following functions: 17106 17107 * `flow_loop_tree_node_add': Adds a node to the tree. 17108 17109 * `flow_loop_tree_node_remove': Removes a node from the tree. 17110 17111 * `add_bb_to_loop': Adds a basic block to a loop. 17112 17113 * `remove_bb_from_loops': Removes a basic block from loops. 17114 17115 Most low-level CFG functions update loops automatically. The following 17116 functions handle some more complicated cases of CFG manipulations: 17117 17118 * `remove_path': Removes an edge and all blocks it dominates. 17119 17120 * `split_loop_exit_edge': Splits exit edge of the loop, ensuring 17121 that PHI node arguments remain in the loop (this ensures that 17122 loop-closed SSA form is preserved). Only useful on GIMPLE. 17123 17124 Finally, there are some higher-level loop transformations implemented. 17125 While some of them are written so that they should work on non-innermost 17126 loops, they are mostly untested in that case, and at the moment, they 17127 are only reliable for the innermost loops: 17128 17129 * `create_iv': Creates a new induction variable. Only works on 17130 GIMPLE. `standard_iv_increment_position' can be used to find a 17131 suitable place for the iv increment. 17132 17133 * `duplicate_loop_to_header_edge', 17134 `tree_duplicate_loop_to_header_edge': These functions (on RTL and 17135 on GIMPLE) duplicate the body of the loop prescribed number of 17136 times on one of the edges entering loop header, thus performing 17137 either loop unrolling or loop peeling. `can_duplicate_loop_p' 17138 (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated 17139 loop. 17140 17141 * `loop_version', `tree_ssa_loop_version': These function create a 17142 copy of a loop, and a branch before them that selects one of them 17143 depending on the prescribed condition. This is useful for 17144 optimizations that need to verify some assumptions in runtime (one 17145 of the copies of the loop is usually left unchanged, while the 17146 other one is transformed in some way). 17147 17148 * `tree_unroll_loop': Unrolls the loop, including peeling the extra 17149 iterations to make the number of iterations divisible by unroll 17150 factor, updating the exit condition, and removing the exits that 17151 now cannot be taken. Works only on GIMPLE. 17152 17153 17154 File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 17155 17156 14.4 Loop-closed SSA form 17157 ========================= 17158 17159 Throughout the loop optimizations on tree level, one extra condition is 17160 enforced on the SSA form: No SSA name is used outside of the loop in 17161 that it is defined. The SSA form satisfying this condition is called 17162 "loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 17163 created at the exits of the loops for the SSA names that are used 17164 outside of them. Only the real operands (not virtual SSA names) are 17165 held in LCSSA, in order to save memory. 17166 17167 There are various benefits of LCSSA: 17168 17169 * Many optimizations (value range analysis, final value replacement) 17170 are interested in the values that are defined in the loop and used 17171 outside of it, i.e., exactly those for that we create new PHI 17172 nodes. 17173 17174 * In induction variable analysis, it is not necessary to specify the 17175 loop in that the analysis should be performed - the scalar 17176 evolution analysis always returns the results with respect to the 17177 loop in that the SSA name is defined. 17178 17179 * It makes updating of SSA form during loop transformations simpler. 17180 Without LCSSA, operations like loop unrolling may force creation 17181 of PHI nodes arbitrarily far from the loop, while in LCSSA, the 17182 SSA form can be updated locally. However, since we only keep real 17183 operands in LCSSA, we cannot use this advantage (we could have 17184 local updating of real operands, but it is not much more efficient 17185 than to use generic SSA form updating for it as well; the amount 17186 of changes to SSA is the same). 17187 17188 However, it also means LCSSA must be updated. This is usually 17189 straightforward, unless you create a new value in loop and use it 17190 outside, or unless you manipulate loop exit edges (functions are 17191 provided to make these manipulations simple). 17192 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, 17193 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is 17194 preserved. 17195 17196 17197 File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 17198 17199 14.5 Scalar evolutions 17200 ====================== 17201 17202 Scalar evolutions (SCEV) are used to represent results of induction 17203 variable analysis on GIMPLE. They enable us to represent variables with 17204 complicated behavior in a simple and consistent way (we only use it to 17205 express values of polynomial induction variables, but it is possible to 17206 extend it). The interfaces to SCEV analysis are declared in 17207 `tree-scalar-evolution.h'. To use scalar evolutions analysis, 17208 `scev_initialize' must be used. To stop using SCEV, `scev_finalize' 17209 should be used. SCEV analysis caches results in order to save time and 17210 memory. This cache however is made invalid by most of the loop 17211 transformations, including removal of code. If such a transformation 17212 is performed, `scev_reset' must be called to clean the caches. 17213 17214 Given an SSA name, its behavior in loops can be analyzed using the 17215 `analyze_scalar_evolution' function. The returned SCEV however does 17216 not have to be fully analyzed and it may contain references to other 17217 SSA names defined in the loop. To resolve these (potentially 17218 recursive) references, `instantiate_parameters' or `resolve_mixers' 17219 functions must be used. `instantiate_parameters' is useful when you 17220 use the results of SCEV only for some analysis, and when you work with 17221 whole nest of loops at once. It will try replacing all SSA names by 17222 their SCEV in all loops, including the super-loops of the current loop, 17223 thus providing a complete information about the behavior of the 17224 variable in the loop nest. `resolve_mixers' is useful if you work with 17225 only one loop at a time, and if you possibly need to create code based 17226 on the value of the induction variable. It will only resolve the SSA 17227 names defined in the current loop, leaving the SSA names defined 17228 outside unchanged, even if their evolution in the outer loops is known. 17229 17230 The SCEV is a normal tree expression, except for the fact that it may 17231 contain several special tree nodes. One of them is `SCEV_NOT_KNOWN', 17232 used for SSA names whose value cannot be expressed. The other one is 17233 `POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 17234 and loop (both base and step may contain further polynomial chrecs). 17235 Type of the expression and of base and step must be the same. A 17236 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is 17237 (in the specified loop) equivalent to `x_1' in the following example 17238 17239 while (...) 17240 { 17241 x_1 = phi (base, x_2); 17242 x_2 = x_1 + step; 17243 } 17244 17245 Note that this includes the language restrictions on the operations. 17246 For example, if we compile C code and `x' has signed type, then the 17247 overflow in addition would cause undefined behavior, and we may assume 17248 that this does not happen. Hence, the value with this SCEV cannot 17249 overflow (which restricts the number of iterations of such a loop). 17250 17251 In many cases, one wants to restrict the attention just to affine 17252 induction variables. In this case, the extra expressive power of SCEV 17253 is not useful, and may complicate the optimizations. In this case, 17254 `simple_iv' function may be used to analyze a value - the result is a 17255 loop-invariant base and step. 17256 17257 17258 File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 17259 17260 14.6 IV analysis on RTL 17261 ======================= 17262 17263 The induction variable on RTL is simple and only allows analysis of 17264 affine induction variables, and only in one loop at once. The interface 17265 is declared in `cfgloop.h'. Before analyzing induction variables in a 17266 loop L, `iv_analysis_loop_init' function must be called on L. After 17267 the analysis (possibly calling `iv_analysis_loop_init' for several 17268 loops) is finished, `iv_analysis_done' should be called. The following 17269 functions can be used to access the results of the analysis: 17270 17271 * `iv_analyze': Analyzes a single register used in the given insn. 17272 If no use of the register in this insn is found, the following 17273 insns are scanned, so that this function can be called on the insn 17274 returned by get_condition. 17275 17276 * `iv_analyze_result': Analyzes result of the assignment in the 17277 given insn. 17278 17279 * `iv_analyze_expr': Analyzes a more complicated expression. All 17280 its operands are analyzed by `iv_analyze', and hence they must be 17281 used in the specified insn or one of the following insns. 17282 17283 The description of the induction variable is provided in `struct 17284 rtx_iv'. In order to handle subregs, the representation is a bit 17285 complicated; if the value of the `extend' field is not `UNKNOWN', the 17286 value of the induction variable in the i-th iteration is 17287 17288 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 17289 17290 with the following exception: if `first_special' is true, then the 17291 value in the first iteration (when `i' is zero) is `delta + mult * 17292 base'. However, if `extend' is equal to `UNKNOWN', then 17293 `first_special' must be false, `delta' 0, `mult' 1 and the value in the 17294 i-th iteration is 17295 17296 subreg_{mode} (base + i * step) 17297 17298 The function `get_iv_value' can be used to perform these calculations. 17299 17300 17301 File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 17302 17303 14.7 Number of iterations analysis 17304 ================================== 17305 17306 Both on GIMPLE and on RTL, there are functions available to determine 17307 the number of iterations of a loop, with a similar interface. The 17308 number of iterations of a loop in GCC is defined as the number of 17309 executions of the loop latch. In many cases, it is not possible to 17310 determine the number of iterations unconditionally - the determined 17311 number is correct only if some assumptions are satisfied. The analysis 17312 tries to verify these conditions using the information contained in the 17313 program; if it fails, the conditions are returned together with the 17314 result. The following information and conditions are provided by the 17315 analysis: 17316 17317 * `assumptions': If this condition is false, the rest of the 17318 information is invalid. 17319 17320 * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this 17321 condition is true, the loop exits in the first iteration. 17322 17323 * `infinite': If this condition is true, the loop is infinite. This 17324 condition is only available on RTL. On GIMPLE, conditions for 17325 finiteness of the loop are included in `assumptions'. 17326 17327 * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives 17328 number of iterations. The number of iterations is defined as the 17329 number of executions of the loop latch. 17330 17331 Both on GIMPLE and on RTL, it necessary for the induction variable 17332 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 17333 On GIMPLE, the results are stored to `struct tree_niter_desc' 17334 structure. Number of iterations before the loop is exited through a 17335 given exit can be determined using `number_of_iterations_exit' 17336 function. On RTL, the results are returned in `struct niter_desc' 17337 structure. The corresponding function is named `check_simple_exit'. 17338 There are also functions that pass through all the exits of a loop and 17339 try to find one with easy to determine number of iterations - 17340 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL. Finally, 17341 there are functions that provide the same information, but additionally 17342 cache it, so that repeated calls to number of iterations are not so 17343 costly - `number_of_latch_executions' on GIMPLE and 17344 `get_simple_loop_desc' on RTL. 17345 17346 Note that some of these functions may behave slightly differently than 17347 others - some of them return only the expression for the number of 17348 iterations, and fail if there are some assumptions. The function 17349 `number_of_latch_executions' works only for single-exit loops. The 17350 function `number_of_cond_exit_executions' can be used to determine 17351 number of executions of the exit condition of a single-exit loop (i.e., 17352 the `number_of_latch_executions' increased by one). 17353 17354 17355 File: gccint.info, Node: Dependency analysis, Next: Lambda, Prev: Number of iterations, Up: Loop Analysis and Representation 17356 17357 14.8 Data Dependency Analysis 17358 ============================= 17359 17360 The code for the data dependence analysis can be found in 17361 `tree-data-ref.c' and its interface and data structures are described 17362 in `tree-data-ref.h'. The function that computes the data dependences 17363 for all the array and pointer references for a given loop is 17364 `compute_data_dependences_for_loop'. This function is currently used 17365 by the linear loop transform and the vectorization passes. Before 17366 calling this function, one has to allocate two vectors: a first vector 17367 will contain the set of data references that are contained in the 17368 analyzed loop body, and the second vector will contain the dependence 17369 relations between the data references. Thus if the vector of data 17370 references is of size `n', the vector containing the dependence 17371 relations will contain `n*n' elements. However if the analyzed loop 17372 contains side effects, such as calls that potentially can interfere 17373 with the data references in the current analyzed loop, the analysis 17374 stops while scanning the loop body for data references, and inserts a 17375 single `chrec_dont_know' in the dependence relation array. 17376 17377 The data references are discovered in a particular order during the 17378 scanning of the loop body: the loop body is analyzed in execution order, 17379 and the data references of each statement are pushed at the end of the 17380 data reference array. Two data references syntactically occur in the 17381 program in the same order as in the array of data references. This 17382 syntactic order is important in some classical data dependence tests, 17383 and mapping this order to the elements of this array avoids costly 17384 queries to the loop body representation. 17385 17386 Three types of data references are currently handled: ARRAY_REF, 17387 INDIRECT_REF and COMPONENT_REF. The data structure for the data 17388 reference is `data_reference', where `data_reference_p' is a name of a 17389 pointer to the data reference structure. The structure contains the 17390 following elements: 17391 17392 * `base_object_info': Provides information about the base object of 17393 the data reference and its access functions. These access functions 17394 represent the evolution of the data reference in the loop relative 17395 to its base, in keeping with the classical meaning of the data 17396 reference access function for the support of arrays. For example, 17397 for a reference `a.b[i][j]', the base object is `a.b' and the 17398 access functions, one for each array subscript, are: `{i_init, + 17399 i_step}_1, {j_init, +, j_step}_2'. 17400 17401 * `first_location_in_loop': Provides information about the first 17402 location accessed by the data reference in the loop and about the 17403 access function used to represent evolution relative to this 17404 location. This data is used to support pointers, and is not used 17405 for arrays (for which we have base objects). Pointer accesses are 17406 represented as a one-dimensional access that starts from the first 17407 location accessed in the loop. For example: 17408 17409 for1 i 17410 for2 j 17411 *((int *)p + i + j) = a[i][j]; 17412 17413 The access function of the pointer access is `{0, + 4B}_for2' 17414 relative to `p + i'. The access functions of the array are 17415 `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative 17416 to `a'. 17417 17418 Usually, the object the pointer refers to is either unknown, or we 17419 can't prove that the access is confined to the boundaries of a 17420 certain object. 17421 17422 Two data references can be compared only if at least one of these 17423 two representations has all its fields filled for both data 17424 references. 17425 17426 The current strategy for data dependence tests is as follows: If 17427 both `a' and `b' are represented as arrays, compare 17428 `a.base_object' and `b.base_object'; if they are equal, apply 17429 dependence tests (use access functions based on base_objects). 17430 Else if both `a' and `b' are represented as pointers, compare 17431 `a.first_location' and `b.first_location'; if they are equal, 17432 apply dependence tests (use access functions based on first 17433 location). However, if `a' and `b' are represented differently, 17434 only try to prove that the bases are definitely different. 17435 17436 * Aliasing information. 17437 17438 * Alignment information. 17439 17440 The structure describing the relation between two data references is 17441 `data_dependence_relation' and the shorter name for a pointer to such a 17442 structure is `ddr_p'. This structure contains: 17443 17444 * a pointer to each data reference, 17445 17446 * a tree node `are_dependent' that is set to `chrec_known' if the 17447 analysis has proved that there is no dependence between these two 17448 data references, `chrec_dont_know' if the analysis was not able to 17449 determine any useful result and potentially there could exist a 17450 dependence between these data references, and `are_dependent' is 17451 set to `NULL_TREE' if there exist a dependence relation between the 17452 data references, and the description of this dependence relation is 17453 given in the `subscripts', `dir_vects', and `dist_vects' arrays, 17454 17455 * a boolean that determines whether the dependence relation can be 17456 represented by a classical distance vector, 17457 17458 * an array `subscripts' that contains a description of each 17459 subscript of the data references. Given two array accesses a 17460 subscript is the tuple composed of the access functions for a given 17461 dimension. For example, given `A[f1][f2][f3]' and 17462 `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2), 17463 (f3, g3)'. 17464 17465 * two arrays `dir_vects' and `dist_vects' that contain classical 17466 representations of the data dependences under the form of 17467 direction and distance dependence vectors, 17468 17469 * an array of loops `loop_nest' that contains the loops to which the 17470 distance and direction vectors refer to. 17471 17472 Several functions for pretty printing the information extracted by the 17473 data dependence analysis are available: `dump_ddrs' prints with a 17474 maximum verbosity the details of a data dependence relations array, 17475 `dump_dist_dir_vectors' prints only the classical distance and 17476 direction vectors for a data dependence relations array, and 17477 `dump_data_references' prints the details of the data references 17478 contained in a data reference array. 17479 17480 17481 File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation 17482 17483 14.9 Linear loop transformations framework 17484 ========================================== 17485 17486 Lambda is a framework that allows transformations of loops using 17487 non-singular matrix based transformations of the iteration space and 17488 loop bounds. This allows compositions of skewing, scaling, interchange, 17489 and reversal transformations. These transformations are often used to 17490 improve cache behavior or remove inner loop dependencies to allow 17491 parallelization and vectorization to take place. 17492 17493 To perform these transformations, Lambda requires that the loopnest be 17494 converted into an internal form that can be matrix transformed easily. 17495 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest' 17496 is provided. If the loop cannot be transformed using lambda, this 17497 function will return NULL. 17498 17499 Once a `lambda_loopnest' is obtained from the conversion function, it 17500 can be transformed by using `lambda_loopnest_transform', which takes a 17501 transformation matrix to apply. Note that it is up to the caller to 17502 verify that the transformation matrix is legal to apply to the loop 17503 (dependence respecting, etc). Lambda simply applies whatever matrix it 17504 is told to provide. It can be extended to make legal matrices out of 17505 any non-singular matrix, but this is not currently implemented. 17506 Legality of a matrix for a given loopnest can be verified using 17507 `lambda_transform_legal_p'. 17508 17509 Given a transformed loopnest, conversion back into gcc IR is done by 17510 `lambda_loopnest_to_gcc_loopnest'. This function will modify the loops 17511 so that they match the transformed loopnest. 17512 17513 17514 File: gccint.info, Node: Omega, Prev: Lambda, Up: Loop Analysis and Representation 17515 17516 14.10 Omega a solver for linear programming problems 17517 ==================================================== 17518 17519 The data dependence analysis contains several solvers triggered 17520 sequentially from the less complex ones to the more sophisticated. For 17521 ensuring the consistency of the results of these solvers, a data 17522 dependence check pass has been implemented based on two different 17523 solvers. The second method that has been integrated to GCC is based on 17524 the Omega dependence solver, written in the 1990's by William Pugh and 17525 David Wonnacott. Data dependence tests can be formulated using a 17526 subset of the Presburger arithmetics that can be translated to linear 17527 constraint systems. These linear constraint systems can then be solved 17528 using the Omega solver. 17529 17530 The Omega solver is using Fourier-Motzkin's algorithm for variable 17531 elimination: a linear constraint system containing `n' variables is 17532 reduced to a linear constraint system with `n-1' variables. The Omega 17533 solver can also be used for solving other problems that can be 17534 expressed under the form of a system of linear equalities and 17535 inequalities. The Omega solver is known to have an exponential worst 17536 case, also known under the name of "omega nightmare" in the literature, 17537 but in practice, the omega test is known to be efficient for the common 17538 data dependence tests. 17539 17540 The interface used by the Omega solver for describing the linear 17541 programming problems is described in `omega.h', and the solver is 17542 `omega_solve_problem'. 17543 17544 17545 File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top 17546 17547 15 Control Flow Graph 17548 ********************* 17549 17550 A control flow graph (CFG) is a data structure built on top of the 17551 intermediate code representation (the RTL or `GIMPLE' instruction 17552 stream) abstracting the control flow behavior of a function that is 17553 being compiled. The CFG is a directed graph where the vertices 17554 represent basic blocks and edges represent possible transfer of control 17555 flow from one basic block to another. The data structures used to 17556 represent the control flow graph are defined in `basic-block.h'. 17557 17558 In GCC, the representation of control flow is maintained throughout 17559 the compilation process, from constructing the CFG early in 17560 `pass_build_cfg' to `pass_free_cfg' (see `passes.c'). The CFG takes 17561 various different modes and may undergo extensive manipulations, but 17562 the graph is always valid between its construction and its release. 17563 This way, transfer of information such as data flow, a measured 17564 profile, or the loop tree, can be propagated through the passes 17565 pipeline, and even from `GIMPLE' to `RTL'. 17566 17567 Often the CFG may be better viewed as integral part of instruction 17568 chain, than structure built on the top of it. Updating the compiler's 17569 intermediate representation for instructions can not be easily done 17570 without proper maintenance of the CFG simultaneously. 17571 17572 * Menu: 17573 17574 * Basic Blocks:: The definition and representation of basic blocks. 17575 * Edges:: Types of edges and their representation. 17576 * Profile information:: Representation of frequencies and probabilities. 17577 * Maintaining the CFG:: Keeping the control flow graph and up to date. 17578 * Liveness information:: Using and maintaining liveness information. 17579 17580 17581 File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 17582 17583 15.1 Basic Blocks 17584 ================= 17585 17586 A basic block is a straight-line sequence of code with only one entry 17587 point and only one exit. In GCC, basic blocks are represented using 17588 the `basic_block' data type. 17589 17590 Special basic blocks represent possible entry and exit points of a 17591 function. These blocks are called `ENTRY_BLOCK_PTR' and 17592 `EXIT_BLOCK_PTR'. These blocks do not contain any code. 17593 17594 The `BASIC_BLOCK' array contains all basic blocks in an unspecified 17595 order. Each `basic_block' structure has a field that holds a unique 17596 integer identifier `index' that is the index of the block in the 17597 `BASIC_BLOCK' array. The total number of basic blocks in the function 17598 is `n_basic_blocks'. Both the basic block indices and the total number 17599 of basic blocks may vary during the compilation process, as passes 17600 reorder, create, duplicate, and destroy basic blocks. The index for 17601 any block should never be greater than `last_basic_block'. The indices 17602 0 and 1 are special codes reserved for `ENTRY_BLOCK' and `EXIT_BLOCK', 17603 the indices of `ENTRY_BLOCK_PTR' and `EXIT_BLOCK_PTR'. 17604 17605 Two pointer members of the `basic_block' structure are the pointers 17606 `next_bb' and `prev_bb'. These are used to keep doubly linked chain of 17607 basic blocks in the same order as the underlying instruction stream. 17608 The chain of basic blocks is updated transparently by the provided API 17609 for manipulating the CFG. The macro `FOR_EACH_BB' can be used to visit 17610 all the basic blocks in lexicographical order, except `ENTRY_BLOCK' and 17611 `EXIT_BLOCK'. The macro `FOR_ALL_BB' also visits all basic blocks in 17612 lexicographical order, including `ENTRY_BLOCK' and `EXIT_BLOCK'. 17613 17614 The functions `post_order_compute' and `inverted_post_order_compute' 17615 can be used to compute topological orders of the CFG. The orders are 17616 stored as vectors of basic block indices. The `BASIC_BLOCK' array can 17617 be used to iterate each basic block by index. Dominator traversals are 17618 also possible using `walk_dominator_tree'. Given two basic blocks A 17619 and B, block A dominates block B if A is _always_ executed before B. 17620 17621 Each `basic_block' also contains pointers to the first instruction 17622 (the "head") and the last instruction (the "tail") or "end" of the 17623 instruction stream contained in a basic block. In fact, since the 17624 `basic_block' data type is used to represent blocks in both major 17625 intermediate representations of GCC (`GIMPLE' and RTL), there are 17626 pointers to the head and end of a basic block for both representations, 17627 stored in intermediate representation specific data in the `il' field 17628 of `struct basic_block_def'. 17629 17630 For RTL, these pointers are `BB_HEAD' and `BB_END'. 17631 17632 In the RTL representation of a function, the instruction stream 17633 contains not only the "real" instructions, but also "notes" or "insn 17634 notes" (to distinguish them from "reg notes"). Any function that moves 17635 or duplicates the basic blocks needs to take care of updating of these 17636 notes. Many of these notes expect that the instruction stream consists 17637 of linear regions, so updating can sometimes be tedious. All types of 17638 insn notes are defined in `insn-notes.def'. 17639 17640 In the RTL function representation, the instructions contained in a 17641 basic block always follow a `NOTE_INSN_BASIC_BLOCK', but zero or more 17642 `CODE_LABEL' nodes can precede the block note. A basic block ends with 17643 a control flow instruction or with the last instruction before the next 17644 `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'. By definition, a `CODE_LABEL' 17645 cannot appear in the middle of the instruction stream of a basic block. 17646 17647 In addition to notes, the jump table vectors are also represented as 17648 "pseudo-instructions" inside the insn stream. These vectors never 17649 appear in the basic block and should always be placed just after the 17650 table jump instructions referencing them. After removing the 17651 table-jump it is often difficult to eliminate the code computing the 17652 address and referencing the vector, so cleaning up these vectors is 17653 postponed until after liveness analysis. Thus the jump table vectors 17654 may appear in the insn stream unreferenced and without any purpose. 17655 Before any edge is made "fall-thru", the existence of such construct in 17656 the way needs to be checked by calling `can_fallthru' function. 17657 17658 For the `GIMPLE' representation, the PHI nodes and statements 17659 contained in a basic block are in a `gimple_seq' pointed to by the 17660 basic block intermediate language specific pointers. Abstract 17661 containers and iterators are used to access the PHI nodes and 17662 statements in a basic blocks. These iterators are called "GIMPLE 17663 statement iterators" (GSIs). Grep for `^gsi' in the various `gimple-*' 17664 and `tree-*' files. The following snippet will pretty-print all PHI 17665 nodes the statements of the current function in the GIMPLE 17666 representation. 17667 17668 basic_block bb; 17669 17670 FOR_EACH_BB (bb) 17671 { 17672 gimple_stmt_iterator si; 17673 17674 for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) 17675 { 17676 gimple phi = gsi_stmt (si); 17677 print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); 17678 } 17679 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 17680 { 17681 gimple stmt = gsi_stmt (si); 17682 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); 17683 } 17684 } 17685 17686 17687 File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 17688 17689 15.2 Edges 17690 ========== 17691 17692 Edges represent possible control flow transfers from the end of some 17693 basic block A to the head of another basic block B. We say that A is a 17694 predecessor of B, and B is a successor of A. Edges are represented in 17695 GCC with the `edge' data type. Each `edge' acts as a link between two 17696 basic blocks: The `src' member of an edge points to the predecessor 17697 basic block of the `dest' basic block. The members `preds' and `succs' 17698 of the `basic_block' data type point to type-safe vectors of edges to 17699 the predecessors and successors of the block. 17700 17701 When walking the edges in an edge vector, "edge iterators" should be 17702 used. Edge iterators are constructed using the `edge_iterator' data 17703 structure and several methods are available to operate on them: 17704 17705 `ei_start' 17706 This function initializes an `edge_iterator' that points to the 17707 first edge in a vector of edges. 17708 17709 `ei_last' 17710 This function initializes an `edge_iterator' that points to the 17711 last edge in a vector of edges. 17712 17713 `ei_end_p' 17714 This predicate is `true' if an `edge_iterator' represents the last 17715 edge in an edge vector. 17716 17717 `ei_one_before_end_p' 17718 This predicate is `true' if an `edge_iterator' represents the 17719 second last edge in an edge vector. 17720 17721 `ei_next' 17722 This function takes a pointer to an `edge_iterator' and makes it 17723 point to the next edge in the sequence. 17724 17725 `ei_prev' 17726 This function takes a pointer to an `edge_iterator' and makes it 17727 point to the previous edge in the sequence. 17728 17729 `ei_edge' 17730 This function returns the `edge' currently pointed to by an 17731 `edge_iterator'. 17732 17733 `ei_safe_safe' 17734 This function returns the `edge' currently pointed to by an 17735 `edge_iterator', but returns `NULL' if the iterator is pointing at 17736 the end of the sequence. This function has been provided for 17737 existing code makes the assumption that a `NULL' edge indicates 17738 the end of the sequence. 17739 17740 17741 The convenience macro `FOR_EACH_EDGE' can be used to visit all of the 17742 edges in a sequence of predecessor or successor edges. It must not be 17743 used when an element might be removed during the traversal, otherwise 17744 elements will be missed. Here is an example of how to use the macro: 17745 17746 edge e; 17747 edge_iterator ei; 17748 17749 FOR_EACH_EDGE (e, ei, bb->succs) 17750 { 17751 if (e->flags & EDGE_FALLTHRU) 17752 break; 17753 } 17754 17755 There are various reasons why control flow may transfer from one block 17756 to another. One possibility is that some instruction, for example a 17757 `CODE_LABEL', in a linearized instruction stream just always starts a 17758 new basic block. In this case a "fall-thru" edge links the basic block 17759 to the first following basic block. But there are several other 17760 reasons why edges may be created. The `flags' field of the `edge' data 17761 type is used to store information about the type of edge we are dealing 17762 with. Each edge is of one of the following types: 17763 17764 _jump_ 17765 No type flags are set for edges corresponding to jump instructions. 17766 These edges are used for unconditional or conditional jumps and in 17767 RTL also for table jumps. They are the easiest to manipulate as 17768 they may be freely redirected when the flow graph is not in SSA 17769 form. 17770 17771 _fall-thru_ 17772 Fall-thru edges are present in case where the basic block may 17773 continue execution to the following one without branching. These 17774 edges have the `EDGE_FALLTHRU' flag set. Unlike other types of 17775 edges, these edges must come into the basic block immediately 17776 following in the instruction stream. The function 17777 `force_nonfallthru' is available to insert an unconditional jump 17778 in the case that redirection is needed. Note that this may 17779 require creation of a new basic block. 17780 17781 _exception handling_ 17782 Exception handling edges represent possible control transfers from 17783 a trapping instruction to an exception handler. The definition of 17784 "trapping" varies. In C++, only function calls can throw, but for 17785 Java and Ada, exceptions like division by zero or segmentation 17786 fault are defined and thus each instruction possibly throwing this 17787 kind of exception needs to be handled as control flow instruction. 17788 Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set. 17789 17790 When updating the instruction stream it is easy to change possibly 17791 trapping instruction to non-trapping, by simply removing the 17792 exception edge. The opposite conversion is difficult, but should 17793 not happen anyway. The edges can be eliminated via 17794 `purge_dead_edges' call. 17795 17796 In the RTL representation, the destination of an exception edge is 17797 specified by `REG_EH_REGION' note attached to the insn. In case 17798 of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too. In 17799 the `GIMPLE' representation, this extra flag is not set. 17800 17801 In the RTL representation, the predicate `may_trap_p' may be used 17802 to check whether instruction still may trap or not. For the tree 17803 representation, the `tree_could_trap_p' predicate is available, 17804 but this predicate only checks for possible memory traps, as in 17805 dereferencing an invalid pointer location. 17806 17807 _sibling calls_ 17808 Sibling calls or tail calls terminate the function in a 17809 non-standard way and thus an edge to the exit must be present. 17810 `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case. These 17811 edges only exist in the RTL representation. 17812 17813 _computed jumps_ 17814 Computed jumps contain edges to all labels in the function 17815 referenced from the code. All those edges have `EDGE_ABNORMAL' 17816 flag set. The edges used to represent computed jumps often cause 17817 compile time performance problems, since functions consisting of 17818 many taken labels and many computed jumps may have _very_ dense 17819 flow graphs, so these edges need to be handled with special care. 17820 During the earlier stages of the compilation process, GCC tries to 17821 avoid such dense flow graphs by factoring computed jumps. For 17822 example, given the following series of jumps, 17823 17824 goto *x; 17825 [ ... ] 17826 17827 goto *x; 17828 [ ... ] 17829 17830 goto *x; 17831 [ ... ] 17832 17833 factoring the computed jumps results in the following code sequence 17834 which has a much simpler flow graph: 17835 17836 goto y; 17837 [ ... ] 17838 17839 goto y; 17840 [ ... ] 17841 17842 goto y; 17843 [ ... ] 17844 17845 y: 17846 goto *x; 17847 17848 However, the classic problem with this transformation is that it 17849 has a runtime cost in there resulting code: An extra jump. 17850 Therefore, the computed jumps are un-factored in the later passes 17851 of the compiler (in the pass called 17852 `pass_duplicate_computed_gotos'). Be aware of that when you work 17853 on passes in that area. There have been numerous examples already 17854 where the compile time for code with unfactored computed jumps 17855 caused some serious headaches. 17856 17857 _nonlocal goto handlers_ 17858 GCC allows nested functions to return into caller using a `goto' 17859 to a label passed to as an argument to the callee. The labels 17860 passed to nested functions contain special code to cleanup after 17861 function call. Such sections of code are referred to as "nonlocal 17862 goto receivers". If a function contains such nonlocal goto 17863 receivers, an edge from the call to the label is created with the 17864 `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set. 17865 17866 _function entry points_ 17867 By definition, execution of function starts at basic block 0, so 17868 there is always an edge from the `ENTRY_BLOCK_PTR' to basic block 17869 0. There is no `GIMPLE' representation for alternate entry points 17870 at this moment. In RTL, alternate entry points are specified by 17871 `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined. This feature is 17872 currently used for multiple entry point prologues and is limited 17873 to post-reload passes only. This can be used by back-ends to emit 17874 alternate prologues for functions called from different contexts. 17875 In future full support for multiple entry functions defined by 17876 Fortran 90 needs to be implemented. 17877 17878 _function exits_ 17879 In the pre-reload representation a function terminates after the 17880 last instruction in the insn chain and no explicit return 17881 instructions are used. This corresponds to the fall-thru edge 17882 into exit block. After reload, optimal RTL epilogues are used 17883 that use explicit (conditional) return instructions that are 17884 represented by edges with no flags set. 17885 17886 17887 17888 File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 17889 17890 15.3 Profile information 17891 ======================== 17892 17893 In many cases a compiler must make a choice whether to trade speed in 17894 one part of code for speed in another, or to trade code size for code 17895 speed. In such cases it is useful to know information about how often 17896 some given block will be executed. That is the purpose for maintaining 17897 profile within the flow graph. GCC can handle profile information 17898 obtained through "profile feedback", but it can also estimate branch 17899 probabilities based on statics and heuristics. 17900 17901 The feedback based profile is produced by compiling the program with 17902 instrumentation, executing it on a train run and reading the numbers of 17903 executions of basic blocks and edges back to the compiler while 17904 re-compiling the program to produce the final executable. This method 17905 provides very accurate information about where a program spends most of 17906 its time on the train run. Whether it matches the average run of 17907 course depends on the choice of train data set, but several studies 17908 have shown that the behavior of a program usually changes just 17909 marginally over different data sets. 17910 17911 When profile feedback is not available, the compiler may be asked to 17912 attempt to predict the behavior of each branch in the program using a 17913 set of heuristics (see `predict.def' for details) and compute estimated 17914 frequencies of each basic block by propagating the probabilities over 17915 the graph. 17916 17917 Each `basic_block' contains two integer fields to represent profile 17918 information: `frequency' and `count'. The `frequency' is an estimation 17919 how often is basic block executed within a function. It is represented 17920 as an integer scaled in the range from 0 to `BB_FREQ_BASE'. The most 17921 frequently executed basic block in function is initially set to 17922 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 17923 During optimization, the frequency of the most frequent basic block can 17924 both decrease (for instance by loop unrolling) or grow (for instance by 17925 cross-jumping optimization), so scaling sometimes has to be performed 17926 multiple times. 17927 17928 The `count' contains hard-counted numbers of execution measured during 17929 training runs and is nonzero only when profile feedback is available. 17930 This value is represented as the host's widest integer (typically a 64 17931 bit integer) of the special type `gcov_type'. 17932 17933 Most optimization passes can use only the frequency information of a 17934 basic block, but a few passes may want to know hard execution counts. 17935 The frequencies should always match the counts after scaling, however 17936 during updating of the profile information numerical error may 17937 accumulate into quite large errors. 17938 17939 Each edge also contains a branch probability field: an integer in the 17940 range from 0 to `REG_BR_PROB_BASE'. It represents probability of 17941 passing control from the end of the `src' basic block to the `dest' 17942 basic block, i.e. the probability that control will flow along this 17943 edge. The `EDGE_FREQUENCY' macro is available to compute how 17944 frequently a given edge is taken. There is a `count' field for each 17945 edge as well, representing same information as for a basic block. 17946 17947 The basic block frequencies are not represented in the instruction 17948 stream, but in the RTL representation the edge frequencies are 17949 represented for conditional jumps (via the `REG_BR_PROB' macro) since 17950 they are used when instructions are output to the assembly file and the 17951 flow graph is no longer maintained. 17952 17953 The probability that control flow arrives via a given edge to its 17954 destination basic block is called "reverse probability" and is not 17955 directly represented, but it may be easily computed from frequencies of 17956 basic blocks. 17957 17958 Updating profile information is a delicate task that can unfortunately 17959 not be easily integrated with the CFG manipulation API. Many of the 17960 functions and hooks to modify the CFG, such as 17961 `redirect_edge_and_branch', do not have enough information to easily 17962 update the profile, so updating it is in the majority of cases left up 17963 to the caller. It is difficult to uncover bugs in the profile updating 17964 code, because they manifest themselves only by producing worse code, 17965 and checking profile consistency is not possible because of numeric 17966 error accumulation. Hence special attention needs to be given to this 17967 issue in each pass that modifies the CFG. 17968 17969 It is important to point out that `REG_BR_PROB_BASE' and 17970 `BB_FREQ_BASE' are both set low enough to be possible to compute second 17971 power of any frequency or probability in the flow graph, it is not 17972 possible to even square the `count' field, as modern CPUs are fast 17973 enough to execute $2^32$ operations quickly. 17974 17975 17976 File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 17977 17978 15.4 Maintaining the CFG 17979 ======================== 17980 17981 An important task of each compiler pass is to keep both the control 17982 flow graph and all profile information up-to-date. Reconstruction of 17983 the control flow graph after each pass is not an option, since it may be 17984 very expensive and lost profile information cannot be reconstructed at 17985 all. 17986 17987 GCC has two major intermediate representations, and both use the 17988 `basic_block' and `edge' data types to represent control flow. Both 17989 representations share as much of the CFG maintenance code as possible. 17990 For each representation, a set of "hooks" is defined so that each 17991 representation can provide its own implementation of CFG manipulation 17992 routines when necessary. These hooks are defined in `cfghooks.h'. 17993 There are hooks for almost all common CFG manipulations, including 17994 block splitting and merging, edge redirection and creating and deleting 17995 basic blocks. These hooks should provide everything you need to 17996 maintain and manipulate the CFG in both the RTL and `GIMPLE' 17997 representation. 17998 17999 At the moment, the basic block boundaries are maintained transparently 18000 when modifying instructions, so there rarely is a need to move them 18001 manually (such as in case someone wants to output instruction outside 18002 basic block explicitly). 18003 18004 In the RTL representation, each instruction has a `BLOCK_FOR_INSN' 18005 value that represents pointer to the basic block that contains the 18006 instruction. In the `GIMPLE' representation, the function `gimple_bb' 18007 returns a pointer to the basic block containing the queried statement. 18008 18009 When changes need to be applied to a function in its `GIMPLE' 18010 representation, "GIMPLE statement iterators" should be used. These 18011 iterators provide an integrated abstraction of the flow graph and the 18012 instruction stream. Block statement iterators are constructed using 18013 the `gimple_stmt_iterator' data structure and several modifier are 18014 available, including the following: 18015 18016 `gsi_start' 18017 This function initializes a `gimple_stmt_iterator' that points to 18018 the first non-empty statement in a basic block. 18019 18020 `gsi_last' 18021 This function initializes a `gimple_stmt_iterator' that points to 18022 the last statement in a basic block. 18023 18024 `gsi_end_p' 18025 This predicate is `true' if a `gimple_stmt_iterator' represents 18026 the end of a basic block. 18027 18028 `gsi_next' 18029 This function takes a `gimple_stmt_iterator' and makes it point to 18030 its successor. 18031 18032 `gsi_prev' 18033 This function takes a `gimple_stmt_iterator' and makes it point to 18034 its predecessor. 18035 18036 `gsi_insert_after' 18037 This function inserts a statement after the `gimple_stmt_iterator' 18038 passed in. The final parameter determines whether the statement 18039 iterator is updated to point to the newly inserted statement, or 18040 left pointing to the original statement. 18041 18042 `gsi_insert_before' 18043 This function inserts a statement before the `gimple_stmt_iterator' 18044 passed in. The final parameter determines whether the statement 18045 iterator is updated to point to the newly inserted statement, or 18046 left pointing to the original statement. 18047 18048 `gsi_remove' 18049 This function removes the `gimple_stmt_iterator' passed in and 18050 rechains the remaining statements in a basic block, if any. 18051 18052 In the RTL representation, the macros `BB_HEAD' and `BB_END' may be 18053 used to get the head and end `rtx' of a basic block. No abstract 18054 iterators are defined for traversing the insn chain, but you can just 18055 use `NEXT_INSN' and `PREV_INSN' instead. *Note Insns::. 18056 18057 Usually a code manipulating pass simplifies the instruction stream and 18058 the flow of control, possibly eliminating some edges. This may for 18059 example happen when a conditional jump is replaced with an 18060 unconditional jump, but also when simplifying possibly trapping 18061 instruction to non-trapping while compiling Java. Updating of edges is 18062 not transparent and each optimization pass is required to do so 18063 manually. However only few cases occur in practice. The pass may call 18064 `purge_dead_edges' on a given basic block to remove superfluous edges, 18065 if any. 18066 18067 Another common scenario is redirection of branch instructions, but 18068 this is best modeled as redirection of edges in the control flow graph 18069 and thus use of `redirect_edge_and_branch' is preferred over more low 18070 level functions, such as `redirect_jump' that operate on RTL chain 18071 only. The CFG hooks defined in `cfghooks.h' should provide the 18072 complete API required for manipulating and maintaining the CFG. 18073 18074 It is also possible that a pass has to insert control flow instruction 18075 into the middle of a basic block, thus creating an entry point in the 18076 middle of the basic block, which is impossible by definition: The block 18077 must be split to make sure it only has one entry point, i.e. the head 18078 of the basic block. The CFG hook `split_block' may be used when an 18079 instruction in the middle of a basic block has to become the target of 18080 a jump or branch instruction. 18081 18082 For a global optimizer, a common operation is to split edges in the 18083 flow graph and insert instructions on them. In the RTL representation, 18084 this can be easily done using the `insert_insn_on_edge' function that 18085 emits an instruction "on the edge", caching it for a later 18086 `commit_edge_insertions' call that will take care of moving the 18087 inserted instructions off the edge into the instruction stream 18088 contained in a basic block. This includes the creation of new basic 18089 blocks where needed. In the `GIMPLE' representation, the equivalent 18090 functions are `gsi_insert_on_edge' which inserts a block statement 18091 iterator on an edge, and `gsi_commit_edge_inserts' which flushes the 18092 instruction to actual instruction stream. 18093 18094 While debugging the optimization pass, the `verify_flow_info' function 18095 may be useful to find bugs in the control flow graph updating code. 18096 18097 18098 File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 18099 18100 15.5 Liveness information 18101 ========================= 18102 18103 Liveness information is useful to determine whether some register is 18104 "live" at given point of program, i.e. that it contains a value that 18105 may be used at a later point in the program. This information is used, 18106 for instance, during register allocation, as the pseudo registers only 18107 need to be assigned to a unique hard register or to a stack slot if 18108 they are live. The hard registers and stack slots may be freely reused 18109 for other values when a register is dead. 18110 18111 Liveness information is available in the back end starting with 18112 `pass_df_initialize' and ending with `pass_df_finish'. Three flavors 18113 of live analysis are available: With `LR', it is possible to determine 18114 at any point `P' in the function if the register may be used on some 18115 path from `P' to the end of the function. With `UR', it is possible to 18116 determine if there is a path from the beginning of the function to `P' 18117 that defines the variable. `LIVE' is the intersection of the `LR' and 18118 `UR' and a variable is live at `P' if there is both an assignment that 18119 reaches it from the beginning of the function and a use that can be 18120 reached on some path from `P' to the end of the function. 18121 18122 In general `LIVE' is the most useful of the three. The macros 18123 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 18124 macros take a basic block number and return a bitmap that is indexed by 18125 the register number. This information is only guaranteed to be up to 18126 date after calls are made to `df_analyze'. See the file `df-core.c' 18127 for details on using the dataflow. 18128 18129 The liveness information is stored partly in the RTL instruction stream 18130 and partly in the flow graph. Local information is stored in the 18131 instruction stream: Each instruction may contain `REG_DEAD' notes 18132 representing that the value of a given register is no longer needed, or 18133 `REG_UNUSED' notes representing that the value computed by the 18134 instruction is never used. The second is useful for instructions 18135 computing multiple values at once. 18136 18137 18138 File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 18139 18140 16 Machine Descriptions 18141 *********************** 18142 18143 A machine description has two parts: a file of instruction patterns 18144 (`.md' file) and a C header file of macro definitions. 18145 18146 The `.md' file for a target machine contains a pattern for each 18147 instruction that the target machine supports (or at least each 18148 instruction that is worth telling the compiler about). It may also 18149 contain comments. A semicolon causes the rest of the line to be a 18150 comment, unless the semicolon is inside a quoted string. 18151 18152 See the next chapter for information on the C header file. 18153 18154 * Menu: 18155 18156 * Overview:: How the machine description is used. 18157 * Patterns:: How to write instruction patterns. 18158 * Example:: An explained example of a `define_insn' pattern. 18159 * RTL Template:: The RTL template defines what insns match a pattern. 18160 * Output Template:: The output template says how to make assembler code 18161 from such an insn. 18162 * Output Statement:: For more generality, write C code to output 18163 the assembler code. 18164 * Predicates:: Controlling what kinds of operands can be used 18165 for an insn. 18166 * Constraints:: Fine-tuning operand selection. 18167 * Standard Names:: Names mark patterns to use for code generation. 18168 * Pattern Ordering:: When the order of patterns makes a difference. 18169 * Dependent Patterns:: Having one pattern may make you need another. 18170 * Jump Patterns:: Special considerations for patterns for jump insns. 18171 * Looping Patterns:: How to define patterns for special looping insns. 18172 * Insn Canonicalizations::Canonicalization of Instructions 18173 * Expander Definitions::Generating a sequence of several RTL insns 18174 for a standard operation. 18175 * Insn Splitting:: Splitting Instructions into Multiple Instructions. 18176 * Including Patterns:: Including Patterns in Machine Descriptions. 18177 * Peephole Definitions::Defining machine-specific peephole optimizations. 18178 * Insn Attributes:: Specifying the value of attributes for generated insns. 18179 * Conditional Execution::Generating `define_insn' patterns for 18180 predication. 18181 * Define Subst:: Generating `define_insn' and `define_expand' 18182 patterns from other patterns. 18183 * Constant Definitions::Defining symbolic constants that can be used in the 18184 md file. 18185 * Iterators:: Using iterators to generate patterns from a template. 18186 18187 18188 File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 18189 18190 16.1 Overview of How the Machine Description is Used 18191 ==================================================== 18192 18193 There are three main conversions that happen in the compiler: 18194 18195 1. The front end reads the source code and builds a parse tree. 18196 18197 2. The parse tree is used to generate an RTL insn list based on named 18198 instruction patterns. 18199 18200 3. The insn list is matched against the RTL templates to produce 18201 assembler code. 18202 18203 18204 For the generate pass, only the names of the insns matter, from either 18205 a named `define_insn' or a `define_expand'. The compiler will choose 18206 the pattern with the right name and apply the operands according to the 18207 documentation later in this chapter, without regard for the RTL 18208 template or operand constraints. Note that the names the compiler looks 18209 for are hard-coded in the compiler--it will ignore unnamed patterns and 18210 patterns with names it doesn't know about, but if you don't provide a 18211 named pattern it needs, it will abort. 18212 18213 If a `define_insn' is used, the template given is inserted into the 18214 insn list. If a `define_expand' is used, one of three things happens, 18215 based on the condition logic. The condition logic may manually create 18216 new insns for the insn list, say via `emit_insn()', and invoke `DONE'. 18217 For certain named patterns, it may invoke `FAIL' to tell the compiler 18218 to use an alternate way of performing that task. If it invokes neither 18219 `DONE' nor `FAIL', the template given in the pattern is inserted, as if 18220 the `define_expand' were a `define_insn'. 18221 18222 Once the insn list is generated, various optimization passes convert, 18223 replace, and rearrange the insns in the insn list. This is where the 18224 `define_split' and `define_peephole' patterns get used, for example. 18225 18226 Finally, the insn list's RTL is matched up with the RTL templates in 18227 the `define_insn' patterns, and those patterns are used to emit the 18228 final assembly code. For this purpose, each named `define_insn' acts 18229 like it's unnamed, since the names are ignored. 18230 18231 18232 File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 18233 18234 16.2 Everything about Instruction Patterns 18235 ========================================== 18236 18237 Each instruction pattern contains an incomplete RTL expression, with 18238 pieces to be filled in later, operand constraints that restrict how the 18239 pieces can be filled in, and an output pattern or C code to generate 18240 the assembler output, all wrapped up in a `define_insn' expression. 18241 18242 A `define_insn' is an RTL expression containing four or five operands: 18243 18244 1. An optional name. The presence of a name indicate that this 18245 instruction pattern can perform a certain standard job for the 18246 RTL-generation pass of the compiler. This pass knows certain 18247 names and will use the instruction patterns with those names, if 18248 the names are defined in the machine description. 18249 18250 The absence of a name is indicated by writing an empty string 18251 where the name should go. Nameless instruction patterns are never 18252 used for generating RTL code, but they may permit several simpler 18253 insns to be combined later on. 18254 18255 Names that are not thus known and used in RTL-generation have no 18256 effect; they are equivalent to no name at all. 18257 18258 For the purpose of debugging the compiler, you may also specify a 18259 name beginning with the `*' character. Such a name is used only 18260 for identifying the instruction in RTL dumps; it is entirely 18261 equivalent to having a nameless pattern for all other purposes. 18262 18263 2. The "RTL template" (*note RTL Template::) is a vector of incomplete 18264 RTL expressions which show what the instruction should look like. 18265 It is incomplete because it may contain `match_operand', 18266 `match_operator', and `match_dup' expressions that stand for 18267 operands of the instruction. 18268 18269 If the vector has only one element, that element is the template 18270 for the instruction pattern. If the vector has multiple elements, 18271 then the instruction pattern is a `parallel' expression containing 18272 the elements described. 18273 18274 3. A condition. This is a string which contains a C expression that 18275 is the final test to decide whether an insn body matches this 18276 pattern. 18277 18278 For a named pattern, the condition (if present) may not depend on 18279 the data in the insn being matched, but only the 18280 target-machine-type flags. The compiler needs to test these 18281 conditions during initialization in order to learn exactly which 18282 named instructions are available in a particular run. 18283 18284 For nameless patterns, the condition is applied only when matching 18285 an individual insn, and only after the insn has matched the 18286 pattern's recognition template. The insn's operands may be found 18287 in the vector `operands'. For an insn where the condition has 18288 once matched, it can't be used to control register allocation, for 18289 example by excluding certain hard registers or hard register 18290 combinations. 18291 18292 4. The "output template": a string that says how to output matching 18293 insns as assembler code. `%' in this string specifies where to 18294 substitute the value of an operand. *Note Output Template::. 18295 18296 When simple substitution isn't general enough, you can specify a 18297 piece of C code to compute the output. *Note Output Statement::. 18298 18299 5. Optionally, a vector containing the values of attributes for insns 18300 matching this pattern. *Note Insn Attributes::. 18301 18302 18303 File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 18304 18305 16.3 Example of `define_insn' 18306 ============================= 18307 18308 Here is an actual example of an instruction pattern, for the 18309 68000/68020. 18310 18311 (define_insn "tstsi" 18312 [(set (cc0) 18313 (match_operand:SI 0 "general_operand" "rm"))] 18314 "" 18315 "* 18316 { 18317 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18318 return \"tstl %0\"; 18319 return \"cmpl #0,%0\"; 18320 }") 18321 18322 This can also be written using braced strings: 18323 18324 (define_insn "tstsi" 18325 [(set (cc0) 18326 (match_operand:SI 0 "general_operand" "rm"))] 18327 "" 18328 { 18329 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18330 return "tstl %0"; 18331 return "cmpl #0,%0"; 18332 }) 18333 18334 This is an instruction that sets the condition codes based on the 18335 value of a general operand. It has no condition, so any insn whose RTL 18336 description has the form shown may be handled according to this 18337 pattern. The name `tstsi' means "test a `SImode' value" and tells the 18338 RTL generation pass that, when it is necessary to test such a value, an 18339 insn to do so can be constructed using this pattern. 18340 18341 The output control string is a piece of C code which chooses which 18342 output template to return based on the kind of operand and the specific 18343 type of CPU for which code is being generated. 18344 18345 `"rm"' is an operand constraint. Its meaning is explained below. 18346 18347 18348 File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 18349 18350 16.4 RTL Template 18351 ================= 18352 18353 The RTL template is used to define which insns match the particular 18354 pattern and how to find their operands. For named patterns, the RTL 18355 template also says how to construct an insn from specified operands. 18356 18357 Construction involves substituting specified operands into a copy of 18358 the template. Matching involves determining the values that serve as 18359 the operands in the insn being matched. Both of these activities are 18360 controlled by special expression types that direct matching and 18361 substitution of the operands. 18362 18363 `(match_operand:M N PREDICATE CONSTRAINT)' 18364 This expression is a placeholder for operand number N of the insn. 18365 When constructing an insn, operand number N will be substituted at 18366 this point. When matching an insn, whatever appears at this 18367 position in the insn will be taken as operand number N; but it 18368 must satisfy PREDICATE or this instruction pattern will not match 18369 at all. 18370 18371 Operand numbers must be chosen consecutively counting from zero in 18372 each instruction pattern. There may be only one `match_operand' 18373 expression in the pattern for each operand number. Usually 18374 operands are numbered in the order of appearance in `match_operand' 18375 expressions. In the case of a `define_expand', any operand numbers 18376 used only in `match_dup' expressions have higher values than all 18377 other operand numbers. 18378 18379 PREDICATE is a string that is the name of a function that accepts 18380 two arguments, an expression and a machine mode. *Note 18381 Predicates::. During matching, the function will be called with 18382 the putative operand as the expression and M as the mode argument 18383 (if M is not specified, `VOIDmode' will be used, which normally 18384 causes PREDICATE to accept any mode). If it returns zero, this 18385 instruction pattern fails to match. PREDICATE may be an empty 18386 string; then it means no test is to be done on the operand, so 18387 anything which occurs in this position is valid. 18388 18389 Most of the time, PREDICATE will reject modes other than M--but 18390 not always. For example, the predicate `address_operand' uses M 18391 as the mode of memory ref that the address should be valid for. 18392 Many predicates accept `const_int' nodes even though their mode is 18393 `VOIDmode'. 18394 18395 CONSTRAINT controls reloading and the choice of the best register 18396 class to use for a value, as explained later (*note Constraints::). 18397 If the constraint would be an empty string, it can be omitted. 18398 18399 People are often unclear on the difference between the constraint 18400 and the predicate. The predicate helps decide whether a given 18401 insn matches the pattern. The constraint plays no role in this 18402 decision; instead, it controls various decisions in the case of an 18403 insn which does match. 18404 18405 `(match_scratch:M N CONSTRAINT)' 18406 This expression is also a placeholder for operand number N and 18407 indicates that operand must be a `scratch' or `reg' expression. 18408 18409 When matching patterns, this is equivalent to 18410 18411 (match_operand:M N "scratch_operand" PRED) 18412 18413 but, when generating RTL, it produces a (`scratch':M) expression. 18414 18415 If the last few expressions in a `parallel' are `clobber' 18416 expressions whose operands are either a hard register or 18417 `match_scratch', the combiner can add or delete them when 18418 necessary. *Note Side Effects::. 18419 18420 `(match_dup N)' 18421 This expression is also a placeholder for operand number N. It is 18422 used when the operand needs to appear more than once in the insn. 18423 18424 In construction, `match_dup' acts just like `match_operand': the 18425 operand is substituted into the insn being constructed. But in 18426 matching, `match_dup' behaves differently. It assumes that operand 18427 number N has already been determined by a `match_operand' 18428 appearing earlier in the recognition template, and it matches only 18429 an identical-looking expression. 18430 18431 Note that `match_dup' should not be used to tell the compiler that 18432 a particular register is being used for two operands (example: 18433 `add' that adds one register to another; the second register is 18434 both an input operand and the output operand). Use a matching 18435 constraint (*note Simple Constraints::) for those. `match_dup' is 18436 for the cases where one operand is used in two places in the 18437 template, such as an instruction that computes both a quotient and 18438 a remainder, where the opcode takes two input operands but the RTL 18439 template has to refer to each of those twice; once for the 18440 quotient pattern and once for the remainder pattern. 18441 18442 `(match_operator:M N PREDICATE [OPERANDS...])' 18443 This pattern is a kind of placeholder for a variable RTL expression 18444 code. 18445 18446 When constructing an insn, it stands for an RTL expression whose 18447 expression code is taken from that of operand N, and whose 18448 operands are constructed from the patterns OPERANDS. 18449 18450 When matching an expression, it matches an expression if the 18451 function PREDICATE returns nonzero on that expression _and_ the 18452 patterns OPERANDS match the operands of the expression. 18453 18454 Suppose that the function `commutative_operator' is defined as 18455 follows, to match any expression whose operator is one of the 18456 commutative arithmetic operators of RTL and whose mode is MODE: 18457 18458 int 18459 commutative_integer_operator (x, mode) 18460 rtx x; 18461 enum machine_mode mode; 18462 { 18463 enum rtx_code code = GET_CODE (x); 18464 if (GET_MODE (x) != mode) 18465 return 0; 18466 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 18467 || code == EQ || code == NE); 18468 } 18469 18470 Then the following pattern will match any RTL expression consisting 18471 of a commutative operator applied to two general operands: 18472 18473 (match_operator:SI 3 "commutative_operator" 18474 [(match_operand:SI 1 "general_operand" "g") 18475 (match_operand:SI 2 "general_operand" "g")]) 18476 18477 Here the vector `[OPERANDS...]' contains two patterns because the 18478 expressions to be matched all contain two operands. 18479 18480 When this pattern does match, the two operands of the commutative 18481 operator are recorded as operands 1 and 2 of the insn. (This is 18482 done by the two instances of `match_operand'.) Operand 3 of the 18483 insn will be the entire commutative expression: use `GET_CODE 18484 (operands[3])' to see which commutative operator was used. 18485 18486 The machine mode M of `match_operator' works like that of 18487 `match_operand': it is passed as the second argument to the 18488 predicate function, and that function is solely responsible for 18489 deciding whether the expression to be matched "has" that mode. 18490 18491 When constructing an insn, argument 3 of the gen-function will 18492 specify the operation (i.e. the expression code) for the 18493 expression to be made. It should be an RTL expression, whose 18494 expression code is copied into a new expression whose operands are 18495 arguments 1 and 2 of the gen-function. The subexpressions of 18496 argument 3 are not used; only its expression code matters. 18497 18498 When `match_operator' is used in a pattern for matching an insn, 18499 it usually best if the operand number of the `match_operator' is 18500 higher than that of the actual operands of the insn. This improves 18501 register allocation because the register allocator often looks at 18502 operands 1 and 2 of insns to see if it can do register tying. 18503 18504 There is no way to specify constraints in `match_operator'. The 18505 operand of the insn which corresponds to the `match_operator' 18506 never has any constraints because it is never reloaded as a whole. 18507 However, if parts of its OPERANDS are matched by `match_operand' 18508 patterns, those parts may have constraints of their own. 18509 18510 `(match_op_dup:M N[OPERANDS...])' 18511 Like `match_dup', except that it applies to operators instead of 18512 operands. When constructing an insn, operand number N will be 18513 substituted at this point. But in matching, `match_op_dup' behaves 18514 differently. It assumes that operand number N has already been 18515 determined by a `match_operator' appearing earlier in the 18516 recognition template, and it matches only an identical-looking 18517 expression. 18518 18519 `(match_parallel N PREDICATE [SUBPAT...])' 18520 This pattern is a placeholder for an insn that consists of a 18521 `parallel' expression with a variable number of elements. This 18522 expression should only appear at the top level of an insn pattern. 18523 18524 When constructing an insn, operand number N will be substituted at 18525 this point. When matching an insn, it matches if the body of the 18526 insn is a `parallel' expression with at least as many elements as 18527 the vector of SUBPAT expressions in the `match_parallel', if each 18528 SUBPAT matches the corresponding element of the `parallel', _and_ 18529 the function PREDICATE returns nonzero on the `parallel' that is 18530 the body of the insn. It is the responsibility of the predicate 18531 to validate elements of the `parallel' beyond those listed in the 18532 `match_parallel'. 18533 18534 A typical use of `match_parallel' is to match load and store 18535 multiple expressions, which can contain a variable number of 18536 elements in a `parallel'. For example, 18537 18538 (define_insn "" 18539 [(match_parallel 0 "load_multiple_operation" 18540 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 18541 (match_operand:SI 2 "memory_operand" "m")) 18542 (use (reg:SI 179)) 18543 (clobber (reg:SI 179))])] 18544 "" 18545 "loadm 0,0,%1,%2") 18546 18547 This example comes from `a29k.md'. The function 18548 `load_multiple_operation' is defined in `a29k.c' and checks that 18549 subsequent elements in the `parallel' are the same as the `set' in 18550 the pattern, except that they are referencing subsequent registers 18551 and memory locations. 18552 18553 An insn that matches this pattern might look like: 18554 18555 (parallel 18556 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 18557 (use (reg:SI 179)) 18558 (clobber (reg:SI 179)) 18559 (set (reg:SI 21) 18560 (mem:SI (plus:SI (reg:SI 100) 18561 (const_int 4)))) 18562 (set (reg:SI 22) 18563 (mem:SI (plus:SI (reg:SI 100) 18564 (const_int 8))))]) 18565 18566 `(match_par_dup N [SUBPAT...])' 18567 Like `match_op_dup', but for `match_parallel' instead of 18568 `match_operator'. 18569 18570 18571 18572 File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 18573 18574 16.5 Output Templates and Operand Substitution 18575 ============================================== 18576 18577 The "output template" is a string which specifies how to output the 18578 assembler code for an instruction pattern. Most of the template is a 18579 fixed string which is output literally. The character `%' is used to 18580 specify where to substitute an operand; it can also be used to identify 18581 places where different variants of the assembler require different 18582 syntax. 18583 18584 In the simplest case, a `%' followed by a digit N says to output 18585 operand N at that point in the string. 18586 18587 `%' followed by a letter and a digit says to output an operand in an 18588 alternate fashion. Four letters have standard, built-in meanings 18589 described below. The machine description macro `PRINT_OPERAND' can 18590 define additional letters with nonstandard meanings. 18591 18592 `%cDIGIT' can be used to substitute an operand that is a constant 18593 value without the syntax that normally indicates an immediate operand. 18594 18595 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is 18596 negated before printing. 18597 18598 `%aDIGIT' can be used to substitute an operand as if it were a memory 18599 reference, with the actual operand treated as the address. This may be 18600 useful when outputting a "load address" instruction, because often the 18601 assembler syntax for such an instruction requires you to write the 18602 operand as if it were a memory reference. 18603 18604 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction. 18605 18606 `%=' outputs a number which is unique to each instruction in the 18607 entire compilation. This is useful for making local labels to be 18608 referred to more than once in a single template that generates multiple 18609 assembler instructions. 18610 18611 `%' followed by a punctuation character specifies a substitution that 18612 does not use an operand. Only one case is standard: `%%' outputs a `%' 18613 into the assembler code. Other nonstandard cases can be defined in the 18614 `PRINT_OPERAND' macro. You must also define which punctuation 18615 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro. 18616 18617 The template may generate multiple assembler instructions. Write the 18618 text for the instructions, with `\;' between them. 18619 18620 When the RTL contains two operands which are required by constraint to 18621 match each other, the output template must refer only to the 18622 lower-numbered operand. Matching operands are not always identical, 18623 and the rest of the compiler arranges to put the proper RTL expression 18624 for printing into the lower-numbered operand. 18625 18626 One use of nonstandard letters or punctuation following `%' is to 18627 distinguish between different assembler languages for the same machine; 18628 for example, Motorola syntax versus MIT syntax for the 68000. Motorola 18629 syntax requires periods in most opcode names, while MIT syntax does 18630 not. For example, the opcode `movel' in MIT syntax is `move.l' in 18631 Motorola syntax. The same file of patterns is used for both kinds of 18632 output syntax, but the character sequence `%.' is used in each place 18633 where Motorola syntax wants a period. The `PRINT_OPERAND' macro for 18634 Motorola syntax defines the sequence to output a period; the macro for 18635 MIT syntax defines it to do nothing. 18636 18637 As a special case, a template consisting of the single character `#' 18638 instructs the compiler to first split the insn, and then output the 18639 resulting instructions separately. This helps eliminate redundancy in 18640 the output templates. If you have a `define_insn' that needs to emit 18641 multiple assembler instructions, and there is a matching `define_split' 18642 already defined, then you can simply use `#' as the output template 18643 instead of writing an output template that emits the multiple assembler 18644 instructions. 18645 18646 If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of 18647 the form `{option0|option1|option2}' in the templates. These describe 18648 multiple variants of assembler language syntax. *Note Instruction 18649 Output::. 18650 18651 18652 File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 18653 18654 16.6 C Statements for Assembler Output 18655 ====================================== 18656 18657 Often a single fixed template string cannot produce correct and 18658 efficient assembler code for all the cases that are recognized by a 18659 single instruction pattern. For example, the opcodes may depend on the 18660 kinds of operands; or some unfortunate combinations of operands may 18661 require extra machine instructions. 18662 18663 If the output control string starts with a `@', then it is actually a 18664 series of templates, each on a separate line. (Blank lines and leading 18665 spaces and tabs are ignored.) The templates correspond to the 18666 pattern's constraint alternatives (*note Multi-Alternative::). For 18667 example, if a target machine has a two-address add instruction `addr' 18668 to add into a register and another `addm' to add a register to memory, 18669 you might write this pattern: 18670 18671 (define_insn "addsi3" 18672 [(set (match_operand:SI 0 "general_operand" "=r,m") 18673 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 18674 (match_operand:SI 2 "general_operand" "g,r")))] 18675 "" 18676 "@ 18677 addr %2,%0 18678 addm %2,%0") 18679 18680 If the output control string starts with a `*', then it is not an 18681 output template but rather a piece of C program that should compute a 18682 template. It should execute a `return' statement to return the 18683 template-string you want. Most such templates use C string literals, 18684 which require doublequote characters to delimit them. To include these 18685 doublequote characters in the string, prefix each one with `\'. 18686 18687 If the output control string is written as a brace block instead of a 18688 double-quoted string, it is automatically assumed to be C code. In that 18689 case, it is not necessary to put in a leading asterisk, or to escape the 18690 doublequotes surrounding C string literals. 18691 18692 The operands may be found in the array `operands', whose C data type 18693 is `rtx []'. 18694 18695 It is very common to select different ways of generating assembler code 18696 based on whether an immediate operand is within a certain range. Be 18697 careful when doing this, because the result of `INTVAL' is an integer 18698 on the host machine. If the host machine has more bits in an `int' 18699 than the target machine has in the mode in which the constant will be 18700 used, then some of the bits you get from `INTVAL' will be superfluous. 18701 For proper results, you must carefully disregard the values of those 18702 bits. 18703 18704 It is possible to output an assembler instruction and then go on to 18705 output or compute more of them, using the subroutine `output_asm_insn'. 18706 This receives two arguments: a template-string and a vector of 18707 operands. The vector may be `operands', or it may be another array of 18708 `rtx' that you declare locally and initialize yourself. 18709 18710 When an insn pattern has multiple alternatives in its constraints, 18711 often the appearance of the assembler code is determined mostly by 18712 which alternative was matched. When this is so, the C code can test 18713 the variable `which_alternative', which is the ordinal number of the 18714 alternative that was actually satisfied (0 for the first, 1 for the 18715 second alternative, etc.). 18716 18717 For example, suppose there are two opcodes for storing zero, `clrreg' 18718 for registers and `clrmem' for memory locations. Here is how a pattern 18719 could use `which_alternative' to choose between them: 18720 18721 (define_insn "" 18722 [(set (match_operand:SI 0 "general_operand" "=r,m") 18723 (const_int 0))] 18724 "" 18725 { 18726 return (which_alternative == 0 18727 ? "clrreg %0" : "clrmem %0"); 18728 }) 18729 18730 The example above, where the assembler code to generate was _solely_ 18731 determined by the alternative, could also have been specified as 18732 follows, having the output control string start with a `@': 18733 18734 (define_insn "" 18735 [(set (match_operand:SI 0 "general_operand" "=r,m") 18736 (const_int 0))] 18737 "" 18738 "@ 18739 clrreg %0 18740 clrmem %0") 18741 18742 If you just need a little bit of C code in one (or a few) alternatives, 18743 you can use `*' inside of a `@' multi-alternative template: 18744 18745 (define_insn "" 18746 [(set (match_operand:SI 0 "general_operand" "=r,<,m") 18747 (const_int 0))] 18748 "" 18749 "@ 18750 clrreg %0 18751 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\"; 18752 clrmem %0") 18753 18754 18755 File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 18756 18757 16.7 Predicates 18758 =============== 18759 18760 A predicate determines whether a `match_operand' or `match_operator' 18761 expression matches, and therefore whether the surrounding instruction 18762 pattern will be used for that combination of operands. GCC has a 18763 number of machine-independent predicates, and you can define 18764 machine-specific predicates as needed. By convention, predicates used 18765 with `match_operand' have names that end in `_operand', and those used 18766 with `match_operator' have names that end in `_operator'. 18767 18768 All predicates are Boolean functions (in the mathematical sense) of 18769 two arguments: the RTL expression that is being considered at that 18770 position in the instruction pattern, and the machine mode that the 18771 `match_operand' or `match_operator' specifies. In this section, the 18772 first argument is called OP and the second argument MODE. Predicates 18773 can be called from C as ordinary two-argument functions; this can be 18774 useful in output templates or other machine-specific code. 18775 18776 Operand predicates can allow operands that are not actually acceptable 18777 to the hardware, as long as the constraints give reload the ability to 18778 fix them up (*note Constraints::). However, GCC will usually generate 18779 better code if the predicates specify the requirements of the machine 18780 instructions as closely as possible. Reload cannot fix up operands 18781 that must be constants ("immediate operands"); you must use a predicate 18782 that allows only constants, or else enforce the requirement in the 18783 extra condition. 18784 18785 Most predicates handle their MODE argument in a uniform manner. If 18786 MODE is `VOIDmode' (unspecified), then OP can have any mode. If MODE 18787 is anything else, then OP must have the same mode, unless OP is a 18788 `CONST_INT' or integer `CONST_DOUBLE'. These RTL expressions always 18789 have `VOIDmode', so it would be counterproductive to check that their 18790 mode matches. Instead, predicates that accept `CONST_INT' and/or 18791 integer `CONST_DOUBLE' check that the value stored in the constant will 18792 fit in the requested mode. 18793 18794 Predicates with this behavior are called "normal". `genrecog' can 18795 optimize the instruction recognizer based on knowledge of how normal 18796 predicates treat modes. It can also diagnose certain kinds of common 18797 errors in the use of normal predicates; for instance, it is almost 18798 always an error to use a normal predicate without specifying a mode. 18799 18800 Predicates that do something different with their MODE argument are 18801 called "special". The generic predicates `address_operand' and 18802 `pmode_register_operand' are special predicates. `genrecog' does not 18803 do any optimizations or diagnosis when special predicates are used. 18804 18805 * Menu: 18806 18807 * Machine-Independent Predicates:: Predicates available to all back ends. 18808 * Defining Predicates:: How to write machine-specific predicate 18809 functions. 18810 18811 18812 File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 18813 18814 16.7.1 Machine-Independent Predicates 18815 ------------------------------------- 18816 18817 These are the generic predicates available to all back ends. They are 18818 defined in `recog.c'. The first category of predicates allow only 18819 constant, or "immediate", operands. 18820 18821 -- Function: immediate_operand 18822 This predicate allows any sort of constant that fits in MODE. It 18823 is an appropriate choice for instructions that take operands that 18824 must be constant. 18825 18826 -- Function: const_int_operand 18827 This predicate allows any `CONST_INT' expression that fits in 18828 MODE. It is an appropriate choice for an immediate operand that 18829 does not allow a symbol or label. 18830 18831 -- Function: const_double_operand 18832 This predicate accepts any `CONST_DOUBLE' expression that has 18833 exactly MODE. If MODE is `VOIDmode', it will also accept 18834 `CONST_INT'. It is intended for immediate floating point 18835 constants. 18836 18837 The second category of predicates allow only some kind of machine 18838 register. 18839 18840 -- Function: register_operand 18841 This predicate allows any `REG' or `SUBREG' expression that is 18842 valid for MODE. It is often suitable for arithmetic instruction 18843 operands on a RISC machine. 18844 18845 -- Function: pmode_register_operand 18846 This is a slight variant on `register_operand' which works around 18847 a limitation in the machine-description reader. 18848 18849 (match_operand N "pmode_register_operand" CONSTRAINT) 18850 18851 means exactly what 18852 18853 (match_operand:P N "register_operand" CONSTRAINT) 18854 18855 would mean, if the machine-description reader accepted `:P' mode 18856 suffixes. Unfortunately, it cannot, because `Pmode' is an alias 18857 for some other mode, and might vary with machine-specific options. 18858 *Note Misc::. 18859 18860 -- Function: scratch_operand 18861 This predicate allows hard registers and `SCRATCH' expressions, 18862 but not pseudo-registers. It is used internally by 18863 `match_scratch'; it should not be used directly. 18864 18865 The third category of predicates allow only some kind of memory 18866 reference. 18867 18868 -- Function: memory_operand 18869 This predicate allows any valid reference to a quantity of mode 18870 MODE in memory, as determined by the weak form of 18871 `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 18872 18873 -- Function: address_operand 18874 This predicate is a little unusual; it allows any operand that is a 18875 valid expression for the _address_ of a quantity of mode MODE, 18876 again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'. 18877 To first order, if `(mem:MODE (EXP))' is acceptable to 18878 `memory_operand', then EXP is acceptable to `address_operand'. 18879 Note that EXP does not necessarily have the mode MODE. 18880 18881 -- Function: indirect_operand 18882 This is a stricter form of `memory_operand' which allows only 18883 memory references with a `general_operand' as the address 18884 expression. New uses of this predicate are discouraged, because 18885 `general_operand' is very permissive, so it's hard to tell what an 18886 `indirect_operand' does or does not allow. If a target has 18887 different requirements for memory operands for different 18888 instructions, it is better to define target-specific predicates 18889 which enforce the hardware's requirements explicitly. 18890 18891 -- Function: push_operand 18892 This predicate allows a memory reference suitable for pushing a 18893 value onto the stack. This will be a `MEM' which refers to 18894 `stack_pointer_rtx', with a side-effect in its address expression 18895 (*note Incdec::); which one is determined by the `STACK_PUSH_CODE' 18896 macro (*note Frame Layout::). 18897 18898 -- Function: pop_operand 18899 This predicate allows a memory reference suitable for popping a 18900 value off the stack. Again, this will be a `MEM' referring to 18901 `stack_pointer_rtx', with a side-effect in its address expression. 18902 However, this time `STACK_POP_CODE' is expected. 18903 18904 The fourth category of predicates allow some combination of the above 18905 operands. 18906 18907 -- Function: nonmemory_operand 18908 This predicate allows any immediate or register operand valid for 18909 MODE. 18910 18911 -- Function: nonimmediate_operand 18912 This predicate allows any register or memory operand valid for 18913 MODE. 18914 18915 -- Function: general_operand 18916 This predicate allows any immediate, register, or memory operand 18917 valid for MODE. 18918 18919 Finally, there are two generic operator predicates. 18920 18921 -- Function: comparison_operator 18922 This predicate matches any expression which performs an arithmetic 18923 comparison in MODE; that is, `COMPARISON_P' is true for the 18924 expression code. 18925 18926 -- Function: ordered_comparison_operator 18927 This predicate matches any expression which performs an arithmetic 18928 comparison in MODE and whose expression code is valid for integer 18929 modes; that is, the expression code will be one of `eq', `ne', 18930 `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'. 18931 18932 18933 File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 18934 18935 16.7.2 Defining Machine-Specific Predicates 18936 ------------------------------------------- 18937 18938 Many machines have requirements for their operands that cannot be 18939 expressed precisely using the generic predicates. You can define 18940 additional predicates using `define_predicate' and 18941 `define_special_predicate' expressions. These expressions have three 18942 operands: 18943 18944 * The name of the predicate, as it will be referred to in 18945 `match_operand' or `match_operator' expressions. 18946 18947 * An RTL expression which evaluates to true if the predicate allows 18948 the operand OP, false if it does not. This expression can only use 18949 the following RTL codes: 18950 18951 `MATCH_OPERAND' 18952 When written inside a predicate expression, a `MATCH_OPERAND' 18953 expression evaluates to true if the predicate it names would 18954 allow OP. The operand number and constraint are ignored. 18955 Due to limitations in `genrecog', you can only refer to 18956 generic predicates and predicates that have already been 18957 defined. 18958 18959 `MATCH_CODE' 18960 This expression evaluates to true if OP or a specified 18961 subexpression of OP has one of a given list of RTX codes. 18962 18963 The first operand of this expression is a string constant 18964 containing a comma-separated list of RTX code names (in lower 18965 case). These are the codes for which the `MATCH_CODE' will 18966 be true. 18967 18968 The second operand is a string constant which indicates what 18969 subexpression of OP to examine. If it is absent or the empty 18970 string, OP itself is examined. Otherwise, the string constant 18971 must be a sequence of digits and/or lowercase letters. Each 18972 character indicates a subexpression to extract from the 18973 current expression; for the first character this is OP, for 18974 the second and subsequent characters it is the result of the 18975 previous character. A digit N extracts `XEXP (E, N)'; a 18976 letter L extracts `XVECEXP (E, 0, N)' where N is the 18977 alphabetic ordinal of L (0 for `a', 1 for 'b', and so on). 18978 The `MATCH_CODE' then examines the RTX code of the 18979 subexpression extracted by the complete string. It is not 18980 possible to extract components of an `rtvec' that is not at 18981 position 0 within its RTX object. 18982 18983 `MATCH_TEST' 18984 This expression has one operand, a string constant containing 18985 a C expression. The predicate's arguments, OP and MODE, are 18986 available with those names in the C expression. The 18987 `MATCH_TEST' evaluates to true if the C expression evaluates 18988 to a nonzero value. `MATCH_TEST' expressions must not have 18989 side effects. 18990 18991 `AND' 18992 `IOR' 18993 `NOT' 18994 `IF_THEN_ELSE' 18995 The basic `MATCH_' expressions can be combined using these 18996 logical operators, which have the semantics of the C operators 18997 `&&', `||', `!', and `? :' respectively. As in Common Lisp, 18998 you may give an `AND' or `IOR' expression an arbitrary number 18999 of arguments; this has exactly the same effect as writing a 19000 chain of two-argument `AND' or `IOR' expressions. 19001 19002 * An optional block of C code, which should execute `return true' if 19003 the predicate is found to match and `return false' if it does not. 19004 It must not have any side effects. The predicate arguments, OP 19005 and MODE, are available with those names. 19006 19007 If a code block is present in a predicate definition, then the RTL 19008 expression must evaluate to true _and_ the code block must execute 19009 `return true' for the predicate to allow the operand. The RTL 19010 expression is evaluated first; do not re-check anything in the 19011 code block that was checked in the RTL expression. 19012 19013 The program `genrecog' scans `define_predicate' and 19014 `define_special_predicate' expressions to determine which RTX codes are 19015 possibly allowed. You should always make this explicit in the RTL 19016 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'. 19017 19018 Here is an example of a simple predicate definition, from the IA64 19019 machine description: 19020 19021 ;; True if OP is a `SYMBOL_REF' which refers to the sdata section. 19022 (define_predicate "small_addr_symbolic_operand" 19023 (and (match_code "symbol_ref") 19024 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 19025 19026 And here is another, showing the use of the C block. 19027 19028 ;; True if OP is a register operand that is (or could be) a GR reg. 19029 (define_predicate "gr_register_operand" 19030 (match_operand 0 "register_operand") 19031 { 19032 unsigned int regno; 19033 if (GET_CODE (op) == SUBREG) 19034 op = SUBREG_REG (op); 19035 19036 regno = REGNO (op); 19037 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 19038 }) 19039 19040 Predicates written with `define_predicate' automatically include a 19041 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is 19042 a `CONST_INT' or `CONST_DOUBLE'. They do _not_ check specifically for 19043 integer `CONST_DOUBLE', nor do they test that the value of either kind 19044 of constant fits in the requested mode. This is because 19045 target-specific predicates that take constants usually have to do more 19046 stringent value checks anyway. If you need the exact same treatment of 19047 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use 19048 a `MATCH_OPERAND' subexpression to call `const_int_operand', 19049 `const_double_operand', or `immediate_operand'. 19050 19051 Predicates written with `define_special_predicate' do not get any 19052 automatic mode checks, and are treated as having special mode handling 19053 by `genrecog'. 19054 19055 The program `genpreds' is responsible for generating code to test 19056 predicates. It also writes a header file containing function 19057 declarations for all machine-specific predicates. It is not necessary 19058 to declare these predicates in `CPU-protos.h'. 19059 19060 19061 File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 19062 19063 16.8 Operand Constraints 19064 ======================== 19065 19066 Each `match_operand' in an instruction pattern can specify constraints 19067 for the operands allowed. The constraints allow you to fine-tune 19068 matching within the set of operands allowed by the predicate. 19069 19070 Constraints can say whether an operand may be in a register, and which 19071 kinds of register; whether the operand can be a memory reference, and 19072 which kinds of address; whether the operand may be an immediate 19073 constant, and which possible values it may have. Constraints can also 19074 require two operands to match. Side-effects aren't allowed in operands 19075 of inline `asm', unless `<' or `>' constraints are used, because there 19076 is no guarantee that the side-effects will happen exactly once in an 19077 instruction that can update the addressing register. 19078 19079 * Menu: 19080 19081 * Simple Constraints:: Basic use of constraints. 19082 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 19083 * Class Preferences:: Constraints guide which hard register to put things in. 19084 * Modifiers:: More precise control over effects of constraints. 19085 * Machine Constraints:: Existing constraints for some particular machines. 19086 * Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute. 19087 * Define Constraints:: How to define machine-specific constraints. 19088 * C Constraint Interface:: How to test constraints from C code. 19089 19090 19091 File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 19092 19093 16.8.1 Simple Constraints 19094 ------------------------- 19095 19096 The simplest kind of constraint is a string full of letters, each of 19097 which describes one kind of operand that is permitted. Here are the 19098 letters that are allowed: 19099 19100 whitespace 19101 Whitespace characters are ignored and can be inserted at any 19102 position except the first. This enables each alternative for 19103 different operands to be visually aligned in the machine 19104 description even if they have different number of constraints and 19105 modifiers. 19106 19107 `m' 19108 A memory operand is allowed, with any kind of address that the 19109 machine supports in general. Note that the letter used for the 19110 general memory constraint can be re-defined by a back end using 19111 the `TARGET_MEM_CONSTRAINT' macro. 19112 19113 `o' 19114 A memory operand is allowed, but only if the address is 19115 "offsettable". This means that adding a small integer (actually, 19116 the width in bytes of the operand, as determined by its machine 19117 mode) may be added to the address and the result is also a valid 19118 memory address. 19119 19120 For example, an address which is constant is offsettable; so is an 19121 address that is the sum of a register and a constant (as long as a 19122 slightly larger constant is also within the range of 19123 address-offsets supported by the machine); but an autoincrement or 19124 autodecrement address is not offsettable. More complicated 19125 indirect/indexed addresses may or may not be offsettable depending 19126 on the other addressing modes that the machine supports. 19127 19128 Note that in an output operand which can be matched by another 19129 operand, the constraint letter `o' is valid only when accompanied 19130 by both `<' (if the target machine has predecrement addressing) 19131 and `>' (if the target machine has preincrement addressing). 19132 19133 `V' 19134 A memory operand that is not offsettable. In other words, 19135 anything that would fit the `m' constraint but not the `o' 19136 constraint. 19137 19138 `<' 19139 A memory operand with autodecrement addressing (either 19140 predecrement or postdecrement) is allowed. In inline `asm' this 19141 constraint is only allowed if the operand is used exactly once in 19142 an instruction that can handle the side-effects. Not using an 19143 operand with `<' in constraint string in the inline `asm' pattern 19144 at all or using it in multiple instructions isn't valid, because 19145 the side-effects wouldn't be performed or would be performed more 19146 than once. Furthermore, on some targets the operand with `<' in 19147 constraint string must be accompanied by special instruction 19148 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 19149 IA-64. 19150 19151 `>' 19152 A memory operand with autoincrement addressing (either 19153 preincrement or postincrement) is allowed. In inline `asm' the 19154 same restrictions as for `<' apply. 19155 19156 `r' 19157 A register operand is allowed provided that it is in a general 19158 register. 19159 19160 `i' 19161 An immediate integer operand (one with constant value) is allowed. 19162 This includes symbolic constants whose values will be known only at 19163 assembly time or later. 19164 19165 `n' 19166 An immediate integer operand with a known numeric value is allowed. 19167 Many systems cannot support assembly-time constants for operands 19168 less than a word wide. Constraints for these operands should use 19169 `n' rather than `i'. 19170 19171 `I', `J', `K', ... `P' 19172 Other letters in the range `I' through `P' may be defined in a 19173 machine-dependent fashion to permit immediate integer operands with 19174 explicit integer values in specified ranges. For example, on the 19175 68000, `I' is defined to stand for the range of values 1 to 8. 19176 This is the range permitted as a shift count in the shift 19177 instructions. 19178 19179 `E' 19180 An immediate floating operand (expression code `const_double') is 19181 allowed, but only if the target floating point format is the same 19182 as that of the host machine (on which the compiler is running). 19183 19184 `F' 19185 An immediate floating operand (expression code `const_double' or 19186 `const_vector') is allowed. 19187 19188 `G', `H' 19189 `G' and `H' may be defined in a machine-dependent fashion to 19190 permit immediate floating operands in particular ranges of values. 19191 19192 `s' 19193 An immediate integer operand whose value is not an explicit 19194 integer is allowed. 19195 19196 This might appear strange; if an insn allows a constant operand 19197 with a value not known at compile time, it certainly must allow 19198 any known value. So why use `s' instead of `i'? Sometimes it 19199 allows better code to be generated. 19200 19201 For example, on the 68000 in a fullword instruction it is possible 19202 to use an immediate operand; but if the immediate value is between 19203 -128 and 127, better code results from loading the value into a 19204 register and using the register. This is because the load into 19205 the register can be done with a `moveq' instruction. We arrange 19206 for this to happen by defining the letter `K' to mean "any integer 19207 outside the range -128 to 127", and then specifying `Ks' in the 19208 operand constraints. 19209 19210 `g' 19211 Any register, memory or immediate integer operand is allowed, 19212 except for registers that are not general registers. 19213 19214 `X' 19215 Any operand whatsoever is allowed, even if it does not satisfy 19216 `general_operand'. This is normally used in the constraint of a 19217 `match_scratch' when certain alternatives will not actually 19218 require a scratch register. 19219 19220 `0', `1', `2', ... `9' 19221 An operand that matches the specified operand number is allowed. 19222 If a digit is used together with letters within the same 19223 alternative, the digit should come last. 19224 19225 This number is allowed to be more than a single digit. If multiple 19226 digits are encountered consecutively, they are interpreted as a 19227 single decimal integer. There is scant chance for ambiguity, 19228 since to-date it has never been desirable that `10' be interpreted 19229 as matching either operand 1 _or_ operand 0. Should this be 19230 desired, one can use multiple alternatives instead. 19231 19232 This is called a "matching constraint" and what it really means is 19233 that the assembler has only a single operand that fills two roles 19234 considered separate in the RTL insn. For example, an add insn has 19235 two input operands and one output operand in the RTL, but on most 19236 CISC machines an add instruction really has only two operands, one 19237 of them an input-output operand: 19238 19239 addl #35,r12 19240 19241 Matching constraints are used in these circumstances. More 19242 precisely, the two operands that match must include one input-only 19243 operand and one output-only operand. Moreover, the digit must be a 19244 smaller number than the number of the operand that uses it in the 19245 constraint. 19246 19247 For operands to match in a particular case usually means that they 19248 are identical-looking RTL expressions. But in a few special cases 19249 specific kinds of dissimilarity are allowed. For example, `*x' as 19250 an input operand will match `*x++' as an output operand. For 19251 proper results in such cases, the output template should always 19252 use the output-operand's number when printing the operand. 19253 19254 `p' 19255 An operand that is a valid memory address is allowed. This is for 19256 "load address" and "push address" instructions. 19257 19258 `p' in the constraint must be accompanied by `address_operand' as 19259 the predicate in the `match_operand'. This predicate interprets 19260 the mode specified in the `match_operand' as the mode of the memory 19261 reference for which the address would be valid. 19262 19263 OTHER-LETTERS 19264 Other letters can be defined in machine-dependent fashion to stand 19265 for particular classes of registers or other arbitrary operand 19266 types. `d', `a' and `f' are defined on the 68000/68020 to stand 19267 for data, address and floating point registers. 19268 19269 In order to have valid assembler code, each operand must satisfy its 19270 constraint. But a failure to do so does not prevent the pattern from 19271 applying to an insn. Instead, it directs the compiler to modify the 19272 code so that the constraint will be satisfied. Usually this is done by 19273 copying an operand into a register. 19274 19275 Contrast, therefore, the two instruction patterns that follow: 19276 19277 (define_insn "" 19278 [(set (match_operand:SI 0 "general_operand" "=r") 19279 (plus:SI (match_dup 0) 19280 (match_operand:SI 1 "general_operand" "r")))] 19281 "" 19282 "...") 19283 19284 which has two operands, one of which must appear in two places, and 19285 19286 (define_insn "" 19287 [(set (match_operand:SI 0 "general_operand" "=r") 19288 (plus:SI (match_operand:SI 1 "general_operand" "0") 19289 (match_operand:SI 2 "general_operand" "r")))] 19290 "" 19291 "...") 19292 19293 which has three operands, two of which are required by a constraint to 19294 be identical. If we are considering an insn of the form 19295 19296 (insn N PREV NEXT 19297 (set (reg:SI 3) 19298 (plus:SI (reg:SI 6) (reg:SI 109))) 19299 ...) 19300 19301 the first pattern would not apply at all, because this insn does not 19302 contain two identical subexpressions in the right place. The pattern 19303 would say, "That does not look like an add instruction; try other 19304 patterns". The second pattern would say, "Yes, that's an add 19305 instruction, but there is something wrong with it". It would direct 19306 the reload pass of the compiler to generate additional insns to make 19307 the constraint true. The results might look like this: 19308 19309 (insn N2 PREV N 19310 (set (reg:SI 3) (reg:SI 6)) 19311 ...) 19312 19313 (insn N N2 NEXT 19314 (set (reg:SI 3) 19315 (plus:SI (reg:SI 3) (reg:SI 109))) 19316 ...) 19317 19318 It is up to you to make sure that each operand, in each pattern, has 19319 constraints that can handle any RTL expression that could be present for 19320 that operand. (When multiple alternatives are in use, each pattern 19321 must, for each possible combination of operand expressions, have at 19322 least one alternative which can handle that combination of operands.) 19323 The constraints don't need to _allow_ any possible operand--when this is 19324 the case, they do not constrain--but they must at least point the way to 19325 reloading any possible operand so that it will fit. 19326 19327 * If the constraint accepts whatever operands the predicate permits, 19328 there is no problem: reloading is never necessary for this operand. 19329 19330 For example, an operand whose constraints permit everything except 19331 registers is safe provided its predicate rejects registers. 19332 19333 An operand whose predicate accepts only constant values is safe 19334 provided its constraints include the letter `i'. If any possible 19335 constant value is accepted, then nothing less than `i' will do; if 19336 the predicate is more selective, then the constraints may also be 19337 more selective. 19338 19339 * Any operand expression can be reloaded by copying it into a 19340 register. So if an operand's constraints allow some kind of 19341 register, it is certain to be safe. It need not permit all 19342 classes of registers; the compiler knows how to copy a register 19343 into another register of the proper class in order to make an 19344 instruction valid. 19345 19346 * A nonoffsettable memory reference can be reloaded by copying the 19347 address into a register. So if the constraint uses the letter 19348 `o', all memory references are taken care of. 19349 19350 * A constant operand can be reloaded by allocating space in memory to 19351 hold it as preinitialized data. Then the memory reference can be 19352 used in place of the constant. So if the constraint uses the 19353 letters `o' or `m', constant operands are not a problem. 19354 19355 * If the constraint permits a constant and a pseudo register used in 19356 an insn was not allocated to a hard register and is equivalent to 19357 a constant, the register will be replaced with the constant. If 19358 the predicate does not permit a constant and the insn is 19359 re-recognized for some reason, the compiler will crash. Thus the 19360 predicate must always recognize any objects allowed by the 19361 constraint. 19362 19363 If the operand's predicate can recognize registers, but the constraint 19364 does not permit them, it can make the compiler crash. When this 19365 operand happens to be a register, the reload pass will be stymied, 19366 because it does not know how to copy a register temporarily into memory. 19367 19368 If the predicate accepts a unary operator, the constraint applies to 19369 the operand. For example, the MIPS processor at ISA level 3 supports an 19370 instruction which adds two registers in `SImode' to produce a `DImode' 19371 result, but only if the registers are correctly sign extended. This 19372 predicate for the input operands accepts a `sign_extend' of an `SImode' 19373 register. Write the constraint to indicate the type of register that 19374 is required for the operand of the `sign_extend'. 19375 19376 19377 File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 19378 19379 16.8.2 Multiple Alternative Constraints 19380 --------------------------------------- 19381 19382 Sometimes a single instruction has multiple alternative sets of possible 19383 operands. For example, on the 68000, a logical-or instruction can 19384 combine register or an immediate value into memory, or it can combine 19385 any kind of operand into a register; but it cannot combine one memory 19386 location into another. 19387 19388 These constraints are represented as multiple alternatives. An 19389 alternative can be described by a series of letters for each operand. 19390 The overall constraint for an operand is made from the letters for this 19391 operand from the first alternative, a comma, the letters for this 19392 operand from the second alternative, a comma, and so on until the last 19393 alternative. Here is how it is done for fullword logical-or on the 19394 68000: 19395 19396 (define_insn "iorsi3" 19397 [(set (match_operand:SI 0 "general_operand" "=m,d") 19398 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 19399 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 19400 ...) 19401 19402 The first alternative has `m' (memory) for operand 0, `0' for operand 19403 1 (meaning it must match operand 0), and `dKs' for operand 2. The 19404 second alternative has `d' (data register) for operand 0, `0' for 19405 operand 1, and `dmKs' for operand 2. The `=' and `%' in the 19406 constraints apply to all the alternatives; their meaning is explained 19407 in the next section (*note Class Preferences::). 19408 19409 If all the operands fit any one alternative, the instruction is valid. 19410 Otherwise, for each alternative, the compiler counts how many 19411 instructions must be added to copy the operands so that that 19412 alternative applies. The alternative requiring the least copying is 19413 chosen. If two alternatives need the same amount of copying, the one 19414 that comes first is chosen. These choices can be altered with the `?' 19415 and `!' characters: 19416 19417 `?' 19418 Disparage slightly the alternative that the `?' appears in, as a 19419 choice when no alternative applies exactly. The compiler regards 19420 this alternative as one unit more costly for each `?' that appears 19421 in it. 19422 19423 `!' 19424 Disparage severely the alternative that the `!' appears in. This 19425 alternative can still be used if it fits without reloading, but if 19426 reloading is needed, some other alternative will be used. 19427 19428 When an insn pattern has multiple alternatives in its constraints, 19429 often the appearance of the assembler code is determined mostly by which 19430 alternative was matched. When this is so, the C code for writing the 19431 assembler code can use the variable `which_alternative', which is the 19432 ordinal number of the alternative that was actually satisfied (0 for 19433 the first, 1 for the second alternative, etc.). *Note Output 19434 Statement::. 19435 19436 19437 File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 19438 19439 16.8.3 Register Class Preferences 19440 --------------------------------- 19441 19442 The operand constraints have another function: they enable the compiler 19443 to decide which kind of hardware register a pseudo register is best 19444 allocated to. The compiler examines the constraints that apply to the 19445 insns that use the pseudo register, looking for the machine-dependent 19446 letters such as `d' and `a' that specify classes of registers. The 19447 pseudo register is put in whichever class gets the most "votes". The 19448 constraint letters `g' and `r' also vote: they vote in favor of a 19449 general register. The machine description says which registers are 19450 considered general. 19451 19452 Of course, on some machines all registers are equivalent, and no 19453 register classes are defined. Then none of this complexity is relevant. 19454 19455 19456 File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 19457 19458 16.8.4 Constraint Modifier Characters 19459 ------------------------------------- 19460 19461 Here are constraint modifier characters. 19462 19463 `=' 19464 Means that this operand is write-only for this instruction: the 19465 previous value is discarded and replaced by output data. 19466 19467 `+' 19468 Means that this operand is both read and written by the 19469 instruction. 19470 19471 When the compiler fixes up the operands to satisfy the constraints, 19472 it needs to know which operands are inputs to the instruction and 19473 which are outputs from it. `=' identifies an output; `+' 19474 identifies an operand that is both input and output; all other 19475 operands are assumed to be input only. 19476 19477 If you specify `=' or `+' in a constraint, you put it in the first 19478 character of the constraint string. 19479 19480 `&' 19481 Means (in a particular alternative) that this operand is an 19482 "earlyclobber" operand, which is modified before the instruction is 19483 finished using the input operands. Therefore, this operand may 19484 not lie in a register that is used as an input operand or as part 19485 of any memory address. 19486 19487 `&' applies only to the alternative in which it is written. In 19488 constraints with multiple alternatives, sometimes one alternative 19489 requires `&' while others do not. See, for example, the `movdf' 19490 insn of the 68000. 19491 19492 An input operand can be tied to an earlyclobber operand if its only 19493 use as an input occurs before the early result is written. Adding 19494 alternatives of this form often allows GCC to produce better code 19495 when only some of the inputs can be affected by the earlyclobber. 19496 See, for example, the `mulsi3' insn of the ARM. 19497 19498 `&' does not obviate the need to write `='. 19499 19500 `%' 19501 Declares the instruction to be commutative for this operand and the 19502 following operand. This means that the compiler may interchange 19503 the two operands if that is the cheapest way to make all operands 19504 fit the constraints. This is often used in patterns for addition 19505 instructions that really have only two operands: the result must 19506 go in one of the arguments. Here for example, is how the 68000 19507 halfword-add instruction is defined: 19508 19509 (define_insn "addhi3" 19510 [(set (match_operand:HI 0 "general_operand" "=m,r") 19511 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 19512 (match_operand:HI 2 "general_operand" "di,g")))] 19513 ...) 19514 GCC can only handle one commutative pair in an asm; if you use 19515 more, the compiler may fail. Note that you need not use the 19516 modifier if the two alternatives are strictly identical; this 19517 would only waste time in the reload pass. The modifier is not 19518 operational after register allocation, so the result of 19519 `define_peephole2' and `define_split's performed after reload 19520 cannot rely on `%' to make the intended insn match. 19521 19522 `#' 19523 Says that all following characters, up to the next comma, are to be 19524 ignored as a constraint. They are significant only for choosing 19525 register preferences. 19526 19527 `*' 19528 Says that the following character should be ignored when choosing 19529 register preferences. `*' has no effect on the meaning of the 19530 constraint as a constraint, and no effect on reloading. For LRA 19531 `*' additionally disparages slightly the alternative if the 19532 following character matches the operand. 19533 19534 Here is an example: the 68000 has an instruction to sign-extend a 19535 halfword in a data register, and can also sign-extend a value by 19536 copying it into an address register. While either kind of 19537 register is acceptable, the constraints on an address-register 19538 destination are less strict, so it is best if register allocation 19539 makes an address register its goal. Therefore, `*' is used so 19540 that the `d' constraint letter (for data register) is ignored when 19541 computing register preferences. 19542 19543 (define_insn "extendhisi2" 19544 [(set (match_operand:SI 0 "general_operand" "=*d,a") 19545 (sign_extend:SI 19546 (match_operand:HI 1 "general_operand" "0,g")))] 19547 ...) 19548 19549 19550 File: gccint.info, Node: Machine Constraints, Next: Disable Insn Alternatives, Prev: Modifiers, Up: Constraints 19551 19552 16.8.5 Constraints for Particular Machines 19553 ------------------------------------------ 19554 19555 Whenever possible, you should use the general-purpose constraint letters 19556 in `asm' arguments, since they will convey meaning more readily to 19557 people reading your code. Failing that, use the constraint letters 19558 that usually have very similar meanings across architectures. The most 19559 commonly used constraints are `m' and `r' (for memory and 19560 general-purpose registers respectively; *note Simple Constraints::), and 19561 `I', usually the letter indicating the most common immediate-constant 19562 format. 19563 19564 Each architecture defines additional constraints. These constraints 19565 are used by the compiler itself for instruction generation, as well as 19566 for `asm' statements; therefore, some of the constraints are not 19567 particularly useful for `asm'. Here is a summary of some of the 19568 machine-dependent constraints available on some particular machines; it 19569 includes both constraints that are useful for `asm' and constraints 19570 that aren't. The compiler source file mentioned in the table heading 19571 for each architecture is the definitive reference for the meanings of 19572 that architecture's constraints. 19573 19574 _AArch64 family--`config/aarch64/constraints.md'_ 19575 19576 `k' 19577 The stack pointer register (`SP') 19578 19579 `w' 19580 Floating point or SIMD vector register 19581 19582 `I' 19583 Integer constant that is valid as an immediate operand in an 19584 `ADD' instruction 19585 19586 `J' 19587 Integer constant that is valid as an immediate operand in a 19588 `SUB' instruction (once negated) 19589 19590 `K' 19591 Integer constant that can be used with a 32-bit logical 19592 instruction 19593 19594 `L' 19595 Integer constant that can be used with a 64-bit logical 19596 instruction 19597 19598 `M' 19599 Integer constant that is valid as an immediate operand in a 19600 32-bit `MOV' pseudo instruction. The `MOV' may be assembled 19601 to one of several different machine instructions depending on 19602 the value 19603 19604 `N' 19605 Integer constant that is valid as an immediate operand in a 19606 64-bit `MOV' pseudo instruction 19607 19608 `S' 19609 An absolute symbolic address or a label reference 19610 19611 `Y' 19612 Floating point constant zero 19613 19614 `Z' 19615 Integer constant zero 19616 19617 `Usa' 19618 An absolute symbolic address 19619 19620 `Ush' 19621 The high part (bits 12 and upwards) of the pc-relative 19622 address of a symbol within 4GB of the instruction 19623 19624 `Q' 19625 A memory address which uses a single base register with no 19626 offset 19627 19628 `Ump' 19629 A memory address suitable for a load/store pair instruction 19630 in SI, DI, SF and DF modes 19631 19632 19633 _ARM family--`config/arm/constraints.md'_ 19634 19635 `w' 19636 VFP floating-point register 19637 19638 `G' 19639 The floating-point constant 0.0 19640 19641 `I' 19642 Integer that is valid as an immediate operand in a data 19643 processing instruction. That is, an integer in the range 0 19644 to 255 rotated by a multiple of 2 19645 19646 `J' 19647 Integer in the range -4095 to 4095 19648 19649 `K' 19650 Integer that satisfies constraint `I' when inverted (ones 19651 complement) 19652 19653 `L' 19654 Integer that satisfies constraint `I' when negated (twos 19655 complement) 19656 19657 `M' 19658 Integer in the range 0 to 32 19659 19660 `Q' 19661 A memory reference where the exact address is in a single 19662 register (``m'' is preferable for `asm' statements) 19663 19664 `R' 19665 An item in the constant pool 19666 19667 `S' 19668 A symbol in the text segment of the current file 19669 19670 `Uv' 19671 A memory reference suitable for VFP load/store insns 19672 (reg+constant offset) 19673 19674 `Uy' 19675 A memory reference suitable for iWMMXt load/store 19676 instructions. 19677 19678 `Uq' 19679 A memory reference suitable for the ARMv4 ldrsb instruction. 19680 19681 _AVR family--`config/avr/constraints.md'_ 19682 19683 `l' 19684 Registers from r0 to r15 19685 19686 `a' 19687 Registers from r16 to r23 19688 19689 `d' 19690 Registers from r16 to r31 19691 19692 `w' 19693 Registers from r24 to r31. These registers can be used in 19694 `adiw' command 19695 19696 `e' 19697 Pointer register (r26-r31) 19698 19699 `b' 19700 Base pointer register (r28-r31) 19701 19702 `q' 19703 Stack pointer register (SPH:SPL) 19704 19705 `t' 19706 Temporary register r0 19707 19708 `x' 19709 Register pair X (r27:r26) 19710 19711 `y' 19712 Register pair Y (r29:r28) 19713 19714 `z' 19715 Register pair Z (r31:r30) 19716 19717 `I' 19718 Constant greater than -1, less than 64 19719 19720 `J' 19721 Constant greater than -64, less than 1 19722 19723 `K' 19724 Constant integer 2 19725 19726 `L' 19727 Constant integer 0 19728 19729 `M' 19730 Constant that fits in 8 bits 19731 19732 `N' 19733 Constant integer -1 19734 19735 `O' 19736 Constant integer 8, 16, or 24 19737 19738 `P' 19739 Constant integer 1 19740 19741 `G' 19742 A floating point constant 0.0 19743 19744 `Q' 19745 A memory address based on Y or Z pointer with displacement. 19746 19747 _Epiphany--`config/epiphany/constraints.md'_ 19748 19749 `U16' 19750 An unsigned 16-bit constant. 19751 19752 `K' 19753 An unsigned 5-bit constant. 19754 19755 `L' 19756 A signed 11-bit constant. 19757 19758 `Cm1' 19759 A signed 11-bit constant added to -1. Can only match when 19760 the `-m1reg-REG' option is active. 19761 19762 `Cl1' 19763 Left-shift of -1, i.e., a bit mask with a block of leading 19764 ones, the rest being a block of trailing zeroes. Can only 19765 match when the `-m1reg-REG' option is active. 19766 19767 `Cr1' 19768 Right-shift of -1, i.e., a bit mask with a trailing block of 19769 ones, the rest being zeroes. Or to put it another way, one 19770 less than a power of two. Can only match when the 19771 `-m1reg-REG' option is active. 19772 19773 `Cal' 19774 Constant for arithmetic/logical operations. This is like 19775 `i', except that for position independent code, no symbols / 19776 expressions needing relocations are allowed. 19777 19778 `Csy' 19779 Symbolic constant for call/jump instruction. 19780 19781 `Rcs' 19782 The register class usable in short insns. This is a register 19783 class constraint, and can thus drive register allocation. 19784 This constraint won't match unless `-mprefer-short-insn-regs' 19785 is in effect. 19786 19787 `Rsc' 19788 The the register class of registers that can be used to hold a 19789 sibcall call address. I.e., a caller-saved register. 19790 19791 `Rct' 19792 Core control register class. 19793 19794 `Rgs' 19795 The register group usable in short insns. This constraint 19796 does not use a register class, so that it only passively 19797 matches suitable registers, and doesn't drive register 19798 allocation. 19799 19800 `Car' 19801 Constant suitable for the addsi3_r pattern. This is a valid 19802 offset For byte, halfword, or word addressing. 19803 19804 `Rra' 19805 Matches the return address if it can be replaced with the 19806 link register. 19807 19808 `Rcc' 19809 Matches the integer condition code register. 19810 19811 `Sra' 19812 Matches the return address if it is in a stack slot. 19813 19814 `Cfm' 19815 Matches control register values to switch fp mode, which are 19816 encapsulated in `UNSPEC_FP_MODE'. 19817 19818 _CR16 Architecture--`config/cr16/cr16.h'_ 19819 19820 `b' 19821 Registers from r0 to r14 (registers without stack pointer) 19822 19823 `t' 19824 Register from r0 to r11 (all 16-bit registers) 19825 19826 `p' 19827 Register from r12 to r15 (all 32-bit registers) 19828 19829 `I' 19830 Signed constant that fits in 4 bits 19831 19832 `J' 19833 Signed constant that fits in 5 bits 19834 19835 `K' 19836 Signed constant that fits in 6 bits 19837 19838 `L' 19839 Unsigned constant that fits in 4 bits 19840 19841 `M' 19842 Signed constant that fits in 32 bits 19843 19844 `N' 19845 Check for 64 bits wide constants for add/sub instructions 19846 19847 `G' 19848 Floating point constant that is legal for store immediate 19849 19850 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 19851 19852 `a' 19853 General register 1 19854 19855 `f' 19856 Floating point register 19857 19858 `q' 19859 Shift amount register 19860 19861 `x' 19862 Floating point register (deprecated) 19863 19864 `y' 19865 Upper floating point register (32-bit), floating point 19866 register (64-bit) 19867 19868 `Z' 19869 Any register 19870 19871 `I' 19872 Signed 11-bit integer constant 19873 19874 `J' 19875 Signed 14-bit integer constant 19876 19877 `K' 19878 Integer constant that can be deposited with a `zdepi' 19879 instruction 19880 19881 `L' 19882 Signed 5-bit integer constant 19883 19884 `M' 19885 Integer constant 0 19886 19887 `N' 19888 Integer constant that can be loaded with a `ldil' instruction 19889 19890 `O' 19891 Integer constant whose value plus one is a power of 2 19892 19893 `P' 19894 Integer constant that can be used for `and' operations in 19895 `depi' and `extru' instructions 19896 19897 `S' 19898 Integer constant 31 19899 19900 `U' 19901 Integer constant 63 19902 19903 `G' 19904 Floating-point constant 0.0 19905 19906 `A' 19907 A `lo_sum' data-linkage-table memory operand 19908 19909 `Q' 19910 A memory operand that can be used as the destination operand 19911 of an integer store instruction 19912 19913 `R' 19914 A scaled or unscaled indexed memory operand 19915 19916 `T' 19917 A memory operand for floating-point loads and stores 19918 19919 `W' 19920 A register indirect memory operand 19921 19922 _picoChip family--`picochip.h'_ 19923 19924 `k' 19925 Stack register. 19926 19927 `f' 19928 Pointer register. A register which can be used to access 19929 memory without supplying an offset. Any other register can 19930 be used to access memory, but will need a constant offset. 19931 In the case of the offset being zero, it is more efficient to 19932 use a pointer register, since this reduces code size. 19933 19934 `t' 19935 A twin register. A register which may be paired with an 19936 adjacent register to create a 32-bit register. 19937 19938 `a' 19939 Any absolute memory address (e.g., symbolic constant, symbolic 19940 constant + offset). 19941 19942 `I' 19943 4-bit signed integer. 19944 19945 `J' 19946 4-bit unsigned integer. 19947 19948 `K' 19949 8-bit signed integer. 19950 19951 `M' 19952 Any constant whose absolute value is no greater than 4-bits. 19953 19954 `N' 19955 10-bit signed integer 19956 19957 `O' 19958 16-bit signed integer. 19959 19960 19961 _PowerPC and IBM RS6000--`config/rs6000/constraints.md'_ 19962 19963 `b' 19964 Address base register 19965 19966 `d' 19967 Floating point register (containing 64-bit value) 19968 19969 `f' 19970 Floating point register (containing 32-bit value) 19971 19972 `v' 19973 Altivec vector register 19974 19975 `wa' 19976 Any VSX register if the -mvsx option was used or NO_REGS. 19977 19978 `wd' 19979 VSX vector register to hold vector double data or NO_REGS. 19980 19981 `wf' 19982 VSX vector register to hold vector float data or NO_REGS. 19983 19984 `wg' 19985 If `-mmfpgpr' was used, a floating point register or NO_REGS. 19986 19987 `wl' 19988 Floating point register if the LFIWAX instruction is enabled 19989 or NO_REGS. 19990 19991 `wm' 19992 VSX register if direct move instructions are enabled, or 19993 NO_REGS. 19994 19995 `wn' 19996 No register (NO_REGS). 19997 19998 `wr' 19999 General purpose register if 64-bit instructions are enabled 20000 or NO_REGS. 20001 20002 `ws' 20003 VSX vector register to hold scalar double values or NO_REGS. 20004 20005 `wt' 20006 VSX vector register to hold 128 bit integer or NO_REGS. 20007 20008 `wu' 20009 Altivec register to use for float/32-bit int loads/stores or 20010 NO_REGS. 20011 20012 `wv' 20013 Altivec register to use for double loads/stores or NO_REGS. 20014 20015 `ww' 20016 FP or VSX register to perform float operations under `-mvsx' 20017 or NO_REGS. 20018 20019 `wx' 20020 Floating point register if the STFIWX instruction is enabled 20021 or NO_REGS. 20022 20023 `wy' 20024 VSX vector register to hold scalar float values or NO_REGS. 20025 20026 `wz' 20027 Floating point register if the LFIWZX instruction is enabled 20028 or NO_REGS. 20029 20030 `wQ' 20031 A memory address that will work with the `lq' and `stq' 20032 instructions. 20033 20034 `h' 20035 `MQ', `CTR', or `LINK' register 20036 20037 `q' 20038 `MQ' register 20039 20040 `c' 20041 `CTR' register 20042 20043 `l' 20044 `LINK' register 20045 20046 `x' 20047 `CR' register (condition register) number 0 20048 20049 `y' 20050 `CR' register (condition register) 20051 20052 `z' 20053 `XER[CA]' carry bit (part of the XER register) 20054 20055 `I' 20056 Signed 16-bit constant 20057 20058 `J' 20059 Unsigned 16-bit constant shifted left 16 bits (use `L' 20060 instead for `SImode' constants) 20061 20062 `K' 20063 Unsigned 16-bit constant 20064 20065 `L' 20066 Signed 16-bit constant shifted left 16 bits 20067 20068 `M' 20069 Constant larger than 31 20070 20071 `N' 20072 Exact power of 2 20073 20074 `O' 20075 Zero 20076 20077 `P' 20078 Constant whose negation is a signed 16-bit constant 20079 20080 `G' 20081 Floating point constant that can be loaded into a register 20082 with one instruction per word 20083 20084 `H' 20085 Integer/Floating point constant that can be loaded into a 20086 register using three instructions 20087 20088 `m' 20089 Memory operand. Normally, `m' does not allow addresses that 20090 update the base register. If `<' or `>' constraint is also 20091 used, they are allowed and therefore on PowerPC targets in 20092 that case it is only safe to use `m<>' in an `asm' statement 20093 if that `asm' statement accesses the operand exactly once. 20094 The `asm' statement must also use `%U<OPNO>' as a placeholder 20095 for the "update" flag in the corresponding load or store 20096 instruction. For example: 20097 20098 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 20099 20100 is correct but: 20101 20102 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 20103 20104 is not. 20105 20106 `es' 20107 A "stable" memory operand; that is, one which does not 20108 include any automodification of the base register. This used 20109 to be useful when `m' allowed automodification of the base 20110 register, but as those are now only allowed when `<' or `>' 20111 is used, `es' is basically the same as `m' without `<' and 20112 `>'. 20113 20114 `Q' 20115 Memory operand that is an offset from a register (it is 20116 usually better to use `m' or `es' in `asm' statements) 20117 20118 `Z' 20119 Memory operand that is an indexed or indirect from a register 20120 (it is usually better to use `m' or `es' in `asm' statements) 20121 20122 `R' 20123 AIX TOC entry 20124 20125 `a' 20126 Address operand that is an indexed or indirect from a 20127 register (`p' is preferable for `asm' statements) 20128 20129 `S' 20130 Constant suitable as a 64-bit mask operand 20131 20132 `T' 20133 Constant suitable as a 32-bit mask operand 20134 20135 `U' 20136 System V Release 4 small data area reference 20137 20138 `t' 20139 AND masks that can be performed by two rldic{l, r} 20140 instructions 20141 20142 `W' 20143 Vector constant that does not require memory 20144 20145 `j' 20146 Vector constant that is all zeros. 20147 20148 20149 _Intel 386--`config/i386/constraints.md'_ 20150 20151 `R' 20152 Legacy register--the eight integer registers available on all 20153 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 20154 20155 `q' 20156 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 20157 `c', and `d'; in 64-bit mode, any integer register. 20158 20159 `Q' 20160 Any register accessible as `Rh': `a', `b', `c', and `d'. 20161 20162 `l' 20163 Any register that can be used as the index in a base+index 20164 memory access: that is, any general register except the stack 20165 pointer. 20166 20167 `a' 20168 The `a' register. 20169 20170 `b' 20171 The `b' register. 20172 20173 `c' 20174 The `c' register. 20175 20176 `d' 20177 The `d' register. 20178 20179 `S' 20180 The `si' register. 20181 20182 `D' 20183 The `di' register. 20184 20185 `A' 20186 The `a' and `d' registers. This class is used for 20187 instructions that return double word results in the `ax:dx' 20188 register pair. Single word values will be allocated either 20189 in `ax' or `dx'. For example on i386 the following 20190 implements `rdtsc': 20191 20192 unsigned long long rdtsc (void) 20193 { 20194 unsigned long long tick; 20195 __asm__ __volatile__("rdtsc":"=A"(tick)); 20196 return tick; 20197 } 20198 20199 This is not correct on x86_64 as it would allocate tick in 20200 either `ax' or `dx'. You have to use the following variant 20201 instead: 20202 20203 unsigned long long rdtsc (void) 20204 { 20205 unsigned int tickl, tickh; 20206 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 20207 return ((unsigned long long)tickh << 32)|tickl; 20208 } 20209 20210 `f' 20211 Any 80387 floating-point (stack) register. 20212 20213 `t' 20214 Top of 80387 floating-point stack (`%st(0)'). 20215 20216 `u' 20217 Second from top of 80387 floating-point stack (`%st(1)'). 20218 20219 `y' 20220 Any MMX register. 20221 20222 `x' 20223 Any SSE register. 20224 20225 `Yz' 20226 First SSE register (`%xmm0'). 20227 20228 `Y2' 20229 Any SSE register, when SSE2 is enabled. 20230 20231 `Yi' 20232 Any SSE register, when SSE2 and inter-unit moves are enabled. 20233 20234 `Ym' 20235 Any MMX register, when inter-unit moves are enabled. 20236 20237 `I' 20238 Integer constant in the range 0 ... 31, for 32-bit shifts. 20239 20240 `J' 20241 Integer constant in the range 0 ... 63, for 64-bit shifts. 20242 20243 `K' 20244 Signed 8-bit integer constant. 20245 20246 `L' 20247 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 20248 20249 `M' 20250 0, 1, 2, or 3 (shifts for the `lea' instruction). 20251 20252 `N' 20253 Unsigned 8-bit integer constant (for `in' and `out' 20254 instructions). 20255 20256 `O' 20257 Integer constant in the range 0 ... 127, for 128-bit shifts. 20258 20259 `G' 20260 Standard 80387 floating point constant. 20261 20262 `C' 20263 Standard SSE floating point constant. 20264 20265 `e' 20266 32-bit signed integer constant, or a symbolic reference known 20267 to fit that range (for immediate operands in sign-extending 20268 x86-64 instructions). 20269 20270 `Z' 20271 32-bit unsigned integer constant, or a symbolic reference 20272 known to fit that range (for immediate operands in 20273 zero-extending x86-64 instructions). 20274 20275 20276 _Intel IA-64--`config/ia64/ia64.h'_ 20277 20278 `a' 20279 General register `r0' to `r3' for `addl' instruction 20280 20281 `b' 20282 Branch register 20283 20284 `c' 20285 Predicate register (`c' as in "conditional") 20286 20287 `d' 20288 Application register residing in M-unit 20289 20290 `e' 20291 Application register residing in I-unit 20292 20293 `f' 20294 Floating-point register 20295 20296 `m' 20297 Memory operand. If used together with `<' or `>', the 20298 operand can have postincrement and postdecrement which 20299 require printing with `%Pn' on IA-64. 20300 20301 `G' 20302 Floating-point constant 0.0 or 1.0 20303 20304 `I' 20305 14-bit signed integer constant 20306 20307 `J' 20308 22-bit signed integer constant 20309 20310 `K' 20311 8-bit signed integer constant for logical instructions 20312 20313 `L' 20314 8-bit adjusted signed integer constant for compare pseudo-ops 20315 20316 `M' 20317 6-bit unsigned integer constant for shift counts 20318 20319 `N' 20320 9-bit signed integer constant for load and store 20321 postincrements 20322 20323 `O' 20324 The constant zero 20325 20326 `P' 20327 0 or -1 for `dep' instruction 20328 20329 `Q' 20330 Non-volatile memory for floating-point loads and stores 20331 20332 `R' 20333 Integer constant in the range 1 to 4 for `shladd' instruction 20334 20335 `S' 20336 Memory operand except postincrement and postdecrement. This 20337 is now roughly the same as `m' when not used together with `<' 20338 or `>'. 20339 20340 _FRV--`config/frv/frv.h'_ 20341 20342 `a' 20343 Register in the class `ACC_REGS' (`acc0' to `acc7'). 20344 20345 `b' 20346 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 20347 20348 `c' 20349 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 20350 to `icc3'). 20351 20352 `d' 20353 Register in the class `GPR_REGS' (`gr0' to `gr63'). 20354 20355 `e' 20356 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 20357 registers are excluded not in the class but through the use 20358 of a machine mode larger than 4 bytes. 20359 20360 `f' 20361 Register in the class `FPR_REGS' (`fr0' to `fr63'). 20362 20363 `h' 20364 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 20365 registers are excluded not in the class but through the use 20366 of a machine mode larger than 4 bytes. 20367 20368 `l' 20369 Register in the class `LR_REG' (the `lr' register). 20370 20371 `q' 20372 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 20373 Register numbers not divisible by 4 are excluded not in the 20374 class but through the use of a machine mode larger than 8 20375 bytes. 20376 20377 `t' 20378 Register in the class `ICC_REGS' (`icc0' to `icc3'). 20379 20380 `u' 20381 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 20382 20383 `v' 20384 Register in the class `ICR_REGS' (`cc4' to `cc7'). 20385 20386 `w' 20387 Register in the class `FCR_REGS' (`cc0' to `cc3'). 20388 20389 `x' 20390 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 20391 Register numbers not divisible by 4 are excluded not in the 20392 class but through the use of a machine mode larger than 8 20393 bytes. 20394 20395 `z' 20396 Register in the class `SPR_REGS' (`lcr' and `lr'). 20397 20398 `A' 20399 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 20400 20401 `B' 20402 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 20403 20404 `C' 20405 Register in the class `CR_REGS' (`cc0' to `cc7'). 20406 20407 `G' 20408 Floating point constant zero 20409 20410 `I' 20411 6-bit signed integer constant 20412 20413 `J' 20414 10-bit signed integer constant 20415 20416 `L' 20417 16-bit signed integer constant 20418 20419 `M' 20420 16-bit unsigned integer constant 20421 20422 `N' 20423 12-bit signed integer constant that is negative--i.e. in the 20424 range of -2048 to -1 20425 20426 `O' 20427 Constant zero 20428 20429 `P' 20430 12-bit signed integer constant that is greater than 20431 zero--i.e. in the range of 1 to 2047. 20432 20433 20434 _Blackfin family--`config/bfin/constraints.md'_ 20435 20436 `a' 20437 P register 20438 20439 `d' 20440 D register 20441 20442 `z' 20443 A call clobbered P register. 20444 20445 `qN' 20446 A single register. If N is in the range 0 to 7, the 20447 corresponding D register. If it is `A', then the register P0. 20448 20449 `D' 20450 Even-numbered D register 20451 20452 `W' 20453 Odd-numbered D register 20454 20455 `e' 20456 Accumulator register. 20457 20458 `A' 20459 Even-numbered accumulator register. 20460 20461 `B' 20462 Odd-numbered accumulator register. 20463 20464 `b' 20465 I register 20466 20467 `v' 20468 B register 20469 20470 `f' 20471 M register 20472 20473 `c' 20474 Registers used for circular buffering, i.e. I, B, or L 20475 registers. 20476 20477 `C' 20478 The CC register. 20479 20480 `t' 20481 LT0 or LT1. 20482 20483 `k' 20484 LC0 or LC1. 20485 20486 `u' 20487 LB0 or LB1. 20488 20489 `x' 20490 Any D, P, B, M, I or L register. 20491 20492 `y' 20493 Additional registers typically used only in prologues and 20494 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 20495 USP. 20496 20497 `w' 20498 Any register except accumulators or CC. 20499 20500 `Ksh' 20501 Signed 16 bit integer (in the range -32768 to 32767) 20502 20503 `Kuh' 20504 Unsigned 16 bit integer (in the range 0 to 65535) 20505 20506 `Ks7' 20507 Signed 7 bit integer (in the range -64 to 63) 20508 20509 `Ku7' 20510 Unsigned 7 bit integer (in the range 0 to 127) 20511 20512 `Ku5' 20513 Unsigned 5 bit integer (in the range 0 to 31) 20514 20515 `Ks4' 20516 Signed 4 bit integer (in the range -8 to 7) 20517 20518 `Ks3' 20519 Signed 3 bit integer (in the range -3 to 4) 20520 20521 `Ku3' 20522 Unsigned 3 bit integer (in the range 0 to 7) 20523 20524 `PN' 20525 Constant N, where N is a single-digit constant in the range 0 20526 to 4. 20527 20528 `PA' 20529 An integer equal to one of the MACFLAG_XXX constants that is 20530 suitable for use with either accumulator. 20531 20532 `PB' 20533 An integer equal to one of the MACFLAG_XXX constants that is 20534 suitable for use only with accumulator A1. 20535 20536 `M1' 20537 Constant 255. 20538 20539 `M2' 20540 Constant 65535. 20541 20542 `J' 20543 An integer constant with exactly a single bit set. 20544 20545 `L' 20546 An integer constant with all bits set except exactly one. 20547 20548 `H' 20549 20550 `Q' 20551 Any SYMBOL_REF. 20552 20553 _M32C--`config/m32c/m32c.c'_ 20554 20555 `Rsp' 20556 `Rfb' 20557 `Rsb' 20558 `$sp', `$fb', `$sb'. 20559 20560 `Rcr' 20561 Any control register, when they're 16 bits wide (nothing if 20562 control registers are 24 bits wide) 20563 20564 `Rcl' 20565 Any control register, when they're 24 bits wide. 20566 20567 `R0w' 20568 `R1w' 20569 `R2w' 20570 `R3w' 20571 $r0, $r1, $r2, $r3. 20572 20573 `R02' 20574 $r0 or $r2, or $r2r0 for 32 bit values. 20575 20576 `R13' 20577 $r1 or $r3, or $r3r1 for 32 bit values. 20578 20579 `Rdi' 20580 A register that can hold a 64 bit value. 20581 20582 `Rhl' 20583 $r0 or $r1 (registers with addressable high/low bytes) 20584 20585 `R23' 20586 $r2 or $r3 20587 20588 `Raa' 20589 Address registers 20590 20591 `Raw' 20592 Address registers when they're 16 bits wide. 20593 20594 `Ral' 20595 Address registers when they're 24 bits wide. 20596 20597 `Rqi' 20598 Registers that can hold QI values. 20599 20600 `Rad' 20601 Registers that can be used with displacements ($a0, $a1, $sb). 20602 20603 `Rsi' 20604 Registers that can hold 32 bit values. 20605 20606 `Rhi' 20607 Registers that can hold 16 bit values. 20608 20609 `Rhc' 20610 Registers chat can hold 16 bit values, including all control 20611 registers. 20612 20613 `Rra' 20614 $r0 through R1, plus $a0 and $a1. 20615 20616 `Rfl' 20617 The flags register. 20618 20619 `Rmm' 20620 The memory-based pseudo-registers $mem0 through $mem15. 20621 20622 `Rpi' 20623 Registers that can hold pointers (16 bit registers for r8c, 20624 m16c; 24 bit registers for m32cm, m32c). 20625 20626 `Rpa' 20627 Matches multiple registers in a PARALLEL to form a larger 20628 register. Used to match function return values. 20629 20630 `Is3' 20631 -8 ... 7 20632 20633 `IS1' 20634 -128 ... 127 20635 20636 `IS2' 20637 -32768 ... 32767 20638 20639 `IU2' 20640 0 ... 65535 20641 20642 `In4' 20643 -8 ... -1 or 1 ... 8 20644 20645 `In5' 20646 -16 ... -1 or 1 ... 16 20647 20648 `In6' 20649 -32 ... -1 or 1 ... 32 20650 20651 `IM2' 20652 -65536 ... -1 20653 20654 `Ilb' 20655 An 8 bit value with exactly one bit set. 20656 20657 `Ilw' 20658 A 16 bit value with exactly one bit set. 20659 20660 `Sd' 20661 The common src/dest memory addressing modes. 20662 20663 `Sa' 20664 Memory addressed using $a0 or $a1. 20665 20666 `Si' 20667 Memory addressed with immediate addresses. 20668 20669 `Ss' 20670 Memory addressed using the stack pointer ($sp). 20671 20672 `Sf' 20673 Memory addressed using the frame base register ($fb). 20674 20675 `Ss' 20676 Memory addressed using the small base register ($sb). 20677 20678 `S1' 20679 $r1h 20680 20681 _MeP--`config/mep/constraints.md'_ 20682 20683 `a' 20684 The $sp register. 20685 20686 `b' 20687 The $tp register. 20688 20689 `c' 20690 Any control register. 20691 20692 `d' 20693 Either the $hi or the $lo register. 20694 20695 `em' 20696 Coprocessor registers that can be directly loaded ($c0-$c15). 20697 20698 `ex' 20699 Coprocessor registers that can be moved to each other. 20700 20701 `er' 20702 Coprocessor registers that can be moved to core registers. 20703 20704 `h' 20705 The $hi register. 20706 20707 `j' 20708 The $rpc register. 20709 20710 `l' 20711 The $lo register. 20712 20713 `t' 20714 Registers which can be used in $tp-relative addressing. 20715 20716 `v' 20717 The $gp register. 20718 20719 `x' 20720 The coprocessor registers. 20721 20722 `y' 20723 The coprocessor control registers. 20724 20725 `z' 20726 The $0 register. 20727 20728 `A' 20729 User-defined register set A. 20730 20731 `B' 20732 User-defined register set B. 20733 20734 `C' 20735 User-defined register set C. 20736 20737 `D' 20738 User-defined register set D. 20739 20740 `I' 20741 Offsets for $gp-rel addressing. 20742 20743 `J' 20744 Constants that can be used directly with boolean insns. 20745 20746 `K' 20747 Constants that can be moved directly to registers. 20748 20749 `L' 20750 Small constants that can be added to registers. 20751 20752 `M' 20753 Long shift counts. 20754 20755 `N' 20756 Small constants that can be compared to registers. 20757 20758 `O' 20759 Constants that can be loaded into the top half of registers. 20760 20761 `S' 20762 Signed 8-bit immediates. 20763 20764 `T' 20765 Symbols encoded for $tp-rel or $gp-rel addressing. 20766 20767 `U' 20768 Non-constant addresses for loading/saving coprocessor 20769 registers. 20770 20771 `W' 20772 The top half of a symbol's value. 20773 20774 `Y' 20775 A register indirect address without offset. 20776 20777 `Z' 20778 Symbolic references to the control bus. 20779 20780 20781 _MicroBlaze--`config/microblaze/constraints.md'_ 20782 20783 `d' 20784 A general register (`r0' to `r31'). 20785 20786 `z' 20787 A status register (`rmsr', `$fcc1' to `$fcc7'). 20788 20789 20790 _MIPS--`config/mips/constraints.md'_ 20791 20792 `d' 20793 An address register. This is equivalent to `r' unless 20794 generating MIPS16 code. 20795 20796 `f' 20797 A floating-point register (if available). 20798 20799 `h' 20800 Formerly the `hi' register. This constraint is no longer 20801 supported. 20802 20803 `l' 20804 The `lo' register. Use this register to store values that are 20805 no bigger than a word. 20806 20807 `x' 20808 The concatenated `hi' and `lo' registers. Use this register 20809 to store doubleword values. 20810 20811 `c' 20812 A register suitable for use in an indirect jump. This will 20813 always be `$25' for `-mabicalls'. 20814 20815 `v' 20816 Register `$3'. Do not use this constraint in new code; it is 20817 retained only for compatibility with glibc. 20818 20819 `y' 20820 Equivalent to `r'; retained for backwards compatibility. 20821 20822 `z' 20823 A floating-point condition code register. 20824 20825 `I' 20826 A signed 16-bit constant (for arithmetic instructions). 20827 20828 `J' 20829 Integer zero. 20830 20831 `K' 20832 An unsigned 16-bit constant (for logic instructions). 20833 20834 `L' 20835 A signed 32-bit constant in which the lower 16 bits are zero. 20836 Such constants can be loaded using `lui'. 20837 20838 `M' 20839 A constant that cannot be loaded using `lui', `addiu' or 20840 `ori'. 20841 20842 `N' 20843 A constant in the range -65535 to -1 (inclusive). 20844 20845 `O' 20846 A signed 15-bit constant. 20847 20848 `P' 20849 A constant in the range 1 to 65535 (inclusive). 20850 20851 `G' 20852 Floating-point zero. 20853 20854 `R' 20855 An address that can be used in a non-macro load or store. 20856 20857 _Motorola 680x0--`config/m68k/constraints.md'_ 20858 20859 `a' 20860 Address register 20861 20862 `d' 20863 Data register 20864 20865 `f' 20866 68881 floating-point register, if available 20867 20868 `I' 20869 Integer in the range 1 to 8 20870 20871 `J' 20872 16-bit signed number 20873 20874 `K' 20875 Signed number whose magnitude is greater than 0x80 20876 20877 `L' 20878 Integer in the range -8 to -1 20879 20880 `M' 20881 Signed number whose magnitude is greater than 0x100 20882 20883 `N' 20884 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20885 20886 `O' 20887 16 (for rotate using swap) 20888 20889 `P' 20890 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20891 20892 `R' 20893 Numbers that mov3q can handle 20894 20895 `G' 20896 Floating point constant that is not a 68881 constant 20897 20898 `S' 20899 Operands that satisfy 'm' when -mpcrel is in effect 20900 20901 `T' 20902 Operands that satisfy 's' when -mpcrel is not in effect 20903 20904 `Q' 20905 Address register indirect addressing mode 20906 20907 `U' 20908 Register offset addressing 20909 20910 `W' 20911 const_call_operand 20912 20913 `Cs' 20914 symbol_ref or const 20915 20916 `Ci' 20917 const_int 20918 20919 `C0' 20920 const_int 0 20921 20922 `Cj' 20923 Range of signed numbers that don't fit in 16 bits 20924 20925 `Cmvq' 20926 Integers valid for mvq 20927 20928 `Capsw' 20929 Integers valid for a moveq followed by a swap 20930 20931 `Cmvz' 20932 Integers valid for mvz 20933 20934 `Cmvs' 20935 Integers valid for mvs 20936 20937 `Ap' 20938 push_operand 20939 20940 `Ac' 20941 Non-register operands allowed in clr 20942 20943 20944 _Moxie--`config/moxie/constraints.md'_ 20945 20946 `A' 20947 An absolute address 20948 20949 `B' 20950 An offset address 20951 20952 `W' 20953 A register indirect memory operand 20954 20955 `I' 20956 A constant in the range of 0 to 255. 20957 20958 `N' 20959 A constant in the range of 0 to -255. 20960 20961 20962 _PDP-11--`config/pdp11/constraints.md'_ 20963 20964 `a' 20965 Floating point registers AC0 through AC3. These can be 20966 loaded from/to memory with a single instruction. 20967 20968 `d' 20969 Odd numbered general registers (R1, R3, R5). These are used 20970 for 16-bit multiply operations. 20971 20972 `f' 20973 Any of the floating point registers (AC0 through AC5). 20974 20975 `G' 20976 Floating point constant 0. 20977 20978 `I' 20979 An integer constant that fits in 16 bits. 20980 20981 `J' 20982 An integer constant whose low order 16 bits are zero. 20983 20984 `K' 20985 An integer constant that does not meet the constraints for 20986 codes `I' or `J'. 20987 20988 `L' 20989 The integer constant 1. 20990 20991 `M' 20992 The integer constant -1. 20993 20994 `N' 20995 The integer constant 0. 20996 20997 `O' 20998 Integer constants -4 through -1 and 1 through 4; shifts by 20999 these amounts are handled as multiple single-bit shifts 21000 rather than a single variable-length shift. 21001 21002 `Q' 21003 A memory reference which requires an additional word (address 21004 or offset) after the opcode. 21005 21006 `R' 21007 A memory reference that is encoded within the opcode. 21008 21009 21010 _RL78--`config/rl78/constraints.md'_ 21011 21012 `Int3' 21013 An integer constant in the range 1 ... 7. 21014 21015 `Int8' 21016 An integer constant in the range 0 ... 255. 21017 21018 `J' 21019 An integer constant in the range -255 ... 0 21020 21021 `K' 21022 The integer constant 1. 21023 21024 `L' 21025 The integer constant -1. 21026 21027 `M' 21028 The integer constant 0. 21029 21030 `N' 21031 The integer constant 2. 21032 21033 `O' 21034 The integer constant -2. 21035 21036 `P' 21037 An integer constant in the range 1 ... 15. 21038 21039 `Qbi' 21040 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 21041 21042 `Qsc' 21043 The synthetic compare types-gt, lt, ge, and le. 21044 21045 `Wab' 21046 A memory reference with an absolute address. 21047 21048 `Wbc' 21049 A memory reference using `BC' as a base register, with an 21050 optional offset. 21051 21052 `Wca' 21053 A memory reference using `AX', `BC', `DE', or `HL' for the 21054 address, for calls. 21055 21056 `Wcv' 21057 A memory reference using any 16-bit register pair for the 21058 address, for calls. 21059 21060 `Wd2' 21061 A memory reference using `DE' as a base register, with an 21062 optional offset. 21063 21064 `Wde' 21065 A memory reference using `DE' as a base register, without any 21066 offset. 21067 21068 `Wfr' 21069 Any memory reference to an address in the far address space. 21070 21071 `Wh1' 21072 A memory reference using `HL' as a base register, with an 21073 optional one-byte offset. 21074 21075 `Whb' 21076 A memory reference using `HL' as a base register, with `B' or 21077 `C' as the index register. 21078 21079 `Whl' 21080 A memory reference using `HL' as a base register, without any 21081 offset. 21082 21083 `Ws1' 21084 A memory reference using `SP' as a base register, with an 21085 optional one-byte offset. 21086 21087 `Y' 21088 Any memory reference to an address in the near address space. 21089 21090 `A' 21091 The `AX' register. 21092 21093 `B' 21094 The `BC' register. 21095 21096 `D' 21097 The `DE' register. 21098 21099 `R' 21100 `A' through `L' registers. 21101 21102 `S' 21103 The `SP' register. 21104 21105 `T' 21106 The `HL' register. 21107 21108 `Z08W' 21109 The 16-bit `R8' register. 21110 21111 `Z10W' 21112 The 16-bit `R10' register. 21113 21114 `Zint' 21115 The registers reserved for interrupts (`R24' to `R31'). 21116 21117 `a' 21118 The `A' register. 21119 21120 `b' 21121 The `B' register. 21122 21123 `c' 21124 The `C' register. 21125 21126 `d' 21127 The `D' register. 21128 21129 `e' 21130 The `E' register. 21131 21132 `h' 21133 The `H' register. 21134 21135 `l' 21136 The `L' register. 21137 21138 `v' 21139 The virtual registers. 21140 21141 `w' 21142 The `PSW' register. 21143 21144 `x' 21145 The `X' register. 21146 21147 21148 _RX--`config/rx/constraints.md'_ 21149 21150 `Q' 21151 An address which does not involve register indirect 21152 addressing or pre/post increment/decrement addressing. 21153 21154 `Symbol' 21155 A symbol reference. 21156 21157 `Int08' 21158 A constant in the range -256 to 255, inclusive. 21159 21160 `Sint08' 21161 A constant in the range -128 to 127, inclusive. 21162 21163 `Sint16' 21164 A constant in the range -32768 to 32767, inclusive. 21165 21166 `Sint24' 21167 A constant in the range -8388608 to 8388607, inclusive. 21168 21169 `Uint04' 21170 A constant in the range 0 to 15, inclusive. 21171 21172 21173 _SPARC--`config/sparc/sparc.h'_ 21174 21175 `f' 21176 Floating-point register on the SPARC-V8 architecture and 21177 lower floating-point register on the SPARC-V9 architecture. 21178 21179 `e' 21180 Floating-point register. It is equivalent to `f' on the 21181 SPARC-V8 architecture and contains both lower and upper 21182 floating-point registers on the SPARC-V9 architecture. 21183 21184 `c' 21185 Floating-point condition code register. 21186 21187 `d' 21188 Lower floating-point register. It is only valid on the 21189 SPARC-V9 architecture when the Visual Instruction Set is 21190 available. 21191 21192 `b' 21193 Floating-point register. It is only valid on the SPARC-V9 21194 architecture when the Visual Instruction Set is available. 21195 21196 `h' 21197 64-bit global or out register for the SPARC-V8+ architecture. 21198 21199 `C' 21200 The constant all-ones, for floating-point. 21201 21202 `A' 21203 Signed 5-bit constant 21204 21205 `D' 21206 A vector constant 21207 21208 `I' 21209 Signed 13-bit constant 21210 21211 `J' 21212 Zero 21213 21214 `K' 21215 32-bit constant with the low 12 bits clear (a constant that 21216 can be loaded with the `sethi' instruction) 21217 21218 `L' 21219 A constant in the range supported by `movcc' instructions 21220 (11-bit signed immediate) 21221 21222 `M' 21223 A constant in the range supported by `movrcc' instructions 21224 (10-bit signed immediate) 21225 21226 `N' 21227 Same as `K', except that it verifies that bits that are not 21228 in the lower 32-bit range are all zero. Must be used instead 21229 of `K' for modes wider than `SImode' 21230 21231 `O' 21232 The constant 4096 21233 21234 `G' 21235 Floating-point zero 21236 21237 `H' 21238 Signed 13-bit constant, sign-extended to 32 or 64 bits 21239 21240 `P' 21241 The constant -1 21242 21243 `Q' 21244 Floating-point constant whose integral representation can be 21245 moved into an integer register using a single sethi 21246 instruction 21247 21248 `R' 21249 Floating-point constant whose integral representation can be 21250 moved into an integer register using a single mov instruction 21251 21252 `S' 21253 Floating-point constant whose integral representation can be 21254 moved into an integer register using a high/lo_sum 21255 instruction sequence 21256 21257 `T' 21258 Memory address aligned to an 8-byte boundary 21259 21260 `U' 21261 Even register 21262 21263 `W' 21264 Memory address for `e' constraint registers 21265 21266 `w' 21267 Memory address with only a base register 21268 21269 `Y' 21270 Vector zero 21271 21272 21273 _SPU--`config/spu/spu.h'_ 21274 21275 `a' 21276 An immediate which can be loaded with the il/ila/ilh/ilhu 21277 instructions. const_int is treated as a 64 bit value. 21278 21279 `c' 21280 An immediate for and/xor/or instructions. const_int is 21281 treated as a 64 bit value. 21282 21283 `d' 21284 An immediate for the `iohl' instruction. const_int is 21285 treated as a 64 bit value. 21286 21287 `f' 21288 An immediate which can be loaded with `fsmbi'. 21289 21290 `A' 21291 An immediate which can be loaded with the il/ila/ilh/ilhu 21292 instructions. const_int is treated as a 32 bit value. 21293 21294 `B' 21295 An immediate for most arithmetic instructions. const_int is 21296 treated as a 32 bit value. 21297 21298 `C' 21299 An immediate for and/xor/or instructions. const_int is 21300 treated as a 32 bit value. 21301 21302 `D' 21303 An immediate for the `iohl' instruction. const_int is 21304 treated as a 32 bit value. 21305 21306 `I' 21307 A constant in the range [-64, 63] for shift/rotate 21308 instructions. 21309 21310 `J' 21311 An unsigned 7-bit constant for conversion/nop/channel 21312 instructions. 21313 21314 `K' 21315 A signed 10-bit constant for most arithmetic instructions. 21316 21317 `M' 21318 A signed 16 bit immediate for `stop'. 21319 21320 `N' 21321 An unsigned 16-bit constant for `iohl' and `fsmbi'. 21322 21323 `O' 21324 An unsigned 7-bit constant whose 3 least significant bits are 21325 0. 21326 21327 `P' 21328 An unsigned 3-bit constant for 16-byte rotates and shifts 21329 21330 `R' 21331 Call operand, reg, for indirect calls 21332 21333 `S' 21334 Call operand, symbol, for relative calls. 21335 21336 `T' 21337 Call operand, const_int, for absolute calls. 21338 21339 `U' 21340 An immediate which can be loaded with the il/ila/ilh/ilhu 21341 instructions. const_int is sign extended to 128 bit. 21342 21343 `W' 21344 An immediate for shift and rotate instructions. const_int is 21345 treated as a 32 bit value. 21346 21347 `Y' 21348 An immediate for and/xor/or instructions. const_int is sign 21349 extended as a 128 bit. 21350 21351 `Z' 21352 An immediate for the `iohl' instruction. const_int is sign 21353 extended to 128 bit. 21354 21355 21356 _S/390 and zSeries--`config/s390/s390.h'_ 21357 21358 `a' 21359 Address register (general purpose register except r0) 21360 21361 `c' 21362 Condition code register 21363 21364 `d' 21365 Data register (arbitrary general purpose register) 21366 21367 `f' 21368 Floating-point register 21369 21370 `I' 21371 Unsigned 8-bit constant (0-255) 21372 21373 `J' 21374 Unsigned 12-bit constant (0-4095) 21375 21376 `K' 21377 Signed 16-bit constant (-32768-32767) 21378 21379 `L' 21380 Value appropriate as displacement. 21381 `(0..4095)' 21382 for short displacement 21383 21384 `(-524288..524287)' 21385 for long displacement 21386 21387 `M' 21388 Constant integer with a value of 0x7fffffff. 21389 21390 `N' 21391 Multiple letter constraint followed by 4 parameter letters. 21392 `0..9:' 21393 number of the part counting from most to least 21394 significant 21395 21396 `H,Q:' 21397 mode of the part 21398 21399 `D,S,H:' 21400 mode of the containing operand 21401 21402 `0,F:' 21403 value of the other parts (F--all bits set) 21404 The constraint matches if the specified part of a constant 21405 has a value different from its other parts. 21406 21407 `Q' 21408 Memory reference without index register and with short 21409 displacement. 21410 21411 `R' 21412 Memory reference with index register and short displacement. 21413 21414 `S' 21415 Memory reference without index register but with long 21416 displacement. 21417 21418 `T' 21419 Memory reference with index register and long displacement. 21420 21421 `U' 21422 Pointer with short displacement. 21423 21424 `W' 21425 Pointer with long displacement. 21426 21427 `Y' 21428 Shift count operand. 21429 21430 21431 _Score family--`config/score/score.h'_ 21432 21433 `d' 21434 Registers from r0 to r32. 21435 21436 `e' 21437 Registers from r0 to r16. 21438 21439 `t' 21440 r8--r11 or r22--r27 registers. 21441 21442 `h' 21443 hi register. 21444 21445 `l' 21446 lo register. 21447 21448 `x' 21449 hi + lo register. 21450 21451 `q' 21452 cnt register. 21453 21454 `y' 21455 lcb register. 21456 21457 `z' 21458 scb register. 21459 21460 `a' 21461 cnt + lcb + scb register. 21462 21463 `c' 21464 cr0--cr15 register. 21465 21466 `b' 21467 cp1 registers. 21468 21469 `f' 21470 cp2 registers. 21471 21472 `i' 21473 cp3 registers. 21474 21475 `j' 21476 cp1 + cp2 + cp3 registers. 21477 21478 `I' 21479 High 16-bit constant (32-bit constant with 16 LSBs zero). 21480 21481 `J' 21482 Unsigned 5 bit integer (in the range 0 to 31). 21483 21484 `K' 21485 Unsigned 16 bit integer (in the range 0 to 65535). 21486 21487 `L' 21488 Signed 16 bit integer (in the range -32768 to 32767). 21489 21490 `M' 21491 Unsigned 14 bit integer (in the range 0 to 16383). 21492 21493 `N' 21494 Signed 14 bit integer (in the range -8192 to 8191). 21495 21496 `Z' 21497 Any SYMBOL_REF. 21498 21499 _Xstormy16--`config/stormy16/stormy16.h'_ 21500 21501 `a' 21502 Register r0. 21503 21504 `b' 21505 Register r1. 21506 21507 `c' 21508 Register r2. 21509 21510 `d' 21511 Register r8. 21512 21513 `e' 21514 Registers r0 through r7. 21515 21516 `t' 21517 Registers r0 and r1. 21518 21519 `y' 21520 The carry register. 21521 21522 `z' 21523 Registers r8 and r9. 21524 21525 `I' 21526 A constant between 0 and 3 inclusive. 21527 21528 `J' 21529 A constant that has exactly one bit set. 21530 21531 `K' 21532 A constant that has exactly one bit clear. 21533 21534 `L' 21535 A constant between 0 and 255 inclusive. 21536 21537 `M' 21538 A constant between -255 and 0 inclusive. 21539 21540 `N' 21541 A constant between -3 and 0 inclusive. 21542 21543 `O' 21544 A constant between 1 and 4 inclusive. 21545 21546 `P' 21547 A constant between -4 and -1 inclusive. 21548 21549 `Q' 21550 A memory reference that is a stack push. 21551 21552 `R' 21553 A memory reference that is a stack pop. 21554 21555 `S' 21556 A memory reference that refers to a constant address of known 21557 value. 21558 21559 `T' 21560 The register indicated by Rx (not implemented yet). 21561 21562 `U' 21563 A constant that is not between 2 and 15 inclusive. 21564 21565 `Z' 21566 The constant 0. 21567 21568 21569 _TI C6X family--`config/c6x/constraints.md'_ 21570 21571 `a' 21572 Register file A (A0-A31). 21573 21574 `b' 21575 Register file B (B0-B31). 21576 21577 `A' 21578 Predicate registers in register file A (A0-A2 on C64X and 21579 higher, A1 and A2 otherwise). 21580 21581 `B' 21582 Predicate registers in register file B (B0-B2). 21583 21584 `C' 21585 A call-used register in register file B (B0-B9, B16-B31). 21586 21587 `Da' 21588 Register file A, excluding predicate registers (A3-A31, plus 21589 A0 if not C64X or higher). 21590 21591 `Db' 21592 Register file B, excluding predicate registers (B3-B31). 21593 21594 `Iu4' 21595 Integer constant in the range 0 ... 15. 21596 21597 `Iu5' 21598 Integer constant in the range 0 ... 31. 21599 21600 `In5' 21601 Integer constant in the range -31 ... 0. 21602 21603 `Is5' 21604 Integer constant in the range -16 ... 15. 21605 21606 `I5x' 21607 Integer constant that can be the operand of an ADDA or a SUBA 21608 insn. 21609 21610 `IuB' 21611 Integer constant in the range 0 ... 65535. 21612 21613 `IsB' 21614 Integer constant in the range -32768 ... 32767. 21615 21616 `IsC' 21617 Integer constant in the range -2^20 ... 2^20 - 1. 21618 21619 `Jc' 21620 Integer constant that is a valid mask for the clr instruction. 21621 21622 `Js' 21623 Integer constant that is a valid mask for the set instruction. 21624 21625 `Q' 21626 Memory location with A base register. 21627 21628 `R' 21629 Memory location with B base register. 21630 21631 `S0' 21632 On C64x+ targets, a GP-relative small data reference. 21633 21634 `S1' 21635 Any kind of `SYMBOL_REF', for use in a call address. 21636 21637 `Si' 21638 Any kind of immediate operand, unless it matches the S0 21639 constraint. 21640 21641 `T' 21642 Memory location with B base register, but not using a long 21643 offset. 21644 21645 `W' 21646 A memory operand with an address that can't be used in an 21647 unaligned access. 21648 21649 `Z' 21650 Register B14 (aka DP). 21651 21652 21653 _TILE-Gx--`config/tilegx/constraints.md'_ 21654 21655 `R00' 21656 `R01' 21657 `R02' 21658 `R03' 21659 `R04' 21660 `R05' 21661 `R06' 21662 `R07' 21663 `R08' 21664 `R09' 21665 `R10' 21666 Each of these represents a register constraint for an 21667 individual register, from r0 to r10. 21668 21669 `I' 21670 Signed 8-bit integer constant. 21671 21672 `J' 21673 Signed 16-bit integer constant. 21674 21675 `K' 21676 Unsigned 16-bit integer constant. 21677 21678 `L' 21679 Integer constant that fits in one signed byte when 21680 incremented by one (-129 ... 126). 21681 21682 `m' 21683 Memory operand. If used together with `<' or `>', the 21684 operand can have postincrement which requires printing with 21685 `%In' and `%in' on TILE-Gx. For example: 21686 21687 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 21688 21689 `M' 21690 A bit mask suitable for the BFINS instruction. 21691 21692 `N' 21693 Integer constant that is a byte tiled out eight times. 21694 21695 `O' 21696 The integer zero constant. 21697 21698 `P' 21699 Integer constant that is a sign-extended byte tiled out as 21700 four shorts. 21701 21702 `Q' 21703 Integer constant that fits in one signed byte when incremented 21704 (-129 ... 126), but excluding -1. 21705 21706 `S' 21707 Integer constant that has all 1 bits consecutive and starting 21708 at bit 0. 21709 21710 `T' 21711 A 16-bit fragment of a got, tls, or pc-relative reference. 21712 21713 `U' 21714 Memory operand except postincrement. This is roughly the 21715 same as `m' when not used together with `<' or `>'. 21716 21717 `W' 21718 An 8-element vector constant with identical elements. 21719 21720 `Y' 21721 A 4-element vector constant with identical elements. 21722 21723 `Z0' 21724 The integer constant 0xffffffff. 21725 21726 `Z1' 21727 The integer constant 0xffffffff00000000. 21728 21729 21730 _TILEPro--`config/tilepro/constraints.md'_ 21731 21732 `R00' 21733 `R01' 21734 `R02' 21735 `R03' 21736 `R04' 21737 `R05' 21738 `R06' 21739 `R07' 21740 `R08' 21741 `R09' 21742 `R10' 21743 Each of these represents a register constraint for an 21744 individual register, from r0 to r10. 21745 21746 `I' 21747 Signed 8-bit integer constant. 21748 21749 `J' 21750 Signed 16-bit integer constant. 21751 21752 `K' 21753 Nonzero integer constant with low 16 bits zero. 21754 21755 `L' 21756 Integer constant that fits in one signed byte when 21757 incremented by one (-129 ... 126). 21758 21759 `m' 21760 Memory operand. If used together with `<' or `>', the 21761 operand can have postincrement which requires printing with 21762 `%In' and `%in' on TILEPro. For example: 21763 21764 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 21765 21766 `M' 21767 A bit mask suitable for the MM instruction. 21768 21769 `N' 21770 Integer constant that is a byte tiled out four times. 21771 21772 `O' 21773 The integer zero constant. 21774 21775 `P' 21776 Integer constant that is a sign-extended byte tiled out as 21777 two shorts. 21778 21779 `Q' 21780 Integer constant that fits in one signed byte when incremented 21781 (-129 ... 126), but excluding -1. 21782 21783 `T' 21784 A symbolic operand, or a 16-bit fragment of a got, tls, or 21785 pc-relative reference. 21786 21787 `U' 21788 Memory operand except postincrement. This is roughly the 21789 same as `m' when not used together with `<' or `>'. 21790 21791 `W' 21792 A 4-element vector constant with identical elements. 21793 21794 `Y' 21795 A 2-element vector constant with identical elements. 21796 21797 21798 _Xtensa--`config/xtensa/constraints.md'_ 21799 21800 `a' 21801 General-purpose 32-bit register 21802 21803 `b' 21804 One-bit boolean register 21805 21806 `A' 21807 MAC16 40-bit accumulator register 21808 21809 `I' 21810 Signed 12-bit integer constant, for use in MOVI instructions 21811 21812 `J' 21813 Signed 8-bit integer constant, for use in ADDI instructions 21814 21815 `K' 21816 Integer constant valid for BccI instructions 21817 21818 `L' 21819 Unsigned constant valid for BccUI instructions 21820 21821 21822 21823 21824 File: gccint.info, Node: Disable Insn Alternatives, Next: Define Constraints, Prev: Machine Constraints, Up: Constraints 21825 21826 16.8.6 Disable insn alternatives using the `enabled' attribute 21827 -------------------------------------------------------------- 21828 21829 The `enabled' insn attribute may be used to disable certain insn 21830 alternatives for machine-specific reasons. This is useful when adding 21831 new instructions to an existing pattern which are only available for 21832 certain cpu architecture levels as specified with the `-march=' option. 21833 21834 If an insn alternative is disabled, then it will never be used. The 21835 compiler treats the constraints for the disabled alternative as 21836 unsatisfiable. 21837 21838 In order to make use of the `enabled' attribute a back end has to add 21839 in the machine description files: 21840 21841 1. A definition of the `enabled' insn attribute. The attribute is 21842 defined as usual using the `define_attr' command. This definition 21843 should be based on other insn attributes and/or target flags. The 21844 `enabled' attribute is a numeric attribute and should evaluate to 21845 `(const_int 1)' for an enabled alternative and to `(const_int 0)' 21846 otherwise. 21847 21848 2. A definition of another insn attribute used to describe for what 21849 reason an insn alternative might be available or not. E.g. 21850 `cpu_facility' as in the example below. 21851 21852 3. An assignment for the second attribute to each insn definition 21853 combining instructions which are not all available under the same 21854 circumstances. (Note: It obviously only makes sense for 21855 definitions with more than one alternative. Otherwise the insn 21856 pattern should be disabled or enabled using the insn condition.) 21857 21858 E.g. the following two patterns could easily be merged using the 21859 `enabled' attribute: 21860 21861 21862 (define_insn "*movdi_old" 21863 [(set (match_operand:DI 0 "register_operand" "=d") 21864 (match_operand:DI 1 "register_operand" " d"))] 21865 "!TARGET_NEW" 21866 "lgr %0,%1") 21867 21868 (define_insn "*movdi_new" 21869 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 21870 (match_operand:DI 1 "register_operand" " d,d,f"))] 21871 "TARGET_NEW" 21872 "@ 21873 lgr %0,%1 21874 ldgr %0,%1 21875 lgdr %0,%1") 21876 21877 to: 21878 21879 21880 (define_insn "*movdi_combined" 21881 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 21882 (match_operand:DI 1 "register_operand" " d,d,f"))] 21883 "" 21884 "@ 21885 lgr %0,%1 21886 ldgr %0,%1 21887 lgdr %0,%1" 21888 [(set_attr "cpu_facility" "*,new,new")]) 21889 21890 with the `enabled' attribute defined like this: 21891 21892 21893 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 21894 21895 (define_attr "enabled" "" 21896 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 21897 (and (eq_attr "cpu_facility" "new") 21898 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 21899 (const_int 1)] 21900 (const_int 0))) 21901 21902 21903 File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Disable Insn Alternatives, Up: Constraints 21904 21905 16.8.7 Defining Machine-Specific Constraints 21906 -------------------------------------------- 21907 21908 Machine-specific constraints fall into two categories: register and 21909 non-register constraints. Within the latter category, constraints 21910 which allow subsets of all possible memory or address operands should 21911 be specially marked, to give `reload' more information. 21912 21913 Machine-specific constraints can be given names of arbitrary length, 21914 but they must be entirely composed of letters, digits, underscores 21915 (`_'), and angle brackets (`< >'). Like C identifiers, they must begin 21916 with a letter or underscore. 21917 21918 In order to avoid ambiguity in operand constraint strings, no 21919 constraint can have a name that begins with any other constraint's 21920 name. For example, if `x' is defined as a constraint name, `xy' may 21921 not be, and vice versa. As a consequence of this rule, no constraint 21922 may begin with one of the generic constraint letters: `E F V X g i m n 21923 o p r s'. 21924 21925 Register constraints correspond directly to register classes. *Note 21926 Register Classes::. There is thus not much flexibility in their 21927 definitions. 21928 21929 -- MD Expression: define_register_constraint name regclass docstring 21930 All three arguments are string constants. NAME is the name of the 21931 constraint, as it will appear in `match_operand' expressions. If 21932 NAME is a multi-letter constraint its length shall be the same for 21933 all constraints starting with the same letter. REGCLASS can be 21934 either the name of the corresponding register class (*note 21935 Register Classes::), or a C expression which evaluates to the 21936 appropriate register class. If it is an expression, it must have 21937 no side effects, and it cannot look at the operand. The usual use 21938 of expressions is to map some register constraints to `NO_REGS' 21939 when the register class is not available on a given 21940 subarchitecture. 21941 21942 DOCSTRING is a sentence documenting the meaning of the constraint. 21943 Docstrings are explained further below. 21944 21945 Non-register constraints are more like predicates: the constraint 21946 definition gives a Boolean expression which indicates whether the 21947 constraint matches. 21948 21949 -- MD Expression: define_constraint name docstring exp 21950 The NAME and DOCSTRING arguments are the same as for 21951 `define_register_constraint', but note that the docstring comes 21952 immediately after the name for these expressions. EXP is an RTL 21953 expression, obeying the same rules as the RTL expressions in 21954 predicate definitions. *Note Defining Predicates::, for details. 21955 If it evaluates true, the constraint matches; if it evaluates 21956 false, it doesn't. Constraint expressions should indicate which 21957 RTL codes they might match, just like predicate expressions. 21958 21959 `match_test' C expressions have access to the following variables: 21960 21961 OP 21962 The RTL object defining the operand. 21963 21964 MODE 21965 The machine mode of OP. 21966 21967 IVAL 21968 `INTVAL (OP)', if OP is a `const_int'. 21969 21970 HVAL 21971 `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'. 21972 21973 LVAL 21974 `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'. 21975 21976 RVAL 21977 `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 21978 `const_double'. 21979 21980 The *VAL variables should only be used once another piece of the 21981 expression has verified that OP is the appropriate kind of RTL 21982 object. 21983 21984 Most non-register constraints should be defined with 21985 `define_constraint'. The remaining two definition expressions are only 21986 appropriate for constraints that should be handled specially by 21987 `reload' if they fail to match. 21988 21989 -- MD Expression: define_memory_constraint name docstring exp 21990 Use this expression for constraints that match a subset of all 21991 memory operands: that is, `reload' can make them match by 21992 converting the operand to the form `(mem (reg X))', where X is a 21993 base register (from the register class specified by 21994 `BASE_REG_CLASS', *note Register Classes::). 21995 21996 For example, on the S/390, some instructions do not accept 21997 arbitrary memory references, but only those that do not make use 21998 of an index register. The constraint letter `Q' is defined to 21999 represent a memory address of this type. If `Q' is defined with 22000 `define_memory_constraint', a `Q' constraint can handle any memory 22001 operand, because `reload' knows it can simply copy the memory 22002 address into a base register if required. This is analogous to 22003 the way an `o' constraint can handle any memory operand. 22004 22005 The syntax and semantics are otherwise identical to 22006 `define_constraint'. 22007 22008 -- MD Expression: define_address_constraint name docstring exp 22009 Use this expression for constraints that match a subset of all 22010 address operands: that is, `reload' can make the constraint match 22011 by converting the operand to the form `(reg X)', again with X a 22012 base register. 22013 22014 Constraints defined with `define_address_constraint' can only be 22015 used with the `address_operand' predicate, or machine-specific 22016 predicates that work the same way. They are treated analogously to 22017 the generic `p' constraint. 22018 22019 The syntax and semantics are otherwise identical to 22020 `define_constraint'. 22021 22022 For historical reasons, names beginning with the letters `G H' are 22023 reserved for constraints that match only `const_double's, and names 22024 beginning with the letters `I J K L M N O P' are reserved for 22025 constraints that match only `const_int's. This may change in the 22026 future. For the time being, constraints with these names must be 22027 written in a stylized form, so that `genpreds' can tell you did it 22028 correctly: 22029 22030 (define_constraint "[GHIJKLMNOP]..." 22031 "DOC..." 22032 (and (match_code "const_int") ; `const_double' for G/H 22033 CONDITION...)) ; usually a `match_test' 22034 22035 It is fine to use names beginning with other letters for constraints 22036 that match `const_double's or `const_int's. 22037 22038 Each docstring in a constraint definition should be one or more 22039 complete sentences, marked up in Texinfo format. _They are currently 22040 unused._ In the future they will be copied into the GCC manual, in 22041 *note Machine Constraints::, replacing the hand-maintained tables 22042 currently found in that section. Also, in the future the compiler may 22043 use this to give more helpful diagnostics when poor choice of `asm' 22044 constraints causes a reload failure. 22045 22046 If you put the pseudo-Texinfo directive `@internal' at the beginning 22047 of a docstring, then (in the future) it will appear only in the 22048 internals manual's version of the machine-specific constraint tables. 22049 Use this for constraints that should not appear in `asm' statements. 22050 22051 22052 File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 22053 22054 16.8.8 Testing constraints from C 22055 --------------------------------- 22056 22057 It is occasionally useful to test a constraint from C code rather than 22058 implicitly via the constraint string in a `match_operand'. The 22059 generated file `tm_p.h' declares a few interfaces for working with 22060 machine-specific constraints. None of these interfaces work with the 22061 generic constraints described in *note Simple Constraints::. This may 22062 change in the future. 22063 22064 *Warning:* `tm_p.h' may declare other functions that operate on 22065 constraints, besides the ones documented here. Do not use those 22066 functions from machine-dependent code. They exist to implement the old 22067 constraint interface that machine-independent components of the 22068 compiler still expect. They will change or disappear in the future. 22069 22070 Some valid constraint names are not valid C identifiers, so there is a 22071 mangling scheme for referring to them from C. Constraint names that do 22072 not contain angle brackets or underscores are left unchanged. 22073 Underscores are doubled, each `<' is replaced with `_l', and each `>' 22074 with `_g'. Here are some examples: 22075 22076 *Original* *Mangled* 22077 `x' `x' 22078 `P42x' `P42x' 22079 `P4_x' `P4__x' 22080 `P4>x' `P4_gx' 22081 `P4>>' `P4_g_g' 22082 `P4_g>' `P4__g_g' 22083 22084 Throughout this section, the variable C is either a constraint in the 22085 abstract sense, or a constant from `enum constraint_num'; the variable 22086 M is a mangled constraint name (usually as part of a larger identifier). 22087 22088 -- Enum: constraint_num 22089 For each machine-specific constraint, there is a corresponding 22090 enumeration constant: `CONSTRAINT_' plus the mangled name of the 22091 constraint. Functions that take an `enum constraint_num' as an 22092 argument expect one of these constants. 22093 22094 Machine-independent constraints do not have associated constants. 22095 This may change in the future. 22096 22097 -- Function: inline bool satisfies_constraint_M (rtx EXP) 22098 For each machine-specific, non-register constraint M, there is one 22099 of these functions; it returns `true' if EXP satisfies the 22100 constraint. These functions are only visible if `rtl.h' was 22101 included before `tm_p.h'. 22102 22103 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 22104 C) 22105 Like the `satisfies_constraint_M' functions, but the constraint to 22106 test is given as an argument, C. If C specifies a register 22107 constraint, this function will always return `false'. 22108 22109 -- Function: enum reg_class regclass_for_constraint (enum 22110 constraint_num C) 22111 Returns the register class associated with C. If C is not a 22112 register constraint, or those registers are not available for the 22113 currently selected subtarget, returns `NO_REGS'. 22114 22115 Here is an example use of `satisfies_constraint_M'. In peephole 22116 optimizations (*note Peephole Definitions::), operand constraint 22117 strings are ignored, so if there are relevant constraints, they must be 22118 tested in the C condition. In the example, the optimization is applied 22119 if operand 2 does _not_ satisfy the `K' constraint. (This is a 22120 simplified version of a peephole definition from the i386 machine 22121 description.) 22122 22123 (define_peephole2 22124 [(match_scratch:SI 3 "r") 22125 (set (match_operand:SI 0 "register_operand" "") 22126 (mult:SI (match_operand:SI 1 "memory_operand" "") 22127 (match_operand:SI 2 "immediate_operand" "")))] 22128 22129 "!satisfies_constraint_K (operands[2])" 22130 22131 [(set (match_dup 3) (match_dup 1)) 22132 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 22133 22134 "") 22135 22136 22137 File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 22138 22139 16.9 Standard Pattern Names For Generation 22140 ========================================== 22141 22142 Here is a table of the instruction names that are meaningful in the RTL 22143 generation pass of the compiler. Giving one of these names to an 22144 instruction pattern tells the RTL generation pass that it can use the 22145 pattern to accomplish a certain task. 22146 22147 `movM' 22148 Here M stands for a two-letter machine mode name, in lowercase. 22149 This instruction pattern moves data with that machine mode from 22150 operand 1 to operand 0. For example, `movsi' moves full-word data. 22151 22152 If operand 0 is a `subreg' with mode M of a register whose own 22153 mode is wider than M, the effect of this instruction is to store 22154 the specified value in the part of the register that corresponds 22155 to mode M. Bits outside of M, but which are within the same 22156 target word as the `subreg' are undefined. Bits which are outside 22157 the target word are left unchanged. 22158 22159 This class of patterns is special in several ways. First of all, 22160 each of these names up to and including full word size _must_ be 22161 defined, because there is no other way to copy a datum from one 22162 place to another. If there are patterns accepting operands in 22163 larger modes, `movM' must be defined for integer modes of those 22164 sizes. 22165 22166 Second, these patterns are not used solely in the RTL generation 22167 pass. Even the reload pass can generate move insns to copy values 22168 from stack slots into temporary registers. When it does so, one 22169 of the operands is a hard register and the other is an operand 22170 that can need to be reloaded into a register. 22171 22172 Therefore, when given such a pair of operands, the pattern must 22173 generate RTL which needs no reloading and needs no temporary 22174 registers--no registers other than the operands. For example, if 22175 you support the pattern with a `define_expand', then in such a 22176 case the `define_expand' mustn't call `force_reg' or any other such 22177 function which might generate new pseudo registers. 22178 22179 This requirement exists even for subword modes on a RISC machine 22180 where fetching those modes from memory normally requires several 22181 insns and some temporary registers. 22182 22183 During reload a memory reference with an invalid address may be 22184 passed as an operand. Such an address will be replaced with a 22185 valid address later in the reload pass. In this case, nothing may 22186 be done with the address except to use it as it stands. If it is 22187 copied, it will not be replaced with a valid address. No attempt 22188 should be made to make such an address into a valid address and no 22189 routine (such as `change_address') that will do so may be called. 22190 Note that `general_operand' will fail when applied to such an 22191 address. 22192 22193 The global variable `reload_in_progress' (which must be explicitly 22194 declared if required) can be used to determine whether such special 22195 handling is required. 22196 22197 The variety of operands that have reloads depends on the rest of 22198 the machine description, but typically on a RISC machine these can 22199 only be pseudo registers that did not get hard registers, while on 22200 other machines explicit memory references will get optional 22201 reloads. 22202 22203 If a scratch register is required to move an object to or from 22204 memory, it can be allocated using `gen_reg_rtx' prior to life 22205 analysis. 22206 22207 If there are cases which need scratch registers during or after 22208 reload, you must provide an appropriate secondary_reload target 22209 hook. 22210 22211 The macro `can_create_pseudo_p' can be used to determine if it is 22212 unsafe to create new pseudo registers. If this variable is 22213 nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new 22214 pseudo. 22215 22216 The constraints on a `movM' must permit moving any hard register 22217 to any other hard register provided that `HARD_REGNO_MODE_OK' 22218 permits mode M in both registers and `TARGET_REGISTER_MOVE_COST' 22219 applied to their classes returns a value of 2. 22220 22221 It is obligatory to support floating point `movM' instructions 22222 into and out of any registers that can hold fixed point values, 22223 because unions and structures (which have modes `SImode' or 22224 `DImode') can be in those registers and they may have floating 22225 point members. 22226 22227 There may also be a need to support fixed point `movM' 22228 instructions in and out of floating point registers. 22229 Unfortunately, I have forgotten why this was so, and I don't know 22230 whether it is still true. If `HARD_REGNO_MODE_OK' rejects fixed 22231 point values in floating point registers, then the constraints of 22232 the fixed point `movM' instructions must be designed to avoid ever 22233 trying to reload into a floating point register. 22234 22235 `reload_inM' 22236 `reload_outM' 22237 These named patterns have been obsoleted by the target hook 22238 `secondary_reload'. 22239 22240 Like `movM', but used when a scratch register is required to move 22241 between operand 0 and operand 1. Operand 2 describes the scratch 22242 register. See the discussion of the `SECONDARY_RELOAD_CLASS' 22243 macro in *note Register Classes::. 22244 22245 There are special restrictions on the form of the `match_operand's 22246 used in these patterns. First, only the predicate for the reload 22247 operand is examined, i.e., `reload_in' examines operand 1, but not 22248 the predicates for operand 0 or 2. Second, there may be only one 22249 alternative in the constraints. Third, only a single register 22250 class letter may be used for the constraint; subsequent constraint 22251 letters are ignored. As a special exception, an empty constraint 22252 string matches the `ALL_REGS' register class. This may relieve 22253 ports of the burden of defining an `ALL_REGS' constraint letter 22254 just for these patterns. 22255 22256 `movstrictM' 22257 Like `movM' except that if operand 0 is a `subreg' with mode M of 22258 a register whose natural mode is wider, the `movstrictM' 22259 instruction is guaranteed not to alter any of the register except 22260 the part which belongs to mode M. 22261 22262 `movmisalignM' 22263 This variant of a move pattern is designed to load or store a value 22264 from a memory address that is not naturally aligned for its mode. 22265 For a store, the memory will be in operand 0; for a load, the 22266 memory will be in operand 1. The other operand is guaranteed not 22267 to be a memory, so that it's easy to tell whether this is a load 22268 or store. 22269 22270 This pattern is used by the autovectorizer, and when expanding a 22271 `MISALIGNED_INDIRECT_REF' expression. 22272 22273 `load_multiple' 22274 Load several consecutive memory locations into consecutive 22275 registers. Operand 0 is the first of the consecutive registers, 22276 operand 1 is the first memory location, and operand 2 is a 22277 constant: the number of consecutive registers. 22278 22279 Define this only if the target machine really has such an 22280 instruction; do not define this if the most efficient way of 22281 loading consecutive registers from memory is to do them one at a 22282 time. 22283 22284 On some machines, there are restrictions as to which consecutive 22285 registers can be stored into memory, such as particular starting or 22286 ending register numbers or only a range of valid counts. For those 22287 machines, use a `define_expand' (*note Expander Definitions::) and 22288 make the pattern fail if the restrictions are not met. 22289 22290 Write the generated insn as a `parallel' with elements being a 22291 `set' of one register from the appropriate memory location (you may 22292 also need `use' or `clobber' elements). Use a `match_parallel' 22293 (*note RTL Template::) to recognize the insn. See `rs6000.md' for 22294 examples of the use of this insn pattern. 22295 22296 `store_multiple' 22297 Similar to `load_multiple', but store several consecutive registers 22298 into consecutive memory locations. Operand 0 is the first of the 22299 consecutive memory locations, operand 1 is the first register, and 22300 operand 2 is a constant: the number of consecutive registers. 22301 22302 `vec_load_lanesMN' 22303 Perform an interleaved load of several vectors from memory operand 22304 1 into register operand 0. Both operands have mode M. The 22305 register operand is viewed as holding consecutive vectors of mode 22306 N, while the memory operand is a flat array that contains the same 22307 number of elements. The operation is equivalent to: 22308 22309 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22310 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22311 for (i = 0; i < c; i++) 22312 operand0[i][j] = operand1[j * c + i]; 22313 22314 For example, `vec_load_lanestiv4hi' loads 8 16-bit values from 22315 memory into a register of mode `TI'. The register contains two 22316 consecutive vectors of mode `V4HI'. 22317 22318 This pattern can only be used if: 22319 TARGET_ARRAY_MODE_SUPPORTED_P (N, C) 22320 is true. GCC assumes that, if a target supports this kind of 22321 instruction for some mode N, it also supports unaligned loads for 22322 vectors of mode N. 22323 22324 `vec_store_lanesMN' 22325 Equivalent to `vec_load_lanesMN', with the memory and register 22326 operands reversed. That is, the instruction is equivalent to: 22327 22328 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22329 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22330 for (i = 0; i < c; i++) 22331 operand0[j * c + i] = operand1[i][j]; 22332 22333 for a memory operand 0 and register operand 1. 22334 22335 `vec_setM' 22336 Set given field in the vector value. Operand 0 is the vector to 22337 modify, operand 1 is new value of field and operand 2 specify the 22338 field index. 22339 22340 `vec_extractM' 22341 Extract given field from the vector value. Operand 1 is the 22342 vector, operand 2 specify field index and operand 0 place to store 22343 value into. 22344 22345 `vec_initM' 22346 Initialize the vector to given values. Operand 0 is the vector to 22347 initialize and operand 1 is parallel containing values for 22348 individual fields. 22349 22350 `vcondMN' 22351 Output a conditional vector move. Operand 0 is the destination to 22352 receive a combination of operand 1 and operand 2, which are of 22353 mode M, dependent on the outcome of the predicate in operand 3 22354 which is a vector comparison with operands of mode N in operands 4 22355 and 5. The modes M and N should have the same size. Operand 0 22356 will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is 22357 computed by element-wise evaluation of the vector comparison with 22358 a truth value of all-ones and a false value of all-zeros. 22359 22360 `vec_permM' 22361 Output a (variable) vector permutation. Operand 0 is the 22362 destination to receive elements from operand 1 and operand 2, 22363 which are of mode M. Operand 3 is the "selector". It is an 22364 integral mode vector of the same width and number of elements as 22365 mode M. 22366 22367 The input elements are numbered from 0 in operand 1 through 2*N-1 22368 in operand 2. The elements of the selector must be computed 22369 modulo 2*N. Note that if `rtx_equal_p(operand1, operand2)', this 22370 can be implemented with just operand 1 and selector elements 22371 modulo N. 22372 22373 In order to make things easy for a number of targets, if there is 22374 no `vec_perm' pattern for mode M, but there is for mode Q where Q 22375 is a vector of `QImode' of the same width as M, the middle-end 22376 will lower the mode M `VEC_PERM_EXPR' to mode Q. 22377 22378 `vec_perm_constM' 22379 Like `vec_perm' except that the permutation is a compile-time 22380 constant. That is, operand 3, the "selector", is a `CONST_VECTOR'. 22381 22382 Some targets cannot perform a permutation with a variable selector, 22383 but can efficiently perform a constant permutation. Further, the 22384 target hook `vec_perm_ok' is queried to determine if the specific 22385 constant permutation is available efficiently; the named pattern 22386 is never expanded without `vec_perm_ok' returning true. 22387 22388 There is no need for a target to supply both `vec_permM' and 22389 `vec_perm_constM' if the former can trivially implement the 22390 operation with, say, the vector constant loaded into a register. 22391 22392 `pushM1' 22393 Output a push instruction. Operand 0 is value to push. Used only 22394 when `PUSH_ROUNDING' is defined. For historical reason, this 22395 pattern may be missing and in such case an `mov' expander is used 22396 instead, with a `MEM' expression forming the push operation. The 22397 `mov' expander method is deprecated. 22398 22399 `addM3' 22400 Add operand 2 and operand 1, storing the result in operand 0. All 22401 operands must have mode M. This can be used even on two-address 22402 machines, by means of constraints requiring operands 1 and 0 to be 22403 the same location. 22404 22405 `ssaddM3', `usaddM3' 22406 `subM3', `sssubM3', `ussubM3' 22407 `mulM3', `ssmulM3', `usmulM3' 22408 `divM3', `ssdivM3' 22409 `udivM3', `usdivM3' 22410 `modM3', `umodM3' 22411 `uminM3', `umaxM3' 22412 `andM3', `iorM3', `xorM3' 22413 Similar, for other arithmetic operations. 22414 22415 `fmaM4' 22416 Multiply operand 2 and operand 1, then add operand 3, storing the 22417 result in operand 0 without doing an intermediate rounding step. 22418 All operands must have mode M. This pattern is used to implement 22419 the `fma', `fmaf', and `fmal' builtin functions from the ISO C99 22420 standard. 22421 22422 `fmsM4' 22423 Like `fmaM4', except operand 3 subtracted from the product instead 22424 of added to the product. This is represented in the rtl as 22425 22426 (fma:M OP1 OP2 (neg:M OP3)) 22427 22428 `fnmaM4' 22429 Like `fmaM4' except that the intermediate product is negated 22430 before being added to operand 3. This is represented in the rtl as 22431 22432 (fma:M (neg:M OP1) OP2 OP3) 22433 22434 `fnmsM4' 22435 Like `fmsM4' except that the intermediate product is negated 22436 before subtracting operand 3. This is represented in the rtl as 22437 22438 (fma:M (neg:M OP1) OP2 (neg:M OP3)) 22439 22440 `sminM3', `smaxM3' 22441 Signed minimum and maximum operations. When used with floating 22442 point, if both operands are zeros, or if either operand is `NaN', 22443 then it is unspecified which of the two operands is returned as 22444 the result. 22445 22446 `reduc_smin_M', `reduc_smax_M' 22447 Find the signed minimum/maximum of the elements of a vector. The 22448 vector is operand 1, and the scalar result is stored in the least 22449 significant bits of operand 0 (also a vector). The output and 22450 input vector should have the same modes. 22451 22452 `reduc_umin_M', `reduc_umax_M' 22453 Find the unsigned minimum/maximum of the elements of a vector. The 22454 vector is operand 1, and the scalar result is stored in the least 22455 significant bits of operand 0 (also a vector). The output and 22456 input vector should have the same modes. 22457 22458 `reduc_splus_M' 22459 Compute the sum of the signed elements of a vector. The vector is 22460 operand 1, and the scalar result is stored in the least 22461 significant bits of operand 0 (also a vector). The output and 22462 input vector should have the same modes. 22463 22464 `reduc_uplus_M' 22465 Compute the sum of the unsigned elements of a vector. The vector 22466 is operand 1, and the scalar result is stored in the least 22467 significant bits of operand 0 (also a vector). The output and 22468 input vector should have the same modes. 22469 22470 `sdot_prodM' 22471 22472 `udot_prodM' 22473 Compute the sum of the products of two signed/unsigned elements. 22474 Operand 1 and operand 2 are of the same mode. Their product, which 22475 is of a wider mode, is computed and added to operand 3. Operand 3 22476 is of a mode equal or wider than the mode of the product. The 22477 result is placed in operand 0, which is of the same mode as 22478 operand 3. 22479 22480 `ssum_widenM3' 22481 22482 `usum_widenM3' 22483 Operands 0 and 2 are of the same mode, which is wider than the 22484 mode of operand 1. Add operand 1 to operand 2 and place the 22485 widened result in operand 0. (This is used express accumulation of 22486 elements into an accumulator of a wider mode.) 22487 22488 `vec_shl_M', `vec_shr_M' 22489 Whole vector left/right shift in bits. Operand 1 is a vector to 22490 be shifted. Operand 2 is an integer shift amount in bits. 22491 Operand 0 is where the resulting shifted vector is stored. The 22492 output and input vectors should have the same modes. 22493 22494 `vec_pack_trunc_M' 22495 Narrow (demote) and merge the elements of two vectors. Operands 1 22496 and 2 are vectors of the same mode having N integral or floating 22497 point elements of size S. Operand 0 is the resulting vector in 22498 which 2*N elements of size N/2 are concatenated after narrowing 22499 them down using truncation. 22500 22501 `vec_pack_ssat_M', `vec_pack_usat_M' 22502 Narrow (demote) and merge the elements of two vectors. Operands 1 22503 and 2 are vectors of the same mode having N integral elements of 22504 size S. Operand 0 is the resulting vector in which the elements 22505 of the two input vectors are concatenated after narrowing them 22506 down using signed/unsigned saturating arithmetic. 22507 22508 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M' 22509 Narrow, convert to signed/unsigned integral type and merge the 22510 elements of two vectors. Operands 1 and 2 are vectors of the same 22511 mode having N floating point elements of size S. Operand 0 is the 22512 resulting vector in which 2*N elements of size N/2 are 22513 concatenated. 22514 22515 `vec_unpacks_hi_M', `vec_unpacks_lo_M' 22516 Extract and widen (promote) the high/low part of a vector of signed 22517 integral or floating point elements. The input vector (operand 1) 22518 has N elements of size S. Widen (promote) the high/low elements 22519 of the vector using signed or floating point extension and place 22520 the resulting N/2 values of size 2*S in the output vector (operand 22521 0). 22522 22523 `vec_unpacku_hi_M', `vec_unpacku_lo_M' 22524 Extract and widen (promote) the high/low part of a vector of 22525 unsigned integral elements. The input vector (operand 1) has N 22526 elements of size S. Widen (promote) the high/low elements of the 22527 vector using zero extension and place the resulting N/2 values of 22528 size 2*S in the output vector (operand 0). 22529 22530 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M' 22531 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M' 22532 Extract, convert to floating point type and widen the high/low 22533 part of a vector of signed/unsigned integral elements. The input 22534 vector (operand 1) has N elements of size S. Convert the high/low 22535 elements of the vector using floating point conversion and place 22536 the resulting N/2 values of size 2*S in the output vector (operand 22537 0). 22538 22539 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M' 22540 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M' 22541 `vec_widen_umult_even_M', `vec_widen_umult_odd_M' 22542 `vec_widen_smult_even_M', `vec_widen_smult_odd_M' 22543 Signed/Unsigned widening multiplication. The two inputs (operands 22544 1 and 2) are vectors with N signed/unsigned elements of size S. 22545 Multiply the high/low or even/odd elements of the two vectors, and 22546 put the N/2 products of size 2*S in the output vector (operand 0). 22547 22548 `vec_widen_ushiftl_hi_M', `vec_widen_ushiftl_lo_M' 22549 `vec_widen_sshiftl_hi_M', `vec_widen_sshiftl_lo_M' 22550 Signed/Unsigned widening shift left. The first input (operand 1) 22551 is a vector with N signed/unsigned elements of size S. Operand 2 22552 is a constant. Shift the high/low elements of operand 1, and put 22553 the N/2 results of size 2*S in the output vector (operand 0). 22554 22555 `mulhisi3' 22556 Multiply operands 1 and 2, which have mode `HImode', and store a 22557 `SImode' product in operand 0. 22558 22559 `mulqihi3', `mulsidi3' 22560 Similar widening-multiplication instructions of other widths. 22561 22562 `umulqihi3', `umulhisi3', `umulsidi3' 22563 Similar widening-multiplication instructions that do unsigned 22564 multiplication. 22565 22566 `usmulqihi3', `usmulhisi3', `usmulsidi3' 22567 Similar widening-multiplication instructions that interpret the 22568 first operand as unsigned and the second operand as signed, then 22569 do a signed multiplication. 22570 22571 `smulM3_highpart' 22572 Perform a signed multiplication of operands 1 and 2, which have 22573 mode M, and store the most significant half of the product in 22574 operand 0. The least significant half of the product is discarded. 22575 22576 `umulM3_highpart' 22577 Similar, but the multiplication is unsigned. 22578 22579 `maddMN4' 22580 Multiply operands 1 and 2, sign-extend them to mode N, add operand 22581 3, and store the result in operand 0. Operands 1 and 2 have mode 22582 M and operands 0 and 3 have mode N. Both modes must be integer or 22583 fixed-point modes and N must be twice the size of M. 22584 22585 In other words, `maddMN4' is like `mulMN3' except that it also 22586 adds operand 3. 22587 22588 These instructions are not allowed to `FAIL'. 22589 22590 `umaddMN4' 22591 Like `maddMN4', but zero-extend the multiplication operands 22592 instead of sign-extending them. 22593 22594 `ssmaddMN4' 22595 Like `maddMN4', but all involved operations must be 22596 signed-saturating. 22597 22598 `usmaddMN4' 22599 Like `umaddMN4', but all involved operations must be 22600 unsigned-saturating. 22601 22602 `msubMN4' 22603 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 22604 result from operand 3, and store the result in operand 0. 22605 Operands 1 and 2 have mode M and operands 0 and 3 have mode N. 22606 Both modes must be integer or fixed-point modes and N must be twice 22607 the size of M. 22608 22609 In other words, `msubMN4' is like `mulMN3' except that it also 22610 subtracts the result from operand 3. 22611 22612 These instructions are not allowed to `FAIL'. 22613 22614 `umsubMN4' 22615 Like `msubMN4', but zero-extend the multiplication operands 22616 instead of sign-extending them. 22617 22618 `ssmsubMN4' 22619 Like `msubMN4', but all involved operations must be 22620 signed-saturating. 22621 22622 `usmsubMN4' 22623 Like `umsubMN4', but all involved operations must be 22624 unsigned-saturating. 22625 22626 `divmodM4' 22627 Signed division that produces both a quotient and a remainder. 22628 Operand 1 is divided by operand 2 to produce a quotient stored in 22629 operand 0 and a remainder stored in operand 3. 22630 22631 For machines with an instruction that produces both a quotient and 22632 a remainder, provide a pattern for `divmodM4' but do not provide 22633 patterns for `divM3' and `modM3'. This allows optimization in the 22634 relatively common case when both the quotient and remainder are 22635 computed. 22636 22637 If an instruction that just produces a quotient or just a remainder 22638 exists and is more efficient than the instruction that produces 22639 both, write the output routine of `divmodM4' to call 22640 `find_reg_note' and look for a `REG_UNUSED' note on the quotient 22641 or remainder and generate the appropriate instruction. 22642 22643 `udivmodM4' 22644 Similar, but does unsigned division. 22645 22646 `ashlM3', `ssashlM3', `usashlM3' 22647 Arithmetic-shift operand 1 left by a number of bits specified by 22648 operand 2, and store the result in operand 0. Here M is the mode 22649 of operand 0 and operand 1; operand 2's mode is specified by the 22650 instruction pattern, and the compiler will convert the operand to 22651 that mode before generating the instruction. The meaning of 22652 out-of-range shift counts can optionally be specified by 22653 `TARGET_SHIFT_TRUNCATION_MASK'. *Note 22654 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 22655 22656 `ashrM3', `lshrM3', `rotlM3', `rotrM3' 22657 Other shift and rotate instructions, analogous to the `ashlM3' 22658 instructions. Operand 2 is always a scalar type. 22659 22660 `vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3' 22661 Vector shift and rotate instructions that take vectors as operand 2 22662 instead of a scalar type. 22663 22664 `bswapM2' 22665 Reverse the order of bytes of operand 1 and store the result in 22666 operand 0. 22667 22668 `negM2', `ssnegM2', `usnegM2' 22669 Negate operand 1 and store the result in operand 0. 22670 22671 `absM2' 22672 Store the absolute value of operand 1 into operand 0. 22673 22674 `sqrtM2' 22675 Store the square root of operand 1 into operand 0. 22676 22677 The `sqrt' built-in function of C always uses the mode which 22678 corresponds to the C data type `double' and the `sqrtf' built-in 22679 function uses the mode which corresponds to the C data type 22680 `float'. 22681 22682 `fmodM3' 22683 Store the remainder of dividing operand 1 by operand 2 into 22684 operand 0, rounded towards zero to an integer. 22685 22686 The `fmod' built-in function of C always uses the mode which 22687 corresponds to the C data type `double' and the `fmodf' built-in 22688 function uses the mode which corresponds to the C data type 22689 `float'. 22690 22691 `remainderM3' 22692 Store the remainder of dividing operand 1 by operand 2 into 22693 operand 0, rounded to the nearest integer. 22694 22695 The `remainder' built-in function of C always uses the mode which 22696 corresponds to the C data type `double' and the `remainderf' 22697 built-in function uses the mode which corresponds to the C data 22698 type `float'. 22699 22700 `cosM2' 22701 Store the cosine of operand 1 into operand 0. 22702 22703 The `cos' built-in function of C always uses the mode which 22704 corresponds to the C data type `double' and the `cosf' built-in 22705 function uses the mode which corresponds to the C data type 22706 `float'. 22707 22708 `sinM2' 22709 Store the sine of operand 1 into operand 0. 22710 22711 The `sin' built-in function of C always uses the mode which 22712 corresponds to the C data type `double' and the `sinf' built-in 22713 function uses the mode which corresponds to the C data type 22714 `float'. 22715 22716 `sincosM3' 22717 Store the cosine of operand 2 into operand 0 and the sine of 22718 operand 2 into operand 1. 22719 22720 The `sin' and `cos' built-in functions of C always use the mode 22721 which corresponds to the C data type `double' and the `sinf' and 22722 `cosf' built-in function use the mode which corresponds to the C 22723 data type `float'. Targets that can calculate the sine and cosine 22724 simultaneously can implement this pattern as opposed to 22725 implementing individual `sinM2' and `cosM2' patterns. The `sin' 22726 and `cos' built-in functions will then be expanded to the 22727 `sincosM3' pattern, with one of the output values left unused. 22728 22729 `expM2' 22730 Store the exponential of operand 1 into operand 0. 22731 22732 The `exp' built-in function of C always uses the mode which 22733 corresponds to the C data type `double' and the `expf' built-in 22734 function uses the mode which corresponds to the C data type 22735 `float'. 22736 22737 `logM2' 22738 Store the natural logarithm of operand 1 into operand 0. 22739 22740 The `log' built-in function of C always uses the mode which 22741 corresponds to the C data type `double' and the `logf' built-in 22742 function uses the mode which corresponds to the C data type 22743 `float'. 22744 22745 `powM3' 22746 Store the value of operand 1 raised to the exponent operand 2 into 22747 operand 0. 22748 22749 The `pow' built-in function of C always uses the mode which 22750 corresponds to the C data type `double' and the `powf' built-in 22751 function uses the mode which corresponds to the C data type 22752 `float'. 22753 22754 `atan2M3' 22755 Store the arc tangent (inverse tangent) of operand 1 divided by 22756 operand 2 into operand 0, using the signs of both arguments to 22757 determine the quadrant of the result. 22758 22759 The `atan2' built-in function of C always uses the mode which 22760 corresponds to the C data type `double' and the `atan2f' built-in 22761 function uses the mode which corresponds to the C data type 22762 `float'. 22763 22764 `floorM2' 22765 Store the largest integral value not greater than argument. 22766 22767 The `floor' built-in function of C always uses the mode which 22768 corresponds to the C data type `double' and the `floorf' built-in 22769 function uses the mode which corresponds to the C data type 22770 `float'. 22771 22772 `btruncM2' 22773 Store the argument rounded to integer towards zero. 22774 22775 The `trunc' built-in function of C always uses the mode which 22776 corresponds to the C data type `double' and the `truncf' built-in 22777 function uses the mode which corresponds to the C data type 22778 `float'. 22779 22780 `roundM2' 22781 Store the argument rounded to integer away from zero. 22782 22783 The `round' built-in function of C always uses the mode which 22784 corresponds to the C data type `double' and the `roundf' built-in 22785 function uses the mode which corresponds to the C data type 22786 `float'. 22787 22788 `ceilM2' 22789 Store the argument rounded to integer away from zero. 22790 22791 The `ceil' built-in function of C always uses the mode which 22792 corresponds to the C data type `double' and the `ceilf' built-in 22793 function uses the mode which corresponds to the C data type 22794 `float'. 22795 22796 `nearbyintM2' 22797 Store the argument rounded according to the default rounding mode 22798 22799 The `nearbyint' built-in function of C always uses the mode which 22800 corresponds to the C data type `double' and the `nearbyintf' 22801 built-in function uses the mode which corresponds to the C data 22802 type `float'. 22803 22804 `rintM2' 22805 Store the argument rounded according to the default rounding mode 22806 and raise the inexact exception when the result differs in value 22807 from the argument 22808 22809 The `rint' built-in function of C always uses the mode which 22810 corresponds to the C data type `double' and the `rintf' built-in 22811 function uses the mode which corresponds to the C data type 22812 `float'. 22813 22814 `lrintMN2' 22815 Convert operand 1 (valid for floating point mode M) to fixed point 22816 mode N as a signed number according to the current rounding mode 22817 and store in operand 0 (which has mode N). 22818 22819 `lroundMN2' 22820 Convert operand 1 (valid for floating point mode M) to fixed point 22821 mode N as a signed number rounding to nearest and away from zero 22822 and store in operand 0 (which has mode N). 22823 22824 `lfloorMN2' 22825 Convert operand 1 (valid for floating point mode M) to fixed point 22826 mode N as a signed number rounding down and store in operand 0 22827 (which has mode N). 22828 22829 `lceilMN2' 22830 Convert operand 1 (valid for floating point mode M) to fixed point 22831 mode N as a signed number rounding up and store in operand 0 22832 (which has mode N). 22833 22834 `copysignM3' 22835 Store a value with the magnitude of operand 1 and the sign of 22836 operand 2 into operand 0. 22837 22838 The `copysign' built-in function of C always uses the mode which 22839 corresponds to the C data type `double' and the `copysignf' 22840 built-in function uses the mode which corresponds to the C data 22841 type `float'. 22842 22843 `ffsM2' 22844 Store into operand 0 one plus the index of the least significant 22845 1-bit of operand 1. If operand 1 is zero, store zero. M is the 22846 mode of operand 0; operand 1's mode is specified by the instruction 22847 pattern, and the compiler will convert the operand to that mode 22848 before generating the instruction. 22849 22850 The `ffs' built-in function of C always uses the mode which 22851 corresponds to the C data type `int'. 22852 22853 `clzM2' 22854 Store into operand 0 the number of leading 0-bits in X, starting 22855 at the most significant bit position. If X is 0, the 22856 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 22857 result is undefined or has a useful value. M is the mode of 22858 operand 0; operand 1's mode is specified by the instruction 22859 pattern, and the compiler will convert the operand to that mode 22860 before generating the instruction. 22861 22862 `ctzM2' 22863 Store into operand 0 the number of trailing 0-bits in X, starting 22864 at the least significant bit position. If X is 0, the 22865 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 22866 result is undefined or has a useful value. M is the mode of 22867 operand 0; operand 1's mode is specified by the instruction 22868 pattern, and the compiler will convert the operand to that mode 22869 before generating the instruction. 22870 22871 `popcountM2' 22872 Store into operand 0 the number of 1-bits in X. M is the mode of 22873 operand 0; operand 1's mode is specified by the instruction 22874 pattern, and the compiler will convert the operand to that mode 22875 before generating the instruction. 22876 22877 `parityM2' 22878 Store into operand 0 the parity of X, i.e. the number of 1-bits in 22879 X modulo 2. M is the mode of operand 0; operand 1's mode is 22880 specified by the instruction pattern, and the compiler will convert 22881 the operand to that mode before generating the instruction. 22882 22883 `one_cmplM2' 22884 Store the bitwise-complement of operand 1 into operand 0. 22885 22886 `movmemM' 22887 Block move instruction. The destination and source blocks of 22888 memory are the first two operands, and both are `mem:BLK's with an 22889 address in mode `Pmode'. 22890 22891 The number of bytes to move is the third operand, in mode M. 22892 Usually, you specify `word_mode' for M. However, if you can 22893 generate better code knowing the range of valid lengths is smaller 22894 than those representable in a full word, you should provide a 22895 pattern with a mode corresponding to the range of values you can 22896 handle efficiently (e.g., `QImode' for values in the range 0-127; 22897 note we avoid numbers that appear negative) and also a pattern 22898 with `word_mode'. 22899 22900 The fourth operand is the known shared alignment of the source and 22901 destination, in the form of a `const_int' rtx. Thus, if the 22902 compiler knows that both source and destination are word-aligned, 22903 it may provide the value 4 for this operand. 22904 22905 Optional operands 5 and 6 specify expected alignment and size of 22906 block respectively. The expected alignment differs from alignment 22907 in operand 4 in a way that the blocks are not required to be 22908 aligned according to it in all cases. This expected alignment is 22909 also in bytes, just like operand 4. Expected size, when unknown, 22910 is set to `(const_int -1)'. 22911 22912 Descriptions of multiple `movmemM' patterns can only be beneficial 22913 if the patterns for smaller modes have fewer restrictions on their 22914 first, second and fourth operands. Note that the mode M in 22915 `movmemM' does not impose any restriction on the mode of 22916 individually moved data units in the block. 22917 22918 These patterns need not give special consideration to the 22919 possibility that the source and destination strings might overlap. 22920 22921 `movstr' 22922 String copy instruction, with `stpcpy' semantics. Operand 0 is an 22923 output operand in mode `Pmode'. The addresses of the destination 22924 and source strings are operands 1 and 2, and both are `mem:BLK's 22925 with addresses in mode `Pmode'. The execution of the expansion of 22926 this pattern should store in operand 0 the address in which the 22927 `NUL' terminator was stored in the destination string. 22928 22929 `setmemM' 22930 Block set instruction. The destination string is the first 22931 operand, given as a `mem:BLK' whose address is in mode `Pmode'. 22932 The number of bytes to set is the second operand, in mode M. The 22933 value to initialize the memory with is the third operand. Targets 22934 that only support the clearing of memory should reject any value 22935 that is not the constant 0. See `movmemM' for a discussion of the 22936 choice of mode. 22937 22938 The fourth operand is the known alignment of the destination, in 22939 the form of a `const_int' rtx. Thus, if the compiler knows that 22940 the destination is word-aligned, it may provide the value 4 for 22941 this operand. 22942 22943 Optional operands 5 and 6 specify expected alignment and size of 22944 block respectively. The expected alignment differs from alignment 22945 in operand 4 in a way that the blocks are not required to be 22946 aligned according to it in all cases. This expected alignment is 22947 also in bytes, just like operand 4. Expected size, when unknown, 22948 is set to `(const_int -1)'. 22949 22950 The use for multiple `setmemM' is as for `movmemM'. 22951 22952 `cmpstrnM' 22953 String compare instruction, with five operands. Operand 0 is the 22954 output; it has mode M. The remaining four operands are like the 22955 operands of `movmemM'. The two memory blocks specified are 22956 compared byte by byte in lexicographic order starting at the 22957 beginning of each string. The instruction is not allowed to 22958 prefetch more than one byte at a time since either string may end 22959 in the first byte and reading past that may access an invalid page 22960 or segment and cause a fault. The comparison terminates early if 22961 the fetched bytes are different or if they are equal to zero. The 22962 effect of the instruction is to store a value in operand 0 whose 22963 sign indicates the result of the comparison. 22964 22965 `cmpstrM' 22966 String compare instruction, without known maximum length. Operand 22967 0 is the output; it has mode M. The second and third operand are 22968 the blocks of memory to be compared; both are `mem:BLK' with an 22969 address in mode `Pmode'. 22970 22971 The fourth operand is the known shared alignment of the source and 22972 destination, in the form of a `const_int' rtx. Thus, if the 22973 compiler knows that both source and destination are word-aligned, 22974 it may provide the value 4 for this operand. 22975 22976 The two memory blocks specified are compared byte by byte in 22977 lexicographic order starting at the beginning of each string. The 22978 instruction is not allowed to prefetch more than one byte at a 22979 time since either string may end in the first byte and reading 22980 past that may access an invalid page or segment and cause a fault. 22981 The comparison will terminate when the fetched bytes are different 22982 or if they are equal to zero. The effect of the instruction is to 22983 store a value in operand 0 whose sign indicates the result of the 22984 comparison. 22985 22986 `cmpmemM' 22987 Block compare instruction, with five operands like the operands of 22988 `cmpstrM'. The two memory blocks specified are compared byte by 22989 byte in lexicographic order starting at the beginning of each 22990 block. Unlike `cmpstrM' the instruction can prefetch any bytes in 22991 the two memory blocks. Also unlike `cmpstrM' the comparison will 22992 not stop if both bytes are zero. The effect of the instruction is 22993 to store a value in operand 0 whose sign indicates the result of 22994 the comparison. 22995 22996 `strlenM' 22997 Compute the length of a string, with three operands. Operand 0 is 22998 the result (of mode M), operand 1 is a `mem' referring to the 22999 first character of the string, operand 2 is the character to 23000 search for (normally zero), and operand 3 is a constant describing 23001 the known alignment of the beginning of the string. 23002 23003 `floatMN2' 23004 Convert signed integer operand 1 (valid for fixed point mode M) to 23005 floating point mode N and store in operand 0 (which has mode N). 23006 23007 `floatunsMN2' 23008 Convert unsigned integer operand 1 (valid for fixed point mode M) 23009 to floating point mode N and store in operand 0 (which has mode N). 23010 23011 `fixMN2' 23012 Convert operand 1 (valid for floating point mode M) to fixed point 23013 mode N as a signed number and store in operand 0 (which has mode 23014 N). This instruction's result is defined only when the value of 23015 operand 1 is an integer. 23016 23017 If the machine description defines this pattern, it also needs to 23018 define the `ftrunc' pattern. 23019 23020 `fixunsMN2' 23021 Convert operand 1 (valid for floating point mode M) to fixed point 23022 mode N as an unsigned number and store in operand 0 (which has 23023 mode N). This instruction's result is defined only when the value 23024 of operand 1 is an integer. 23025 23026 `ftruncM2' 23027 Convert operand 1 (valid for floating point mode M) to an integer 23028 value, still represented in floating point mode M, and store it in 23029 operand 0 (valid for floating point mode M). 23030 23031 `fix_truncMN2' 23032 Like `fixMN2' but works for any floating point value of mode M by 23033 converting the value to an integer. 23034 23035 `fixuns_truncMN2' 23036 Like `fixunsMN2' but works for any floating point value of mode M 23037 by converting the value to an integer. 23038 23039 `truncMN2' 23040 Truncate operand 1 (valid for mode M) to mode N and store in 23041 operand 0 (which has mode N). Both modes must be fixed point or 23042 both floating point. 23043 23044 `extendMN2' 23045 Sign-extend operand 1 (valid for mode M) to mode N and store in 23046 operand 0 (which has mode N). Both modes must be fixed point or 23047 both floating point. 23048 23049 `zero_extendMN2' 23050 Zero-extend operand 1 (valid for mode M) to mode N and store in 23051 operand 0 (which has mode N). Both modes must be fixed point. 23052 23053 `fractMN2' 23054 Convert operand 1 of mode M to mode N and store in operand 0 23055 (which has mode N). Mode M and mode N could be fixed-point to 23056 fixed-point, signed integer to fixed-point, fixed-point to signed 23057 integer, floating-point to fixed-point, or fixed-point to 23058 floating-point. When overflows or underflows happen, the results 23059 are undefined. 23060 23061 `satfractMN2' 23062 Convert operand 1 of mode M to mode N and store in operand 0 23063 (which has mode N). Mode M and mode N could be fixed-point to 23064 fixed-point, signed integer to fixed-point, or floating-point to 23065 fixed-point. When overflows or underflows happen, the instruction 23066 saturates the results to the maximum or the minimum. 23067 23068 `fractunsMN2' 23069 Convert operand 1 of mode M to mode N and store in operand 0 23070 (which has mode N). Mode M and mode N could be unsigned integer 23071 to fixed-point, or fixed-point to unsigned integer. When 23072 overflows or underflows happen, the results are undefined. 23073 23074 `satfractunsMN2' 23075 Convert unsigned integer operand 1 of mode M to fixed-point mode N 23076 and store in operand 0 (which has mode N). When overflows or 23077 underflows happen, the instruction saturates the results to the 23078 maximum or the minimum. 23079 23080 `extvM' 23081 Extract a bit-field from register operand 1, sign-extend it, and 23082 store it in operand 0. Operand 2 specifies the width of the field 23083 in bits and operand 3 the starting bit, which counts from the most 23084 significant bit if `BITS_BIG_ENDIAN' is true and from the least 23085 significant bit otherwise. 23086 23087 Operands 0 and 1 both have mode M. Operands 2 and 3 have a 23088 target-specific mode. 23089 23090 `extvmisalignM' 23091 Extract a bit-field from memory operand 1, sign extend it, and 23092 store it in operand 0. Operand 2 specifies the width in bits and 23093 operand 3 the starting bit. The starting bit is always somewhere 23094 in the first byte of operand 1; it counts from the most 23095 significant bit if `BITS_BIG_ENDIAN' is true and from the least 23096 significant bit otherwise. 23097 23098 Operand 0 has mode M while operand 1 has `BLK' mode. Operands 2 23099 and 3 have a target-specific mode. 23100 23101 The instruction must not read beyond the last byte of the 23102 bit-field. 23103 23104 `extzvM' 23105 Like `extvM' except that the bit-field value is zero-extended. 23106 23107 `extzvmisalignM' 23108 Like `extvmisalignM' except that the bit-field value is 23109 zero-extended. 23110 23111 `insvM' 23112 Insert operand 3 into a bit-field of register operand 0. Operand 1 23113 specifies the width of the field in bits and operand 2 the 23114 starting bit, which counts from the most significant bit if 23115 `BITS_BIG_ENDIAN' is true and from the least significant bit 23116 otherwise. 23117 23118 Operands 0 and 3 both have mode M. Operands 1 and 2 have a 23119 target-specific mode. 23120 23121 `insvmisalignM' 23122 Insert operand 3 into a bit-field of memory operand 0. Operand 1 23123 specifies the width of the field in bits and operand 2 the 23124 starting bit. The starting bit is always somewhere in the first 23125 byte of operand 0; it counts from the most significant bit if 23126 `BITS_BIG_ENDIAN' is true and from the least significant bit 23127 otherwise. 23128 23129 Operand 3 has mode M while operand 0 has `BLK' mode. Operands 1 23130 and 2 have a target-specific mode. 23131 23132 The instruction must not read or write beyond the last byte of the 23133 bit-field. 23134 23135 `extv' 23136 Extract a bit-field from operand 1 (a register or memory operand), 23137 where operand 2 specifies the width in bits and operand 3 the 23138 starting bit, and store it in operand 0. Operand 0 must have mode 23139 `word_mode'. Operand 1 may have mode `byte_mode' or `word_mode'; 23140 often `word_mode' is allowed only for registers. Operands 2 and 3 23141 must be valid for `word_mode'. 23142 23143 The RTL generation pass generates this instruction only with 23144 constants for operands 2 and 3 and the constant is never zero for 23145 operand 2. 23146 23147 The bit-field value is sign-extended to a full word integer before 23148 it is stored in operand 0. 23149 23150 This pattern is deprecated; please use `extvM' and `extvmisalignM' 23151 instead. 23152 23153 `extzv' 23154 Like `extv' except that the bit-field value is zero-extended. 23155 23156 This pattern is deprecated; please use `extzvM' and 23157 `extzvmisalignM' instead. 23158 23159 `insv' 23160 Store operand 3 (which must be valid for `word_mode') into a 23161 bit-field in operand 0, where operand 1 specifies the width in 23162 bits and operand 2 the starting bit. Operand 0 may have mode 23163 `byte_mode' or `word_mode'; often `word_mode' is allowed only for 23164 registers. Operands 1 and 2 must be valid for `word_mode'. 23165 23166 The RTL generation pass generates this instruction only with 23167 constants for operands 1 and 2 and the constant is never zero for 23168 operand 1. 23169 23170 This pattern is deprecated; please use `insvM' and `insvmisalignM' 23171 instead. 23172 23173 `movMODEcc' 23174 Conditionally move operand 2 or operand 3 into operand 0 according 23175 to the comparison in operand 1. If the comparison is true, 23176 operand 2 is moved into operand 0, otherwise operand 3 is moved. 23177 23178 The mode of the operands being compared need not be the same as 23179 the operands being moved. Some machines, sparc64 for example, 23180 have instructions that conditionally move an integer value based 23181 on the floating point condition codes and vice versa. 23182 23183 If the machine does not have conditional move instructions, do not 23184 define these patterns. 23185 23186 `addMODEcc' 23187 Similar to `movMODEcc' but for conditional addition. Conditionally 23188 move operand 2 or (operands 2 + operand 3) into operand 0 23189 according to the comparison in operand 1. If the comparison is 23190 false, operand 2 is moved into operand 0, otherwise (operand 2 + 23191 operand 3) is moved. 23192 23193 `cstoreMODE4' 23194 Store zero or nonzero in operand 0 according to whether a 23195 comparison is true. Operand 1 is a comparison operator. Operand 23196 2 and operand 3 are the first and second operand of the 23197 comparison, respectively. You specify the mode that operand 0 23198 must have when you write the `match_operand' expression. The 23199 compiler automatically sees which mode you have used and supplies 23200 an operand of that mode. 23201 23202 The value stored for a true condition must have 1 as its low bit, 23203 or else must be negative. Otherwise the instruction is not 23204 suitable and you should omit it from the machine description. You 23205 describe to the compiler exactly which value is stored by defining 23206 the macro `STORE_FLAG_VALUE' (*note Misc::). If a description 23207 cannot be found that can be used for all the possible comparison 23208 operators, you should pick one and use a `define_expand' to map 23209 all results onto the one you chose. 23210 23211 These operations may `FAIL', but should do so only in relatively 23212 uncommon cases; if they would `FAIL' for common cases involving 23213 integer comparisons, it is best to restrict the predicates to not 23214 allow these operands. Likewise if a given comparison operator will 23215 always fail, independent of the operands (for floating-point 23216 modes, the `ordered_comparison_operator' predicate is often useful 23217 in this case). 23218 23219 If this pattern is omitted, the compiler will generate a 23220 conditional branch--for example, it may copy a constant one to the 23221 target and branching around an assignment of zero to the 23222 target--or a libcall. If the predicate for operand 1 only rejects 23223 some operators, it will also try reordering the operands and/or 23224 inverting the result value (e.g. by an exclusive OR). These 23225 possibilities could be cheaper or equivalent to the instructions 23226 used for the `cstoreMODE4' pattern followed by those required to 23227 convert a positive result from `STORE_FLAG_VALUE' to 1; in this 23228 case, you can and should make operand 1's predicate reject some 23229 operators in the `cstoreMODE4' pattern, or remove the pattern 23230 altogether from the machine description. 23231 23232 `cbranchMODE4' 23233 Conditional branch instruction combined with a compare instruction. 23234 Operand 0 is a comparison operator. Operand 1 and operand 2 are 23235 the first and second operands of the comparison, respectively. 23236 Operand 3 is a `label_ref' that refers to the label to jump to. 23237 23238 `jump' 23239 A jump inside a function; an unconditional branch. Operand 0 is 23240 the `label_ref' of the label to jump to. This pattern name is 23241 mandatory on all machines. 23242 23243 `call' 23244 Subroutine call instruction returning no value. Operand 0 is the 23245 function to call; operand 1 is the number of bytes of arguments 23246 pushed as a `const_int'; operand 2 is the number of registers used 23247 as operands. 23248 23249 On most machines, operand 2 is not actually stored into the RTL 23250 pattern. It is supplied for the sake of some RISC machines which 23251 need to put this information into the assembler code; they can put 23252 it in the RTL instead of operand 1. 23253 23254 Operand 0 should be a `mem' RTX whose address is the address of the 23255 function. Note, however, that this address can be a `symbol_ref' 23256 expression even if it would not be a legitimate memory address on 23257 the target machine. If it is also not a valid argument for a call 23258 instruction, the pattern for this operation should be a 23259 `define_expand' (*note Expander Definitions::) that places the 23260 address into a register and uses that register in the call 23261 instruction. 23262 23263 `call_value' 23264 Subroutine call instruction returning a value. Operand 0 is the 23265 hard register in which the value is returned. There are three more 23266 operands, the same as the three operands of the `call' instruction 23267 (but with numbers increased by one). 23268 23269 Subroutines that return `BLKmode' objects use the `call' insn. 23270 23271 `call_pop', `call_value_pop' 23272 Similar to `call' and `call_value', except used if defined and if 23273 `RETURN_POPS_ARGS' is nonzero. They should emit a `parallel' that 23274 contains both the function call and a `set' to indicate the 23275 adjustment made to the frame pointer. 23276 23277 For machines where `RETURN_POPS_ARGS' can be nonzero, the use of 23278 these patterns increases the number of functions for which the 23279 frame pointer can be eliminated, if desired. 23280 23281 `untyped_call' 23282 Subroutine call instruction returning a value of any type. 23283 Operand 0 is the function to call; operand 1 is a memory location 23284 where the result of calling the function is to be stored; operand 23285 2 is a `parallel' expression where each element is a `set' 23286 expression that indicates the saving of a function return value 23287 into the result block. 23288 23289 This instruction pattern should be defined to support 23290 `__builtin_apply' on machines where special instructions are needed 23291 to call a subroutine with arbitrary arguments or to save the value 23292 returned. This instruction pattern is required on machines that 23293 have multiple registers that can hold a return value (i.e. 23294 `FUNCTION_VALUE_REGNO_P' is true for more than one register). 23295 23296 `return' 23297 Subroutine return instruction. This instruction pattern name 23298 should be defined only if a single instruction can do all the work 23299 of returning from a function. 23300 23301 Like the `movM' patterns, this pattern is also used after the RTL 23302 generation phase. In this case it is to support machines where 23303 multiple instructions are usually needed to return from a 23304 function, but some class of functions only requires one 23305 instruction to implement a return. Normally, the applicable 23306 functions are those which do not need to save any registers or 23307 allocate stack space. 23308 23309 It is valid for this pattern to expand to an instruction using 23310 `simple_return' if no epilogue is required. 23311 23312 `simple_return' 23313 Subroutine return instruction. This instruction pattern name 23314 should be defined only if a single instruction can do all the work 23315 of returning from a function on a path where no epilogue is 23316 required. This pattern is very similar to the `return' 23317 instruction pattern, but it is emitted only by the shrink-wrapping 23318 optimization on paths where the function prologue has not been 23319 executed, and a function return should occur without any of the 23320 effects of the epilogue. Additional uses may be introduced on 23321 paths where both the prologue and the epilogue have executed. 23322 23323 For such machines, the condition specified in this pattern should 23324 only be true when `reload_completed' is nonzero and the function's 23325 epilogue would only be a single instruction. For machines with 23326 register windows, the routine `leaf_function_p' may be used to 23327 determine if a register window push is required. 23328 23329 Machines that have conditional return instructions should define 23330 patterns such as 23331 23332 (define_insn "" 23333 [(set (pc) 23334 (if_then_else (match_operator 23335 0 "comparison_operator" 23336 [(cc0) (const_int 0)]) 23337 (return) 23338 (pc)))] 23339 "CONDITION" 23340 "...") 23341 23342 where CONDITION would normally be the same condition specified on 23343 the named `return' pattern. 23344 23345 `untyped_return' 23346 Untyped subroutine return instruction. This instruction pattern 23347 should be defined to support `__builtin_return' on machines where 23348 special instructions are needed to return a value of any type. 23349 23350 Operand 0 is a memory location where the result of calling a 23351 function with `__builtin_apply' is stored; operand 1 is a 23352 `parallel' expression where each element is a `set' expression 23353 that indicates the restoring of a function return value from the 23354 result block. 23355 23356 `nop' 23357 No-op instruction. This instruction pattern name should always be 23358 defined to output a no-op in assembler code. `(const_int 0)' will 23359 do as an RTL pattern. 23360 23361 `indirect_jump' 23362 An instruction to jump to an address which is operand zero. This 23363 pattern name is mandatory on all machines. 23364 23365 `casesi' 23366 Instruction to jump through a dispatch table, including bounds 23367 checking. This instruction takes five operands: 23368 23369 1. The index to dispatch on, which has mode `SImode'. 23370 23371 2. The lower bound for indices in the table, an integer constant. 23372 23373 3. The total range of indices in the table--the largest index 23374 minus the smallest one (both inclusive). 23375 23376 4. A label that precedes the table itself. 23377 23378 5. A label to jump to if the index has a value outside the 23379 bounds. 23380 23381 The table is an `addr_vec' or `addr_diff_vec' inside of a 23382 `jump_insn'. The number of elements in the table is one plus the 23383 difference between the upper bound and the lower bound. 23384 23385 `tablejump' 23386 Instruction to jump to a variable address. This is a low-level 23387 capability which can be used to implement a dispatch table when 23388 there is no `casesi' pattern. 23389 23390 This pattern requires two operands: the address or offset, and a 23391 label which should immediately precede the jump table. If the 23392 macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 23393 the first operand is an offset which counts from the address of 23394 the table; otherwise, it is an absolute address to jump to. In 23395 either case, the first operand has mode `Pmode'. 23396 23397 The `tablejump' insn is always the last insn before the jump table 23398 it uses. Its assembler code normally has no need to use the 23399 second operand, but you should incorporate it in the RTL pattern so 23400 that the jump optimizer will not delete the table as unreachable 23401 code. 23402 23403 `decrement_and_branch_until_zero' 23404 Conditional branch instruction that decrements a register and 23405 jumps if the register is nonzero. Operand 0 is the register to 23406 decrement and test; operand 1 is the label to jump to if the 23407 register is nonzero. *Note Looping Patterns::. 23408 23409 This optional instruction pattern is only used by the combiner, 23410 typically for loops reversed by the loop optimizer when strength 23411 reduction is enabled. 23412 23413 `doloop_end' 23414 Conditional branch instruction that decrements a register and 23415 jumps if the register is nonzero. This instruction takes five 23416 operands: Operand 0 is the register to decrement and test; operand 23417 1 is the number of loop iterations as a `const_int' or 23418 `const0_rtx' if this cannot be determined until run-time; operand 23419 2 is the actual or estimated maximum number of iterations as a 23420 `const_int'; operand 3 is the number of enclosed loops as a 23421 `const_int' (an innermost loop has a value of 1); operand 4 is the 23422 label to jump to if the register is nonzero; operand 5 is 23423 const1_rtx if the loop in entered at its top, const0_rtx otherwise. 23424 *Note Looping Patterns::. 23425 23426 This optional instruction pattern should be defined for machines 23427 with low-overhead looping instructions as the loop optimizer will 23428 try to modify suitable loops to utilize it. If nested 23429 low-overhead looping is not supported, use a `define_expand' 23430 (*note Expander Definitions::) and make the pattern fail if 23431 operand 3 is not `const1_rtx'. Similarly, if the actual or 23432 estimated maximum number of iterations is too large for this 23433 instruction, make it fail. 23434 23435 `doloop_begin' 23436 Companion instruction to `doloop_end' required for machines that 23437 need to perform some initialization, such as loading special 23438 registers used by a low-overhead looping instruction. If 23439 initialization insns do not always need to be emitted, use a 23440 `define_expand' (*note Expander Definitions::) and make it fail. 23441 23442 `canonicalize_funcptr_for_compare' 23443 Canonicalize the function pointer in operand 1 and store the result 23444 into operand 0. 23445 23446 Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be 23447 a `reg', `mem', `symbol_ref', `const_int', etc and also has mode 23448 `Pmode'. 23449 23450 Canonicalization of a function pointer usually involves computing 23451 the address of the function which would be called if the function 23452 pointer were used in an indirect call. 23453 23454 Only define this pattern if function pointers on the target machine 23455 can have different values but still call the same function when 23456 used in an indirect call. 23457 23458 `save_stack_block' 23459 `save_stack_function' 23460 `save_stack_nonlocal' 23461 `restore_stack_block' 23462 `restore_stack_function' 23463 `restore_stack_nonlocal' 23464 Most machines save and restore the stack pointer by copying it to 23465 or from an object of mode `Pmode'. Do not define these patterns on 23466 such machines. 23467 23468 Some machines require special handling for stack pointer saves and 23469 restores. On those machines, define the patterns corresponding to 23470 the non-standard cases by using a `define_expand' (*note Expander 23471 Definitions::) that produces the required insns. The three types 23472 of saves and restores are: 23473 23474 1. `save_stack_block' saves the stack pointer at the start of a 23475 block that allocates a variable-sized object, and 23476 `restore_stack_block' restores the stack pointer when the 23477 block is exited. 23478 23479 2. `save_stack_function' and `restore_stack_function' do a 23480 similar job for the outermost block of a function and are 23481 used when the function allocates variable-sized objects or 23482 calls `alloca'. Only the epilogue uses the restored stack 23483 pointer, allowing a simpler save or restore sequence on some 23484 machines. 23485 23486 3. `save_stack_nonlocal' is used in functions that contain labels 23487 branched to by nested functions. It saves the stack pointer 23488 in such a way that the inner function can use 23489 `restore_stack_nonlocal' to restore the stack pointer. The 23490 compiler generates code to restore the frame and argument 23491 pointer registers, but some machines require saving and 23492 restoring additional data such as register window information 23493 or stack backchains. Place insns in these patterns to save 23494 and restore any such required data. 23495 23496 When saving the stack pointer, operand 0 is the save area and 23497 operand 1 is the stack pointer. The mode used to allocate the 23498 save area defaults to `Pmode' but you can override that choice by 23499 defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 23500 You must specify an integral mode, or `VOIDmode' if no save area 23501 is needed for a particular type of save (either because no save is 23502 needed or because a machine-specific save area can be used). 23503 Operand 0 is the stack pointer and operand 1 is the save area for 23504 restore operations. If `save_stack_block' is defined, operand 0 23505 must not be `VOIDmode' since these saves can be arbitrarily nested. 23506 23507 A save area is a `mem' that is at a constant offset from 23508 `virtual_stack_vars_rtx' when the stack pointer is saved for use by 23509 nonlocal gotos and a `reg' in the other two cases. 23510 23511 `allocate_stack' 23512 Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1 23513 from the stack pointer to create space for dynamically allocated 23514 data. 23515 23516 Store the resultant pointer to this space into operand 0. If you 23517 are allocating space from the main stack, do this by emitting a 23518 move insn to copy `virtual_stack_dynamic_rtx' to operand 0. If 23519 you are allocating the space elsewhere, generate code to copy the 23520 location of the space to operand 0. In the latter case, you must 23521 ensure this space gets freed when the corresponding space on the 23522 main stack is free. 23523 23524 Do not define this pattern if all that must be done is the 23525 subtraction. Some machines require other operations such as stack 23526 probes or maintaining the back chain. Define this pattern to emit 23527 those operations in addition to updating the stack pointer. 23528 23529 `check_stack' 23530 If stack checking (*note Stack Checking::) cannot be done on your 23531 system by probing the stack, define this pattern to perform the 23532 needed check and signal an error if the stack has overflowed. The 23533 single operand is the address in the stack farthest from the 23534 current stack pointer that you need to validate. Normally, on 23535 platforms where this pattern is needed, you would obtain the stack 23536 limit from a global or thread-specific variable or register. 23537 23538 `probe_stack_address' 23539 If stack checking (*note Stack Checking::) can be done on your 23540 system by probing the stack but without the need to actually 23541 access it, define this pattern and signal an error if the stack 23542 has overflowed. The single operand is the memory address in the 23543 stack that needs to be probed. 23544 23545 `probe_stack' 23546 If stack checking (*note Stack Checking::) can be done on your 23547 system by probing the stack but doing it with a "store zero" 23548 instruction is not valid or optimal, define this pattern to do the 23549 probing differently and signal an error if the stack has 23550 overflowed. The single operand is the memory reference in the 23551 stack that needs to be probed. 23552 23553 `nonlocal_goto' 23554 Emit code to generate a non-local goto, e.g., a jump from one 23555 function to a label in an outer function. This pattern has four 23556 arguments, each representing a value to be used in the jump. The 23557 first argument is to be loaded into the frame pointer, the second 23558 is the address to branch to (code to dispatch to the actual label), 23559 the third is the address of a location where the stack is saved, 23560 and the last is the address of the label, to be placed in the 23561 location for the incoming static chain. 23562 23563 On most machines you need not define this pattern, since GCC will 23564 already generate the correct code, which is to load the frame 23565 pointer and static chain, restore the stack (using the 23566 `restore_stack_nonlocal' pattern, if defined), and jump indirectly 23567 to the dispatcher. You need only define this pattern if this code 23568 will not work on your machine. 23569 23570 `nonlocal_goto_receiver' 23571 This pattern, if defined, contains code needed at the target of a 23572 nonlocal goto after the code already generated by GCC. You will 23573 not normally need to define this pattern. A typical reason why 23574 you might need this pattern is if some value, such as a pointer to 23575 a global table, must be restored when the frame pointer is 23576 restored. Note that a nonlocal goto only occurs within a 23577 unit-of-translation, so a global table pointer that is shared by 23578 all functions of a given module need not be restored. There are 23579 no arguments. 23580 23581 `exception_receiver' 23582 This pattern, if defined, contains code needed at the site of an 23583 exception handler that isn't needed at the site of a nonlocal 23584 goto. You will not normally need to define this pattern. A 23585 typical reason why you might need this pattern is if some value, 23586 such as a pointer to a global table, must be restored after 23587 control flow is branched to the handler of an exception. There 23588 are no arguments. 23589 23590 `builtin_setjmp_setup' 23591 This pattern, if defined, contains additional code needed to 23592 initialize the `jmp_buf'. You will not normally need to define 23593 this pattern. A typical reason why you might need this pattern is 23594 if some value, such as a pointer to a global table, must be 23595 restored. Though it is preferred that the pointer value be 23596 recalculated if possible (given the address of a label for 23597 instance). The single argument is a pointer to the `jmp_buf'. 23598 Note that the buffer is five words long and that the first three 23599 are normally used by the generic mechanism. 23600 23601 `builtin_setjmp_receiver' 23602 This pattern, if defined, contains code needed at the site of a 23603 built-in setjmp that isn't needed at the site of a nonlocal goto. 23604 You will not normally need to define this pattern. A typical 23605 reason why you might need this pattern is if some value, such as a 23606 pointer to a global table, must be restored. It takes one 23607 argument, which is the label to which builtin_longjmp transferred 23608 control; this pattern may be emitted at a small offset from that 23609 label. 23610 23611 `builtin_longjmp' 23612 This pattern, if defined, performs the entire action of the 23613 longjmp. You will not normally need to define this pattern unless 23614 you also define `builtin_setjmp_setup'. The single argument is a 23615 pointer to the `jmp_buf'. 23616 23617 `eh_return' 23618 This pattern, if defined, affects the way `__builtin_eh_return', 23619 and thence the call frame exception handling library routines, are 23620 built. It is intended to handle non-trivial actions needed along 23621 the abnormal return path. 23622 23623 The address of the exception handler to which the function should 23624 return is passed as operand to this pattern. It will normally 23625 need to copied by the pattern to some special register or memory 23626 location. If the pattern needs to determine the location of the 23627 target call frame in order to do so, it may use 23628 `EH_RETURN_STACKADJ_RTX', if defined; it will have already been 23629 assigned. 23630 23631 If this pattern is not defined, the default action will be to 23632 simply copy the return address to `EH_RETURN_HANDLER_RTX'. Either 23633 that macro or this pattern needs to be defined if call frame 23634 exception handling is to be used. 23635 23636 `prologue' 23637 This pattern, if defined, emits RTL for entry to a function. The 23638 function entry is responsible for setting up the stack frame, 23639 initializing the frame pointer register, saving callee saved 23640 registers, etc. 23641 23642 Using a prologue pattern is generally preferred over defining 23643 `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 23644 prologue. 23645 23646 The `prologue' pattern is particularly useful for targets which 23647 perform instruction scheduling. 23648 23649 `window_save' 23650 This pattern, if defined, emits RTL for a register window save. 23651 It should be defined if the target machine has register windows 23652 but the window events are decoupled from calls to subroutines. 23653 The canonical example is the SPARC architecture. 23654 23655 `epilogue' 23656 This pattern emits RTL for exit from a function. The function 23657 exit is responsible for deallocating the stack frame, restoring 23658 callee saved registers and emitting the return instruction. 23659 23660 Using an epilogue pattern is generally preferred over defining 23661 `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 23662 epilogue. 23663 23664 The `epilogue' pattern is particularly useful for targets which 23665 perform instruction scheduling or which have delay slots for their 23666 return instruction. 23667 23668 `sibcall_epilogue' 23669 This pattern, if defined, emits RTL for exit from a function 23670 without the final branch back to the calling function. This 23671 pattern will be emitted before any sibling call (aka tail call) 23672 sites. 23673 23674 The `sibcall_epilogue' pattern must not clobber any arguments used 23675 for parameter passing or any stack slots for arguments passed to 23676 the current function. 23677 23678 `trap' 23679 This pattern, if defined, signals an error, typically by causing 23680 some kind of signal to be raised. Among other places, it is used 23681 by the Java front end to signal `invalid array index' exceptions. 23682 23683 `ctrapMM4' 23684 Conditional trap instruction. Operand 0 is a piece of RTL which 23685 performs a comparison, and operands 1 and 2 are the arms of the 23686 comparison. Operand 3 is the trap code, an integer. 23687 23688 A typical `ctrap' pattern looks like 23689 23690 (define_insn "ctrapsi4" 23691 [(trap_if (match_operator 0 "trap_operator" 23692 [(match_operand 1 "register_operand") 23693 (match_operand 2 "immediate_operand")]) 23694 (match_operand 3 "const_int_operand" "i"))] 23695 "" 23696 "...") 23697 23698 `prefetch' 23699 This pattern, if defined, emits code for a non-faulting data 23700 prefetch instruction. Operand 0 is the address of the memory to 23701 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 23702 for a write to the memory address, or a constant 0 otherwise. 23703 Operand 2 is the expected degree of temporal locality of the data 23704 and is a value between 0 and 3, inclusive; 0 means that the data 23705 has no temporal locality, so it need not be left in the cache 23706 after the access; 3 means that the data has a high degree of 23707 temporal locality and should be left in all levels of cache 23708 possible; 1 and 2 mean, respectively, a low or moderate degree of 23709 temporal locality. 23710 23711 Targets that do not support write prefetches or locality hints can 23712 ignore the values of operands 1 and 2. 23713 23714 `blockage' 23715 This pattern defines a pseudo insn that prevents the instruction 23716 scheduler and other passes from moving instructions and using 23717 register equivalences across the boundary defined by the blockage 23718 insn. This needs to be an UNSPEC_VOLATILE pattern or a volatile 23719 ASM. 23720 23721 `memory_barrier' 23722 If the target memory model is not fully synchronous, then this 23723 pattern should be defined to an instruction that orders both loads 23724 and stores before the instruction with respect to loads and stores 23725 after the instruction. This pattern has no operands. 23726 23727 `sync_compare_and_swapMODE' 23728 This pattern, if defined, emits code for an atomic compare-and-swap 23729 operation. Operand 1 is the memory on which the atomic operation 23730 is performed. Operand 2 is the "old" value to be compared against 23731 the current contents of the memory location. Operand 3 is the 23732 "new" value to store in the memory if the compare succeeds. 23733 Operand 0 is the result of the operation; it should contain the 23734 contents of the memory before the operation. If the compare 23735 succeeds, this should obviously be a copy of operand 2. 23736 23737 This pattern must show that both operand 0 and operand 1 are 23738 modified. 23739 23740 This pattern must issue any memory barrier instructions such that 23741 all memory operations before the atomic operation occur before the 23742 atomic operation and all memory operations after the atomic 23743 operation occur after the atomic operation. 23744 23745 For targets where the success or failure of the compare-and-swap 23746 operation is available via the status flags, it is possible to 23747 avoid a separate compare operation and issue the subsequent branch 23748 or store-flag operation immediately after the compare-and-swap. 23749 To this end, GCC will look for a `MODE_CC' set in the output of 23750 `sync_compare_and_swapMODE'; if the machine description includes 23751 such a set, the target should also define special `cbranchcc4' 23752 and/or `cstorecc4' instructions. GCC will then be able to take 23753 the destination of the `MODE_CC' set and pass it to the 23754 `cbranchcc4' or `cstorecc4' pattern as the first operand of the 23755 comparison (the second will be `(const_int 0)'). 23756 23757 For targets where the operating system may provide support for this 23758 operation via library calls, the `sync_compare_and_swap_optab' may 23759 be initialized to a function with the same interface as the 23760 `__sync_val_compare_and_swap_N' built-in. If the entire set of 23761 __SYNC builtins are supported via library calls, the target can 23762 initialize all of the optabs at once with `init_sync_libfuncs'. 23763 For the purposes of C++11 `std::atomic::is_lock_free', it is 23764 assumed that these library calls do _not_ use any kind of 23765 interruptable locking. 23766 23767 `sync_addMODE', `sync_subMODE' 23768 `sync_iorMODE', `sync_andMODE' 23769 `sync_xorMODE', `sync_nandMODE' 23770 These patterns emit code for an atomic operation on memory. 23771 Operand 0 is the memory on which the atomic operation is performed. 23772 Operand 1 is the second operand to the binary operator. 23773 23774 This pattern must issue any memory barrier instructions such that 23775 all memory operations before the atomic operation occur before the 23776 atomic operation and all memory operations after the atomic 23777 operation occur after the atomic operation. 23778 23779 If these patterns are not defined, the operation will be 23780 constructed from a compare-and-swap operation, if defined. 23781 23782 `sync_old_addMODE', `sync_old_subMODE' 23783 `sync_old_iorMODE', `sync_old_andMODE' 23784 `sync_old_xorMODE', `sync_old_nandMODE' 23785 These patterns emit code for an atomic operation on memory, and 23786 return the value that the memory contained before the operation. 23787 Operand 0 is the result value, operand 1 is the memory on which the 23788 atomic operation is performed, and operand 2 is the second operand 23789 to the binary operator. 23790 23791 This pattern must issue any memory barrier instructions such that 23792 all memory operations before the atomic operation occur before the 23793 atomic operation and all memory operations after the atomic 23794 operation occur after the atomic operation. 23795 23796 If these patterns are not defined, the operation will be 23797 constructed from a compare-and-swap operation, if defined. 23798 23799 `sync_new_addMODE', `sync_new_subMODE' 23800 `sync_new_iorMODE', `sync_new_andMODE' 23801 `sync_new_xorMODE', `sync_new_nandMODE' 23802 These patterns are like their `sync_old_OP' counterparts, except 23803 that they return the value that exists in the memory location 23804 after the operation, rather than before the operation. 23805 23806 `sync_lock_test_and_setMODE' 23807 This pattern takes two forms, based on the capabilities of the 23808 target. In either case, operand 0 is the result of the operand, 23809 operand 1 is the memory on which the atomic operation is 23810 performed, and operand 2 is the value to set in the lock. 23811 23812 In the ideal case, this operation is an atomic exchange operation, 23813 in which the previous value in memory operand is copied into the 23814 result operand, and the value operand is stored in the memory 23815 operand. 23816 23817 For less capable targets, any value operand that is not the 23818 constant 1 should be rejected with `FAIL'. In this case the 23819 target may use an atomic test-and-set bit operation. The result 23820 operand should contain 1 if the bit was previously set and 0 if 23821 the bit was previously clear. The true contents of the memory 23822 operand are implementation defined. 23823 23824 This pattern must issue any memory barrier instructions such that 23825 the pattern as a whole acts as an acquire barrier, that is all 23826 memory operations after the pattern do not occur until the lock is 23827 acquired. 23828 23829 If this pattern is not defined, the operation will be constructed 23830 from a compare-and-swap operation, if defined. 23831 23832 `sync_lock_releaseMODE' 23833 This pattern, if defined, releases a lock set by 23834 `sync_lock_test_and_setMODE'. Operand 0 is the memory that 23835 contains the lock; operand 1 is the value to store in the lock. 23836 23837 If the target doesn't implement full semantics for 23838 `sync_lock_test_and_setMODE', any value operand which is not the 23839 constant 0 should be rejected with `FAIL', and the true contents 23840 of the memory operand are implementation defined. 23841 23842 This pattern must issue any memory barrier instructions such that 23843 the pattern as a whole acts as a release barrier, that is the lock 23844 is released only after all previous memory operations have 23845 completed. 23846 23847 If this pattern is not defined, then a `memory_barrier' pattern 23848 will be emitted, followed by a store of the value to the memory 23849 operand. 23850 23851 `atomic_compare_and_swapMODE' 23852 This pattern, if defined, emits code for an atomic compare-and-swap 23853 operation with memory model semantics. Operand 2 is the memory on 23854 which the atomic operation is performed. Operand 0 is an output 23855 operand which is set to true or false based on whether the 23856 operation succeeded. Operand 1 is an output operand which is set 23857 to the contents of the memory before the operation was attempted. 23858 Operand 3 is the value that is expected to be in memory. Operand 23859 4 is the value to put in memory if the expected value is found 23860 there. Operand 5 is set to 1 if this compare and swap is to be 23861 treated as a weak operation. Operand 6 is the memory model to be 23862 used if the operation is a success. Operand 7 is the memory model 23863 to be used if the operation fails. 23864 23865 If memory referred to in operand 2 contains the value in operand 23866 3, then operand 4 is stored in memory pointed to by operand 2 and 23867 fencing based on the memory model in operand 6 is issued. 23868 23869 If memory referred to in operand 2 does not contain the value in 23870 operand 3, then fencing based on the memory model in operand 7 is 23871 issued. 23872 23873 If a target does not support weak compare-and-swap operations, or 23874 the port elects not to implement weak operations, the argument in 23875 operand 5 can be ignored. Note a strong implementation must be 23876 provided. 23877 23878 If this pattern is not provided, the `__atomic_compare_exchange' 23879 built-in functions will utilize the legacy `sync_compare_and_swap' 23880 pattern with an `__ATOMIC_SEQ_CST' memory model. 23881 23882 `atomic_loadMODE' 23883 This pattern implements an atomic load operation with memory model 23884 semantics. Operand 1 is the memory address being loaded from. 23885 Operand 0 is the result of the load. Operand 2 is the memory 23886 model to be used for the load operation. 23887 23888 If not present, the `__atomic_load' built-in function will either 23889 resort to a normal load with memory barriers, or a compare-and-swap 23890 operation if a normal load would not be atomic. 23891 23892 `atomic_storeMODE' 23893 This pattern implements an atomic store operation with memory model 23894 semantics. Operand 0 is the memory address being stored to. 23895 Operand 1 is the value to be written. Operand 2 is the memory 23896 model to be used for the operation. 23897 23898 If not present, the `__atomic_store' built-in function will 23899 attempt to perform a normal store and surround it with any 23900 required memory fences. If the store would not be atomic, then an 23901 `__atomic_exchange' is attempted with the result being ignored. 23902 23903 `atomic_exchangeMODE' 23904 This pattern implements an atomic exchange operation with memory 23905 model semantics. Operand 1 is the memory location the operation 23906 is performed on. Operand 0 is an output operand which is set to 23907 the original value contained in the memory pointed to by operand 23908 1. Operand 2 is the value to be stored. Operand 3 is the memory 23909 model to be used. 23910 23911 If this pattern is not present, the built-in function 23912 `__atomic_exchange' will attempt to preform the operation with a 23913 compare and swap loop. 23914 23915 `atomic_addMODE', `atomic_subMODE' 23916 `atomic_orMODE', `atomic_andMODE' 23917 `atomic_xorMODE', `atomic_nandMODE' 23918 These patterns emit code for an atomic operation on memory with 23919 memory model semantics. Operand 0 is the memory on which the 23920 atomic operation is performed. Operand 1 is the second operand to 23921 the binary operator. Operand 2 is the memory model to be used by 23922 the operation. 23923 23924 If these patterns are not defined, attempts will be made to use 23925 legacy `sync' patterns, or equivalent patterns which return a 23926 result. If none of these are available a compare-and-swap loop 23927 will be used. 23928 23929 `atomic_fetch_addMODE', `atomic_fetch_subMODE' 23930 `atomic_fetch_orMODE', `atomic_fetch_andMODE' 23931 `atomic_fetch_xorMODE', `atomic_fetch_nandMODE' 23932 These patterns emit code for an atomic operation on memory with 23933 memory model semantics, and return the original value. Operand 0 23934 is an output operand which contains the value of the memory 23935 location before the operation was performed. Operand 1 is the 23936 memory on which the atomic operation is performed. Operand 2 is 23937 the second operand to the binary operator. Operand 3 is the 23938 memory model to be used by the operation. 23939 23940 If these patterns are not defined, attempts will be made to use 23941 legacy `sync' patterns. If none of these are available a 23942 compare-and-swap loop will be used. 23943 23944 `atomic_add_fetchMODE', `atomic_sub_fetchMODE' 23945 `atomic_or_fetchMODE', `atomic_and_fetchMODE' 23946 `atomic_xor_fetchMODE', `atomic_nand_fetchMODE' 23947 These patterns emit code for an atomic operation on memory with 23948 memory model semantics and return the result after the operation 23949 is performed. Operand 0 is an output operand which contains the 23950 value after the operation. Operand 1 is the memory on which the 23951 atomic operation is performed. Operand 2 is the second operand to 23952 the binary operator. Operand 3 is the memory model to be used by 23953 the operation. 23954 23955 If these patterns are not defined, attempts will be made to use 23956 legacy `sync' patterns, or equivalent patterns which return the 23957 result before the operation followed by the arithmetic operation 23958 required to produce the result. If none of these are available a 23959 compare-and-swap loop will be used. 23960 23961 `atomic_test_and_set' 23962 This pattern emits code for `__builtin_atomic_test_and_set'. 23963 Operand 0 is an output operand which is set to true if the previous 23964 previous contents of the byte was "set", and false otherwise. 23965 Operand 1 is the `QImode' memory to be modified. Operand 2 is the 23966 memory model to be used. 23967 23968 The specific value that defines "set" is implementation defined, 23969 and is normally based on what is performed by the native atomic 23970 test and set instruction. 23971 23972 `mem_thread_fenceMODE' 23973 This pattern emits code required to implement a thread fence with 23974 memory model semantics. Operand 0 is the memory model to be used. 23975 23976 If this pattern is not specified, all memory models except 23977 `__ATOMIC_RELAXED' will result in issuing a `sync_synchronize' 23978 barrier pattern. 23979 23980 `mem_signal_fenceMODE' 23981 This pattern emits code required to implement a signal fence with 23982 memory model semantics. Operand 0 is the memory model to be used. 23983 23984 This pattern should impact the compiler optimizers the same way 23985 that mem_signal_fence does, but it does not need to issue any 23986 barrier instructions. 23987 23988 If this pattern is not specified, all memory models except 23989 `__ATOMIC_RELAXED' will result in issuing a `sync_synchronize' 23990 barrier pattern. 23991 23992 `get_thread_pointerMODE' 23993 `set_thread_pointerMODE' 23994 These patterns emit code that reads/sets the TLS thread pointer. 23995 Currently, these are only needed if the target needs to support the 23996 `__builtin_thread_pointer' and `__builtin_set_thread_pointer' 23997 builtins. 23998 23999 The get/set patterns have a single output/input operand 24000 respectively, with MODE intended to be `Pmode'. 24001 24002 `stack_protect_set' 24003 This pattern, if defined, moves a `ptr_mode' value from the memory 24004 in operand 1 to the memory in operand 0 without leaving the value 24005 in a register afterward. This is to avoid leaking the value some 24006 place that an attacker might use to rewrite the stack guard slot 24007 after having clobbered it. 24008 24009 If this pattern is not defined, then a plain move pattern is 24010 generated. 24011 24012 `stack_protect_test' 24013 This pattern, if defined, compares a `ptr_mode' value from the 24014 memory in operand 1 with the memory in operand 0 without leaving 24015 the value in a register afterward and branches to operand 2 if the 24016 values were equal. 24017 24018 If this pattern is not defined, then a plain compare pattern and 24019 conditional branch pattern is used. 24020 24021 `clear_cache' 24022 This pattern, if defined, flushes the instruction cache for a 24023 region of memory. The region is bounded to by the Pmode pointers 24024 in operand 0 inclusive and operand 1 exclusive. 24025 24026 If this pattern is not defined, a call to the library function 24027 `__clear_cache' is used. 24028 24029 24030 24031 File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 24032 24033 16.10 When the Order of Patterns Matters 24034 ======================================== 24035 24036 Sometimes an insn can match more than one instruction pattern. Then the 24037 pattern that appears first in the machine description is the one used. 24038 Therefore, more specific patterns (patterns that will match fewer 24039 things) and faster instructions (those that will produce better code 24040 when they do match) should usually go first in the description. 24041 24042 In some cases the effect of ordering the patterns can be used to hide 24043 a pattern when it is not valid. For example, the 68000 has an 24044 instruction for converting a fullword to floating point and another for 24045 converting a byte to floating point. An instruction converting an 24046 integer to floating point could match either one. We put the pattern 24047 to convert the fullword first to make sure that one will be used rather 24048 than the other. (Otherwise a large integer might be generated as a 24049 single-byte immediate quantity, which would not work.) Instead of 24050 using this pattern ordering it would be possible to make the pattern 24051 for convert-a-byte smart enough to deal properly with any constant 24052 value. 24053 24054 24055 File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 24056 24057 16.11 Interdependence of Patterns 24058 ================================= 24059 24060 In some cases machines support instructions identical except for the 24061 machine mode of one or more operands. For example, there may be 24062 "sign-extend halfword" and "sign-extend byte" instructions whose 24063 patterns are 24064 24065 (set (match_operand:SI 0 ...) 24066 (extend:SI (match_operand:HI 1 ...))) 24067 24068 (set (match_operand:SI 0 ...) 24069 (extend:SI (match_operand:QI 1 ...))) 24070 24071 Constant integers do not specify a machine mode, so an instruction to 24072 extend a constant value could match either pattern. The pattern it 24073 actually will match is the one that appears first in the file. For 24074 correct results, this must be the one for the widest possible mode 24075 (`HImode', here). If the pattern matches the `QImode' instruction, the 24076 results will be incorrect if the constant value does not actually fit 24077 that mode. 24078 24079 Such instructions to extend constants are rarely generated because 24080 they are optimized away, but they do occasionally happen in nonoptimized 24081 compilations. 24082 24083 If a constraint in a pattern allows a constant, the reload pass may 24084 replace a register with a constant permitted by the constraint in some 24085 cases. Similarly for memory references. Because of this substitution, 24086 you should not provide separate patterns for increment and decrement 24087 instructions. Instead, they should be generated from the same pattern 24088 that supports register-register add insns by examining the operands and 24089 generating the appropriate machine instruction. 24090 24091 24092 File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 24093 24094 16.12 Defining Jump Instruction Patterns 24095 ======================================== 24096 24097 GCC does not assume anything about how the machine realizes jumps. The 24098 machine description should define a single pattern, usually a 24099 `define_expand', which expands to all the required insns. 24100 24101 Usually, this would be a comparison insn to set the condition code and 24102 a separate branch insn testing the condition code and branching or not 24103 according to its value. For many machines, however, separating 24104 compares and branches is limiting, which is why the more flexible 24105 approach with one `define_expand' is used in GCC. The machine 24106 description becomes clearer for architectures that have 24107 compare-and-branch instructions but no condition code. It also works 24108 better when different sets of comparison operators are supported by 24109 different kinds of conditional branches (e.g. integer vs. 24110 floating-point), or by conditional branches with respect to conditional 24111 stores. 24112 24113 Two separate insns are always used if the machine description 24114 represents a condition code register using the legacy RTL expression 24115 `(cc0)', and on most machines that use a separate condition code 24116 register (*note Condition Code::). For machines that use `(cc0)', in 24117 fact, the set and use of the condition code must be separate and 24118 adjacent(1), thus allowing flags in `cc_status' to be used (*note 24119 Condition Code::) and so that the comparison and branch insns could be 24120 located from each other by using the functions `prev_cc0_setter' and 24121 `next_cc0_user'. 24122 24123 Even in this case having a single entry point for conditional branches 24124 is advantageous, because it handles equally well the case where a single 24125 comparison instruction records the results of both signed and unsigned 24126 comparison of the given operands (with the branch insns coming in 24127 distinct signed and unsigned flavors) as in the x86 or SPARC, and the 24128 case where there are distinct signed and unsigned compare instructions 24129 and only one set of conditional branch instructions as in the PowerPC. 24130 24131 ---------- Footnotes ---------- 24132 24133 (1) `note' insns can separate them, though. 24134 24135 24136 File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 24137 24138 16.13 Defining Looping Instruction Patterns 24139 =========================================== 24140 24141 Some machines have special jump instructions that can be utilized to 24142 make loops more efficient. A common example is the 68000 `dbra' 24143 instruction which performs a decrement of a register and a branch if the 24144 result was greater than zero. Other machines, in particular digital 24145 signal processors (DSPs), have special block repeat instructions to 24146 provide low-overhead loop support. For example, the TI TMS320C3x/C4x 24147 DSPs have a block repeat instruction that loads special registers to 24148 mark the top and end of a loop and to count the number of loop 24149 iterations. This avoids the need for fetching and executing a 24150 `dbra'-like instruction and avoids pipeline stalls associated with the 24151 jump. 24152 24153 GCC has three special named patterns to support low overhead looping. 24154 They are `decrement_and_branch_until_zero', `doloop_begin', and 24155 `doloop_end'. The first pattern, `decrement_and_branch_until_zero', is 24156 not emitted during RTL generation but may be emitted during the 24157 instruction combination phase. This requires the assistance of the 24158 loop optimizer, using information collected during strength reduction, 24159 to reverse a loop to count down to zero. Some targets also require the 24160 loop optimizer to add a `REG_NONNEG' note to indicate that the 24161 iteration count is always positive. This is needed if the target 24162 performs a signed loop termination test. For example, the 68000 uses a 24163 pattern similar to the following for its `dbra' instruction: 24164 24165 (define_insn "decrement_and_branch_until_zero" 24166 [(set (pc) 24167 (if_then_else 24168 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 24169 (const_int -1)) 24170 (const_int 0)) 24171 (label_ref (match_operand 1 "" "")) 24172 (pc))) 24173 (set (match_dup 0) 24174 (plus:SI (match_dup 0) 24175 (const_int -1)))] 24176 "find_reg_note (insn, REG_NONNEG, 0)" 24177 "...") 24178 24179 Note that since the insn is both a jump insn and has an output, it must 24180 deal with its own reloads, hence the `m' constraints. Also note that 24181 since this insn is generated by the instruction combination phase 24182 combining two sequential insns together into an implicit parallel insn, 24183 the iteration counter needs to be biased by the same amount as the 24184 decrement operation, in this case -1. Note that the following similar 24185 pattern will not be matched by the combiner. 24186 24187 (define_insn "decrement_and_branch_until_zero" 24188 [(set (pc) 24189 (if_then_else 24190 (ge (match_operand:SI 0 "general_operand" "+d*am") 24191 (const_int 1)) 24192 (label_ref (match_operand 1 "" "")) 24193 (pc))) 24194 (set (match_dup 0) 24195 (plus:SI (match_dup 0) 24196 (const_int -1)))] 24197 "find_reg_note (insn, REG_NONNEG, 0)" 24198 "...") 24199 24200 The other two special looping patterns, `doloop_begin' and 24201 `doloop_end', are emitted by the loop optimizer for certain 24202 well-behaved loops with a finite number of loop iterations using 24203 information collected during strength reduction. 24204 24205 The `doloop_end' pattern describes the actual looping instruction (or 24206 the implicit looping operation) and the `doloop_begin' pattern is an 24207 optional companion pattern that can be used for initialization needed 24208 for some low-overhead looping instructions. 24209 24210 Note that some machines require the actual looping instruction to be 24211 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 24212 the true RTL for a looping instruction at the top of the loop can cause 24213 problems with flow analysis. So instead, a dummy `doloop' insn is 24214 emitted at the end of the loop. The machine dependent reorg pass checks 24215 for the presence of this `doloop' insn and then searches back to the 24216 top of the loop, where it inserts the true looping insn (provided there 24217 are no instructions in the loop which would cause problems). Any 24218 additional labels can be emitted at this point. In addition, if the 24219 desired special iteration counter register was not allocated, this 24220 machine dependent reorg pass could emit a traditional compare and jump 24221 instruction pair. 24222 24223 The essential difference between the `decrement_and_branch_until_zero' 24224 and the `doloop_end' patterns is that the loop optimizer allocates an 24225 additional pseudo register for the latter as an iteration counter. 24226 This pseudo register cannot be used within the loop (i.e., general 24227 induction variables cannot be derived from it), however, in many cases 24228 the loop induction variable may become redundant and removed by the 24229 flow pass. 24230 24231 24232 File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 24233 24234 16.14 Canonicalization of Instructions 24235 ====================================== 24236 24237 There are often cases where multiple RTL expressions could represent an 24238 operation performed by a single machine instruction. This situation is 24239 most commonly encountered with logical, branch, and multiply-accumulate 24240 instructions. In such cases, the compiler attempts to convert these 24241 multiple RTL expressions into a single canonical form to reduce the 24242 number of insn patterns required. 24243 24244 In addition to algebraic simplifications, following canonicalizations 24245 are performed: 24246 24247 * For commutative and comparison operators, a constant is always 24248 made the second operand. If a machine only supports a constant as 24249 the second operand, only patterns that match a constant in the 24250 second operand need be supplied. 24251 24252 * For associative operators, a sequence of operators will always 24253 chain to the left; for instance, only the left operand of an 24254 integer `plus' can itself be a `plus'. `and', `ior', `xor', 24255 `plus', `mult', `smin', `smax', `umin', and `umax' are associative 24256 when applied to integers, and sometimes to floating-point. 24257 24258 * For these operators, if only one operand is a `neg', `not', 24259 `mult', `plus', or `minus' expression, it will be the first 24260 operand. 24261 24262 * In combinations of `neg', `mult', `plus', and `minus', the `neg' 24263 operations (if any) will be moved inside the operations as far as 24264 possible. For instance, `(neg (mult A B))' is canonicalized as 24265 `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is 24266 canonicalized as `(minus A (mult B C))'. 24267 24268 * For the `compare' operator, a constant is always the second operand 24269 if the first argument is a condition code register or `(cc0)'. 24270 24271 * An operand of `neg', `not', `mult', `plus', or `minus' is made the 24272 first operand under the same conditions as above. 24273 24274 * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'. 24275 Likewise with `geu' instead of `ltu'. 24276 24277 * `(minus X (const_int N))' is converted to `(plus X (const_int 24278 -N))'. 24279 24280 * Within address computations (i.e., inside `mem'), a left shift is 24281 converted into the appropriate multiplication by a power of two. 24282 24283 * De Morgan's Law is used to move bitwise negation inside a bitwise 24284 logical-and or logical-or operation. If this results in only one 24285 operand being a `not' expression, it will be the first one. 24286 24287 A machine that has an instruction that performs a bitwise 24288 logical-and of one operand with the bitwise negation of the other 24289 should specify the pattern for that instruction as 24290 24291 (define_insn "" 24292 [(set (match_operand:M 0 ...) 24293 (and:M (not:M (match_operand:M 1 ...)) 24294 (match_operand:M 2 ...)))] 24295 "..." 24296 "...") 24297 24298 Similarly, a pattern for a "NAND" instruction should be written 24299 24300 (define_insn "" 24301 [(set (match_operand:M 0 ...) 24302 (ior:M (not:M (match_operand:M 1 ...)) 24303 (not:M (match_operand:M 2 ...))))] 24304 "..." 24305 "...") 24306 24307 In both cases, it is not necessary to include patterns for the many 24308 logically equivalent RTL expressions. 24309 24310 * The only possible RTL expressions involving both bitwise 24311 exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M 24312 (xor:M X Y))'. 24313 24314 * The sum of three items, one of which is a constant, will only 24315 appear in the form 24316 24317 (plus:M (plus:M X Y) CONSTANT) 24318 24319 * Equality comparisons of a group of bits (usually a single bit) 24320 with zero will be written using `zero_extract' rather than the 24321 equivalent `and' or `sign_extract' operations. 24322 24323 * `(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))' 24324 is converted to `(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))', 24325 and likewise for `zero_extend'. 24326 24327 * `(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))' 24328 is converted to `(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S)) 24329 (sign_extend:M1 Y))', and likewise for patterns using 24330 `zero_extend' and `lshiftrt'. If the second operand of `mult' is 24331 also a shift, then that is extended also. This transformation is 24332 only applied when it can be proven that the original operation had 24333 sufficient precision to prevent overflow. 24334 24335 24336 Further canonicalization rules are defined in the function 24337 `commutative_operand_precedence' in `gcc/rtlanal.c'. 24338 24339 24340 File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 24341 24342 16.15 Defining RTL Sequences for Code Generation 24343 ================================================ 24344 24345 On some target machines, some standard pattern names for RTL generation 24346 cannot be handled with single insn, but a sequence of RTL insns can 24347 represent them. For these target machines, you can write a 24348 `define_expand' to specify how to generate the sequence of RTL. 24349 24350 A `define_expand' is an RTL expression that looks almost like a 24351 `define_insn'; but, unlike the latter, a `define_expand' is used only 24352 for RTL generation and it can produce more than one RTL insn. 24353 24354 A `define_expand' RTX has four operands: 24355 24356 * The name. Each `define_expand' must have a name, since the only 24357 use for it is to refer to it by name. 24358 24359 * The RTL template. This is a vector of RTL expressions representing 24360 a sequence of separate instructions. Unlike `define_insn', there 24361 is no implicit surrounding `PARALLEL'. 24362 24363 * The condition, a string containing a C expression. This 24364 expression is used to express how the availability of this pattern 24365 depends on subclasses of target machine, selected by command-line 24366 options when GCC is run. This is just like the condition of a 24367 `define_insn' that has a standard name. Therefore, the condition 24368 (if present) may not depend on the data in the insn being matched, 24369 but only the target-machine-type flags. The compiler needs to 24370 test these conditions during initialization in order to learn 24371 exactly which named instructions are available in a particular run. 24372 24373 * The preparation statements, a string containing zero or more C 24374 statements which are to be executed before RTL code is generated 24375 from the RTL template. 24376 24377 Usually these statements prepare temporary registers for use as 24378 internal operands in the RTL template, but they can also generate 24379 RTL insns directly by calling routines such as `emit_insn', etc. 24380 Any such insns precede the ones that come from the RTL template. 24381 24382 * Optionally, a vector containing the values of attributes. *Note 24383 Insn Attributes::. 24384 24385 Every RTL insn emitted by a `define_expand' must match some 24386 `define_insn' in the machine description. Otherwise, the compiler will 24387 crash when trying to generate code for the insn or trying to optimize 24388 it. 24389 24390 The RTL template, in addition to controlling generation of RTL insns, 24391 also describes the operands that need to be specified when this pattern 24392 is used. In particular, it gives a predicate for each operand. 24393 24394 A true operand, which needs to be specified in order to generate RTL 24395 from the pattern, should be described with a `match_operand' in its 24396 first occurrence in the RTL template. This enters information on the 24397 operand's predicate into the tables that record such things. GCC uses 24398 the information to preload the operand into a register if that is 24399 required for valid RTL code. If the operand is referred to more than 24400 once, subsequent references should use `match_dup'. 24401 24402 The RTL template may also refer to internal "operands" which are 24403 temporary registers or labels used only within the sequence made by the 24404 `define_expand'. Internal operands are substituted into the RTL 24405 template with `match_dup', never with `match_operand'. The values of 24406 the internal operands are not passed in as arguments by the compiler 24407 when it requests use of this pattern. Instead, they are computed 24408 within the pattern, in the preparation statements. These statements 24409 compute the values and store them into the appropriate elements of 24410 `operands' so that `match_dup' can find them. 24411 24412 There are two special macros defined for use in the preparation 24413 statements: `DONE' and `FAIL'. Use them with a following semicolon, as 24414 a statement. 24415 24416 `DONE' 24417 Use the `DONE' macro to end RTL generation for the pattern. The 24418 only RTL insns resulting from the pattern on this occasion will be 24419 those already emitted by explicit calls to `emit_insn' within the 24420 preparation statements; the RTL template will not be generated. 24421 24422 `FAIL' 24423 Make the pattern fail on this occasion. When a pattern fails, it 24424 means that the pattern was not truly available. The calling 24425 routines in the compiler will try other strategies for code 24426 generation using other patterns. 24427 24428 Failure is currently supported only for binary (addition, 24429 multiplication, shifting, etc.) and bit-field (`extv', `extzv', 24430 and `insv') operations. 24431 24432 If the preparation falls through (invokes neither `DONE' nor `FAIL'), 24433 then the `define_expand' acts like a `define_insn' in that the RTL 24434 template is used to generate the insn. 24435 24436 The RTL template is not used for matching, only for generating the 24437 initial insn list. If the preparation statement always invokes `DONE' 24438 or `FAIL', the RTL template may be reduced to a simple list of 24439 operands, such as this example: 24440 24441 (define_expand "addsi3" 24442 [(match_operand:SI 0 "register_operand" "") 24443 (match_operand:SI 1 "register_operand" "") 24444 (match_operand:SI 2 "register_operand" "")] 24445 "" 24446 " 24447 { 24448 handle_add (operands[0], operands[1], operands[2]); 24449 DONE; 24450 }") 24451 24452 Here is an example, the definition of left-shift for the SPUR chip: 24453 24454 (define_expand "ashlsi3" 24455 [(set (match_operand:SI 0 "register_operand" "") 24456 (ashift:SI 24457 (match_operand:SI 1 "register_operand" "") 24458 (match_operand:SI 2 "nonmemory_operand" "")))] 24459 "" 24460 " 24461 24462 { 24463 if (GET_CODE (operands[2]) != CONST_INT 24464 || (unsigned) INTVAL (operands[2]) > 3) 24465 FAIL; 24466 }") 24467 24468 This example uses `define_expand' so that it can generate an RTL insn 24469 for shifting when the shift-count is in the supported range of 0 to 3 24470 but fail in other cases where machine insns aren't available. When it 24471 fails, the compiler tries another strategy using different patterns 24472 (such as, a library call). 24473 24474 If the compiler were able to handle nontrivial condition-strings in 24475 patterns with names, then it would be possible to use a `define_insn' 24476 in that case. Here is another case (zero-extension on the 68000) which 24477 makes more use of the power of `define_expand': 24478 24479 (define_expand "zero_extendhisi2" 24480 [(set (match_operand:SI 0 "general_operand" "") 24481 (const_int 0)) 24482 (set (strict_low_part 24483 (subreg:HI 24484 (match_dup 0) 24485 0)) 24486 (match_operand:HI 1 "general_operand" ""))] 24487 "" 24488 "operands[1] = make_safe_from (operands[1], operands[0]);") 24489 24490 Here two RTL insns are generated, one to clear the entire output operand 24491 and the other to copy the input operand into its low half. This 24492 sequence is incorrect if the input operand refers to [the old value of] 24493 the output operand, so the preparation statement makes sure this isn't 24494 so. The function `make_safe_from' copies the `operands[1]' into a 24495 temporary register if it refers to `operands[0]'. It does this by 24496 emitting another RTL insn. 24497 24498 Finally, a third example shows the use of an internal operand. 24499 Zero-extension on the SPUR chip is done by `and'-ing the result against 24500 a halfword mask. But this mask cannot be represented by a `const_int' 24501 because the constant value is too large to be legitimate on this 24502 machine. So it must be copied into a register with `force_reg' and 24503 then the register used in the `and'. 24504 24505 (define_expand "zero_extendhisi2" 24506 [(set (match_operand:SI 0 "register_operand" "") 24507 (and:SI (subreg:SI 24508 (match_operand:HI 1 "register_operand" "") 24509 0) 24510 (match_dup 2)))] 24511 "" 24512 "operands[2] 24513 = force_reg (SImode, GEN_INT (65535)); ") 24514 24515 _Note:_ If the `define_expand' is used to serve a standard binary or 24516 unary arithmetic operation or a bit-field operation, then the last insn 24517 it generates must not be a `code_label', `barrier' or `note'. It must 24518 be an `insn', `jump_insn' or `call_insn'. If you don't need a real insn 24519 at the end, emit an insn to copy the result of the operation into 24520 itself. Such an insn will generate no code, but it can avoid problems 24521 in the compiler. 24522 24523 24524 File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 24525 24526 16.16 Defining How to Split Instructions 24527 ======================================== 24528 24529 There are two cases where you should specify how to split a pattern 24530 into multiple insns. On machines that have instructions requiring 24531 delay slots (*note Delay Slots::) or that have instructions whose 24532 output is not available for multiple cycles (*note Processor pipeline 24533 description::), the compiler phases that optimize these cases need to 24534 be able to move insns into one-instruction delay slots. However, some 24535 insns may generate more than one machine instruction. These insns 24536 cannot be placed into a delay slot. 24537 24538 Often you can rewrite the single insn as a list of individual insns, 24539 each corresponding to one machine instruction. The disadvantage of 24540 doing so is that it will cause the compilation to be slower and require 24541 more space. If the resulting insns are too complex, it may also 24542 suppress some optimizations. The compiler splits the insn if there is a 24543 reason to believe that it might improve instruction or delay slot 24544 scheduling. 24545 24546 The insn combiner phase also splits putative insns. If three insns are 24547 merged into one insn with a complex expression that cannot be matched by 24548 some `define_insn' pattern, the combiner phase attempts to split the 24549 complex pattern into two insns that are recognized. Usually it can 24550 break the complex pattern into two patterns by splitting out some 24551 subexpression. However, in some other cases, such as performing an 24552 addition of a large constant in two insns on a RISC machine, the way to 24553 split the addition into two insns is machine-dependent. 24554 24555 The `define_split' definition tells the compiler how to split a 24556 complex insn into several simpler insns. It looks like this: 24557 24558 (define_split 24559 [INSN-PATTERN] 24560 "CONDITION" 24561 [NEW-INSN-PATTERN-1 24562 NEW-INSN-PATTERN-2 24563 ...] 24564 "PREPARATION-STATEMENTS") 24565 24566 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 24567 final condition to be tested, as in a `define_insn'. When an insn 24568 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 24569 in the insn list with the insns given by NEW-INSN-PATTERN-1, 24570 NEW-INSN-PATTERN-2, etc. 24571 24572 The PREPARATION-STATEMENTS are similar to those statements that are 24573 specified for `define_expand' (*note Expander Definitions::) and are 24574 executed before the new RTL is generated to prepare for the generated 24575 code or emit some insns whose pattern is not fixed. Unlike those in 24576 `define_expand', however, these statements must not generate any new 24577 pseudo-registers. Once reload has completed, they also must not 24578 allocate any space in the stack frame. 24579 24580 Patterns are matched against INSN-PATTERN in two different 24581 circumstances. If an insn needs to be split for delay slot scheduling 24582 or insn scheduling, the insn is already known to be valid, which means 24583 that it must have been matched by some `define_insn' and, if 24584 `reload_completed' is nonzero, is known to satisfy the constraints of 24585 that `define_insn'. In that case, the new insn patterns must also be 24586 insns that are matched by some `define_insn' and, if `reload_completed' 24587 is nonzero, must also satisfy the constraints of those definitions. 24588 24589 As an example of this usage of `define_split', consider the following 24590 example from `a29k.md', which splits a `sign_extend' from `HImode' to 24591 `SImode' into a pair of shift insns: 24592 24593 (define_split 24594 [(set (match_operand:SI 0 "gen_reg_operand" "") 24595 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 24596 "" 24597 [(set (match_dup 0) 24598 (ashift:SI (match_dup 1) 24599 (const_int 16))) 24600 (set (match_dup 0) 24601 (ashiftrt:SI (match_dup 0) 24602 (const_int 16)))] 24603 " 24604 { operands[1] = gen_lowpart (SImode, operands[1]); }") 24605 24606 When the combiner phase tries to split an insn pattern, it is always 24607 the case that the pattern is _not_ matched by any `define_insn'. The 24608 combiner pass first tries to split a single `set' expression and then 24609 the same `set' expression inside a `parallel', but followed by a 24610 `clobber' of a pseudo-reg to use as a scratch register. In these 24611 cases, the combiner expects exactly two new insn patterns to be 24612 generated. It will verify that these patterns match some `define_insn' 24613 definitions, so you need not do this test in the `define_split' (of 24614 course, there is no point in writing a `define_split' that will never 24615 produce insns that match). 24616 24617 Here is an example of this use of `define_split', taken from 24618 `rs6000.md': 24619 24620 (define_split 24621 [(set (match_operand:SI 0 "gen_reg_operand" "") 24622 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 24623 (match_operand:SI 2 "non_add_cint_operand" "")))] 24624 "" 24625 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 24626 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 24627 " 24628 { 24629 int low = INTVAL (operands[2]) & 0xffff; 24630 int high = (unsigned) INTVAL (operands[2]) >> 16; 24631 24632 if (low & 0x8000) 24633 high++, low |= 0xffff0000; 24634 24635 operands[3] = GEN_INT (high << 16); 24636 operands[4] = GEN_INT (low); 24637 }") 24638 24639 Here the predicate `non_add_cint_operand' matches any `const_int' that 24640 is _not_ a valid operand of a single add insn. The add with the 24641 smaller displacement is written so that it can be substituted into the 24642 address of a subsequent operation. 24643 24644 An example that uses a scratch register, from the same file, generates 24645 an equality comparison of a register and a large constant: 24646 24647 (define_split 24648 [(set (match_operand:CC 0 "cc_reg_operand" "") 24649 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 24650 (match_operand:SI 2 "non_short_cint_operand" ""))) 24651 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 24652 "find_single_use (operands[0], insn, 0) 24653 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 24654 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 24655 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 24656 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 24657 " 24658 { 24659 /* Get the constant we are comparing against, C, and see what it 24660 looks like sign-extended to 16 bits. Then see what constant 24661 could be XOR'ed with C to get the sign-extended value. */ 24662 24663 int c = INTVAL (operands[2]); 24664 int sextc = (c << 16) >> 16; 24665 int xorv = c ^ sextc; 24666 24667 operands[4] = GEN_INT (xorv); 24668 operands[5] = GEN_INT (sextc); 24669 }") 24670 24671 To avoid confusion, don't write a single `define_split' that accepts 24672 some insns that match some `define_insn' as well as some insns that 24673 don't. Instead, write two separate `define_split' definitions, one for 24674 the insns that are valid and one for the insns that are not valid. 24675 24676 The splitter is allowed to split jump instructions into sequence of 24677 jumps or create new jumps in while splitting non-jump instructions. As 24678 the central flowgraph and branch prediction information needs to be 24679 updated, several restriction apply. 24680 24681 Splitting of jump instruction into sequence that over by another jump 24682 instruction is always valid, as compiler expect identical behavior of 24683 new jump. When new sequence contains multiple jump instructions or new 24684 labels, more assistance is needed. Splitter is required to create only 24685 unconditional jumps, or simple conditional jump instructions. 24686 Additionally it must attach a `REG_BR_PROB' note to each conditional 24687 jump. A global variable `split_branch_probability' holds the 24688 probability of the original branch in case it was a simple conditional 24689 jump, -1 otherwise. To simplify recomputing of edge frequencies, the 24690 new sequence is required to have only forward jumps to the newly 24691 created labels. 24692 24693 For the common case where the pattern of a define_split exactly 24694 matches the pattern of a define_insn, use `define_insn_and_split'. It 24695 looks like this: 24696 24697 (define_insn_and_split 24698 [INSN-PATTERN] 24699 "CONDITION" 24700 "OUTPUT-TEMPLATE" 24701 "SPLIT-CONDITION" 24702 [NEW-INSN-PATTERN-1 24703 NEW-INSN-PATTERN-2 24704 ...] 24705 "PREPARATION-STATEMENTS" 24706 [INSN-ATTRIBUTES]) 24707 24708 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 24709 as in `define_insn'. The NEW-INSN-PATTERN vector and the 24710 PREPARATION-STATEMENTS are used as in a `define_split'. The 24711 SPLIT-CONDITION is also used as in `define_split', with the additional 24712 behavior that if the condition starts with `&&', the condition used for 24713 the split will be the constructed as a logical "and" of the split 24714 condition with the insn condition. For example, from i386.md: 24715 24716 (define_insn_and_split "zero_extendhisi2_and" 24717 [(set (match_operand:SI 0 "register_operand" "=r") 24718 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 24719 (clobber (reg:CC 17))] 24720 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 24721 "#" 24722 "&& reload_completed" 24723 [(parallel [(set (match_dup 0) 24724 (and:SI (match_dup 0) (const_int 65535))) 24725 (clobber (reg:CC 17))])] 24726 "" 24727 [(set_attr "type" "alu1")]) 24728 24729 In this case, the actual split condition will be 24730 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 24731 24732 The `define_insn_and_split' construction provides exactly the same 24733 functionality as two separate `define_insn' and `define_split' 24734 patterns. It exists for compactness, and as a maintenance tool to 24735 prevent having to ensure the two patterns' templates match. 24736 24737 24738 File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 24739 24740 16.17 Including Patterns in Machine Descriptions. 24741 ================================================= 24742 24743 The `include' pattern tells the compiler tools where to look for 24744 patterns that are in files other than in the file `.md'. This is used 24745 only at build time and there is no preprocessing allowed. 24746 24747 It looks like: 24748 24749 24750 (include 24751 PATHNAME) 24752 24753 For example: 24754 24755 24756 (include "filestuff") 24757 24758 Where PATHNAME is a string that specifies the location of the file, 24759 specifies the include file to be in `gcc/config/target/filestuff'. The 24760 directory `gcc/config/target' is regarded as the default directory. 24761 24762 Machine descriptions may be split up into smaller more manageable 24763 subsections and placed into subdirectories. 24764 24765 By specifying: 24766 24767 24768 (include "BOGUS/filestuff") 24769 24770 the include file is specified to be in 24771 `gcc/config/TARGET/BOGUS/filestuff'. 24772 24773 Specifying an absolute path for the include file such as; 24774 24775 (include "/u2/BOGUS/filestuff") 24776 is permitted but is not encouraged. 24777 24778 16.17.1 RTL Generation Tool Options for Directory Search 24779 -------------------------------------------------------- 24780 24781 The `-IDIR' option specifies directories to search for machine 24782 descriptions. For example: 24783 24784 24785 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 24786 24787 Add the directory DIR to the head of the list of directories to be 24788 searched for header files. This can be used to override a system 24789 machine definition file, substituting your own version, since these 24790 directories are searched before the default machine description file 24791 directories. If you use more than one `-I' option, the directories are 24792 scanned in left-to-right order; the standard default directory come 24793 after. 24794 24795 24796 File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 24797 24798 16.18 Machine-Specific Peephole Optimizers 24799 ========================================== 24800 24801 In addition to instruction patterns the `md' file may contain 24802 definitions of machine-specific peephole optimizations. 24803 24804 The combiner does not notice certain peephole optimizations when the 24805 data flow in the program does not suggest that it should try them. For 24806 example, sometimes two consecutive insns related in purpose can be 24807 combined even though the second one does not appear to use a register 24808 computed in the first one. A machine-specific peephole optimizer can 24809 detect such opportunities. 24810 24811 There are two forms of peephole definitions that may be used. The 24812 original `define_peephole' is run at assembly output time to match 24813 insns and substitute assembly text. Use of `define_peephole' is 24814 deprecated. 24815 24816 A newer `define_peephole2' matches insns and substitutes new insns. 24817 The `peephole2' pass is run after register allocation but before 24818 scheduling, which may result in much better code for targets that do 24819 scheduling. 24820 24821 * Menu: 24822 24823 * define_peephole:: RTL to Text Peephole Optimizers 24824 * define_peephole2:: RTL to RTL Peephole Optimizers 24825 24826 24827 File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 24828 24829 16.18.1 RTL to Text Peephole Optimizers 24830 --------------------------------------- 24831 24832 A definition looks like this: 24833 24834 (define_peephole 24835 [INSN-PATTERN-1 24836 INSN-PATTERN-2 24837 ...] 24838 "CONDITION" 24839 "TEMPLATE" 24840 "OPTIONAL-INSN-ATTRIBUTES") 24841 24842 The last string operand may be omitted if you are not using any 24843 machine-specific information in this machine description. If present, 24844 it must obey the same rules as in a `define_insn'. 24845 24846 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 24847 consecutive insns. The optimization applies to a sequence of insns when 24848 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 24849 and so on. 24850 24851 Each of the insns matched by a peephole must also match a 24852 `define_insn'. Peepholes are checked only at the last stage just 24853 before code generation, and only optionally. Therefore, any insn which 24854 would match a peephole but no `define_insn' will cause a crash in code 24855 generation in an unoptimized compilation, or at various optimization 24856 stages. 24857 24858 The operands of the insns are matched with `match_operands', 24859 `match_operator', and `match_dup', as usual. What is not usual is that 24860 the operand numbers apply to all the insn patterns in the definition. 24861 So, you can check for identical operands in two insns by using 24862 `match_operand' in one insn and `match_dup' in the other. 24863 24864 The operand constraints used in `match_operand' patterns do not have 24865 any direct effect on the applicability of the peephole, but they will 24866 be validated afterward, so make sure your constraints are general enough 24867 to apply whenever the peephole matches. If the peephole matches but 24868 the constraints are not satisfied, the compiler will crash. 24869 24870 It is safe to omit constraints in all the operands of the peephole; or 24871 you can write constraints which serve as a double-check on the criteria 24872 previously tested. 24873 24874 Once a sequence of insns matches the patterns, the CONDITION is 24875 checked. This is a C expression which makes the final decision whether 24876 to perform the optimization (we do so if the expression is nonzero). If 24877 CONDITION is omitted (in other words, the string is empty) then the 24878 optimization is applied to every sequence of insns that matches the 24879 patterns. 24880 24881 The defined peephole optimizations are applied after register 24882 allocation is complete. Therefore, the peephole definition can check 24883 which operands have ended up in which kinds of registers, just by 24884 looking at the operands. 24885 24886 The way to refer to the operands in CONDITION is to write 24887 `operands[I]' for operand number I (as matched by `(match_operand I 24888 ...)'). Use the variable `insn' to refer to the last of the insns 24889 being matched; use `prev_active_insn' to find the preceding insns. 24890 24891 When optimizing computations with intermediate results, you can use 24892 CONDITION to match only when the intermediate results are not used 24893 elsewhere. Use the C expression `dead_or_set_p (INSN, OP)', where INSN 24894 is the insn in which you expect the value to be used for the last time 24895 (from the value of `insn', together with use of `prev_nonnote_insn'), 24896 and OP is the intermediate value (from `operands[I]'). 24897 24898 Applying the optimization means replacing the sequence of insns with 24899 one new insn. The TEMPLATE controls ultimate output of assembler code 24900 for this combined insn. It works exactly like the template of a 24901 `define_insn'. Operand numbers in this template are the same ones used 24902 in matching the original sequence of insns. 24903 24904 The result of a defined peephole optimizer does not need to match any 24905 of the insn patterns in the machine description; it does not even have 24906 an opportunity to match them. The peephole optimizer definition itself 24907 serves as the insn pattern to control how the insn is output. 24908 24909 Defined peephole optimizers are run as assembler code is being output, 24910 so the insns they produce are never combined or rearranged in any way. 24911 24912 Here is an example, taken from the 68000 machine description: 24913 24914 (define_peephole 24915 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 24916 (set (match_operand:DF 0 "register_operand" "=f") 24917 (match_operand:DF 1 "register_operand" "ad"))] 24918 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 24919 { 24920 rtx xoperands[2]; 24921 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 24922 #ifdef MOTOROLA 24923 output_asm_insn ("move.l %1,(sp)", xoperands); 24924 output_asm_insn ("move.l %1,-(sp)", operands); 24925 return "fmove.d (sp)+,%0"; 24926 #else 24927 output_asm_insn ("movel %1,sp@", xoperands); 24928 output_asm_insn ("movel %1,sp@-", operands); 24929 return "fmoved sp@+,%0"; 24930 #endif 24931 }) 24932 24933 The effect of this optimization is to change 24934 24935 jbsr _foobar 24936 addql #4,sp 24937 movel d1,sp@- 24938 movel d0,sp@- 24939 fmoved sp@+,fp0 24940 24941 into 24942 24943 jbsr _foobar 24944 movel d1,sp@ 24945 movel d0,sp@- 24946 fmoved sp@+,fp0 24947 24948 INSN-PATTERN-1 and so on look _almost_ like the second operand of 24949 `define_insn'. There is one important difference: the second operand 24950 of `define_insn' consists of one or more RTX's enclosed in square 24951 brackets. Usually, there is only one: then the same action can be 24952 written as an element of a `define_peephole'. But when there are 24953 multiple actions in a `define_insn', they are implicitly enclosed in a 24954 `parallel'. Then you must explicitly write the `parallel', and the 24955 square brackets within it, in the `define_peephole'. Thus, if an insn 24956 pattern looks like this, 24957 24958 (define_insn "divmodsi4" 24959 [(set (match_operand:SI 0 "general_operand" "=d") 24960 (div:SI (match_operand:SI 1 "general_operand" "0") 24961 (match_operand:SI 2 "general_operand" "dmsK"))) 24962 (set (match_operand:SI 3 "general_operand" "=d") 24963 (mod:SI (match_dup 1) (match_dup 2)))] 24964 "TARGET_68020" 24965 "divsl%.l %2,%3:%0") 24966 24967 then the way to mention this insn in a peephole is as follows: 24968 24969 (define_peephole 24970 [... 24971 (parallel 24972 [(set (match_operand:SI 0 "general_operand" "=d") 24973 (div:SI (match_operand:SI 1 "general_operand" "0") 24974 (match_operand:SI 2 "general_operand" "dmsK"))) 24975 (set (match_operand:SI 3 "general_operand" "=d") 24976 (mod:SI (match_dup 1) (match_dup 2)))]) 24977 ...] 24978 ...) 24979 24980 24981 File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 24982 24983 16.18.2 RTL to RTL Peephole Optimizers 24984 -------------------------------------- 24985 24986 The `define_peephole2' definition tells the compiler how to substitute 24987 one sequence of instructions for another sequence, what additional 24988 scratch registers may be needed and what their lifetimes must be. 24989 24990 (define_peephole2 24991 [INSN-PATTERN-1 24992 INSN-PATTERN-2 24993 ...] 24994 "CONDITION" 24995 [NEW-INSN-PATTERN-1 24996 NEW-INSN-PATTERN-2 24997 ...] 24998 "PREPARATION-STATEMENTS") 24999 25000 The definition is almost identical to `define_split' (*note Insn 25001 Splitting::) except that the pattern to match is not a single 25002 instruction, but a sequence of instructions. 25003 25004 It is possible to request additional scratch registers for use in the 25005 output template. If appropriate registers are not free, the pattern 25006 will simply not match. 25007 25008 Scratch registers are requested with a `match_scratch' pattern at the 25009 top level of the input pattern. The allocated register (initially) will 25010 be dead at the point requested within the original sequence. If the 25011 scratch is used at more than a single point, a `match_dup' pattern at 25012 the top level of the input pattern marks the last position in the input 25013 sequence at which the register must be available. 25014 25015 Here is an example from the IA-32 machine description: 25016 25017 (define_peephole2 25018 [(match_scratch:SI 2 "r") 25019 (parallel [(set (match_operand:SI 0 "register_operand" "") 25020 (match_operator:SI 3 "arith_or_logical_operator" 25021 [(match_dup 0) 25022 (match_operand:SI 1 "memory_operand" "")])) 25023 (clobber (reg:CC 17))])] 25024 "! optimize_size && ! TARGET_READ_MODIFY" 25025 [(set (match_dup 2) (match_dup 1)) 25026 (parallel [(set (match_dup 0) 25027 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 25028 (clobber (reg:CC 17))])] 25029 "") 25030 25031 This pattern tries to split a load from its use in the hopes that we'll 25032 be able to schedule around the memory load latency. It allocates a 25033 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to 25034 be live only at the point just before the arithmetic. 25035 25036 A real example requiring extended scratch lifetimes is harder to come 25037 by, so here's a silly made-up example: 25038 25039 (define_peephole2 25040 [(match_scratch:SI 4 "r") 25041 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 25042 (set (match_operand:SI 2 "" "") (match_dup 1)) 25043 (match_dup 4) 25044 (set (match_operand:SI 3 "" "") (match_dup 1))] 25045 "/* determine 1 does not overlap 0 and 2 */" 25046 [(set (match_dup 4) (match_dup 1)) 25047 (set (match_dup 0) (match_dup 4)) 25048 (set (match_dup 2) (match_dup 4))] 25049 (set (match_dup 3) (match_dup 4))] 25050 "") 25051 25052 If we had not added the `(match_dup 4)' in the middle of the input 25053 sequence, it might have been the case that the register we chose at the 25054 beginning of the sequence is killed by the first or second `set'. 25055 25056 25057 File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 25058 25059 16.19 Instruction Attributes 25060 ============================ 25061 25062 In addition to describing the instruction supported by the target 25063 machine, the `md' file also defines a group of "attributes" and a set of 25064 values for each. Every generated insn is assigned a value for each 25065 attribute. One possible attribute would be the effect that the insn 25066 has on the machine's condition code. This attribute can then be used 25067 by `NOTICE_UPDATE_CC' to track the condition codes. 25068 25069 * Menu: 25070 25071 * Defining Attributes:: Specifying attributes and their values. 25072 * Expressions:: Valid expressions for attribute values. 25073 * Tagging Insns:: Assigning attribute values to insns. 25074 * Attr Example:: An example of assigning attributes. 25075 * Insn Lengths:: Computing the length of insns. 25076 * Constant Attributes:: Defining attributes that are constant. 25077 * Delay Slots:: Defining delay slots required for a machine. 25078 * Processor pipeline description:: Specifying information for insn scheduling. 25079 25080 25081 File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 25082 25083 16.19.1 Defining Attributes and their Values 25084 -------------------------------------------- 25085 25086 The `define_attr' expression is used to define each attribute required 25087 by the target machine. It looks like: 25088 25089 (define_attr NAME LIST-OF-VALUES DEFAULT) 25090 25091 NAME is a string specifying the name of the attribute being defined. 25092 Some attributes are used in a special way by the rest of the compiler. 25093 The `enabled' attribute can be used to conditionally enable or disable 25094 insn alternatives (*note Disable Insn Alternatives::). The `predicable' 25095 attribute, together with a suitable `define_cond_exec' (*note 25096 Conditional Execution::), can be used to automatically generate 25097 conditional variants of instruction patterns. The compiler internally 25098 uses the names `ce_enabled' and `nonce_enabled', so they should not be 25099 used elsewhere as alternative names. 25100 25101 LIST-OF-VALUES is either a string that specifies a comma-separated 25102 list of values that can be assigned to the attribute, or a null string 25103 to indicate that the attribute takes numeric values. 25104 25105 DEFAULT is an attribute expression that gives the value of this 25106 attribute for insns that match patterns whose definition does not 25107 include an explicit value for this attribute. *Note Attr Example::, 25108 for more information on the handling of defaults. *Note Constant 25109 Attributes::, for information on attributes that do not depend on any 25110 particular insn. 25111 25112 For each defined attribute, a number of definitions are written to the 25113 `insn-attr.h' file. For cases where an explicit set of values is 25114 specified for an attribute, the following are defined: 25115 25116 * A `#define' is written for the symbol `HAVE_ATTR_NAME'. 25117 25118 * An enumerated class is defined for `attr_NAME' with elements of 25119 the form `UPPER-NAME_UPPER-VALUE' where the attribute name and 25120 value are first converted to uppercase. 25121 25122 * A function `get_attr_NAME' is defined that is passed an insn and 25123 returns the attribute value for that insn. 25124 25125 For example, if the following is present in the `md' file: 25126 25127 (define_attr "type" "branch,fp,load,store,arith" ...) 25128 25129 the following lines will be written to the file `insn-attr.h'. 25130 25131 #define HAVE_ATTR_type 1 25132 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 25133 TYPE_STORE, TYPE_ARITH}; 25134 extern enum attr_type get_attr_type (); 25135 25136 If the attribute takes numeric values, no `enum' type will be defined 25137 and the function to obtain the attribute's value will return `int'. 25138 25139 There are attributes which are tied to a specific meaning. These 25140 attributes are not free to use for other purposes: 25141 25142 `length' 25143 The `length' attribute is used to calculate the length of emitted 25144 code chunks. This is especially important when verifying branch 25145 distances. *Note Insn Lengths::. 25146 25147 `enabled' 25148 The `enabled' attribute can be defined to prevent certain 25149 alternatives of an insn definition from being used during code 25150 generation. *Note Disable Insn Alternatives::. 25151 25152 For each of these special attributes, the corresponding 25153 `HAVE_ATTR_NAME' `#define' is also written when the attribute is not 25154 defined; in that case, it is defined as `0'. 25155 25156 Another way of defining an attribute is to use: 25157 25158 (define_enum_attr "ATTR" "ENUM" DEFAULT) 25159 25160 This works in just the same way as `define_attr', except that the list 25161 of values is taken from a separate enumeration called ENUM (*note 25162 define_enum::). This form allows you to use the same list of values 25163 for several attributes without having to repeat the list each time. 25164 For example: 25165 25166 (define_enum "processor" [ 25167 model_a 25168 model_b 25169 ... 25170 ]) 25171 (define_enum_attr "arch" "processor" 25172 (const (symbol_ref "target_arch"))) 25173 (define_enum_attr "tune" "processor" 25174 (const (symbol_ref "target_tune"))) 25175 25176 defines the same attributes as: 25177 25178 (define_attr "arch" "model_a,model_b,..." 25179 (const (symbol_ref "target_arch"))) 25180 (define_attr "tune" "model_a,model_b,..." 25181 (const (symbol_ref "target_tune"))) 25182 25183 but without duplicating the processor list. The second example 25184 defines two separate C enums (`attr_arch' and `attr_tune') whereas the 25185 first defines a single C enum (`processor'). 25186 25187 25188 File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 25189 25190 16.19.2 Attribute Expressions 25191 ----------------------------- 25192 25193 RTL expressions used to define attributes use the codes described above 25194 plus a few specific to attribute definitions, to be discussed below. 25195 Attribute value expressions must have one of the following forms: 25196 25197 `(const_int I)' 25198 The integer I specifies the value of a numeric attribute. I must 25199 be non-negative. 25200 25201 The value of a numeric attribute can be specified either with a 25202 `const_int', or as an integer represented as a string in 25203 `const_string', `eq_attr' (see below), `attr', `symbol_ref', 25204 simple arithmetic expressions, and `set_attr' overrides on 25205 specific instructions (*note Tagging Insns::). 25206 25207 `(const_string VALUE)' 25208 The string VALUE specifies a constant attribute value. If VALUE 25209 is specified as `"*"', it means that the default value of the 25210 attribute is to be used for the insn containing this expression. 25211 `"*"' obviously cannot be used in the DEFAULT expression of a 25212 `define_attr'. 25213 25214 If the attribute whose value is being specified is numeric, VALUE 25215 must be a string containing a non-negative integer (normally 25216 `const_int' would be used in this case). Otherwise, it must 25217 contain one of the valid values for the attribute. 25218 25219 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 25220 TEST specifies an attribute test, whose format is defined below. 25221 The value of this expression is TRUE-VALUE if TEST is true, 25222 otherwise it is FALSE-VALUE. 25223 25224 `(cond [TEST1 VALUE1 ...] DEFAULT)' 25225 The first operand of this expression is a vector containing an even 25226 number of expressions and consisting of pairs of TEST and VALUE 25227 expressions. The value of the `cond' expression is that of the 25228 VALUE corresponding to the first true TEST expression. If none of 25229 the TEST expressions are true, the value of the `cond' expression 25230 is that of the DEFAULT expression. 25231 25232 TEST expressions can have one of the following forms: 25233 25234 `(const_int I)' 25235 This test is true if I is nonzero and false otherwise. 25236 25237 `(not TEST)' 25238 `(ior TEST1 TEST2)' 25239 `(and TEST1 TEST2)' 25240 These tests are true if the indicated logical function is true. 25241 25242 `(match_operand:M N PRED CONSTRAINTS)' 25243 This test is true if operand N of the insn whose attribute value 25244 is being determined has mode M (this part of the test is ignored 25245 if M is `VOIDmode') and the function specified by the string PRED 25246 returns a nonzero value when passed operand N and mode M (this 25247 part of the test is ignored if PRED is the null string). 25248 25249 The CONSTRAINTS operand is ignored and should be the null string. 25250 25251 `(match_test C-EXPR)' 25252 The test is true if C expression C-EXPR is true. In non-constant 25253 attributes, C-EXPR has access to the following variables: 25254 25255 INSN 25256 The rtl instruction under test. 25257 25258 WHICH_ALTERNATIVE 25259 The `define_insn' alternative that INSN matches. *Note 25260 Output Statement::. 25261 25262 OPERANDS 25263 An array of INSN's rtl operands. 25264 25265 C-EXPR behaves like the condition in a C `if' statement, so there 25266 is no need to explicitly convert the expression into a boolean 0 25267 or 1 value. For example, the following two tests are equivalent: 25268 25269 (match_test "x & 2") 25270 (match_test "(x & 2) != 0") 25271 25272 `(le ARITH1 ARITH2)' 25273 `(leu ARITH1 ARITH2)' 25274 `(lt ARITH1 ARITH2)' 25275 `(ltu ARITH1 ARITH2)' 25276 `(gt ARITH1 ARITH2)' 25277 `(gtu ARITH1 ARITH2)' 25278 `(ge ARITH1 ARITH2)' 25279 `(geu ARITH1 ARITH2)' 25280 `(ne ARITH1 ARITH2)' 25281 `(eq ARITH1 ARITH2)' 25282 These tests are true if the indicated comparison of the two 25283 arithmetic expressions is true. Arithmetic expressions are formed 25284 with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and', 25285 `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt' 25286 expressions. 25287 25288 `const_int' and `symbol_ref' are always valid terms (*note Insn 25289 Lengths::,for additional forms). `symbol_ref' is a string 25290 denoting a C expression that yields an `int' when evaluated by the 25291 `get_attr_...' routine. It should normally be a global variable. 25292 25293 `(eq_attr NAME VALUE)' 25294 NAME is a string specifying the name of an attribute. 25295 25296 VALUE is a string that is either a valid value for attribute NAME, 25297 a comma-separated list of values, or `!' followed by a value or 25298 list. If VALUE does not begin with a `!', this test is true if 25299 the value of the NAME attribute of the current insn is in the list 25300 specified by VALUE. If VALUE begins with a `!', this test is true 25301 if the attribute's value is _not_ in the specified list. 25302 25303 For example, 25304 25305 (eq_attr "type" "load,store") 25306 25307 is equivalent to 25308 25309 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 25310 25311 If NAME specifies an attribute of `alternative', it refers to the 25312 value of the compiler variable `which_alternative' (*note Output 25313 Statement::) and the values must be small integers. For example, 25314 25315 (eq_attr "alternative" "2,3") 25316 25317 is equivalent to 25318 25319 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 25320 (eq (symbol_ref "which_alternative") (const_int 3))) 25321 25322 Note that, for most attributes, an `eq_attr' test is simplified in 25323 cases where the value of the attribute being tested is known for 25324 all insns matching a particular pattern. This is by far the most 25325 common case. 25326 25327 `(attr_flag NAME)' 25328 The value of an `attr_flag' expression is true if the flag 25329 specified by NAME is true for the `insn' currently being scheduled. 25330 25331 NAME is a string specifying one of a fixed set of flags to test. 25332 Test the flags `forward' and `backward' to determine the direction 25333 of a conditional branch. 25334 25335 This example describes a conditional branch delay slot which can 25336 be nullified for forward branches that are taken (annul-true) or 25337 for backward branches which are not taken (annul-false). 25338 25339 (define_delay (eq_attr "type" "cbranch") 25340 [(eq_attr "in_branch_delay" "true") 25341 (and (eq_attr "in_branch_delay" "true") 25342 (attr_flag "forward")) 25343 (and (eq_attr "in_branch_delay" "true") 25344 (attr_flag "backward"))]) 25345 25346 The `forward' and `backward' flags are false if the current `insn' 25347 being scheduled is not a conditional branch. 25348 25349 `attr_flag' is only used during delay slot scheduling and has no 25350 meaning to other passes of the compiler. 25351 25352 `(attr NAME)' 25353 The value of another attribute is returned. This is most useful 25354 for numeric attributes, as `eq_attr' and `attr_flag' produce more 25355 efficient code for non-numeric attributes. 25356 25357 25358 File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 25359 25360 16.19.3 Assigning Attribute Values to Insns 25361 ------------------------------------------- 25362 25363 The value assigned to an attribute of an insn is primarily determined by 25364 which pattern is matched by that insn (or which `define_peephole' 25365 generated it). Every `define_insn' and `define_peephole' can have an 25366 optional last argument to specify the values of attributes for matching 25367 insns. The value of any attribute not specified in a particular insn 25368 is set to the default value for that attribute, as specified in its 25369 `define_attr'. Extensive use of default values for attributes permits 25370 the specification of the values for only one or two attributes in the 25371 definition of most insn patterns, as seen in the example in the next 25372 section. 25373 25374 The optional last argument of `define_insn' and `define_peephole' is a 25375 vector of expressions, each of which defines the value for a single 25376 attribute. The most general way of assigning an attribute's value is 25377 to use a `set' expression whose first operand is an `attr' expression 25378 giving the name of the attribute being set. The second operand of the 25379 `set' is an attribute expression (*note Expressions::) giving the value 25380 of the attribute. 25381 25382 When the attribute value depends on the `alternative' attribute (i.e., 25383 which is the applicable alternative in the constraint of the insn), the 25384 `set_attr_alternative' expression can be used. It allows the 25385 specification of a vector of attribute expressions, one for each 25386 alternative. 25387 25388 When the generality of arbitrary attribute expressions is not required, 25389 the simpler `set_attr' expression can be used, which allows specifying 25390 a string giving either a single attribute value or a list of attribute 25391 values, one for each alternative. 25392 25393 The form of each of the above specifications is shown below. In each 25394 case, NAME is a string specifying the attribute to be set. 25395 25396 `(set_attr NAME VALUE-STRING)' 25397 VALUE-STRING is either a string giving the desired attribute value, 25398 or a string containing a comma-separated list giving the values for 25399 succeeding alternatives. The number of elements must match the 25400 number of alternatives in the constraint of the insn pattern. 25401 25402 Note that it may be useful to specify `*' for some alternative, in 25403 which case the attribute will assume its default value for insns 25404 matching that alternative. 25405 25406 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 25407 Depending on the alternative of the insn, the value will be one of 25408 the specified values. This is a shorthand for using a `cond' with 25409 tests on the `alternative' attribute. 25410 25411 `(set (attr NAME) VALUE)' 25412 The first operand of this `set' must be the special RTL expression 25413 `attr', whose sole operand is a string giving the name of the 25414 attribute being set. VALUE is the value of the attribute. 25415 25416 The following shows three different ways of representing the same 25417 attribute value specification: 25418 25419 (set_attr "type" "load,store,arith") 25420 25421 (set_attr_alternative "type" 25422 [(const_string "load") (const_string "store") 25423 (const_string "arith")]) 25424 25425 (set (attr "type") 25426 (cond [(eq_attr "alternative" "1") (const_string "load") 25427 (eq_attr "alternative" "2") (const_string "store")] 25428 (const_string "arith"))) 25429 25430 The `define_asm_attributes' expression provides a mechanism to specify 25431 the attributes assigned to insns produced from an `asm' statement. It 25432 has the form: 25433 25434 (define_asm_attributes [ATTR-SETS]) 25435 25436 where ATTR-SETS is specified the same as for both the `define_insn' and 25437 the `define_peephole' expressions. 25438 25439 These values will typically be the "worst case" attribute values. For 25440 example, they might indicate that the condition code will be clobbered. 25441 25442 A specification for a `length' attribute is handled specially. The 25443 way to compute the length of an `asm' insn is to multiply the length 25444 specified in the expression `define_asm_attributes' by the number of 25445 machine instructions specified in the `asm' statement, determined by 25446 counting the number of semicolons and newlines in the string. 25447 Therefore, the value of the `length' attribute specified in a 25448 `define_asm_attributes' should be the maximum possible length of a 25449 single machine instruction. 25450 25451 25452 File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 25453 25454 16.19.4 Example of Attribute Specifications 25455 ------------------------------------------- 25456 25457 The judicious use of defaulting is important in the efficient use of 25458 insn attributes. Typically, insns are divided into "types" and an 25459 attribute, customarily called `type', is used to represent this value. 25460 This attribute is normally used only to define the default value for 25461 other attributes. An example will clarify this usage. 25462 25463 Assume we have a RISC machine with a condition code and in which only 25464 full-word operations are performed in registers. Let us assume that we 25465 can divide all insns into loads, stores, (integer) arithmetic 25466 operations, floating point operations, and branches. 25467 25468 Here we will concern ourselves with determining the effect of an insn 25469 on the condition code and will limit ourselves to the following possible 25470 effects: The condition code can be set unpredictably (clobbered), not 25471 be changed, be set to agree with the results of the operation, or only 25472 changed if the item previously set into the condition code has been 25473 modified. 25474 25475 Here is part of a sample `md' file for such a machine: 25476 25477 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 25478 25479 (define_attr "cc" "clobber,unchanged,set,change0" 25480 (cond [(eq_attr "type" "load") 25481 (const_string "change0") 25482 (eq_attr "type" "store,branch") 25483 (const_string "unchanged") 25484 (eq_attr "type" "arith") 25485 (if_then_else (match_operand:SI 0 "" "") 25486 (const_string "set") 25487 (const_string "clobber"))] 25488 (const_string "clobber"))) 25489 25490 (define_insn "" 25491 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 25492 (match_operand:SI 1 "general_operand" "r,m,r"))] 25493 "" 25494 "@ 25495 move %0,%1 25496 load %0,%1 25497 store %0,%1" 25498 [(set_attr "type" "arith,load,store")]) 25499 25500 Note that we assume in the above example that arithmetic operations 25501 performed on quantities smaller than a machine word clobber the 25502 condition code since they will set the condition code to a value 25503 corresponding to the full-word result. 25504 25505 25506 File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 25507 25508 16.19.5 Computing the Length of an Insn 25509 --------------------------------------- 25510 25511 For many machines, multiple types of branch instructions are provided, 25512 each for different length branch displacements. In most cases, the 25513 assembler will choose the correct instruction to use. However, when 25514 the assembler cannot do so, GCC can when a special attribute, the 25515 `length' attribute, is defined. This attribute must be defined to have 25516 numeric values by specifying a null string in its `define_attr'. 25517 25518 In the case of the `length' attribute, two additional forms of 25519 arithmetic terms are allowed in test expressions: 25520 25521 `(match_dup N)' 25522 This refers to the address of operand N of the current insn, which 25523 must be a `label_ref'. 25524 25525 `(pc)' 25526 This refers to the address of the _current_ insn. It might have 25527 been more consistent with other usage to make this the address of 25528 the _next_ insn but this would be confusing because the length of 25529 the current insn is to be computed. 25530 25531 For normal insns, the length will be determined by value of the 25532 `length' attribute. In the case of `addr_vec' and `addr_diff_vec' insn 25533 patterns, the length is computed as the number of vectors multiplied by 25534 the size of each vector. 25535 25536 Lengths are measured in addressable storage units (bytes). 25537 25538 The following macros can be used to refine the length computation: 25539 25540 `ADJUST_INSN_LENGTH (INSN, LENGTH)' 25541 If defined, modifies the length assigned to instruction INSN as a 25542 function of the context in which it is used. LENGTH is an lvalue 25543 that contains the initially computed length of the insn and should 25544 be updated with the correct length of the insn. 25545 25546 This macro will normally not be required. A case in which it is 25547 required is the ROMP. On this machine, the size of an `addr_vec' 25548 insn must be increased by two to compensate for the fact that 25549 alignment may be required. 25550 25551 The routine that returns `get_attr_length' (the value of the `length' 25552 attribute) can be used by the output routine to determine the form of 25553 the branch instruction to be written, as the example below illustrates. 25554 25555 As an example of the specification of variable-length branches, 25556 consider the IBM 360. If we adopt the convention that a register will 25557 be set to the starting address of a function, we can jump to labels 25558 within 4k of the start using a four-byte instruction. Otherwise, we 25559 need a six-byte sequence to load the address from memory and then 25560 branch to it. 25561 25562 On such a machine, a pattern for a branch instruction might be 25563 specified as follows: 25564 25565 (define_insn "jump" 25566 [(set (pc) 25567 (label_ref (match_operand 0 "" "")))] 25568 "" 25569 { 25570 return (get_attr_length (insn) == 4 25571 ? "b %l0" : "l r15,=a(%l0); br r15"); 25572 } 25573 [(set (attr "length") 25574 (if_then_else (lt (match_dup 0) (const_int 4096)) 25575 (const_int 4) 25576 (const_int 6)))]) 25577 25578 25579 File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes 25580 25581 16.19.6 Constant Attributes 25582 --------------------------- 25583 25584 A special form of `define_attr', where the expression for the default 25585 value is a `const' expression, indicates an attribute that is constant 25586 for a given run of the compiler. Constant attributes may be used to 25587 specify which variety of processor is used. For example, 25588 25589 (define_attr "cpu" "m88100,m88110,m88000" 25590 (const 25591 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 25592 (symbol_ref "TARGET_88110") (const_string "m88110")] 25593 (const_string "m88000")))) 25594 25595 (define_attr "memory" "fast,slow" 25596 (const 25597 (if_then_else (symbol_ref "TARGET_FAST_MEM") 25598 (const_string "fast") 25599 (const_string "slow")))) 25600 25601 The routine generated for constant attributes has no parameters as it 25602 does not depend on any particular insn. RTL expressions used to define 25603 the value of a constant attribute may use the `symbol_ref' form, but 25604 may not use either the `match_operand' form or `eq_attr' forms 25605 involving insn attributes. 25606 25607 25608 File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes 25609 25610 16.19.7 Delay Slot Scheduling 25611 ----------------------------- 25612 25613 The insn attribute mechanism can be used to specify the requirements for 25614 delay slots, if any, on a target machine. An instruction is said to 25615 require a "delay slot" if some instructions that are physically after 25616 the instruction are executed as if they were located before it. 25617 Classic examples are branch and call instructions, which often execute 25618 the following instruction before the branch or call is performed. 25619 25620 On some machines, conditional branch instructions can optionally 25621 "annul" instructions in the delay slot. This means that the 25622 instruction will not be executed for certain branch outcomes. Both 25623 instructions that annul if the branch is true and instructions that 25624 annul if the branch is false are supported. 25625 25626 Delay slot scheduling differs from instruction scheduling in that 25627 determining whether an instruction needs a delay slot is dependent only 25628 on the type of instruction being generated, not on data flow between the 25629 instructions. See the next section for a discussion of data-dependent 25630 instruction scheduling. 25631 25632 The requirement of an insn needing one or more delay slots is indicated 25633 via the `define_delay' expression. It has the following form: 25634 25635 (define_delay TEST 25636 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 25637 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 25638 ...]) 25639 25640 TEST is an attribute test that indicates whether this `define_delay' 25641 applies to a particular insn. If so, the number of required delay 25642 slots is determined by the length of the vector specified as the second 25643 argument. An insn placed in delay slot N must satisfy attribute test 25644 DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 25645 may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 25646 specifies which insns in the delay slot may be annulled if the branch 25647 is false. If annulling is not supported for that delay slot, `(nil)' 25648 should be coded. 25649 25650 For example, in the common case where branch and call insns require a 25651 single delay slot, which may contain any insn other than a branch or 25652 call, the following would be placed in the `md' file: 25653 25654 (define_delay (eq_attr "type" "branch,call") 25655 [(eq_attr "type" "!branch,call") (nil) (nil)]) 25656 25657 Multiple `define_delay' expressions may be specified. In this case, 25658 each such expression specifies different delay slot requirements and 25659 there must be no insn for which tests in two `define_delay' expressions 25660 are both true. 25661 25662 For example, if we have a machine that requires one delay slot for 25663 branches but two for calls, no delay slot can contain a branch or call 25664 insn, and any valid insn in the delay slot for the branch can be 25665 annulled if the branch is true, we might represent this as follows: 25666 25667 (define_delay (eq_attr "type" "branch") 25668 [(eq_attr "type" "!branch,call") 25669 (eq_attr "type" "!branch,call") 25670 (nil)]) 25671 25672 (define_delay (eq_attr "type" "call") 25673 [(eq_attr "type" "!branch,call") (nil) (nil) 25674 (eq_attr "type" "!branch,call") (nil) (nil)]) 25675 25676 25677 File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 25678 25679 16.19.8 Specifying processor pipeline description 25680 ------------------------------------------------- 25681 25682 To achieve better performance, most modern processors (super-pipelined, 25683 superscalar RISC, and VLIW processors) have many "functional units" on 25684 which several instructions can be executed simultaneously. An 25685 instruction starts execution if its issue conditions are satisfied. If 25686 not, the instruction is stalled until its conditions are satisfied. 25687 Such "interlock (pipeline) delay" causes interruption of the fetching 25688 of successor instructions (or demands nop instructions, e.g. for some 25689 MIPS processors). 25690 25691 There are two major kinds of interlock delays in modern processors. 25692 The first one is a data dependence delay determining "instruction 25693 latency time". The instruction execution is not started until all 25694 source data have been evaluated by prior instructions (there are more 25695 complex cases when the instruction execution starts even when the data 25696 are not available but will be ready in given time after the instruction 25697 execution start). Taking the data dependence delays into account is 25698 simple. The data dependence (true, output, and anti-dependence) delay 25699 between two instructions is given by a constant. In most cases this 25700 approach is adequate. The second kind of interlock delays is a 25701 reservation delay. The reservation delay means that two instructions 25702 under execution will be in need of shared processors resources, i.e. 25703 buses, internal registers, and/or functional units, which are reserved 25704 for some time. Taking this kind of delay into account is complex 25705 especially for modern RISC processors. 25706 25707 The task of exploiting more processor parallelism is solved by an 25708 instruction scheduler. For a better solution to this problem, the 25709 instruction scheduler has to have an adequate description of the 25710 processor parallelism (or "pipeline description"). GCC machine 25711 descriptions describe processor parallelism and functional unit 25712 reservations for groups of instructions with the aid of "regular 25713 expressions". 25714 25715 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 25716 figure out the possibility of the instruction issue by the processor on 25717 a given simulated processor cycle. The pipeline hazard recognizer is 25718 automatically generated from the processor pipeline description. The 25719 pipeline hazard recognizer generated from the machine description is 25720 based on a deterministic finite state automaton (DFA): the instruction 25721 issue is possible if there is a transition from one automaton state to 25722 another one. This algorithm is very fast, and furthermore, its speed 25723 is not dependent on processor complexity(1). 25724 25725 The rest of this section describes the directives that constitute an 25726 automaton-based processor pipeline description. The order of these 25727 constructions within the machine description file is not important. 25728 25729 The following optional construction describes names of automata 25730 generated and used for the pipeline hazards recognition. Sometimes the 25731 generated finite state automaton used by the pipeline hazard recognizer 25732 is large. If we use more than one automaton and bind functional units 25733 to the automata, the total size of the automata is usually less than 25734 the size of the single automaton. If there is no one such 25735 construction, only one finite state automaton is generated. 25736 25737 (define_automaton AUTOMATA-NAMES) 25738 25739 AUTOMATA-NAMES is a string giving names of the automata. The names 25740 are separated by commas. All the automata should have unique names. 25741 The automaton name is used in the constructions `define_cpu_unit' and 25742 `define_query_cpu_unit'. 25743 25744 Each processor functional unit used in the description of instruction 25745 reservations should be described by the following construction. 25746 25747 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 25748 25749 UNIT-NAMES is a string giving the names of the functional units 25750 separated by commas. Don't use name `nothing', it is reserved for 25751 other goals. 25752 25753 AUTOMATON-NAME is a string giving the name of the automaton with which 25754 the unit is bound. The automaton should be described in construction 25755 `define_automaton'. You should give "automaton-name", if there is a 25756 defined automaton. 25757 25758 The assignment of units to automata are constrained by the uses of the 25759 units in insn reservations. The most important constraint is: if a 25760 unit reservation is present on a particular cycle of an alternative for 25761 an insn reservation, then some unit from the same automaton must be 25762 present on the same cycle for the other alternatives of the insn 25763 reservation. The rest of the constraints are mentioned in the 25764 description of the subsequent constructions. 25765 25766 The following construction describes CPU functional units analogously 25767 to `define_cpu_unit'. The reservation of such units can be queried for 25768 an automaton state. The instruction scheduler never queries 25769 reservation of functional units for given automaton state. So as a 25770 rule, you don't need this construction. This construction could be 25771 used for future code generation goals (e.g. to generate VLIW insn 25772 templates). 25773 25774 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 25775 25776 UNIT-NAMES is a string giving names of the functional units separated 25777 by commas. 25778 25779 AUTOMATON-NAME is a string giving the name of the automaton with which 25780 the unit is bound. 25781 25782 The following construction is the major one to describe pipeline 25783 characteristics of an instruction. 25784 25785 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 25786 CONDITION REGEXP) 25787 25788 DEFAULT_LATENCY is a number giving latency time of the instruction. 25789 There is an important difference between the old description and the 25790 automaton based pipeline description. The latency time is used for all 25791 dependencies when we use the old description. In the automaton based 25792 pipeline description, the given latency time is only used for true 25793 dependencies. The cost of anti-dependencies is always zero and the 25794 cost of output dependencies is the difference between latency times of 25795 the producing and consuming insns (if the difference is negative, the 25796 cost is considered to be zero). You can always change the default 25797 costs for any description by using the target hook 25798 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::). 25799 25800 INSN-NAME is a string giving the internal name of the insn. The 25801 internal names are used in constructions `define_bypass' and in the 25802 automaton description file generated for debugging. The internal name 25803 has nothing in common with the names in `define_insn'. It is a good 25804 practice to use insn classes described in the processor manual. 25805 25806 CONDITION defines what RTL insns are described by this construction. 25807 You should remember that you will be in trouble if CONDITION for two or 25808 more different `define_insn_reservation' constructions is TRUE for an 25809 insn. In this case what reservation will be used for the insn is not 25810 defined. Such cases are not checked during generation of the pipeline 25811 hazards recognizer because in general recognizing that two conditions 25812 may have the same value is quite difficult (especially if the conditions 25813 contain `symbol_ref'). It is also not checked during the pipeline 25814 hazard recognizer work because it would slow down the recognizer 25815 considerably. 25816 25817 REGEXP is a string describing the reservation of the cpu's functional 25818 units by the instruction. The reservations are described by a regular 25819 expression according to the following syntax: 25820 25821 regexp = regexp "," oneof 25822 | oneof 25823 25824 oneof = oneof "|" allof 25825 | allof 25826 25827 allof = allof "+" repeat 25828 | repeat 25829 25830 repeat = element "*" number 25831 | element 25832 25833 element = cpu_function_unit_name 25834 | reservation_name 25835 | result_name 25836 | "nothing" 25837 | "(" regexp ")" 25838 25839 * `,' is used for describing the start of the next cycle in the 25840 reservation. 25841 25842 * `|' is used for describing a reservation described by the first 25843 regular expression *or* a reservation described by the second 25844 regular expression *or* etc. 25845 25846 * `+' is used for describing a reservation described by the first 25847 regular expression *and* a reservation described by the second 25848 regular expression *and* etc. 25849 25850 * `*' is used for convenience and simply means a sequence in which 25851 the regular expression are repeated NUMBER times with cycle 25852 advancing (see `,'). 25853 25854 * `cpu_function_unit_name' denotes reservation of the named 25855 functional unit. 25856 25857 * `reservation_name' -- see description of construction 25858 `define_reservation'. 25859 25860 * `nothing' denotes no unit reservations. 25861 25862 Sometimes unit reservations for different insns contain common parts. 25863 In such case, you can simplify the pipeline description by describing 25864 the common part by the following construction 25865 25866 (define_reservation RESERVATION-NAME REGEXP) 25867 25868 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 25869 names and reservation names are in the same name space. So the 25870 reservation names should be different from the functional unit names 25871 and can not be the reserved name `nothing'. 25872 25873 The following construction is used to describe exceptions in the 25874 latency time for given instruction pair. This is so called bypasses. 25875 25876 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 25877 [GUARD]) 25878 25879 NUMBER defines when the result generated by the instructions given in 25880 string OUT_INSN_NAMES will be ready for the instructions given in 25881 string IN_INSN_NAMES. Each of these strings is a comma-separated list 25882 of filename-style globs and they refer to the names of 25883 `define_insn_reservation's. For example: 25884 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*") 25885 defines a bypass between instructions that start with `cpu1_load_' or 25886 `cpu1_store_' and those that start with `cpu1_load_'. 25887 25888 GUARD is an optional string giving the name of a C function which 25889 defines an additional guard for the bypass. The function will get the 25890 two insns as parameters. If the function returns zero the bypass will 25891 be ignored for this case. The additional guard is necessary to 25892 recognize complicated bypasses, e.g. when the consumer is only an 25893 address of insn `store' (not a stored value). 25894 25895 If there are more one bypass with the same output and input insns, the 25896 chosen bypass is the first bypass with a guard in description whose 25897 guard function returns nonzero. If there is no such bypass, then 25898 bypass without the guard function is chosen. 25899 25900 The following five constructions are usually used to describe VLIW 25901 processors, or more precisely, to describe a placement of small 25902 instructions into VLIW instruction slots. They can be used for RISC 25903 processors, too. 25904 25905 (exclusion_set UNIT-NAMES UNIT-NAMES) 25906 (presence_set UNIT-NAMES PATTERNS) 25907 (final_presence_set UNIT-NAMES PATTERNS) 25908 (absence_set UNIT-NAMES PATTERNS) 25909 (final_absence_set UNIT-NAMES PATTERNS) 25910 25911 UNIT-NAMES is a string giving names of functional units separated by 25912 commas. 25913 25914 PATTERNS is a string giving patterns of functional units separated by 25915 comma. Currently pattern is one unit or units separated by 25916 white-spaces. 25917 25918 The first construction (`exclusion_set') means that each functional 25919 unit in the first string can not be reserved simultaneously with a unit 25920 whose name is in the second string and vice versa. For example, the 25921 construction is useful for describing processors (e.g. some SPARC 25922 processors) with a fully pipelined floating point functional unit which 25923 can execute simultaneously only single floating point insns or only 25924 double floating point insns. 25925 25926 The second construction (`presence_set') means that each functional 25927 unit in the first string can not be reserved unless at least one of 25928 pattern of units whose names are in the second string is reserved. 25929 This is an asymmetric relation. For example, it is useful for 25930 description that VLIW `slot1' is reserved after `slot0' reservation. 25931 We could describe it by the following construction 25932 25933 (presence_set "slot1" "slot0") 25934 25935 Or `slot1' is reserved only after `slot0' and unit `b0' reservation. 25936 In this case we could write 25937 25938 (presence_set "slot1" "slot0 b0") 25939 25940 The third construction (`final_presence_set') is analogous to 25941 `presence_set'. The difference between them is when checking is done. 25942 When an instruction is issued in given automaton state reflecting all 25943 current and planned unit reservations, the automaton state is changed. 25944 The first state is a source state, the second one is a result state. 25945 Checking for `presence_set' is done on the source state reservation, 25946 checking for `final_presence_set' is done on the result reservation. 25947 This construction is useful to describe a reservation which is actually 25948 two subsequent reservations. For example, if we use 25949 25950 (presence_set "slot1" "slot0") 25951 25952 the following insn will be never issued (because `slot1' requires 25953 `slot0' which is absent in the source state). 25954 25955 (define_reservation "insn_and_nop" "slot0 + slot1") 25956 25957 but it can be issued if we use analogous `final_presence_set'. 25958 25959 The forth construction (`absence_set') means that each functional unit 25960 in the first string can be reserved only if each pattern of units whose 25961 names are in the second string is not reserved. This is an asymmetric 25962 relation (actually `exclusion_set' is analogous to this one but it is 25963 symmetric). For example it might be useful in a VLIW description to 25964 say that `slot0' cannot be reserved after either `slot1' or `slot2' 25965 have been reserved. This can be described as: 25966 25967 (absence_set "slot0" "slot1, slot2") 25968 25969 Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved 25970 or `slot1' and unit `b1' are reserved. In this case we could write 25971 25972 (absence_set "slot2" "slot0 b0, slot1 b1") 25973 25974 All functional units mentioned in a set should belong to the same 25975 automaton. 25976 25977 The last construction (`final_absence_set') is analogous to 25978 `absence_set' but checking is done on the result (state) reservation. 25979 See comments for `final_presence_set'. 25980 25981 You can control the generator of the pipeline hazard recognizer with 25982 the following construction. 25983 25984 (automata_option OPTIONS) 25985 25986 OPTIONS is a string giving options which affect the generated code. 25987 Currently there are the following options: 25988 25989 * "no-minimization" makes no minimization of the automaton. This is 25990 only worth to do when we are debugging the description and need to 25991 look more accurately at reservations of states. 25992 25993 * "time" means printing time statistics about the generation of 25994 automata. 25995 25996 * "stats" means printing statistics about the generated automata 25997 such as the number of DFA states, NDFA states and arcs. 25998 25999 * "v" means a generation of the file describing the result automata. 26000 The file has suffix `.dfa' and can be used for the description 26001 verification and debugging. 26002 26003 * "w" means a generation of warning instead of error for 26004 non-critical errors. 26005 26006 * "no-comb-vect" prevents the automaton generator from generating 26007 two data structures and comparing them for space efficiency. Using 26008 a comb vector to represent transitions may be better, but it can be 26009 very expensive to construct. This option is useful if the build 26010 process spends an unacceptably long time in genautomata. 26011 26012 * "ndfa" makes nondeterministic finite state automata. This affects 26013 the treatment of operator `|' in the regular expressions. The 26014 usual treatment of the operator is to try the first alternative 26015 and, if the reservation is not possible, the second alternative. 26016 The nondeterministic treatment means trying all alternatives, some 26017 of them may be rejected by reservations in the subsequent insns. 26018 26019 * "collapse-ndfa" modifies the behaviour of the generator when 26020 producing an automaton. An additional state transition to 26021 collapse a nondeterministic NDFA state to a deterministic DFA 26022 state is generated. It can be triggered by passing `const0_rtx' to 26023 state_transition. In such an automaton, cycle advance transitions 26024 are available only for these collapsed states. This option is 26025 useful for ports that want to use the `ndfa' option, but also want 26026 to use `define_query_cpu_unit' to assign units to insns issued in 26027 a cycle. 26028 26029 * "progress" means output of a progress bar showing how many states 26030 were generated so far for automaton being processed. This is 26031 useful during debugging a DFA description. If you see too many 26032 generated states, you could interrupt the generator of the pipeline 26033 hazard recognizer and try to figure out a reason for generation of 26034 the huge automaton. 26035 26036 As an example, consider a superscalar RISC machine which can issue 26037 three insns (two integer insns and one floating point insn) on the 26038 cycle but can finish only two insns. To describe this, we define the 26039 following functional units. 26040 26041 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 26042 (define_cpu_unit "port0, port1") 26043 26044 All simple integer insns can be executed in any integer pipeline and 26045 their result is ready in two cycles. The simple integer insns are 26046 issued into the first pipeline unless it is reserved, otherwise they 26047 are issued into the second pipeline. Integer division and 26048 multiplication insns can be executed only in the second integer 26049 pipeline and their results are ready correspondingly in 8 and 4 cycles. 26050 The integer division is not pipelined, i.e. the subsequent integer 26051 division insn can not be issued until the current division insn 26052 finished. Floating point insns are fully pipelined and their results 26053 are ready in 3 cycles. Where the result of a floating point insn is 26054 used by an integer insn, an additional delay of one cycle is incurred. 26055 To describe all of this we could specify 26056 26057 (define_cpu_unit "div") 26058 26059 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26060 "(i0_pipeline | i1_pipeline), (port0 | port1)") 26061 26062 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 26063 "i1_pipeline, nothing*2, (port0 | port1)") 26064 26065 (define_insn_reservation "div" 8 (eq_attr "type" "div") 26066 "i1_pipeline, div*7, div + (port0 | port1)") 26067 26068 (define_insn_reservation "float" 3 (eq_attr "type" "float") 26069 "f_pipeline, nothing, (port0 | port1)) 26070 26071 (define_bypass 4 "float" "simple,mult,div") 26072 26073 To simplify the description we could describe the following reservation 26074 26075 (define_reservation "finish" "port0|port1") 26076 26077 and use it in all `define_insn_reservation' as in the following 26078 construction 26079 26080 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26081 "(i0_pipeline | i1_pipeline), finish") 26082 26083 ---------- Footnotes ---------- 26084 26085 (1) However, the size of the automaton depends on processor 26086 complexity. To limit this effect, machine descriptions can split 26087 orthogonal parts of the machine description among several automata: but 26088 then, since each of these must be stepped independently, this does 26089 cause a small decrease in the algorithm's performance. 26090 26091 26092 File: gccint.info, Node: Conditional Execution, Next: Define Subst, Prev: Insn Attributes, Up: Machine Desc 26093 26094 16.20 Conditional Execution 26095 =========================== 26096 26097 A number of architectures provide for some form of conditional 26098 execution, or predication. The hallmark of this feature is the ability 26099 to nullify most of the instructions in the instruction set. When the 26100 instruction set is large and not entirely symmetric, it can be quite 26101 tedious to describe these forms directly in the `.md' file. An 26102 alternative is the `define_cond_exec' template. 26103 26104 (define_cond_exec 26105 [PREDICATE-PATTERN] 26106 "CONDITION" 26107 "OUTPUT-TEMPLATE") 26108 26109 PREDICATE-PATTERN is the condition that must be true for the insn to 26110 be executed at runtime and should match a relational operator. One can 26111 use `match_operator' to match several relational operators at once. 26112 Any `match_operand' operands must have no more than one alternative. 26113 26114 CONDITION is a C expression that must be true for the generated 26115 pattern to match. 26116 26117 OUTPUT-TEMPLATE is a string similar to the `define_insn' output 26118 template (*note Output Template::), except that the `*' and `@' special 26119 cases do not apply. This is only useful if the assembly text for the 26120 predicate is a simple prefix to the main insn. In order to handle the 26121 general case, there is a global variable `current_insn_predicate' that 26122 will contain the entire predicate if the current insn is predicated, 26123 and will otherwise be `NULL'. 26124 26125 When `define_cond_exec' is used, an implicit reference to the 26126 `predicable' instruction attribute is made. *Note Insn Attributes::. 26127 This attribute must be a boolean (i.e. have exactly two elements in its 26128 LIST-OF-VALUES), with the possible values being `no' and `yes'. The 26129 default and all uses in the insns must be a simple constant, not a 26130 complex expressions. It may, however, depend on the alternative, by 26131 using a comma-separated list of values. If that is the case, the port 26132 should also define an `enabled' attribute (*note Disable Insn 26133 Alternatives::), which should also allow only `no' and `yes' as its 26134 values. 26135 26136 For each `define_insn' for which the `predicable' attribute is true, a 26137 new `define_insn' pattern will be generated that matches a predicated 26138 version of the instruction. For example, 26139 26140 (define_insn "addsi" 26141 [(set (match_operand:SI 0 "register_operand" "r") 26142 (plus:SI (match_operand:SI 1 "register_operand" "r") 26143 (match_operand:SI 2 "register_operand" "r")))] 26144 "TEST1" 26145 "add %2,%1,%0") 26146 26147 (define_cond_exec 26148 [(ne (match_operand:CC 0 "register_operand" "c") 26149 (const_int 0))] 26150 "TEST2" 26151 "(%0)") 26152 26153 generates a new pattern 26154 26155 (define_insn "" 26156 [(cond_exec 26157 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 26158 (set (match_operand:SI 0 "register_operand" "r") 26159 (plus:SI (match_operand:SI 1 "register_operand" "r") 26160 (match_operand:SI 2 "register_operand" "r"))))] 26161 "(TEST2) && (TEST1)" 26162 "(%3) add %2,%1,%0") 26163 26164 26165 File: gccint.info, Node: Define Subst, Next: Constant Definitions, Prev: Conditional Execution, Up: Machine Desc 26166 26167 16.21 RTL Templates Transformations 26168 =================================== 26169 26170 For some hardware architectures there are common cases when the RTL 26171 templates for the instructions can be derived from the other RTL 26172 templates using simple transformations. E.g., `i386.md' contains an 26173 RTL template for the ordinary `sub' instruction-- `*subsi_1', and for 26174 the `sub' instruction with subsequent zero-extension--`*subsi_1_zext'. 26175 Such cases can be easily implemented by a single meta-template capable 26176 of generating a modified case based on the initial one: 26177 26178 (define_subst "NAME" 26179 [INPUT-TEMPLATE] 26180 "CONDITION" 26181 [OUTPUT-TEMPLATE]) 26182 INPUT-TEMPLATE is a pattern describing the source RTL template, which 26183 will be transformed. 26184 26185 CONDITION is a C expression that is conjunct with the condition from 26186 the input-template to generate a condition to be used in the 26187 output-template. 26188 26189 OUTPUT-TEMPLATE is a pattern that will be used in the resulting 26190 template. 26191 26192 `define_subst' mechanism is tightly coupled with the notion of the 26193 subst attribute (*note Subst Iterators::). The use of `define_subst' 26194 is triggered by a reference to a subst attribute in the transforming 26195 RTL template. This reference initiates duplication of the source RTL 26196 template and substitution of the attributes with their values. The 26197 source RTL template is left unchanged, while the copy is transformed by 26198 `define_subst'. This transformation can fail in the case when the 26199 source RTL template is not matched against the input-template of the 26200 `define_subst'. In such case the copy is deleted. 26201 26202 `define_subst' can be used only in `define_insn' and `define_expand', 26203 it cannot be used in other expressions (e.g. in 26204 `define_insn_and_split'). 26205 26206 * Menu: 26207 26208 * Define Subst Example:: Example of `define_subst' work. 26209 * Define Subst Pattern Matching:: Process of template comparison. 26210 * Define Subst Output Template:: Generation of output template. 26211 26212 26213 File: gccint.info, Node: Define Subst Example, Next: Define Subst Pattern Matching, Up: Define Subst 26214 26215 16.21.1 `define_subst' Example 26216 ------------------------------ 26217 26218 To illustrate how `define_subst' works, let us examine a simple 26219 template transformation. 26220 26221 Suppose there are two kinds of instructions: one that touches flags and 26222 the other that does not. The instructions of the second type could be 26223 generated with the following `define_subst': 26224 26225 (define_subst "add_clobber_subst" 26226 [(set (match_operand:SI 0 "" "") 26227 (match_operand:SI 1 "" ""))] 26228 "" 26229 [(set (match_dup 0) 26230 (match_dup 1)) 26231 (clobber (reg:CC FLAGS_REG))] 26232 26233 This `define_subst' can be applied to any RTL pattern containing `set' 26234 of mode SI and generates a copy with clobber when it is applied. 26235 26236 Assume there is an RTL template for a `max' instruction to be used in 26237 `define_subst' mentioned above: 26238 26239 (define_insn "maxsi" 26240 [(set (match_operand:SI 0 "register_operand" "=r") 26241 (max:SI 26242 (match_operand:SI 1 "register_operand" "r") 26243 (match_operand:SI 2 "register_operand" "r")))] 26244 "" 26245 "max\t{%2, %1, %0|%0, %1, %2}" 26246 [...]) 26247 26248 To mark the RTL template for `define_subst' application, 26249 subst-attributes are used. They should be declared in advance: 26250 26251 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber") 26252 26253 Here `add_clobber_name' is the attribute name, `add_clobber_subst' is 26254 the name of the corresponding `define_subst', the third argument 26255 (`_noclobber') is the attribute value that would be substituted into 26256 the unchanged version of the source RTL template, and the last argument 26257 (`_clobber') is the value that would be substituted into the second, 26258 transformed, version of the RTL template. 26259 26260 Once the subst-attribute has been defined, it should be used in RTL 26261 templates which need to be processed by the `define_subst'. So, the 26262 original RTL template should be changed: 26263 26264 (define_insn "maxsi<add_clobber_name>" 26265 [(set (match_operand:SI 0 "register_operand" "=r") 26266 (max:SI 26267 (match_operand:SI 1 "register_operand" "r") 26268 (match_operand:SI 2 "register_operand" "r")))] 26269 "" 26270 "max\t{%2, %1, %0|%0, %1, %2}" 26271 [...]) 26272 26273 The result of the `define_subst' usage would look like the following: 26274 26275 (define_insn "maxsi_noclobber" 26276 [(set (match_operand:SI 0 "register_operand" "=r") 26277 (max:SI 26278 (match_operand:SI 1 "register_operand" "r") 26279 (match_operand:SI 2 "register_operand" "r")))] 26280 "" 26281 "max\t{%2, %1, %0|%0, %1, %2}" 26282 [...]) 26283 (define_insn "maxsi_clobber" 26284 [(set (match_operand:SI 0 "register_operand" "=r") 26285 (max:SI 26286 (match_operand:SI 1 "register_operand" "r") 26287 (match_operand:SI 2 "register_operand" "r"))) 26288 (clobber (reg:CC FLAGS_REG))] 26289 "" 26290 "max\t{%2, %1, %0|%0, %1, %2}" 26291 [...]) 26292 26293 26294 File: gccint.info, Node: Define Subst Pattern Matching, Next: Define Subst Output Template, Prev: Define Subst Example, Up: Define Subst 26295 26296 16.21.2 Pattern Matching in `define_subst' 26297 ------------------------------------------ 26298 26299 All expressions, allowed in `define_insn' or `define_expand', are 26300 allowed in the input-template of `define_subst', except 26301 `match_par_dup', `match_scratch', `match_parallel'. The meanings of 26302 expressions in the input-template were changed: 26303 26304 `match_operand' matches any expression (possibly, a subtree in 26305 RTL-template), if modes of the `match_operand' and this expression are 26306 the same, or mode of the `match_operand' is `VOIDmode', or this 26307 expression is `match_dup', `match_op_dup'. If the expression is 26308 `match_operand' too, and predicate of `match_operand' from the input 26309 pattern is not empty, then the predicates are compared. That can be 26310 used for more accurate filtering of accepted RTL-templates. 26311 26312 `match_operator' matches common operators (like `plus', `minus'), 26313 `unspec', `unspec_volatile' operators and `match_operator's from the 26314 original pattern if the modes match and `match_operator' from the input 26315 pattern has the same number of operands as the operator from the 26316 original pattern. 26317 26318 26319 File: gccint.info, Node: Define Subst Output Template, Prev: Define Subst Pattern Matching, Up: Define Subst 26320 26321 16.21.3 Generation of output template in `define_subst' 26322 ------------------------------------------------------- 26323 26324 If all necessary checks for `define_subst' application pass, a new 26325 RTL-pattern, based on the output-template, is created to replace the old 26326 template. Like in input-patterns, meanings of some RTL expressions are 26327 changed when they are used in output-patterns of a `define_subst'. 26328 Thus, `match_dup' is used for copying the whole expression from the 26329 original pattern, which matched corresponding `match_operand' from the 26330 input pattern. 26331 26332 `match_dup N' is used in the output template to be replaced with the 26333 expression from the original pattern, which matched `match_operand N' 26334 from the input pattern. As a consequence, `match_dup' cannot be used 26335 to point to `match_operand's from the output pattern, it should always 26336 refer to a `match_operand' from the input pattern. 26337 26338 In the output template one can refer to the expressions from the 26339 original pattern and create new ones. For instance, some operands could 26340 be added by means of standard `match_operand'. 26341 26342 After replacing `match_dup' with some RTL-subtree from the original 26343 pattern, it could happen that several `match_operand's in the output 26344 pattern have the same indexes. It is unknown, how many and what 26345 indexes would be used in the expression which would replace 26346 `match_dup', so such conflicts in indexes are inevitable. To overcome 26347 this issue, `match_operands' and `match_operators', which were 26348 introduced into the output pattern, are renumerated when all 26349 `match_dup's are replaced. 26350 26351 Number of alternatives in `match_operand's introduced into the output 26352 template `M' could differ from the number of alternatives in the 26353 original pattern `N', so in the resultant pattern there would be `N*M' 26354 alternatives. Thus, constraints from the original pattern would be 26355 duplicated `N' times, constraints from the output pattern would be 26356 duplicated `M' times, producing all possible combinations. 26357 26358 26359 File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Define Subst, Up: Machine Desc 26360 26361 16.22 Constant Definitions 26362 ========================== 26363 26364 Using literal constants inside instruction patterns reduces legibility 26365 and can be a maintenance problem. 26366 26367 To overcome this problem, you may use the `define_constants' 26368 expression. It contains a vector of name-value pairs. From that point 26369 on, wherever any of the names appears in the MD file, it is as if the 26370 corresponding value had been written instead. You may use 26371 `define_constants' multiple times; each appearance adds more constants 26372 to the table. It is an error to redefine a constant with a different 26373 value. 26374 26375 To come back to the a29k load multiple example, instead of 26376 26377 (define_insn "" 26378 [(match_parallel 0 "load_multiple_operation" 26379 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26380 (match_operand:SI 2 "memory_operand" "m")) 26381 (use (reg:SI 179)) 26382 (clobber (reg:SI 179))])] 26383 "" 26384 "loadm 0,0,%1,%2") 26385 26386 You could write: 26387 26388 (define_constants [ 26389 (R_BP 177) 26390 (R_FC 178) 26391 (R_CR 179) 26392 (R_Q 180) 26393 ]) 26394 26395 (define_insn "" 26396 [(match_parallel 0 "load_multiple_operation" 26397 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26398 (match_operand:SI 2 "memory_operand" "m")) 26399 (use (reg:SI R_CR)) 26400 (clobber (reg:SI R_CR))])] 26401 "" 26402 "loadm 0,0,%1,%2") 26403 26404 The constants that are defined with a define_constant are also output 26405 in the insn-codes.h header file as #defines. 26406 26407 You can also use the machine description file to define enumerations. 26408 Like the constants defined by `define_constant', these enumerations are 26409 visible to both the machine description file and the main C code. 26410 26411 The syntax is as follows: 26412 26413 (define_c_enum "NAME" [ 26414 VALUE0 26415 VALUE1 26416 ... 26417 VALUEN 26418 ]) 26419 26420 This definition causes the equivalent of the following C code to appear 26421 in `insn-constants.h': 26422 26423 enum NAME { 26424 VALUE0 = 0, 26425 VALUE1 = 1, 26426 ... 26427 VALUEN = N 26428 }; 26429 #define NUM_CNAME_VALUES (N + 1) 26430 26431 where CNAME is the capitalized form of NAME. It also makes each 26432 VALUEI available in the machine description file, just as if it had 26433 been declared with: 26434 26435 (define_constants [(VALUEI I)]) 26436 26437 Each VALUEI is usually an upper-case identifier and usually begins 26438 with CNAME. 26439 26440 You can split the enumeration definition into as many statements as 26441 you like. The above example is directly equivalent to: 26442 26443 (define_c_enum "NAME" [VALUE0]) 26444 (define_c_enum "NAME" [VALUE1]) 26445 ... 26446 (define_c_enum "NAME" [VALUEN]) 26447 26448 Splitting the enumeration helps to improve the modularity of each 26449 individual `.md' file. For example, if a port defines its 26450 synchronization instructions in a separate `sync.md' file, it is 26451 convenient to define all synchronization-specific enumeration values in 26452 `sync.md' rather than in the main `.md' file. 26453 26454 Some enumeration names have special significance to GCC: 26455 26456 `unspecv' 26457 If an enumeration called `unspecv' is defined, GCC will use it 26458 when printing out `unspec_volatile' expressions. For example: 26459 26460 (define_c_enum "unspecv" [ 26461 UNSPECV_BLOCKAGE 26462 ]) 26463 26464 causes GCC to print `(unspec_volatile ... 0)' as: 26465 26466 (unspec_volatile ... UNSPECV_BLOCKAGE) 26467 26468 `unspec' 26469 If an enumeration called `unspec' is defined, GCC will use it when 26470 printing out `unspec' expressions. GCC will also use it when 26471 printing out `unspec_volatile' expressions unless an `unspecv' 26472 enumeration is also defined. You can therefore decide whether to 26473 keep separate enumerations for volatile and non-volatile 26474 expressions or whether to use the same enumeration for both. 26475 26476 Another way of defining an enumeration is to use `define_enum': 26477 26478 (define_enum "NAME" [ 26479 VALUE0 26480 VALUE1 26481 ... 26482 VALUEN 26483 ]) 26484 26485 This directive implies: 26486 26487 (define_c_enum "NAME" [ 26488 CNAME_CVALUE0 26489 CNAME_CVALUE1 26490 ... 26491 CNAME_CVALUEN 26492 ]) 26493 26494 where CVALUEI is the capitalized form of VALUEI. However, unlike 26495 `define_c_enum', the enumerations defined by `define_enum' can be used 26496 in attribute specifications (*note define_enum_attr::). 26497 26498 26499 File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 26500 26501 16.23 Iterators 26502 =============== 26503 26504 Ports often need to define similar patterns for more than one machine 26505 mode or for more than one rtx code. GCC provides some simple iterator 26506 facilities to make this process easier. 26507 26508 * Menu: 26509 26510 * Mode Iterators:: Generating variations of patterns for different modes. 26511 * Code Iterators:: Doing the same for codes. 26512 * Int Iterators:: Doing the same for integers. 26513 * Subst Iterators:: Generating variations of patterns for define_subst. 26514 26515 26516 File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 26517 26518 16.23.1 Mode Iterators 26519 ---------------------- 26520 26521 Ports often need to define similar patterns for two or more different 26522 modes. For example: 26523 26524 * If a processor has hardware support for both single and double 26525 floating-point arithmetic, the `SFmode' patterns tend to be very 26526 similar to the `DFmode' ones. 26527 26528 * If a port uses `SImode' pointers in one configuration and `DImode' 26529 pointers in another, it will usually have very similar `SImode' 26530 and `DImode' patterns for manipulating pointers. 26531 26532 Mode iterators allow several patterns to be instantiated from one 26533 `.md' file template. They can be used with any type of rtx-based 26534 construct, such as a `define_insn', `define_split', or 26535 `define_peephole2'. 26536 26537 * Menu: 26538 26539 * Defining Mode Iterators:: Defining a new mode iterator. 26540 * Substitutions:: Combining mode iterators with substitutions 26541 * Examples:: Examples 26542 26543 26544 File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 26545 26546 16.23.1.1 Defining Mode Iterators 26547 ................................. 26548 26549 The syntax for defining a mode iterator is: 26550 26551 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 26552 26553 This allows subsequent `.md' file constructs to use the mode suffix 26554 `:NAME'. Every construct that does so will be expanded N times, once 26555 with every use of `:NAME' replaced by `:MODE1', once with every use 26556 replaced by `:MODE2', and so on. In the expansion for a particular 26557 MODEI, every C condition will also require that CONDI be true. 26558 26559 For example: 26560 26561 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 26562 26563 defines a new mode suffix `:P'. Every construct that uses `:P' will 26564 be expanded twice, once with every `:P' replaced by `:SI' and once with 26565 every `:P' replaced by `:DI'. The `:SI' version will only apply if 26566 `Pmode == SImode' and the `:DI' version will only apply if `Pmode == 26567 DImode'. 26568 26569 As with other `.md' conditions, an empty string is treated as "always 26570 true". `(MODE "")' can also be abbreviated to `MODE'. For example: 26571 26572 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 26573 26574 means that the `:DI' expansion only applies if `TARGET_64BIT' but that 26575 the `:SI' expansion has no such constraint. 26576 26577 Iterators are applied in the order they are defined. This can be 26578 significant if two iterators are used in a construct that requires 26579 substitutions. *Note Substitutions::. 26580 26581 26582 File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 26583 26584 16.23.1.2 Substitution in Mode Iterators 26585 ........................................ 26586 26587 If an `.md' file construct uses mode iterators, each version of the 26588 construct will often need slightly different strings or modes. For 26589 example: 26590 26591 * When a `define_expand' defines several `addM3' patterns (*note 26592 Standard Names::), each expander will need to use the appropriate 26593 mode name for M. 26594 26595 * When a `define_insn' defines several instruction patterns, each 26596 instruction will often use a different assembler mnemonic. 26597 26598 * When a `define_insn' requires operands with different modes, using 26599 an iterator for one of the operand modes usually requires a 26600 specific mode for the other operand(s). 26601 26602 GCC supports such variations through a system of "mode attributes". 26603 There are two standard attributes: `mode', which is the name of the 26604 mode in lower case, and `MODE', which is the same thing in upper case. 26605 You can define other attributes using: 26606 26607 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 26608 26609 where NAME is the name of the attribute and VALUEI is the value 26610 associated with MODEI. 26611 26612 When GCC replaces some :ITERATOR with :MODE, it will scan each string 26613 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>', 26614 where ATTR is the name of a mode attribute. If the attribute is 26615 defined for MODE, the whole `<...>' sequence will be replaced by the 26616 appropriate attribute value. 26617 26618 For example, suppose an `.md' file has: 26619 26620 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 26621 (define_mode_attr load [(SI "lw") (DI "ld")]) 26622 26623 If one of the patterns that uses `:P' contains the string 26624 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use 26625 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'. 26626 26627 Here is an example of using an attribute for a mode: 26628 26629 (define_mode_iterator LONG [SI DI]) 26630 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 26631 (define_insn ... 26632 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 26633 26634 The `ITERATOR:' prefix may be omitted, in which case the substitution 26635 will be attempted for every iterator expansion. 26636 26637 26638 File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 26639 26640 16.23.1.3 Mode Iterator Examples 26641 ................................ 26642 26643 Here is an example from the MIPS port. It defines the following modes 26644 and attributes (among others): 26645 26646 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 26647 (define_mode_attr d [(SI "") (DI "d")]) 26648 26649 and uses the following template to define both `subsi3' and `subdi3': 26650 26651 (define_insn "sub<mode>3" 26652 [(set (match_operand:GPR 0 "register_operand" "=d") 26653 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 26654 (match_operand:GPR 2 "register_operand" "d")))] 26655 "" 26656 "<d>subu\t%0,%1,%2" 26657 [(set_attr "type" "arith") 26658 (set_attr "mode" "<MODE>")]) 26659 26660 This is exactly equivalent to: 26661 26662 (define_insn "subsi3" 26663 [(set (match_operand:SI 0 "register_operand" "=d") 26664 (minus:SI (match_operand:SI 1 "register_operand" "d") 26665 (match_operand:SI 2 "register_operand" "d")))] 26666 "" 26667 "subu\t%0,%1,%2" 26668 [(set_attr "type" "arith") 26669 (set_attr "mode" "SI")]) 26670 26671 (define_insn "subdi3" 26672 [(set (match_operand:DI 0 "register_operand" "=d") 26673 (minus:DI (match_operand:DI 1 "register_operand" "d") 26674 (match_operand:DI 2 "register_operand" "d")))] 26675 "" 26676 "dsubu\t%0,%1,%2" 26677 [(set_attr "type" "arith") 26678 (set_attr "mode" "DI")]) 26679 26680 26681 File: gccint.info, Node: Code Iterators, Next: Int Iterators, Prev: Mode Iterators, Up: Iterators 26682 26683 16.23.2 Code Iterators 26684 ---------------------- 26685 26686 Code iterators operate in a similar way to mode iterators. *Note Mode 26687 Iterators::. 26688 26689 The construct: 26690 26691 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 26692 26693 defines a pseudo rtx code NAME that can be instantiated as CODEI if 26694 condition CONDI is true. Each CODEI must have the same rtx format. 26695 *Note RTL Classes::. 26696 26697 As with mode iterators, each pattern that uses NAME will be expanded N 26698 times, once with all uses of NAME replaced by CODE1, once with all uses 26699 replaced by CODE2, and so on. *Note Defining Mode Iterators::. 26700 26701 It is possible to define attributes for codes as well as for modes. 26702 There are two standard code attributes: `code', the name of the code in 26703 lower case, and `CODE', the name of the code in upper case. Other 26704 attributes are defined using: 26705 26706 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 26707 26708 Here's an example of code iterators in action, taken from the MIPS 26709 port: 26710 26711 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 26712 eq ne gt ge lt le gtu geu ltu leu]) 26713 26714 (define_expand "b<code>" 26715 [(set (pc) 26716 (if_then_else (any_cond:CC (cc0) 26717 (const_int 0)) 26718 (label_ref (match_operand 0 "")) 26719 (pc)))] 26720 "" 26721 { 26722 gen_conditional_branch (operands, <CODE>); 26723 DONE; 26724 }) 26725 26726 This is equivalent to: 26727 26728 (define_expand "bunordered" 26729 [(set (pc) 26730 (if_then_else (unordered:CC (cc0) 26731 (const_int 0)) 26732 (label_ref (match_operand 0 "")) 26733 (pc)))] 26734 "" 26735 { 26736 gen_conditional_branch (operands, UNORDERED); 26737 DONE; 26738 }) 26739 26740 (define_expand "bordered" 26741 [(set (pc) 26742 (if_then_else (ordered:CC (cc0) 26743 (const_int 0)) 26744 (label_ref (match_operand 0 "")) 26745 (pc)))] 26746 "" 26747 { 26748 gen_conditional_branch (operands, ORDERED); 26749 DONE; 26750 }) 26751 26752 ... 26753 26754 26755 File: gccint.info, Node: Int Iterators, Next: Subst Iterators, Prev: Code Iterators, Up: Iterators 26756 26757 16.23.3 Int Iterators 26758 --------------------- 26759 26760 Int iterators operate in a similar way to code iterators. *Note Code 26761 Iterators::. 26762 26763 The construct: 26764 26765 (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")]) 26766 26767 defines a pseudo integer constant NAME that can be instantiated as 26768 INTI if condition CONDI is true. Each INT must have the same rtx 26769 format. *Note RTL Classes::. Int iterators can appear in only those 26770 rtx fields that have 'i' as the specifier. This means that each INT has 26771 to be a constant defined using define_constant or define_c_enum. 26772 26773 As with mode and code iterators, each pattern that uses NAME will be 26774 expanded N times, once with all uses of NAME replaced by INT1, once 26775 with all uses replaced by INT2, and so on. *Note Defining Mode 26776 Iterators::. 26777 26778 It is possible to define attributes for ints as well as for codes and 26779 modes. Attributes are defined using: 26780 26781 (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")]) 26782 26783 Here's an example of int iterators in action, taken from the ARM port: 26784 26785 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 26786 26787 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 26788 26789 (define_insn "neon_vq<absneg><mode>" 26790 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26791 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26792 (match_operand:SI 2 "immediate_operand" "i")] 26793 QABSNEG))] 26794 "TARGET_NEON" 26795 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26796 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26797 ) 26798 26799 This is equivalent to: 26800 26801 (define_insn "neon_vqabs<mode>" 26802 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26803 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26804 (match_operand:SI 2 "immediate_operand" "i")] 26805 UNSPEC_VQABS))] 26806 "TARGET_NEON" 26807 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26808 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26809 ) 26810 26811 (define_insn "neon_vqneg<mode>" 26812 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 26813 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 26814 (match_operand:SI 2 "immediate_operand" "i")] 26815 UNSPEC_VQNEG))] 26816 "TARGET_NEON" 26817 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 26818 [(set_attr "neon_type" "neon_vqneg_vqabs")] 26819 ) 26820 26821 26822 File: gccint.info, Node: Subst Iterators, Prev: Int Iterators, Up: Iterators 26823 26824 16.23.4 Subst Iterators 26825 ----------------------- 26826 26827 Subst iterators are special type of iterators with the following 26828 restrictions: they could not be declared explicitly, they always have 26829 only two values, and they do not have explicit dedicated name. 26830 Subst-iterators are triggered only when corresponding subst-attribute is 26831 used in RTL-pattern. 26832 26833 Subst iterators transform templates in the following way: the templates 26834 are duplicated, the subst-attributes in these templates are replaced 26835 with the corresponding values, and a new attribute is implicitly added 26836 to the given `define_insn'/`define_expand'. The name of the added 26837 attribute matches the name of `define_subst'. Such attributes are 26838 declared implicitly, and it is not allowed to have a `define_attr' 26839 named as a `define_subst'. 26840 26841 Each subst iterator is linked to a `define_subst'. It is declared 26842 implicitly by the first appearance of the corresponding 26843 `define_subst_attr', and it is not allowed to define it explicitly. 26844 26845 Declarations of subst-attributes have the following syntax: 26846 26847 (define_subst_attr "NAME" 26848 "SUBST-NAME" 26849 "NO-SUBST-VALUE" 26850 "SUBST-APPLIED-VALUE") 26851 26852 NAME is a string with which the given subst-attribute could be 26853 referred to. 26854 26855 SUBST-NAME shows which `define_subst' should be applied to an 26856 RTL-template if the given subst-attribute is present in the 26857 RTL-template. 26858 26859 NO-SUBST-VALUE is a value with which subst-attribute would be replaced 26860 in the first copy of the original RTL-template. 26861 26862 SUBST-APPLIED-VALUE is a value with which subst-attribute would be 26863 replaced in the second copy of the original RTL-template. 26864 26865 26866 File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 26867 26868 17 Target Description Macros and Functions 26869 ****************************************** 26870 26871 In addition to the file `MACHINE.md', a machine description includes a 26872 C header file conventionally given the name `MACHINE.h' and a C source 26873 file named `MACHINE.c'. The header file defines numerous macros that 26874 convey the information about the target machine that does not fit into 26875 the scheme of the `.md' file. The file `tm.h' should be a link to 26876 `MACHINE.h'. The header file `config.h' includes `tm.h' and most 26877 compiler source files include `config.h'. The source file defines a 26878 variable `targetm', which is a structure containing pointers to 26879 functions and data relating to the target machine. `MACHINE.c' should 26880 also contain their definitions, if they are not defined elsewhere in 26881 GCC, and other functions called through the macros defined in the `.h' 26882 file. 26883 26884 * Menu: 26885 26886 * Target Structure:: The `targetm' variable. 26887 * Driver:: Controlling how the driver runs the compilation passes. 26888 * Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'. 26889 * Per-Function Data:: Defining data structures for per-function information. 26890 * Storage Layout:: Defining sizes and alignments of data. 26891 * Type Layout:: Defining sizes and properties of basic user data types. 26892 * Registers:: Naming and describing the hardware registers. 26893 * Register Classes:: Defining the classes of hardware registers. 26894 * Old Constraints:: The old way to define machine-specific constraints. 26895 * Stack and Calling:: Defining which way the stack grows and by how much. 26896 * Varargs:: Defining the varargs macros. 26897 * Trampolines:: Code set up at run time to enter a nested function. 26898 * Library Calls:: Controlling how library routines are implicitly called. 26899 * Addressing Modes:: Defining addressing modes valid for memory operands. 26900 * Anchored Addresses:: Defining how `-fsection-anchors' should work. 26901 * Condition Code:: Defining how insns update the condition code. 26902 * Costs:: Defining relative costs of different operations. 26903 * Scheduling:: Adjusting the behavior of the instruction scheduler. 26904 * Sections:: Dividing storage into text, data, and other sections. 26905 * PIC:: Macros for position independent code. 26906 * Assembler Format:: Defining how to write insns and pseudo-ops to output. 26907 * Debugging Info:: Defining the format of debugging output. 26908 * Floating Point:: Handling floating point for cross-compilers. 26909 * Mode Switching:: Insertion of mode-switching instructions. 26910 * Target Attributes:: Defining target-specific uses of `__attribute__'. 26911 * Emulated TLS:: Emulated TLS support. 26912 * MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 26913 * PCH Target:: Validity checking for precompiled headers. 26914 * C++ ABI:: Controlling C++ ABI changes. 26915 * Named Address Spaces:: Adding support for named address spaces 26916 * Misc:: Everything else. 26917 26918 26919 File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 26920 26921 17.1 The Global `targetm' Variable 26922 ================================== 26923 26924 -- Variable: struct gcc_target targetm 26925 The target `.c' file must define the global `targetm' variable 26926 which contains pointers to functions and data relating to the 26927 target machine. The variable is declared in `target.h'; 26928 `target-def.h' defines the macro `TARGET_INITIALIZER' which is 26929 used to initialize the variable, and macros for the default 26930 initializers for elements of the structure. The `.c' file should 26931 override those macros for which the default definition is 26932 inappropriate. For example: 26933 #include "target.h" 26934 #include "target-def.h" 26935 26936 /* Initialize the GCC target structure. */ 26937 26938 #undef TARGET_COMP_TYPE_ATTRIBUTES 26939 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 26940 26941 struct gcc_target targetm = TARGET_INITIALIZER; 26942 26943 Where a macro should be defined in the `.c' file in this manner to form 26944 part of the `targetm' structure, it is documented below as a "Target 26945 Hook" with a prototype. Many macros will change in future from being 26946 defined in the `.h' file to being part of the `targetm' structure. 26947 26948 Similarly, there is a `targetcm' variable for hooks that are specific 26949 to front ends for C-family languages, documented as "C Target Hook". 26950 This is declared in `c-family/c-target.h', the initializer 26951 `TARGETCM_INITIALIZER' in `c-family/c-target-def.h'. If targets 26952 initialize `targetcm' themselves, they should set 26953 `target_has_targetcm=yes' in `config.gcc'; otherwise a default 26954 definition is used. 26955 26956 Similarly, there is a `targetm_common' variable for hooks that are 26957 shared between the compiler driver and the compilers proper, documented 26958 as "Common Target Hook". This is declared in `common/common-target.h', 26959 the initializer `TARGETM_COMMON_INITIALIZER' in 26960 `common/common-target-def.h'. If targets initialize `targetm_common' 26961 themselves, they should set `target_has_targetm_common=yes' in 26962 `config.gcc'; otherwise a default definition is used. 26963 26964 26965 File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 26966 26967 17.2 Controlling the Compilation Driver, `gcc' 26968 ============================================== 26969 26970 You can control the compilation driver. 26971 26972 -- Macro: DRIVER_SELF_SPECS 26973 A list of specs for the driver itself. It should be a suitable 26974 initializer for an array of strings, with no surrounding braces. 26975 26976 The driver applies these specs to its own command line between 26977 loading default `specs' files (but not command-line specified 26978 ones) and choosing the multilib directory or running any 26979 subcommands. It applies them in the order given, so each spec can 26980 depend on the options added by earlier ones. It is also possible 26981 to remove options using `%<OPTION' in the usual way. 26982 26983 This macro can be useful when a port has several interdependent 26984 target options. It provides a way of standardizing the command 26985 line so that the other specs are easier to write. 26986 26987 Do not define this macro if it does not need to do anything. 26988 26989 -- Macro: OPTION_DEFAULT_SPECS 26990 A list of specs used to support configure-time default options 26991 (i.e. `--with' options) in the driver. It should be a suitable 26992 initializer for an array of structures, each containing two 26993 strings, without the outermost pair of surrounding braces. 26994 26995 The first item in the pair is the name of the default. This must 26996 match the code in `config.gcc' for the target. The second item is 26997 a spec to apply if a default with this name was specified. The 26998 string `%(VALUE)' in the spec will be replaced by the value of the 26999 default everywhere it occurs. 27000 27001 The driver will apply these specs to its own command line between 27002 loading default `specs' files and processing `DRIVER_SELF_SPECS', 27003 using the same mechanism as `DRIVER_SELF_SPECS'. 27004 27005 Do not define this macro if it does not need to do anything. 27006 27007 -- Macro: CPP_SPEC 27008 A C string constant that tells the GCC driver program options to 27009 pass to CPP. It can also specify how to translate options you 27010 give to GCC into options for GCC to pass to the CPP. 27011 27012 Do not define this macro if it does not need to do anything. 27013 27014 -- Macro: CPLUSPLUS_CPP_SPEC 27015 This macro is just like `CPP_SPEC', but is used for C++, rather 27016 than C. If you do not define this macro, then the value of 27017 `CPP_SPEC' (if any) will be used instead. 27018 27019 -- Macro: CC1_SPEC 27020 A C string constant that tells the GCC driver program options to 27021 pass to `cc1', `cc1plus', `f771', and the other language front 27022 ends. It can also specify how to translate options you give to 27023 GCC into options for GCC to pass to front ends. 27024 27025 Do not define this macro if it does not need to do anything. 27026 27027 -- Macro: CC1PLUS_SPEC 27028 A C string constant that tells the GCC driver program options to 27029 pass to `cc1plus'. It can also specify how to translate options 27030 you give to GCC into options for GCC to pass to the `cc1plus'. 27031 27032 Do not define this macro if it does not need to do anything. Note 27033 that everything defined in CC1_SPEC is already passed to `cc1plus' 27034 so there is no need to duplicate the contents of CC1_SPEC in 27035 CC1PLUS_SPEC. 27036 27037 -- Macro: ASM_SPEC 27038 A C string constant that tells the GCC driver program options to 27039 pass to the assembler. It can also specify how to translate 27040 options you give to GCC into options for GCC to pass to the 27041 assembler. See the file `sun3.h' for an example of this. 27042 27043 Do not define this macro if it does not need to do anything. 27044 27045 -- Macro: ASM_FINAL_SPEC 27046 A C string constant that tells the GCC driver program how to run 27047 any programs which cleanup after the normal assembler. Normally, 27048 this is not needed. See the file `mips.h' for an example of this. 27049 27050 Do not define this macro if it does not need to do anything. 27051 27052 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 27053 Define this macro, with no value, if the driver should give the 27054 assembler an argument consisting of a single dash, `-', to 27055 instruct it to read from its standard input (which will be a pipe 27056 connected to the output of the compiler proper). This argument is 27057 given after any `-o' option specifying the name of the output file. 27058 27059 If you do not define this macro, the assembler is assumed to read 27060 its standard input if given no non-option arguments. If your 27061 assembler cannot read standard input at all, use a `%{pipe:%e}' 27062 construct; see `mips.h' for instance. 27063 27064 -- Macro: LINK_SPEC 27065 A C string constant that tells the GCC driver program options to 27066 pass to the linker. It can also specify how to translate options 27067 you give to GCC into options for GCC to pass to the linker. 27068 27069 Do not define this macro if it does not need to do anything. 27070 27071 -- Macro: LIB_SPEC 27072 Another C string constant used much like `LINK_SPEC'. The 27073 difference between the two is that `LIB_SPEC' is used at the end 27074 of the command given to the linker. 27075 27076 If this macro is not defined, a default is provided that loads the 27077 standard C library from the usual place. See `gcc.c'. 27078 27079 -- Macro: LIBGCC_SPEC 27080 Another C string constant that tells the GCC driver program how 27081 and when to place a reference to `libgcc.a' into the linker 27082 command line. This constant is placed both before and after the 27083 value of `LIB_SPEC'. 27084 27085 If this macro is not defined, the GCC driver provides a default 27086 that passes the string `-lgcc' to the linker. 27087 27088 -- Macro: REAL_LIBGCC_SPEC 27089 By default, if `ENABLE_SHARED_LIBGCC' is defined, the 27090 `LIBGCC_SPEC' is not directly used by the driver program but is 27091 instead modified to refer to different versions of `libgcc.a' 27092 depending on the values of the command line flags `-static', 27093 `-shared', `-static-libgcc', and `-shared-libgcc'. On targets 27094 where these modifications are inappropriate, define 27095 `REAL_LIBGCC_SPEC' instead. `REAL_LIBGCC_SPEC' tells the driver 27096 how to place a reference to `libgcc' on the link command line, 27097 but, unlike `LIBGCC_SPEC', it is used unmodified. 27098 27099 -- Macro: USE_LD_AS_NEEDED 27100 A macro that controls the modifications to `LIBGCC_SPEC' mentioned 27101 in `REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 27102 uses -as-needed and the shared libgcc in place of the static 27103 exception handler library, when linking without any of `-static', 27104 `-static-libgcc', or `-shared-libgcc'. 27105 27106 -- Macro: LINK_EH_SPEC 27107 If defined, this C string constant is added to `LINK_SPEC'. When 27108 `USE_LD_AS_NEEDED' is zero or undefined, it also affects the 27109 modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'. 27110 27111 -- Macro: STARTFILE_SPEC 27112 Another C string constant used much like `LINK_SPEC'. The 27113 difference between the two is that `STARTFILE_SPEC' is used at the 27114 very beginning of the command given to the linker. 27115 27116 If this macro is not defined, a default is provided that loads the 27117 standard C startup file from the usual place. See `gcc.c'. 27118 27119 -- Macro: ENDFILE_SPEC 27120 Another C string constant used much like `LINK_SPEC'. The 27121 difference between the two is that `ENDFILE_SPEC' is used at the 27122 very end of the command given to the linker. 27123 27124 Do not define this macro if it does not need to do anything. 27125 27126 -- Macro: THREAD_MODEL_SPEC 27127 GCC `-v' will print the thread model GCC was configured to use. 27128 However, this doesn't work on platforms that are multilibbed on 27129 thread models, such as AIX 4.3. On such platforms, define 27130 `THREAD_MODEL_SPEC' such that it evaluates to a string without 27131 blanks that names one of the recognized thread models. `%*', the 27132 default value of this macro, will expand to the value of 27133 `thread_file' set in `config.gcc'. 27134 27135 -- Macro: SYSROOT_SUFFIX_SPEC 27136 Define this macro to add a suffix to the target sysroot when GCC is 27137 configured with a sysroot. This will cause GCC to search for 27138 usr/lib, et al, within sysroot+suffix. 27139 27140 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 27141 Define this macro to add a headers_suffix to the target sysroot 27142 when GCC is configured with a sysroot. This will cause GCC to 27143 pass the updated sysroot+headers_suffix to CPP, causing it to 27144 search for usr/include, et al, within sysroot+headers_suffix. 27145 27146 -- Macro: EXTRA_SPECS 27147 Define this macro to provide additional specifications to put in 27148 the `specs' file that can be used in various specifications like 27149 `CC1_SPEC'. 27150 27151 The definition should be an initializer for an array of structures, 27152 containing a string constant, that defines the specification name, 27153 and a string constant that provides the specification. 27154 27155 Do not define this macro if it does not need to do anything. 27156 27157 `EXTRA_SPECS' is useful when an architecture contains several 27158 related targets, which have various `..._SPECS' which are similar 27159 to each other, and the maintainer would like one central place to 27160 keep these definitions. 27161 27162 For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to 27163 define either `_CALL_SYSV' when the System V calling sequence is 27164 used or `_CALL_AIX' when the older AIX-based calling sequence is 27165 used. 27166 27167 The `config/rs6000/rs6000.h' target file defines: 27168 27169 #define EXTRA_SPECS \ 27170 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 27171 27172 #define CPP_SYS_DEFAULT "" 27173 27174 The `config/rs6000/sysv.h' target file defines: 27175 #undef CPP_SPEC 27176 #define CPP_SPEC \ 27177 "%{posix: -D_POSIX_SOURCE } \ 27178 %{mcall-sysv: -D_CALL_SYSV } \ 27179 %{!mcall-sysv: %(cpp_sysv_default) } \ 27180 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 27181 27182 #undef CPP_SYSV_DEFAULT 27183 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 27184 27185 while the `config/rs6000/eabiaix.h' target file defines 27186 `CPP_SYSV_DEFAULT' as: 27187 27188 #undef CPP_SYSV_DEFAULT 27189 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 27190 27191 -- Macro: LINK_LIBGCC_SPECIAL_1 27192 Define this macro if the driver program should find the library 27193 `libgcc.a'. If you do not define this macro, the driver program 27194 will pass the argument `-lgcc' to tell the linker to do the search. 27195 27196 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 27197 The sequence in which libgcc and libc are specified to the linker. 27198 By default this is `%G %L %G'. 27199 27200 -- Macro: LINK_COMMAND_SPEC 27201 A C string constant giving the complete command line need to 27202 execute the linker. When you do this, you will need to update 27203 your port each time a change is made to the link command line 27204 within `gcc.c'. Therefore, define this macro only if you need to 27205 completely redefine the command line for invoking the linker and 27206 there is no other way to accomplish the effect you need. 27207 Overriding this macro may be avoidable by overriding 27208 `LINK_GCC_C_SEQUENCE_SPEC' instead. 27209 27210 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT 27211 True if `..' components should always be removed from directory 27212 names computed relative to GCC's internal directories, false 27213 (default) if such components should be preserved and directory 27214 names containing them passed to other tools such as the linker. 27215 27216 -- Macro: MULTILIB_DEFAULTS 27217 Define this macro as a C expression for the initializer of an 27218 array of string to tell the driver program which options are 27219 defaults for this target and thus do not need to be handled 27220 specially when using `MULTILIB_OPTIONS'. 27221 27222 Do not define this macro if `MULTILIB_OPTIONS' is not defined in 27223 the target makefile fragment or if none of the options listed in 27224 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 27225 27226 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 27227 Define this macro to tell `gcc' that it should only translate a 27228 `-B' prefix into a `-L' linker option if the prefix indicates an 27229 absolute file name. 27230 27231 -- Macro: MD_EXEC_PREFIX 27232 If defined, this macro is an additional prefix to try after 27233 `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the 27234 compiler is built as a cross compiler. If you define 27235 `MD_EXEC_PREFIX', then be sure to add it to the list of 27236 directories used to find the assembler in `configure.in'. 27237 27238 -- Macro: STANDARD_STARTFILE_PREFIX 27239 Define this macro as a C string constant if you wish to override 27240 the standard choice of `libdir' as the default prefix to try when 27241 searching for startup files such as `crt0.o'. 27242 `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 27243 built as a cross compiler. 27244 27245 -- Macro: STANDARD_STARTFILE_PREFIX_1 27246 Define this macro as a C string constant if you wish to override 27247 the standard choice of `/lib' as a prefix to try after the default 27248 prefix when searching for startup files such as `crt0.o'. 27249 `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 27250 built as a cross compiler. 27251 27252 -- Macro: STANDARD_STARTFILE_PREFIX_2 27253 Define this macro as a C string constant if you wish to override 27254 the standard choice of `/lib' as yet another prefix to try after 27255 the default prefix when searching for startup files such as 27256 `crt0.o'. `STANDARD_STARTFILE_PREFIX_2' is not searched when the 27257 compiler is built as a cross compiler. 27258 27259 -- Macro: MD_STARTFILE_PREFIX 27260 If defined, this macro supplies an additional prefix to try after 27261 the standard prefixes. `MD_EXEC_PREFIX' is not searched when the 27262 compiler is built as a cross compiler. 27263 27264 -- Macro: MD_STARTFILE_PREFIX_1 27265 If defined, this macro supplies yet another prefix to try after the 27266 standard prefixes. It is not searched when the compiler is built 27267 as a cross compiler. 27268 27269 -- Macro: INIT_ENVIRONMENT 27270 Define this macro as a C string constant if you wish to set 27271 environment variables for programs called by the driver, such as 27272 the assembler and loader. The driver passes the value of this 27273 macro to `putenv' to initialize the necessary environment 27274 variables. 27275 27276 -- Macro: LOCAL_INCLUDE_DIR 27277 Define this macro as a C string constant if you wish to override 27278 the standard choice of `/usr/local/include' as the default prefix 27279 to try when searching for local header files. `LOCAL_INCLUDE_DIR' 27280 comes before `NATIVE_SYSTEM_HEADER_DIR' (set in `config.gcc', 27281 normally `/usr/include') in the search order. 27282 27283 Cross compilers do not search either `/usr/local/include' or its 27284 replacement. 27285 27286 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT 27287 The "component" corresponding to `NATIVE_SYSTEM_HEADER_DIR'. See 27288 `INCLUDE_DEFAULTS', below, for the description of components. If 27289 you do not define this macro, no component is used. 27290 27291 -- Macro: INCLUDE_DEFAULTS 27292 Define this macro if you wish to override the entire default 27293 search path for include files. For a native compiler, the default 27294 search path usually consists of `GCC_INCLUDE_DIR', 27295 `LOCAL_INCLUDE_DIR', `GPLUSPLUS_INCLUDE_DIR', and 27296 `NATIVE_SYSTEM_HEADER_DIR'. In addition, `GPLUSPLUS_INCLUDE_DIR' 27297 and `GCC_INCLUDE_DIR' are defined automatically by `Makefile', and 27298 specify private search areas for GCC. The directory 27299 `GPLUSPLUS_INCLUDE_DIR' is used only for C++ programs. 27300 27301 The definition should be an initializer for an array of structures. 27302 Each array element should have four elements: the directory name (a 27303 string constant), the component name (also a string constant), a 27304 flag for C++-only directories, and a flag showing that the 27305 includes in the directory don't need to be wrapped in `extern `C'' 27306 when compiling C++. Mark the end of the array with a null element. 27307 27308 The component name denotes what GNU package the include file is 27309 part of, if any, in all uppercase letters. For example, it might 27310 be `GCC' or `BINUTILS'. If the package is part of a 27311 vendor-supplied operating system, code the component name as `0'. 27312 27313 For example, here is the definition used for VAX/VMS: 27314 27315 #define INCLUDE_DEFAULTS \ 27316 { \ 27317 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 27318 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 27319 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 27320 { ".", 0, 0, 0}, \ 27321 { 0, 0, 0, 0} \ 27322 } 27323 27324 Here is the order of prefixes tried for exec files: 27325 27326 1. Any prefixes specified by the user with `-B'. 27327 27328 2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX' 27329 is not set and the compiler has not been installed in the 27330 configure-time PREFIX, the location in which the compiler has 27331 actually been installed. 27332 27333 3. The directories specified by the environment variable 27334 `COMPILER_PATH'. 27335 27336 4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been 27337 installed in the configured-time PREFIX. 27338 27339 5. The location `/usr/libexec/gcc/', but only if this is a native 27340 compiler. 27341 27342 6. The location `/usr/lib/gcc/', but only if this is a native 27343 compiler. 27344 27345 7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 27346 native compiler. 27347 27348 Here is the order of prefixes tried for startfiles: 27349 27350 1. Any prefixes specified by the user with `-B'. 27351 27352 2. The environment variable `GCC_EXEC_PREFIX' or its automatically 27353 determined value based on the installed toolchain location. 27354 27355 3. The directories specified by the environment variable 27356 `LIBRARY_PATH' (or port-specific name; native only, cross 27357 compilers do not use this). 27358 27359 4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is 27360 installed in the configured PREFIX or this is a native compiler. 27361 27362 5. The location `/usr/lib/gcc/', but only if this is a native 27363 compiler. 27364 27365 6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 27366 native compiler. 27367 27368 7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a 27369 native compiler, or we have a target system root. 27370 27371 8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is 27372 a native compiler, or we have a target system root. 27373 27374 9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot 27375 modifications. If this path is relative it will be prefixed by 27376 `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX' 27377 and the machine suffix. 27378 27379 10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a 27380 native compiler, or we have a target system root. The default for 27381 this macro is `/lib/'. 27382 27383 11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a 27384 native compiler, or we have a target system root. The default for 27385 this macro is `/usr/lib/'. 27386 27387 27388 File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 27389 27390 17.3 Run-time Target Specification 27391 ================================== 27392 27393 Here are run-time target specifications. 27394 27395 -- Macro: TARGET_CPU_CPP_BUILTINS () 27396 This function-like macro expands to a block of code that defines 27397 built-in preprocessor macros and assertions for the target CPU, 27398 using the functions `builtin_define', `builtin_define_std' and 27399 `builtin_assert'. When the front end calls this macro it provides 27400 a trailing semicolon, and since it has finished command line 27401 option processing your code can use those results freely. 27402 27403 `builtin_assert' takes a string in the form you pass to the 27404 command-line option `-A', such as `cpu=mips', and creates the 27405 assertion. `builtin_define' takes a string in the form accepted 27406 by option `-D' and unconditionally defines the macro. 27407 27408 `builtin_define_std' takes a string representing the name of an 27409 object-like macro. If it doesn't lie in the user's namespace, 27410 `builtin_define_std' defines it unconditionally. Otherwise, it 27411 defines a version with two leading underscores, and another version 27412 with two leading and trailing underscores, and defines the original 27413 only if an ISO standard was not requested on the command line. For 27414 example, passing `unix' defines `__unix', `__unix__' and possibly 27415 `unix'; passing `_mips' defines `__mips', `__mips__' and possibly 27416 `_mips', and passing `_ABI64' defines only `_ABI64'. 27417 27418 You can also test for the C dialect being compiled. The variable 27419 `c_language' is set to one of `clk_c', `clk_cplusplus' or 27420 `clk_objective_c'. Note that if we are preprocessing assembler, 27421 this variable will be `clk_c' but the function-like macro 27422 `preprocessing_asm_p()' will return true, so you might want to 27423 check for that first. If you need to check for strict ANSI, the 27424 variable `flag_iso' can be used. The function-like macro 27425 `preprocessing_trad_p()' can be used to check for traditional 27426 preprocessing. 27427 27428 -- Macro: TARGET_OS_CPP_BUILTINS () 27429 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 27430 and is used for the target operating system instead. 27431 27432 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 27433 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 27434 and is used for the target object format. `elfos.h' uses this 27435 macro to define `__ELF__', so you probably do not need to define 27436 it yourself. 27437 27438 -- Variable: extern int target_flags 27439 This variable is declared in `options.h', which is included before 27440 any target-specific headers. 27441 27442 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 27443 This variable specifies the initial value of `target_flags'. Its 27444 default setting is 0. 27445 27446 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options 27447 *OPTS, struct gcc_options *OPTS_SET, const struct 27448 cl_decoded_option *DECODED, location_t LOC) 27449 This hook is called whenever the user specifies one of the 27450 target-specific options described by the `.opt' definition files 27451 (*note Options::). It has the opportunity to do some 27452 option-specific processing and should return true if the option is 27453 valid. The default definition does nothing but return true. 27454 27455 DECODED specifies the option and its arguments. OPTS and OPTS_SET 27456 are the `gcc_options' structures to be used for storing option 27457 state, and LOC is the location at which the option was passed 27458 (`UNKNOWN_LOCATION' except for options passed via attributes). 27459 27460 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 27461 *ARG, int VALUE) 27462 This target hook is called whenever the user specifies one of the 27463 target-specific C language family options described by the `.opt' 27464 definition files(*note Options::). It has the opportunity to do 27465 some option-specific processing and should return true if the 27466 option is valid. The arguments are like for 27467 `TARGET_HANDLE_OPTION'. The default definition does nothing but 27468 return false. 27469 27470 In general, you should use `TARGET_HANDLE_OPTION' to handle 27471 options. However, if processing an option requires routines that 27472 are only available in the C (and related language) front ends, 27473 then you should use `TARGET_HANDLE_C_OPTION' instead. 27474 27475 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 27476 STRING) 27477 Targets may provide a string object type that can be used within 27478 and between C, C++ and their respective Objective-C dialects. A 27479 string object might, for example, embed encoding and length 27480 information. These objects are considered opaque to the compiler 27481 and handled as references. An ideal implementation makes the 27482 composition of the string object match that of the Objective-C 27483 `NSString' (`NXString' for GNUStep), allowing efficient 27484 interworking between C-only and Objective-C code. If a target 27485 implements string objects then this hook should return a reference 27486 to such an object constructed from the normal `C' string 27487 representation provided in STRING. At present, the hook is used by 27488 Objective-C only, to obtain a common-format string object when the 27489 target provides one. 27490 27491 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE 27492 (const char *CLASSNAME) 27493 Declare that Objective C class CLASSNAME is referenced by the 27494 current TU. 27495 27496 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const 27497 char *CLASSNAME) 27498 Declare that Objective C class CLASSNAME is defined by the 27499 current TU. 27500 27501 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 27502 STRINGREF) 27503 If a target implements string objects then this hook should return 27504 `true' if STRINGREF is a valid reference to such an object. 27505 27506 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 27507 FORMAT_ARG, tree ARGS_LIST) 27508 If a target implements string objects then this hook should should 27509 provide a facility to check the function arguments in ARGS_LIST 27510 against the format specifiers in FORMAT_ARG where the type of 27511 FORMAT_ARG is one recognized as a valid string reference type. 27512 27513 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 27514 This target function is similar to the hook 27515 `TARGET_OPTION_OVERRIDE' but is called when the optimize level is 27516 changed via an attribute or pragma or when it is reset at the end 27517 of the code affected by the attribute or pragma. It is not called 27518 at the beginning of compilation when `TARGET_OPTION_OVERRIDE' is 27519 called so if you want to perform these actions then, you should 27520 have `TARGET_OPTION_OVERRIDE' call 27521 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 27522 27523 -- Macro: C_COMMON_OVERRIDE_OPTIONS 27524 This is similar to the `TARGET_OPTION_OVERRIDE' hook but is only 27525 used in the C language frontends (C, Objective-C, C++, 27526 Objective-C++) and so can be used to alter option flag variables 27527 which only exist in those frontends. 27528 27529 -- Common Target Hook: const struct default_options * 27530 TARGET_OPTION_OPTIMIZATION_TABLE 27531 Some machines may desire to change what optimizations are 27532 performed for various optimization levels. This variable, if 27533 defined, describes options to enable at particular sets of 27534 optimization levels. These options are processed once just after 27535 the optimization level is determined and before the remainder of 27536 the command options have been parsed, so may be overridden by other 27537 options passed explicitly. 27538 27539 This processing is run once at program startup and when the 27540 optimization options are changed via `#pragma GCC optimize' or by 27541 using the `optimize' attribute. 27542 27543 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct 27544 gcc_options *OPTS) 27545 Set target-dependent initial values of fields in OPTS. 27546 27547 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void) 27548 Set target-dependent default values for `--param' settings, using 27549 calls to `set_default_param_value'. 27550 27551 -- Macro: SWITCHABLE_TARGET 27552 Some targets need to switch between substantially different 27553 subtargets during compilation. For example, the MIPS target has 27554 one subtarget for the traditional MIPS architecture and another 27555 for MIPS16. Source code can switch between these two 27556 subarchitectures using the `mips16' and `nomips16' attributes. 27557 27558 Such subtargets can differ in things like the set of available 27559 registers, the set of available instructions, the costs of various 27560 operations, and so on. GCC caches a lot of this type of 27561 information in global variables, and recomputing them for each 27562 subtarget takes a significant amount of time. The compiler 27563 therefore provides a facility for maintaining several versions of 27564 the global variables and quickly switching between them; see 27565 `target-globals.h' for details. 27566 27567 Define this macro to 1 if your target needs this facility. The 27568 default is 0. 27569 27570 27571 File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 27572 27573 17.4 Defining data structures for per-function information. 27574 =========================================================== 27575 27576 If the target needs to store information on a per-function basis, GCC 27577 provides a macro and a couple of variables to allow this. Note, just 27578 using statics to store the information is a bad idea, since GCC supports 27579 nested functions, so you can be halfway through encoding one function 27580 when another one comes along. 27581 27582 GCC defines a data structure called `struct function' which contains 27583 all of the data specific to an individual function. This structure 27584 contains a field called `machine' whose type is `struct 27585 machine_function *', which can be used by targets to point to their own 27586 specific data. 27587 27588 If a target needs per-function specific data it should define the type 27589 `struct machine_function' and also the macro `INIT_EXPANDERS'. This 27590 macro should be used to initialize the function pointer 27591 `init_machine_status'. This pointer is explained below. 27592 27593 One typical use of per-function, target specific data is to create an 27594 RTX to hold the register containing the function's return address. This 27595 RTX can then be used to implement the `__builtin_return_address' 27596 function, for level 0. 27597 27598 Note--earlier implementations of GCC used a single data area to hold 27599 all of the per-function information. Thus when processing of a nested 27600 function began the old per-function data had to be pushed onto a stack, 27601 and when the processing was finished, it had to be popped off the 27602 stack. GCC used to provide function pointers called 27603 `save_machine_status' and `restore_machine_status' to handle the saving 27604 and restoring of the target specific information. Since the single 27605 data area approach is no longer used, these pointers are no longer 27606 supported. 27607 27608 -- Macro: INIT_EXPANDERS 27609 Macro called to initialize any target specific information. This 27610 macro is called once per function, before generation of any RTL 27611 has begun. The intention of this macro is to allow the 27612 initialization of the function pointer `init_machine_status'. 27613 27614 -- Variable: void (*)(struct function *) init_machine_status 27615 If this function pointer is non-`NULL' it will be called once per 27616 function, before function compilation starts, in order to allow the 27617 target to perform any target specific initialization of the 27618 `struct function' structure. It is intended that this would be 27619 used to initialize the `machine' of that structure. 27620 27621 `struct machine_function' structures are expected to be freed by 27622 GC. Generally, any memory that they reference must be allocated 27623 by using GC allocation, including the structure itself. 27624 27625 27626 File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 27627 27628 17.5 Storage Layout 27629 =================== 27630 27631 Note that the definitions of the macros in this table which are sizes or 27632 alignments measured in bits do not need to be constant. They can be C 27633 expressions that refer to static variables, such as the `target_flags'. 27634 *Note Run-time Target::. 27635 27636 -- Macro: BITS_BIG_ENDIAN 27637 Define this macro to have the value 1 if the most significant bit 27638 in a byte has the lowest number; otherwise define it to have the 27639 value zero. This means that bit-field instructions count from the 27640 most significant bit. If the machine has no bit-field 27641 instructions, then this must still be defined, but it doesn't 27642 matter which value it is defined to. This macro need not be a 27643 constant. 27644 27645 This macro does not affect the way structure fields are packed into 27646 bytes or words; that is controlled by `BYTES_BIG_ENDIAN'. 27647 27648 -- Macro: BYTES_BIG_ENDIAN 27649 Define this macro to have the value 1 if the most significant byte 27650 in a word has the lowest number. This macro need not be a 27651 constant. 27652 27653 -- Macro: WORDS_BIG_ENDIAN 27654 Define this macro to have the value 1 if, in a multiword object, 27655 the most significant word has the lowest number. This applies to 27656 both memory locations and registers; see `REG_WORDS_BIG_ENDIAN' if 27657 the order of words in memory is not the same as the order in 27658 registers. This macro need not be a constant. 27659 27660 -- Macro: REG_WORDS_BIG_ENDIAN 27661 On some machines, the order of words in a multiword object differs 27662 between registers in memory. In such a situation, define this 27663 macro to describe the order of words in a register. The macro 27664 `WORDS_BIG_ENDIAN' controls the order of words in memory. 27665 27666 -- Macro: FLOAT_WORDS_BIG_ENDIAN 27667 Define this macro to have the value 1 if `DFmode', `XFmode' or 27668 `TFmode' floating point numbers are stored in memory with the word 27669 containing the sign bit at the lowest address; otherwise define it 27670 to have the value 0. This macro need not be a constant. 27671 27672 You need not define this macro if the ordering is the same as for 27673 multi-word integers. 27674 27675 -- Macro: BITS_PER_UNIT 27676 Define this macro to be the number of bits in an addressable 27677 storage unit (byte). If you do not define this macro the default 27678 is 8. 27679 27680 -- Macro: BITS_PER_WORD 27681 Number of bits in a word. If you do not define this macro, the 27682 default is `BITS_PER_UNIT * UNITS_PER_WORD'. 27683 27684 -- Macro: MAX_BITS_PER_WORD 27685 Maximum number of bits in a word. If this is undefined, the 27686 default is `BITS_PER_WORD'. Otherwise, it is the constant value 27687 that is the largest value that `BITS_PER_WORD' can have at 27688 run-time. 27689 27690 -- Macro: UNITS_PER_WORD 27691 Number of storage units in a word; normally the size of a 27692 general-purpose register, a power of two from 1 or 8. 27693 27694 -- Macro: MIN_UNITS_PER_WORD 27695 Minimum number of units in a word. If this is undefined, the 27696 default is `UNITS_PER_WORD'. Otherwise, it is the constant value 27697 that is the smallest value that `UNITS_PER_WORD' can have at 27698 run-time. 27699 27700 -- Macro: POINTER_SIZE 27701 Width of a pointer, in bits. You must specify a value no wider 27702 than the width of `Pmode'. If it is not equal to the width of 27703 `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'. If you do 27704 not specify a value the default is `BITS_PER_WORD'. 27705 27706 -- Macro: POINTERS_EXTEND_UNSIGNED 27707 A C expression that determines how pointers should be extended from 27708 `ptr_mode' to either `Pmode' or `word_mode'. It is greater than 27709 zero if pointers should be zero-extended, zero if they should be 27710 sign-extended, and negative if some other sort of conversion is 27711 needed. In the last case, the extension is done by the target's 27712 `ptr_extend' instruction. 27713 27714 You need not define this macro if the `ptr_mode', `Pmode' and 27715 `word_mode' are all the same width. 27716 27717 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 27718 A macro to update M and UNSIGNEDP when an object whose type is 27719 TYPE and which has the specified mode and signedness is to be 27720 stored in a register. This macro is only called when TYPE is a 27721 scalar type. 27722 27723 On most RISC machines, which only have operations that operate on 27724 a full register, define this macro to set M to `word_mode' if M is 27725 an integer mode narrower than `BITS_PER_WORD'. In most cases, 27726 only integer modes should be widened because wider-precision 27727 floating-point operations are usually more expensive than their 27728 narrower counterparts. 27729 27730 For most machines, the macro definition does not change UNSIGNEDP. 27731 However, some machines, have instructions that preferentially 27732 handle either signed or unsigned quantities of certain modes. For 27733 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 27734 instructions sign-extend the result to 64 bits. On such machines, 27735 set UNSIGNEDP according to which kind of extension is more 27736 efficient. 27737 27738 Do not define this macro if it would never modify M. 27739 27740 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE 27741 (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP, 27742 const_tree FUNTYPE, int FOR_RETURN) 27743 Like `PROMOTE_MODE', but it is applied to outgoing function 27744 arguments or function return values. The target hook should 27745 return the new mode and possibly change `*PUNSIGNEDP' if the 27746 promotion should change signedness. This function is called only 27747 for scalar _or pointer_ types. 27748 27749 FOR_RETURN allows to distinguish the promotion of arguments and 27750 return values. If it is `1', a return value is being promoted and 27751 `TARGET_FUNCTION_VALUE' must perform the same promotions done here. 27752 If it is `2', the returned mode should be that of the register in 27753 which an incoming parameter is copied, or the outgoing result is 27754 computed; then the hook should return the same mode as 27755 `promote_mode', though the signedness may be different. 27756 27757 TYPE can be NULL when promoting function arguments of libcalls. 27758 27759 The default is to not promote arguments and return values. You can 27760 also define the hook to 27761 `default_promote_function_mode_always_promote' if you would like 27762 to apply the same rules given by `PROMOTE_MODE'. 27763 27764 -- Macro: PARM_BOUNDARY 27765 Normal alignment required for function parameters on the stack, in 27766 bits. All stack parameters receive at least this much alignment 27767 regardless of data type. On most machines, this is the same as the 27768 size of an integer. 27769 27770 -- Macro: STACK_BOUNDARY 27771 Define this macro to the minimum alignment enforced by hardware 27772 for the stack pointer on this machine. The definition is a C 27773 expression for the desired alignment (measured in bits). This 27774 value is used as a default if `PREFERRED_STACK_BOUNDARY' is not 27775 defined. On most machines, this should be the same as 27776 `PARM_BOUNDARY'. 27777 27778 -- Macro: PREFERRED_STACK_BOUNDARY 27779 Define this macro if you wish to preserve a certain alignment for 27780 the stack pointer, greater than what the hardware enforces. The 27781 definition is a C expression for the desired alignment (measured 27782 in bits). This macro must evaluate to a value equal to or larger 27783 than `STACK_BOUNDARY'. 27784 27785 -- Macro: INCOMING_STACK_BOUNDARY 27786 Define this macro if the incoming stack boundary may be different 27787 from `PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 27788 value equal to or larger than `STACK_BOUNDARY'. 27789 27790 -- Macro: FUNCTION_BOUNDARY 27791 Alignment required for a function entry point, in bits. 27792 27793 -- Macro: BIGGEST_ALIGNMENT 27794 Biggest alignment that any data type can require on this machine, 27795 in bits. Note that this is not the biggest alignment that is 27796 supported, just the biggest alignment that, when violated, may 27797 cause a fault. 27798 27799 -- Macro: MALLOC_ABI_ALIGNMENT 27800 Alignment, in bits, a C conformant malloc implementation has to 27801 provide. If not defined, the default value is `BITS_PER_WORD'. 27802 27803 -- Macro: ATTRIBUTE_ALIGNED_VALUE 27804 Alignment used by the `__attribute__ ((aligned))' construct. If 27805 not defined, the default value is `BIGGEST_ALIGNMENT'. 27806 27807 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 27808 If defined, the smallest alignment, in bits, that can be given to 27809 an object that can be referenced in one operation, without 27810 disturbing any nearby object. Normally, this is `BITS_PER_UNIT', 27811 but may be larger on machines that don't have byte or half-word 27812 store operations. 27813 27814 -- Macro: BIGGEST_FIELD_ALIGNMENT 27815 Biggest alignment that any structure or union field can require on 27816 this machine, in bits. If defined, this overrides 27817 `BIGGEST_ALIGNMENT' for structure and union fields only, unless 27818 the field alignment has been set by the `__attribute__ ((aligned 27819 (N)))' construct. 27820 27821 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 27822 An expression for the alignment of a structure field FIELD if the 27823 alignment computed in the usual way (including applying of 27824 `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the 27825 alignment) is COMPUTED. It overrides alignment only if the field 27826 alignment has not been set by the `__attribute__ ((aligned (N)))' 27827 construct. 27828 27829 -- Macro: MAX_STACK_ALIGNMENT 27830 Biggest stack alignment guaranteed by the backend. Use this macro 27831 to specify the maximum alignment of a variable on stack. 27832 27833 If not defined, the default value is `STACK_BOUNDARY'. 27834 27835 27836 -- Macro: MAX_OFILE_ALIGNMENT 27837 Biggest alignment supported by the object file format of this 27838 machine. Use this macro to limit the alignment which can be 27839 specified using the `__attribute__ ((aligned (N)))' construct. If 27840 not defined, the default value is `BIGGEST_ALIGNMENT'. 27841 27842 On systems that use ELF, the default (in `config/elfos.h') is the 27843 largest supported 32-bit ELF section alignment representable on a 27844 32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'. On 27845 32-bit ELF the largest supported section alignment in bits is 27846 `(0x80000000 * 8)', but this is not representable on 32-bit hosts. 27847 27848 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 27849 If defined, a C expression to compute the alignment for a variable 27850 in the static store. TYPE is the data type, and BASIC-ALIGN is 27851 the alignment that the object would ordinarily have. The value of 27852 this macro is used instead of that alignment to align the object. 27853 27854 If this macro is not defined, then BASIC-ALIGN is used. 27855 27856 One use of this macro is to increase alignment of medium-size data 27857 to make it all fit in fewer cache lines. Another is to cause 27858 character arrays to be word-aligned so that `strcpy' calls that 27859 copy constants to character arrays can be done inline. 27860 27861 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 27862 If defined, a C expression to compute the alignment given to a 27863 constant that is being placed in memory. CONSTANT is the constant 27864 and BASIC-ALIGN is the alignment that the object would ordinarily 27865 have. The value of this macro is used instead of that alignment to 27866 align the object. 27867 27868 If this macro is not defined, then BASIC-ALIGN is used. 27869 27870 The typical use of this macro is to increase alignment for string 27871 constants to be word aligned so that `strcpy' calls that copy 27872 constants can be done inline. 27873 27874 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 27875 If defined, a C expression to compute the alignment for a variable 27876 in the local store. TYPE is the data type, and BASIC-ALIGN is the 27877 alignment that the object would ordinarily have. The value of this 27878 macro is used instead of that alignment to align the object. 27879 27880 If this macro is not defined, then BASIC-ALIGN is used. 27881 27882 One use of this macro is to increase alignment of medium-size data 27883 to make it all fit in fewer cache lines. 27884 27885 If the value of this macro has a type, it should be an unsigned 27886 type. 27887 27888 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE) 27889 This hook can be used to define the alignment for a vector of type 27890 TYPE, in order to comply with a platform ABI. The default is to 27891 require natural alignment for vector types. The alignment 27892 returned by this hook must be a power-of-two multiple of the 27893 default alignment of the vector element type. 27894 27895 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 27896 If defined, a C expression to compute the alignment for stack slot. 27897 TYPE is the data type, MODE is the widest mode available, and 27898 BASIC-ALIGN is the alignment that the slot would ordinarily have. 27899 The value of this macro is used instead of that alignment to align 27900 the slot. 27901 27902 If this macro is not defined, then BASIC-ALIGN is used when TYPE 27903 is `NULL'. Otherwise, `LOCAL_ALIGNMENT' will be used. 27904 27905 This macro is to set alignment of stack slot to the maximum 27906 alignment of all possible modes which the slot may have. 27907 27908 If the value of this macro has a type, it should be an unsigned 27909 type. 27910 27911 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 27912 If defined, a C expression to compute the alignment for a local 27913 variable DECL. 27914 27915 If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE 27916 (DECL), DECL_ALIGN (DECL))' is used. 27917 27918 One use of this macro is to increase alignment of medium-size data 27919 to make it all fit in fewer cache lines. 27920 27921 If the value of this macro has a type, it should be an unsigned 27922 type. 27923 27924 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 27925 If defined, a C expression to compute the minimum required 27926 alignment for dynamic stack realignment purposes for EXP (a type 27927 or decl), MODE, assuming normal alignment ALIGN. 27928 27929 If this macro is not defined, then ALIGN will be used. 27930 27931 -- Macro: EMPTY_FIELD_BOUNDARY 27932 Alignment in bits to be given to a structure bit-field that 27933 follows an empty field such as `int : 0;'. 27934 27935 If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 27936 27937 -- Macro: STRUCTURE_SIZE_BOUNDARY 27938 Number of bits which any structure or union's size must be a 27939 multiple of. Each structure or union's size is rounded up to a 27940 multiple of this. 27941 27942 If you do not define this macro, the default is the same as 27943 `BITS_PER_UNIT'. 27944 27945 -- Macro: STRICT_ALIGNMENT 27946 Define this macro to be the value 1 if instructions will fail to 27947 work if given data not on the nominal alignment. If instructions 27948 will merely go slower in that case, define this macro as 0. 27949 27950 -- Macro: PCC_BITFIELD_TYPE_MATTERS 27951 Define this if you wish to imitate the way many other C compilers 27952 handle alignment of bit-fields and the structures that contain 27953 them. 27954 27955 The behavior is that the type written for a named bit-field (`int', 27956 `short', or other integer type) imposes an alignment for the entire 27957 structure, as if the structure really did contain an ordinary 27958 field of that type. In addition, the bit-field is placed within 27959 the structure so that it would fit within such a field, not 27960 crossing a boundary for it. 27961 27962 Thus, on most machines, a named bit-field whose type is written as 27963 `int' would not cross a four-byte boundary, and would force 27964 four-byte alignment for the whole structure. (The alignment used 27965 may not be four bytes; it is controlled by the other alignment 27966 parameters.) 27967 27968 An unnamed bit-field will not affect the alignment of the 27969 containing structure. 27970 27971 If the macro is defined, its definition should be a C expression; 27972 a nonzero value for the expression enables this behavior. 27973 27974 Note that if this macro is not defined, or its value is zero, some 27975 bit-fields may cross more than one alignment boundary. The 27976 compiler can support such references if there are `insv', `extv', 27977 and `extzv' insns that can directly reference memory. 27978 27979 The other known way of making bit-fields work is to define 27980 `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then 27981 every structure can be accessed with fullwords. 27982 27983 Unless the machine has bit-field instructions or you define 27984 `STRUCTURE_SIZE_BOUNDARY' that way, you must define 27985 `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 27986 27987 If your aim is to make GCC use the same conventions for laying out 27988 bit-fields as are used by another compiler, here is how to 27989 investigate what the other compiler does. Compile and run this 27990 program: 27991 27992 struct foo1 27993 { 27994 char x; 27995 char :0; 27996 char y; 27997 }; 27998 27999 struct foo2 28000 { 28001 char x; 28002 int :0; 28003 char y; 28004 }; 28005 28006 main () 28007 { 28008 printf ("Size of foo1 is %d\n", 28009 sizeof (struct foo1)); 28010 printf ("Size of foo2 is %d\n", 28011 sizeof (struct foo2)); 28012 exit (0); 28013 } 28014 28015 If this prints 2 and 5, then the compiler's behavior is what you 28016 would get from `PCC_BITFIELD_TYPE_MATTERS'. 28017 28018 -- Macro: BITFIELD_NBYTES_LIMITED 28019 Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 28020 to aligning a bit-field within the structure. 28021 28022 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 28023 When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 28024 whether unnamed bitfields affect the alignment of the containing 28025 structure. The hook should return true if the structure should 28026 inherit the alignment requirements of an unnamed bitfield's type. 28027 28028 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 28029 This target hook should return `true' if accesses to volatile 28030 bitfields should use the narrowest mode possible. It should 28031 return `false' if these accesses should use the bitfield container 28032 type. 28033 28034 The default is `!TARGET_STRICT_ALIGN'. 28035 28036 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD, 28037 enum machine_mode MODE) 28038 Return true if a structure, union or array containing FIELD should 28039 be accessed using `BLKMODE'. 28040 28041 If FIELD is the only field in the structure, MODE is its mode, 28042 otherwise MODE is VOIDmode. MODE is provided in the case where 28043 structures of one field would require the structure's mode to 28044 retain the field's mode. 28045 28046 Normally, this is not needed. 28047 28048 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 28049 Define this macro as an expression for the alignment of a type 28050 (given by TYPE as a tree node) if the alignment computed in the 28051 usual way is COMPUTED and the alignment explicitly specified was 28052 SPECIFIED. 28053 28054 The default is to use SPECIFIED if it is larger; otherwise, use 28055 the smaller of COMPUTED and `BIGGEST_ALIGNMENT' 28056 28057 -- Macro: MAX_FIXED_MODE_SIZE 28058 An integer expression for the size in bits of the largest integer 28059 machine mode that should actually be used. All integer machine 28060 modes of this size or smaller can be used for structures and 28061 unions with the appropriate sizes. If this macro is undefined, 28062 `GET_MODE_BITSIZE (DImode)' is assumed. 28063 28064 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 28065 If defined, an expression of type `enum machine_mode' that 28066 specifies the mode of the save area operand of a 28067 `save_stack_LEVEL' named pattern (*note Standard Names::). 28068 SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or 28069 `SAVE_NONLOCAL' and selects which of the three named patterns is 28070 having its mode specified. 28071 28072 You need not define this macro if it always returns `Pmode'. You 28073 would most commonly define this macro if the `save_stack_LEVEL' 28074 patterns need to support both a 32- and a 64-bit mode. 28075 28076 -- Macro: STACK_SIZE_MODE 28077 If defined, an expression of type `enum machine_mode' that 28078 specifies the mode of the size increment operand of an 28079 `allocate_stack' named pattern (*note Standard Names::). 28080 28081 You need not define this macro if it always returns `word_mode'. 28082 You would most commonly define this macro if the `allocate_stack' 28083 pattern needs to support both a 32- and a 64-bit mode. 28084 28085 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 28086 This target hook should return the mode to be used for the return 28087 value of compare instructions expanded to libgcc calls. If not 28088 defined `word_mode' is returned which is the right choice for a 28089 majority of targets. 28090 28091 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 28092 This target hook should return the mode to be used for the shift 28093 count operand of shift instructions expanded to libgcc calls. If 28094 not defined `word_mode' is returned which is the right choice for 28095 a majority of targets. 28096 28097 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void) 28098 Return machine mode to be used for `_Unwind_Word' type. The 28099 default is to use `word_mode'. 28100 28101 -- Macro: ROUND_TOWARDS_ZERO 28102 If defined, this macro should be true if the prevailing rounding 28103 mode is towards zero. 28104 28105 Defining this macro only affects the way `libgcc.a' emulates 28106 floating-point arithmetic. 28107 28108 Not defining this macro is equivalent to returning zero. 28109 28110 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE) 28111 This macro should return true if floats with SIZE bits do not have 28112 a NaN or infinity representation, but use the largest exponent for 28113 normal numbers instead. 28114 28115 Defining this macro only affects the way `libgcc.a' emulates 28116 floating-point arithmetic. 28117 28118 The default definition of this macro returns false for all sizes. 28119 28120 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 28121 RECORD_TYPE) 28122 This target hook returns `true' if bit-fields in the given 28123 RECORD_TYPE are to be laid out following the rules of Microsoft 28124 Visual C/C++, namely: (i) a bit-field won't share the same storage 28125 unit with the previous bit-field if their underlying types have 28126 different sizes, and the bit-field will be aligned to the highest 28127 alignment of the underlying types of itself and of the previous 28128 bit-field; (ii) a zero-sized bit-field will affect the alignment of 28129 the whole enclosing structure, even if it is unnamed; except that 28130 (iii) a zero-sized bit-field will be disregarded unless it follows 28131 another bit-field of nonzero size. If this hook returns `true', 28132 other macros that control bit-field layout are ignored. 28133 28134 When a bit-field is inserted into a packed record, the whole size 28135 of the underlying type is used by one or more same-size adjacent 28136 bit-fields (that is, if its long:3, 32 bits is used in the record, 28137 and any additional adjacent long bit-fields are packed into the 28138 same chunk of 32 bits. However, if the size changes, a new field 28139 of that size is allocated). In an unpacked record, this is the 28140 same as using alignment, but not equivalent when packing. 28141 28142 If both MS bit-fields and `__attribute__((packed))' are used, the 28143 latter will take precedence. If `__attribute__((packed))' is used 28144 on a single field when MS bit-fields are in use, it will take 28145 precedence for that field, but the alignment of the rest of the 28146 structure may affect its placement. 28147 28148 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 28149 Returns true if the target supports decimal floating point. 28150 28151 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 28152 Returns true if the target supports fixed-point arithmetic. 28153 28154 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 28155 This hook is called just before expansion into rtl, allowing the 28156 target to perform additional initializations or analysis before 28157 the expansion. For example, the rs6000 port uses it to allocate a 28158 scratch stack slot for use in copying SDmode values between memory 28159 and floating point registers whenever the function being expanded 28160 has any SDmode usage. 28161 28162 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 28163 This hook allows the backend to perform additional instantiations 28164 on rtl that are not actually in any insns yet, but will be later. 28165 28166 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 28167 If your target defines any fundamental types, or any types your 28168 target uses should be mangled differently from the default, define 28169 this hook to return the appropriate encoding for these types as 28170 part of a C++ mangled name. The TYPE argument is the tree 28171 structure representing the type to be mangled. The hook may be 28172 applied to trees which are not target-specific fundamental types; 28173 it should return `NULL' for all such types, as well as arguments 28174 it does not recognize. If the return value is not `NULL', it must 28175 point to a statically-allocated string constant. 28176 28177 Target-specific fundamental types might be new fundamental types or 28178 qualified versions of ordinary fundamental types. Encode new 28179 fundamental types as `u N NAME', where NAME is the name used for 28180 the type in source code, and N is the length of NAME in decimal. 28181 Encode qualified versions of ordinary types as `U N NAME CODE', 28182 where NAME is the name used for the type qualifier in source code, 28183 N is the length of NAME as above, and CODE is the code used to 28184 represent the unqualified version of this type. (See 28185 `write_builtin_type' in `cp/mangle.c' for the list of codes.) In 28186 both cases the spaces are for clarity; do not include any spaces 28187 in your string. 28188 28189 This hook is applied to types prior to typedef resolution. If the 28190 mangled name for a particular type depends only on that type's 28191 main variant, you can perform typedef resolution yourself using 28192 `TYPE_MAIN_VARIANT' before mangling. 28193 28194 The default version of this hook always returns `NULL', which is 28195 appropriate for a target that does not define any new fundamental 28196 types. 28197 28198 28199 File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 28200 28201 17.6 Layout of Source Language Data Types 28202 ========================================= 28203 28204 These macros define the sizes and other characteristics of the standard 28205 basic data types used in programs being compiled. Unlike the macros in 28206 the previous section, these apply to specific features of C and related 28207 languages, rather than to fundamental aspects of storage layout. 28208 28209 -- Macro: INT_TYPE_SIZE 28210 A C expression for the size in bits of the type `int' on the 28211 target machine. If you don't define this, the default is one word. 28212 28213 -- Macro: SHORT_TYPE_SIZE 28214 A C expression for the size in bits of the type `short' on the 28215 target machine. If you don't define this, the default is half a 28216 word. (If this would be less than one storage unit, it is rounded 28217 up to one unit.) 28218 28219 -- Macro: LONG_TYPE_SIZE 28220 A C expression for the size in bits of the type `long' on the 28221 target machine. If you don't define this, the default is one word. 28222 28223 -- Macro: ADA_LONG_TYPE_SIZE 28224 On some machines, the size used for the Ada equivalent of the type 28225 `long' by a native Ada compiler differs from that used by C. In 28226 that situation, define this macro to be a C expression to be used 28227 for the size of that type. If you don't define this, the default 28228 is the value of `LONG_TYPE_SIZE'. 28229 28230 -- Macro: LONG_LONG_TYPE_SIZE 28231 A C expression for the size in bits of the type `long long' on the 28232 target machine. If you don't define this, the default is two 28233 words. If you want to support GNU Ada on your machine, the value 28234 of this macro must be at least 64. 28235 28236 -- Macro: CHAR_TYPE_SIZE 28237 A C expression for the size in bits of the type `char' on the 28238 target machine. If you don't define this, the default is 28239 `BITS_PER_UNIT'. 28240 28241 -- Macro: BOOL_TYPE_SIZE 28242 A C expression for the size in bits of the C++ type `bool' and C99 28243 type `_Bool' on the target machine. If you don't define this, and 28244 you probably shouldn't, the default is `CHAR_TYPE_SIZE'. 28245 28246 -- Macro: FLOAT_TYPE_SIZE 28247 A C expression for the size in bits of the type `float' on the 28248 target machine. If you don't define this, the default is one word. 28249 28250 -- Macro: DOUBLE_TYPE_SIZE 28251 A C expression for the size in bits of the type `double' on the 28252 target machine. If you don't define this, the default is two 28253 words. 28254 28255 -- Macro: LONG_DOUBLE_TYPE_SIZE 28256 A C expression for the size in bits of the type `long double' on 28257 the target machine. If you don't define this, the default is two 28258 words. 28259 28260 -- Macro: SHORT_FRACT_TYPE_SIZE 28261 A C expression for the size in bits of the type `short _Fract' on 28262 the target machine. If you don't define this, the default is 28263 `BITS_PER_UNIT'. 28264 28265 -- Macro: FRACT_TYPE_SIZE 28266 A C expression for the size in bits of the type `_Fract' on the 28267 target machine. If you don't define this, the default is 28268 `BITS_PER_UNIT * 2'. 28269 28270 -- Macro: LONG_FRACT_TYPE_SIZE 28271 A C expression for the size in bits of the type `long _Fract' on 28272 the target machine. If you don't define this, the default is 28273 `BITS_PER_UNIT * 4'. 28274 28275 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 28276 A C expression for the size in bits of the type `long long _Fract' 28277 on the target machine. If you don't define this, the default is 28278 `BITS_PER_UNIT * 8'. 28279 28280 -- Macro: SHORT_ACCUM_TYPE_SIZE 28281 A C expression for the size in bits of the type `short _Accum' on 28282 the target machine. If you don't define this, the default is 28283 `BITS_PER_UNIT * 2'. 28284 28285 -- Macro: ACCUM_TYPE_SIZE 28286 A C expression for the size in bits of the type `_Accum' on the 28287 target machine. If you don't define this, the default is 28288 `BITS_PER_UNIT * 4'. 28289 28290 -- Macro: LONG_ACCUM_TYPE_SIZE 28291 A C expression for the size in bits of the type `long _Accum' on 28292 the target machine. If you don't define this, the default is 28293 `BITS_PER_UNIT * 8'. 28294 28295 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 28296 A C expression for the size in bits of the type `long long _Accum' 28297 on the target machine. If you don't define this, the default is 28298 `BITS_PER_UNIT * 16'. 28299 28300 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE 28301 Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if 28302 you want routines in `libgcc2.a' for a size other than 28303 `LONG_DOUBLE_TYPE_SIZE'. If you don't define this, the default is 28304 `LONG_DOUBLE_TYPE_SIZE'. 28305 28306 -- Macro: LIBGCC2_HAS_DF_MODE 28307 Define this macro if neither `DOUBLE_TYPE_SIZE' nor 28308 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode' 28309 routines in `libgcc2.a' anyway. If you don't define this and 28310 either `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 28311 then the default is 1, otherwise it is 0. 28312 28313 -- Macro: LIBGCC2_HAS_XF_MODE 28314 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 28315 `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway. If 28316 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80 28317 then the default is 1, otherwise it is 0. 28318 28319 -- Macro: LIBGCC2_HAS_TF_MODE 28320 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 28321 `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway. If 28322 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128 28323 then the default is 1, otherwise it is 0. 28324 28325 -- Macro: LIBGCC2_GNU_PREFIX 28326 This macro corresponds to the `TARGET_LIBFUNC_GNU_PREFIX' target 28327 hook and should be defined if that hook is overriden to be true. 28328 It causes function names in libgcc to be changed to use a `__gnu_' 28329 prefix for their name rather than the default `__'. A port which 28330 uses this macro should also arrange to use `t-gnu-prefix' in the 28331 libgcc `config.host'. 28332 28333 -- Macro: SF_SIZE 28334 -- Macro: DF_SIZE 28335 -- Macro: XF_SIZE 28336 -- Macro: TF_SIZE 28337 Define these macros to be the size in bits of the mantissa of 28338 `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults 28339 in `libgcc2.h' are inappropriate. By default, `FLT_MANT_DIG' is 28340 used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE', 28341 and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to 28342 whether `DOUBLE_TYPE_SIZE' or `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 28343 64. 28344 28345 -- Macro: TARGET_FLT_EVAL_METHOD 28346 A C expression for the value for `FLT_EVAL_METHOD' in `float.h', 28347 assuming, if applicable, that the floating-point control word is 28348 in its default state. If you do not define this macro the value of 28349 `FLT_EVAL_METHOD' will be zero. 28350 28351 -- Macro: WIDEST_HARDWARE_FP_SIZE 28352 A C expression for the size in bits of the widest floating-point 28353 format supported by the hardware. If you define this macro, you 28354 must specify a value less than or equal to the value of 28355 `LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 28356 value of `LONG_DOUBLE_TYPE_SIZE' is the default. 28357 28358 -- Macro: DEFAULT_SIGNED_CHAR 28359 An expression whose value is 1 or 0, according to whether the type 28360 `char' should be signed or unsigned by default. The user can 28361 always override this default with the options `-fsigned-char' and 28362 `-funsigned-char'. 28363 28364 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 28365 This target hook should return true if the compiler should give an 28366 `enum' type only as many bytes as it takes to represent the range 28367 of possible values of that type. It should return false if all 28368 `enum' types should be allocated like `int'. 28369 28370 The default is to return false. 28371 28372 -- Macro: SIZE_TYPE 28373 A C expression for a string describing the name of the data type 28374 to use for size values. The typedef name `size_t' is defined 28375 using the contents of the string. 28376 28377 The string can contain more than one keyword. If so, separate 28378 them with spaces, and write first any length keyword, then 28379 `unsigned' if appropriate, and finally `int'. The string must 28380 exactly match one of the data type names defined in the function 28381 `c_common_nodes_and_builtins' in the file `c-family/c-common.c'. 28382 You may not omit `int' or change the order--that would cause the 28383 compiler to crash on startup. 28384 28385 If you don't define this macro, the default is `"long unsigned 28386 int"'. 28387 28388 -- Macro: SIZETYPE 28389 GCC defines internal types (`sizetype', `ssizetype', `bitsizetype' 28390 and `sbitsizetype') for expressions dealing with size. This macro 28391 is a C expression for a string describing the name of the data 28392 type from which the precision of `sizetype' is extracted. 28393 28394 The string has the same restrictions as `SIZE_TYPE' string. 28395 28396 If you don't define this macro, the default is `SIZE_TYPE'. 28397 28398 -- Macro: PTRDIFF_TYPE 28399 A C expression for a string describing the name of the data type 28400 to use for the result of subtracting two pointers. The typedef 28401 name `ptrdiff_t' is defined using the contents of the string. See 28402 `SIZE_TYPE' above for more information. 28403 28404 If you don't define this macro, the default is `"long int"'. 28405 28406 -- Macro: WCHAR_TYPE 28407 A C expression for a string describing the name of the data type 28408 to use for wide characters. The typedef name `wchar_t' is defined 28409 using the contents of the string. See `SIZE_TYPE' above for more 28410 information. 28411 28412 If you don't define this macro, the default is `"int"'. 28413 28414 -- Macro: WCHAR_TYPE_SIZE 28415 A C expression for the size in bits of the data type for wide 28416 characters. This is used in `cpp', which cannot make use of 28417 `WCHAR_TYPE'. 28418 28419 -- Macro: WINT_TYPE 28420 A C expression for a string describing the name of the data type to 28421 use for wide characters passed to `printf' and returned from 28422 `getwc'. The typedef name `wint_t' is defined using the contents 28423 of the string. See `SIZE_TYPE' above for more information. 28424 28425 If you don't define this macro, the default is `"unsigned int"'. 28426 28427 -- Macro: INTMAX_TYPE 28428 A C expression for a string describing the name of the data type 28429 that can represent any value of any standard or extended signed 28430 integer type. The typedef name `intmax_t' is defined using the 28431 contents of the string. See `SIZE_TYPE' above for more 28432 information. 28433 28434 If you don't define this macro, the default is the first of 28435 `"int"', `"long int"', or `"long long int"' that has as much 28436 precision as `long long int'. 28437 28438 -- Macro: UINTMAX_TYPE 28439 A C expression for a string describing the name of the data type 28440 that can represent any value of any standard or extended unsigned 28441 integer type. The typedef name `uintmax_t' is defined using the 28442 contents of the string. See `SIZE_TYPE' above for more 28443 information. 28444 28445 If you don't define this macro, the default is the first of 28446 `"unsigned int"', `"long unsigned int"', or `"long long unsigned 28447 int"' that has as much precision as `long long unsigned int'. 28448 28449 -- Macro: SIG_ATOMIC_TYPE 28450 -- Macro: INT8_TYPE 28451 -- Macro: INT16_TYPE 28452 -- Macro: INT32_TYPE 28453 -- Macro: INT64_TYPE 28454 -- Macro: UINT8_TYPE 28455 -- Macro: UINT16_TYPE 28456 -- Macro: UINT32_TYPE 28457 -- Macro: UINT64_TYPE 28458 -- Macro: INT_LEAST8_TYPE 28459 -- Macro: INT_LEAST16_TYPE 28460 -- Macro: INT_LEAST32_TYPE 28461 -- Macro: INT_LEAST64_TYPE 28462 -- Macro: UINT_LEAST8_TYPE 28463 -- Macro: UINT_LEAST16_TYPE 28464 -- Macro: UINT_LEAST32_TYPE 28465 -- Macro: UINT_LEAST64_TYPE 28466 -- Macro: INT_FAST8_TYPE 28467 -- Macro: INT_FAST16_TYPE 28468 -- Macro: INT_FAST32_TYPE 28469 -- Macro: INT_FAST64_TYPE 28470 -- Macro: UINT_FAST8_TYPE 28471 -- Macro: UINT_FAST16_TYPE 28472 -- Macro: UINT_FAST32_TYPE 28473 -- Macro: UINT_FAST64_TYPE 28474 -- Macro: INTPTR_TYPE 28475 -- Macro: UINTPTR_TYPE 28476 C expressions for the standard types `sig_atomic_t', `int8_t', 28477 `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t', 28478 `uint32_t', `uint64_t', `int_least8_t', `int_least16_t', 28479 `int_least32_t', `int_least64_t', `uint_least8_t', 28480 `uint_least16_t', `uint_least32_t', `uint_least64_t', 28481 `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t', 28482 `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t', 28483 `intptr_t', and `uintptr_t'. See `SIZE_TYPE' above for more 28484 information. 28485 28486 If any of these macros evaluates to a null pointer, the 28487 corresponding type is not supported; if GCC is configured to 28488 provide `<stdint.h>' in such a case, the header provided may not 28489 conform to C99, depending on the type in question. The defaults 28490 for all of these macros are null pointers. 28491 28492 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 28493 The C++ compiler represents a pointer-to-member-function with a 28494 struct that looks like: 28495 28496 struct { 28497 union { 28498 void (*fn)(); 28499 ptrdiff_t vtable_index; 28500 }; 28501 ptrdiff_t delta; 28502 }; 28503 28504 The C++ compiler must use one bit to indicate whether the function 28505 that will be called through a pointer-to-member-function is 28506 virtual. Normally, we assume that the low-order bit of a function 28507 pointer must always be zero. Then, by ensuring that the 28508 vtable_index is odd, we can distinguish which variant of the union 28509 is in use. But, on some platforms function pointers can be odd, 28510 and so this doesn't work. In that case, we use the low-order bit 28511 of the `delta' field, and shift the remainder of the `delta' field 28512 to the left. 28513 28514 GCC will automatically make the right selection about where to 28515 store this bit using the `FUNCTION_BOUNDARY' setting for your 28516 platform. However, some platforms such as ARM/Thumb have 28517 `FUNCTION_BOUNDARY' set such that functions always start at even 28518 addresses, but the lowest bit of pointers to functions indicate 28519 whether the function at that address is in ARM or Thumb mode. If 28520 this is the case of your architecture, you should define this 28521 macro to `ptrmemfunc_vbit_in_delta'. 28522 28523 In general, you should not have to define this macro. On 28524 architectures in which function addresses are always even, 28525 according to `FUNCTION_BOUNDARY', GCC will automatically define 28526 this macro to `ptrmemfunc_vbit_in_pfn'. 28527 28528 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 28529 Normally, the C++ compiler uses function pointers in vtables. This 28530 macro allows the target to change to use "function descriptors" 28531 instead. Function descriptors are found on targets for whom a 28532 function pointer is actually a small data structure. Normally the 28533 data structure consists of the actual code address plus a data 28534 pointer to which the function's data is relative. 28535 28536 If vtables are used, the value of this macro should be the number 28537 of words that the function descriptor occupies. 28538 28539 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 28540 By default, the vtable entries are void pointers, the so the 28541 alignment is the same as pointer alignment. The value of this 28542 macro specifies the alignment of the vtable entry in bits. It 28543 should be defined only when special alignment is necessary. */ 28544 28545 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 28546 There are a few non-descriptor entries in the vtable at offsets 28547 below zero. If these entries must be padded (say, to preserve the 28548 alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to 28549 the number of words in each data entry. 28550 28551 28552 File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 28553 28554 17.7 Register Usage 28555 =================== 28556 28557 This section explains how to describe what registers the target machine 28558 has, and how (in general) they can be used. 28559 28560 The description of which registers a specific instruction can use is 28561 done with register classes; see *note Register Classes::. For 28562 information on using registers to access a stack frame, see *note Frame 28563 Registers::. For passing values in registers, see *note Register 28564 Arguments::. For returning values in registers, see *note Scalar 28565 Return::. 28566 28567 * Menu: 28568 28569 * Register Basics:: Number and kinds of registers. 28570 * Allocation Order:: Order in which registers are allocated. 28571 * Values in Registers:: What kinds of values each reg can hold. 28572 * Leaf Functions:: Renumbering registers for leaf functions. 28573 * Stack Registers:: Handling a register stack such as 80387. 28574 28575 28576 File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 28577 28578 17.7.1 Basic Characteristics of Registers 28579 ----------------------------------------- 28580 28581 Registers have various characteristics. 28582 28583 -- Macro: FIRST_PSEUDO_REGISTER 28584 Number of hardware registers known to the compiler. They receive 28585 numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first 28586 pseudo register's number really is assigned the number 28587 `FIRST_PSEUDO_REGISTER'. 28588 28589 -- Macro: FIXED_REGISTERS 28590 An initializer that says which registers are used for fixed 28591 purposes all throughout the compiled code and are therefore not 28592 available for general allocation. These would include the stack 28593 pointer, the frame pointer (except on machines where that can be 28594 used as a general register when no frame pointer is needed), the 28595 program counter on machines where that is considered one of the 28596 addressable registers, and any other numbered register with a 28597 standard use. 28598 28599 This information is expressed as a sequence of numbers, separated 28600 by commas and surrounded by braces. The Nth number is 1 if 28601 register N is fixed, 0 otherwise. 28602 28603 The table initialized from this macro, and the table initialized by 28604 the following one, may be overridden at run time either 28605 automatically, by the actions of the macro 28606 `CONDITIONAL_REGISTER_USAGE', or by the user with the command 28607 options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'. 28608 28609 -- Macro: CALL_USED_REGISTERS 28610 Like `FIXED_REGISTERS' but has 1 for each register that is 28611 clobbered (in general) by function calls as well as for fixed 28612 registers. This macro therefore identifies the registers that are 28613 not available for general allocation of values that must live 28614 across function calls. 28615 28616 If a register has 0 in `CALL_USED_REGISTERS', the compiler 28617 automatically saves it on function entry and restores it on 28618 function exit, if the register is used within the function. 28619 28620 -- Macro: CALL_REALLY_USED_REGISTERS 28621 Like `CALL_USED_REGISTERS' except this macro doesn't require that 28622 the entire set of `FIXED_REGISTERS' be included. 28623 (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS'). 28624 This macro is optional. If not specified, it defaults to the value 28625 of `CALL_USED_REGISTERS'. 28626 28627 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 28628 A C expression that is nonzero if it is not permissible to store a 28629 value of mode MODE in hard register number REGNO across a call 28630 without some part of it being clobbered. For most machines this 28631 macro need not be defined. It is only required for machines that 28632 do not preserve the entire contents of a register across a call. 28633 28634 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void) 28635 This hook may conditionally modify five variables `fixed_regs', 28636 `call_used_regs', `global_regs', `reg_names', and 28637 `reg_class_contents', to take into account any dependence of these 28638 register sets on target flags. The first three of these are of 28639 type `char []' (interpreted as Boolean vectors). `global_regs' is 28640 a `const char *[]', and `reg_class_contents' is a `HARD_REG_SET'. 28641 Before the macro is called, `fixed_regs', `call_used_regs', 28642 `reg_class_contents', and `reg_names' have been initialized from 28643 `FIXED_REGISTERS', `CALL_USED_REGISTERS', `REG_CLASS_CONTENTS', 28644 and `REGISTER_NAMES', respectively. `global_regs' has been 28645 cleared, and any `-ffixed-REG', `-fcall-used-REG' and 28646 `-fcall-saved-REG' command options have been applied. 28647 28648 If the usage of an entire class of registers depends on the target 28649 flags, you may indicate this to GCC by using this macro to modify 28650 `fixed_regs' and `call_used_regs' to 1 for each of the registers 28651 in the classes which should not be used by GCC. Also define the 28652 macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to 28653 return `NO_REGS' if it is called with a letter for a class that 28654 shouldn't be used. 28655 28656 (However, if this class is not included in `GENERAL_REGS' and all 28657 of the insn patterns whose constraints permit this class are 28658 controlled by target switches, then GCC will automatically avoid 28659 using these registers when the target switches are opposed to 28660 them.) 28661 28662 -- Macro: INCOMING_REGNO (OUT) 28663 Define this macro if the target machine has register windows. 28664 This C expression returns the register number as seen by the 28665 called function corresponding to the register number OUT as seen 28666 by the calling function. Return OUT if register number OUT is not 28667 an outbound register. 28668 28669 -- Macro: OUTGOING_REGNO (IN) 28670 Define this macro if the target machine has register windows. 28671 This C expression returns the register number as seen by the 28672 calling function corresponding to the register number IN as seen 28673 by the called function. Return IN if register number IN is not an 28674 inbound register. 28675 28676 -- Macro: LOCAL_REGNO (REGNO) 28677 Define this macro if the target machine has register windows. 28678 This C expression returns true if the register is call-saved but 28679 is in the register window. Unlike most call-saved registers, such 28680 registers need not be explicitly restored on function exit or 28681 during non-local gotos. 28682 28683 -- Macro: PC_REGNUM 28684 If the program counter has a register number, define this as that 28685 register number. Otherwise, do not define it. 28686 28687 28688 File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 28689 28690 17.7.2 Order of Allocation of Registers 28691 --------------------------------------- 28692 28693 Registers are allocated in order. 28694 28695 -- Macro: REG_ALLOC_ORDER 28696 If defined, an initializer for a vector of integers, containing the 28697 numbers of hard registers in the order in which GCC should prefer 28698 to use them (from most preferred to least). 28699 28700 If this macro is not defined, registers are used lowest numbered 28701 first (all else being equal). 28702 28703 One use of this macro is on machines where the highest numbered 28704 registers must always be saved and the save-multiple-registers 28705 instruction supports only sequences of consecutive registers. On 28706 such machines, define `REG_ALLOC_ORDER' to be an initializer that 28707 lists the highest numbered allocable register first. 28708 28709 -- Macro: ADJUST_REG_ALLOC_ORDER 28710 A C statement (sans semicolon) to choose the order in which to 28711 allocate hard registers for pseudo-registers local to a basic 28712 block. 28713 28714 Store the desired register order in the array `reg_alloc_order'. 28715 Element 0 should be the register to allocate first; element 1, the 28716 next register; and so on. 28717 28718 The macro body should not assume anything about the contents of 28719 `reg_alloc_order' before execution of the macro. 28720 28721 On most machines, it is not necessary to define this macro. 28722 28723 -- Macro: HONOR_REG_ALLOC_ORDER 28724 Normally, IRA tries to estimate the costs for saving a register in 28725 the prologue and restoring it in the epilogue. This discourages 28726 it from using call-saved registers. If a machine wants to ensure 28727 that IRA allocates registers in the order given by REG_ALLOC_ORDER 28728 even if some call-saved registers appear earlier than call-used 28729 ones, this macro should be defined. 28730 28731 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 28732 In some case register allocation order is not enough for the 28733 Integrated Register Allocator (IRA) to generate a good code. If 28734 this macro is defined, it should return a floating point value 28735 based on REGNO. The cost of using REGNO for a pseudo will be 28736 increased by approximately the pseudo's usage frequency times the 28737 value returned by this macro. Not defining this macro is 28738 equivalent to having it always return `0.0'. 28739 28740 On most machines, it is not necessary to define this macro. 28741 28742 28743 File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 28744 28745 17.7.3 How Values Fit in Registers 28746 ---------------------------------- 28747 28748 This section discusses the macros that describe which kinds of values 28749 (specifically, which machine modes) each register can hold, and how many 28750 consecutive registers are needed for a given mode. 28751 28752 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 28753 A C expression for the number of consecutive hard registers, 28754 starting at register number REGNO, required to hold a value of mode 28755 MODE. This macro must never return zero, even if a register 28756 cannot hold the requested mode - indicate that with 28757 HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead. 28758 28759 On a machine where all registers are exactly one word, a suitable 28760 definition of this macro is 28761 28762 #define HARD_REGNO_NREGS(REGNO, MODE) \ 28763 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 28764 / UNITS_PER_WORD) 28765 28766 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 28767 A C expression that is nonzero if a value of mode MODE, stored in 28768 memory, ends with padding that causes it to take up more space than 28769 in registers starting at register number REGNO (as determined by 28770 multiplying GCC's notion of the size of the register when 28771 containing this mode by the number of registers returned by 28772 `HARD_REGNO_NREGS'). By default this is zero. 28773 28774 For example, if a floating-point value is stored in three 32-bit 28775 registers but takes up 128 bits in memory, then this would be 28776 nonzero. 28777 28778 This macros only needs to be defined if there are cases where 28779 `subreg_get_info' would otherwise wrongly determine that a 28780 `subreg' can be represented by an offset to the register number, 28781 when in fact such a `subreg' would contain some of the padding not 28782 stored in registers and so not be representable. 28783 28784 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 28785 For values of REGNO and MODE for which 28786 `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 28787 returning the greater number of registers required to hold the 28788 value including any padding. In the example above, the value 28789 would be four. 28790 28791 -- Macro: REGMODE_NATURAL_SIZE (MODE) 28792 Define this macro if the natural size of registers that hold values 28793 of mode MODE is not the word size. It is a C expression that 28794 should give the natural size in bytes for the specified mode. It 28795 is used by the register allocator to try to optimize its results. 28796 This happens for example on SPARC 64-bit where the natural size of 28797 floating-point registers is still 32-bit. 28798 28799 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 28800 A C expression that is nonzero if it is permissible to store a 28801 value of mode MODE in hard register number REGNO (or in several 28802 registers starting with that one). For a machine where all 28803 registers are equivalent, a suitable definition is 28804 28805 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 28806 28807 You need not include code to check for the numbers of fixed 28808 registers, because the allocation mechanism considers them to be 28809 always occupied. 28810 28811 On some machines, double-precision values must be kept in even/odd 28812 register pairs. You can implement that by defining this macro to 28813 reject odd register numbers for such modes. 28814 28815 The minimum requirement for a mode to be OK in a register is that 28816 the `movMODE' instruction pattern support moves between the 28817 register and other hard register in the same class and that moving 28818 a value into the register and back out not alter it. 28819 28820 Since the same instruction used to move `word_mode' will work for 28821 all narrower integer modes, it is not necessary on any machine for 28822 `HARD_REGNO_MODE_OK' to distinguish between these modes, provided 28823 you define patterns `movhi', etc., to take advantage of this. This 28824 is useful because of the interaction between `HARD_REGNO_MODE_OK' 28825 and `MODES_TIEABLE_P'; it is very desirable for all integer modes 28826 to be tieable. 28827 28828 Many machines have special registers for floating point arithmetic. 28829 Often people assume that floating point machine modes are allowed 28830 only in floating point registers. This is not true. Any 28831 registers that can hold integers can safely _hold_ a floating 28832 point machine mode, whether or not floating arithmetic can be done 28833 on it in those registers. Integer move instructions can be used 28834 to move the values. 28835 28836 On some machines, though, the converse is true: fixed-point machine 28837 modes may not go in floating registers. This is true if the 28838 floating registers normalize any value stored in them, because 28839 storing a non-floating value there would garble it. In this case, 28840 `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 28841 floating registers. But if the floating registers do not 28842 automatically normalize, if you can store any bit pattern in one 28843 and retrieve it unchanged without a trap, then any machine mode 28844 may go in a floating register, so you can define this macro to say 28845 so. 28846 28847 The primary significance of special floating registers is rather 28848 that they are the registers acceptable in floating point arithmetic 28849 instructions. However, this is of no concern to 28850 `HARD_REGNO_MODE_OK'. You handle it by writing the proper 28851 constraints for those instructions. 28852 28853 On some machines, the floating registers are especially slow to 28854 access, so that it is better to store a value in a stack frame 28855 than in such a register if floating point arithmetic is not being 28856 done. As long as the floating registers are not in class 28857 `GENERAL_REGS', they will not be used unless some pattern's 28858 constraint asks for one. 28859 28860 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 28861 A C expression that is nonzero if it is OK to rename a hard 28862 register FROM to another hard register TO. 28863 28864 One common use of this macro is to prevent renaming of a register 28865 to another register that is not saved by a prologue in an interrupt 28866 handler. 28867 28868 The default is always nonzero. 28869 28870 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 28871 A C expression that is nonzero if a value of mode MODE1 is 28872 accessible in mode MODE2 without copying. 28873 28874 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, 28875 MODE2)' are always the same for any R, then `MODES_TIEABLE_P 28876 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 28877 should define this macro to return zero unless some other 28878 mechanism ensures the accessibility of the value in a narrower 28879 mode. 28880 28881 You should define this macro to return nonzero in as many cases as 28882 possible since doing so will allow GCC to perform better register 28883 allocation. 28884 28885 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 28886 This target hook should return `true' if it is OK to use a hard 28887 register REGNO as scratch reg in peephole2. 28888 28889 One common use of this macro is to prevent using of a register that 28890 is not saved by a prologue in an interrupt handler. 28891 28892 The default version of this hook always returns `true'. 28893 28894 -- Macro: AVOID_CCMODE_COPIES 28895 Define this macro if the compiler should avoid copies to/from 28896 `CCmode' registers. You should only define this macro if support 28897 for copying to/from `CCmode' is incomplete. 28898 28899 28900 File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 28901 28902 17.7.4 Handling Leaf Functions 28903 ------------------------------ 28904 28905 On some machines, a leaf function (i.e., one which makes no calls) can 28906 run more efficiently if it does not make its own register window. 28907 Often this means it is required to receive its arguments in the 28908 registers where they are passed by the caller, instead of the registers 28909 where they would normally arrive. 28910 28911 The special treatment for leaf functions generally applies only when 28912 other conditions are met; for example, often they may use only those 28913 registers for its own variables and temporaries. We use the term "leaf 28914 function" to mean a function that is suitable for this special 28915 handling, so that functions with no calls are not necessarily "leaf 28916 functions". 28917 28918 GCC assigns register numbers before it knows whether the function is 28919 suitable for leaf function treatment. So it needs to renumber the 28920 registers in order to output a leaf function. The following macros 28921 accomplish this. 28922 28923 -- Macro: LEAF_REGISTERS 28924 Name of a char vector, indexed by hard register number, which 28925 contains 1 for a register that is allowable in a candidate for leaf 28926 function treatment. 28927 28928 If leaf function treatment involves renumbering the registers, 28929 then the registers marked here should be the ones before 28930 renumbering--those that GCC would ordinarily allocate. The 28931 registers which will actually be used in the assembler code, after 28932 renumbering, should not be marked with 1 in this vector. 28933 28934 Define this macro only if the target machine offers a way to 28935 optimize the treatment of leaf functions. 28936 28937 -- Macro: LEAF_REG_REMAP (REGNO) 28938 A C expression whose value is the register number to which REGNO 28939 should be renumbered, when a function is treated as a leaf 28940 function. 28941 28942 If REGNO is a register number which should not appear in a leaf 28943 function before renumbering, then the expression should yield -1, 28944 which will cause the compiler to abort. 28945 28946 Define this macro only if the target machine offers a way to 28947 optimize the treatment of leaf functions, and registers need to be 28948 renumbered to do this. 28949 28950 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must 28951 usually treat leaf functions specially. They can test the C variable 28952 `current_function_is_leaf' which is nonzero for leaf functions. 28953 `current_function_is_leaf' is set prior to local register allocation 28954 and is valid for the remaining compiler passes. They can also test the 28955 C variable `current_function_uses_only_leaf_regs' which is nonzero for 28956 leaf functions which only use leaf registers. 28957 `current_function_uses_only_leaf_regs' is valid after all passes that 28958 modify the instructions have been run and is only useful if 28959 `LEAF_REGISTERS' is defined. 28960 28961 28962 File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 28963 28964 17.7.5 Registers That Form a Stack 28965 ---------------------------------- 28966 28967 There are special features to handle computers where some of the 28968 "registers" form a stack. Stack registers are normally written by 28969 pushing onto the stack, and are numbered relative to the top of the 28970 stack. 28971 28972 Currently, GCC can only handle one group of stack-like registers, and 28973 they must be consecutively numbered. Furthermore, the existing support 28974 for stack-like registers is specific to the 80387 floating point 28975 coprocessor. If you have a new architecture that uses stack-like 28976 registers, you will need to do substantial work on `reg-stack.c' and 28977 write your machine description to cooperate with it, as well as 28978 defining these macros. 28979 28980 -- Macro: STACK_REGS 28981 Define this if the machine has any stack-like registers. 28982 28983 -- Macro: STACK_REG_COVER_CLASS 28984 This is a cover class containing the stack registers. Define this 28985 if the machine has any stack-like registers. 28986 28987 -- Macro: FIRST_STACK_REG 28988 The number of the first stack-like register. This one is the top 28989 of the stack. 28990 28991 -- Macro: LAST_STACK_REG 28992 The number of the last stack-like register. This one is the 28993 bottom of the stack. 28994 28995 28996 File: gccint.info, Node: Register Classes, Next: Old Constraints, Prev: Registers, Up: Target Macros 28997 28998 17.8 Register Classes 28999 ===================== 29000 29001 On many machines, the numbered registers are not all equivalent. For 29002 example, certain registers may not be allowed for indexed addressing; 29003 certain registers may not be allowed in some instructions. These 29004 machine restrictions are described to the compiler using "register 29005 classes". 29006 29007 You define a number of register classes, giving each one a name and 29008 saying which of the registers belong to it. Then you can specify 29009 register classes that are allowed as operands to particular instruction 29010 patterns. 29011 29012 In general, each register will belong to several classes. In fact, one 29013 class must be named `ALL_REGS' and contain all the registers. Another 29014 class must be named `NO_REGS' and contain no registers. Often the 29015 union of two classes will be another class; however, this is not 29016 required. 29017 29018 One of the classes must be named `GENERAL_REGS'. There is nothing 29019 terribly special about the name, but the operand constraint letters `r' 29020 and `g' specify this class. If `GENERAL_REGS' is the same as 29021 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'. 29022 29023 Order the classes so that if class X is contained in class Y then X 29024 has a lower class number than Y. 29025 29026 The way classes other than `GENERAL_REGS' are specified in operand 29027 constraints is through machine-dependent operand constraint letters. 29028 You can define such letters to correspond to various classes, then use 29029 them in operand constraints. 29030 29031 You must define the narrowest register classes for allocatable 29032 registers, so that each class either has no subclasses, or that for 29033 some mode, the move cost between registers within the class is cheaper 29034 than moving a register in the class to or from memory (*note Costs::). 29035 29036 You should define a class for the union of two classes whenever some 29037 instruction allows both classes. For example, if an instruction allows 29038 either a floating point (coprocessor) register or a general register 29039 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS' 29040 which includes both of them. Otherwise you will get suboptimal code, 29041 or even internal compiler errors when reload cannot find a register in 29042 the class computed via `reg_class_subunion'. 29043 29044 You must also specify certain redundant information about the register 29045 classes: for each class, which classes contain it and which ones are 29046 contained in it; for each pair of classes, the largest class contained 29047 in their union. 29048 29049 When a value occupying several consecutive registers is expected in a 29050 certain class, all the registers used must belong to that class. 29051 Therefore, register classes cannot be used to enforce a requirement for 29052 a register pair to start with an even-numbered register. The way to 29053 specify this requirement is with `HARD_REGNO_MODE_OK'. 29054 29055 Register classes used for input-operands of bitwise-and or shift 29056 instructions have a special requirement: each such class must have, for 29057 each fixed-point machine mode, a subclass whose registers can transfer 29058 that mode to or from memory. For example, on some machines, the 29059 operations for single-byte values (`QImode') are limited to certain 29060 registers. When this is so, each register class that is used in a 29061 bitwise-and or shift instruction must have a subclass consisting of 29062 registers from which single-byte values can be loaded or stored. This 29063 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to 29064 return. 29065 29066 -- Data type: enum reg_class 29067 An enumerated type that must be defined with all the register 29068 class names as enumerated values. `NO_REGS' must be first. 29069 `ALL_REGS' must be the last register class, followed by one more 29070 enumerated value, `LIM_REG_CLASSES', which is not a register class 29071 but rather tells how many classes there are. 29072 29073 Each register class has a number, which is the value of casting 29074 the class name to type `int'. The number serves as an index in 29075 many of the tables described below. 29076 29077 -- Macro: N_REG_CLASSES 29078 The number of distinct register classes, defined as follows: 29079 29080 #define N_REG_CLASSES (int) LIM_REG_CLASSES 29081 29082 -- Macro: REG_CLASS_NAMES 29083 An initializer containing the names of the register classes as C 29084 string constants. These names are used in writing some of the 29085 debugging dumps. 29086 29087 -- Macro: REG_CLASS_CONTENTS 29088 An initializer containing the contents of the register classes, as 29089 integers which are bit masks. The Nth integer specifies the 29090 contents of class N. The way the integer MASK is interpreted is 29091 that register R is in the class if `MASK & (1 << R)' is 1. 29092 29093 When the machine has more than 32 registers, an integer does not 29094 suffice. Then the integers are replaced by sub-initializers, 29095 braced groupings containing several integers. Each 29096 sub-initializer must be suitable as an initializer for the type 29097 `HARD_REG_SET' which is defined in `hard-reg-set.h'. In this 29098 situation, the first integer in each sub-initializer corresponds to 29099 registers 0 through 31, the second integer to registers 32 through 29100 63, and so on. 29101 29102 -- Macro: REGNO_REG_CLASS (REGNO) 29103 A C expression whose value is a register class containing hard 29104 register REGNO. In general there is more than one such class; 29105 choose a class which is "minimal", meaning that no smaller class 29106 also contains the register. 29107 29108 -- Macro: BASE_REG_CLASS 29109 A macro whose definition is the name of the class to which a valid 29110 base register must belong. A base register is one used in an 29111 address which is the register value plus a displacement. 29112 29113 -- Macro: MODE_BASE_REG_CLASS (MODE) 29114 This is a variation of the `BASE_REG_CLASS' macro which allows the 29115 selection of a base register in a mode dependent manner. If MODE 29116 is VOIDmode then it should return the same value as 29117 `BASE_REG_CLASS'. 29118 29119 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 29120 A C expression whose value is the register class to which a valid 29121 base register must belong in order to be used in a base plus index 29122 register address. You should define this macro if base plus index 29123 addresses have different requirements than other base register 29124 uses. 29125 29126 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE, 29127 INDEX_CODE) 29128 A C expression whose value is the register class to which a valid 29129 base register for a memory reference in mode MODE to address space 29130 ADDRESS_SPACE must belong. OUTER_CODE and INDEX_CODE define the 29131 context in which the base register occurs. OUTER_CODE is the code 29132 of the immediately enclosing expression (`MEM' for the top level 29133 of an address, `ADDRESS' for something that occurs in an 29134 `address_operand'). INDEX_CODE is the code of the corresponding 29135 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise. 29136 29137 -- Macro: INDEX_REG_CLASS 29138 A macro whose definition is the name of the class to which a valid 29139 index register must belong. An index register is one used in an 29140 address where its value is either multiplied by a scale factor or 29141 added to another register (as well as added to a displacement). 29142 29143 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 29144 A C expression which is nonzero if register number NUM is suitable 29145 for use as a base register in operand addresses. 29146 29147 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 29148 A C expression that is just like `REGNO_OK_FOR_BASE_P', except that 29149 that expression may examine the mode of the memory reference in 29150 MODE. You should define this macro if the mode of the memory 29151 reference affects whether a register may be used as a base 29152 register. If you define this macro, the compiler will use it 29153 instead of `REGNO_OK_FOR_BASE_P'. The mode may be `VOIDmode' for 29154 addresses that appear outside a `MEM', i.e., as an 29155 `address_operand'. 29156 29157 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 29158 A C expression which is nonzero if register number NUM is suitable 29159 for use as a base register in base plus index operand addresses, 29160 accessing memory in mode MODE. It may be either a suitable hard 29161 register or a pseudo register that has been allocated such a hard 29162 register. You should define this macro if base plus index 29163 addresses have different requirements than other base register 29164 uses. 29165 29166 Use of this macro is deprecated; please use the more general 29167 `REGNO_MODE_CODE_OK_FOR_BASE_P'. 29168 29169 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE, 29170 OUTER_CODE, INDEX_CODE) 29171 A C expression which is nonzero if register number NUM is suitable 29172 for use as a base register in operand addresses, accessing memory 29173 in mode MODE in address space ADDRESS_SPACE. This is similar to 29174 `REGNO_MODE_OK_FOR_BASE_P', except that that expression may 29175 examine the context in which the register appears in the memory 29176 reference. OUTER_CODE is the code of the immediately enclosing 29177 expression (`MEM' if at the top level of the address, `ADDRESS' 29178 for something that occurs in an `address_operand'). INDEX_CODE is 29179 the code of the corresponding index expression if OUTER_CODE is 29180 `PLUS'; `SCRATCH' otherwise. The mode may be `VOIDmode' for 29181 addresses that appear outside a `MEM', i.e., as an 29182 `address_operand'. 29183 29184 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 29185 A C expression which is nonzero if register number NUM is suitable 29186 for use as an index register in operand addresses. It may be 29187 either a suitable hard register or a pseudo register that has been 29188 allocated such a hard register. 29189 29190 The difference between an index register and a base register is 29191 that the index register may be scaled. If an address involves the 29192 sum of two registers, neither one of them scaled, then either one 29193 may be labeled the "base" and the other the "index"; but whichever 29194 labeling is used must fit the machine's constraints of which 29195 registers may serve in each capacity. The compiler will try both 29196 labelings, looking for one that is valid, and will reload one or 29197 both registers only if neither labeling works. 29198 29199 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t 29200 RCLASS) 29201 A target hook that places additional preference on the register 29202 class to use when it is necessary to rename a register in class 29203 RCLASS to another class, or perhaps NO_REGS, if no preferred 29204 register class is found or hook `preferred_rename_class' is not 29205 implemented. Sometimes returning a more restrictive class makes 29206 better code. For example, on ARM, thumb-2 instructions using 29207 `LO_REGS' may be smaller than instructions using `GENERIC_REGS'. 29208 By returning `LO_REGS' from `preferred_rename_class', code size 29209 can be reduced. 29210 29211 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X, 29212 reg_class_t RCLASS) 29213 A target hook that places additional restrictions on the register 29214 class to use when it is necessary to copy value X into a register 29215 in class RCLASS. The value is a register class; perhaps RCLASS, 29216 or perhaps another, smaller class. 29217 29218 The default version of this hook always returns value of `rclass' 29219 argument. 29220 29221 Sometimes returning a more restrictive class makes better code. 29222 For example, on the 68000, when X is an integer constant that is 29223 in range for a `moveq' instruction, the value of this macro is 29224 always `DATA_REGS' as long as RCLASS includes the data registers. 29225 Requiring a data register guarantees that a `moveq' will be used. 29226 29227 One case where `TARGET_PREFERRED_RELOAD_CLASS' must not return 29228 RCLASS is if X is a legitimate constant which cannot be loaded 29229 into some register class. By returning `NO_REGS' you can force X 29230 into a memory location. For example, rs6000 can load immediate 29231 values into general-purpose registers, but does not have an 29232 instruction for loading an immediate value into a floating-point 29233 register, so `TARGET_PREFERRED_RELOAD_CLASS' returns `NO_REGS' when 29234 X is a floating-point constant. If the constant can't be loaded 29235 into any kind of register, code generation will be better if 29236 `TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 29237 instead of using `TARGET_PREFERRED_RELOAD_CLASS'. 29238 29239 If an insn has pseudos in it after register allocation, reload 29240 will go through the alternatives and call repeatedly 29241 `TARGET_PREFERRED_RELOAD_CLASS' to find the best one. Returning 29242 `NO_REGS', in this case, makes reload add a `!' in front of the 29243 constraint: the x86 back-end uses this feature to discourage usage 29244 of 387 registers when math is done in the SSE registers (and vice 29245 versa). 29246 29247 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 29248 A C expression that places additional restrictions on the register 29249 class to use when it is necessary to copy value X into a register 29250 in class CLASS. The value is a register class; perhaps CLASS, or 29251 perhaps another, smaller class. On many machines, the following 29252 definition is safe: 29253 29254 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 29255 29256 Sometimes returning a more restrictive class makes better code. 29257 For example, on the 68000, when X is an integer constant that is 29258 in range for a `moveq' instruction, the value of this macro is 29259 always `DATA_REGS' as long as CLASS includes the data registers. 29260 Requiring a data register guarantees that a `moveq' will be used. 29261 29262 One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is 29263 if X is a legitimate constant which cannot be loaded into some 29264 register class. By returning `NO_REGS' you can force X into a 29265 memory location. For example, rs6000 can load immediate values 29266 into general-purpose registers, but does not have an instruction 29267 for loading an immediate value into a floating-point register, so 29268 `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a 29269 floating-point constant. If the constant can't be loaded into any 29270 kind of register, code generation will be better if 29271 `TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 29272 instead of using `TARGET_PREFERRED_RELOAD_CLASS'. 29273 29274 If an insn has pseudos in it after register allocation, reload 29275 will go through the alternatives and call repeatedly 29276 `PREFERRED_RELOAD_CLASS' to find the best one. Returning 29277 `NO_REGS', in this case, makes reload add a `!' in front of the 29278 constraint: the x86 back-end uses this feature to discourage usage 29279 of 387 registers when math is done in the SSE registers (and vice 29280 versa). 29281 29282 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 29283 X, reg_class_t RCLASS) 29284 Like `TARGET_PREFERRED_RELOAD_CLASS', but for output reloads 29285 instead of input reloads. 29286 29287 The default version of this hook always returns value of `rclass' 29288 argument. 29289 29290 You can also use `TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to 29291 discourage reload from using some alternatives, like 29292 `TARGET_PREFERRED_RELOAD_CLASS'. 29293 29294 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 29295 A C expression that places additional restrictions on the register 29296 class to use when it is necessary to be able to hold a value of 29297 mode MODE in a reload register for which class CLASS would 29298 ordinarily be used. 29299 29300 Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when 29301 there are certain modes that simply can't go in certain reload 29302 classes. 29303 29304 The value is a register class; perhaps CLASS, or perhaps another, 29305 smaller class. 29306 29307 Don't define this macro unless the target machine has limitations 29308 which require the macro to do something nontrivial. 29309 29310 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X, 29311 reg_class_t RELOAD_CLASS, enum machine_mode RELOAD_MODE, 29312 secondary_reload_info *SRI) 29313 Many machines have some registers that cannot be copied directly 29314 to or from memory or even from other types of registers. An 29315 example is the `MQ' register, which on most machines, can only be 29316 copied to or from general registers, but not memory. Below, we 29317 shall be using the term 'intermediate register' when a move 29318 operation cannot be performed directly, but has to be done by 29319 copying the source into the intermediate register first, and then 29320 copying the intermediate register to the destination. An 29321 intermediate register always has the same mode as source and 29322 destination. Since it holds the actual value being copied, reload 29323 might apply optimizations to re-use an intermediate register and 29324 eliding the copy from the source when it can determine that the 29325 intermediate register still holds the required value. 29326 29327 Another kind of secondary reload is required on some machines which 29328 allow copying all registers to and from memory, but require a 29329 scratch register for stores to some memory locations (e.g., those 29330 with symbolic address on the RT, and those with certain symbolic 29331 address on the SPARC when compiling PIC). Scratch registers need 29332 not have the same mode as the value being copied, and usually hold 29333 a different value than that being copied. Special patterns in the 29334 md file are needed to describe how the copy is performed with the 29335 help of the scratch register; these patterns also describe the 29336 number, register class(es) and mode(s) of the scratch register(s). 29337 29338 In some cases, both an intermediate and a scratch register are 29339 required. 29340 29341 For input reloads, this target hook is called with nonzero IN_P, 29342 and X is an rtx that needs to be copied to a register of class 29343 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 29344 is called with zero IN_P, and a register of class RELOAD_CLASS 29345 needs to be copied to rtx X in RELOAD_MODE. 29346 29347 If copying a register of RELOAD_CLASS from/to X requires an 29348 intermediate register, the hook `secondary_reload' should return 29349 the register class required for this intermediate register. If no 29350 intermediate register is required, it should return NO_REGS. If 29351 more than one intermediate register is required, describe the one 29352 that is closest in the copy chain to the reload register. 29353 29354 If scratch registers are needed, you also have to describe how to 29355 perform the copy from/to the reload register to/from this closest 29356 intermediate register. Or if no intermediate register is 29357 required, but still a scratch register is needed, describe the 29358 copy from/to the reload register to/from the reload operand X. 29359 29360 You do this by setting `sri->icode' to the instruction code of a 29361 pattern in the md file which performs the move. Operands 0 and 1 29362 are the output and input of this copy, respectively. Operands 29363 from operand 2 onward are for scratch operands. These scratch 29364 operands must have a mode, and a single-register-class output 29365 constraint. 29366 29367 When an intermediate register is used, the `secondary_reload' hook 29368 will be called again to determine how to copy the intermediate 29369 register to/from the reload operand X, so your hook must also have 29370 code to handle the register class of the intermediate operand. 29371 29372 X might be a pseudo-register or a `subreg' of a pseudo-register, 29373 which could either be in a hard register or in memory. Use 29374 `true_regnum' to find out; it will return -1 if the pseudo is in 29375 memory and the hard register number if it is in a register. 29376 29377 Scratch operands in memory (constraint `"=m"' / `"=&m"') are 29378 currently not supported. For the time being, you will have to 29379 continue to use `SECONDARY_MEMORY_NEEDED' for that purpose. 29380 29381 `copy_cost' also uses this target hook to find out how values are 29382 copied. If you want it to include some extra cost for the need to 29383 allocate (a) scratch register(s), set `sri->extra_cost' to the 29384 additional cost. Or if two dependent moves are supposed to have a 29385 lower cost than the sum of the individual moves due to expected 29386 fortuitous scheduling and/or special forwarding logic, you can set 29387 `sri->extra_cost' to a negative amount. 29388 29389 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 29390 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 29391 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 29392 These macros are obsolete, new ports should use the target hook 29393 `TARGET_SECONDARY_RELOAD' instead. 29394 29395 These are obsolete macros, replaced by the 29396 `TARGET_SECONDARY_RELOAD' target hook. Older ports still define 29397 these macros to indicate to the reload phase that it may need to 29398 allocate at least one register for a reload in addition to the 29399 register to contain the data. Specifically, if copying X to a 29400 register CLASS in MODE requires an intermediate register, you were 29401 supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the 29402 largest register class all of whose registers can be used as 29403 intermediate registers or scratch registers. 29404 29405 If copying a register CLASS in MODE to X requires an intermediate 29406 or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 29407 to be defined be defined to return the largest register class 29408 required. If the requirements for input and output reloads were 29409 the same, the macro `SECONDARY_RELOAD_CLASS' should have been used 29410 instead of defining both macros identically. 29411 29412 The values returned by these macros are often `GENERAL_REGS'. 29413 Return `NO_REGS' if no spare register is needed; i.e., if X can be 29414 directly copied to or from a register of CLASS in MODE without 29415 requiring a scratch register. Do not define this macro if it 29416 would always return `NO_REGS'. 29417 29418 If a scratch register is required (either with or without an 29419 intermediate register), you were supposed to define patterns for 29420 `reload_inM' or `reload_outM', as required (*note Standard 29421 Names::. These patterns, which were normally implemented with a 29422 `define_expand', should be similar to the `movM' patterns, except 29423 that operand 2 is the scratch register. 29424 29425 These patterns need constraints for the reload register and scratch 29426 register that contain a single register class. If the original 29427 reload register (whose class is CLASS) can meet the constraint 29428 given in the pattern, the value returned by these macros is used 29429 for the class of the scratch register. Otherwise, two additional 29430 reload registers are required. Their classes are obtained from 29431 the constraints in the insn pattern. 29432 29433 X might be a pseudo-register or a `subreg' of a pseudo-register, 29434 which could either be in a hard register or in memory. Use 29435 `true_regnum' to find out; it will return -1 if the pseudo is in 29436 memory and the hard register number if it is in a register. 29437 29438 These macros should not be used in the case where a particular 29439 class of registers can only be copied to memory and not to another 29440 class of registers. In that case, secondary reload registers are 29441 not needed and would not be helpful. Instead, a stack location 29442 must be used to perform the copy and the `movM' pattern should use 29443 memory as an intermediate storage. This case often occurs between 29444 floating-point and general registers. 29445 29446 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 29447 Certain machines have the property that some registers cannot be 29448 copied to some other registers without using memory. Define this 29449 macro on those machines to be a C expression that is nonzero if 29450 objects of mode M in registers of CLASS1 can only be copied to 29451 registers of class CLASS2 by storing a register of CLASS1 into 29452 memory and loading that memory location into a register of CLASS2. 29453 29454 Do not define this macro if its value would always be zero. 29455 29456 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 29457 Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler 29458 allocates a stack slot for a memory location needed for register 29459 copies. If this macro is defined, the compiler instead uses the 29460 memory location defined by this macro. 29461 29462 Do not define this macro if you do not define 29463 `SECONDARY_MEMORY_NEEDED'. 29464 29465 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 29466 When the compiler needs a secondary memory location to copy 29467 between two registers of mode MODE, it normally allocates 29468 sufficient memory to hold a quantity of `BITS_PER_WORD' bits and 29469 performs the store and load operations in a mode that many bits 29470 wide and whose class is the same as that of MODE. 29471 29472 This is right thing to do on most machines because it ensures that 29473 all bits of the register are copied and prevents accesses to the 29474 registers in a narrower mode, which some machines prohibit for 29475 floating-point registers. 29476 29477 However, this default behavior is not correct on some machines, 29478 such as the DEC Alpha, that store short integers in floating-point 29479 registers differently than in integer registers. On those 29480 machines, the default widening will not work correctly and you 29481 must define this macro to suppress that widening in some cases. 29482 See the file `alpha.h' for details. 29483 29484 Do not define this macro if you do not define 29485 `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 29486 `BITS_PER_WORD' bits wide is correct for your machine. 29487 29488 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS) 29489 A target hook which returns `true' if pseudos that have been 29490 assigned to registers of class RCLASS would likely be spilled 29491 because registers of RCLASS are needed for spill registers. 29492 29493 The default version of this target hook returns `true' if RCLASS 29494 has exactly one register and `false' otherwise. On most machines, 29495 this default should be used. For generally register-starved 29496 machines, such as i386, or machines with right register 29497 constraints, such as SH, this hook can be used to avoid excessive 29498 spilling. 29499 29500 This hook is also used by some of the global intra-procedural code 29501 transformations to throtle code motion, to avoid increasing 29502 register pressure. 29503 29504 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t 29505 RCLASS, enum machine_mode MODE) 29506 A target hook returns the maximum number of consecutive registers 29507 of class RCLASS needed to hold a value of mode MODE. 29508 29509 This is closely related to the macro `HARD_REGNO_NREGS'. In fact, 29510 the value returned by `TARGET_CLASS_MAX_NREGS (RCLASS, MODE)' 29511 target hook should be the maximum value of `HARD_REGNO_NREGS 29512 (REGNO, MODE)' for all REGNO values in the class RCLASS. 29513 29514 This target hook helps control the handling of multiple-word values 29515 in the reload pass. 29516 29517 The default version of this target hook returns the size of MODE 29518 in words. 29519 29520 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 29521 A C expression for the maximum number of consecutive registers of 29522 class CLASS needed to hold a value of mode MODE. 29523 29524 This is closely related to the macro `HARD_REGNO_NREGS'. In fact, 29525 the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be 29526 the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all 29527 REGNO values in the class CLASS. 29528 29529 This macro helps control the handling of multiple-word values in 29530 the reload pass. 29531 29532 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 29533 If defined, a C expression that returns nonzero for a CLASS for 29534 which a change from mode FROM to mode TO is invalid. 29535 29536 For the example, loading 32-bit integer or floating-point objects 29537 into floating-point registers on the Alpha extends them to 64 bits. 29538 Therefore loading a 64-bit object and then storing it as a 32-bit 29539 object does not store the low-order 32 bits, as would be the case 29540 for a normal register. Therefore, `alpha.h' defines 29541 `CANNOT_CHANGE_MODE_CLASS' as below: 29542 29543 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 29544 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 29545 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 29546 29547 -- Target Hook: bool TARGET_LRA_P (void) 29548 A target hook which returns true if we use LRA instead of reload 29549 pass. It means that LRA was ported to the target. The default 29550 version of this target hook returns always false. 29551 29552 -- Target Hook: int TARGET_REGISTER_PRIORITY (int) 29553 A target hook which returns the register priority number to which 29554 the register HARD_REGNO belongs to. The bigger the number, the 29555 more preferable the hard register usage (when all other conditions 29556 are the same). This hook can be used to prefer some hard 29557 register over others in LRA. For example, some x86-64 register 29558 usage needs additional prefix which makes instructions longer. 29559 The hook can return lower priority number for such registers make 29560 them less favorable and as result making the generated code 29561 smaller. The default version of this target hook returns always 29562 zero. 29563 29564 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void) 29565 A target hook which returns true if an address with the same 29566 structure can have different maximal legitimate displacement. 29567 For example, the displacement can depend on memory mode or on 29568 operand combinations in the insn. The default version of this 29569 target hook returns always false. 29570 29571 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, enum 29572 MACHINE_MODE) 29573 This hook defines a class of registers which could be used for 29574 spilling pseudos of the given mode and class, or `NO_REGS' if 29575 only memory should be used. Not defining this hook is equivalent 29576 to returning `NO_REGS' for all inputs. 29577 29578 29579 File: gccint.info, Node: Old Constraints, Next: Stack and Calling, Prev: Register Classes, Up: Target Macros 29580 29581 17.9 Obsolete Macros for Defining Constraints 29582 ============================================= 29583 29584 Machine-specific constraints can be defined with these macros instead 29585 of the machine description constructs described in *note Define 29586 Constraints::. This mechanism is obsolete. New ports should not use 29587 it; old ports should convert to the new mechanism. 29588 29589 -- Macro: CONSTRAINT_LEN (CHAR, STR) 29590 For the constraint at the start of STR, which starts with the 29591 letter C, return the length. This allows you to have register 29592 class / constant / extra constraints that are longer than a single 29593 letter; you don't need to define this macro if you can do with 29594 single-letter constraints only. The definition of this macro 29595 should use DEFAULT_CONSTRAINT_LEN for all the characters that you 29596 don't want to handle specially. There are some sanity checks in 29597 genoutput.c that check the constraint lengths for the md file, so 29598 you can also use this macro to help you while you are 29599 transitioning from a byzantine single-letter-constraint scheme: 29600 when you return a negative length for a constraint you want to 29601 re-use, genoutput will complain about every instance where it is 29602 used in the md file. 29603 29604 -- Macro: REG_CLASS_FROM_LETTER (CHAR) 29605 A C expression which defines the machine-dependent operand 29606 constraint letters for register classes. If CHAR is such a 29607 letter, the value should be the register class corresponding to 29608 it. Otherwise, the value should be `NO_REGS'. The register 29609 letter `r', corresponding to class `GENERAL_REGS', will not be 29610 passed to this macro; you do not need to handle it. 29611 29612 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR) 29613 Like `REG_CLASS_FROM_LETTER', but you also get the constraint 29614 string passed in STR, so that you can use suffixes to distinguish 29615 between different variants. 29616 29617 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C) 29618 A C expression that defines the machine-dependent operand 29619 constraint letters (`I', `J', `K', ... `P') that specify 29620 particular ranges of integer values. If C is one of those 29621 letters, the expression should check that VALUE, an integer, is in 29622 the appropriate range and return 1 if so, 0 otherwise. If C is 29623 not one of those letters, the value should be 0 regardless of 29624 VALUE. 29625 29626 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 29627 Like `CONST_OK_FOR_LETTER_P', but you also get the constraint 29628 string passed in STR, so that you can use suffixes to distinguish 29629 between different variants. 29630 29631 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C) 29632 A C expression that defines the machine-dependent operand 29633 constraint letters that specify particular ranges of 29634 `const_double' values (`G' or `H'). 29635 29636 If C is one of those letters, the expression should check that 29637 VALUE, an RTX of code `const_double', is in the appropriate range 29638 and return 1 if so, 0 otherwise. If C is not one of those 29639 letters, the value should be 0 regardless of VALUE. 29640 29641 `const_double' is used for all floating-point constants and for 29642 `DImode' fixed-point constants. A given letter can accept either 29643 or both kinds of values. It can use `GET_MODE' to distinguish 29644 between these kinds. 29645 29646 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 29647 Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the 29648 constraint string passed in STR, so that you can use suffixes to 29649 distinguish between different variants. 29650 29651 -- Macro: EXTRA_CONSTRAINT (VALUE, C) 29652 A C expression that defines the optional machine-dependent 29653 constraint letters that can be used to segregate specific types of 29654 operands, usually memory references, for the target machine. Any 29655 letter that is not elsewhere defined and not matched by 29656 `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used. 29657 Normally this macro will not be defined. 29658 29659 If it is required for a particular target machine, it should 29660 return 1 if VALUE corresponds to the operand type represented by 29661 the constraint letter C. If C is not defined as an extra 29662 constraint, the value returned should be 0 regardless of VALUE. 29663 29664 For example, on the ROMP, load instructions cannot have their 29665 output in r0 if the memory reference contains a symbolic address. 29666 Constraint letter `Q' is defined as representing a memory address 29667 that does _not_ contain a symbolic address. An alternative is 29668 specified with a `Q' constraint on the input and `r' on the 29669 output. The next alternative specifies `m' on the input and a 29670 register class that does not include r0 on the output. 29671 29672 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR) 29673 Like `EXTRA_CONSTRAINT', but you also get the constraint string 29674 passed in STR, so that you can use suffixes to distinguish between 29675 different variants. 29676 29677 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR) 29678 A C expression that defines the optional machine-dependent 29679 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT', 29680 that should be treated like memory constraints by the reload pass. 29681 29682 It should return 1 if the operand type represented by the 29683 constraint at the start of STR, the first letter of which is the 29684 letter C, comprises a subset of all memory references including 29685 all those whose address is simply a base register. This allows 29686 the reload pass to reload an operand, if it does not directly 29687 correspond to the operand type of C, by copying its address into a 29688 base register. 29689 29690 For example, on the S/390, some instructions do not accept 29691 arbitrary memory references, but only those that do not make use 29692 of an index register. The constraint letter `Q' is defined via 29693 `EXTRA_CONSTRAINT' as representing a memory address of this type. 29694 If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q' 29695 constraint can handle any memory operand, because the reload pass 29696 knows it can be reloaded by copying the memory address into a base 29697 register if required. This is analogous to the way an `o' 29698 constraint can handle any memory operand. 29699 29700 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR) 29701 A C expression that defines the optional machine-dependent 29702 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' / 29703 `EXTRA_CONSTRAINT_STR', that should be treated like address 29704 constraints by the reload pass. 29705 29706 It should return 1 if the operand type represented by the 29707 constraint at the start of STR, which starts with the letter C, 29708 comprises a subset of all memory addresses including all those 29709 that consist of just a base register. This allows the reload pass 29710 to reload an operand, if it does not directly correspond to the 29711 operand type of STR, by copying it into a base register. 29712 29713 Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be 29714 used with the `address_operand' predicate. It is treated 29715 analogously to the `p' constraint. 29716 29717 29718 File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Old Constraints, Up: Target Macros 29719 29720 17.10 Stack Layout and Calling Conventions 29721 ========================================== 29722 29723 This describes the stack layout and calling conventions. 29724 29725 * Menu: 29726 29727 * Frame Layout:: 29728 * Exception Handling:: 29729 * Stack Checking:: 29730 * Frame Registers:: 29731 * Elimination:: 29732 * Stack Arguments:: 29733 * Register Arguments:: 29734 * Scalar Return:: 29735 * Aggregate Return:: 29736 * Caller Saves:: 29737 * Function Entry:: 29738 * Profiling:: 29739 * Tail Calls:: 29740 * Stack Smashing Protection:: 29741 29742 29743 File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 29744 29745 17.10.1 Basic Stack Layout 29746 -------------------------- 29747 29748 Here is the basic stack layout. 29749 29750 -- Macro: STACK_GROWS_DOWNWARD 29751 Define this macro if pushing a word onto the stack moves the stack 29752 pointer to a smaller address. 29753 29754 When we say, "define this macro if ...", it means that the 29755 compiler checks this macro only with `#ifdef' so the precise 29756 definition used does not matter. 29757 29758 -- Macro: STACK_PUSH_CODE 29759 This macro defines the operation used when something is pushed on 29760 the stack. In RTL, a push operation will be `(set (mem 29761 (STACK_PUSH_CODE (reg sp))) ...)' 29762 29763 The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'. 29764 Which of these is correct depends on the stack direction and on 29765 whether the stack pointer points to the last item on the stack or 29766 whether it points to the space for the next item on the stack. 29767 29768 The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined, 29769 which is almost always right, and `PRE_INC' otherwise, which is 29770 often wrong. 29771 29772 -- Macro: FRAME_GROWS_DOWNWARD 29773 Define this macro to nonzero value if the addresses of local 29774 variable slots are at negative offsets from the frame pointer. 29775 29776 -- Macro: ARGS_GROW_DOWNWARD 29777 Define this macro if successive arguments to a function occupy 29778 decreasing addresses on the stack. 29779 29780 -- Macro: STARTING_FRAME_OFFSET 29781 Offset from the frame pointer to the first local variable slot to 29782 be allocated. 29783 29784 If `FRAME_GROWS_DOWNWARD', find the next slot's offset by 29785 subtracting the first slot's length from `STARTING_FRAME_OFFSET'. 29786 Otherwise, it is found by adding the length of the first slot to 29787 the value `STARTING_FRAME_OFFSET'. 29788 29789 -- Macro: STACK_ALIGNMENT_NEEDED 29790 Define to zero to disable final alignment of the stack during 29791 reload. The nonzero default for this macro is suitable for most 29792 ports. 29793 29794 On ports where `STARTING_FRAME_OFFSET' is nonzero or where there 29795 is a register save block following the local block that doesn't 29796 require alignment to `STACK_BOUNDARY', it may be beneficial to 29797 disable stack alignment and do it in the backend. 29798 29799 -- Macro: STACK_POINTER_OFFSET 29800 Offset from the stack pointer register to the first location at 29801 which outgoing arguments are placed. If not specified, the 29802 default value of zero is used. This is the proper value for most 29803 machines. 29804 29805 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 29806 the first location at which outgoing arguments are placed. 29807 29808 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 29809 Offset from the argument pointer register to the first argument's 29810 address. On some machines it may depend on the data type of the 29811 function. 29812 29813 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 29814 the first argument's address. 29815 29816 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 29817 Offset from the stack pointer register to an item dynamically 29818 allocated on the stack, e.g., by `alloca'. 29819 29820 The default value for this macro is `STACK_POINTER_OFFSET' plus the 29821 length of the outgoing arguments. The default is correct for most 29822 machines. See `function.c' for details. 29823 29824 -- Macro: INITIAL_FRAME_ADDRESS_RTX 29825 A C expression whose value is RTL representing the address of the 29826 initial stack frame. This address is passed to `RETURN_ADDR_RTX' 29827 and `DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 29828 reasonable default value will be used. Define this macro in order 29829 to make frame pointer elimination work in the presence of 29830 `__builtin_frame_address (count)' and `__builtin_return_address 29831 (count)' for `count' not equal to zero. 29832 29833 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 29834 A C expression whose value is RTL representing the address in a 29835 stack frame where the pointer to the caller's frame is stored. 29836 Assume that FRAMEADDR is an RTL expression for the address of the 29837 stack frame itself. 29838 29839 If you don't define this macro, the default is to return the value 29840 of FRAMEADDR--that is, the stack frame address is also the address 29841 of the stack word that points to the previous frame. 29842 29843 -- Macro: SETUP_FRAME_ADDRESSES 29844 If defined, a C expression that produces the machine-specific code 29845 to setup the stack so that arbitrary frames can be accessed. For 29846 example, on the SPARC, we must flush all of the register windows 29847 to the stack before we can access arbitrary stack frames. You 29848 will seldom need to define this macro. 29849 29850 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 29851 This target hook should return an rtx that is used to store the 29852 address of the current frame into the built in `setjmp' buffer. 29853 The default value, `virtual_stack_vars_rtx', is correct for most 29854 machines. One reason you may need to define this target hook is if 29855 `hard_frame_pointer_rtx' is the appropriate value on your machine. 29856 29857 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 29858 A C expression whose value is RTL representing the value of the 29859 frame address for the current frame. FRAMEADDR is the frame 29860 pointer of the current frame. This is used for 29861 __builtin_frame_address. You need only define this macro if the 29862 frame address is not the same as the frame pointer. Most machines 29863 do not need to define it. 29864 29865 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 29866 A C expression whose value is RTL representing the value of the 29867 return address for the frame COUNT steps up from the current 29868 frame, after the prologue. FRAMEADDR is the frame pointer of the 29869 COUNT frame, or the frame pointer of the COUNT - 1 frame if 29870 `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined. 29871 29872 The value of the expression must always be the correct address when 29873 COUNT is zero, but may be `NULL_RTX' if there is no way to 29874 determine the return address of other frames. 29875 29876 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 29877 Define this if the return address of a particular stack frame is 29878 accessed from the frame pointer of the previous stack frame. 29879 29880 -- Macro: INCOMING_RETURN_ADDR_RTX 29881 A C expression whose value is RTL representing the location of the 29882 incoming return address at the beginning of any function, before 29883 the prologue. This RTL is either a `REG', indicating that the 29884 return value is saved in `REG', or a `MEM' representing a location 29885 in the stack. 29886 29887 You only need to define this macro if you want to support call 29888 frame debugging information like that provided by DWARF 2. 29889 29890 If this RTL is a `REG', you should also define 29891 `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'. 29892 29893 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 29894 A C expression whose value is an integer giving a DWARF 2 column 29895 number that may be used as an alternative return column. The 29896 column must not correspond to any gcc hard register (that is, it 29897 must not be in the range of `DWARF_FRAME_REGNUM'). 29898 29899 This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a 29900 general register, but an alternative column needs to be used for 29901 signal frames. Some targets have also used different frame return 29902 columns over time. 29903 29904 -- Macro: DWARF_ZERO_REG 29905 A C expression whose value is an integer giving a DWARF 2 register 29906 number that is considered to always have the value zero. This 29907 should only be defined if the target has an architected zero 29908 register, and someone decided it was a good idea to use that 29909 register number to terminate the stack backtrace. New ports 29910 should avoid this. 29911 29912 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 29913 *LABEL, rtx PATTERN, int INDEX) 29914 This target hook allows the backend to emit frame-related insns 29915 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 29916 debugging info engine will invoke it on insns of the form 29917 (set (reg) (unspec [...] UNSPEC_INDEX)) 29918 and 29919 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 29920 to let the backend emit the call frame instructions. LABEL is the 29921 CFI label attached to the insn, PATTERN is the pattern of the insn 29922 and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'. 29923 29924 -- Macro: INCOMING_FRAME_SP_OFFSET 29925 A C expression whose value is an integer giving the offset, in 29926 bytes, from the value of the stack pointer register to the top of 29927 the stack frame at the beginning of any function, before the 29928 prologue. The top of the frame is defined to be the value of the 29929 stack pointer in the previous frame, just before the call 29930 instruction. 29931 29932 You only need to define this macro if you want to support call 29933 frame debugging information like that provided by DWARF 2. 29934 29935 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 29936 A C expression whose value is an integer giving the offset, in 29937 bytes, from the argument pointer to the canonical frame address 29938 (cfa). The final value should coincide with that calculated by 29939 `INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 29940 during virtual register instantiation. 29941 29942 The default value for this macro is `FIRST_PARM_OFFSET (fundecl) + 29943 crtl->args.pretend_args_size', which is correct for most machines; 29944 in general, the arguments are found immediately before the stack 29945 frame. Note that this is not the case on some targets that save 29946 registers into the caller's frame, such as SPARC and rs6000, and 29947 so such targets need to define this macro. 29948 29949 You only need to define this macro if the default is incorrect, 29950 and you want to support call frame debugging information like that 29951 provided by DWARF 2. 29952 29953 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 29954 If defined, a C expression whose value is an integer giving the 29955 offset in bytes from the frame pointer to the canonical frame 29956 address (cfa). The final value should coincide with that 29957 calculated by `INCOMING_FRAME_SP_OFFSET'. 29958 29959 Normally the CFA is calculated as an offset from the argument 29960 pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer 29961 is variable due to the ABI, this may not be possible. If this 29962 macro is defined, it implies that the virtual register 29963 instantiation should be based on the frame pointer instead of the 29964 argument pointer. Only one of `FRAME_POINTER_CFA_OFFSET' and 29965 `ARG_POINTER_CFA_OFFSET' should be defined. 29966 29967 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 29968 If defined, a C expression whose value is an integer giving the 29969 offset in bytes from the canonical frame address (cfa) to the 29970 frame base used in DWARF 2 debug information. The default is 29971 zero. A different value may reduce the size of debug information 29972 on some ports. 29973 29974 29975 File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 29976 29977 17.10.2 Exception Handling Support 29978 ---------------------------------- 29979 29980 -- Macro: EH_RETURN_DATA_REGNO (N) 29981 A C expression whose value is the Nth register number used for 29982 data by exception handlers, or `INVALID_REGNUM' if fewer than N 29983 registers are usable. 29984 29985 The exception handling library routines communicate with the 29986 exception handlers via a set of agreed upon registers. Ideally 29987 these registers should be call-clobbered; it is possible to use 29988 call-saved registers, but may negatively impact code size. The 29989 target must support at least 2 data registers, but should define 4 29990 if there are enough free registers. 29991 29992 You must define this macro if you want to support call frame 29993 exception handling like that provided by DWARF 2. 29994 29995 -- Macro: EH_RETURN_STACKADJ_RTX 29996 A C expression whose value is RTL representing a location in which 29997 to store a stack adjustment to be applied before function return. 29998 This is used to unwind the stack to an exception handler's call 29999 frame. It will be assigned zero on code paths that return 30000 normally. 30001 30002 Typically this is a call-clobbered hard register that is otherwise 30003 untouched by the epilogue, but could also be a stack slot. 30004 30005 Do not define this macro if the stack pointer is saved and restored 30006 by the regular prolog and epilog code in the call frame itself; in 30007 this case, the exception handling library routines will update the 30008 stack location to be restored in place. Otherwise, you must define 30009 this macro if you want to support call frame exception handling 30010 like that provided by DWARF 2. 30011 30012 -- Macro: EH_RETURN_HANDLER_RTX 30013 A C expression whose value is RTL representing a location in which 30014 to store the address of an exception handler to which we should 30015 return. It will not be assigned on code paths that return 30016 normally. 30017 30018 Typically this is the location in the call frame at which the 30019 normal return address is stored. For targets that return by 30020 popping an address off the stack, this might be a memory address 30021 just below the _target_ call frame rather than inside the current 30022 call frame. If defined, `EH_RETURN_STACKADJ_RTX' will have already 30023 been assigned, so it may be used to calculate the location of the 30024 target call frame. 30025 30026 Some targets have more complex requirements than storing to an 30027 address calculable during initial code generation. In that case 30028 the `eh_return' instruction pattern should be used instead. 30029 30030 If you want to support call frame exception handling, you must 30031 define either this macro or the `eh_return' instruction pattern. 30032 30033 -- Macro: RETURN_ADDR_OFFSET 30034 If defined, an integer-valued C expression for which rtl will be 30035 generated to add it to the exception handler address before it is 30036 searched in the exception handling tables, and to subtract it 30037 again from the address before using it to return to the exception 30038 handler. 30039 30040 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 30041 This macro chooses the encoding of pointers embedded in the 30042 exception handling sections. If at all possible, this should be 30043 defined such that the exception handling section will not require 30044 dynamic relocations, and so may be read-only. 30045 30046 CODE is 0 for data, 1 for code labels, 2 for function pointers. 30047 GLOBAL is true if the symbol may be affected by dynamic 30048 relocations. The macro should return a combination of the 30049 `DW_EH_PE_*' defines as found in `dwarf2.h'. 30050 30051 If this macro is not defined, pointers will not be encoded but 30052 represented directly. 30053 30054 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 30055 ADDR, DONE) 30056 This macro allows the target to emit whatever special magic is 30057 required to represent the encoding chosen by 30058 `ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 30059 pc-relative and indirect encodings; this must be defined if the 30060 target uses text-relative or data-relative encodings. 30061 30062 This is a C statement that branches to DONE if the format was 30063 handled. ENCODING is the format chosen, SIZE is the number of 30064 bytes that the format occupies, ADDR is the `SYMBOL_REF' to be 30065 emitted. 30066 30067 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 30068 This macro allows the target to add CPU and operating system 30069 specific code to the call-frame unwinder for use when there is no 30070 unwind data available. The most common reason to implement this 30071 macro is to unwind through signal frames. 30072 30073 This macro is called from `uw_frame_state_for' in `unwind-dw2.c', 30074 `unwind-dw2-xtensa.c' and `unwind-ia64.c'. CONTEXT is an 30075 `_Unwind_Context'; FS is an `_Unwind_FrameState'. Examine 30076 `context->ra' for the address of the code being executed and 30077 `context->cfa' for the stack pointer value. If the frame can be 30078 decoded, the register save addresses should be updated in FS and 30079 the macro should evaluate to `_URC_NO_REASON'. If the frame 30080 cannot be decoded, the macro should evaluate to 30081 `_URC_END_OF_STACK'. 30082 30083 For proper signal handling in Java this macro is accompanied by 30084 `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h' 30085 headers. 30086 30087 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 30088 This macro allows the target to add operating system specific code 30089 to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding 30090 directive, usually used for signal or interrupt frames. 30091 30092 This macro is called from `uw_update_context' in libgcc's 30093 `unwind-ia64.c'. CONTEXT is an `_Unwind_Context'; FS is an 30094 `_Unwind_FrameState'. Examine `fs->unwabi' for the abi and 30095 context in the `.unwabi' directive. If the `.unwabi' directive 30096 can be handled, the register save addresses should be updated in 30097 FS. 30098 30099 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 30100 A C expression that evaluates to true if the target requires unwind 30101 info to be given comdat linkage. Define it to be `1' if comdat 30102 linkage is necessary. The default is `0'. 30103 30104 30105 File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 30106 30107 17.10.3 Specifying How Stack Checking is Done 30108 --------------------------------------------- 30109 30110 GCC will check that stack references are within the boundaries of the 30111 stack, if the option `-fstack-check' is specified, in one of three ways: 30112 30113 1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC 30114 will assume that you have arranged for full stack checking to be 30115 done at appropriate places in the configuration files. GCC will 30116 not do other special processing. 30117 30118 2. If `STACK_CHECK_BUILTIN' is zero and the value of the 30119 `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume 30120 that you have arranged for static stack checking (checking of the 30121 static stack frame of functions) to be done at appropriate places 30122 in the configuration files. GCC will only emit code to do dynamic 30123 stack checking (checking on dynamic stack allocations) using the 30124 third approach below. 30125 30126 3. If neither of the above are true, GCC will generate code to 30127 periodically "probe" the stack pointer using the values of the 30128 macros defined below. 30129 30130 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 30131 defined, GCC will change its allocation strategy for large objects if 30132 the option `-fstack-check' is specified: they will always be allocated 30133 dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes. 30134 30135 -- Macro: STACK_CHECK_BUILTIN 30136 A nonzero value if stack checking is done by the configuration 30137 files in a machine-dependent manner. You should define this macro 30138 if stack checking is required by the ABI of your machine or if you 30139 would like to do stack checking in some more efficient way than 30140 the generic approach. The default value of this macro is zero. 30141 30142 -- Macro: STACK_CHECK_STATIC_BUILTIN 30143 A nonzero value if static stack checking is done by the 30144 configuration files in a machine-dependent manner. You should 30145 define this macro if you would like to do static stack checking in 30146 some more efficient way than the generic approach. The default 30147 value of this macro is zero. 30148 30149 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 30150 An integer specifying the interval at which GCC must generate 30151 stack probe instructions, defined as 2 raised to this integer. 30152 You will normally define this macro so that the interval be no 30153 larger than the size of the "guard pages" at the end of a stack 30154 area. The default value of 12 (4096-byte interval) is suitable 30155 for most systems. 30156 30157 -- Macro: STACK_CHECK_MOVING_SP 30158 An integer which is nonzero if GCC should move the stack pointer 30159 page by page when doing probes. This can be necessary on systems 30160 where the stack pointer contains the bottom address of the memory 30161 area accessible to the executing thread at any point in time. In 30162 this situation an alternate signal stack is required in order to 30163 be able to recover from a stack overflow. The default value of 30164 this macro is zero. 30165 30166 -- Macro: STACK_CHECK_PROTECT 30167 The number of bytes of stack needed to recover from a stack 30168 overflow, for languages where such a recovery is supported. The 30169 default value of 75 words with the `setjmp'/`longjmp'-based 30170 exception handling mechanism and 8192 bytes with other exception 30171 handling mechanisms should be adequate for most machines. 30172 30173 The following macros are relevant only if neither STACK_CHECK_BUILTIN 30174 nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 30175 in the opposite case. 30176 30177 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 30178 The maximum size of a stack frame, in bytes. GCC will generate 30179 probe instructions in non-leaf functions to ensure at least this 30180 many bytes of stack are available. If a stack frame is larger 30181 than this size, stack checking will not be reliable and GCC will 30182 issue a warning. The default is chosen so that GCC only generates 30183 one instruction on most systems. You should normally not change 30184 the default value of this macro. 30185 30186 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 30187 GCC uses this value to generate the above warning message. It 30188 represents the amount of fixed frame used by a function, not 30189 including space for any callee-saved registers, temporaries and 30190 user variables. You need only specify an upper bound for this 30191 amount and will normally use the default of four words. 30192 30193 -- Macro: STACK_CHECK_MAX_VAR_SIZE 30194 The maximum size, in bytes, of an object that GCC will place in the 30195 fixed area of the stack frame when the user specifies 30196 `-fstack-check'. GCC computed the default from the values of the 30197 above macros and you will normally not need to override that 30198 default. 30199 30200 30201 File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 30202 30203 17.10.4 Registers That Address the Stack Frame 30204 ---------------------------------------------- 30205 30206 This discusses registers that address the stack frame. 30207 30208 -- Macro: STACK_POINTER_REGNUM 30209 The register number of the stack pointer register, which must also 30210 be a fixed register according to `FIXED_REGISTERS'. On most 30211 machines, the hardware determines which register this is. 30212 30213 -- Macro: FRAME_POINTER_REGNUM 30214 The register number of the frame pointer register, which is used to 30215 access automatic variables in the stack frame. On some machines, 30216 the hardware determines which register this is. On other 30217 machines, you can choose any register you wish for this purpose. 30218 30219 -- Macro: HARD_FRAME_POINTER_REGNUM 30220 On some machines the offset between the frame pointer and starting 30221 offset of the automatic variables is not known until after register 30222 allocation has been done (for example, because the saved registers 30223 are between these two locations). On those machines, define 30224 `FRAME_POINTER_REGNUM' the number of a special, fixed register to 30225 be used internally until the offset is known, and define 30226 `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 30227 used for the frame pointer. 30228 30229 You should define this macro only in the very rare circumstances 30230 when it is not possible to calculate the offset between the frame 30231 pointer and the automatic variables until after register 30232 allocation has been completed. When this macro is defined, you 30233 must also indicate in your definition of `ELIMINABLE_REGS' how to 30234 eliminate `FRAME_POINTER_REGNUM' into either 30235 `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'. 30236 30237 Do not define this macro if it would be the same as 30238 `FRAME_POINTER_REGNUM'. 30239 30240 -- Macro: ARG_POINTER_REGNUM 30241 The register number of the arg pointer register, which is used to 30242 access the function's argument list. On some machines, this is 30243 the same as the frame pointer register. On some machines, the 30244 hardware determines which register this is. On other machines, 30245 you can choose any register you wish for this purpose. If this is 30246 not the same register as the frame pointer register, then you must 30247 mark it as a fixed register according to `FIXED_REGISTERS', or 30248 arrange to be able to eliminate it (*note Elimination::). 30249 30250 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER 30251 Define this to a preprocessor constant that is nonzero if 30252 `hard_frame_pointer_rtx' and `frame_pointer_rtx' should be the 30253 same. The default definition is `(HARD_FRAME_POINTER_REGNUM == 30254 FRAME_POINTER_REGNUM)'; you only need to define this macro if that 30255 definition is not suitable for use in preprocessor conditionals. 30256 30257 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER 30258 Define this to a preprocessor constant that is nonzero if 30259 `hard_frame_pointer_rtx' and `arg_pointer_rtx' should be the same. 30260 The default definition is `(HARD_FRAME_POINTER_REGNUM == 30261 ARG_POINTER_REGNUM)'; you only need to define this macro if that 30262 definition is not suitable for use in preprocessor conditionals. 30263 30264 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 30265 The register number of the return address pointer register, which 30266 is used to access the current function's return address from the 30267 stack. On some machines, the return address is not at a fixed 30268 offset from the frame pointer or stack pointer or argument 30269 pointer. This register can be defined to point to the return 30270 address on the stack, and then be converted by `ELIMINABLE_REGS' 30271 into either the frame pointer or stack pointer. 30272 30273 Do not define this macro unless there is no other way to get the 30274 return address from the stack. 30275 30276 -- Macro: STATIC_CHAIN_REGNUM 30277 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 30278 Register numbers used for passing a function's static chain 30279 pointer. If register windows are used, the register number as 30280 seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM', 30281 while the register number as seen by the calling function is 30282 `STATIC_CHAIN_REGNUM'. If these registers are the same, 30283 `STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 30284 30285 The static chain register need not be a fixed register. 30286 30287 If the static chain is passed in memory, these macros should not be 30288 defined; instead, the `TARGET_STATIC_CHAIN' hook should be used. 30289 30290 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool 30291 INCOMING_P) 30292 This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for 30293 targets that may use different static chain locations for different 30294 nested functions. This may be required if the target has function 30295 attributes that affect the calling conventions of the function and 30296 those calling conventions use different static chain locations. 30297 30298 The default version of this hook uses `STATIC_CHAIN_REGNUM' et al. 30299 30300 If the static chain is passed in memory, this hook should be used 30301 to provide rtx giving `mem' expressions that denote where they are 30302 stored. Often the `mem' expression as seen by the caller will be 30303 at an offset from the stack pointer and the `mem' expression as 30304 seen by the callee will be at an offset from the frame pointer. The 30305 variables `stack_pointer_rtx', `frame_pointer_rtx', and 30306 `arg_pointer_rtx' will have been initialized and should be used to 30307 refer to those items. 30308 30309 -- Macro: DWARF_FRAME_REGISTERS 30310 This macro specifies the maximum number of hard registers that can 30311 be saved in a call frame. This is used to size data structures 30312 used in DWARF2 exception handling. 30313 30314 Prior to GCC 3.0, this macro was needed in order to establish a 30315 stable exception handling ABI in the face of adding new hard 30316 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 30317 insulated from changes in the number of hard registers. 30318 Nevertheless, this macro can still be used to reduce the runtime 30319 memory requirements of the exception handling routines, which can 30320 be substantial if the ISA contains a lot of registers that are not 30321 call-saved. 30322 30323 If this macro is not defined, it defaults to 30324 `FIRST_PSEUDO_REGISTER'. 30325 30326 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 30327 This macro is similar to `DWARF_FRAME_REGISTERS', but is provided 30328 for backward compatibility in pre GCC 3.0 compiled code. 30329 30330 If this macro is not defined, it defaults to 30331 `DWARF_FRAME_REGISTERS'. 30332 30333 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 30334 Define this macro if the target's representation for dwarf 30335 registers is different than the internal representation for unwind 30336 column. Given a dwarf register, this macro should return the 30337 internal unwind column number to use instead. 30338 30339 See the PowerPC's SPE target for an example. 30340 30341 -- Macro: DWARF_FRAME_REGNUM (REGNO) 30342 Define this macro if the target's representation for dwarf 30343 registers used in .eh_frame or .debug_frame is different from that 30344 used in other debug info sections. Given a GCC hard register 30345 number, this macro should return the .eh_frame register number. 30346 The default is `DBX_REGISTER_NUMBER (REGNO)'. 30347 30348 30349 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 30350 Define this macro to map register numbers held in the call frame 30351 info that GCC has collected using `DWARF_FRAME_REGNUM' to those 30352 that should be output in .debug_frame (`FOR_EH' is zero) and 30353 .eh_frame (`FOR_EH' is nonzero). The default is to return `REGNO'. 30354 30355 30356 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT 30357 Define this macro if the target stores register values as 30358 `_Unwind_Word' type in unwind context. It should be defined if 30359 target register size is larger than the size of `void *'. The 30360 default is to store register values as `void *' type. 30361 30362 30363 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT 30364 Define this macro to be 1 if the target always uses extended unwind 30365 context with version, args_size and by_value fields. If it is 30366 undefined, it will be defined to 1 when 30367 `REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise. 30368 30369 30370 30371 File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 30372 30373 17.10.5 Eliminating Frame Pointer and Arg Pointer 30374 ------------------------------------------------- 30375 30376 This is about eliminating the frame pointer and arg pointer. 30377 30378 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 30379 This target hook should return `true' if a function must have and 30380 use a frame pointer. This target hook is called in the reload 30381 pass. If its return value is `true' the function will have a 30382 frame pointer. 30383 30384 This target hook can in principle examine the current function and 30385 decide according to the facts, but on most machines the constant 30386 `false' or the constant `true' suffices. Use `false' when the 30387 machine allows code to be generated with no frame pointer, and 30388 doing so saves some time or space. Use `true' when there is no 30389 possible advantage to avoiding a frame pointer. 30390 30391 In certain cases, the compiler does not know how to produce valid 30392 code without a frame pointer. The compiler recognizes those cases 30393 and automatically gives the function a frame pointer regardless of 30394 what `TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to 30395 worry about them. 30396 30397 In a function that does not require a frame pointer, the frame 30398 pointer register can be allocated for ordinary usage, unless you 30399 mark it as a fixed register. See `FIXED_REGISTERS' for more 30400 information. 30401 30402 Default return value is `false'. 30403 30404 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 30405 A C statement to store in the variable DEPTH-VAR the difference 30406 between the frame pointer and the stack pointer values immediately 30407 after the function prologue. The value would be computed from 30408 information such as the result of `get_frame_size ()' and the 30409 tables of registers `regs_ever_live' and `call_used_regs'. 30410 30411 If `ELIMINABLE_REGS' is defined, this macro will be not be used and 30412 need not be defined. Otherwise, it must be defined even if 30413 `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case, 30414 you may set DEPTH-VAR to anything. 30415 30416 -- Macro: ELIMINABLE_REGS 30417 If defined, this macro specifies a table of register pairs used to 30418 eliminate unneeded registers that point into the stack frame. If 30419 it is not defined, the only elimination attempted by the compiler 30420 is to replace references to the frame pointer with references to 30421 the stack pointer. 30422 30423 The definition of this macro is a list of structure 30424 initializations, each of which specifies an original and 30425 replacement register. 30426 30427 On some machines, the position of the argument pointer is not 30428 known until the compilation is completed. In such a case, a 30429 separate hard register must be used for the argument pointer. 30430 This register can be eliminated by replacing it with either the 30431 frame pointer or the argument pointer, depending on whether or not 30432 the frame pointer has been eliminated. 30433 30434 In this case, you might specify: 30435 #define ELIMINABLE_REGS \ 30436 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 30437 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 30438 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 30439 30440 Note that the elimination of the argument pointer with the stack 30441 pointer is specified first since that is the preferred elimination. 30442 30443 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 30444 int TO_REG) 30445 This target hook should returns `true' if the compiler is allowed 30446 to try to replace register number FROM_REG with register number 30447 TO_REG. This target hook need only be defined if `ELIMINABLE_REGS' 30448 is defined, and will usually be `true', since most of the cases 30449 preventing register elimination are things that the compiler 30450 already knows about. 30451 30452 Default return value is `true'. 30453 30454 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 30455 This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It 30456 specifies the initial difference between the specified pair of 30457 registers. This macro must be defined if `ELIMINABLE_REGS' is 30458 defined. 30459 30460 30461 File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 30462 30463 17.10.6 Passing Function Arguments on the Stack 30464 ----------------------------------------------- 30465 30466 The macros in this section control how arguments are passed on the 30467 stack. See the following section for other macros that control passing 30468 certain arguments in registers. 30469 30470 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 30471 This target hook returns `true' if an argument declared in a 30472 prototype as an integral type smaller than `int' should actually be 30473 passed as an `int'. In addition to avoiding errors in certain 30474 cases of mismatch, it also makes for better code on certain 30475 machines. The default is to not promote prototypes. 30476 30477 -- Macro: PUSH_ARGS 30478 A C expression. If nonzero, push insns will be used to pass 30479 outgoing arguments. If the target machine does not have a push 30480 instruction, set it to zero. That directs GCC to use an alternate 30481 strategy: to allocate the entire argument block and then store the 30482 arguments into it. When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING' 30483 must be defined too. 30484 30485 -- Macro: PUSH_ARGS_REVERSED 30486 A C expression. If nonzero, function arguments will be evaluated 30487 from last to first, rather than from first to last. If this macro 30488 is not defined, it defaults to `PUSH_ARGS' on targets where the 30489 stack and args grow in opposite directions, and 0 otherwise. 30490 30491 -- Macro: PUSH_ROUNDING (NPUSHED) 30492 A C expression that is the number of bytes actually pushed onto the 30493 stack when an instruction attempts to push NPUSHED bytes. 30494 30495 On some machines, the definition 30496 30497 #define PUSH_ROUNDING(BYTES) (BYTES) 30498 30499 will suffice. But on other machines, instructions that appear to 30500 push one byte actually push two bytes in an attempt to maintain 30501 alignment. Then the definition should be 30502 30503 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 30504 30505 If the value of this macro has a type, it should be an unsigned 30506 type. 30507 30508 -- Macro: ACCUMULATE_OUTGOING_ARGS 30509 A C expression. If nonzero, the maximum amount of space required 30510 for outgoing arguments will be computed and placed into 30511 `crtl->outgoing_args_size'. No space will be pushed onto the 30512 stack for each call; instead, the function prologue should 30513 increase the stack frame size by this amount. 30514 30515 Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not 30516 proper. 30517 30518 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 30519 Define this macro if functions should assume that stack space has 30520 been allocated for arguments even when their values are passed in 30521 registers. 30522 30523 The value of this macro is the size, in bytes, of the area 30524 reserved for arguments passed in registers for the function 30525 represented by FNDECL, which can be zero if GCC is calling a 30526 library function. The argument FNDECL can be the FUNCTION_DECL, 30527 or the type itself of the function. 30528 30529 This space can be allocated by the caller, or be a part of the 30530 machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says 30531 which. 30532 30533 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 30534 Define this to a nonzero value if it is the responsibility of the 30535 caller to allocate the area reserved for arguments passed in 30536 registers when calling a function of FNTYPE. FNTYPE may be NULL 30537 if the function called is a library function. 30538 30539 If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 30540 whether the space for these arguments counts in the value of 30541 `crtl->outgoing_args_size'. 30542 30543 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 30544 Define this macro if `REG_PARM_STACK_SPACE' is defined, but the 30545 stack parameters don't skip the area specified by it. 30546 30547 Normally, when a parameter is not passed in registers, it is 30548 placed on the stack beyond the `REG_PARM_STACK_SPACE' area. 30549 Defining this macro suppresses this behavior and causes the 30550 parameter to be passed on the stack in its natural location. 30551 30552 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree 30553 FUNTYPE, int SIZE) 30554 This target hook returns the number of bytes of its own arguments 30555 that a function pops on returning, or 0 if the function pops no 30556 arguments and the caller must therefore pop them all after the 30557 function returns. 30558 30559 FUNDECL is a C variable whose value is a tree node that describes 30560 the function in question. Normally it is a node of type 30561 `FUNCTION_DECL' that describes the declaration of the function. 30562 From this you can obtain the `DECL_ATTRIBUTES' of the function. 30563 30564 FUNTYPE is a C variable whose value is a tree node that describes 30565 the function in question. Normally it is a node of type 30566 `FUNCTION_TYPE' that describes the data type of the function. 30567 From this it is possible to obtain the data types of the value and 30568 arguments (if known). 30569 30570 When a call to a library function is being considered, FUNDECL 30571 will contain an identifier node for the library function. Thus, if 30572 you need to distinguish among various library functions, you can 30573 do so by their names. Note that "library function" in this 30574 context means a function used to perform arithmetic, whose name is 30575 known specially in the compiler and was not mentioned in the C 30576 code being compiled. 30577 30578 SIZE is the number of bytes of arguments passed on the stack. If 30579 a variable number of bytes is passed, it is zero, and argument 30580 popping will always be the responsibility of the calling function. 30581 30582 On the VAX, all functions always pop their arguments, so the 30583 definition of this macro is SIZE. On the 68000, using the standard 30584 calling convention, no functions pop their arguments, so the value 30585 of the macro is always 0 in this case. But an alternative calling 30586 convention is available in which functions that take a fixed 30587 number of arguments pop them but other functions (such as 30588 `printf') pop nothing (the caller pops all). When this convention 30589 is in use, FUNTYPE is examined to determine whether a function 30590 takes a fixed number of arguments. 30591 30592 -- Macro: CALL_POPS_ARGS (CUM) 30593 A C expression that should indicate the number of bytes a call 30594 sequence pops off the stack. It is added to the value of 30595 `RETURN_POPS_ARGS' when compiling a function call. 30596 30597 CUM is the variable in which all arguments to the called function 30598 have been accumulated. 30599 30600 On certain architectures, such as the SH5, a call trampoline is 30601 used that pops certain registers off the stack, depending on the 30602 arguments that have been passed to the function. Since this is a 30603 property of the call site, not of the called function, 30604 `RETURN_POPS_ARGS' is not appropriate. 30605 30606 30607 File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 30608 30609 17.10.7 Passing Arguments in Registers 30610 -------------------------------------- 30611 30612 This section describes the macros which let you control how various 30613 types of arguments are passed in registers or how they are arranged in 30614 the stack. 30615 30616 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, enum 30617 machine_mode MODE, const_tree TYPE, bool NAMED) 30618 Return an RTX indicating whether a function argument is passed in a 30619 register and if so, which register. 30620 30621 The arguments are CA, which summarizes all the previous arguments; 30622 MODE, the machine mode of the argument; TYPE, the data type of the 30623 argument as a tree node or 0 if that is not known (which happens 30624 for C support library functions); and NAMED, which is `true' for 30625 an ordinary argument and `false' for nameless arguments that 30626 correspond to `...' in the called function's prototype. TYPE can 30627 be an incomplete type if a syntax error has previously occurred. 30628 30629 The return value is usually either a `reg' RTX for the hard 30630 register in which to pass the argument, or zero to pass the 30631 argument on the stack. 30632 30633 The value of the expression can also be a `parallel' RTX. This is 30634 used when an argument is passed in multiple locations. The mode 30635 of the `parallel' should be the mode of the entire argument. The 30636 `parallel' holds any number of `expr_list' pairs; each one 30637 describes where part of the argument is passed. In each 30638 `expr_list' the first operand must be a `reg' RTX for the hard 30639 register in which to pass this part of the argument, and the mode 30640 of the register RTX indicates how large this part of the argument 30641 is. The second operand of the `expr_list' is a `const_int' which 30642 gives the offset in bytes into the entire argument of where this 30643 part starts. As a special exception the first `expr_list' in the 30644 `parallel' RTX may have a first operand of zero. This indicates 30645 that the entire argument is also stored on the stack. 30646 30647 The last time this hook is called, it is called with `MODE == 30648 VOIDmode', and its result is passed to the `call' or `call_value' 30649 pattern as operands 2 and 3 respectively. 30650 30651 The usual way to make the ISO library `stdarg.h' work on a machine 30652 where some arguments are usually passed in registers, is to cause 30653 nameless arguments to be passed on the stack instead. This is 30654 done by making `TARGET_FUNCTION_ARG' return 0 whenever NAMED is 30655 `false'. 30656 30657 You may use the hook `targetm.calls.must_pass_in_stack' in the 30658 definition of this macro to determine if this argument is of a 30659 type that must be passed in the stack. If `REG_PARM_STACK_SPACE' 30660 is not defined and `TARGET_FUNCTION_ARG' returns nonzero for such 30661 an argument, the compiler will abort. If `REG_PARM_STACK_SPACE' is 30662 defined, the argument will be computed in the stack and then 30663 loaded into a register. 30664 30665 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode 30666 MODE, const_tree TYPE) 30667 This target hook should return `true' if we should not pass TYPE 30668 solely in registers. The file `expr.h' defines a definition that 30669 is usually appropriate, refer to `expr.h' for additional 30670 documentation. 30671 30672 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t 30673 CA, enum machine_mode MODE, const_tree TYPE, bool NAMED) 30674 Define this hook if the target machine has "register windows", so 30675 that the register in which a function sees an arguments is not 30676 necessarily the same as the one in which the caller passed the 30677 argument. 30678 30679 For such machines, `TARGET_FUNCTION_ARG' computes the register in 30680 which the caller passes the value, and 30681 `TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar 30682 fashion to tell the function being called where the arguments will 30683 arrive. 30684 30685 If `TARGET_FUNCTION_INCOMING_ARG' is not defined, 30686 `TARGET_FUNCTION_ARG' serves both purposes. 30687 30688 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM, 30689 enum machine_mode MODE, tree TYPE, bool NAMED) 30690 This target hook returns the number of bytes at the beginning of an 30691 argument that must be put in registers. The value must be zero for 30692 arguments that are passed entirely in registers or that are 30693 entirely pushed on the stack. 30694 30695 On some machines, certain arguments must be passed partially in 30696 registers and partially in memory. On these machines, typically 30697 the first few words of arguments are passed in registers, and the 30698 rest on the stack. If a multi-word argument (a `double' or a 30699 structure) crosses that boundary, its first few words must be 30700 passed in registers and the rest must be pushed. This macro tells 30701 the compiler when this occurs, and how many bytes should go in 30702 registers. 30703 30704 `TARGET_FUNCTION_ARG' for these arguments should return the first 30705 register to be used by the caller for this argument; likewise 30706 `TARGET_FUNCTION_INCOMING_ARG', for the called function. 30707 30708 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM, 30709 enum machine_mode MODE, const_tree TYPE, bool NAMED) 30710 This target hook should return `true' if an argument at the 30711 position indicated by CUM should be passed by reference. This 30712 predicate is queried after target independent reasons for being 30713 passed by reference, such as `TREE_ADDRESSABLE (type)'. 30714 30715 If the hook returns true, a copy of that argument is made in 30716 memory and a pointer to the argument is passed instead of the 30717 argument itself. The pointer is passed in whatever way is 30718 appropriate for passing a pointer to that type. 30719 30720 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, enum 30721 machine_mode MODE, const_tree TYPE, bool NAMED) 30722 The function argument described by the parameters to this hook is 30723 known to be passed by reference. The hook should return true if 30724 the function argument should be copied by the callee instead of 30725 copied by the caller. 30726 30727 For any argument for which the hook returns true, if it can be 30728 determined that the argument is not modified, then a copy need not 30729 be generated. 30730 30731 The default version of this hook always returns false. 30732 30733 -- Macro: CUMULATIVE_ARGS 30734 A C type for declaring a variable that is used as the first 30735 argument of `TARGET_FUNCTION_ARG' and other related values. For 30736 some target machines, the type `int' suffices and can hold the 30737 number of bytes of argument so far. 30738 30739 There is no need to record in `CUMULATIVE_ARGS' anything about the 30740 arguments that have been passed on the stack. The compiler has 30741 other variables to keep track of that. For target machines on 30742 which all arguments are passed on the stack, there is no need to 30743 store anything in `CUMULATIVE_ARGS'; however, the data structure 30744 must exist and should not be empty, so use `int'. 30745 30746 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 30747 If defined, this macro is called before generating any code for a 30748 function, but after the CFUN descriptor for the function has been 30749 created. The back end may use this macro to update CFUN to 30750 reflect an ABI other than that which would normally be used by 30751 default. If the compiler is generating code for a 30752 compiler-generated function, FNDECL may be `NULL'. 30753 30754 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 30755 N_NAMED_ARGS) 30756 A C statement (sans semicolon) for initializing the variable CUM 30757 for the state at the beginning of the argument list. The variable 30758 has type `CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 30759 for the data type of the function which will receive the args, or 30760 0 if the args are to a compiler support library function. For 30761 direct calls that are not libcalls, FNDECL contain the declaration 30762 node of the function. FNDECL is also set when 30763 `INIT_CUMULATIVE_ARGS' is used to find arguments for the function 30764 being compiled. N_NAMED_ARGS is set to the number of named 30765 arguments, including a structure return address if it is passed as 30766 a parameter, when making a call. When processing incoming 30767 arguments, N_NAMED_ARGS is set to -1. 30768 30769 When processing a call to a compiler support library function, 30770 LIBNAME identifies which one. It is a `symbol_ref' rtx which 30771 contains the name of the function, as a string. LIBNAME is 0 when 30772 an ordinary C function call is being processed. Thus, each time 30773 this macro is called, either LIBNAME or FNTYPE is nonzero, but 30774 never both of them at once. 30775 30776 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 30777 Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, 30778 it gets a `MODE' argument instead of FNTYPE, that would be `NULL'. 30779 INDIRECT would always be zero, too. If this macro is not defined, 30780 `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 30781 30782 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 30783 Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 30784 finding the arguments for the function being compiled. If this 30785 macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead. 30786 30787 The value passed for LIBNAME is always 0, since library routines 30788 with special calling conventions are never compiled with GCC. The 30789 argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'. 30790 30791 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t 30792 CA, enum machine_mode MODE, const_tree TYPE, bool NAMED) 30793 This hook updates the summarizer variable pointed to by CA to 30794 advance past an argument in the argument list. The values MODE, 30795 TYPE and NAMED describe that argument. Once this is done, the 30796 variable CUM is suitable for analyzing the _following_ argument 30797 with `TARGET_FUNCTION_ARG', etc. 30798 30799 This hook need not do anything if the argument in question was 30800 passed on the stack. The compiler knows how to track the amount 30801 of stack space used for arguments without any special help. 30802 30803 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE) 30804 If defined, a C expression that is the number of bytes to add to 30805 the offset of the argument passed in memory. This is needed for 30806 the SPU, which passes `char' and `short' arguments in the preferred 30807 slot that is in the middle of the quad word instead of starting at 30808 the top. 30809 30810 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 30811 If defined, a C expression which determines whether, and in which 30812 direction, to pad out an argument with extra space. The value 30813 should be of type `enum direction': either `upward' to pad above 30814 the argument, `downward' to pad below, or `none' to inhibit 30815 padding. 30816 30817 The _amount_ of padding is not controlled by this macro, but by the 30818 target hook `TARGET_FUNCTION_ARG_ROUND_BOUNDARY'. It is always 30819 just enough to reach the next multiple of that boundary. 30820 30821 This macro has a default definition which is right for most 30822 systems. For little-endian machines, the default is to pad 30823 upward. For big-endian machines, the default is to pad downward 30824 for an argument of constant size shorter than an `int', and upward 30825 otherwise. 30826 30827 -- Macro: PAD_VARARGS_DOWN 30828 If defined, a C expression which determines whether the default 30829 implementation of va_arg will attempt to pad down before reading 30830 the next argument, if that argument is smaller than its aligned 30831 space as controlled by `PARM_BOUNDARY'. If this macro is not 30832 defined, all such arguments are padded down if `BYTES_BIG_ENDIAN' 30833 is true. 30834 30835 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 30836 Specify padding for the last element of a block move between 30837 registers and memory. FIRST is nonzero if this is the only 30838 element. Defining this macro allows better control of register 30839 function parameters on big-endian machines, without using 30840 `PARALLEL' rtl. In particular, `MUST_PASS_IN_STACK' need not test 30841 padding and mode of types in registers, as there is no longer a 30842 "wrong" part of a register; For example, a three byte aggregate 30843 may be passed in the high part of a register if so required. 30844 30845 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (enum 30846 machine_mode MODE, const_tree TYPE) 30847 This hook returns the alignment boundary, in bits, of an argument 30848 with the specified mode and type. The default hook returns 30849 `PARM_BOUNDARY' for all arguments. 30850 30851 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY (enum 30852 machine_mode MODE, const_tree TYPE) 30853 Normally, the size of an argument is rounded up to `PARM_BOUNDARY', 30854 which is the default value for this hook. You can define this 30855 hook to return a different value if an argument size must be 30856 rounded to a larger value. 30857 30858 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 30859 A C expression that is nonzero if REGNO is the number of a hard 30860 register in which function arguments are sometimes passed. This 30861 does _not_ include implicit arguments such as the static chain and 30862 the structure-value address. On many machines, no registers can be 30863 used for this purpose since all function arguments are pushed on 30864 the stack. 30865 30866 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 30867 This hook should return true if parameter of type TYPE are passed 30868 as two scalar parameters. By default, GCC will attempt to pack 30869 complex arguments into the target's word size. Some ABIs require 30870 complex arguments to be split and treated as their individual 30871 components. For example, on AIX64, complex floats should be 30872 passed in a pair of floating point registers, even though a 30873 complex float would fit in one 64-bit floating point register. 30874 30875 The default value of this hook is `NULL', which is treated as 30876 always false. 30877 30878 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 30879 This hook returns a type node for `va_list' for the target. The 30880 default version of the hook returns `void*'. 30881 30882 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char 30883 **PNAME, tree *PTREE) 30884 This target hook is used in function `c_common_nodes_and_builtins' 30885 to iterate through the target specific builtin types for va_list. 30886 The variable IDX is used as iterator. PNAME has to be a pointer to 30887 a `const char *' and PTREE a pointer to a `tree' typed variable. 30888 The arguments PNAME and PTREE are used to store the result of this 30889 macro and are set to the name of the va_list builtin type and its 30890 internal type. If the return value of this macro is zero, then 30891 there is no more element. Otherwise the IDX should be increased 30892 for the next call of this macro to iterate through all types. 30893 30894 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 30895 This hook returns the va_list type of the calling convention 30896 specified by FNDECL. The default version of this hook returns 30897 `va_list_type_node'. 30898 30899 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 30900 This hook returns the va_list type of the calling convention 30901 specified by the type of TYPE. If TYPE is not a valid va_list 30902 type, it returns `NULL_TREE'. 30903 30904 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 30905 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 30906 This hook performs target-specific gimplification of 30907 `VA_ARG_EXPR'. The first two parameters correspond to the 30908 arguments to `va_arg'; the latter two are as in 30909 `gimplify.c:gimplify_expr'. 30910 30911 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE) 30912 Define this to return nonzero if the port can handle pointers with 30913 machine mode MODE. The default version of this hook returns true 30914 for both `ptr_mode' and `Pmode'. 30915 30916 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref_s *REF) 30917 Define this to return nonzero if the memory reference REF may 30918 alias with the system C library errno location. The default 30919 version of this hook assumes the system C library errno location 30920 is either a declaration of type int or accessed by dereferencing 30921 a pointer to int. 30922 30923 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode 30924 MODE) 30925 Define this to return nonzero if the port is prepared to handle 30926 insns involving scalar mode MODE. For a scalar mode to be 30927 considered supported, all the basic arithmetic and comparisons 30928 must work. 30929 30930 The default version of this hook returns true for any mode 30931 required to handle the basic C types (as defined by the port). 30932 Included here are the double-word arithmetic supported by the code 30933 in `optabs.c'. 30934 30935 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode 30936 MODE) 30937 Define this to return nonzero if the port is prepared to handle 30938 insns involving vector mode MODE. At the very least, it must have 30939 move patterns for this mode. 30940 30941 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (enum machine_mode 30942 MODE, unsigned HOST_WIDE_INT NELEMS) 30943 Return true if GCC should try to use a scalar mode to store an 30944 array of NELEMS elements, given that each element has mode MODE. 30945 Returning true here overrides the usual `MAX_FIXED_MODE' limit and 30946 allows GCC to use any defined integer mode. 30947 30948 One use of this hook is to support vector load and store operations 30949 that operate on several homogeneous vectors. For example, ARM NEON 30950 has operations like: 30951 30952 int8x8x3_t vld3_s8 (const int8_t *) 30953 30954 where the return type is defined as: 30955 30956 typedef struct int8x8x3_t 30957 { 30958 int8x8_t val[3]; 30959 } int8x8x3_t; 30960 30961 If this hook allows `val' to have a scalar mode, then `int8x8x3_t' 30962 can have the same mode. GCC can then store `int8x8x3_t's in 30963 registers rather than forcing them onto the stack. 30964 30965 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (enum 30966 machine_mode MODE) 30967 Define this to return nonzero for machine modes for which the port 30968 has small register classes. If this target hook returns nonzero 30969 for a given MODE, the compiler will try to minimize the lifetime 30970 of registers in MODE. The hook may be called with `VOIDmode' as 30971 argument. In this case, the hook is expected to return nonzero if 30972 it returns nonzero for any mode. 30973 30974 On some machines, it is risky to let hard registers live across 30975 arbitrary insns. Typically, these machines have instructions that 30976 require values to be in specific registers (like an accumulator), 30977 and reload will fail if the required hard register is used for 30978 another purpose across such an insn. 30979 30980 Passes before reload do not know which hard registers will be used 30981 in an instruction, but the machine modes of the registers set or 30982 used in the instruction are already known. And for some machines, 30983 register classes are small for, say, integer registers but not for 30984 floating point registers. For example, the AMD x86-64 30985 architecture requires specific registers for the legacy x86 30986 integer instructions, but there are many SSE registers for 30987 floating point operations. On such targets, a good strategy may 30988 be to return nonzero from this hook for `INTEGRAL_MODE_P' machine 30989 modes but zero for the SSE register classes. 30990 30991 The default version of this hook returns false for any mode. It 30992 is always safe to redefine this hook to return with a nonzero 30993 value. But if you unnecessarily define it, you will reduce the 30994 amount of optimizations that can be performed in some cases. If 30995 you do not define this hook to return a nonzero value when it is 30996 required, the compiler will run out of spill registers and print a 30997 fatal error message. 30998 30999 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM 31000 If the target has a dedicated flags register, and it needs to use 31001 the post-reload comparison elimination pass, then this value 31002 should be set appropriately. 31003 31004 31005 File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 31006 31007 17.10.8 How Scalar Function Values Are Returned 31008 ----------------------------------------------- 31009 31010 This section discusses the macros that control returning scalars as 31011 values--values that can fit in registers. 31012 31013 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 31014 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 31015 Define this to return an RTX representing the place where a 31016 function returns or receives a value of data type RET_TYPE, a tree 31017 node representing a data type. FN_DECL_OR_TYPE is a tree node 31018 representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function 31019 being called. If OUTGOING is false, the hook should compute the 31020 register in which the caller will see the return value. 31021 Otherwise, the hook should return an RTX representing the place 31022 where a function returns a value. 31023 31024 On many machines, only `TYPE_MODE (RET_TYPE)' is relevant. 31025 (Actually, on most machines, scalar values are returned in the same 31026 place regardless of mode.) The value of the expression is usually 31027 a `reg' RTX for the hard register where the return value is stored. 31028 The value can also be a `parallel' RTX, if the return value is in 31029 multiple places. See `TARGET_FUNCTION_ARG' for an explanation of 31030 the `parallel' form. Note that the callee will populate every 31031 location specified in the `parallel', but if the first element of 31032 the `parallel' contains the whole return value, callers will use 31033 that element as the canonical location and ignore the others. The 31034 m68k port uses this type of `parallel' to return pointers in both 31035 `%a0' (the canonical location) and `%d0'. 31036 31037 If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 31038 the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is 31039 a scalar type. 31040 31041 If the precise function being called is known, FUNC is a tree node 31042 (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 31043 makes it possible to use a different value-returning convention 31044 for specific functions when all their calls are known. 31045 31046 Some target machines have "register windows" so that the register 31047 in which a function returns its value is not the same as the one 31048 in which the caller sees the value. For such machines, you should 31049 return different RTX depending on OUTGOING. 31050 31051 `TARGET_FUNCTION_VALUE' is not used for return values with 31052 aggregate data types, because these are returned in another way. 31053 See `TARGET_STRUCT_VALUE_RTX' and related macros, below. 31054 31055 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 31056 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a 31057 new target instead. 31058 31059 -- Macro: LIBCALL_VALUE (MODE) 31060 A C expression to create an RTX representing the place where a 31061 library function returns a value of mode MODE. 31062 31063 Note that "library function" in this context means a compiler 31064 support routine, used to perform arithmetic, whose name is known 31065 specially by the compiler and was not mentioned in the C code being 31066 compiled. 31067 31068 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode MODE, 31069 const_rtx FUN) 31070 Define this hook if the back-end needs to know the name of the 31071 libcall function in order to determine where the result should be 31072 returned. 31073 31074 The mode of the result is given by MODE and the name of the called 31075 library function is given by FUN. The hook should return an RTX 31076 representing the place where the library function result will be 31077 returned. 31078 31079 If this hook is not defined, then LIBCALL_VALUE will be used. 31080 31081 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 31082 A C expression that is nonzero if REGNO is the number of a hard 31083 register in which the values of called function may come back. 31084 31085 A register whose use for returning values is limited to serving as 31086 the second of a pair (for a value of type `double', say) need not 31087 be recognized by this macro. So for most machines, this definition 31088 suffices: 31089 31090 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 31091 31092 If the machine has register windows, so that the caller and the 31093 called function use different registers for the return value, this 31094 macro should recognize only the caller's register numbers. 31095 31096 This macro has been deprecated. Use 31097 `TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead. 31098 31099 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int 31100 REGNO) 31101 A target hook that return `true' if REGNO is the number of a hard 31102 register in which the values of called function may come back. 31103 31104 A register whose use for returning values is limited to serving as 31105 the second of a pair (for a value of type `double', say) need not 31106 be recognized by this target hook. 31107 31108 If the machine has register windows, so that the caller and the 31109 called function use different registers for the return value, this 31110 target hook should recognize only the caller's register numbers. 31111 31112 If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be 31113 used. 31114 31115 -- Macro: APPLY_RESULT_SIZE 31116 Define this macro if `untyped_call' and `untyped_return' need more 31117 space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and 31118 restoring an arbitrary return value. 31119 31120 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 31121 This hook should return true if values of type TYPE are returned 31122 at the most significant end of a register (in other words, if they 31123 are padded at the least significant end). You can assume that TYPE 31124 is returned in a register; the caller is required to check this. 31125 31126 Note that the register provided by `TARGET_FUNCTION_VALUE' must be 31127 able to hold the complete return value. For example, if a 1-, 2- 31128 or 3-byte structure is returned at the most significant end of a 31129 4-byte register, `TARGET_FUNCTION_VALUE' should provide an 31130 `SImode' rtx. 31131 31132 31133 File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 31134 31135 17.10.9 How Large Values Are Returned 31136 ------------------------------------- 31137 31138 When a function value's mode is `BLKmode' (and in some other cases), 31139 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note 31140 Scalar Return::). Instead, the caller passes the address of a block of 31141 memory in which the value should be stored. This address is called the 31142 "structure value address". 31143 31144 This section describes how to control returning structure values in 31145 memory. 31146 31147 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 31148 const_tree FNTYPE) 31149 This target hook should return a nonzero value to say to return the 31150 function value in memory, just as large structures are always 31151 returned. Here TYPE will be the data type of the value, and FNTYPE 31152 will be the type of the function doing the returning, or `NULL' for 31153 libcalls. 31154 31155 Note that values of mode `BLKmode' must be explicitly handled by 31156 this function. Also, the option `-fpcc-struct-return' takes 31157 effect regardless of this macro. On most systems, it is possible 31158 to leave the hook undefined; this causes a default definition to 31159 be used, whose value is the constant 1 for `BLKmode' values, and 0 31160 otherwise. 31161 31162 Do not use this hook to indicate that structures and unions should 31163 always be returned in memory. You should instead use 31164 `DEFAULT_PCC_STRUCT_RETURN' to indicate this. 31165 31166 -- Macro: DEFAULT_PCC_STRUCT_RETURN 31167 Define this macro to be 1 if all structure and union return values 31168 must be in memory. Since this results in slower code, this should 31169 be defined only if needed for compatibility with other compilers 31170 or with an ABI. If you define this macro to be 0, then the 31171 conventions used for structure and union return values are decided 31172 by the `TARGET_RETURN_IN_MEMORY' target hook. 31173 31174 If not defined, this defaults to the value 1. 31175 31176 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 31177 This target hook should return the location of the structure value 31178 address (normally a `mem' or `reg'), or 0 if the address is passed 31179 as an "invisible" first argument. Note that FNDECL may be `NULL', 31180 for libcalls. You do not need to define this target hook if the 31181 address is always passed as an "invisible" first argument. 31182 31183 On some architectures the place where the structure value address 31184 is found by the called function is not the same place that the 31185 caller put it. This can be due to register windows, or it could 31186 be because the function prologue moves it to a different place. 31187 INCOMING is `1' or `2' when the location is needed in the context 31188 of the called function, and `0' in the context of the caller. 31189 31190 If INCOMING is nonzero and the address is to be found on the 31191 stack, return a `mem' which refers to the frame pointer. If 31192 INCOMING is `2', the result is being used to fetch the structure 31193 value address at the beginning of a function. If you need to emit 31194 adjusting code, you should do it at this point. 31195 31196 -- Macro: PCC_STATIC_STRUCT_RETURN 31197 Define this macro if the usual system convention on the target 31198 machine for returning structures and unions is for the called 31199 function to return the address of a static variable containing the 31200 value. 31201 31202 Do not define this if the usual system convention is for the 31203 caller to pass an address to the subroutine. 31204 31205 This macro has effect in `-fpcc-struct-return' mode, but it does 31206 nothing when you use `-freg-struct-return' mode. 31207 31208 -- Target Hook: enum machine_mode TARGET_GET_RAW_RESULT_MODE (int 31209 REGNO) 31210 This target hook returns the mode to be used when accessing raw 31211 return registers in `__builtin_return'. Define this macro if the 31212 value in REG_RAW_MODE is not correct. 31213 31214 -- Target Hook: enum machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO) 31215 This target hook returns the mode to be used when accessing raw 31216 argument registers in `__builtin_apply_args'. Define this macro 31217 if the value in REG_RAW_MODE is not correct. 31218 31219 31220 File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 31221 31222 17.10.10 Caller-Saves Register Allocation 31223 ----------------------------------------- 31224 31225 If you enable it, GCC can save registers around function calls. This 31226 makes it possible to use call-clobbered registers to hold variables that 31227 must live across calls. 31228 31229 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS) 31230 A C expression to determine whether it is worthwhile to consider 31231 placing a pseudo-register in a call-clobbered hard register and 31232 saving and restoring it around each function call. The expression 31233 should be 1 when this is worth doing, and 0 otherwise. 31234 31235 If you don't define this macro, a default is used which is good on 31236 most machines: `4 * CALLS < REFS'. 31237 31238 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 31239 A C expression specifying which mode is required for saving NREGS 31240 of a pseudo-register in call-clobbered hard register REGNO. If 31241 REGNO is unsuitable for caller save, `VOIDmode' should be 31242 returned. For most machines this macro need not be defined since 31243 GCC will select the smallest suitable mode. 31244 31245 31246 File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 31247 31248 17.10.11 Function Entry and Exit 31249 -------------------------------- 31250 31251 This section describes the macros that output function entry 31252 ("prologue") and exit ("epilogue") code. 31253 31254 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 31255 HOST_WIDE_INT SIZE) 31256 If defined, a function that outputs the assembler code for entry 31257 to a function. The prologue is responsible for setting up the 31258 stack frame, initializing the frame pointer register, saving 31259 registers that must be saved, and allocating SIZE additional bytes 31260 of storage for the local variables. SIZE is an integer. FILE is 31261 a stdio stream to which the assembler code should be output. 31262 31263 The label for the beginning of the function need not be output by 31264 this macro. That has already been done when the macro is run. 31265 31266 To determine which registers to save, the macro can refer to the 31267 array `regs_ever_live': element R is nonzero if hard register R is 31268 used anywhere within the function. This implies the function 31269 prologue should save register R, provided it is not one of the 31270 call-used registers. (`TARGET_ASM_FUNCTION_EPILOGUE' must 31271 likewise use `regs_ever_live'.) 31272 31273 On machines that have "register windows", the function entry code 31274 does not save on the stack the registers that are in the windows, 31275 even if they are supposed to be preserved by function calls; 31276 instead it takes appropriate steps to "push" the register stack, 31277 if any non-call-used registers are used in the function. 31278 31279 On machines where functions may or may not have frame-pointers, the 31280 function entry code must vary accordingly; it must set up the frame 31281 pointer if one is wanted, and not otherwise. To determine whether 31282 a frame pointer is in wanted, the macro can refer to the variable 31283 `frame_pointer_needed'. The variable's value will be 1 at run 31284 time in a function that needs a frame pointer. *Note 31285 Elimination::. 31286 31287 The function entry code is responsible for allocating any stack 31288 space required for the function. This stack space consists of the 31289 regions listed below. In most cases, these regions are allocated 31290 in the order listed, with the last listed region closest to the 31291 top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is 31292 defined, and the highest address if it is not defined). You can 31293 use a different order for a machine if doing so is more convenient 31294 or required for compatibility reasons. Except in cases where 31295 required by standard or by a debugger, there is no reason why the 31296 stack layout used by GCC need agree with that used by other 31297 compilers for a machine. 31298 31299 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 31300 If defined, a function that outputs assembler code at the end of a 31301 prologue. This should be used when the function prologue is being 31302 emitted as RTL, and you have some extra assembler that needs to be 31303 emitted. *Note prologue instruction pattern::. 31304 31305 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 31306 If defined, a function that outputs assembler code at the start of 31307 an epilogue. This should be used when the function epilogue is 31308 being emitted as RTL, and you have some extra assembler that needs 31309 to be emitted. *Note epilogue instruction pattern::. 31310 31311 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 31312 HOST_WIDE_INT SIZE) 31313 If defined, a function that outputs the assembler code for exit 31314 from a function. The epilogue is responsible for restoring the 31315 saved registers and stack pointer to their values when the 31316 function was called, and returning control to the caller. This 31317 macro takes the same arguments as the macro 31318 `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are 31319 determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the 31320 same way. 31321 31322 On some machines, there is a single instruction that does all the 31323 work of returning from the function. On these machines, give that 31324 instruction the name `return' and do not define the macro 31325 `TARGET_ASM_FUNCTION_EPILOGUE' at all. 31326 31327 Do not define a pattern named `return' if you want the 31328 `TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 31329 switches to control whether return instructions or epilogues are 31330 used, define a `return' pattern with a validity condition that 31331 tests the target switches appropriately. If the `return' 31332 pattern's validity condition is false, epilogues will be used. 31333 31334 On machines where functions may or may not have frame-pointers, the 31335 function exit code must vary accordingly. Sometimes the code for 31336 these two cases is completely different. To determine whether a 31337 frame pointer is wanted, the macro can refer to the variable 31338 `frame_pointer_needed'. The variable's value will be 1 when 31339 compiling a function that needs a frame pointer. 31340 31341 Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and 31342 `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 31343 The C variable `current_function_is_leaf' is nonzero for such a 31344 function. *Note Leaf Functions::. 31345 31346 On some machines, some functions pop their arguments on exit while 31347 others leave that for the caller to do. For example, the 68020 31348 when given `-mrtd' pops arguments in functions that take a fixed 31349 number of arguments. 31350 31351 Your definition of the macro `RETURN_POPS_ARGS' decides which 31352 functions pop their own arguments. `TARGET_ASM_FUNCTION_EPILOGUE' 31353 needs to know what was decided. The number of bytes of the current 31354 function's arguments that this function should pop is available in 31355 `crtl->args.pops_args'. *Note Scalar Return::. 31356 31357 * A region of `crtl->args.pretend_args_size' bytes of uninitialized 31358 space just underneath the first argument arriving on the stack. 31359 (This may not be at the very start of the allocated stack region 31360 if the calling sequence has pushed anything else since pushing the 31361 stack arguments. But usually, on such machines, nothing else has 31362 been pushed yet, because the function prologue itself does all the 31363 pushing.) This region is used on machines where an argument may 31364 be passed partly in registers and partly in memory, and, in some 31365 cases to support the features in `<stdarg.h>'. 31366 31367 * An area of memory used to save certain registers used by the 31368 function. The size of this area, which may also include space for 31369 such things as the return address and pointers to previous stack 31370 frames, is machine-specific and usually depends on which registers 31371 have been used in the function. Machines with register windows 31372 often do not require a save area. 31373 31374 * A region of at least SIZE bytes, possibly rounded up to an 31375 allocation boundary, to contain the local variables of the 31376 function. On some machines, this region and the save area may 31377 occur in the opposite order, with the save area closer to the top 31378 of the stack. 31379 31380 * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of 31381 `crtl->outgoing_args_size' bytes to be used for outgoing argument 31382 lists of the function. *Note Stack Arguments::. 31383 31384 -- Macro: EXIT_IGNORE_STACK 31385 Define this macro as a C expression that is nonzero if the return 31386 instruction or the function epilogue ignores the value of the stack 31387 pointer; in other words, if it is safe to delete an instruction to 31388 adjust the stack pointer before a return from the function. The 31389 default is 0. 31390 31391 Note that this macro's value is relevant only for functions for 31392 which frame pointers are maintained. It is never safe to delete a 31393 final stack adjustment in a function that has no frame pointer, 31394 and the compiler knows this regardless of `EXIT_IGNORE_STACK'. 31395 31396 -- Macro: EPILOGUE_USES (REGNO) 31397 Define this macro as a C expression that is nonzero for registers 31398 that are used by the epilogue or the `return' pattern. The stack 31399 and frame pointer registers are already assumed to be used as 31400 needed. 31401 31402 -- Macro: EH_USES (REGNO) 31403 Define this macro as a C expression that is nonzero for registers 31404 that are used by the exception handling mechanism, and so should 31405 be considered live on entry to an exception edge. 31406 31407 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 31408 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 31409 VCALL_OFFSET, tree FUNCTION) 31410 A function that outputs the assembler code for a thunk function, 31411 used to implement C++ virtual function calls with multiple 31412 inheritance. The thunk acts as a wrapper around a virtual 31413 function, adjusting the implicit object parameter before handing 31414 control off to the real function. 31415 31416 First, emit code to add the integer DELTA to the location that 31417 contains the incoming first argument. Assume that this argument 31418 contains a pointer, and is the one used to pass the `this' pointer 31419 in C++. This is the incoming argument _before_ the function 31420 prologue, e.g. `%o0' on a sparc. The addition must preserve the 31421 values of all other incoming arguments. 31422 31423 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 31424 be made after adding `delta'. In particular, if P is the adjusted 31425 pointer, the following adjustment should be made: 31426 31427 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 31428 31429 After the additions, emit code to jump to FUNCTION, which is a 31430 `FUNCTION_DECL'. This is a direct pure jump, not a call, and does 31431 not touch the return address. Hence returning from FUNCTION will 31432 return to whoever called the current `thunk'. 31433 31434 The effect must be as if FUNCTION had been called directly with 31435 the adjusted first argument. This macro is responsible for 31436 emitting all of the code for a thunk function; 31437 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' 31438 are not invoked. 31439 31440 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 31441 been extracted from it.) It might possibly be useful on some 31442 targets, but probably not. 31443 31444 If you do not define this macro, the target-independent code in 31445 the C++ front end will generate a less efficient heavyweight thunk 31446 that calls FUNCTION instead of jumping to it. The generic 31447 approach does not support varargs. 31448 31449 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 31450 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 31451 VCALL_OFFSET, const_tree FUNCTION) 31452 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would 31453 be able to output the assembler code for the thunk function 31454 specified by the arguments it is passed, and false otherwise. In 31455 the latter case, the generic approach will be used by the C++ 31456 front end, with the limitations previously exposed. 31457 31458 31459 File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 31460 31461 17.10.12 Generating Code for Profiling 31462 -------------------------------------- 31463 31464 These macros will help you generate code for profiling. 31465 31466 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 31467 A C statement or compound statement to output to FILE some 31468 assembler code to call the profiling subroutine `mcount'. 31469 31470 The details of how `mcount' expects to be called are determined by 31471 your operating system environment, not by GCC. To figure them out, 31472 compile a small program for profiling using the system's installed 31473 C compiler and look at the assembler code that results. 31474 31475 Older implementations of `mcount' expect the address of a counter 31476 variable to be loaded into some register. The name of this 31477 variable is `LP' followed by the number LABELNO, so you would 31478 generate the name using `LP%d' in a `fprintf'. 31479 31480 -- Macro: PROFILE_HOOK 31481 A C statement or compound statement to output to FILE some assembly 31482 code to call the profiling subroutine `mcount' even the target does 31483 not support profiling. 31484 31485 -- Macro: NO_PROFILE_COUNTERS 31486 Define this macro to be an expression with a nonzero value if the 31487 `mcount' subroutine on your system does not need a counter variable 31488 allocated for each function. This is true for almost all modern 31489 implementations. If you define this macro, you must not use the 31490 LABELNO argument to `FUNCTION_PROFILER'. 31491 31492 -- Macro: PROFILE_BEFORE_PROLOGUE 31493 Define this macro if the code for function profiling should come 31494 before the function prologue. Normally, the profiling code comes 31495 after. 31496 31497 31498 File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 31499 31500 17.10.13 Permitting tail calls 31501 ------------------------------ 31502 31503 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 31504 EXP) 31505 True if it is ok to do sibling call optimization for the specified 31506 call expression EXP. DECL will be the called function, or `NULL' 31507 if this is an indirect call. 31508 31509 It is not uncommon for limitations of calling conventions to 31510 prevent tail calls to functions outside the current unit of 31511 translation, or during PIC compilation. The hook is used to 31512 enforce these restrictions, as the `sibcall' md pattern can not 31513 fail, or fall over to a "normal" call. The criteria for 31514 successful sibling call optimization may vary greatly between 31515 different architectures. 31516 31517 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 31518 Add any hard registers to REGS that are live on entry to the 31519 function. This hook only needs to be defined to provide registers 31520 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 31521 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 31522 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, 31523 FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM, 31524 ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM. 31525 31526 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct 31527 hard_reg_set_container *) 31528 This hook should add additional registers that are computed by the 31529 prologue to the hard regset for shrink-wrapping optimization 31530 purposes. 31531 31532 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree) 31533 True if a function's return statements should be checked for 31534 matching the function's return type. This includes checking for 31535 falling off the end of a non-void function. Return false if no 31536 such check should be made. 31537 31538 31539 File: gccint.info, Node: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling 31540 31541 17.10.14 Stack smashing protection 31542 ---------------------------------- 31543 31544 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 31545 This hook returns a `DECL' node for the external variable to use 31546 for the stack protection guard. This variable is initialized by 31547 the runtime to some random value and is used to initialize the 31548 guard value that is placed at the top of the local stack frame. 31549 The type of this variable must be `ptr_type_node'. 31550 31551 The default version of this hook creates a variable called 31552 `__stack_chk_guard', which is normally defined in `libgcc2.c'. 31553 31554 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 31555 This hook returns a `CALL_EXPR' that alerts the runtime that the 31556 stack protect guard variable has been modified. This expression 31557 should involve a call to a `noreturn' function. 31558 31559 The default version of this hook invokes a function called 31560 `__stack_chk_fail', taking no arguments. This function is 31561 normally defined in `libgcc2.c'. 31562 31563 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, 31564 struct gcc_options *OPTS) 31565 Whether this target supports splitting the stack when the options 31566 described in OPTS have been passed. This is called after options 31567 have been parsed, so the target may reject splitting the stack in 31568 some configurations. The default version of this hook returns 31569 false. If REPORT is true, this function may issue a warning or 31570 error; if REPORT is false, it must simply return a value 31571 31572 31573 File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 31574 31575 17.11 Implementing the Varargs Macros 31576 ===================================== 31577 31578 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that 31579 work without change on machines that pass arguments on the stack. 31580 Other machines require their own implementations of varargs, and the 31581 two machine independent header files must have conditionals to include 31582 it. 31583 31584 ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the 31585 calling convention for `va_start'. The traditional implementation 31586 takes just one argument, which is the variable in which to store the 31587 argument pointer. The ISO implementation of `va_start' takes an 31588 additional second argument. The user is supposed to write the last 31589 named argument of the function here. 31590 31591 However, `va_start' should not use this argument. The way to find the 31592 end of the named arguments is with the built-in functions described 31593 below. 31594 31595 -- Macro: __builtin_saveregs () 31596 Use this built-in function to save the argument registers in 31597 memory so that the varargs mechanism can access them. Both ISO 31598 and traditional versions of `va_start' must use 31599 `__builtin_saveregs', unless you use 31600 `TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 31601 31602 On some machines, `__builtin_saveregs' is open-coded under the 31603 control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'. On 31604 other machines, it calls a routine written in assembler language, 31605 found in `libgcc2.c'. 31606 31607 Code generated for the call to `__builtin_saveregs' appears at the 31608 beginning of the function, as opposed to where the call to 31609 `__builtin_saveregs' is written, regardless of what the code is. 31610 This is because the registers must be saved before the function 31611 starts to use them for its own purposes. 31612 31613 -- Macro: __builtin_next_arg (LASTARG) 31614 This builtin returns the address of the first anonymous stack 31615 argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns 31616 the address of the location above the first anonymous stack 31617 argument. Use it in `va_start' to initialize the pointer for 31618 fetching arguments from the stack. Also use it in `va_start' to 31619 verify that the second parameter LASTARG is the last named argument 31620 of the current function. 31621 31622 -- Macro: __builtin_classify_type (OBJECT) 31623 Since each machine has its own conventions for which data types are 31624 passed in which kind of register, your implementation of `va_arg' 31625 has to embody these conventions. The easiest way to categorize the 31626 specified data type is to use `__builtin_classify_type' together 31627 with `sizeof' and `__alignof__'. 31628 31629 `__builtin_classify_type' ignores the value of OBJECT, considering 31630 only its data type. It returns an integer describing what kind of 31631 type that is--integer, floating, pointer, structure, and so on. 31632 31633 The file `typeclass.h' defines an enumeration that you can use to 31634 interpret the values of `__builtin_classify_type'. 31635 31636 These machine description macros help implement varargs: 31637 31638 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 31639 If defined, this hook produces the machine-specific code for a 31640 call to `__builtin_saveregs'. This code will be moved to the very 31641 beginning of the function, before any parameter access are made. 31642 The return value of this function should be an RTX that contains 31643 the value to use as the return of `__builtin_saveregs'. 31644 31645 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 31646 ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int 31647 *PRETEND_ARGS_SIZE, int SECOND_TIME) 31648 This target hook offers an alternative to using 31649 `__builtin_saveregs' and defining the hook 31650 `TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 31651 register arguments into the stack so that all the arguments appear 31652 to have been passed consecutively on the stack. Once this is 31653 done, you can use the standard implementation of varargs that 31654 works for machines that pass all their arguments on the stack. 31655 31656 The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data 31657 structure, containing the values that are obtained after 31658 processing the named arguments. The arguments MODE and TYPE 31659 describe the last named argument--its machine mode and its data 31660 type as a tree node. 31661 31662 The target hook should do two things: first, push onto the stack 31663 all the argument registers _not_ used for the named arguments, and 31664 second, store the size of the data thus pushed into the 31665 `int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 31666 that you store here will serve as additional offset for setting up 31667 the stack frame. 31668 31669 Because you must generate code to push the anonymous arguments at 31670 compile time without knowing their data types, 31671 `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 31672 have just a single category of argument register and use it 31673 uniformly for all data types. 31674 31675 If the argument SECOND_TIME is nonzero, it means that the 31676 arguments of the function are being analyzed for the second time. 31677 This happens for an inline function, which is not actually 31678 compiled until the end of the source file. The hook 31679 `TARGET_SETUP_INCOMING_VARARGS' should not generate any 31680 instructions in this case. 31681 31682 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 31683 CA) 31684 Define this hook to return `true' if the location where a function 31685 argument is passed depends on whether or not it is a named 31686 argument. 31687 31688 This hook controls how the NAMED argument to `TARGET_FUNCTION_ARG' 31689 is set for varargs and stdarg functions. If this hook returns 31690 `true', the NAMED argument is always true for named arguments, and 31691 false for unnamed arguments. If it returns `false', but 31692 `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all 31693 arguments are treated as named. Otherwise, all named arguments 31694 except the last are treated as named. 31695 31696 You need not define this hook if it always returns `false'. 31697 31698 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 31699 (cumulative_args_t CA) 31700 If you need to conditionally change ABIs so that one works with 31701 `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 31702 `TARGET_SETUP_INCOMING_VARARGS' nor 31703 `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook 31704 to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used, 31705 `false' otherwise. Otherwise, you should not define this hook. 31706 31707 31708 File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 31709 31710 17.12 Trampolines for Nested Functions 31711 ====================================== 31712 31713 A "trampoline" is a small piece of code that is created at run time 31714 when the address of a nested function is taken. It normally resides on 31715 the stack, in the stack frame of the containing function. These macros 31716 tell GCC how to generate code to allocate and initialize a trampoline. 31717 31718 The instructions in the trampoline must do two things: load a constant 31719 address into the static chain register, and jump to the real address of 31720 the nested function. On CISC machines such as the m68k, this requires 31721 two instructions, a move immediate and a jump. Then the two addresses 31722 exist in the trampoline as word-long immediate operands. On RISC 31723 machines, it is often necessary to load each address into a register in 31724 two parts. Then pieces of each address form separate immediate 31725 operands. 31726 31727 The code generated to initialize the trampoline must store the variable 31728 parts--the static chain value and the function address--into the 31729 immediate operands of the instructions. On a CISC machine, this is 31730 simply a matter of copying each address to a memory reference at the 31731 proper offset from the start of the trampoline. On a RISC machine, it 31732 may be necessary to take out pieces of the address and store them 31733 separately. 31734 31735 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 31736 This hook is called by `assemble_trampoline_template' to output, 31737 on the stream F, assembler code for a block of data that contains 31738 the constant parts of a trampoline. This code should not include a 31739 label--the label is taken care of automatically. 31740 31741 If you do not define this hook, it means no template is needed for 31742 the target. Do not define this hook on systems where the block 31743 move code to copy the trampoline into place would be larger than 31744 the code to generate it on the spot. 31745 31746 -- Macro: TRAMPOLINE_SECTION 31747 Return the section into which the trampoline template is to be 31748 placed (*note Sections::). The default value is 31749 `readonly_data_section'. 31750 31751 -- Macro: TRAMPOLINE_SIZE 31752 A C expression for the size in bytes of the trampoline, as an 31753 integer. 31754 31755 -- Macro: TRAMPOLINE_ALIGNMENT 31756 Alignment required for trampolines, in bits. 31757 31758 If you don't define this macro, the value of `FUNCTION_ALIGNMENT' 31759 is used for aligning trampolines. 31760 31761 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 31762 rtx STATIC_CHAIN) 31763 This hook is called to initialize a trampoline. M_TRAMP is an RTX 31764 for the memory block for the trampoline; FNDECL is the 31765 `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX 31766 for the static chain value that should be passed to the function 31767 when it is called. 31768 31769 If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 31770 first thing this hook should do is emit a block move into M_TRAMP 31771 from the memory block returned by `assemble_trampoline_template'. 31772 Note that the block move need only cover the constant parts of the 31773 trampoline. If the target isolates the variable parts of the 31774 trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be 31775 copied. 31776 31777 If the target requires any other actions, such as flushing caches 31778 or enabling stack execution, these actions should be performed 31779 after initializing the trampoline proper. 31780 31781 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 31782 This hook should perform any machine-specific adjustment in the 31783 address of the trampoline. Its argument contains the address of 31784 the memory block that was passed to `TARGET_TRAMPOLINE_INIT'. In 31785 case the address to be used for a function call should be 31786 different from the address at which the template was stored, the 31787 different address should be returned; otherwise ADDR should be 31788 returned unchanged. If this hook is not defined, ADDR will be 31789 used for function calls. 31790 31791 Implementing trampolines is difficult on many machines because they 31792 have separate instruction and data caches. Writing into a stack 31793 location fails to clear the memory in the instruction cache, so when 31794 the program jumps to that location, it executes the old contents. 31795 31796 Here are two possible solutions. One is to clear the relevant parts of 31797 the instruction cache whenever a trampoline is set up. The other is to 31798 make all trampolines identical, by having them jump to a standard 31799 subroutine. The former technique makes trampoline execution faster; the 31800 latter makes initialization faster. 31801 31802 To clear the instruction cache when a trampoline is initialized, define 31803 the following macro. 31804 31805 -- Macro: CLEAR_INSN_CACHE (BEG, END) 31806 If defined, expands to a C expression clearing the _instruction 31807 cache_ in the specified interval. The definition of this macro 31808 would typically be a series of `asm' statements. Both BEG and END 31809 are both pointer expressions. 31810 31811 To use a standard subroutine, define the following macro. In addition, 31812 you must make sure that the instructions in a trampoline fill an entire 31813 cache line with identical instructions, or else ensure that the 31814 beginning of the trampoline code is always aligned at the same point in 31815 its cache line. Look in `m68k.h' as a guide. 31816 31817 -- Macro: TRANSFER_FROM_TRAMPOLINE 31818 Define this macro if trampolines need a special subroutine to do 31819 their work. The macro should expand to a series of `asm' 31820 statements which will be compiled with GCC. They go in a library 31821 function named `__transfer_from_trampoline'. 31822 31823 If you need to avoid executing the ordinary prologue code of a 31824 compiled C function when you jump to the subroutine, you can do so 31825 by placing a special label of your own in the assembler code. Use 31826 one `asm' statement to generate an assembler label, and another to 31827 make the label global. Then trampolines can use that label to 31828 jump directly to your special assembler code. 31829 31830 31831 File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 31832 31833 17.13 Implicit Calls to Library Routines 31834 ======================================== 31835 31836 Here is an explanation of implicit calls to library routines. 31837 31838 -- Macro: DECLARE_LIBRARY_RENAMES 31839 This macro, if defined, should expand to a piece of C code that 31840 will get expanded when compiling functions for libgcc.a. It can 31841 be used to provide alternate names for GCC's internal library 31842 functions if there are ABI-mandated names that the compiler should 31843 provide. 31844 31845 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 31846 This hook should declare additional library routines or rename 31847 existing ones, using the functions `set_optab_libfunc' and 31848 `init_one_libfunc' defined in `optabs.c'. `init_optabs' calls 31849 this macro after initializing all the normal library routines. 31850 31851 The default is to do nothing. Most ports don't need to define 31852 this hook. 31853 31854 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX 31855 If false (the default), internal library routines start with two 31856 underscores. If set to true, these routines start with `__gnu_' 31857 instead. E.g., `__muldi3' changes to `__gnu_muldi3'. This 31858 currently only affects functions defined in `libgcc2.c'. If this 31859 is set to true, the `tm.h' file must also `#define 31860 LIBGCC2_GNU_PREFIX'. 31861 31862 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 31863 This macro should return `true' if the library routine that 31864 implements the floating point comparison operator COMPARISON in 31865 mode MODE will return a boolean, and FALSE if it will return a 31866 tristate. 31867 31868 GCC's own floating point libraries return tristates from the 31869 comparison operators, so the default returns false always. Most 31870 ports don't need to define this macro. 31871 31872 -- Macro: TARGET_LIB_INT_CMP_BIASED 31873 This macro should evaluate to `true' if the integer comparison 31874 functions (like `__cmpdi2') return 0 to indicate that the first 31875 operand is smaller than the second, 1 to indicate that they are 31876 equal, and 2 to indicate that the first operand is greater than 31877 the second. If this macro evaluates to `false' the comparison 31878 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 31879 target uses the routines in `libgcc.a', you do not need to define 31880 this macro. 31881 31882 -- Macro: TARGET_EDOM 31883 The value of `EDOM' on the target machine, as a C integer constant 31884 expression. If you don't define this macro, GCC does not attempt 31885 to deposit the value of `EDOM' into `errno' directly. Look in 31886 `/usr/include/errno.h' to find the value of `EDOM' on your system. 31887 31888 If you do not define `TARGET_EDOM', then compiled code reports 31889 domain errors by calling the library function and letting it 31890 report the error. If mathematical functions on your system use 31891 `matherr' when there is an error, then you should leave 31892 `TARGET_EDOM' undefined so that `matherr' is used normally. 31893 31894 -- Macro: GEN_ERRNO_RTX 31895 Define this macro as a C expression to create an rtl expression 31896 that refers to the global "variable" `errno'. (On certain systems, 31897 `errno' may not actually be a variable.) If you don't define this 31898 macro, a reasonable default is used. 31899 31900 -- Macro: TARGET_C99_FUNCTIONS 31901 When this macro is nonzero, GCC will implicitly optimize `sin' 31902 calls into `sinf' and similarly for other functions defined by C99 31903 standard. The default is zero because a number of existing 31904 systems lack support for these functions in their runtime so this 31905 macro needs to be redefined to one on systems that do support the 31906 C99 runtime. 31907 31908 -- Macro: TARGET_HAS_SINCOS 31909 When this macro is nonzero, GCC will implicitly optimize calls to 31910 `sin' and `cos' with the same argument to a call to `sincos'. The 31911 default is zero. The target has to provide the following 31912 functions: 31913 void sincos(double x, double *sin, double *cos); 31914 void sincosf(float x, float *sin, float *cos); 31915 void sincosl(long double x, long double *sin, long double *cos); 31916 31917 -- Macro: NEXT_OBJC_RUNTIME 31918 Set this macro to 1 to use the "NeXT" Objective-C message sending 31919 conventions by default. This calling convention involves passing 31920 the object, the selector and the method arguments all at once to 31921 the method-lookup library function. This is the usual setting 31922 when targeting Darwin/Mac OS X systems, which have the NeXT 31923 runtime installed. 31924 31925 If the macro is set to 0, the "GNU" Objective-C message sending 31926 convention will be used by default. This convention passes just 31927 the object and the selector to the method-lookup function, which 31928 returns a pointer to the method. 31929 31930 In either case, it remains possible to select code-generation for 31931 the alternate scheme, by means of compiler command line switches. 31932 31933 31934 File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 31935 31936 17.14 Addressing Modes 31937 ====================== 31938 31939 This is about addressing modes. 31940 31941 -- Macro: HAVE_PRE_INCREMENT 31942 -- Macro: HAVE_PRE_DECREMENT 31943 -- Macro: HAVE_POST_INCREMENT 31944 -- Macro: HAVE_POST_DECREMENT 31945 A C expression that is nonzero if the machine supports 31946 pre-increment, pre-decrement, post-increment, or post-decrement 31947 addressing respectively. 31948 31949 -- Macro: HAVE_PRE_MODIFY_DISP 31950 -- Macro: HAVE_POST_MODIFY_DISP 31951 A C expression that is nonzero if the machine supports pre- or 31952 post-address side-effect generation involving constants other than 31953 the size of the memory operand. 31954 31955 -- Macro: HAVE_PRE_MODIFY_REG 31956 -- Macro: HAVE_POST_MODIFY_REG 31957 A C expression that is nonzero if the machine supports pre- or 31958 post-address side-effect generation involving a register 31959 displacement. 31960 31961 -- Macro: CONSTANT_ADDRESS_P (X) 31962 A C expression that is 1 if the RTX X is a constant which is a 31963 valid address. On most machines the default definition of 31964 `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 31965 but a few machines are more restrictive as to which constant 31966 addresses are supported. 31967 31968 -- Macro: CONSTANT_P (X) 31969 `CONSTANT_P', which is defined by target-independent code, accepts 31970 integer-values expressions whose values are not explicitly known, 31971 such as `symbol_ref', `label_ref', and `high' expressions and 31972 `const' arithmetic expressions, in addition to `const_int' and 31973 `const_double' expressions. 31974 31975 -- Macro: MAX_REGS_PER_ADDRESS 31976 A number, the maximum number of registers that can appear in a 31977 valid memory address. Note that it is up to you to specify a 31978 value equal to the maximum number that 31979 `TARGET_LEGITIMATE_ADDRESS_P' would ever accept. 31980 31981 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode 31982 MODE, rtx X, bool STRICT) 31983 A function that returns whether X (an RTX) is a legitimate memory 31984 address on the target machine for a memory operand of mode MODE. 31985 31986 Legitimate addresses are defined in two variants: a strict variant 31987 and a non-strict one. The STRICT parameter chooses which variant 31988 is desired by the caller. 31989 31990 The strict variant is used in the reload pass. It must be defined 31991 so that any pseudo-register that has not been allocated a hard 31992 register is considered a memory reference. This is because in 31993 contexts where some kind of register is required, a 31994 pseudo-register with no hard register must be rejected. For 31995 non-hard registers, the strict variant should look up the 31996 `reg_renumber' array; it should then proceed using the hard 31997 register number in the array, or treat the pseudo as a memory 31998 reference if the array holds `-1'. 31999 32000 The non-strict variant is used in other passes. It must be 32001 defined to accept all pseudo-registers in every context where some 32002 kind of register is required. 32003 32004 Normally, constant addresses which are the sum of a `symbol_ref' 32005 and an integer are stored inside a `const' RTX to mark them as 32006 constant. Therefore, there is no need to recognize such sums 32007 specifically as legitimate addresses. Normally you would simply 32008 recognize any `const' as legitimate. 32009 32010 Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant 32011 sums that are not marked with `const'. It assumes that a naked 32012 `plus' indicates indexing. If so, then you _must_ reject such 32013 naked constant sums as illegitimate addresses, so that none of 32014 them will be given to `PRINT_OPERAND_ADDRESS'. 32015 32016 On some machines, whether a symbolic address is legitimate depends 32017 on the section that the address refers to. On these machines, 32018 define the target hook `TARGET_ENCODE_SECTION_INFO' to store the 32019 information into the `symbol_ref', and then check for it here. 32020 When you see a `const', you will have to look inside it to find the 32021 `symbol_ref' in order to determine the section. *Note Assembler 32022 Format::. 32023 32024 Some ports are still using a deprecated legacy substitute for this 32025 hook, the `GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 32026 syntax: 32027 32028 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 32029 32030 and should `goto LABEL' if the address X is a valid address on the 32031 target machine for a memory operand of mode MODE. 32032 32033 Compiler source files that want to use the strict variant of this 32034 macro define the macro `REG_OK_STRICT'. You should use an `#ifdef 32035 REG_OK_STRICT' conditional to define the strict variant in that 32036 case and the non-strict variant otherwise. 32037 32038 Using the hook is usually simpler because it limits the number of 32039 files that are recompiled when changes are made. 32040 32041 -- Macro: TARGET_MEM_CONSTRAINT 32042 A single character to be used instead of the default `'m'' 32043 character for general memory addresses. This defines the 32044 constraint letter which matches the memory addresses accepted by 32045 `TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 32046 support new address formats in your back end without changing the 32047 semantics of the `'m'' constraint. This is necessary in order to 32048 preserve functionality of inline assembly constructs using the 32049 `'m'' constraint. 32050 32051 -- Macro: FIND_BASE_TERM (X) 32052 A C expression to determine the base term of address X, or to 32053 provide a simplified version of X from which `alias.c' can easily 32054 find the base term. This macro is used in only two places: 32055 `find_base_value' and `find_base_term' in `alias.c'. 32056 32057 It is always safe for this macro to not be defined. It exists so 32058 that alias analysis can understand machine-dependent addresses. 32059 32060 The typical use of this macro is to handle addresses containing a 32061 label_ref or symbol_ref within an UNSPEC. 32062 32063 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum 32064 machine_mode MODE) 32065 This hook is given an invalid memory address X for an operand of 32066 mode MODE and should try to return a valid memory address. 32067 32068 X will always be the result of a call to `break_out_memory_refs', 32069 and OLDX will be the operand that was given to that function to 32070 produce X. 32071 32072 The code of the hook should not alter the substructure of X. If 32073 it transforms X into a more legitimate form, it should return the 32074 new X. 32075 32076 It is not necessary for this hook to come up with a legitimate 32077 address, with the exception of native TLS addresses (*note 32078 Emulated TLS::). The compiler has standard ways of doing so in 32079 all cases. In fact, if the target supports only emulated TLS, it 32080 is safe to omit this hook or make it return X if it cannot find a 32081 valid way to legitimize the address. But often a machine-dependent 32082 strategy can generate better code. 32083 32084 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 32085 WIN) 32086 A C compound statement that attempts to replace X, which is an 32087 address that needs reloading, with a valid memory address for an 32088 operand of mode MODE. WIN will be a C statement label elsewhere 32089 in the code. It is not necessary to define this macro, but it 32090 might be useful for performance reasons. 32091 32092 For example, on the i386, it is sometimes possible to use a single 32093 reload register instead of two by reloading a sum of two pseudo 32094 registers into a register. On the other hand, for number of RISC 32095 processors offsets are limited so that often an intermediate 32096 address needs to be generated in order to address a stack slot. 32097 By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 32098 intermediate addresses generated for adjacent some stack slots can 32099 be made identical, and thus be shared. 32100 32101 _Note_: This macro should be used with caution. It is necessary 32102 to know something of how reload works in order to effectively use 32103 this, and it is quite easy to produce macros that build in too 32104 much knowledge of reload internals. 32105 32106 _Note_: This macro must be able to reload an address created by a 32107 previous invocation of this macro. If it fails to handle such 32108 addresses then the compiler may generate incorrect code or abort. 32109 32110 The macro definition should use `push_reload' to indicate parts 32111 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 32112 suitable to be passed unaltered to `push_reload'. 32113 32114 The code generated by this macro must not alter the substructure of 32115 X. If it transforms X into a more legitimate form, it should 32116 assign X (which will always be a C variable) a new value. This 32117 also applies to parts that you change indirectly by calling 32118 `push_reload'. 32119 32120 The macro definition may use `strict_memory_address_p' to test if 32121 the address has become legitimate. 32122 32123 If you want to change only a part of X, one standard way of doing 32124 this is to use `copy_rtx'. Note, however, that it unshares only a 32125 single level of rtl. Thus, if the part to be changed is not at the 32126 top level, you'll need to replace first the top level. It is not 32127 necessary for this macro to come up with a legitimate address; 32128 but often a machine-dependent strategy can generate better code. 32129 32130 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR, 32131 addr_space_t ADDRSPACE) 32132 This hook returns `true' if memory address ADDR in address space 32133 ADDRSPACE can have different meanings depending on the machine 32134 mode of the memory reference it is used for or if the address is 32135 valid for some modes but not others. 32136 32137 Autoincrement and autodecrement addresses typically have 32138 mode-dependent effects because the amount of the increment or 32139 decrement is the size of the operand being addressed. Some 32140 machines have other mode-dependent addresses. Many RISC machines 32141 have no mode-dependent addresses. 32142 32143 You may assume that ADDR is a valid address for the machine. 32144 32145 The default version of this hook returns `false'. 32146 32147 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (enum machine_mode 32148 MODE, rtx X) 32149 This hook returns true if X is a legitimate constant for a 32150 MODE-mode immediate operand on the target machine. You can assume 32151 that X satisfies `CONSTANT_P', so you need not check this. 32152 32153 The default definition returns true. 32154 32155 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 32156 This hook is used to undo the possibly obfuscating effects of the 32157 `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target 32158 macros. Some backend implementations of these macros wrap symbol 32159 references inside an `UNSPEC' rtx to represent PIC or similar 32160 addressing modes. This target hook allows GCC's optimizers to 32161 understand the semantics of these opaque `UNSPEC's by converting 32162 them back into their original form. 32163 32164 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X) 32165 This hook should return true if X should not be emitted into debug 32166 sections. 32167 32168 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (enum machine_mode 32169 MODE, rtx X) 32170 This hook should return true if X is of a form that cannot (or 32171 should not) be spilled to the constant pool. MODE is the mode of 32172 X. 32173 32174 The default version of this hook returns false. 32175 32176 The primary reason to define this hook is to prevent reload from 32177 deciding that a non-legitimate constant would be better reloaded 32178 from the constant pool instead of spilling and reloading a register 32179 holding the constant. This restriction is often true of addresses 32180 of TLS symbols for various targets. 32181 32182 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum 32183 machine_mode MODE, const_rtx X) 32184 This hook should return true if pool entries for constant X can be 32185 placed in an `object_block' structure. MODE is the mode of X. 32186 32187 The default version returns false for all constants. 32188 32189 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL) 32190 This hook should return true if pool entries for DECL should be 32191 placed in an `object_block' structure. 32192 32193 The default version returns true for all decls. 32194 32195 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool 32196 MD_FN, bool SQRT) 32197 This hook should return the DECL of a function that implements 32198 reciprocal of the builtin function with builtin function code FN, 32199 or `NULL_TREE' if such a function is not available. MD_FN is true 32200 when FN is a code of a machine-dependent builtin function. When 32201 SQRT is true, additional optimizations that apply only to the 32202 reciprocal of a square root function are performed, and only 32203 reciprocals of `sqrt' function are valid. 32204 32205 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 32206 This hook should return the DECL of a function F that given an 32207 address ADDR as an argument returns a mask M that can be used to 32208 extract from two vectors the relevant data that resides in ADDR in 32209 case ADDR is not properly aligned. 32210 32211 The autovectorizer, when vectorizing a load operation from an 32212 address ADDR that may be unaligned, will generate two vector loads 32213 from the two aligned addresses around ADDR. It then generates a 32214 `REALIGN_LOAD' operation to extract the relevant data from the two 32215 loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and 32216 V2, are the two vectors, each of size VS, and the third argument, 32217 OFF, defines how the data will be extracted from these two 32218 vectors: if OFF is 0, then the returned vector is V2; otherwise, 32219 the returned vector is composed from the last VS-OFF elements of 32220 V1 concatenated to the first OFF elements of V2. 32221 32222 If this hook is defined, the autovectorizer will generate a call 32223 to F (using the DECL tree that this hook returns) and will use the 32224 return value of F as the argument OFF to `REALIGN_LOAD'. 32225 Therefore, the mask M returned by F should comply with the 32226 semantics expected by `REALIGN_LOAD' described above. If this 32227 hook is not defined, then ADDR will be used as the argument OFF to 32228 `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 32229 will be considered. 32230 32231 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum 32232 vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN) 32233 Returns cost of different scalar or vector statements for 32234 vectorization cost model. For vector memory operations the cost 32235 may depend on type (VECTYPE) and misalignment value (MISALIGN). 32236 32237 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 32238 (const_tree TYPE, bool IS_PACKED) 32239 Return true if vector alignment is reachable (by peeling N 32240 iterations) for the given type. 32241 32242 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (enum 32243 MACHINE_MODE, const unsigned char *SEL) 32244 Return true if a vector created for `vec_perm_const' is valid. 32245 32246 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned 32247 CODE, tree DEST_TYPE, tree SRC_TYPE) 32248 This hook should return the DECL of a function that implements 32249 conversion of the input vector of type SRC_TYPE to type DEST_TYPE. 32250 The value of CODE is one of the enumerators in `enum tree_code' and 32251 specifies how the conversion is to be applied (truncation, 32252 rounding, etc.). 32253 32254 If this hook is defined, the autovectorizer will use the 32255 `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 32256 conversion. Otherwise, it will return `NULL_TREE'. 32257 32258 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION 32259 (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 32260 This hook should return the decl of a function that implements the 32261 vectorized variant of the builtin function with builtin function 32262 code CODE or `NULL_TREE' if such a function is not available. The 32263 value of FNDECL is the builtin function declaration. The return 32264 type of the vectorized function shall be of vector type 32265 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 32266 32267 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT 32268 (enum machine_mode MODE, const_tree TYPE, int MISALIGNMENT, 32269 bool IS_PACKED) 32270 This hook should return true if the target supports misaligned 32271 vector store/load of a specific factor denoted in the MISALIGNMENT 32272 parameter. The vector store/load should be of machine mode MODE 32273 and the elements in the vectors should be of type TYPE. IS_PACKED 32274 parameter is true if the memory access is defined in a packed 32275 struct. 32276 32277 -- Target Hook: enum machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE 32278 (enum machine_mode MODE) 32279 This hook should return the preferred mode for vectorizing scalar 32280 mode MODE. The default is equal to `word_mode', because the 32281 vectorizer can do some transformations even in absence of 32282 specialized SIMD hardware. 32283 32284 -- Target Hook: unsigned int 32285 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void) 32286 This hook should return a mask of sizes that should be iterated 32287 over after trying to autovectorize using the vector size derived 32288 from the mode returned by `TARGET_VECTORIZE_PREFERRED_SIMD_MODE'. 32289 The default is zero which means to not iterate over other vector 32290 sizes. 32291 32292 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop 32293 *LOOP_INFO) 32294 This hook should initialize target-specific data structures in 32295 preparation for modeling the costs of vectorizing a loop or basic 32296 block. The default allocates three unsigned integers for 32297 accumulating costs for the prologue, body, and epilogue of the 32298 loop or basic block. If LOOP_INFO is non-NULL, it identifies the 32299 loop being vectorized; otherwise a single block is being 32300 vectorized. 32301 32302 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA, 32303 int COUNT, enum vect_cost_for_stmt KIND, struct 32304 _stmt_vec_info *STMT_INFO, int MISALIGN, enum 32305 vect_cost_model_location WHERE) 32306 This hook should update the target-specific DATA in response to 32307 adding COUNT copies of the given KIND of statement to a loop or 32308 basic block. The default adds the builtin vectorizer cost for the 32309 copies of the statement to the accumulator specified by WHERE, 32310 (the prologue, body, or epilogue) and returns the amount added. 32311 The return value should be viewed as a tentative cost that may 32312 later be revised. 32313 32314 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, 32315 unsigned *PROLOGUE_COST, unsigned *BODY_COST, unsigned 32316 *EPILOGUE_COST) 32317 This hook should complete calculations of the cost of vectorizing 32318 a loop or basic block based on DATA, and return the prologue, 32319 body, and epilogue costs as unsigned integers. The default 32320 returns the value of the three accumulators. 32321 32322 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA) 32323 This hook should release DATA and any related data structures 32324 allocated by TARGET_VECTORIZE_INIT_COST. The default releases the 32325 accumulator. 32326 32327 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree) 32328 This hook should return the built-in decl needed to load a vector 32329 of the given type within a transaction. 32330 32331 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree) 32332 This hook should return the built-in decl needed to store a vector 32333 of the given type within a transaction. 32334 32335 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree 32336 MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE) 32337 Target builtin that implements vector gather operation. 32338 MEM_VECTYPE is the vector type of the load and INDEX_TYPE is 32339 scalar type of the index, scaled by SCALE. The default is 32340 `NULL_TREE' which means to not vectorize gather loads. 32341 32342 32343 File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 32344 32345 17.15 Anchored Addresses 32346 ======================== 32347 32348 GCC usually addresses every static object as a separate entity. For 32349 example, if we have: 32350 32351 static int a, b, c; 32352 int foo (void) { return a + b + c; } 32353 32354 the code for `foo' will usually calculate three separate symbolic 32355 addresses: those of `a', `b' and `c'. On some targets, it would be 32356 better to calculate just one symbolic address and access the three 32357 variables relative to it. The equivalent pseudocode would be something 32358 like: 32359 32360 int foo (void) 32361 { 32362 register int *xr = &x; 32363 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 32364 } 32365 32366 (which isn't valid C). We refer to shared addresses like `x' as 32367 "section anchors". Their use is controlled by `-fsection-anchors'. 32368 32369 The hooks below describe the target properties that GCC needs to know 32370 in order to make effective use of section anchors. It won't use 32371 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or 32372 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 32373 32374 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 32375 The minimum offset that should be applied to a section anchor. On 32376 most targets, it should be the smallest offset that can be applied 32377 to a base register while still giving a legitimate address for 32378 every mode. The default value is 0. 32379 32380 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 32381 Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) 32382 offset that should be applied to section anchors. The default 32383 value is 0. 32384 32385 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 32386 Write the assembly code to define section anchor X, which is a 32387 `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true. The 32388 hook is called with the assembly output position set to the 32389 beginning of `SYMBOL_REF_BLOCK (X)'. 32390 32391 If `ASM_OUTPUT_DEF' is available, the hook's default definition 32392 uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'. 32393 If `ASM_OUTPUT_DEF' is not available, the hook's default definition 32394 is `NULL', which disables the use of section anchors altogether. 32395 32396 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 32397 Return true if GCC should attempt to use anchors to access 32398 `SYMBOL_REF' X. You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 32399 and `!SYMBOL_REF_ANCHOR_P (X)'. 32400 32401 The default version is correct for most targets, but you might 32402 need to intercept this hook to handle things like target-specific 32403 attributes or target-specific sections. 32404 32405 32406 File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 32407 32408 17.16 Condition Code Status 32409 =========================== 32410 32411 The macros in this section can be split in two families, according to 32412 the two ways of representing condition codes in GCC. 32413 32414 The first representation is the so called `(cc0)' representation 32415 (*note Jump Patterns::), where all instructions can have an implicit 32416 clobber of the condition codes. The second is the condition code 32417 register representation, which provides better schedulability for 32418 architectures that do have a condition code register, but on which most 32419 instructions do not affect it. The latter category includes most RISC 32420 machines. 32421 32422 The implicit clobbering poses a strong restriction on the placement of 32423 the definition and use of the condition code, which need to be in 32424 adjacent insns for machines using `(cc0)'. This can prevent important 32425 optimizations on some machines. For example, on the IBM RS/6000, there 32426 is a delay for taken branches unless the condition code register is set 32427 three instructions earlier than the conditional branch. The instruction 32428 scheduler cannot perform this optimization if it is not permitted to 32429 separate the definition and use of the condition code register. 32430 32431 For this reason, it is possible and suggested to use a register to 32432 represent the condition code for new ports. If there is a specific 32433 condition code register in the machine, use a hard register. If the 32434 condition code or comparison result can be placed in any general 32435 register, or if there are multiple condition registers, use a pseudo 32436 register. Registers used to store the condition code value will 32437 usually have a mode that is in class `MODE_CC'. 32438 32439 Alternatively, you can use `BImode' if the comparison operator is 32440 specified already in the compare instruction. In this case, you are not 32441 interested in most macros in this section. 32442 32443 * Menu: 32444 32445 * CC0 Condition Codes:: Old style representation of condition codes. 32446 * MODE_CC Condition Codes:: Modern representation of condition codes. 32447 * Cond Exec Macros:: Macros to control conditional execution. 32448 32449 32450 File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 32451 32452 17.16.1 Representation of condition codes using `(cc0)' 32453 ------------------------------------------------------- 32454 32455 The file `conditions.h' defines a variable `cc_status' to describe how 32456 the condition code was computed (in case the interpretation of the 32457 condition code depends on the instruction that it was set by). This 32458 variable contains the RTL expressions on which the condition code is 32459 currently based, and several standard flags. 32460 32461 Sometimes additional machine-specific flags must be defined in the 32462 machine description header file. It can also add additional 32463 machine-specific information by defining `CC_STATUS_MDEP'. 32464 32465 -- Macro: CC_STATUS_MDEP 32466 C code for a data type which is used for declaring the `mdep' 32467 component of `cc_status'. It defaults to `int'. 32468 32469 This macro is not used on machines that do not use `cc0'. 32470 32471 -- Macro: CC_STATUS_MDEP_INIT 32472 A C expression to initialize the `mdep' field to "empty". The 32473 default definition does nothing, since most machines don't use the 32474 field anyway. If you want to use the field, you should probably 32475 define this macro to initialize it. 32476 32477 This macro is not used on machines that do not use `cc0'. 32478 32479 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 32480 A C compound statement to set the components of `cc_status' 32481 appropriately for an insn INSN whose body is EXP. It is this 32482 macro's responsibility to recognize insns that set the condition 32483 code as a byproduct of other activity as well as those that 32484 explicitly set `(cc0)'. 32485 32486 This macro is not used on machines that do not use `cc0'. 32487 32488 If there are insns that do not set the condition code but do alter 32489 other machine registers, this macro must check to see whether they 32490 invalidate the expressions that the condition code is recorded as 32491 reflecting. For example, on the 68000, insns that store in address 32492 registers do not set the condition code, which means that usually 32493 `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns. 32494 But suppose that the previous insn set the condition code based on 32495 location `a4@(102)' and the current insn stores a new value in 32496 `a4'. Although the condition code is not changed by this, it will 32497 no longer be true that it reflects the contents of `a4@(102)'. 32498 Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case 32499 to say that nothing is known about the condition code value. 32500 32501 The definition of `NOTICE_UPDATE_CC' must be prepared to deal with 32502 the results of peephole optimization: insns whose patterns are 32503 `parallel' RTXs containing various `reg', `mem' or constants which 32504 are just the operands. The RTL structure of these insns is not 32505 sufficient to indicate what the insns actually do. What 32506 `NOTICE_UPDATE_CC' should do when it sees one is just to run 32507 `CC_STATUS_INIT'. 32508 32509 A possible definition of `NOTICE_UPDATE_CC' is to call a function 32510 that looks at an attribute (*note Insn Attributes::) named, for 32511 example, `cc'. This avoids having detailed information about 32512 patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'. 32513 32514 32515 File: gccint.info, Node: MODE_CC Condition Codes, Next: Cond Exec Macros, Prev: CC0 Condition Codes, Up: Condition Code 32516 32517 17.16.2 Representation of condition codes using registers 32518 --------------------------------------------------------- 32519 32520 -- Macro: SELECT_CC_MODE (OP, X, Y) 32521 On many machines, the condition code may be produced by other 32522 instructions than compares, for example the branch can use 32523 directly the condition code set by a subtract instruction. 32524 However, on some machines when the condition code is set this way 32525 some bits (such as the overflow bit) are not set in the same way 32526 as a test instruction, so that a different branch instruction must 32527 be used for some conditional branches. When this happens, use the 32528 machine mode of the condition code register to record different 32529 formats of the condition code register. Modes can also be used to 32530 record which compare instruction (e.g. a signed or an unsigned 32531 comparison) produced the condition codes. 32532 32533 If other modes than `CCmode' are required, add them to 32534 `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode 32535 given an operand of a compare. This is needed because the modes 32536 have to be chosen not only during RTL generation but also, for 32537 example, by instruction combination. The result of 32538 `SELECT_CC_MODE' should be consistent with the mode used in the 32539 patterns; for example to support the case of the add on the SPARC 32540 discussed above, we have the pattern 32541 32542 (define_insn "" 32543 [(set (reg:CC_NOOV 0) 32544 (compare:CC_NOOV 32545 (plus:SI (match_operand:SI 0 "register_operand" "%r") 32546 (match_operand:SI 1 "arith_operand" "rI")) 32547 (const_int 0)))] 32548 "" 32549 "...") 32550 32551 together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for 32552 comparisons whose argument is a `plus': 32553 32554 #define SELECT_CC_MODE(OP,X,Y) \ 32555 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 32556 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \ 32557 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 32558 || GET_CODE (X) == NEG) \ 32559 ? CC_NOOVmode : CCmode)) 32560 32561 Another reason to use modes is to retain information on which 32562 operands were used by the comparison; see `REVERSIBLE_CC_MODE' 32563 later in this section. 32564 32565 You should define this macro if and only if you define extra CC 32566 modes in `MACHINE-modes.def'. 32567 32568 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx 32569 *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) (CODE, OP0, OP1, 32570 OP0_PRESERVE_VALUE) 32571 On some machines not all possible comparisons are defined, but you 32572 can convert an invalid comparison into a valid one. For example, 32573 the Alpha does not have a `GT' comparison, but you can use an `LT' 32574 comparison instead and swap the order of the operands. 32575 32576 On such machines, implement this hook to do any required 32577 conversions. CODE is the initial comparison code and OP0 and OP1 32578 are the left and right operands of the comparison, respectively. 32579 If OP0_PRESERVE_VALUE is `true' the implementation is not allowed 32580 to change the value of OP0 since the value might be used in RTXs 32581 which aren't comparisons. E.g. the implementation is not allowed 32582 to swap operands in that case. 32583 32584 GCC will not assume that the comparison resulting from this macro 32585 is valid but will see if the resulting insn matches a pattern in 32586 the `md' file. 32587 32588 You need not to implement this hook if it would never change the 32589 comparison code or operands. 32590 32591 -- Macro: REVERSIBLE_CC_MODE (MODE) 32592 A C expression whose value is one if it is always safe to reverse a 32593 comparison whose mode is MODE. If `SELECT_CC_MODE' can ever 32594 return MODE for a floating-point inequality comparison, then 32595 `REVERSIBLE_CC_MODE (MODE)' must be zero. 32596 32597 You need not define this macro if it would always returns zero or 32598 if the floating-point format is anything other than 32599 `IEEE_FLOAT_FORMAT'. For example, here is the definition used on 32600 the SPARC, where floating-point inequality comparisons are always 32601 given `CCFPEmode': 32602 32603 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode) 32604 32605 -- Macro: REVERSE_CONDITION (CODE, MODE) 32606 A C expression whose value is reversed condition code of the CODE 32607 for comparison done in CC_MODE MODE. The macro is used only in 32608 case `REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 32609 case machine has some non-standard way how to reverse certain 32610 conditionals. For instance in case all floating point conditions 32611 are non-trapping, compiler may freely convert unordered compares 32612 to ordered one. Then definition may look like: 32613 32614 #define REVERSE_CONDITION(CODE, MODE) \ 32615 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 32616 : reverse_condition_maybe_unordered (CODE)) 32617 32618 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 32619 *P1, unsigned int *P2) 32620 On targets which do not use `(cc0)', and which use a hard register 32621 rather than a pseudo-register to hold condition codes, the regular 32622 CSE passes are often not able to identify cases in which the hard 32623 register is set to a common value. Use this hook to enable a 32624 small pass which optimizes such cases. This hook should return 32625 true to enable this pass, and it should set the integers to which 32626 its arguments point to the hard register numbers used for 32627 condition codes. When there is only one such register, as is true 32628 on most systems, the integer pointed to by P2 should be set to 32629 `INVALID_REGNUM'. 32630 32631 The default version of this hook returns false. 32632 32633 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum 32634 machine_mode M1, enum machine_mode M2) 32635 On targets which use multiple condition code modes in class 32636 `MODE_CC', it is sometimes the case that a comparison can be 32637 validly done in more than one mode. On such a system, define this 32638 target hook to take two mode arguments and to return a mode in 32639 which both comparisons may be validly done. If there is no such 32640 mode, return `VOIDmode'. 32641 32642 The default version of this hook checks whether the modes are the 32643 same. If they are, it returns that mode. If they are different, 32644 it returns `VOIDmode'. 32645 32646 32647 File: gccint.info, Node: Cond Exec Macros, Prev: MODE_CC Condition Codes, Up: Condition Code 32648 32649 17.16.3 Macros to control conditional execution 32650 ----------------------------------------------- 32651 32652 There is one macro that may need to be defined for targets supporting 32653 conditional execution, independent of how they represent conditional 32654 branches. 32655 32656 32657 File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 32658 32659 17.17 Describing Relative Costs of Operations 32660 ============================================= 32661 32662 These macros let you describe the relative speed of various operations 32663 on the target machine. 32664 32665 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 32666 A C expression for the cost of moving data of mode MODE from a 32667 register in class FROM to one in class TO. The classes are 32668 expressed using the enumeration values such as `GENERAL_REGS'. A 32669 value of 2 is the default; other values are interpreted relative to 32670 that. 32671 32672 It is not required that the cost always equal 2 when FROM is the 32673 same as TO; on some machines it is expensive to move between 32674 registers if they are not general registers. 32675 32676 If reload sees an insn consisting of a single `set' between two 32677 hard registers, and if `REGISTER_MOVE_COST' applied to their 32678 classes returns a value of 2, reload does not check to ensure that 32679 the constraints of the insn are met. Setting a cost of other than 32680 2 will allow reload to verify that the constraints are met. You 32681 should do this if the `movM' pattern's constraints do not allow 32682 such copying. 32683 32684 These macros are obsolete, new ports should use the target hook 32685 `TARGET_REGISTER_MOVE_COST' instead. 32686 32687 -- Target Hook: int TARGET_REGISTER_MOVE_COST (enum machine_mode MODE, 32688 reg_class_t FROM, reg_class_t TO) 32689 This target hook should return the cost of moving data of mode MODE 32690 from a register in class FROM to one in class TO. The classes are 32691 expressed using the enumeration values such as `GENERAL_REGS'. A 32692 value of 2 is the default; other values are interpreted relative to 32693 that. 32694 32695 It is not required that the cost always equal 2 when FROM is the 32696 same as TO; on some machines it is expensive to move between 32697 registers if they are not general registers. 32698 32699 If reload sees an insn consisting of a single `set' between two 32700 hard registers, and if `TARGET_REGISTER_MOVE_COST' applied to their 32701 classes returns a value of 2, reload does not check to ensure that 32702 the constraints of the insn are met. Setting a cost of other than 32703 2 will allow reload to verify that the constraints are met. You 32704 should do this if the `movM' pattern's constraints do not allow 32705 such copying. 32706 32707 The default version of this function returns 2. 32708 32709 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 32710 A C expression for the cost of moving data of mode MODE between a 32711 register of class CLASS and memory; IN is zero if the value is to 32712 be written to memory, nonzero if it is to be read in. This cost 32713 is relative to those in `REGISTER_MOVE_COST'. If moving between 32714 registers and memory is more expensive than between two registers, 32715 you should define this macro to express the relative cost. 32716 32717 If you do not define this macro, GCC uses a default cost of 4 plus 32718 the cost of copying via a secondary reload register, if one is 32719 needed. If your machine requires a secondary reload register to 32720 copy between memory and a register of CLASS but the reload 32721 mechanism is more complex than copying via an intermediate, define 32722 this macro to reflect the actual cost of the move. 32723 32724 GCC defines the function `memory_move_secondary_cost' if secondary 32725 reloads are needed. It computes the costs due to copying via a 32726 secondary register. If your machine copies from memory using a 32727 secondary register in the conventional way but the default base 32728 value of 4 is not correct for your machine, define this macro to 32729 add some other value to the result of that function. The 32730 arguments to that function are the same as to this macro. 32731 32732 These macros are obsolete, new ports should use the target hook 32733 `TARGET_MEMORY_MOVE_COST' instead. 32734 32735 -- Target Hook: int TARGET_MEMORY_MOVE_COST (enum machine_mode MODE, 32736 reg_class_t RCLASS, bool IN) 32737 This target hook should return the cost of moving data of mode MODE 32738 between a register of class RCLASS and memory; IN is `false' if 32739 the value is to be written to memory, `true' if it is to be read 32740 in. This cost is relative to those in `TARGET_REGISTER_MOVE_COST'. 32741 If moving between registers and memory is more expensive than 32742 between two registers, you should add this target hook to express 32743 the relative cost. 32744 32745 If you do not add this target hook, GCC uses a default cost of 4 32746 plus the cost of copying via a secondary reload register, if one is 32747 needed. If your machine requires a secondary reload register to 32748 copy between memory and a register of RCLASS but the reload 32749 mechanism is more complex than copying via an intermediate, use 32750 this target hook to reflect the actual cost of the move. 32751 32752 GCC defines the function `memory_move_secondary_cost' if secondary 32753 reloads are needed. It computes the costs due to copying via a 32754 secondary register. If your machine copies from memory using a 32755 secondary register in the conventional way but the default base 32756 value of 4 is not correct for your machine, use this target hook 32757 to add some other value to the result of that function. The 32758 arguments to that function are the same as to this target hook. 32759 32760 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 32761 A C expression for the cost of a branch instruction. A value of 1 32762 is the default; other values are interpreted relative to that. 32763 Parameter SPEED_P is true when the branch in question should be 32764 optimized for speed. When it is false, `BRANCH_COST' should 32765 return a value optimal for code size rather than performance. 32766 PREDICTABLE_P is true for well-predicted branches. On many 32767 architectures the `BRANCH_COST' can be reduced then. 32768 32769 Here are additional macros which do not specify precise relative costs, 32770 but only that certain actions are more expensive than GCC would 32771 ordinarily expect. 32772 32773 -- Macro: SLOW_BYTE_ACCESS 32774 Define this macro as a C expression which is nonzero if accessing 32775 less than a word of memory (i.e. a `char' or a `short') is no 32776 faster than accessing a word of memory, i.e., if such access 32777 require more than one instruction or if there is no difference in 32778 cost between byte and (aligned) word loads. 32779 32780 When this macro is not defined, the compiler will access a field by 32781 finding the smallest containing object; when it is defined, a 32782 fullword load will be used if alignment permits. Unless bytes 32783 accesses are faster than word accesses, using word accesses is 32784 preferable since it may eliminate subsequent memory access if 32785 subsequent accesses occur to other fields in the same word of the 32786 structure, but to different bytes. 32787 32788 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 32789 Define this macro to be the value 1 if memory accesses described 32790 by the MODE and ALIGNMENT parameters have a cost many times greater 32791 than aligned accesses, for example if they are emulated in a trap 32792 handler. 32793 32794 When this macro is nonzero, the compiler will act as if 32795 `STRICT_ALIGNMENT' were nonzero when generating code for block 32796 moves. This can cause significantly more instructions to be 32797 produced. Therefore, do not set this macro nonzero if unaligned 32798 accesses only add a cycle or two to the time for a memory access. 32799 32800 If the value of this macro is always zero, it need not be defined. 32801 If this macro is defined, it should produce a nonzero value when 32802 `STRICT_ALIGNMENT' is nonzero. 32803 32804 -- Macro: MOVE_RATIO (SPEED) 32805 The threshold of number of scalar memory-to-memory move insns, 32806 _below_ which a sequence of insns should be generated instead of a 32807 string move insn or a library call. Increasing the value will 32808 always make code faster, but eventually incurs high cost in 32809 increased code size. 32810 32811 Note that on machines where the corresponding move insn is a 32812 `define_expand' that emits a sequence of insns, this macro counts 32813 the number of such sequences. 32814 32815 The parameter SPEED is true if the code is currently being 32816 optimized for speed rather than size. 32817 32818 If you don't define this, a reasonable default is used. 32819 32820 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT) 32821 A C expression used to determine whether `move_by_pieces' will be 32822 used to copy a chunk of memory, or whether some other block move 32823 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 32824 returns less than `MOVE_RATIO'. 32825 32826 -- Macro: MOVE_MAX_PIECES 32827 A C expression used by `move_by_pieces' to determine the largest 32828 unit a load or store used to copy memory is. Defaults to 32829 `MOVE_MAX'. 32830 32831 -- Macro: CLEAR_RATIO (SPEED) 32832 The threshold of number of scalar move insns, _below_ which a 32833 sequence of insns should be generated to clear memory instead of a 32834 string clear insn or a library call. Increasing the value will 32835 always make code faster, but eventually incurs high cost in 32836 increased code size. 32837 32838 The parameter SPEED is true if the code is currently being 32839 optimized for speed rather than size. 32840 32841 If you don't define this, a reasonable default is used. 32842 32843 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT) 32844 A C expression used to determine whether `clear_by_pieces' will be 32845 used to clear a chunk of memory, or whether some other block clear 32846 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 32847 returns less than `CLEAR_RATIO'. 32848 32849 -- Macro: SET_RATIO (SPEED) 32850 The threshold of number of scalar move insns, _below_ which a 32851 sequence of insns should be generated to set memory to a constant 32852 value, instead of a block set insn or a library call. Increasing 32853 the value will always make code faster, but eventually incurs high 32854 cost in increased code size. 32855 32856 The parameter SPEED is true if the code is currently being 32857 optimized for speed rather than size. 32858 32859 If you don't define this, it defaults to the value of `MOVE_RATIO'. 32860 32861 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT) 32862 A C expression used to determine whether `store_by_pieces' will be 32863 used to set a chunk of memory to a constant value, or whether some 32864 other mechanism will be used. Used by `__builtin_memset' when 32865 storing values other than constant zero. Defaults to 1 if 32866 `move_by_pieces_ninsns' returns less than `SET_RATIO'. 32867 32868 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT) 32869 A C expression used to determine whether `store_by_pieces' will be 32870 used to set a chunk of memory to a constant string value, or 32871 whether some other mechanism will be used. Used by 32872 `__builtin_strcpy' when called with a constant source string. 32873 Defaults to 1 if `move_by_pieces_ninsns' returns less than 32874 `MOVE_RATIO'. 32875 32876 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 32877 A C expression used to determine whether a load postincrement is a 32878 good thing to use for a given mode. Defaults to the value of 32879 `HAVE_POST_INCREMENT'. 32880 32881 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 32882 A C expression used to determine whether a load postdecrement is a 32883 good thing to use for a given mode. Defaults to the value of 32884 `HAVE_POST_DECREMENT'. 32885 32886 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 32887 A C expression used to determine whether a load preincrement is a 32888 good thing to use for a given mode. Defaults to the value of 32889 `HAVE_PRE_INCREMENT'. 32890 32891 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 32892 A C expression used to determine whether a load predecrement is a 32893 good thing to use for a given mode. Defaults to the value of 32894 `HAVE_PRE_DECREMENT'. 32895 32896 -- Macro: USE_STORE_POST_INCREMENT (MODE) 32897 A C expression used to determine whether a store postincrement is 32898 a good thing to use for a given mode. Defaults to the value of 32899 `HAVE_POST_INCREMENT'. 32900 32901 -- Macro: USE_STORE_POST_DECREMENT (MODE) 32902 A C expression used to determine whether a store postdecrement is 32903 a good thing to use for a given mode. Defaults to the value of 32904 `HAVE_POST_DECREMENT'. 32905 32906 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 32907 This macro is used to determine whether a store preincrement is a 32908 good thing to use for a given mode. Defaults to the value of 32909 `HAVE_PRE_INCREMENT'. 32910 32911 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 32912 This macro is used to determine whether a store predecrement is a 32913 good thing to use for a given mode. Defaults to the value of 32914 `HAVE_PRE_DECREMENT'. 32915 32916 -- Macro: NO_FUNCTION_CSE 32917 Define this macro if it is as good or better to call a constant 32918 function address than to call an address kept in a register. 32919 32920 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT 32921 Define this macro if a non-short-circuit operation produced by 32922 `fold_range_test ()' is optimal. This macro defaults to true if 32923 `BRANCH_COST' is greater than or equal to the value 2. 32924 32925 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int 32926 OUTER_CODE, int OPNO, int *TOTAL, bool SPEED) 32927 This target hook describes the relative costs of RTL expressions. 32928 32929 The cost may depend on the precise form of the expression, which is 32930 available for examination in X, and the fact that X appears as 32931 operand OPNO of an expression with rtx code OUTER_CODE. That is, 32932 the hook can assume that there is some rtx Y such that `GET_CODE 32933 (Y) == OUTER_CODE' and such that either (a) `XEXP (Y, OPNO) == X' 32934 or (b) `XVEC (Y, OPNO)' contains X. 32935 32936 CODE is X's expression code--redundant, since it can be obtained 32937 with `GET_CODE (X)'. 32938 32939 In implementing this hook, you can use the construct 32940 `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions. 32941 32942 On entry to the hook, `*TOTAL' contains a default estimate for the 32943 cost of the expression. The hook should modify this value as 32944 necessary. Traditionally, the default costs are `COSTS_N_INSNS 32945 (5)' for multiplications, `COSTS_N_INSNS (7)' for division and 32946 modulus operations, and `COSTS_N_INSNS (1)' for all other 32947 operations. 32948 32949 When optimizing for code size, i.e. when `speed' is false, this 32950 target hook should be used to estimate the relative size cost of 32951 an expression, again relative to `COSTS_N_INSNS'. 32952 32953 The hook returns true when all subexpressions of X have been 32954 processed, and false when `rtx_cost' should recurse. 32955 32956 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, enum 32957 machine_mode MODE, addr_space_t AS, bool SPEED) 32958 This hook computes the cost of an addressing mode that contains 32959 ADDRESS. If not defined, the cost is computed from the ADDRESS 32960 expression and the `TARGET_RTX_COST' hook. 32961 32962 For most CISC machines, the default cost is a good approximation 32963 of the true cost of the addressing mode. However, on RISC 32964 machines, all instructions normally have the same length and 32965 execution time. Hence all addresses will have equal costs. 32966 32967 In cases where more than one form of an address is known, the form 32968 with the lowest cost will be used. If multiple forms have the 32969 same, lowest, cost, the one that is the most complex will be used. 32970 32971 For example, suppose an address that is equal to the sum of a 32972 register and a constant is used twice in the same basic block. 32973 When this macro is not defined, the address will be computed in a 32974 register and memory references will be indirect through that 32975 register. On machines where the cost of the addressing mode 32976 containing the sum is no higher than that of a simple indirect 32977 reference, this will produce an additional instruction and 32978 possibly require an additional register. Proper specification of 32979 this macro eliminates this overhead for such machines. 32980 32981 This hook is never called with an invalid address. 32982 32983 On machines where an address involving more than one register is as 32984 cheap as an address computation involving only one register, 32985 defining `TARGET_ADDRESS_COST' to reflect this can cause two 32986 registers to be live over a region of code where only one would 32987 have been if `TARGET_ADDRESS_COST' were not defined in that 32988 manner. This effect should be considered in the definition of 32989 this macro. Equivalent costs should probably only be given to 32990 addresses with different numbers of registers on machines with 32991 lots of registers. 32992 32993 32994 File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 32995 32996 17.18 Adjusting the Instruction Scheduler 32997 ========================================= 32998 32999 The instruction scheduler may need a fair amount of machine-specific 33000 adjustment in order to produce good code. GCC provides several target 33001 hooks for this purpose. It is usually enough to define just a few of 33002 them: try the first ones in this list first. 33003 33004 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 33005 This hook returns the maximum number of instructions that can ever 33006 issue at the same time on the target machine. The default is one. 33007 Although the insn scheduler can define itself the possibility of 33008 issue an insn on the same cycle, the value can serve as an 33009 additional constraint to issue insns on the same simulated 33010 processor cycle (see hooks `TARGET_SCHED_REORDER' and 33011 `TARGET_SCHED_REORDER2'). This value must be constant over the 33012 entire compilation. If you need it to vary depending on what the 33013 instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'. 33014 33015 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 33016 VERBOSE, rtx INSN, int MORE) 33017 This hook is executed by the scheduler after it has scheduled an 33018 insn from the ready list. It should return the number of insns 33019 which can still be issued in the current cycle. The default is 33020 `MORE - 1' for insns other than `CLOBBER' and `USE', which 33021 normally are not counted against the issue rate. You should 33022 define this hook if some insns take more machine resources than 33023 others, so that fewer insns can follow them in the same cycle. 33024 FILE is either a null pointer, or a stdio stream to write any 33025 debug output to. VERBOSE is the verbose level provided by 33026 `-fsched-verbose-N'. INSN is the instruction that was scheduled. 33027 33028 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx 33029 DEP_INSN, int COST) 33030 This function corrects the value of COST based on the relationship 33031 between INSN and DEP_INSN through the dependence LINK. It should 33032 return the new value. The default is to make no adjustment to 33033 COST. This can be used for example to specify to the scheduler 33034 using the traditional pipeline description that an output- or 33035 anti-dependence does not incur the same cost as a data-dependence. 33036 If the scheduler using the automaton based pipeline description, 33037 the cost of anti-dependence is zero and the cost of 33038 output-dependence is maximum of one and the difference of latency 33039 times of the first and the second insns. If these values are not 33040 acceptable, you could use the hook to modify them too. See also 33041 *note Processor pipeline description::. 33042 33043 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int 33044 PRIORITY) 33045 This hook adjusts the integer scheduling priority PRIORITY of 33046 INSN. It should return the new priority. Increase the priority to 33047 execute INSN earlier, reduce the priority to execute INSN later. 33048 Do not define this hook if you do not need to adjust the 33049 scheduling priorities of insns. 33050 33051 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx 33052 *READY, int *N_READYP, int CLOCK) 33053 This hook is executed by the scheduler after it has scheduled the 33054 ready list, to allow the machine description to reorder it (for 33055 example to combine two small instructions together on `VLIW' 33056 machines). FILE is either a null pointer, or a stdio stream to 33057 write any debug output to. VERBOSE is the verbose level provided 33058 by `-fsched-verbose-N'. READY is a pointer to the ready list of 33059 instructions that are ready to be scheduled. N_READYP is a 33060 pointer to the number of elements in the ready list. The scheduler 33061 reads the ready list in reverse order, starting with 33062 READY[*N_READYP - 1] and going to READY[0]. CLOCK is the timer 33063 tick of the scheduler. You may modify the ready list and the 33064 number of ready insns. The return value is the number of insns 33065 that can issue this cycle; normally this is just `issue_rate'. 33066 See also `TARGET_SCHED_REORDER2'. 33067 33068 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 33069 rtx *READY, int *N_READYP, int CLOCK) 33070 Like `TARGET_SCHED_REORDER', but called at a different time. That 33071 function is called whenever the scheduler starts a new cycle. 33072 This one is called once per iteration over a cycle, immediately 33073 after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list 33074 and return the number of insns to be scheduled in the same cycle. 33075 Defining this hook can be useful if there are frequent situations 33076 where scheduling one insn causes other insns to become ready in 33077 the same cycle. These other insns can then be taken into account 33078 properly. 33079 33080 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx 33081 HEAD, rtx TAIL) 33082 This hook is called after evaluation forward dependencies of insns 33083 in chain given by two parameter values (HEAD and TAIL 33084 correspondingly) but before insns scheduling of the insn chain. 33085 For example, it can be used for better insn classification if it 33086 requires analysis of dependencies. This hook can use backward and 33087 forward dependencies of the insn scheduler because they are already 33088 calculated. 33089 33090 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 33091 MAX_READY) 33092 This hook is executed by the scheduler at the beginning of each 33093 block of instructions that are to be scheduled. FILE is either a 33094 null pointer, or a stdio stream to write any debug output to. 33095 VERBOSE is the verbose level provided by `-fsched-verbose-N'. 33096 MAX_READY is the maximum number of insns in the current scheduling 33097 region that can be live at the same time. This can be used to 33098 allocate scratch space if it is needed, e.g. by 33099 `TARGET_SCHED_REORDER'. 33100 33101 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 33102 This hook is executed by the scheduler at the end of each block of 33103 instructions that are to be scheduled. It can be used to perform 33104 cleanup of any actions done by the other scheduling hooks. FILE 33105 is either a null pointer, or a stdio stream to write any debug 33106 output to. VERBOSE is the verbose level provided by 33107 `-fsched-verbose-N'. 33108 33109 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int 33110 VERBOSE, int OLD_MAX_UID) 33111 This hook is executed by the scheduler after function level 33112 initializations. FILE is either a null pointer, or a stdio stream 33113 to write any debug output to. VERBOSE is the verbose level 33114 provided by `-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 33115 uid when scheduling begins. 33116 33117 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 33118 VERBOSE) 33119 This is the cleanup hook corresponding to 33120 `TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 33121 stdio stream to write any debug output to. VERBOSE is the verbose 33122 level provided by `-fsched-verbose-N'. 33123 33124 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 33125 The hook returns an RTL insn. The automaton state used in the 33126 pipeline hazard recognizer is changed as if the insn were scheduled 33127 when the new simulated processor cycle starts. Usage of the hook 33128 may simplify the automaton pipeline description for some VLIW 33129 processors. If the hook is defined, it is used only for the 33130 automaton based pipeline description. The default is not to 33131 change the state when the new simulated processor cycle starts. 33132 33133 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 33134 The hook can be used to initialize data used by the previous hook. 33135 33136 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 33137 The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 33138 to changed the state as if the insn were scheduled when the new 33139 simulated processor cycle finishes. 33140 33141 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 33142 The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 33143 used to initialize data used by the previous hook. 33144 33145 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 33146 The hook to notify target that the current simulated cycle is 33147 about to finish. The hook is analogous to 33148 `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 33149 more complicated situations - e.g., when advancing state on a 33150 single insn is not enough. 33151 33152 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 33153 The hook to notify target that new simulated cycle has just 33154 started. The hook is analogous to 33155 `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 33156 more complicated situations - e.g., when advancing state on a 33157 single insn is not enough. 33158 33159 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 33160 (void) 33161 This hook controls better choosing an insn from the ready insn 33162 queue for the DFA-based insn scheduler. Usually the scheduler 33163 chooses the first insn from the queue. If the hook returns a 33164 positive value, an additional scheduler code tries all 33165 permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 33166 ()' subsequent ready insns to choose an insn whose issue will 33167 result in maximal number of issued insns on the same cycle. For 33168 the VLIW processor, the code could actually solve the problem of 33169 packing simple insns into the VLIW insn. Of course, if the rules 33170 of VLIW packing are described in the automaton. 33171 33172 This code also could be used for superscalar RISC processors. Let 33173 us consider a superscalar RISC processor with 3 pipelines. Some 33174 insns can be executed in pipelines A or B, some insns can be 33175 executed only in pipelines B or C, and one insn can be executed in 33176 pipeline B. The processor may issue the 1st insn into A and the 33177 2nd one into B. In this case, the 3rd insn will wait for freeing B 33178 until the next cycle. If the scheduler issues the 3rd insn the 33179 first, the processor could issue all 3 insns per cycle. 33180 33181 Actually this code demonstrates advantages of the automaton based 33182 pipeline hazard recognizer. We try quickly and easy many insn 33183 schedules to choose the best one. 33184 33185 The default is no multipass scheduling. 33186 33187 -- Target Hook: int 33188 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN) 33189 This hook controls what insns from the ready insn queue will be 33190 considered for the multipass insn scheduling. If the hook returns 33191 zero for INSN, the insn will be not chosen to be issued. 33192 33193 The default is that any ready insns can be chosen to be issued. 33194 33195 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void 33196 *DATA, char *READY_TRY, int N_READY, bool FIRST_CYCLE_INSN_P) 33197 This hook prepares the target backend for a new round of multipass 33198 scheduling. 33199 33200 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void 33201 *DATA, char *READY_TRY, int N_READY, rtx INSN, const void 33202 *PREV_DATA) 33203 This hook is called when multipass scheduling evaluates 33204 instruction INSN. 33205 33206 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK 33207 (const void *DATA, char *READY_TRY, int N_READY) 33208 This is called when multipass scheduling backtracks from 33209 evaluation of an instruction. 33210 33211 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const 33212 void *DATA) 33213 This hook notifies the target about the result of the concluded 33214 current round of multipass scheduling. 33215 33216 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void 33217 *DATA) 33218 This hook initializes target-specific data used in multipass 33219 scheduling. 33220 33221 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void 33222 *DATA) 33223 This hook finalizes target-specific data used in multipass 33224 scheduling. 33225 33226 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 33227 VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P) 33228 This hook is called by the insn scheduler before issuing INSN on 33229 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 33230 this processor cycle. Instead, the processor cycle is advanced. 33231 If *SORT_P is zero, the insn ready queue is not sorted on the new 33232 cycle start as usually. DUMP and VERBOSE specify the file and 33233 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 33234 are, respectively, the processor cycle on which the previous insn 33235 has been issued, and the current processor cycle. 33236 33237 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 33238 *_DEP, int COST, int DISTANCE) 33239 This hook is used to define which dependences are considered 33240 costly by the target, so costly that it is not advisable to 33241 schedule the insns that are involved in the dependence too close 33242 to one another. The parameters to this hook are as follows: The 33243 first parameter _DEP is the dependence being evaluated. The 33244 second parameter COST is the cost of the dependence as estimated 33245 by the scheduler, and the third parameter DISTANCE is the distance 33246 in cycles between the two insns. The hook returns `true' if 33247 considering the distance between the two insns the dependence 33248 between them is considered costly by the target, and `false' 33249 otherwise. 33250 33251 Defining this hook can be useful in multiple-issue out-of-order 33252 machines, where (a) it's practically hopeless to predict the 33253 actual data/resource delays, however: (b) there's a better chance 33254 to predict the actual grouping that will be formed, and (c) 33255 correctly emulating the grouping can be very important. In such 33256 targets one may want to allow issuing dependent insns closer to 33257 one another--i.e., closer than the dependence distance; however, 33258 not in cases of "costly dependences", which this hooks allows to 33259 define. 33260 33261 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 33262 This hook is called by the insn scheduler after emitting a new 33263 instruction to the instruction stream. The hook notifies a target 33264 backend to extend its per instruction data structures. 33265 33266 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 33267 Return a pointer to a store large enough to hold target scheduling 33268 context. 33269 33270 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 33271 CLEAN_P) 33272 Initialize store pointed to by TC to hold target scheduling 33273 context. It CLEAN_P is true then initialize TC as if scheduler is 33274 at the beginning of the block. Otherwise, copy the current 33275 context into TC. 33276 33277 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 33278 Copy target scheduling context pointed to by TC to the current 33279 context. 33280 33281 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 33282 Deallocate internal data in target scheduling context pointed to 33283 by TC. 33284 33285 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 33286 Deallocate a store for target scheduling context pointed to by TC. 33287 33288 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int 33289 REQUEST, rtx *NEW_PAT) 33290 This hook is called by the insn scheduler when INSN has only 33291 speculative dependencies and therefore can be scheduled 33292 speculatively. The hook is used to check if the pattern of INSN 33293 has a speculative version and, in case of successful check, to 33294 generate that speculative pattern. The hook should return 1, if 33295 the instruction has a speculative form, or -1, if it doesn't. 33296 REQUEST describes the type of requested speculation. If the 33297 return value equals 1 then NEW_PAT is assigned the generated 33298 speculative pattern. 33299 33300 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS) 33301 This hook is called by the insn scheduler during generation of 33302 recovery code for INSN. It should return `true', if the 33303 corresponding check instruction should branch to recovery code, or 33304 `false' otherwise. 33305 33306 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL, 33307 int MUTATE_P) 33308 This hook is called by the insn scheduler to generate a pattern 33309 for recovery check instruction. If MUTATE_P is zero, then INSN is 33310 a speculative instruction for which the check should be generated. 33311 LABEL is either a label of a basic block, where recovery code 33312 should be emitted, or a null pointer, when requested check doesn't 33313 branch to recovery code (a simple check). If MUTATE_P is nonzero, 33314 then a pattern for a branchy check corresponding to a simple check 33315 denoted by INSN should be generated. In this case LABEL can't be 33316 null. 33317 33318 -- Target Hook: bool 33319 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx 33320 INSN) 33321 This hook is used as a workaround for 33322 `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being 33323 called on the first instruction of the ready list. The hook is 33324 used to discard speculative instructions that stand first in the 33325 ready list from being scheduled on the current cycle. If the hook 33326 returns `false', INSN will not be chosen to be issued. For 33327 non-speculative instructions, the hook should always return 33328 `true'. For example, in the ia64 backend the hook is used to 33329 cancel data speculative insns when the ALAT table is nearly full. 33330 33331 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct 33332 spec_info_def *SPEC_INFO) 33333 This hook is used by the insn scheduler to find out what features 33334 should be enabled/used. The structure *SPEC_INFO should be filled 33335 in by the target. The structure describes speculation types that 33336 can be used in the scheduler. 33337 33338 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 33339 This hook is called by the swing modulo scheduler to calculate a 33340 resource-based lower bound which is based on the resources 33341 available in the machine and the resources required by each 33342 instruction. The target backend can use G to calculate such 33343 bound. A very simple lower bound will be used in case this hook 33344 is not implemented: the total number of instructions divided by 33345 the issue rate. 33346 33347 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx INSN, int X) 33348 This hook is called by Haifa Scheduler. It returns true if 33349 dispatch scheduling is supported in hardware and the condition 33350 specified in the parameter is true. 33351 33352 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx INSN, int X) 33353 This hook is called by Haifa Scheduler. It performs the operation 33354 specified in its second parameter. 33355 33356 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE 33357 True if the processor has an exposed pipeline, which means that 33358 not just the order of instructions is important for correctness 33359 when scheduling, but also the latencies of operations. 33360 33361 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int 33362 OPC, enum machine_mode MODE) 33363 This hook is called by tree reassociator to determine a level of 33364 parallelism required in output calculations chain. 33365 33366 33367 File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 33368 33369 17.19 Dividing the Output into Sections (Texts, Data, ...) 33370 ========================================================== 33371 33372 An object file is divided into sections containing different types of 33373 data. In the most common case, there are three sections: the "text 33374 section", which holds instructions and read-only data; the "data 33375 section", which holds initialized writable data; and the "bss section", 33376 which holds uninitialized data. Some systems have other kinds of 33377 sections. 33378 33379 `varasm.c' provides several well-known sections, such as 33380 `text_section', `data_section' and `bss_section'. The normal way of 33381 controlling a `FOO_section' variable is to define the associated 33382 `FOO_SECTION_ASM_OP' macro, as described below. The macros are only 33383 read once, when `varasm.c' initializes itself, so their values must be 33384 run-time constants. They may however depend on command-line flags. 33385 33386 _Note:_ Some run-time files, such `crtstuff.c', also make use of the 33387 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 33388 33389 Some assemblers require a different string to be written every time a 33390 section is selected. If your assembler falls into this category, you 33391 should define the `TARGET_ASM_INIT_SECTIONS' hook and use 33392 `get_unnamed_section' to set up the sections. 33393 33394 You must always create a `text_section', either by defining 33395 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in 33396 `TARGET_ASM_INIT_SECTIONS'. The same is true of `data_section' and 33397 `DATA_SECTION_ASM_OP'. If you do not create a distinct 33398 `readonly_data_section', the default is to reuse `text_section'. 33399 33400 All the other `varasm.c' sections are optional, and are null if the 33401 target does not provide them. 33402 33403 -- Macro: TEXT_SECTION_ASM_OP 33404 A C expression whose value is a string, including spacing, 33405 containing the assembler operation that should precede 33406 instructions and read-only data. Normally `"\t.text"' is right. 33407 33408 -- Macro: HOT_TEXT_SECTION_NAME 33409 If defined, a C string constant for the name of the section 33410 containing most frequently executed functions of the program. If 33411 not defined, GCC will provide a default definition if the target 33412 supports named sections. 33413 33414 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 33415 If defined, a C string constant for the name of the section 33416 containing unlikely executed functions in the program. 33417 33418 -- Macro: DATA_SECTION_ASM_OP 33419 A C expression whose value is a string, including spacing, 33420 containing the assembler operation to identify the following data 33421 as writable initialized data. Normally `"\t.data"' is right. 33422 33423 -- Macro: SDATA_SECTION_ASM_OP 33424 If defined, a C expression whose value is a string, including 33425 spacing, containing the assembler operation to identify the 33426 following data as initialized, writable small data. 33427 33428 -- Macro: READONLY_DATA_SECTION_ASM_OP 33429 A C expression whose value is a string, including spacing, 33430 containing the assembler operation to identify the following data 33431 as read-only initialized data. 33432 33433 -- Macro: BSS_SECTION_ASM_OP 33434 If defined, a C expression whose value is a string, including 33435 spacing, containing the assembler operation to identify the 33436 following data as uninitialized global data. If not defined, and 33437 `ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data 33438 will be output in the data section if `-fno-common' is passed, 33439 otherwise `ASM_OUTPUT_COMMON' will be used. 33440 33441 -- Macro: SBSS_SECTION_ASM_OP 33442 If defined, a C expression whose value is a string, including 33443 spacing, containing the assembler operation to identify the 33444 following data as uninitialized, writable small data. 33445 33446 -- Macro: TLS_COMMON_ASM_OP 33447 If defined, a C expression whose value is a string containing the 33448 assembler operation to identify the following data as thread-local 33449 common data. The default is `".tls_common"'. 33450 33451 -- Macro: TLS_SECTION_ASM_FLAG 33452 If defined, a C expression whose value is a character constant 33453 containing the flag used to mark a section as a TLS section. The 33454 default is `'T''. 33455 33456 -- Macro: INIT_SECTION_ASM_OP 33457 If defined, a C expression whose value is a string, including 33458 spacing, containing the assembler operation to identify the 33459 following data as initialization code. If not defined, GCC will 33460 assume such a section does not exist. This section has no 33461 corresponding `init_section' variable; it is used entirely in 33462 runtime code. 33463 33464 -- Macro: FINI_SECTION_ASM_OP 33465 If defined, a C expression whose value is a string, including 33466 spacing, containing the assembler operation to identify the 33467 following data as finalization code. If not defined, GCC will 33468 assume such a section does not exist. This section has no 33469 corresponding `fini_section' variable; it is used entirely in 33470 runtime code. 33471 33472 -- Macro: INIT_ARRAY_SECTION_ASM_OP 33473 If defined, a C expression whose value is a string, including 33474 spacing, containing the assembler operation to identify the 33475 following data as part of the `.init_array' (or equivalent) 33476 section. If not defined, GCC will assume such a section does not 33477 exist. Do not define both this macro and `INIT_SECTION_ASM_OP'. 33478 33479 -- Macro: FINI_ARRAY_SECTION_ASM_OP 33480 If defined, a C expression whose value is a string, including 33481 spacing, containing the assembler operation to identify the 33482 following data as part of the `.fini_array' (or equivalent) 33483 section. If not defined, GCC will assume such a section does not 33484 exist. Do not define both this macro and `FINI_SECTION_ASM_OP'. 33485 33486 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 33487 If defined, an ASM statement that switches to a different section 33488 via SECTION_OP, calls FUNCTION, and switches back to the text 33489 section. This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or 33490 `FINI_SECTION_ASM_OP' to calls to initialization and finalization 33491 functions from the init and fini sections. By default, this macro 33492 uses a simple function call. Some ports need hand-crafted 33493 assembly code to avoid dependencies on registers initialized in 33494 the function prologue or to ensure that constant pools don't end 33495 up too far way in the text section. 33496 33497 -- Macro: TARGET_LIBGCC_SDATA_SECTION 33498 If defined, a string which names the section into which small 33499 variables defined in crtstuff and libgcc should go. This is useful 33500 when the target has options for optimizing access to small data, 33501 and you want the crtstuff and libgcc routines to be conservative 33502 in what they expect of your application yet liberal in what your 33503 application expects. For example, for targets with a `.sdata' 33504 section (like MIPS), you could compile crtstuff with `-G 0' so 33505 that it doesn't require small data support from your application, 33506 but use this macro to put small data into `.sdata' so that your 33507 application can access these variables whether it uses small data 33508 or not. 33509 33510 -- Macro: FORCE_CODE_SECTION_ALIGN 33511 If defined, an ASM statement that aligns a code section to some 33512 arbitrary boundary. This is used to force all fragments of the 33513 `.init' and `.fini' sections to have to same alignment and thus 33514 prevent the linker from having to add any padding. 33515 33516 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 33517 Define this macro to be an expression with a nonzero value if jump 33518 tables (for `tablejump' insns) should be output in the text 33519 section, along with the assembler instructions. Otherwise, the 33520 readonly data section is used. 33521 33522 This macro is irrelevant if there is no separate readonly data 33523 section. 33524 33525 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 33526 Define this hook if you need to do something special to set up the 33527 `varasm.c' sections, or if your target has some special sections 33528 of its own that you need to create. 33529 33530 GCC calls this hook after processing the command line, but before 33531 writing any assembly code, and before calling any of the 33532 section-returning hooks described below. 33533 33534 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 33535 Return a mask describing how relocations should be treated when 33536 selecting sections. Bit 1 should be set if global relocations 33537 should be placed in a read-write section; bit 0 should be set if 33538 local relocations should be placed in a read-write section. 33539 33540 The default version of this function returns 3 when `-fpic' is in 33541 effect, and 0 otherwise. The hook is typically redefined when the 33542 target cannot support (some kinds of) dynamic relocations in 33543 read-only sections even in executables. 33544 33545 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 33546 RELOC, unsigned HOST_WIDE_INT ALIGN) 33547 Return the section into which EXP should be placed. You can 33548 assume that EXP is either a `VAR_DECL' node or a constant of some 33549 sort. RELOC indicates whether the initial value of EXP requires 33550 link-time relocations. Bit 0 is set when variable contains local 33551 relocations only, while bit 1 is set for global relocations. 33552 ALIGN is the constant alignment in bits. 33553 33554 The default version of this function takes care of putting 33555 read-only variables in `readonly_data_section'. 33556 33557 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 33558 33559 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 33560 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 33561 called for `FUNCTION_DECL's as well as for variables and constants. 33562 33563 In the case of a `FUNCTION_DECL', RELOC will be zero if the 33564 function has been determined to be likely to be called, and 33565 nonzero if it is unlikely to be called. 33566 33567 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 33568 Build up a unique section name, expressed as a `STRING_CST' node, 33569 and assign it to `DECL_SECTION_NAME (DECL)'. As with 33570 `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 33571 value of EXP requires link-time relocations. 33572 33573 The default version of this function appends the symbol name to the 33574 ELF section name that would normally be used for the symbol. For 33575 example, the function `foo' would be placed in `.text.foo'. 33576 Whatever the actual target object format, this is often good 33577 enough. 33578 33579 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 33580 DECL) 33581 Return the readonly data section associated with 33582 `DECL_SECTION_NAME (DECL)'. The default version of this function 33583 selects `.gnu.linkonce.r.name' if the function's section is 33584 `.gnu.linkonce.t.name', `.rodata.name' if function is in 33585 `.text.name', and the normal readonly-data section otherwise. 33586 33587 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX 33588 Usually, the compiler uses the prefix `".rodata"' to construct 33589 section names for mergeable constant data. Define this macro to 33590 override the string if a different section name should be used. 33591 33592 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void) 33593 Return the section that should be used for transactional memory 33594 clone tables. 33595 33596 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum 33597 machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 33598 Return the section into which a constant X, of mode MODE, should 33599 be placed. You can assume that X is some kind of constant in RTL. 33600 The argument MODE is redundant except in the case of a `const_int' 33601 rtx. ALIGN is the constant alignment in bits. 33602 33603 The default version of this function takes care of putting symbolic 33604 constants in `flag_pic' mode in `data_section' and everything else 33605 in `readonly_data_section'. 33606 33607 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, 33608 tree ID) 33609 Define this hook if you need to postprocess the assembler name 33610 generated by target-independent code. The ID provided to this 33611 hook will be the computed name (e.g., the macro `DECL_NAME' of the 33612 DECL in C, or the mangled name of the DECL in C++). The return 33613 value of the hook is an `IDENTIFIER_NODE' for the appropriate 33614 mangled name on your target system. The default implementation of 33615 this hook just returns the ID provided. 33616 33617 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 33618 int NEW_DECL_P) 33619 Define this hook if references to a symbol or a constant must be 33620 treated differently depending on something about the variable or 33621 function named by the symbol (such as what section it is in). 33622 33623 The hook is executed immediately after rtl has been created for 33624 DECL, which may be a variable or function declaration or an entry 33625 in the constant pool. In either case, RTL is the rtl in question. 33626 Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not 33627 have been initialized yet. 33628 33629 In the case of a constant, it is safe to assume that the rtl is a 33630 `mem' whose address is a `symbol_ref'. Most decls will also have 33631 this form, but that is not guaranteed. Global register variables, 33632 for instance, will have a `reg' for their rtl. (Normally the 33633 right thing to do with such unusual rtl is leave it alone.) 33634 33635 The NEW_DECL_P argument will be true if this is the first time 33636 that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. 33637 It will be false for subsequent invocations, which will happen for 33638 duplicate declarations. Whether or not anything must be done for 33639 the duplicate declaration depends on whether the hook examines 33640 `DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 33641 called for a constant. 33642 33643 The usual thing for this hook to do is to record flags in the 33644 `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'. 33645 Historically, the name string was modified if it was necessary to 33646 encode more than one bit of information, but this practice is now 33647 discouraged; use `SYMBOL_REF_FLAGS'. 33648 33649 The default definition of this hook, `default_encode_section_info' 33650 in `varasm.c', sets a number of commonly-useful bits in 33651 `SYMBOL_REF_FLAGS'. Check whether the default does what you need 33652 before overriding it. 33653 33654 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 33655 *NAME) 33656 Decode NAME and return the real name part, sans the characters 33657 that `TARGET_ENCODE_SECTION_INFO' may have added. 33658 33659 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 33660 Returns true if EXP should be placed into a "small data" section. 33661 The default version of this hook always returns false. 33662 33663 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 33664 Contains the value true if the target places read-only "small 33665 data" into a separate section. The default value is false. 33666 33667 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void) 33668 It returns true if target wants profile code emitted before 33669 prologue. 33670 33671 The default version of this hook use the target macro 33672 `PROFILE_BEFORE_PROLOGUE'. 33673 33674 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 33675 Returns true if EXP names an object for which name resolution 33676 rules must resolve to the current "module" (dynamic shared library 33677 or executable image). 33678 33679 The default version of this hook implements the name resolution 33680 rules for ELF, which has a looser model of global name binding 33681 than other currently supported object file formats. 33682 33683 -- Target Hook: bool TARGET_HAVE_TLS 33684 Contains the value true if the target supports thread-local 33685 storage. The default value is false. 33686 33687 33688 File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 33689 33690 17.20 Position Independent Code 33691 =============================== 33692 33693 This section describes macros that help implement generation of position 33694 independent code. Simply defining these macros is not enough to 33695 generate valid PIC; you must also add support to the hook 33696 `TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS', 33697 as well as `LEGITIMIZE_ADDRESS'. You must modify the definition of 33698 `movsi' to do something appropriate when the source operand contains a 33699 symbolic address. You may also need to alter the handling of switch 33700 statements so that they use relative addresses. 33701 33702 -- Macro: PIC_OFFSET_TABLE_REGNUM 33703 The register number of the register used to address a table of 33704 static data addresses in memory. In some cases this register is 33705 defined by a processor's "application binary interface" (ABI). 33706 When this macro is defined, RTL is generated for this register 33707 once, as with the stack pointer and frame pointer registers. If 33708 this macro is not defined, it is up to the machine-dependent files 33709 to allocate such a register (if necessary). Note that this 33710 register must be fixed when in use (e.g. when `flag_pic' is true). 33711 33712 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 33713 A C expression that is nonzero if the register defined by 33714 `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. If not defined, 33715 the default is zero. Do not define this macro if 33716 `PIC_OFFSET_TABLE_REGNUM' is not defined. 33717 33718 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 33719 A C expression that is nonzero if X is a legitimate immediate 33720 operand on the target machine when generating position independent 33721 code. You can assume that X satisfies `CONSTANT_P', so you need 33722 not check this. You can also assume FLAG_PIC is true, so you need 33723 not check it either. You need not define this macro if all 33724 constants (including `SYMBOL_REF') can be immediate operands when 33725 generating position independent code. 33726 33727 33728 File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 33729 33730 17.21 Defining the Output Assembler Language 33731 ============================================ 33732 33733 This section describes macros whose principal purpose is to describe how 33734 to write instructions in assembler language--rather than what the 33735 instructions do. 33736 33737 * Menu: 33738 33739 * File Framework:: Structural information for the assembler file. 33740 * Data Output:: Output of constants (numbers, strings, addresses). 33741 * Uninitialized Data:: Output of uninitialized variables. 33742 * Label Output:: Output and generation of labels. 33743 * Initialization:: General principles of initialization 33744 and termination routines. 33745 * Macros for Initialization:: 33746 Specific macros that control the handling of 33747 initialization and termination routines. 33748 * Instruction Output:: Output of actual instructions. 33749 * Dispatch Tables:: Output of jump tables. 33750 * Exception Region Output:: Output of exception region code. 33751 * Alignment Output:: Pseudo ops for alignment and skipping data. 33752 33753 33754 File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 33755 33756 17.21.1 The Overall Framework of an Assembler File 33757 -------------------------------------------------- 33758 33759 This describes the overall framework of an assembly file. 33760 33761 -- Target Hook: void TARGET_ASM_FILE_START (void) 33762 Output to `asm_out_file' any text which the assembler expects to 33763 find at the beginning of a file. The default behavior is 33764 controlled by two flags, documented below. Unless your target's 33765 assembler is quite unusual, if you override the default, you 33766 should call `default_file_start' at some point in your target 33767 hook. This lets other target files rely on these variables. 33768 33769 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 33770 If this flag is true, the text of the macro `ASM_APP_OFF' will be 33771 printed as the very first line in the assembly file, unless 33772 `-fverbose-asm' is in effect. (If that macro has been defined to 33773 the empty string, this variable has no effect.) With the normal 33774 definition of `ASM_APP_OFF', the effect is to notify the GNU 33775 assembler that it need not bother stripping comments or extra 33776 whitespace from its input. This allows it to work a bit faster. 33777 33778 The default is false. You should not set it to true unless you 33779 have verified that your port does not generate any extra 33780 whitespace or comments that will cause GAS to issue errors in 33781 NO_APP mode. 33782 33783 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 33784 If this flag is true, `output_file_directive' will be called for 33785 the primary source file, immediately after printing `ASM_APP_OFF' 33786 (if that is enabled). Most ELF assemblers expect this to be done. 33787 The default is false. 33788 33789 -- Target Hook: void TARGET_ASM_FILE_END (void) 33790 Output to `asm_out_file' any text which the assembler expects to 33791 find at the end of a file. The default is to output nothing. 33792 33793 -- Function: void file_end_indicate_exec_stack () 33794 Some systems use a common convention, the `.note.GNU-stack' 33795 special section, to indicate whether or not an object file relies 33796 on the stack being executable. If your system uses this 33797 convention, you should define `TARGET_ASM_FILE_END' to this 33798 function. If you need to do other things in that hook, have your 33799 hook function call this function. 33800 33801 -- Target Hook: void TARGET_ASM_LTO_START (void) 33802 Output to `asm_out_file' any text which the assembler expects to 33803 find at the start of an LTO section. The default is to output 33804 nothing. 33805 33806 -- Target Hook: void TARGET_ASM_LTO_END (void) 33807 Output to `asm_out_file' any text which the assembler expects to 33808 find at the end of an LTO section. The default is to output 33809 nothing. 33810 33811 -- Target Hook: void TARGET_ASM_CODE_END (void) 33812 Output to `asm_out_file' any text which is needed before emitting 33813 unwind info and debug info at the end of a file. Some targets emit 33814 here PIC setup thunks that cannot be emitted at the end of file, 33815 because they couldn't have unwind info then. The default is to 33816 output nothing. 33817 33818 -- Macro: ASM_COMMENT_START 33819 A C string constant describing how to begin a comment in the target 33820 assembler language. The compiler assumes that the comment will 33821 end at the end of the line. 33822 33823 -- Macro: ASM_APP_ON 33824 A C string constant for text to be output before each `asm' 33825 statement or group of consecutive ones. Normally this is 33826 `"#APP"', which is a comment that has no effect on most assemblers 33827 but tells the GNU assembler that it must check the lines that 33828 follow for all valid assembler constructs. 33829 33830 -- Macro: ASM_APP_OFF 33831 A C string constant for text to be output after each `asm' 33832 statement or group of consecutive ones. Normally this is 33833 `"#NO_APP"', which tells the GNU assembler to resume making the 33834 time-saving assumptions that are valid for ordinary compiler 33835 output. 33836 33837 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 33838 A C statement to output COFF information or DWARF debugging 33839 information which indicates that filename NAME is the current 33840 source file to the stdio stream STREAM. 33841 33842 This macro need not be defined if the standard form of output for 33843 the file format in use is appropriate. 33844 33845 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE, 33846 const char *NAME) 33847 Output COFF information or DWARF debugging information which 33848 indicates that filename NAME is the current source file to the 33849 stdio stream FILE. 33850 33851 This target hook need not be defined if the standard form of 33852 output for the file format in use is appropriate. 33853 33854 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME) 33855 Output a string based on NAME, suitable for the `#ident' 33856 directive, or the equivalent directive or pragma in non-C-family 33857 languages. If this hook is not defined, nothing is output for the 33858 `#ident' directive. 33859 33860 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 33861 A C statement to output the string STRING to the stdio stream 33862 STREAM. If you do not call the function `output_quoted_string' in 33863 your config files, GCC will only call it to output filenames to 33864 the assembler source. So you can use it to canonicalize the format 33865 of the filename using this macro. 33866 33867 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 33868 unsigned int FLAGS, tree DECL) 33869 Output assembly directives to switch to section NAME. The section 33870 should have attributes as specified by FLAGS, which is a bit mask 33871 of the `SECTION_*' flags defined in `output.h'. If DECL is 33872 non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this 33873 section is associated. 33874 33875 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum 33876 node_frequency FREQ, bool STARTUP, bool EXIT) 33877 Return preferred text (sub)section for function DECL. Main 33878 purpose of this function is to separate cold, normal and hot 33879 functions. STARTUP is true when function is known to be used only 33880 at startup (from static constructors or it is `main()'). EXIT is 33881 true when function is known to be used only at exit (from static 33882 destructors). Return NULL if function should go to default text 33883 section. 33884 33885 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE 33886 *FILE, tree DECL, bool NEW_IS_COLD) 33887 Used by the target to emit any assembler directives or additional 33888 labels needed when a function is partitioned between different 33889 sections. Output should be written to FILE. The function decl 33890 is available as DECL and the new section is `cold' if NEW_IS_COLD 33891 is `true'. 33892 33893 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 33894 This flag is true if the target supports 33895 `TARGET_ASM_NAMED_SECTION'. It must not be modified by 33896 command-line option processing. 33897 33898 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 33899 This flag is true if we can create zeroed data by switching to a 33900 BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space. 33901 This is true on most ELF targets. 33902 33903 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 33904 const char *NAME, int RELOC) 33905 Choose a set of section attributes for use by 33906 `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 33907 section name, and whether or not the declaration's initializer may 33908 contain runtime relocations. DECL may be null, in which case 33909 read-write data should be assumed. 33910 33911 The default version of this function handles choosing code vs data, 33912 read-only vs read-write data, and `flag_pic'. You should only 33913 need to override this if your target has special flags that might 33914 be set via `__attribute__'. 33915 33916 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 33917 TYPE, const char *TEXT) 33918 Provides the target with the ability to record the gcc command line 33919 switches that have been passed to the compiler, and options that 33920 are enabled. The TYPE argument specifies what is being recorded. 33921 It can take the following values: 33922 33923 `SWITCH_TYPE_PASSED' 33924 TEXT is a command line switch that has been set by the user. 33925 33926 `SWITCH_TYPE_ENABLED' 33927 TEXT is an option which has been enabled. This might be as a 33928 direct result of a command line switch, or because it is 33929 enabled by default or because it has been enabled as a side 33930 effect of a different command line switch. For example, the 33931 `-O2' switch enables various different individual 33932 optimization passes. 33933 33934 `SWITCH_TYPE_DESCRIPTIVE' 33935 TEXT is either NULL or some descriptive text which should be 33936 ignored. If TEXT is NULL then it is being used to warn the 33937 target hook that either recording is starting or ending. The 33938 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 33939 the warning is for start up and the second time the warning 33940 is for wind down. This feature is to allow the target hook 33941 to make any necessary preparations before it starts to record 33942 switches and to perform any necessary tidying up after it has 33943 finished recording switches. 33944 33945 `SWITCH_TYPE_LINE_START' 33946 This option can be ignored by this target hook. 33947 33948 `SWITCH_TYPE_LINE_END' 33949 This option can be ignored by this target hook. 33950 33951 The hook's return value must be zero. Other return values may be 33952 supported in the future. 33953 33954 By default this hook is set to NULL, but an example implementation 33955 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 33956 it records the switches as ASCII text inside a new, string 33957 mergeable section in the assembler output file. The name of the 33958 new section is provided by the 33959 `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 33960 33961 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 33962 This is the name of the section that will be created by the example 33963 ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target 33964 hook. 33965 33966 33967 File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 33968 33969 17.21.2 Output of Data 33970 ---------------------- 33971 33972 -- Target Hook: const char * TARGET_ASM_BYTE_OP 33973 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 33974 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 33975 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 33976 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 33977 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 33978 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 33979 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 33980 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 33981 These hooks specify assembly directives for creating certain kinds 33982 of integer object. The `TARGET_ASM_BYTE_OP' directive creates a 33983 byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an 33984 aligned two-byte object, and so on. Any of the hooks may be 33985 `NULL', indicating that no suitable directive is available. 33986 33987 The compiler will print these strings at the start of a new line, 33988 followed immediately by the object's initial value. In most cases, 33989 the string should contain a tab, a pseudo-op, and then another tab. 33990 33991 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 33992 ALIGNED_P) 33993 The `assemble_integer' function uses this hook to output an 33994 integer object. X is the object's value, SIZE is its size in 33995 bytes and ALIGNED_P indicates whether it is aligned. The function 33996 should return `true' if it was able to output the object. If it 33997 returns false, `assemble_integer' will try to split the object 33998 into smaller parts. 33999 34000 The default implementation of this hook will use the 34001 `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the 34002 relevant string is `NULL'. 34003 34004 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE, 34005 rtx X) 34006 A target hook to recognize RTX patterns that `output_addr_const' 34007 can't deal with, and output assembly code to FILE corresponding to 34008 the pattern X. This may be used to allow machine-dependent 34009 `UNSPEC's to appear within constants. 34010 34011 If target hook fails to recognize a pattern, it must return 34012 `false', so that a standard error message is printed. If it 34013 prints an error message itself, by calling, for example, 34014 `output_operand_lossage', it may just return `true'. 34015 34016 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 34017 A C statement to output to the stdio stream STREAM an assembler 34018 instruction to assemble a string constant containing the LEN bytes 34019 at PTR. PTR will be a C expression of type `char *' and LEN a C 34020 expression of type `int'. 34021 34022 If the assembler has a `.ascii' pseudo-op as found in the Berkeley 34023 Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'. 34024 34025 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 34026 A C statement to output word N of a function descriptor for DECL. 34027 This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is 34028 defined, and is otherwise unused. 34029 34030 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 34031 You may define this macro as a C expression. You should define the 34032 expression to have a nonzero value if GCC should output the 34033 constant pool for a function before the code for the function, or 34034 a zero value if GCC should output the constant pool after the 34035 function. If you do not define this macro, the usual case, GCC 34036 will output the constant pool before the function. 34037 34038 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 34039 A C statement to output assembler commands to define the start of 34040 the constant pool for a function. FUNNAME is a string giving the 34041 name of the function. Should the return type of the function be 34042 required, it can be obtained via FUNDECL. SIZE is the size, in 34043 bytes, of the constant pool that will be written immediately after 34044 this call. 34045 34046 If no constant-pool prefix is required, the usual case, this macro 34047 need not be defined. 34048 34049 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, 34050 LABELNO, JUMPTO) 34051 A C statement (with or without semicolon) to output a constant in 34052 the constant pool, if it needs special treatment. (This macro 34053 need not do anything for RTL expressions that can be output 34054 normally.) 34055 34056 The argument FILE is the standard I/O stream to output the 34057 assembler code on. X is the RTL expression for the constant to 34058 output, and MODE is the machine mode (in case X is a `const_int'). 34059 ALIGN is the required alignment for the value X; you should output 34060 an assembler directive to force this much alignment. 34061 34062 The argument LABELNO is a number to use in an internal label for 34063 the address of this pool entry. The definition of this macro is 34064 responsible for outputting the label definition at the proper 34065 place. Here is how to do this: 34066 34067 `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO); 34068 34069 When you output a pool entry specially, you should end with a 34070 `goto' to the label JUMPTO. This will prevent the same pool entry 34071 from being output a second time in the usual manner. 34072 34073 You need not define this macro if it would do nothing. 34074 34075 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 34076 A C statement to output assembler commands to at the end of the 34077 constant pool for a function. FUNNAME is a string giving the name 34078 of the function. Should the return type of the function be 34079 required, you can obtain it via FUNDECL. SIZE is the size, in 34080 bytes, of the constant pool that GCC wrote immediately before this 34081 call. 34082 34083 If no constant-pool epilogue is required, the usual case, you need 34084 not define this macro. 34085 34086 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 34087 Define this macro as a C expression which is nonzero if C is used 34088 as a logical line separator by the assembler. STR points to the 34089 position in the string where C was found; this can be used if a 34090 line separator uses multiple characters. 34091 34092 If you do not define this macro, the default is that only the 34093 character `;' is treated as a logical line separator. 34094 34095 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 34096 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 34097 These target hooks are C string constants, describing the syntax 34098 in the assembler for grouping arithmetic expressions. If not 34099 overridden, they default to normal parentheses, which is correct 34100 for most assemblers. 34101 34102 These macros are provided by `real.h' for writing the definitions of 34103 `ASM_OUTPUT_DOUBLE' and the like: 34104 34105 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 34106 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 34107 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 34108 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 34109 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 34110 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 34111 These translate X, of type `REAL_VALUE_TYPE', to the target's 34112 floating point representation, and store its bit pattern in the 34113 variable L. For `REAL_VALUE_TO_TARGET_SINGLE' and 34114 `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 34115 `long int'. For the others, it should be an array of `long int'. 34116 The number of elements in this array is determined by the size of 34117 the desired target floating point data type: 32 bits of it go in 34118 each `long int' array element. Each array element holds 32 bits 34119 of the result, even if `long int' is wider than 32 bits on the 34120 host machine. 34121 34122 The array element values are designed so that you can print them 34123 out using `fprintf' in the order they should appear in the target 34124 machine's memory. 34125 34126 34127 File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 34128 34129 17.21.3 Output of Uninitialized Variables 34130 ----------------------------------------- 34131 34132 Each of the macros in this section is used to do the whole job of 34133 outputting a single uninitialized variable. 34134 34135 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 34136 A C statement (sans semicolon) to output to the stdio stream 34137 STREAM the assembler definition of a common-label named NAME whose 34138 size is SIZE bytes. The variable ROUNDED is the size rounded up 34139 to whatever alignment the caller wants. It is possible that SIZE 34140 may be zero, for instance if a struct with no other member than a 34141 zero-length array is defined. In this case, the backend must 34142 output a symbol definition that allocates at least one byte, both 34143 so that the address of the resulting object does not compare equal 34144 to any other, and because some object formats cannot even express 34145 the concept of a zero-sized common symbol, as that is how they 34146 represent an ordinary undefined external. 34147 34148 Use the expression `assemble_name (STREAM, NAME)' to output the 34149 name itself; before and after that, output the additional 34150 assembler syntax for defining the name, and a newline. 34151 34152 This macro controls how the assembler definitions of uninitialized 34153 common global variables are output. 34154 34155 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 34156 Like `ASM_OUTPUT_COMMON' except takes the required alignment as a 34157 separate, explicit argument. If you define this macro, it is used 34158 in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in 34159 handling the required alignment of the variable. The alignment is 34160 specified as the number of bits. 34161 34162 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 34163 ALIGNMENT) 34164 Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 34165 to be output, if there is one, or `NULL_TREE' if there is no 34166 corresponding variable. If you define this macro, GCC will use it 34167 in place of both `ASM_OUTPUT_COMMON' and 34168 `ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 34169 see the variable's decl in order to chose what to output. 34170 34171 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 34172 A C statement (sans semicolon) to output to the stdio stream 34173 STREAM the assembler definition of uninitialized global DECL named 34174 NAME whose size is SIZE bytes. The variable ALIGNMENT is the 34175 alignment specified as the number of bits. 34176 34177 Try to use function `asm_output_aligned_bss' defined in file 34178 `varasm.c' when defining this macro. If unable, use the expression 34179 `assemble_name (STREAM, NAME)' to output the name itself; before 34180 and after that, output the additional assembler syntax for defining 34181 the name, and a newline. 34182 34183 There are two ways of handling global BSS. One is to define this 34184 macro. The other is to have `TARGET_ASM_SELECT_SECTION' return a 34185 switchable BSS section (*note 34186 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 34187 both. 34188 34189 Some languages do not have `common' data, and require a non-common 34190 form of global BSS in order to handle uninitialized globals 34191 efficiently. C++ is one example of this. However, if the target 34192 does not support global BSS, the front end may choose to make 34193 globals common in order to save space in the object file. 34194 34195 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 34196 A C statement (sans semicolon) to output to the stdio stream 34197 STREAM the assembler definition of a local-common-label named NAME 34198 whose size is SIZE bytes. The variable ROUNDED is the size 34199 rounded up to whatever alignment the caller wants. 34200 34201 Use the expression `assemble_name (STREAM, NAME)' to output the 34202 name itself; before and after that, output the additional 34203 assembler syntax for defining the name, and a newline. 34204 34205 This macro controls how the assembler definitions of uninitialized 34206 static variables are output. 34207 34208 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 34209 Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a 34210 separate, explicit argument. If you define this macro, it is used 34211 in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in 34212 handling the required alignment of the variable. The alignment is 34213 specified as the number of bits. 34214 34215 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 34216 ALIGNMENT) 34217 Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 34218 be output, if there is one, or `NULL_TREE' if there is no 34219 corresponding variable. If you define this macro, GCC will use it 34220 in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'. 34221 Define this macro when you need to see the variable's decl in 34222 order to chose what to output. 34223 34224 34225 File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 34226 34227 17.21.4 Output and Generation of Labels 34228 --------------------------------------- 34229 34230 This is about outputting labels. 34231 34232 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 34233 A C statement (sans semicolon) to output to the stdio stream 34234 STREAM the assembler definition of a label named NAME. Use the 34235 expression `assemble_name (STREAM, NAME)' to output the name 34236 itself; before and after that, output the additional assembler 34237 syntax for defining the name, and a newline. A default definition 34238 of this macro is provided which is correct for most systems. 34239 34240 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL) 34241 A C statement (sans semicolon) to output to the stdio stream 34242 STREAM the assembler definition of a label named NAME of a 34243 function. Use the expression `assemble_name (STREAM, NAME)' to 34244 output the name itself; before and after that, output the 34245 additional assembler syntax for defining the name, and a newline. 34246 A default definition of this macro is provided which is correct 34247 for most systems. 34248 34249 If this macro is not defined, then the function name is defined in 34250 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 34251 34252 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 34253 Identical to `ASM_OUTPUT_LABEL', except that NAME is known to 34254 refer to a compiler-generated label. The default definition uses 34255 `assemble_name_raw', which is like `assemble_name' except that it 34256 is more efficient. 34257 34258 -- Macro: SIZE_ASM_OP 34259 A C string containing the appropriate assembler directive to 34260 specify the size of a symbol, without any arguments. On systems 34261 that use ELF, the default (in `config/elfos.h') is `"\t.size\t"'; 34262 on other systems, the default is not to define this macro. 34263 34264 Define this macro only if it is correct to use the default 34265 definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and 34266 `ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 34267 custom definitions of those macros, or if you do not need explicit 34268 symbol sizes at all, do not define this macro. 34269 34270 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 34271 A C statement (sans semicolon) to output to the stdio stream 34272 STREAM a directive telling the assembler that the size of the 34273 symbol NAME is SIZE. SIZE is a `HOST_WIDE_INT'. If you define 34274 `SIZE_ASM_OP', a default definition of this macro is provided. 34275 34276 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 34277 A C statement (sans semicolon) to output to the stdio stream 34278 STREAM a directive telling the assembler to calculate the size of 34279 the symbol NAME by subtracting its address from the current 34280 address. 34281 34282 If you define `SIZE_ASM_OP', a default definition of this macro is 34283 provided. The default assumes that the assembler recognizes a 34284 special `.' symbol as referring to the current address, and can 34285 calculate the difference between this and another symbol. If your 34286 assembler does not recognize `.' or cannot do calculations with 34287 it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use 34288 some other technique. 34289 34290 -- Macro: NO_DOLLAR_IN_LABEL 34291 Define this macro if the assembler does not accept the character 34292 `$' in label names. By default constructors and destructors in 34293 G++ have `$' in the identifiers. If this macro is defined, `.' is 34294 used instead. 34295 34296 -- Macro: NO_DOT_IN_LABEL 34297 Define this macro if the assembler does not accept the character 34298 `.' in label names. By default constructors and destructors in G++ 34299 have names that use `.'. If this macro is defined, these names 34300 are rewritten to avoid `.'. 34301 34302 -- Macro: TYPE_ASM_OP 34303 A C string containing the appropriate assembler directive to 34304 specify the type of a symbol, without any arguments. On systems 34305 that use ELF, the default (in `config/elfos.h') is `"\t.type\t"'; 34306 on other systems, the default is not to define this macro. 34307 34308 Define this macro only if it is correct to use the default 34309 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 34310 need your own custom definition of this macro, or if you do not 34311 need explicit symbol types at all, do not define this macro. 34312 34313 -- Macro: TYPE_OPERAND_FMT 34314 A C string which specifies (using `printf' syntax) the format of 34315 the second operand to `TYPE_ASM_OP'. On systems that use ELF, the 34316 default (in `config/elfos.h') is `"@%s"'; on other systems, the 34317 default is not to define this macro. 34318 34319 Define this macro only if it is correct to use the default 34320 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 34321 need your own custom definition of this macro, or if you do not 34322 need explicit symbol types at all, do not define this macro. 34323 34324 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 34325 A C statement (sans semicolon) to output to the stdio stream 34326 STREAM a directive telling the assembler that the type of the 34327 symbol NAME is TYPE. TYPE is a C string; currently, that string 34328 is always either `"function"' or `"object"', but you should not 34329 count on this. 34330 34331 If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default 34332 definition of this macro is provided. 34333 34334 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 34335 A C statement (sans semicolon) to output to the stdio stream 34336 STREAM any text necessary for declaring the name NAME of a 34337 function which is being defined. This macro is responsible for 34338 outputting the label definition (perhaps using 34339 `ASM_OUTPUT_FUNCTION_LABEL'). The argument DECL is the 34340 `FUNCTION_DECL' tree node representing the function. 34341 34342 If this macro is not defined, then the function name is defined in 34343 the usual manner as a label (by means of 34344 `ASM_OUTPUT_FUNCTION_LABEL'). 34345 34346 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 34347 of this macro. 34348 34349 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 34350 A C statement (sans semicolon) to output to the stdio stream 34351 STREAM any text necessary for declaring the size of a function 34352 which is being defined. The argument NAME is the name of the 34353 function. The argument DECL is the `FUNCTION_DECL' tree node 34354 representing the function. 34355 34356 If this macro is not defined, then the function size is not 34357 defined. 34358 34359 You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition 34360 of this macro. 34361 34362 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 34363 A C statement (sans semicolon) to output to the stdio stream 34364 STREAM any text necessary for declaring the name NAME of an 34365 initialized variable which is being defined. This macro must 34366 output the label definition (perhaps using `ASM_OUTPUT_LABEL'). 34367 The argument DECL is the `VAR_DECL' tree node representing the 34368 variable. 34369 34370 If this macro is not defined, then the variable name is defined in 34371 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 34372 34373 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or 34374 `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 34375 34376 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE, 34377 const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE) 34378 A target hook to output to the stdio stream FILE any text necessary 34379 for declaring the name NAME of a constant which is being defined. 34380 This target hook is responsible for outputting the label 34381 definition (perhaps using `assemble_label'). The argument EXP is 34382 the value of the constant, and SIZE is the size of the constant in 34383 bytes. The NAME will be an internal label. 34384 34385 The default version of this target hook, define the NAME in the 34386 usual manner as a label (by means of `assemble_label'). 34387 34388 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in this target 34389 hook. 34390 34391 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 34392 A C statement (sans semicolon) to output to the stdio stream 34393 STREAM any text necessary for claiming a register REGNO for a 34394 global variable DECL with name NAME. 34395 34396 If you don't define this macro, that is equivalent to defining it 34397 to do nothing. 34398 34399 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 34400 A C statement (sans semicolon) to finish up declaring a variable 34401 name once the compiler has processed its initializer fully and 34402 thus has had a chance to determine the size of an array when 34403 controlled by an initializer. This is used on systems where it's 34404 necessary to declare something about the size of the object. 34405 34406 If you don't define this macro, that is equivalent to defining it 34407 to do nothing. 34408 34409 You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or 34410 `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 34411 34412 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 34413 char *NAME) 34414 This target hook is a function to output to the stdio stream 34415 STREAM some commands that will make the label NAME global; that 34416 is, available for reference from other files. 34417 34418 The default implementation relies on a proper definition of 34419 `GLOBAL_ASM_OP'. 34420 34421 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, 34422 tree DECL) 34423 This target hook is a function to output to the stdio stream 34424 STREAM some commands that will make the name associated with DECL 34425 global; that is, available for reference from other files. 34426 34427 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 34428 target hook. 34429 34430 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 34431 A C statement (sans semicolon) to output to the stdio stream 34432 STREAM some commands that will make the label NAME weak; that is, 34433 available for reference from other files but only used if no other 34434 definition is available. Use the expression `assemble_name 34435 (STREAM, NAME)' to output the name itself; before and after that, 34436 output the additional assembler syntax for making that name weak, 34437 and a newline. 34438 34439 If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not 34440 support weak symbols and you should not define the `SUPPORTS_WEAK' 34441 macro. 34442 34443 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 34444 Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and 34445 `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 34446 or variable decl. If VALUE is not `NULL', this C statement should 34447 output to the stdio stream STREAM assembler code which defines 34448 (equates) the weak symbol NAME to have the value VALUE. If VALUE 34449 is `NULL', it should output commands to make NAME weak. 34450 34451 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 34452 Outputs a directive that enables NAME to be used to refer to 34453 symbol VALUE with weak-symbol semantics. `decl' is the 34454 declaration of `name'. 34455 34456 -- Macro: SUPPORTS_WEAK 34457 A preprocessor constant expression which evaluates to true if the 34458 target supports weak symbols. 34459 34460 If you don't define this macro, `defaults.h' provides a default 34461 definition. If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is 34462 defined, the default definition is `1'; otherwise, it is `0'. 34463 34464 -- Macro: TARGET_SUPPORTS_WEAK 34465 A C expression which evaluates to true if the target supports weak 34466 symbols. 34467 34468 If you don't define this macro, `defaults.h' provides a default 34469 definition. The default definition is `(SUPPORTS_WEAK)'. Define 34470 this macro if you want to control weak symbol support with a 34471 compiler flag such as `-melf'. 34472 34473 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 34474 A C statement (sans semicolon) to mark DECL to be emitted as a 34475 public symbol such that extra copies in multiple translation units 34476 will be discarded by the linker. Define this macro if your object 34477 file format provides support for this concept, such as the `COMDAT' 34478 section flags in the Microsoft Windows PE/COFF format, and this 34479 support requires changes to DECL, such as putting it in a separate 34480 section. 34481 34482 -- Macro: SUPPORTS_ONE_ONLY 34483 A C expression which evaluates to true if the target supports 34484 one-only semantics. 34485 34486 If you don't define this macro, `varasm.c' provides a default 34487 definition. If `MAKE_DECL_ONE_ONLY' is defined, the default 34488 definition is `1'; otherwise, it is `0'. Define this macro if you 34489 want to control one-only symbol support with a compiler flag, or if 34490 setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to 34491 be emitted as one-only. 34492 34493 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 34494 VISIBILITY) 34495 This target hook is a function to output to ASM_OUT_FILE some 34496 commands that will make the symbol(s) associated with DECL have 34497 hidden, protected or internal visibility as specified by 34498 VISIBILITY. 34499 34500 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 34501 A C expression that evaluates to true if the target's linker 34502 expects that weak symbols do not appear in a static archive's 34503 table of contents. The default is `0'. 34504 34505 Leaving weak symbols out of an archive's table of contents means 34506 that, if a symbol will only have a definition in one translation 34507 unit and will have undefined references from other translation 34508 units, that symbol should not be weak. Defining this macro to be 34509 nonzero will thus have the effect that certain symbols that would 34510 normally be weak (explicit template instantiations, and vtables 34511 for polymorphic classes with noninline key methods) will instead 34512 be nonweak. 34513 34514 The C++ ABI requires this macro to be zero. Define this macro for 34515 targets where full C++ ABI compliance is impossible and where 34516 linker restrictions require weak symbols to be left out of a 34517 static archive's table of contents. 34518 34519 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 34520 A C statement (sans semicolon) to output to the stdio stream 34521 STREAM any text necessary for declaring the name of an external 34522 symbol named NAME which is referenced in this compilation but not 34523 defined. The value of DECL is the tree node for the declaration. 34524 34525 This macro need not be defined if it does not need to output 34526 anything. The GNU assembler and most Unix assemblers don't 34527 require anything. 34528 34529 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 34530 This target hook is a function to output to ASM_OUT_FILE an 34531 assembler pseudo-op to declare a library function name external. 34532 The name of the library function is given by SYMREF, which is a 34533 `symbol_ref'. 34534 34535 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 34536 *SYMBOL) 34537 This target hook is a function to output to ASM_OUT_FILE an 34538 assembler directive to annotate SYMBOL as used. The Darwin target 34539 uses the .no_dead_code_strip directive. 34540 34541 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 34542 A C statement (sans semicolon) to output to the stdio stream 34543 STREAM a reference in assembler syntax to a label named NAME. 34544 This should add `_' to the front of the name, if that is customary 34545 on your operating system, as it is in most Berkeley Unix systems. 34546 This macro is used in `assemble_name'. 34547 34548 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME) 34549 Given a symbol NAME, perform same mangling as `varasm.c''s 34550 `assemble_name', but in memory rather than to a file stream, 34551 returning result as an `IDENTIFIER_NODE'. Required for correct 34552 LTO symtabs. The default implementation calls the 34553 `TARGET_STRIP_NAME_ENCODING' hook and then prepends the 34554 `USER_LABEL_PREFIX', if any. 34555 34556 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 34557 A C statement (sans semicolon) to output a reference to 34558 `SYMBOL_REF' SYM. If not defined, `assemble_name' will be used to 34559 output the name of the symbol. This macro may be used to modify 34560 the way a symbol is referenced depending on information encoded by 34561 `TARGET_ENCODE_SECTION_INFO'. 34562 34563 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 34564 A C statement (sans semicolon) to output a reference to BUF, the 34565 result of `ASM_GENERATE_INTERNAL_LABEL'. If not defined, 34566 `assemble_name' will be used to output the name of the symbol. 34567 This macro is not used by `output_asm_label', or the `%l' 34568 specifier that calls it; the intention is that this macro should 34569 be set when it is necessary to output a label differently when its 34570 address is being taken. 34571 34572 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 34573 char *PREFIX, unsigned long LABELNO) 34574 A function to output to the stdio stream STREAM a label whose name 34575 is made from the string PREFIX and the number LABELNO. 34576 34577 It is absolutely essential that these labels be distinct from the 34578 labels used for user-level functions and variables. Otherwise, 34579 certain programs will have name conflicts with internal labels. 34580 34581 It is desirable to exclude internal labels from the symbol table 34582 of the object file. Most assemblers have a naming convention for 34583 labels that should be excluded; on many systems, the letter `L' at 34584 the beginning of a label has this effect. You should find out what 34585 convention your system uses, and follow it. 34586 34587 The default version of this function utilizes 34588 `ASM_GENERATE_INTERNAL_LABEL'. 34589 34590 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 34591 A C statement to output to the stdio stream STREAM a debug info 34592 label whose name is made from the string PREFIX and the number 34593 NUM. This is useful for VLIW targets, where debug info labels may 34594 need to be treated differently than branch target labels. On some 34595 systems, branch target labels must be at the beginning of 34596 instruction bundles, but debug info labels can occur in the middle 34597 of instruction bundles. 34598 34599 If this macro is not defined, then 34600 `(*targetm.asm_out.internal_label)' will be used. 34601 34602 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 34603 A C statement to store into the string STRING a label whose name 34604 is made from the string PREFIX and the number NUM. 34605 34606 This string, when output subsequently by `assemble_name', should 34607 produce the output that `(*targetm.asm_out.internal_label)' would 34608 produce with the same PREFIX and NUM. 34609 34610 If the string begins with `*', then `assemble_name' will output 34611 the rest of the string unchanged. It is often convenient for 34612 `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way. If the 34613 string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to 34614 output the string, and may change it. (Of course, 34615 `ASM_OUTPUT_LABELREF' is also part of your machine description, so 34616 you should know what it does on your machine.) 34617 34618 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 34619 A C expression to assign to OUTVAR (which is a variable of type 34620 `char *') a newly allocated string made from the string NAME and 34621 the number NUMBER, with some suitable punctuation added. Use 34622 `alloca' to get space for the string. 34623 34624 The string will be used as an argument to `ASM_OUTPUT_LABELREF' to 34625 produce an assembler label for an internal static variable whose 34626 name is NAME. Therefore, the string must be such as to result in 34627 valid assembler code. The argument NUMBER is different each time 34628 this macro is executed; it prevents conflicts between 34629 similarly-named internal static variables in different scopes. 34630 34631 Ideally this string should not be a valid C identifier, to prevent 34632 any conflict with the user's own symbols. Most assemblers allow 34633 periods or percent signs in assembler symbols; putting at least 34634 one of these between the name and the number will suffice. 34635 34636 If this macro is not defined, a default definition will be provided 34637 which is correct for most systems. 34638 34639 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 34640 A C statement to output to the stdio stream STREAM assembler code 34641 which defines (equates) the symbol NAME to have the value VALUE. 34642 34643 If `SET_ASM_OP' is defined, a default definition is provided which 34644 is correct for most systems. 34645 34646 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 34647 DECL_OF_VALUE) 34648 A C statement to output to the stdio stream STREAM assembler code 34649 which defines (equates) the symbol whose tree node is DECL_OF_NAME 34650 to have the value of the tree node DECL_OF_VALUE. This macro will 34651 be used in preference to `ASM_OUTPUT_DEF' if it is defined and if 34652 the tree nodes are available. 34653 34654 If `SET_ASM_OP' is defined, a default definition is provided which 34655 is correct for most systems. 34656 34657 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 34658 A C statement that evaluates to true if the assembler code which 34659 defines (equates) the symbol whose tree node is DECL_OF_NAME to 34660 have the value of the tree node DECL_OF_VALUE should be emitted 34661 near the end of the current compilation unit. The default is to 34662 not defer output of defines. This macro affects defines output by 34663 `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'. 34664 34665 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 34666 A C statement to output to the stdio stream STREAM assembler code 34667 which defines (equates) the weak symbol NAME to have the value 34668 VALUE. If VALUE is `NULL', it defines NAME as an undefined weak 34669 symbol. 34670 34671 Define this macro if the target only supports weak aliases; define 34672 `ASM_OUTPUT_DEF' instead if possible. 34673 34674 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 34675 SEL_NAME) 34676 Define this macro to override the default assembler names used for 34677 Objective-C methods. 34678 34679 The default name is a unique method number followed by the name of 34680 the class (e.g. `_1_Foo'). For methods in categories, the name of 34681 the category is also included in the assembler name (e.g. 34682 `_1_Foo_Bar'). 34683 34684 These names are safe on most systems, but make debugging difficult 34685 since the method's selector is not present in the name. 34686 Therefore, particular systems define other ways of computing names. 34687 34688 BUF is an expression of type `char *' which gives you a buffer in 34689 which to store the name; its length is as long as CLASS_NAME, 34690 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 34691 34692 The argument IS_INST specifies whether the method is an instance 34693 method or a class method; CLASS_NAME is the name of the class; 34694 CAT_NAME is the name of the category (or `NULL' if the method is 34695 not in a category); and SEL_NAME is the name of the selector. 34696 34697 On systems where the assembler can handle quoted names, you can 34698 use this macro to provide more human-readable names. 34699 34700 34701 File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 34702 34703 17.21.5 How Initialization Functions Are Handled 34704 ------------------------------------------------ 34705 34706 The compiled code for certain languages includes "constructors" (also 34707 called "initialization routines")--functions to initialize data in the 34708 program when the program is started. These functions need to be called 34709 before the program is "started"--that is to say, before `main' is 34710 called. 34711 34712 Compiling some languages generates "destructors" (also called 34713 "termination routines") that should be called when the program 34714 terminates. 34715 34716 To make the initialization and termination functions work, the compiler 34717 must output something in the assembler code to cause those functions to 34718 be called at the appropriate time. When you port the compiler to a new 34719 system, you need to specify how to do this. 34720 34721 There are two major ways that GCC currently supports the execution of 34722 initialization and termination functions. Each way has two variants. 34723 Much of the structure is common to all four variations. 34724 34725 The linker must build two lists of these functions--a list of 34726 initialization functions, called `__CTOR_LIST__', and a list of 34727 termination functions, called `__DTOR_LIST__'. 34728 34729 Each list always begins with an ignored function pointer (which may 34730 hold 0, -1, or a count of the function pointers after it, depending on 34731 the environment). This is followed by a series of zero or more function 34732 pointers to constructors (or destructors), followed by a function 34733 pointer containing zero. 34734 34735 Depending on the operating system and its executable file format, 34736 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup 34737 time and exit time. Constructors are called in reverse order of the 34738 list; destructors in forward order. 34739 34740 The best way to handle static constructors works only for object file 34741 formats which provide arbitrarily-named sections. A section is set 34742 aside for a list of constructors, and another for a list of destructors. 34743 Traditionally these are called `.ctors' and `.dtors'. Each object file 34744 that defines an initialization function also puts a word in the 34745 constructor section to point to that function. The linker accumulates 34746 all these words into one contiguous `.ctors' section. Termination 34747 functions are handled similarly. 34748 34749 This method will be chosen as the default by `target-def.h' if 34750 `TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 34751 arbitrary sections, but does support special designated constructor and 34752 destructor sections may define `CTORS_SECTION_ASM_OP' and 34753 `DTORS_SECTION_ASM_OP' to achieve the same effect. 34754 34755 When arbitrary sections are available, there are two variants, 34756 depending upon how the code in `crtstuff.c' is called. On systems that 34757 support a ".init" section which is executed at program startup, parts 34758 of `crtstuff.c' are compiled into that section. The program is linked 34759 by the `gcc' driver like this: 34760 34761 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 34762 34763 The prologue of a function (`__init') appears in the `.init' section 34764 of `crti.o'; the epilogue appears in `crtn.o'. Likewise for the 34765 function `__fini' in the ".fini" section. Normally these files are 34766 provided by the operating system or by the GNU C library, but are 34767 provided by GCC for a few targets. 34768 34769 The objects `crtbegin.o' and `crtend.o' are (for most targets) 34770 compiled from `crtstuff.c'. They contain, among other things, code 34771 fragments within the `.init' and `.fini' sections that branch to 34772 routines in the `.text' section. The linker will pull all parts of a 34773 section together, which results in a complete `__init' function that 34774 invokes the routines we need at startup. 34775 34776 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro 34777 properly. 34778 34779 If no init section is available, when GCC compiles any function called 34780 `main' (or more accurately, any function designated as a program entry 34781 point by the language front end calling `expand_main_function'), it 34782 inserts a procedure call to `__main' as the first executable code after 34783 the function prologue. The `__main' function is defined in `libgcc2.c' 34784 and runs the global constructors. 34785 34786 In file formats that don't support arbitrary sections, there are again 34787 two variants. In the simplest variant, the GNU linker (GNU `ld') and 34788 an `a.out' format must be used. In this case, `TARGET_ASM_CONSTRUCTOR' 34789 is defined to produce a `.stabs' entry of type `N_SETT', referencing 34790 the name `__CTOR_LIST__', and with the address of the void function 34791 containing the initialization code as its value. The GNU linker 34792 recognizes this as a request to add the value to a "set"; the values 34793 are accumulated, and are eventually placed in the executable as a 34794 vector in the format described above, with a leading (ignored) count 34795 and a trailing zero element. `TARGET_ASM_DESTRUCTOR' is handled 34796 similarly. Since no init section is available, the absence of 34797 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main' 34798 as above, starting the initialization process. 34799 34800 The last variant uses neither arbitrary sections nor the GNU linker. 34801 This is preferable when you want to do dynamic linking and when using 34802 file formats which the GNU linker does not support, such as `ECOFF'. In 34803 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and 34804 termination functions are recognized simply by their names. This 34805 requires an extra program in the linkage step, called `collect2'. This 34806 program pretends to be the linker, for use with GCC; it does its job by 34807 running the ordinary linker, but also arranges to include the vectors of 34808 initialization and termination functions. These functions are called 34809 via `__main' as described above. In order to use this method, 34810 `use_collect2' must be defined in the target in `config.gcc'. 34811 34812 The following section describes the specific macros that control and 34813 customize the handling of initialization and termination functions. 34814 34815 34816 File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 34817 34818 17.21.6 Macros Controlling Initialization Routines 34819 -------------------------------------------------- 34820 34821 Here are the macros that control how the compiler handles initialization 34822 and termination functions: 34823 34824 -- Macro: INIT_SECTION_ASM_OP 34825 If defined, a C string constant, including spacing, for the 34826 assembler operation to identify the following data as 34827 initialization code. If not defined, GCC will assume such a 34828 section does not exist. When you are using special sections for 34829 initialization and termination functions, this macro also controls 34830 how `crtstuff.c' and `libgcc2.c' arrange to run the initialization 34831 functions. 34832 34833 -- Macro: HAS_INIT_SECTION 34834 If defined, `main' will not call `__main' as described above. 34835 This macro should be defined for systems that control start-up code 34836 on a symbol-by-symbol basis, such as OSF/1, and should not be 34837 defined explicitly for systems that support `INIT_SECTION_ASM_OP'. 34838 34839 -- Macro: LD_INIT_SWITCH 34840 If defined, a C string constant for a switch that tells the linker 34841 that the following symbol is an initialization routine. 34842 34843 -- Macro: LD_FINI_SWITCH 34844 If defined, a C string constant for a switch that tells the linker 34845 that the following symbol is a finalization routine. 34846 34847 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 34848 If defined, a C statement that will write a function that can be 34849 automatically called when a shared library is loaded. The function 34850 should call FUNC, which takes no arguments. If not defined, and 34851 the object format requires an explicit initialization function, 34852 then a function called `_GLOBAL__DI' will be generated. 34853 34854 This function and the following one are used by collect2 when 34855 linking a shared library that needs constructors or destructors, 34856 or has DWARF2 exception tables embedded in the code. 34857 34858 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 34859 If defined, a C statement that will write a function that can be 34860 automatically called when a shared library is unloaded. The 34861 function should call FUNC, which takes no arguments. If not 34862 defined, and the object format requires an explicit finalization 34863 function, then a function called `_GLOBAL__DD' will be generated. 34864 34865 -- Macro: INVOKE__main 34866 If defined, `main' will call `__main' despite the presence of 34867 `INIT_SECTION_ASM_OP'. This macro should be defined for systems 34868 where the init section is not actually run automatically, but is 34869 still useful for collecting the lists of constructors and 34870 destructors. 34871 34872 -- Macro: SUPPORTS_INIT_PRIORITY 34873 If nonzero, the C++ `init_priority' attribute is supported and the 34874 compiler should emit instructions to control the order of 34875 initialization of objects. If zero, the compiler will issue an 34876 error message upon encountering an `init_priority' attribute. 34877 34878 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 34879 This value is true if the target supports some "native" method of 34880 collecting constructors and destructors to be run at startup and 34881 exit. It is false if we must use `collect2'. 34882 34883 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 34884 If defined, a function that outputs assembler code to arrange to 34885 call the function referenced by SYMBOL at initialization time. 34886 34887 Assume that SYMBOL is a `SYMBOL_REF' for a function taking no 34888 arguments and with no return value. If the target supports 34889 initialization priorities, PRIORITY is a value between 0 and 34890 `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'. 34891 34892 If this macro is not defined by the target, a suitable default will 34893 be chosen if (1) the target supports arbitrary section names, (2) 34894 the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2' 34895 is not defined. 34896 34897 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 34898 This is like `TARGET_ASM_CONSTRUCTOR' but used for termination 34899 functions rather than initialization functions. 34900 34901 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 34902 generated for the generated object file will have static linkage. 34903 34904 If your system uses `collect2' as the means of processing 34905 constructors, then that program normally uses `nm' to scan an object 34906 file for constructor functions to be called. 34907 34908 On certain kinds of systems, you can define this macro to make 34909 `collect2' work faster (and, in some cases, make it work at all): 34910 34911 -- Macro: OBJECT_FORMAT_COFF 34912 Define this macro if the system uses COFF (Common Object File 34913 Format) object files, so that `collect2' can assume this format 34914 and scan object files directly for dynamic constructor/destructor 34915 functions. 34916 34917 This macro is effective only in a native compiler; `collect2' as 34918 part of a cross compiler always uses `nm' for the target machine. 34919 34920 -- Macro: REAL_NM_FILE_NAME 34921 Define this macro as a C string constant containing the file name 34922 to use to execute `nm'. The default is to search the path 34923 normally for `nm'. 34924 34925 -- Macro: NM_FLAGS 34926 `collect2' calls `nm' to scan object files for static constructors 34927 and destructors and LTO info. By default, `-n' is passed. Define 34928 `NM_FLAGS' to a C string constant if other options are needed to 34929 get the same output format as GNU `nm -n' produces. 34930 34931 If your system supports shared libraries and has a program to list the 34932 dynamic dependencies of a given library or executable, you can define 34933 these macros to enable support for running initialization and 34934 termination functions in shared libraries: 34935 34936 -- Macro: LDD_SUFFIX 34937 Define this macro to a C string constant containing the name of 34938 the program which lists dynamic dependencies, like `ldd' under 34939 SunOS 4. 34940 34941 -- Macro: PARSE_LDD_OUTPUT (PTR) 34942 Define this macro to be C code that extracts filenames from the 34943 output of the program denoted by `LDD_SUFFIX'. PTR is a variable 34944 of type `char *' that points to the beginning of a line of output 34945 from `LDD_SUFFIX'. If the line lists a dynamic dependency, the 34946 code must advance PTR to the beginning of the filename on that 34947 line. Otherwise, it must set PTR to `NULL'. 34948 34949 -- Macro: SHLIB_SUFFIX 34950 Define this macro to a C string constant containing the default 34951 shared library extension of the target (e.g., `".so"'). `collect2' 34952 strips version information after this suffix when generating global 34953 constructor and destructor names. This define is only needed on 34954 targets that use `collect2' to process constructors and 34955 destructors. 34956 34957 34958 File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 34959 34960 17.21.7 Output of Assembler Instructions 34961 ---------------------------------------- 34962 34963 This describes assembler instruction output. 34964 34965 -- Macro: REGISTER_NAMES 34966 A C initializer containing the assembler's names for the machine 34967 registers, each one as a C string constant. This is what 34968 translates register numbers in the compiler into assembler 34969 language. 34970 34971 -- Macro: ADDITIONAL_REGISTER_NAMES 34972 If defined, a C initializer for an array of structures containing 34973 a name and a register number. This macro defines additional names 34974 for hard registers, thus allowing the `asm' option in declarations 34975 to refer to registers using alternate names. 34976 34977 -- Macro: OVERLAPPING_REGISTER_NAMES 34978 If defined, a C initializer for an array of structures containing a 34979 name, a register number and a count of the number of consecutive 34980 machine registers the name overlaps. This macro defines additional 34981 names for hard registers, thus allowing the `asm' option in 34982 declarations to refer to registers using alternate names. Unlike 34983 `ADDITIONAL_REGISTER_NAMES', this macro should be used when the 34984 register name implies multiple underlying registers. 34985 34986 This macro should be used when it is important that a clobber in an 34987 `asm' statement clobbers all the underlying values implied by the 34988 register name. For example, on ARM, clobbering the 34989 double-precision VFP register "d0" implies clobbering both 34990 single-precision registers "s0" and "s1". 34991 34992 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 34993 Define this macro if you are using an unusual assembler that 34994 requires different names for the machine instructions. 34995 34996 The definition is a C statement or statements which output an 34997 assembler instruction opcode to the stdio stream STREAM. The 34998 macro-operand PTR is a variable of type `char *' which points to 34999 the opcode name in its "internal" form--the form that is written 35000 in the machine description. The definition should output the 35001 opcode name to STREAM, performing any translation you desire, and 35002 increment the variable PTR to point at the end of the opcode so 35003 that it will not be output twice. 35004 35005 In fact, your macro definition may process less than the entire 35006 opcode name, or more than the opcode name; but if you want to 35007 process text that includes `%'-sequences to substitute operands, 35008 you must take care of the substitution yourself. Just be sure to 35009 increment PTR over whatever text should not be output normally. 35010 35011 If you need to look at the operand values, they can be found as the 35012 elements of `recog_data.operand'. 35013 35014 If the macro definition does nothing, the instruction is output in 35015 the usual way. 35016 35017 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 35018 If defined, a C statement to be executed just prior to the output 35019 of assembler code for INSN, to modify the extracted operands so 35020 they will be output differently. 35021 35022 Here the argument OPVEC is the vector containing the operands 35023 extracted from INSN, and NOPERANDS is the number of elements of 35024 the vector which contain meaningful data for this insn. The 35025 contents of this vector are what will be used to convert the insn 35026 template into assembler code, so you can change the assembler 35027 output by changing the contents of the vector. 35028 35029 This macro is useful when various assembler syntaxes share a single 35030 file of instruction patterns; by defining this macro differently, 35031 you can cause a large class of instructions to be output 35032 differently (such as with rearranged operands). Naturally, 35033 variations in assembler syntax affecting individual insn patterns 35034 ought to be handled by writing conditional output routines in 35035 those patterns. 35036 35037 If this macro is not defined, it is equivalent to a null statement. 35038 35039 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx 35040 INSN, rtx *OPVEC, int NOPERANDS) 35041 If defined, this target hook is a function which is executed just 35042 after the output of assembler code for INSN, to change the mode of 35043 the assembler if necessary. 35044 35045 Here the argument OPVEC is the vector containing the operands 35046 extracted from INSN, and NOPERANDS is the number of elements of 35047 the vector which contain meaningful data for this insn. The 35048 contents of this vector are what was used to convert the insn 35049 template into assembler code, so you can change the assembler mode 35050 by checking the contents of the vector. 35051 35052 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 35053 A C compound statement to output to stdio stream STREAM the 35054 assembler syntax for an instruction operand X. X is an RTL 35055 expression. 35056 35057 CODE is a value that can be used to specify one of several ways of 35058 printing the operand. It is used when identical operands must be 35059 printed differently depending on the context. CODE comes from the 35060 `%' specification that was used to request printing of the 35061 operand. If the specification was just `%DIGIT' then CODE is 0; 35062 if the specification was `%LTR DIGIT' then CODE is the ASCII code 35063 for LTR. 35064 35065 If X is a register, this macro should print the register's name. 35066 The names can be found in an array `reg_names' whose type is `char 35067 *[]'. `reg_names' is initialized from `REGISTER_NAMES'. 35068 35069 When the machine description has a specification `%PUNCT' (a `%' 35070 followed by a punctuation character), this macro is called with a 35071 null pointer for X and the punctuation character for CODE. 35072 35073 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 35074 A C expression which evaluates to true if CODE is a valid 35075 punctuation character for use in the `PRINT_OPERAND' macro. If 35076 `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 35077 punctuation characters (except for the standard one, `%') are used 35078 in this way. 35079 35080 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 35081 A C compound statement to output to stdio stream STREAM the 35082 assembler syntax for an instruction operand that is a memory 35083 reference whose address is X. X is an RTL expression. 35084 35085 On some machines, the syntax for a symbolic address depends on the 35086 section that the address refers to. On these machines, define the 35087 hook `TARGET_ENCODE_SECTION_INFO' to store the information into the 35088 `symbol_ref', and then check for it here. *Note Assembler 35089 Format::. 35090 35091 -- Macro: DBR_OUTPUT_SEQEND (FILE) 35092 A C statement, to be executed after all slot-filler instructions 35093 have been output. If necessary, call `dbr_sequence_length' to 35094 determine the number of slots filled in a sequence (zero if not 35095 currently outputting a sequence), to decide how many no-ops to 35096 output, or whatever. 35097 35098 Don't define this macro if it has nothing to do, but it is helpful 35099 in reading assembly output if the extent of the delay sequence is 35100 made explicit (e.g. with white space). 35101 35102 Note that output routines for instructions with delay slots must be 35103 prepared to deal with not being output as part of a sequence (i.e. when 35104 the scheduling pass is not run, or when no slot fillers could be 35105 found.) The variable `final_sequence' is null when not processing a 35106 sequence, otherwise it contains the `sequence' rtx being output. 35107 35108 -- Macro: REGISTER_PREFIX 35109 -- Macro: LOCAL_LABEL_PREFIX 35110 -- Macro: USER_LABEL_PREFIX 35111 -- Macro: IMMEDIATE_PREFIX 35112 If defined, C string expressions to be used for the `%R', `%L', 35113 `%U', and `%I' options of `asm_fprintf' (see `final.c'). These 35114 are useful when a single `md' file must support multiple assembler 35115 formats. In that case, the various `tm.h' files can define these 35116 macros differently. 35117 35118 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 35119 If defined this macro should expand to a series of `case' 35120 statements which will be parsed inside the `switch' statement of 35121 the `asm_fprintf' function. This allows targets to define extra 35122 printf formats which may useful when generating their assembler 35123 statements. Note that uppercase letters are reserved for future 35124 generic extensions to asm_fprintf, and so are not available to 35125 target specific code. The output file is given by the parameter 35126 FILE. The varargs input pointer is ARGPTR and the rest of the 35127 format string, starting the character after the one that is being 35128 switched upon, is pointed to by FORMAT. 35129 35130 -- Macro: ASSEMBLER_DIALECT 35131 If your target supports multiple dialects of assembler language 35132 (such as different opcodes), define this macro as a C expression 35133 that gives the numeric index of the assembler language dialect to 35134 use, with zero as the first variant. 35135 35136 If this macro is defined, you may use constructs of the form 35137 `{option0|option1|option2...}' 35138 in the output templates of patterns (*note Output Template::) or 35139 in the first argument of `asm_fprintf'. This construct outputs 35140 `option0', `option1', `option2', etc., if the value of 35141 `ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 35142 within these strings retain their usual meaning. If there are 35143 fewer alternatives within the braces than the value of 35144 `ASSEMBLER_DIALECT', the construct outputs nothing. 35145 35146 If you do not define this macro, the characters `{', `|' and `}' 35147 do not have any special meaning when used in templates or operands 35148 to `asm_fprintf'. 35149 35150 Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX', 35151 `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the 35152 variations in assembler language syntax with that mechanism. 35153 Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax 35154 if the syntax variant are larger and involve such things as 35155 different opcodes or operand order. 35156 35157 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 35158 A C expression to output to STREAM some assembler code which will 35159 push hard register number REGNO onto the stack. The code need not 35160 be optimal, since this macro is used only when profiling. 35161 35162 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 35163 A C expression to output to STREAM some assembler code which will 35164 pop hard register number REGNO off of the stack. The code need 35165 not be optimal, since this macro is used only when profiling. 35166 35167 35168 File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 35169 35170 17.21.8 Output of Dispatch Tables 35171 --------------------------------- 35172 35173 This concerns dispatch tables. 35174 35175 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 35176 A C statement to output to the stdio stream STREAM an assembler 35177 pseudo-instruction to generate a difference between two labels. 35178 VALUE and REL are the numbers of two internal labels. The 35179 definitions of these labels are output using 35180 `(*targetm.asm_out.internal_label)', and they must be printed in 35181 the same way here. For example, 35182 35183 fprintf (STREAM, "\t.word L%d-L%d\n", 35184 VALUE, REL) 35185 35186 You must provide this macro on machines where the addresses in a 35187 dispatch table are relative to the table's own address. If 35188 defined, GCC will also use this macro on all machines when 35189 producing PIC. BODY is the body of the `ADDR_DIFF_VEC'; it is 35190 provided so that the mode and flags can be read. 35191 35192 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 35193 This macro should be provided on machines where the addresses in a 35194 dispatch table are absolute. 35195 35196 The definition should be a C statement to output to the stdio 35197 stream STREAM an assembler pseudo-instruction to generate a 35198 reference to a label. VALUE is the number of an internal label 35199 whose definition is output using 35200 `(*targetm.asm_out.internal_label)'. For example, 35201 35202 fprintf (STREAM, "\t.word L%d\n", VALUE) 35203 35204 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 35205 Define this if the label before a jump-table needs to be output 35206 specially. The first three arguments are the same as for 35207 `(*targetm.asm_out.internal_label)'; the fourth argument is the 35208 jump-table which follows (a `jump_insn' containing an `addr_vec' 35209 or `addr_diff_vec'). 35210 35211 This feature is used on system V to output a `swbeg' statement for 35212 the table. 35213 35214 If this macro is not defined, these labels are output with 35215 `(*targetm.asm_out.internal_label)'. 35216 35217 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 35218 Define this if something special must be output at the end of a 35219 jump-table. The definition should be a C statement to be executed 35220 after the assembler code for the table is written. It should write 35221 the appropriate code to stdio stream STREAM. The argument TABLE 35222 is the jump-table insn, and NUM is the label-number of the 35223 preceding label. 35224 35225 If this macro is not defined, nothing special is output at the end 35226 of the jump-table. 35227 35228 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 35229 DECL, int FOR_EH, int EMPTY) 35230 This target hook emits a label at the beginning of each FDE. It 35231 should be defined on targets where FDEs need special labels, and it 35232 should write the appropriate label, for the FDE associated with the 35233 function declaration DECL, to the stdio stream STREAM. The third 35234 argument, FOR_EH, is a boolean: true if this is for an exception 35235 table. The fourth argument, EMPTY, is a boolean: true if this is 35236 a placeholder label for an omitted FDE. 35237 35238 The default is that FDEs are not given nonlocal labels. 35239 35240 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 35241 This target hook emits a label at the beginning of the exception 35242 table. It should be defined on targets where it is desirable for 35243 the table to be broken up according to function. 35244 35245 The default is that no label is emitted. 35246 35247 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx 35248 PERSONALITY) 35249 If the target implements `TARGET_ASM_UNWIND_EMIT', this hook may 35250 be used to emit a directive to install a personality hook into the 35251 unwind info. This hook should not be used if dwarf2 unwind info 35252 is used. 35253 35254 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx INSN) 35255 This target hook emits assembly directives required to unwind the 35256 given instruction. This is only used when 35257 `TARGET_EXCEPT_UNWIND_INFO' returns `UI_TARGET'. 35258 35259 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN 35260 True if the `TARGET_ASM_UNWIND_EMIT' hook should be called before 35261 the assembly for INSN has been emitted, false if the hook should 35262 be called afterward. 35263 35264 35265 File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 35266 35267 17.21.9 Assembler Commands for Exception Regions 35268 ------------------------------------------------ 35269 35270 This describes commands marking the start and the end of an exception 35271 region. 35272 35273 -- Macro: EH_FRAME_SECTION_NAME 35274 If defined, a C string constant for the name of the section 35275 containing exception handling frame unwind information. If not 35276 defined, GCC will provide a default definition if the target 35277 supports named sections. `crtstuff.c' uses this macro to switch 35278 to the appropriate section. 35279 35280 You should define this symbol if your target supports DWARF 2 frame 35281 unwind information and the default definition does not work. 35282 35283 -- Macro: EH_FRAME_IN_DATA_SECTION 35284 If defined, DWARF 2 frame unwind information will be placed in the 35285 data section even though the target supports named sections. This 35286 might be necessary, for instance, if the system linker does garbage 35287 collection and sections cannot be marked as not to be collected. 35288 35289 Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also 35290 defined. 35291 35292 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 35293 Define this macro to 1 if your target is such that no frame unwind 35294 information encoding used with non-PIC code will ever require a 35295 runtime relocation, but the linker may not support merging 35296 read-only and read-write sections into a single read-write section. 35297 35298 -- Macro: MASK_RETURN_ADDR 35299 An rtx used to mask the return address found via 35300 `RETURN_ADDR_RTX', so that it does not contain any extraneous set 35301 bits in it. 35302 35303 -- Macro: DWARF2_UNWIND_INFO 35304 Define this macro to 0 if your target supports DWARF 2 frame unwind 35305 information, but it does not yet work with exception handling. 35306 Otherwise, if your target supports this information (if it defines 35307 `INCOMING_RETURN_ADDR_RTX' and `OBJECT_FORMAT_ELF'), GCC will 35308 provide a default definition of 1. 35309 35310 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO 35311 (struct gcc_options *OPTS) 35312 This hook defines the mechanism that will be used for exception 35313 handling by the target. If the target has ABI specified unwind 35314 tables, the hook should return `UI_TARGET'. If the target is to 35315 use the `setjmp'/`longjmp'-based exception handling scheme, the 35316 hook should return `UI_SJLJ'. If the target supports DWARF 2 35317 frame unwind information, the hook should return `UI_DWARF2'. 35318 35319 A target may, if exceptions are disabled, choose to return 35320 `UI_NONE'. This may end up simplifying other parts of 35321 target-specific code. The default implementation of this hook 35322 never returns `UI_NONE'. 35323 35324 Note that the value returned by this hook should be constant. It 35325 should not depend on anything except the command-line switches 35326 described by OPTS. In particular, the setting `UI_SJLJ' must be 35327 fixed at compiler start-up as C pre-processor macros and builtin 35328 functions related to exception handling are set up depending on 35329 this setting. 35330 35331 The default implementation of the hook first honors the 35332 `--enable-sjlj-exceptions' configure option, then 35333 `DWARF2_UNWIND_INFO', and finally defaults to `UI_SJLJ'. If 35334 `DWARF2_UNWIND_INFO' depends on command-line options, the target 35335 must define this hook so that OPTS is used correctly. 35336 35337 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 35338 This variable should be set to `true' if the target ABI requires 35339 unwinding tables even when exceptions are not used. It must not 35340 be modified by command-line option processing. 35341 35342 -- Macro: DONT_USE_BUILTIN_SETJMP 35343 Define this macro to 1 if the `setjmp'/`longjmp'-based scheme 35344 should use the `setjmp'/`longjmp' functions from the C library 35345 instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery. 35346 35347 -- Macro: JMP_BUF_SIZE 35348 This macro has no effect unless `DONT_USE_BUILTIN_SETJMP' is also 35349 defined. Define this macro if the default size of `jmp_buf' buffer 35350 for the `setjmp'/`longjmp'-based exception handling mechanism is 35351 not large enough, or if it is much too large. The default size is 35352 `FIRST_PSEUDO_REGISTER * sizeof(void *)'. 35353 35354 -- Macro: DWARF_CIE_DATA_ALIGNMENT 35355 This macro need only be defined if the target might save registers 35356 in the function prologue at an offset to the stack pointer that is 35357 not aligned to `UNITS_PER_WORD'. The definition should be the 35358 negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined, 35359 and the positive minimum alignment otherwise. *Note SDB and 35360 DWARF::. Only applicable if the target supports DWARF 2 frame 35361 unwind information. 35362 35363 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 35364 Contains the value true if the target should add a zero word onto 35365 the end of a Dwarf-2 frame info section when used for exception 35366 handling. Default value is false if `EH_FRAME_SECTION_NAME' is 35367 defined, and true otherwise. 35368 35369 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 35370 Given a register, this hook should return a parallel of registers 35371 to represent where to find the register pieces. Define this hook 35372 if the register and its mode are represented in Dwarf in 35373 non-contiguous locations, or if the register should be represented 35374 in more than one register in Dwarf. Otherwise, this hook should 35375 return `NULL_RTX'. If not defined, the default is to return 35376 `NULL_RTX'. 35377 35378 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 35379 If some registers are represented in Dwarf-2 unwind information in 35380 multiple pieces, define this hook to fill in information about the 35381 sizes of those pieces in the table used by the unwinder at runtime. 35382 It will be called by `expand_builtin_init_dwarf_reg_sizes' after 35383 filling in a single size corresponding to each hard register; 35384 ADDRESS is the address of the table. 35385 35386 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 35387 This hook is used to output a reference from a frame unwinding 35388 table to the type_info object identified by SYM. It should return 35389 `true' if the reference was output. Returning `false' will cause 35390 the reference to be output using the normal Dwarf2 routines. 35391 35392 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 35393 This flag should be set to `true' on targets that use an ARM EABI 35394 based unwinding library, and `false' on other targets. This 35395 effects the format of unwinding tables, and how the unwinder in 35396 entered after running a cleanup. The default is `false'. 35397 35398 35399 File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 35400 35401 17.21.10 Assembler Commands for Alignment 35402 ----------------------------------------- 35403 35404 This describes commands for alignment. 35405 35406 -- Macro: JUMP_ALIGN (LABEL) 35407 The alignment (log base 2) to put in front of LABEL, which is a 35408 common destination of jumps and has no fallthru incoming edge. 35409 35410 This macro need not be defined if you don't want any special 35411 alignment to be done at such a time. Most machine descriptions do 35412 not currently define the macro. 35413 35414 Unless it's necessary to inspect the LABEL parameter, it is better 35415 to set the variable ALIGN_JUMPS in the target's 35416 `TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35417 user's selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation. 35418 35419 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx LABEL) 35420 The maximum number of bytes to skip before LABEL when applying 35421 `JUMP_ALIGN'. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is 35422 defined. 35423 35424 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 35425 The alignment (log base 2) to put in front of LABEL, which follows 35426 a `BARRIER'. 35427 35428 This macro need not be defined if you don't want any special 35429 alignment to be done at such a time. Most machine descriptions do 35430 not currently define the macro. 35431 35432 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (rtx 35433 LABEL) 35434 The maximum number of bytes to skip before LABEL when applying 35435 `LABEL_ALIGN_AFTER_BARRIER'. This works only if 35436 `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35437 35438 -- Macro: LOOP_ALIGN (LABEL) 35439 The alignment (log base 2) to put in front of LABEL, which follows 35440 a `NOTE_INSN_LOOP_BEG' note. 35441 35442 This macro need not be defined if you don't want any special 35443 alignment to be done at such a time. Most machine descriptions do 35444 not currently define the macro. 35445 35446 Unless it's necessary to inspect the LABEL parameter, it is better 35447 to set the variable `align_loops' in the target's 35448 `TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35449 user's selection in `align_loops' in a `LOOP_ALIGN' implementation. 35450 35451 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx LABEL) 35452 The maximum number of bytes to skip when applying `LOOP_ALIGN' to 35453 LABEL. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35454 35455 -- Macro: LABEL_ALIGN (LABEL) 35456 The alignment (log base 2) to put in front of LABEL. If 35457 `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different 35458 alignment, the maximum of the specified values is used. 35459 35460 Unless it's necessary to inspect the LABEL parameter, it is better 35461 to set the variable `align_labels' in the target's 35462 `TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 35463 user's selection in `align_labels' in a `LABEL_ALIGN' 35464 implementation. 35465 35466 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx LABEL) 35467 The maximum number of bytes to skip when applying `LABEL_ALIGN' to 35468 LABEL. This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 35469 35470 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 35471 A C statement to output to the stdio stream STREAM an assembler 35472 instruction to advance the location counter by NBYTES bytes. 35473 Those bytes should be zero when loaded. NBYTES will be a C 35474 expression of type `unsigned HOST_WIDE_INT'. 35475 35476 -- Macro: ASM_NO_SKIP_IN_TEXT 35477 Define this macro if `ASM_OUTPUT_SKIP' should not be used in the 35478 text section because it fails to put zeros in the bytes that are 35479 skipped. This is true on many Unix systems, where the pseudo-op 35480 to skip bytes produces no-op instructions rather than zeros when 35481 used in the text section. 35482 35483 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 35484 A C statement to output to the stdio stream STREAM an assembler 35485 command to advance the location counter to a multiple of 2 to the 35486 POWER bytes. POWER will be a C expression of type `int'. 35487 35488 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 35489 Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 35490 for padding, if necessary. 35491 35492 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 35493 A C statement to output to the stdio stream STREAM an assembler 35494 command to advance the location counter to a multiple of 2 to the 35495 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 35496 satisfy the alignment request. POWER and MAX_SKIP will be a C 35497 expression of type `int'. 35498 35499 35500 File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 35501 35502 17.22 Controlling Debugging Information Format 35503 ============================================== 35504 35505 This describes how to specify debugging information. 35506 35507 * Menu: 35508 35509 * All Debuggers:: Macros that affect all debugging formats uniformly. 35510 * DBX Options:: Macros enabling specific options in DBX format. 35511 * DBX Hooks:: Hook macros for varying DBX format. 35512 * File Names and DBX:: Macros controlling output of file names in DBX format. 35513 * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 35514 * VMS Debug:: Macros for VMS debug format. 35515 35516 35517 File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 35518 35519 17.22.1 Macros Affecting All Debugging Formats 35520 ---------------------------------------------- 35521 35522 These macros affect all debugging formats. 35523 35524 -- Macro: DBX_REGISTER_NUMBER (REGNO) 35525 A C expression that returns the DBX register number for the 35526 compiler register number REGNO. In the default macro provided, 35527 the value of this expression will be REGNO itself. But sometimes 35528 there are some registers that the compiler knows about and DBX 35529 does not, or vice versa. In such cases, some register may need to 35530 have one number in the compiler and another for DBX. 35531 35532 If two registers have consecutive numbers inside GCC, and they can 35533 be used as a pair to hold a multiword value, then they _must_ have 35534 consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'. 35535 Otherwise, debuggers will be unable to access such a pair, because 35536 they expect register pairs to be consecutive in their own 35537 numbering scheme. 35538 35539 If you find yourself defining `DBX_REGISTER_NUMBER' in way that 35540 does not preserve register pairs, then what you must do instead is 35541 redefine the actual register numbering scheme. 35542 35543 -- Macro: DEBUGGER_AUTO_OFFSET (X) 35544 A C expression that returns the integer offset value for an 35545 automatic variable having address X (an RTL expression). The 35546 default computation assumes that X is based on the frame-pointer 35547 and gives the offset from the frame-pointer. This is required for 35548 targets that produce debugging output for DBX or COFF-style 35549 debugging output for SDB and allow the frame-pointer to be 35550 eliminated when the `-g' options is used. 35551 35552 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 35553 A C expression that returns the integer offset value for an 35554 argument having address X (an RTL expression). The nominal offset 35555 is OFFSET. 35556 35557 -- Macro: PREFERRED_DEBUGGING_TYPE 35558 A C expression that returns the type of debugging output GCC should 35559 produce when the user specifies just `-g'. Define this if you 35560 have arranged for GCC to support more than one format of debugging 35561 output. Currently, the allowable values are `DBX_DEBUG', 35562 `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG', 35563 `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'. 35564 35565 When the user specifies `-ggdb', GCC normally also uses the value 35566 of this macro to select the debugging output format, but with two 35567 exceptions. If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the 35568 value `DWARF2_DEBUG'. Otherwise, if `DBX_DEBUGGING_INFO' is 35569 defined, GCC uses `DBX_DEBUG'. 35570 35571 The value of this macro only affects the default debugging output; 35572 the user can always get a specific type of output by using 35573 `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'. 35574 35575 35576 File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 35577 35578 17.22.2 Specific Options for DBX Output 35579 --------------------------------------- 35580 35581 These are specific options for DBX output. 35582 35583 -- Macro: DBX_DEBUGGING_INFO 35584 Define this macro if GCC should produce debugging output for DBX 35585 in response to the `-g' option. 35586 35587 -- Macro: XCOFF_DEBUGGING_INFO 35588 Define this macro if GCC should produce XCOFF format debugging 35589 output in response to the `-g' option. This is a variant of DBX 35590 format. 35591 35592 -- Macro: DEFAULT_GDB_EXTENSIONS 35593 Define this macro to control whether GCC should by default generate 35594 GDB's extended version of DBX debugging information (assuming 35595 DBX-format debugging information is enabled at all). If you don't 35596 define the macro, the default is 1: always generate the extended 35597 information if there is any occasion to. 35598 35599 -- Macro: DEBUG_SYMS_TEXT 35600 Define this macro if all `.stabs' commands should be output while 35601 in the text section. 35602 35603 -- Macro: ASM_STABS_OP 35604 A C string constant, including spacing, naming the assembler 35605 pseudo op to use instead of `"\t.stabs\t"' to define an ordinary 35606 debugging symbol. If you don't define this macro, `"\t.stabs\t"' 35607 is used. This macro applies only to DBX debugging information 35608 format. 35609 35610 -- Macro: ASM_STABD_OP 35611 A C string constant, including spacing, naming the assembler 35612 pseudo op to use instead of `"\t.stabd\t"' to define a debugging 35613 symbol whose value is the current location. If you don't define 35614 this macro, `"\t.stabd\t"' is used. This macro applies only to 35615 DBX debugging information format. 35616 35617 -- Macro: ASM_STABN_OP 35618 A C string constant, including spacing, naming the assembler 35619 pseudo op to use instead of `"\t.stabn\t"' to define a debugging 35620 symbol with no name. If you don't define this macro, 35621 `"\t.stabn\t"' is used. This macro applies only to DBX debugging 35622 information format. 35623 35624 -- Macro: DBX_NO_XREFS 35625 Define this macro if DBX on your system does not support the 35626 construct `xsTAGNAME'. On some systems, this construct is used to 35627 describe a forward reference to a structure named TAGNAME. On 35628 other systems, this construct is not supported at all. 35629 35630 -- Macro: DBX_CONTIN_LENGTH 35631 A symbol name in DBX-format debugging information is normally 35632 continued (split into two separate `.stabs' directives) when it 35633 exceeds a certain length (by default, 80 characters). On some 35634 operating systems, DBX requires this splitting; on others, 35635 splitting must not be done. You can inhibit splitting by defining 35636 this macro with the value zero. You can override the default 35637 splitting-length by defining this macro as an expression for the 35638 length you desire. 35639 35640 -- Macro: DBX_CONTIN_CHAR 35641 Normally continuation is indicated by adding a `\' character to 35642 the end of a `.stabs' string when a continuation follows. To use 35643 a different character instead, define this macro as a character 35644 constant for the character you want to use. Do not define this 35645 macro if backslash is correct for your system. 35646 35647 -- Macro: DBX_STATIC_STAB_DATA_SECTION 35648 Define this macro if it is necessary to go to the data section 35649 before outputting the `.stabs' pseudo-op for a non-global static 35650 variable. 35651 35652 -- Macro: DBX_TYPE_DECL_STABS_CODE 35653 The value to use in the "code" field of the `.stabs' directive for 35654 a typedef. The default is `N_LSYM'. 35655 35656 -- Macro: DBX_STATIC_CONST_VAR_CODE 35657 The value to use in the "code" field of the `.stabs' directive for 35658 a static variable located in the text section. DBX format does not 35659 provide any "right" way to do this. The default is `N_FUN'. 35660 35661 -- Macro: DBX_REGPARM_STABS_CODE 35662 The value to use in the "code" field of the `.stabs' directive for 35663 a parameter passed in registers. DBX format does not provide any 35664 "right" way to do this. The default is `N_RSYM'. 35665 35666 -- Macro: DBX_REGPARM_STABS_LETTER 35667 The letter to use in DBX symbol data to identify a symbol as a 35668 parameter passed in registers. DBX format does not customarily 35669 provide any way to do this. The default is `'P''. 35670 35671 -- Macro: DBX_FUNCTION_FIRST 35672 Define this macro if the DBX information for a function and its 35673 arguments should precede the assembler code for the function. 35674 Normally, in DBX format, the debugging information entirely 35675 follows the assembler code. 35676 35677 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 35678 Define this macro, with value 1, if the value of a symbol 35679 describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be 35680 relative to the start of the enclosing function. Normally, GCC 35681 uses an absolute address. 35682 35683 -- Macro: DBX_LINES_FUNCTION_RELATIVE 35684 Define this macro, with value 1, if the value of a symbol 35685 indicating the current line number (`N_SLINE') should be relative 35686 to the start of the enclosing function. Normally, GCC uses an 35687 absolute address. 35688 35689 -- Macro: DBX_USE_BINCL 35690 Define this macro if GCC should generate `N_BINCL' and `N_EINCL' 35691 stabs for included header files, as on Sun systems. This macro 35692 also directs GCC to output a type number as a pair of a file 35693 number and a type number within the file. Normally, GCC does not 35694 generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single 35695 number for a type number. 35696 35697 35698 File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 35699 35700 17.22.3 Open-Ended Hooks for DBX Format 35701 --------------------------------------- 35702 35703 These are hooks for DBX format. 35704 35705 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 35706 A C statement to output DBX debugging information before code for 35707 line number LINE of the current source file to the stdio stream 35708 STREAM. COUNTER is the number of time the macro was invoked, 35709 including the current invocation; it is intended to generate 35710 unique labels in the assembly output. 35711 35712 This macro should not be defined if the default output is correct, 35713 or if it can be made correct by defining 35714 `DBX_LINES_FUNCTION_RELATIVE'. 35715 35716 -- Macro: NO_DBX_FUNCTION_END 35717 Some stabs encapsulation formats (in particular ECOFF), cannot 35718 handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 35719 extension construct. On those machines, define this macro to turn 35720 this feature off without disturbing the rest of the gdb extensions. 35721 35722 -- Macro: NO_DBX_BNSYM_ENSYM 35723 Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx 35724 extension construct. On those machines, define this macro to turn 35725 this feature off without disturbing the rest of the gdb extensions. 35726 35727 35728 File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 35729 35730 17.22.4 File Names in DBX Format 35731 -------------------------------- 35732 35733 This describes file names in DBX format. 35734 35735 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 35736 A C statement to output DBX debugging information to the stdio 35737 stream STREAM, which indicates that file NAME is the main source 35738 file--the file specified as the input file for compilation. This 35739 macro is called only once, at the beginning of compilation. 35740 35741 This macro need not be defined if the standard form of output for 35742 DBX debugging information is appropriate. 35743 35744 It may be necessary to refer to a label equal to the beginning of 35745 the text section. You can use `assemble_name (stream, 35746 ltext_label_name)' to do so. If you do this, you must also set 35747 the variable USED_LTEXT_LABEL_NAME to `true'. 35748 35749 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 35750 Define this macro, with value 1, if GCC should not emit an 35751 indication of the current directory for compilation and current 35752 source language at the beginning of the file. 35753 35754 -- Macro: NO_DBX_GCC_MARKER 35755 Define this macro, with value 1, if GCC should not emit an 35756 indication that this object file was compiled by GCC. The default 35757 is to emit an `N_OPT' stab at the beginning of every source file, 35758 with `gcc2_compiled.' for the string and value 0. 35759 35760 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 35761 A C statement to output DBX debugging information at the end of 35762 compilation of the main source file NAME. Output should be 35763 written to the stdio stream STREAM. 35764 35765 If you don't define this macro, nothing special is output at the 35766 end of compilation, which is correct for most machines. 35767 35768 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 35769 Define this macro _instead of_ defining 35770 `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 35771 the end of compilation is an `N_SO' stab with an empty string, 35772 whose value is the highest absolute text address in the file. 35773 35774 35775 File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 35776 35777 17.22.5 Macros for SDB and DWARF Output 35778 --------------------------------------- 35779 35780 Here are macros for SDB and DWARF output. 35781 35782 -- Macro: SDB_DEBUGGING_INFO 35783 Define this macro if GCC should produce COFF-style debugging output 35784 for SDB in response to the `-g' option. 35785 35786 -- Macro: DWARF2_DEBUGGING_INFO 35787 Define this macro if GCC should produce dwarf version 2 format 35788 debugging output in response to the `-g' option. 35789 35790 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 35791 FUNCTION) 35792 Define this to enable the dwarf attribute 35793 `DW_AT_calling_convention' to be emitted for each function. 35794 Instead of an integer return the enum value for the `DW_CC_' 35795 tag. 35796 35797 To support optional call frame debugging information, you must also 35798 define `INCOMING_RETURN_ADDR_RTX' and either set 35799 `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 35800 prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as 35801 appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 35802 35803 -- Macro: DWARF2_FRAME_INFO 35804 Define this macro to a nonzero value if GCC should always output 35805 Dwarf 2 frame information. If `TARGET_EXCEPT_UNWIND_INFO' (*note 35806 Exception Region Output::) returns `UI_DWARF2', and exceptions are 35807 enabled, GCC will output this information not matter how you 35808 define `DWARF2_FRAME_INFO'. 35809 35810 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void) 35811 This hook defines the mechanism that will be used for describing 35812 frame unwind information to the debugger. Normally the hook will 35813 return `UI_DWARF2' if DWARF 2 debug information is enabled, and 35814 return `UI_NONE' otherwise. 35815 35816 A target may return `UI_DWARF2' even when DWARF 2 debug information 35817 is disabled in order to always output DWARF 2 frame information. 35818 35819 A target may return `UI_TARGET' if it has ABI specified unwind 35820 tables. This will suppress generation of the normal debug frame 35821 unwind information. 35822 35823 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 35824 Define this macro to be a nonzero value if the assembler can 35825 generate Dwarf 2 line debug info sections. This will result in 35826 much more compact line number tables, and hence is desirable if it 35827 works. 35828 35829 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS 35830 True if the `.debug_pubtypes' and `.debug_pubnames' sections 35831 should be emitted. These sections are not used on most platforms, 35832 and in particular GDB does not use them. 35833 35834 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR 35835 True if the `DW_AT_comp_dir' attribute should be emitted for each 35836 compilation unit. This attribute is required for the darwin 35837 linker to emit debug information. 35838 35839 -- Target Hook: bool TARGET_DELAY_SCHED2 35840 True if sched2 is not to be run at its normal place. This usually 35841 means it will be run as part of machine-specific reorg. 35842 35843 -- Target Hook: bool TARGET_DELAY_VARTRACK 35844 True if vartrack is not to be run at its normal place. This 35845 usually means it will be run as part of machine-specific reorg. 35846 35847 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 35848 A C statement to issue assembly directives that create a difference 35849 LAB1 minus LAB2, using an integer of the given SIZE. 35850 35851 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2) 35852 A C statement to issue assembly directives that create a difference 35853 between the two given labels in system defined units, e.g. 35854 instruction slots on IA64 VMS, using an integer of the given size. 35855 35856 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 35857 A C statement to issue assembly directives that create a 35858 section-relative reference to the given LABEL, using an integer of 35859 the given SIZE. The label is known to be defined in the given 35860 SECTION. 35861 35862 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 35863 A C statement to issue assembly directives that create a 35864 self-relative reference to the given LABEL, using an integer of 35865 the given SIZE. 35866 35867 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 35868 A C statement to issue assembly directives that create a reference 35869 to the DWARF table identifier LABEL from the current section. This 35870 is used on some systems to avoid garbage collecting a DWARF table 35871 which is referenced by a function. 35872 35873 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 35874 SIZE, rtx X) 35875 If defined, this target hook is a function which outputs a 35876 DTP-relative reference to the given TLS symbol of the specified 35877 size. 35878 35879 -- Macro: PUT_SDB_... 35880 Define these macros to override the assembler syntax for the 35881 special SDB assembler directives. See `sdbout.c' for a list of 35882 these macros and their arguments. If the standard syntax is used, 35883 you need not define them yourself. 35884 35885 -- Macro: SDB_DELIM 35886 Some assemblers do not support a semicolon as a delimiter, even 35887 between SDB assembler directives. In that case, define this macro 35888 to be the delimiter to use (usually `\n'). It is not necessary to 35889 define a new set of `PUT_SDB_OP' macros if this is the only change 35890 required. 35891 35892 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 35893 Define this macro to allow references to unknown structure, union, 35894 or enumeration tags to be emitted. Standard COFF does not allow 35895 handling of unknown references, MIPS ECOFF has support for it. 35896 35897 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 35898 Define this macro to allow references to structure, union, or 35899 enumeration tags that have not yet been seen to be handled. Some 35900 assemblers choke if forward tags are used, while some require it. 35901 35902 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 35903 A C statement to output SDB debugging information before code for 35904 line number LINE of the current source file to the stdio stream 35905 STREAM. The default is to emit an `.ln' directive. 35906 35907 35908 File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 35909 35910 17.22.6 Macros for VMS Debug Format 35911 ----------------------------------- 35912 35913 Here are macros for VMS debug format. 35914 35915 -- Macro: VMS_DEBUGGING_INFO 35916 Define this macro if GCC should produce debugging output for VMS 35917 in response to the `-g' option. The default behavior for VMS is 35918 to generate minimal debug info for a traceback in the absence of 35919 `-g' unless explicitly overridden with `-g0'. This behavior is 35920 controlled by `TARGET_OPTION_OPTIMIZATION' and 35921 `TARGET_OPTION_OVERRIDE'. 35922 35923 35924 File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 35925 35926 17.23 Cross Compilation and Floating Point 35927 ========================================== 35928 35929 While all modern machines use twos-complement representation for 35930 integers, there are a variety of representations for floating point 35931 numbers. This means that in a cross-compiler the representation of 35932 floating point numbers in the compiled program may be different from 35933 that used in the machine doing the compilation. 35934 35935 Because different representation systems may offer different amounts of 35936 range and precision, all floating point constants must be represented in 35937 the target machine's format. Therefore, the cross compiler cannot 35938 safely use the host machine's floating point arithmetic; it must emulate 35939 the target's arithmetic. To ensure consistency, GCC always uses 35940 emulation to work with floating point values, even when the host and 35941 target floating point formats are identical. 35942 35943 The following macros are provided by `real.h' for the compiler to use. 35944 All parts of the compiler which generate or optimize floating-point 35945 calculations must use these macros. They may evaluate their operands 35946 more than once, so operands must not have side effects. 35947 35948 -- Macro: REAL_VALUE_TYPE 35949 The C data type to be used to hold a floating point value in the 35950 target machine's format. Typically this is a `struct' containing 35951 an array of `HOST_WIDE_INT', but all code should treat it as an 35952 opaque quantity. 35953 35954 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35955 Compares for equality the two values, X and Y. If the target 35956 floating point format supports negative zeroes and/or NaNs, 35957 `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL 35958 (NaN, NaN)' is false. 35959 35960 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35961 Tests whether X is less than Y. 35962 35963 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 35964 Truncates X to a signed integer, rounding toward zero. 35965 35966 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 35967 (REAL_VALUE_TYPE X) 35968 Truncates X to an unsigned integer, rounding toward zero. If X is 35969 negative, returns zero. 35970 35971 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum 35972 machine_mode MODE) 35973 Converts STRING into a floating point number in the target 35974 machine's representation for mode MODE. This routine can handle 35975 both decimal and hexadecimal floating point constants, using the 35976 syntax defined by the C language for both. 35977 35978 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 35979 Returns 1 if X is negative (including negative zero), 0 otherwise. 35980 35981 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 35982 Determines whether X represents infinity (positive or negative). 35983 35984 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 35985 Determines whether X represents a "NaN" (not-a-number). 35986 35987 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code 35988 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 35989 Calculates an arithmetic operation on the two floating point values 35990 X and Y, storing the result in OUTPUT (which must be a variable). 35991 35992 The operation to be performed is specified by CODE. Only the 35993 following codes are supported: `PLUS_EXPR', `MINUS_EXPR', 35994 `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'. 35995 35996 If `REAL_ARITHMETIC' is asked to evaluate division by zero and the 35997 target's floating point format cannot represent infinity, it will 35998 call `abort'. Callers should check for this situation first, using 35999 `MODE_HAS_INFINITIES'. *Note Storage Layout::. 36000 36001 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 36002 Returns the negative of the floating point value X. 36003 36004 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 36005 Returns the absolute value of X. 36006 36007 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT 36008 HIGH, REAL_VALUE_TYPE X) 36009 Converts a floating point value X into a double-precision integer 36010 which is then stored into LOW and HIGH. If the value is not 36011 integral, it is truncated. 36012 36013 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT 36014 LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE) 36015 Converts a double-precision integer found in LOW and HIGH, into a 36016 floating point value which is then stored into X. The value is 36017 truncated to fit in mode MODE. 36018 36019 36020 File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 36021 36022 17.24 Mode Switching Instructions 36023 ================================= 36024 36025 The following macros control mode switching optimizations: 36026 36027 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 36028 Define this macro if the port needs extra instructions inserted 36029 for mode switching in an optimizing compilation. 36030 36031 For an example, the SH4 can perform both single and double 36032 precision floating point operations, but to perform a single 36033 precision operation, the FPSCR PR bit has to be cleared, while for 36034 a double precision operation, this bit has to be set. Changing 36035 the PR bit requires a general purpose register as a scratch 36036 register, hence these FPSCR sets have to be inserted before 36037 reload, i.e. you can't put this into instruction emitting or 36038 `TARGET_MACHINE_DEPENDENT_REORG'. 36039 36040 You can have multiple entities that are mode-switched, and select 36041 at run time which entities actually need it. 36042 `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY 36043 that needs mode-switching. If you define this macro, you also 36044 have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED', 36045 `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'. `MODE_AFTER', 36046 `MODE_ENTRY', and `MODE_EXIT' are optional. 36047 36048 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 36049 If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as 36050 initializer for an array of integers. Each initializer element N 36051 refers to an entity that needs mode switching, and specifies the 36052 number of different modes that might need to be set for this 36053 entity. The position of the initializer in the 36054 initializer--starting counting at zero--determines the integer 36055 that is used to refer to the mode-switched entity in question. In 36056 macros that take mode arguments / yield a mode result, modes are 36057 represented as numbers 0 ... N - 1. N is used to specify that no 36058 mode switch is needed / supplied. 36059 36060 -- Macro: MODE_NEEDED (ENTITY, INSN) 36061 ENTITY is an integer specifying a mode-switched entity. If 36062 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 36063 return an integer value not larger than the corresponding element 36064 in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 36065 must be switched into prior to the execution of INSN. 36066 36067 -- Macro: MODE_AFTER (ENTITY, MODE, INSN) 36068 ENTITY is an integer specifying a mode-switched entity. If this 36069 macro is defined, it is evaluated for every INSN during mode 36070 switching. It determines the mode that an insn results in (if 36071 different from the incoming mode). 36072 36073 -- Macro: MODE_ENTRY (ENTITY) 36074 If this macro is defined, it is evaluated for every ENTITY that 36075 needs mode switching. It should evaluate to an integer, which is 36076 a mode that ENTITY is assumed to be switched to at function entry. 36077 If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined. 36078 36079 -- Macro: MODE_EXIT (ENTITY) 36080 If this macro is defined, it is evaluated for every ENTITY that 36081 needs mode switching. It should evaluate to an integer, which is 36082 a mode that ENTITY is assumed to be switched to at function exit. 36083 If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined. 36084 36085 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N) 36086 This macro specifies the order in which modes for ENTITY are 36087 processed. 0 is the highest priority, 36088 `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 36089 of the macro should be an integer designating a mode for ENTITY. 36090 For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be 36091 a bijection in 0 ... `num_modes_for_mode_switching[ENTITY] - 1'. 36092 36093 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE) 36094 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE 36095 is the set of hard registers live at the point where the insn(s) 36096 are to be inserted. 36097 36098 36099 File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 36100 36101 17.25 Defining target-specific uses of `__attribute__' 36102 ====================================================== 36103 36104 Target-specific attributes may be defined for functions, data and types. 36105 These are described using the following target hooks; they also need to 36106 be documented in `extend.texi'. 36107 36108 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 36109 If defined, this target hook points to an array of `struct 36110 attribute_spec' (defined in `tree.h') specifying the machine 36111 specific attributes for this target and some of the restrictions 36112 on the entities to which these attributes are applied and the 36113 arguments they take. 36114 36115 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree 36116 NAME) 36117 If defined, this target hook is a function which returns true if 36118 the machine-specific attribute named NAME expects an identifier 36119 given as its first argument to be passed on as a plain identifier, 36120 not subjected to name lookup. If this is not defined, the default 36121 is false for all machine-specific attributes. 36122 36123 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 36124 const_tree TYPE2) 36125 If defined, this target hook is a function which returns zero if 36126 the attributes on TYPE1 and TYPE2 are incompatible, one if they 36127 are compatible, and two if they are nearly compatible (which 36128 causes a warning to be generated). If this is not defined, 36129 machine-specific attributes are supposed always to be compatible. 36130 36131 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 36132 If defined, this target hook is a function which assigns default 36133 attributes to the newly defined TYPE. 36134 36135 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 36136 TYPE2) 36137 Define this target hook if the merging of type attributes needs 36138 special handling. If defined, the result is a list of the combined 36139 `TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 36140 `comptypes' has already been called and returned 1. This function 36141 may call `merge_attributes' to handle machine-independent merging. 36142 36143 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 36144 NEWDECL) 36145 Define this target hook if the merging of decl attributes needs 36146 special handling. If defined, the result is a list of the combined 36147 `DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 36148 declaration of OLDDECL. Examples of when this is needed are when 36149 one attribute overrides another, or when an attribute is nullified 36150 by a subsequent definition. This function may call 36151 `merge_attributes' to handle machine-independent merging. 36152 36153 If the only target-specific handling you require is `dllimport' 36154 for Microsoft Windows targets, you should define the macro 36155 `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'. The compiler will then 36156 define a function called `merge_dllimport_decl_attributes' which 36157 can then be defined as the expansion of 36158 `TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 36159 `handle_dll_attribute' in the attribute table for your port to 36160 perform initial processing of the `dllimport' and `dllexport' 36161 attributes. This is done in `i386/cygwin.h' and `i386/i386.c', 36162 for example. 36163 36164 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 36165 DECL) 36166 DECL is a variable or function with `__attribute__((dllimport))' 36167 specified. Use this hook if the target needs to add extra 36168 validation checks to `handle_dll_attribute'. 36169 36170 -- Macro: TARGET_DECLSPEC 36171 Define this macro to a nonzero value if you want to treat 36172 `__declspec(X)' as equivalent to `__attribute((X))'. By default, 36173 this behavior is enabled only for targets that define 36174 `TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 36175 `__declspec' is via a built-in macro, but you should not rely on 36176 this implementation detail. 36177 36178 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 36179 *ATTR_PTR) 36180 Define this target hook if you want to be able to add attributes 36181 to a decl when it is being created. This is normally useful for 36182 back ends which wish to implement a pragma by using the attributes 36183 which correspond to the pragma's effect. The NODE argument is the 36184 decl which is being created. The ATTR_PTR argument is a pointer 36185 to the attribute list for this decl. The list itself should not 36186 be modified, since it may be shared with other decls, but 36187 attributes may be chained on the head of the list and `*ATTR_PTR' 36188 modified to point to the new attributes, or a copy of the list may 36189 be made if further changes are needed. 36190 36191 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 36192 FNDECL) 36193 This target hook returns `true' if it is ok to inline FNDECL into 36194 the current function, despite its having target-specific 36195 attributes, `false' otherwise. By default, if a function has a 36196 target specific attribute attached to it, it will not be inlined. 36197 36198 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, 36199 tree NAME, tree ARGS, int FLAGS) 36200 This hook is called to parse `attribute(target("..."))', which 36201 allows setting target-specific options on individual functions. 36202 These function-specific options may differ from the options 36203 specified on the command line. The hook should return `true' if 36204 the options are valid. 36205 36206 The hook should set the `DECL_FUNCTION_SPECIFIC_TARGET' field in 36207 the function declaration to hold a pointer to a target-specific 36208 `struct cl_target_option' structure. 36209 36210 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR) 36211 This hook is called to save any additional target-specific 36212 information in the `struct cl_target_option' structure for 36213 function-specific options. *Note Option file format::. 36214 36215 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option 36216 *PTR) 36217 This hook is called to restore any additional target-specific 36218 information in the `struct cl_target_option' structure for 36219 function-specific options. 36220 36221 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 36222 struct cl_target_option *PTR) 36223 This hook is called to print any additional target-specific 36224 information in the `struct cl_target_option' structure for 36225 function-specific options. 36226 36227 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree 36228 POP_TARGET) 36229 This target hook parses the options for `#pragma GCC target', which 36230 sets the target-specific options for functions that occur later in 36231 the input stream. The options accepted should be the same as 36232 those handled by the `TARGET_OPTION_VALID_ATTRIBUTE_P' hook. 36233 36234 -- Target Hook: void TARGET_OPTION_OVERRIDE (void) 36235 Sometimes certain combinations of command options do not make 36236 sense on a particular target machine. You can override the hook 36237 `TARGET_OPTION_OVERRIDE' to take account of this. This hooks is 36238 called once just after all the command options have been parsed. 36239 36240 Don't use this hook to turn on various extra optimizations for 36241 `-O'. That is what `TARGET_OPTION_OPTIMIZATION' is for. 36242 36243 If you need to do something whenever the optimization level is 36244 changed via the optimize attribute or pragma, see 36245 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 36246 36247 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree 36248 DECL2) 36249 This target hook returns `true' if DECL1 and DECL2 are versions of 36250 the same function. DECL1 and DECL2 are function versions if and 36251 only if they have the same function signature and different target 36252 specific attributes, that is, they are compiled for different 36253 target machines. 36254 36255 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 36256 This target hook returns `false' if the CALLER function cannot 36257 inline CALLEE, based on target specific information. By default, 36258 inlining is not allowed if the callee function has function 36259 specific target options and the caller does not use the same 36260 options. 36261 36262 36263 File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 36264 36265 17.26 Emulating TLS 36266 =================== 36267 36268 For targets whose psABI does not provide Thread Local Storage via 36269 specific relocations and instruction sequences, an emulation layer is 36270 used. A set of target hooks allows this emulation layer to be 36271 configured for the requirements of a particular target. For instance 36272 the psABI may in fact specify TLS support in terms of an emulation 36273 layer. 36274 36275 The emulation layer works by creating a control object for every TLS 36276 object. To access the TLS object, a lookup function is provided which, 36277 when given the address of the control object, will return the address 36278 of the current thread's instance of the TLS object. 36279 36280 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 36281 Contains the name of the helper function that uses a TLS control 36282 object to locate a TLS instance. The default causes libgcc's 36283 emulated TLS helper function to be used. 36284 36285 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 36286 Contains the name of the helper function that should be used at 36287 program startup to register TLS objects that are implicitly 36288 initialized to zero. If this is `NULL', all TLS objects will have 36289 explicit initializers. The default causes libgcc's emulated TLS 36290 registration function to be used. 36291 36292 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 36293 Contains the name of the section in which TLS control variables 36294 should be placed. The default of `NULL' allows these to be placed 36295 in any section. 36296 36297 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 36298 Contains the name of the section in which TLS initializers should 36299 be placed. The default of `NULL' allows these to be placed in any 36300 section. 36301 36302 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 36303 Contains the prefix to be prepended to TLS control variable names. 36304 The default of `NULL' uses a target-specific prefix. 36305 36306 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 36307 Contains the prefix to be prepended to TLS initializer objects. 36308 The default of `NULL' uses a target-specific prefix. 36309 36310 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 36311 Specifies a function that generates the FIELD_DECLs for a TLS 36312 control object type. TYPE is the RECORD_TYPE the fields are for 36313 and NAME should be filled with the structure tag, if the default of 36314 `__emutls_object' is unsuitable. The default creates a type 36315 suitable for libgcc's emulated TLS function. 36316 36317 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 36318 TMPL_ADDR) 36319 Specifies a function that generates the CONSTRUCTOR to initialize a 36320 TLS control object. VAR is the TLS control object, DECL is the 36321 TLS object and TMPL_ADDR is the address of the initializer. The 36322 default initializes libgcc's emulated TLS control object. 36323 36324 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 36325 Specifies whether the alignment of TLS control variable objects is 36326 fixed and should not be increased as some backends may do to 36327 optimize single objects. The default is false. 36328 36329 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 36330 Specifies whether a DWARF `DW_OP_form_tls_address' location 36331 descriptor may be used to describe emulated TLS control objects. 36332 36333 36334 File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 36335 36336 17.27 Defining coprocessor specifics for MIPS targets. 36337 ====================================================== 36338 36339 The MIPS specification allows MIPS implementations to have as many as 4 36340 coprocessors, each with as many as 32 private registers. GCC supports 36341 accessing these registers and transferring values between the registers 36342 and memory using asm-ized variables. For example: 36343 36344 register unsigned int cp0count asm ("c0r1"); 36345 unsigned int d; 36346 36347 d = cp0count + 3; 36348 36349 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 36350 names may be added as described below, or the default names may be 36351 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 36352 36353 Coprocessor registers are assumed to be epilogue-used; sets to them 36354 will be preserved even if it does not appear that the register is used 36355 again later in the function. 36356 36357 Another note: according to the MIPS spec, coprocessor 1 (if present) is 36358 the FPU. One accesses COP1 registers through standard mips 36359 floating-point support; they are not included in this mechanism. 36360 36361 There is one macro used in defining the MIPS coprocessor interface 36362 which you may want to override in subtargets; it is described below. 36363 36364 36365 File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 36366 36367 17.28 Parameters for Precompiled Header Validity Checking 36368 ========================================================= 36369 36370 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 36371 This hook returns a pointer to the data needed by 36372 `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in 36373 bytes. 36374 36375 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 36376 size_t SZ) 36377 This hook checks whether the options used to create a PCH file are 36378 compatible with the current settings. It returns `NULL' if so and 36379 a suitable error message if not. Error messages will be presented 36380 to the user and must be localized using `_(MSG)'. 36381 36382 DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY' 36383 when the PCH file was created and SZ is the size of that data in 36384 bytes. It's safe to assume that the data was created by the same 36385 version of the compiler, so no format checking is needed. 36386 36387 The default definition of `default_pch_valid_p' should be suitable 36388 for most targets. 36389 36390 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 36391 PCH_FLAGS) 36392 If this hook is nonnull, the default implementation of 36393 `TARGET_PCH_VALID_P' will use it to check for compatible values of 36394 `target_flags'. PCH_FLAGS specifies the value that `target_flags' 36395 had when the PCH file was created. The return value is the same 36396 as for `TARGET_PCH_VALID_P'. 36397 36398 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void) 36399 Called before writing out a PCH file. If the target has some 36400 garbage-collected data that needs to be in a particular state on 36401 PCH loads, it can use this hook to enforce that state. Very few 36402 targets need to do anything here. 36403 36404 36405 File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros 36406 36407 17.29 C++ ABI parameters 36408 ======================== 36409 36410 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 36411 Define this hook to override the integer type used for guard 36412 variables. These are used to implement one-time construction of 36413 static objects. The default is long_long_integer_type_node. 36414 36415 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 36416 This hook determines how guard variables are used. It should 36417 return `false' (the default) if the first byte should be used. A 36418 return value of `true' indicates that only the least significant 36419 bit should be used. 36420 36421 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 36422 This hook returns the size of the cookie to use when allocating an 36423 array whose elements have the indicated TYPE. Assumes that it is 36424 already known that a cookie is needed. The default is `max(sizeof 36425 (size_t), alignof(type))', as defined in section 2.7 of the 36426 IA64/Generic C++ ABI. 36427 36428 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 36429 This hook should return `true' if the element size should be 36430 stored in array cookies. The default is to return `false'. 36431 36432 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 36433 IMPORT_EXPORT) 36434 If defined by a backend this hook allows the decision made to 36435 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 36436 contain 1 if the class is going to be exported, -1 if it is going 36437 to be imported and 0 otherwise. This function should return the 36438 modified value and perform any other actions necessary to support 36439 the backend's targeted operating system. 36440 36441 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 36442 This hook should return `true' if constructors and destructors 36443 return the address of the object created/destroyed. The default 36444 is to return `false'. 36445 36446 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 36447 This hook returns true if the key method for a class (i.e., the 36448 method which, if defined in the current translation unit, causes 36449 the virtual table to be emitted) may be an inline function. Under 36450 the standard Itanium C++ ABI the key method may be an inline 36451 function so long as the function is not declared inline in the 36452 class definition. Under some variants of the ABI, an inline 36453 function can never be the key method. The default is to return 36454 `true'. 36455 36456 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 36457 DECL) 36458 DECL is a virtual table, virtual table table, typeinfo object, or 36459 other similar implicit class data object that will be emitted with 36460 external linkage in this translation unit. No ELF visibility has 36461 been explicitly specified. If the target needs to specify a 36462 visibility other than that of the containing class, use this hook 36463 to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'. 36464 36465 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 36466 This hook returns true (the default) if virtual tables and other 36467 similar implicit class data objects are always COMDAT if they have 36468 external linkage. If this hook returns false, then class data for 36469 classes whose virtual table will be emitted in only one translation 36470 unit will not be COMDAT. 36471 36472 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 36473 This hook returns true (the default) if the RTTI information for 36474 the basic types which is defined in the C++ runtime should always 36475 be COMDAT, false if it should not be COMDAT. 36476 36477 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 36478 This hook returns true if `__aeabi_atexit' (as defined by the ARM 36479 EABI) should be used to register static destructors when 36480 `-fuse-cxa-atexit' is in effect. The default is to return false 36481 to use `__cxa_atexit'. 36482 36483 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 36484 This hook returns true if the target `atexit' function can be used 36485 in the same manner as `__cxa_atexit' to register C++ static 36486 destructors. This requires that `atexit'-registered functions in 36487 shared libraries are run in the correct order when the libraries 36488 are unloaded. The default is to return false. 36489 36490 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 36491 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has 36492 just been defined. Use this hook to make adjustments to the class 36493 (eg, tweak visibility or perform any other required target 36494 modifications). 36495 36496 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL) 36497 Return target-specific mangling context of DECL or `NULL_TREE'. 36498 36499 36500 File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros 36501 36502 17.30 Adding support for named address spaces 36503 ============================================= 36504 36505 The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 36506 committee, `Programming Languages - C - Extensions to support embedded 36507 processors', specifies a syntax for embedded processors to specify 36508 alternate address spaces. You can configure a GCC port to support 36509 section 5.1 of the draft report to add support for address spaces other 36510 than the default address space. These address spaces are new keywords 36511 that are similar to the `volatile' and `const' type attributes. 36512 36513 Pointers to named address spaces can have a different size than 36514 pointers to the generic address space. 36515 36516 For example, the SPU port uses the `__ea' address space to refer to 36517 memory in the host processor, rather than memory local to the SPU 36518 processor. Access to memory in the `__ea' address space involves 36519 issuing DMA operations to move data between the host processor and the 36520 local processor memory address space. Pointers in the `__ea' address 36521 space are either 32 bits or 64 bits based on the `-mea32' or `-mea64' 36522 switches (native SPU pointers are always 32 bits). 36523 36524 Internally, address spaces are represented as a small integer in the 36525 range 0 to 15 with address space 0 being reserved for the generic 36526 address space. 36527 36528 To register a named address space qualifier keyword with the C front 36529 end, the target may call the `c_register_addr_space' routine. For 36530 example, the SPU port uses the following to declare `__ea' as the 36531 keyword for named address space #1: 36532 #define ADDR_SPACE_EA 1 36533 c_register_addr_space ("__ea", ADDR_SPACE_EA); 36534 36535 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE 36536 (addr_space_t ADDRESS_SPACE) 36537 Define this to return the machine mode to use for pointers to 36538 ADDRESS_SPACE if the target supports named address spaces. The 36539 default version of this hook returns `ptr_mode' for the generic 36540 address space only. 36541 36542 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE 36543 (addr_space_t ADDRESS_SPACE) 36544 Define this to return the machine mode to use for addresses in 36545 ADDRESS_SPACE if the target supports named address spaces. The 36546 default version of this hook returns `Pmode' for the generic 36547 address space only. 36548 36549 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum 36550 machine_mode MODE, addr_space_t AS) 36551 Define this to return nonzero if the port can handle pointers with 36552 machine mode MODE to address space AS. This target hook is the 36553 same as the `TARGET_VALID_POINTER_MODE' target hook, except that 36554 it includes explicit named address space support. The default 36555 version of this hook returns true for the modes returned by either 36556 the `TARGET_ADDR_SPACE_POINTER_MODE' or 36557 `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given 36558 address space. 36559 36560 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum 36561 machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 36562 Define this to return true if EXP is a valid address for mode MODE 36563 in the named address space AS. The STRICT parameter says whether 36564 strict addressing is in effect after reload has finished. This 36565 target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P' 36566 target hook, except that it includes explicit named address space 36567 support. 36568 36569 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 36570 OLDX, enum machine_mode MODE, addr_space_t AS) 36571 Define this to modify an invalid address X to be a valid address 36572 with mode MODE in the named address space AS. This target hook is 36573 the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except 36574 that it includes explicit named address space support. 36575 36576 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET, 36577 addr_space_t SUPERSET) 36578 Define this to return whether the SUBSET named address space is 36579 contained within the SUPERSET named address space. Pointers to a 36580 named address space that is a subset of another named address space 36581 will be converted automatically without a cast if used together in 36582 arithmetic operations. Pointers to a superset address space can be 36583 converted to pointers to a subset address space via explicit casts. 36584 36585 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 36586 tree TO_TYPE) 36587 Define this to convert the pointer expression represented by the 36588 RTL OP with type FROM_TYPE that points to a named address space to 36589 a new pointer expression with type TO_TYPE that points to a 36590 different named address space. When this hook it called, it is 36591 guaranteed that one of the two address spaces is a subset of the 36592 other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target 36593 hook. 36594 36595 36596 File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 36597 36598 17.31 Miscellaneous Parameters 36599 ============================== 36600 36601 Here are several miscellaneous parameters. 36602 36603 -- Macro: HAS_LONG_COND_BRANCH 36604 Define this boolean macro to indicate whether or not your 36605 architecture has conditional branches that can span all of memory. 36606 It is used in conjunction with an optimization that partitions hot 36607 and cold basic blocks into separate sections of the executable. 36608 If this macro is set to false, gcc will convert any conditional 36609 branches that attempt to cross between sections into unconditional 36610 branches or indirect jumps. 36611 36612 -- Macro: HAS_LONG_UNCOND_BRANCH 36613 Define this boolean macro to indicate whether or not your 36614 architecture has unconditional branches that can span all of 36615 memory. It is used in conjunction with an optimization that 36616 partitions hot and cold basic blocks into separate sections of the 36617 executable. If this macro is set to false, gcc will convert any 36618 unconditional branches that attempt to cross between sections into 36619 indirect jumps. 36620 36621 -- Macro: CASE_VECTOR_MODE 36622 An alias for a machine mode name. This is the machine mode that 36623 elements of a jump-table should have. 36624 36625 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 36626 Optional: return the preferred mode for an `addr_diff_vec' when 36627 the minimum and maximum offset are known. If you define this, it 36628 enables extra code in branch shortening to deal with 36629 `addr_diff_vec'. To make this work, you also have to define 36630 `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit. 36631 The BODY argument is provided so that the offset_unsigned and scale 36632 flags can be updated. 36633 36634 -- Macro: CASE_VECTOR_PC_RELATIVE 36635 Define this macro to be a C expression to indicate when jump-tables 36636 should contain relative addresses. You need not define this macro 36637 if jump-tables never contain relative addresses, or jump-tables 36638 should contain relative addresses only when `-fPIC' or `-fPIC' is 36639 in effect. 36640 36641 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 36642 This function return the smallest number of different values for 36643 which it is best to use a jump-table instead of a tree of 36644 conditional branches. The default is four for machines with a 36645 `casesi' instruction and five otherwise. This is best for most 36646 machines. 36647 36648 -- Macro: WORD_REGISTER_OPERATIONS 36649 Define this macro if operations between registers with integral 36650 mode smaller than a word are always performed on the entire 36651 register. Most RISC machines have this property and most CISC 36652 machines do not. 36653 36654 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 36655 Define this macro to be a C expression indicating when insns that 36656 read memory in MEM_MODE, an integral mode narrower than a word, 36657 set the bits outside of MEM_MODE to be either the sign-extension 36658 or the zero-extension of the data read. Return `SIGN_EXTEND' for 36659 values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND' 36660 for which it zero-extends, and `UNKNOWN' for other modes. 36661 36662 This macro is not called with MEM_MODE non-integral or with a width 36663 greater than or equal to `BITS_PER_WORD', so you may return any 36664 value in this case. Do not define this macro if it would always 36665 return `UNKNOWN'. On machines where this macro is defined, you 36666 will normally define it as the constant `SIGN_EXTEND' or 36667 `ZERO_EXTEND'. 36668 36669 You may return a non-`UNKNOWN' value even if for some hard 36670 registers the sign extension is not performed, if for the 36671 `REGNO_REG_CLASS' of these hard registers 36672 `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 36673 MEM_MODE and the TO mode is any integral mode larger than this but 36674 not larger than `word_mode'. 36675 36676 You must return `UNKNOWN' if for some hard registers that allow 36677 this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change 36678 to `word_mode', but that they can change to another integral mode 36679 that is larger then MEM_MODE but still smaller than `word_mode'. 36680 36681 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 36682 Define this macro if loading short immediate values into registers 36683 sign extends. 36684 36685 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum 36686 machine_mode MODE) 36687 When `-ffast-math' is in effect, GCC tries to optimize divisions 36688 by the same divisor, by turning them into multiplications by the 36689 reciprocal. This target hook specifies the minimum number of 36690 divisions that should be there for GCC to perform the optimization 36691 for a variable of mode MODE. The default implementation returns 3 36692 if the machine has an instruction for the division, and 2 if it 36693 does not. 36694 36695 -- Macro: MOVE_MAX 36696 The maximum number of bytes that a single instruction can move 36697 quickly between memory and registers or between two memory 36698 locations. 36699 36700 -- Macro: MAX_MOVE_MAX 36701 The maximum number of bytes that a single instruction can move 36702 quickly between memory and registers or between two memory 36703 locations. If this is undefined, the default is `MOVE_MAX'. 36704 Otherwise, it is the constant value that is the largest value that 36705 `MOVE_MAX' can have at run-time. 36706 36707 -- Macro: SHIFT_COUNT_TRUNCATED 36708 A C expression that is nonzero if on this machine the number of 36709 bits actually used for the count of a shift operation is equal to 36710 the number of bits needed to represent the size of the object 36711 being shifted. When this macro is nonzero, the compiler will 36712 assume that it is safe to omit a sign-extend, zero-extend, and 36713 certain bitwise `and' instructions that truncates the count of a 36714 shift operation. On machines that have instructions that act on 36715 bit-fields at variable positions, which may include `bit test' 36716 instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables 36717 deletion of truncations of the values that serve as arguments to 36718 bit-field instructions. 36719 36720 If both types of instructions truncate the count (for shifts) and 36721 position (for bit-field operations), or if no variable-position 36722 bit-field instructions exist, you should define this macro. 36723 36724 However, on some machines, such as the 80386 and the 680x0, 36725 truncation only applies to shift operations and not the (real or 36726 pretended) bit-field operations. Define `SHIFT_COUNT_TRUNCATED' 36727 to be zero on such machines. Instead, add patterns to the `md' 36728 file that include the implied truncation of the shift instructions. 36729 36730 You need not define this macro if it would always have the value 36731 of zero. 36732 36733 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 36734 (enum machine_mode MODE) 36735 This function describes how the standard shift patterns for MODE 36736 deal with shifts by negative amounts or by more than the width of 36737 the mode. *Note shift patterns::. 36738 36739 On many machines, the shift patterns will apply a mask M to the 36740 shift count, meaning that a fixed-width shift of X by Y is 36741 equivalent to an arbitrary-width shift of X by Y & M. If this is 36742 true for mode MODE, the function should return M, otherwise it 36743 should return 0. A return value of 0 indicates that no particular 36744 behavior is guaranteed. 36745 36746 Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does 36747 _not_ apply to general shift rtxes; it applies only to instructions 36748 that are generated by the named shift patterns. 36749 36750 The default implementation of this function returns 36751 `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0 36752 otherwise. This definition is always safe, but if 36753 `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 36754 nevertheless truncate the shift count, you may get better code by 36755 overriding it. 36756 36757 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 36758 A C expression which is nonzero if on this machine it is safe to 36759 "convert" an integer of INPREC bits to one of OUTPREC bits (where 36760 OUTPREC is smaller than INPREC) by merely operating on it as if it 36761 had only OUTPREC bits. 36762 36763 On many machines, this expression can be 1. 36764 36765 When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 36766 modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result. 36767 If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in 36768 such cases may improve things. 36769 36770 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE, 36771 enum machine_mode REP_MODE) 36772 The representation of an integral mode can be such that the values 36773 are always extended to a wider integral mode. Return 36774 `SIGN_EXTEND' if values of MODE are represented in sign-extended 36775 form to REP_MODE. Return `UNKNOWN' otherwise. (Currently, none 36776 of the targets use zero-extended representation this way so unlike 36777 `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return 36778 either `SIGN_EXTEND' or `UNKNOWN'. Also no target extends MODE to 36779 REP_MODE so that REP_MODE is not the next widest integral mode and 36780 currently we take advantage of this fact.) 36781 36782 Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value 36783 even if the extension is not performed on certain hard registers 36784 as long as for the `REGNO_REG_CLASS' of these hard registers 36785 `CANNOT_CHANGE_MODE_CLASS' returns nonzero. 36786 36787 Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe 36788 two related properties. If you define `TARGET_MODE_REP_EXTENDED 36789 (mode, word_mode)' you probably also want to define 36790 `LOAD_EXTEND_OP (mode)' to return the same type of extension. 36791 36792 In order to enforce the representation of `mode', 36793 `TRULY_NOOP_TRUNCATION' should return false when truncating to 36794 `mode'. 36795 36796 -- Macro: STORE_FLAG_VALUE 36797 A C expression describing the value returned by a comparison 36798 operator with an integral mode and stored by a store-flag 36799 instruction (`cstoreMODE4') when the condition is true. This 36800 description must apply to _all_ the `cstoreMODE4' patterns and all 36801 the comparison operators whose results have a `MODE_INT' mode. 36802 36803 A value of 1 or -1 means that the instruction implementing the 36804 comparison operator returns exactly 1 or -1 when the comparison is 36805 true and 0 when the comparison is false. Otherwise, the value 36806 indicates which bits of the result are guaranteed to be 1 when the 36807 comparison is true. This value is interpreted in the mode of the 36808 comparison operation, which is given by the mode of the first 36809 operand in the `cstoreMODE4' pattern. Either the low bit or the 36810 sign bit of `STORE_FLAG_VALUE' be on. Presently, only those bits 36811 are used by the compiler. 36812 36813 If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 36814 generate code that depends only on the specified bits. It can also 36815 replace comparison operators with equivalent operations if they 36816 cause the required bits to be set, even if the remaining bits are 36817 undefined. For example, on a machine whose comparison operators 36818 return an `SImode' value and where `STORE_FLAG_VALUE' is defined as 36819 `0x80000000', saying that just the sign bit is relevant, the 36820 expression 36821 36822 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 36823 36824 can be converted to 36825 36826 (ashift:SI X (const_int N)) 36827 36828 where N is the appropriate shift count to move the bit being 36829 tested into the sign bit. 36830 36831 There is no way to describe a machine that always sets the 36832 low-order bit for a true value, but does not guarantee the value 36833 of any other bits, but we do not know of any machine that has such 36834 an instruction. If you are trying to port GCC to such a machine, 36835 include an instruction to perform a logical-and of the result with 36836 1 in the pattern for the comparison operators and let us know at 36837 <gcc (a] gcc.gnu.org>. 36838 36839 Often, a machine will have multiple instructions that obtain a 36840 value from a comparison (or the condition codes). Here are rules 36841 to guide the choice of value for `STORE_FLAG_VALUE', and hence the 36842 instructions to be used: 36843 36844 * Use the shortest sequence that yields a valid definition for 36845 `STORE_FLAG_VALUE'. It is more efficient for the compiler to 36846 "normalize" the value (convert it to, e.g., 1 or 0) than for 36847 the comparison operators to do so because there may be 36848 opportunities to combine the normalization with other 36849 operations. 36850 36851 * For equal-length sequences, use a value of 1 or -1, with -1 36852 being slightly preferred on machines with expensive jumps and 36853 1 preferred on other machines. 36854 36855 * As a second choice, choose a value of `0x80000001' if 36856 instructions exist that set both the sign and low-order bits 36857 but do not define the others. 36858 36859 * Otherwise, use a value of `0x80000000'. 36860 36861 Many machines can produce both the value chosen for 36862 `STORE_FLAG_VALUE' and its negation in the same number of 36863 instructions. On those machines, you should also define a pattern 36864 for those cases, e.g., one matching 36865 36866 (set A (neg:M (ne:M B C))) 36867 36868 Some machines can also perform `and' or `plus' operations on 36869 condition code values with less instructions than the corresponding 36870 `cstoreMODE4' insn followed by `and' or `plus'. On those 36871 machines, define the appropriate patterns. Use the names `incscc' 36872 and `decscc', respectively, for the patterns which perform `plus' 36873 or `minus' operations on condition code values. See `rs6000.md' 36874 for some examples. The GNU Superoptimizer can be used to find 36875 such instruction sequences on other machines. 36876 36877 If this macro is not defined, the default value, 1, is used. You 36878 need not define `STORE_FLAG_VALUE' if the machine has no store-flag 36879 instructions, or if the value generated by these instructions is 1. 36880 36881 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 36882 A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is 36883 returned when comparison operators with floating-point results are 36884 true. Define this macro on machines that have comparison 36885 operations that return floating-point values. If there are no 36886 such operations, do not define this macro. 36887 36888 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 36889 A C expression that gives a rtx representing the nonzero true 36890 element for vector comparisons. The returned rtx should be valid 36891 for the inner mode of MODE which is guaranteed to be a vector 36892 mode. Define this macro on machines that have vector comparison 36893 operations that return a vector result. If there are no such 36894 operations, do not define this macro. Typically, this macro is 36895 defined as `const1_rtx' or `constm1_rtx'. This macro may return 36896 `NULL_RTX' to prevent the compiler optimizing such vector 36897 comparison operations for the given mode. 36898 36899 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 36900 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 36901 A C expression that indicates whether the architecture defines a 36902 value for `clz' or `ctz' with a zero operand. A result of `0' 36903 indicates the value is undefined. If the value is defined for 36904 only the RTL expression, the macro should evaluate to `1'; if the 36905 value applies also to the corresponding optab entry (which is 36906 normally the case if it expands directly into the corresponding 36907 RTL), then the macro should evaluate to `2'. In the cases where 36908 the value is defined, VALUE should be set to this value. 36909 36910 If this macro is not defined, the value of `clz' or `ctz' at zero 36911 is assumed to be undefined. 36912 36913 This macro must be defined if the target's expansion for `ffs' 36914 relies on a particular value to get correct results. Otherwise it 36915 is not necessary, though it may be used to optimize some corner 36916 cases, and to provide a default expansion for the `ffs' optab. 36917 36918 Note that regardless of this macro the "definedness" of `clz' and 36919 `ctz' at zero do _not_ extend to the builtin functions visible to 36920 the user. Thus one may be free to adjust the value at will to 36921 match the target expansion of these operations without fear of 36922 breaking the API. 36923 36924 -- Macro: Pmode 36925 An alias for the machine mode for pointers. On most machines, 36926 define this to be the integer mode corresponding to the width of a 36927 hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit 36928 machines. On some machines you must define this to be one of the 36929 partial integer modes, such as `PSImode'. 36930 36931 The width of `Pmode' must be at least as large as the value of 36932 `POINTER_SIZE'. If it is not equal, you must define the macro 36933 `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 36934 `Pmode'. 36935 36936 -- Macro: FUNCTION_MODE 36937 An alias for the machine mode used for memory references to 36938 functions being called, in `call' RTL expressions. On most CISC 36939 machines, where an instruction can begin at any byte address, this 36940 should be `QImode'. On most RISC machines, where all instructions 36941 have fixed size and alignment, this should be a mode with the same 36942 size and alignment as the machine instruction words - typically 36943 `SImode' or `HImode'. 36944 36945 -- Macro: STDC_0_IN_SYSTEM_HEADERS 36946 In normal operation, the preprocessor expands `__STDC__' to the 36947 constant 1, to signify that GCC conforms to ISO Standard C. On 36948 some hosts, like Solaris, the system compiler uses a different 36949 convention, where `__STDC__' is normally 0, but is 1 if the user 36950 specifies strict conformance to the C Standard. 36951 36952 Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 36953 convention when processing system header files, but when 36954 processing user files `__STDC__' will always expand to 1. 36955 36956 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void) 36957 Define this hook to return the name of a header file to be 36958 included at the start of all compilations, as if it had been 36959 included with `#include <FILE>'. If this hook returns `NULL', or 36960 is not defined, or the header is not found, or if the user 36961 specifies `-ffreestanding' or `-nostdinc', no header is included. 36962 36963 This hook can be used together with a header provided by the 36964 system C library to implement ISO C requirements for certain 36965 macros to be predefined that describe properties of the whole 36966 implementation rather than just the compiler. 36967 36968 -- Macro: NO_IMPLICIT_EXTERN_C 36969 Define this macro if the system header files support C++ as well 36970 as C. This macro inhibits the usual method of using system header 36971 files in C++, which is to pretend that the file's contents are 36972 enclosed in `extern "C" {...}'. 36973 36974 -- Macro: REGISTER_TARGET_PRAGMAS () 36975 Define this macro if you want to implement any target-specific 36976 pragmas. If defined, it is a C expression which makes a series of 36977 calls to `c_register_pragma' or `c_register_pragma_with_expansion' 36978 for each pragma. The macro may also do any setup required for the 36979 pragmas. 36980 36981 The primary reason to define this macro is to provide 36982 compatibility with other compilers for the same target. In 36983 general, we discourage definition of target-specific pragmas for 36984 GCC. 36985 36986 If the pragma can be implemented by attributes then you should 36987 consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as 36988 well. 36989 36990 Preprocessor macros that appear on pragma lines are not expanded. 36991 All `#pragma' directives that do not match any registered pragma 36992 are silently ignored, unless the user specifies 36993 `-Wunknown-pragmas'. 36994 36995 -- Function: void c_register_pragma (const char *SPACE, const char 36996 *NAME, void (*CALLBACK) (struct cpp_reader *)) 36997 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 36998 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 36999 Each call to `c_register_pragma' or 37000 `c_register_pragma_with_expansion' establishes one pragma. The 37001 CALLBACK routine will be called when the preprocessor encounters a 37002 pragma of the form 37003 37004 #pragma [SPACE] NAME ... 37005 37006 SPACE is the case-sensitive namespace of the pragma, or `NULL' to 37007 put the pragma in the global namespace. The callback routine 37008 receives PFILE as its first argument, which can be passed on to 37009 cpplib's functions if necessary. You can lex tokens after the 37010 NAME by calling `pragma_lex'. Tokens that are not read by the 37011 callback will be silently ignored. The end of the line is 37012 indicated by a token of type `CPP_EOF'. Macro expansion occurs on 37013 the arguments of pragmas registered with 37014 `c_register_pragma_with_expansion' but not on the arguments of 37015 pragmas registered with `c_register_pragma'. 37016 37017 Note that the use of `pragma_lex' is specific to the C and C++ 37018 compilers. It will not work in the Java or Fortran compilers, or 37019 any other language compilers for that matter. Thus if 37020 `pragma_lex' is going to be called from target-specific code, it 37021 must only be done so when building the C and C++ compilers. This 37022 can be done by defining the variables `c_target_objs' and 37023 `cxx_target_objs' in the target entry in the `config.gcc' file. 37024 These variables should name the target-specific, language-specific 37025 object file which contains the code that uses `pragma_lex'. Note 37026 it will also be necessary to add a rule to the makefile fragment 37027 pointed to by `tmake_file' that shows how to build this object 37028 file. 37029 37030 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 37031 Define this macro if macros should be expanded in the arguments of 37032 `#pragma pack'. 37033 37034 -- Macro: TARGET_DEFAULT_PACK_STRUCT 37035 If your target requires a structure packing default other than 0 37036 (meaning the machine default), define this macro to the necessary 37037 value (in bytes). This must be a value that would also be valid 37038 to use with `#pragma pack()' (that is, a small power of two). 37039 37040 -- Macro: DOLLARS_IN_IDENTIFIERS 37041 Define this macro to control use of the character `$' in 37042 identifier names for the C family of languages. 0 means `$' is 37043 not allowed by default; 1 means it is allowed. 1 is the default; 37044 there is no need to define this macro in that case. 37045 37046 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 37047 Define this macro as a C expression that is nonzero if it is safe 37048 for the delay slot scheduler to place instructions in the delay 37049 slot of INSN, even if they appear to use a resource set or 37050 clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GCC 37051 knows that every `call_insn' has this behavior. On machines where 37052 some `insn' or `jump_insn' is really a function call and hence has 37053 this behavior, you should define this macro. 37054 37055 You need not define this macro if it would always return zero. 37056 37057 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 37058 Define this macro as a C expression that is nonzero if it is safe 37059 for the delay slot scheduler to place instructions in the delay 37060 slot of INSN, even if they appear to set or clobber a resource 37061 referenced in INSN. INSN is always a `jump_insn' or an `insn'. 37062 On machines where some `insn' or `jump_insn' is really a function 37063 call and its operands are registers whose use is actually in the 37064 subroutine it calls, you should define this macro. Doing so 37065 allows the delay slot scheduler to move instructions which copy 37066 arguments into the argument registers into the delay slot of INSN. 37067 37068 You need not define this macro if it would always return zero. 37069 37070 -- Macro: MULTIPLE_SYMBOL_SPACES 37071 Define this macro as a C expression that is nonzero if, in some 37072 cases, global symbols from one translation unit may not be bound 37073 to undefined symbols in another translation unit without user 37074 intervention. For instance, under Microsoft Windows symbols must 37075 be explicitly imported from shared libraries (DLLs). 37076 37077 You need not define this macro if it would always evaluate to zero. 37078 37079 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree 37080 INPUTS, tree CLOBBERS) 37081 This target hook should add to CLOBBERS `STRING_CST' trees for any 37082 hard regs the port wishes to automatically clobber for an asm. It 37083 should return the result of the last `tree_cons' used to add a 37084 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the 37085 corresponding parameters to the asm and may be inspected to avoid 37086 clobbering a register that is an input or output of the asm. You 37087 can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test 37088 for overlap with regards to asm-declared registers. 37089 37090 -- Macro: MATH_LIBRARY 37091 Define this macro as a C string constant for the linker argument 37092 to link in the system math library, minus the initial `"-l"', or 37093 `""' if the target does not have a separate math library. 37094 37095 You need only define this macro if the default of `"m"' is wrong. 37096 37097 -- Macro: LIBRARY_PATH_ENV 37098 Define this macro as a C string constant for the environment 37099 variable that specifies where the linker should look for libraries. 37100 37101 You need only define this macro if the default of `"LIBRARY_PATH"' 37102 is wrong. 37103 37104 -- Macro: TARGET_POSIX_IO 37105 Define this macro if the target supports the following POSIX file 37106 functions, access, mkdir and file locking with fcntl / F_SETLKW. 37107 Defining `TARGET_POSIX_IO' will enable the test coverage code to 37108 use file locking when exiting a program, which avoids race 37109 conditions if the program has forked. It will also create 37110 directories at run-time for cross-profiling. 37111 37112 -- Macro: MAX_CONDITIONAL_EXECUTE 37113 A C expression for the maximum number of instructions to execute 37114 via conditional execution instructions instead of a branch. A 37115 value of `BRANCH_COST'+1 is the default if the machine does not 37116 use cc0, and 1 if it does use cc0. 37117 37118 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 37119 Used if the target needs to perform machine-dependent 37120 modifications on the conditionals used for turning basic blocks 37121 into conditionally executed code. CE_INFO points to a data 37122 structure, `struct ce_if_block', which contains information about 37123 the currently processed blocks. TRUE_EXPR and FALSE_EXPR are the 37124 tests that are used for converting the then-block and the 37125 else-block, respectively. Set either TRUE_EXPR or FALSE_EXPR to a 37126 null pointer if the tests cannot be converted. 37127 37128 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 37129 FALSE_EXPR) 37130 Like `IFCVT_MODIFY_TESTS', but used when converting more 37131 complicated if-statements into conditions combined by `and' and 37132 `or' operations. BB contains the basic block that contains the 37133 test that is currently being processed and about to be turned into 37134 a condition. 37135 37136 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 37137 A C expression to modify the PATTERN of an INSN that is to be 37138 converted to conditional execution format. CE_INFO points to a 37139 data structure, `struct ce_if_block', which contains information 37140 about the currently processed blocks. 37141 37142 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 37143 A C expression to perform any final machine dependent 37144 modifications in converting code to conditional execution. The 37145 involved basic blocks can be found in the `struct ce_if_block' 37146 structure that is pointed to by CE_INFO. 37147 37148 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 37149 A C expression to cancel any machine dependent modifications in 37150 converting code to conditional execution. The involved basic 37151 blocks can be found in the `struct ce_if_block' structure that is 37152 pointed to by CE_INFO. 37153 37154 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO) 37155 A C expression to initialize any machine specific data for 37156 if-conversion of the if-block in the `struct ce_if_block' 37157 structure that is pointed to by CE_INFO. 37158 37159 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 37160 If non-null, this hook performs a target-specific pass over the 37161 instruction stream. The compiler will run it at all optimization 37162 levels, just before the point at which it normally does 37163 delayed-branch scheduling. 37164 37165 The exact purpose of the hook varies from target to target. Some 37166 use it to do transformations that are necessary for correctness, 37167 such as laying out in-function constant pools or avoiding hardware 37168 hazards. Others use it as an opportunity to do some 37169 machine-dependent optimizations. 37170 37171 You need not implement the hook if it has nothing to do. The 37172 default definition is null. 37173 37174 -- Target Hook: void TARGET_INIT_BUILTINS (void) 37175 Define this hook if you have any machine-specific built-in 37176 functions that need to be defined. It should be a function that 37177 performs the necessary setup. 37178 37179 Machine specific built-in functions can be useful to expand 37180 special machine instructions that would otherwise not normally be 37181 generated because they have no equivalent in the source language 37182 (for example, SIMD vector instructions or prefetch instructions). 37183 37184 To create a built-in function, call the function 37185 `lang_hooks.builtin_function' which is defined by the language 37186 front end. You can use any type nodes set up by 37187 `build_common_tree_nodes'; only language front ends that use those 37188 two functions will call `TARGET_INIT_BUILTINS'. 37189 37190 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 37191 INITIALIZE_P) 37192 Define this hook if you have any machine-specific built-in 37193 functions that need to be defined. It should be a function that 37194 returns the builtin function declaration for the builtin function 37195 code CODE. If there is no such builtin and it cannot be 37196 initialized at this time if INITIALIZE_P is true the function 37197 should return `NULL_TREE'. If CODE is out of range the function 37198 should return `error_mark_node'. 37199 37200 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 37201 SUBTARGET, enum machine_mode MODE, int IGNORE) 37202 Expand a call to a machine specific built-in function that was set 37203 up by `TARGET_INIT_BUILTINS'. EXP is the expression for the 37204 function call; the result should go to TARGET if that is 37205 convenient, and have mode MODE if that is convenient. SUBTARGET 37206 may be used as the target for computing one of EXP's operands. 37207 IGNORE is nonzero if the value is to be ignored. This function 37208 should return the result of the call to the built-in function. 37209 37210 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 37211 LOC, tree FNDECL, void *ARGLIST) 37212 Select a replacement for a machine specific built-in function that 37213 was set up by `TARGET_INIT_BUILTINS'. This is done _before_ 37214 regular type checking, and so allows the target to implement a 37215 crude form of function overloading. FNDECL is the declaration of 37216 the built-in function. ARGLIST is the list of arguments passed to 37217 the built-in function. The result is a complete expression that 37218 implements the operation, usually another `CALL_EXPR'. ARGLIST 37219 really has type `VEC(tree,gc)*' 37220 37221 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, 37222 tree *ARGP, bool IGNORE) 37223 Fold a call to a machine specific built-in function that was set 37224 up by `TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 37225 built-in function. N_ARGS is the number of arguments passed to 37226 the function; the arguments themselves are pointed to by ARGP. 37227 The result is another tree containing a simplified expression for 37228 the call's result. If IGNORE is true the value will be ignored. 37229 37230 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree 37231 DECL2) 37232 This hook is used to compare the target attributes in two 37233 functions to determine which function's features get higher 37234 priority. This is used during function multi-versioning to figure 37235 out the order in which two versions must be dispatched. A 37236 function version with a higher priority is checked for dispatching 37237 earlier. DECL1 and DECL2 are the two function decls that will be 37238 compared. 37239 37240 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void 37241 *DECL) 37242 This hook is used to get the dispatcher function for a set of 37243 function versions. The dispatcher function is called to invoke 37244 the right function version at run-time. DECL is one version from a 37245 set of semantically identical versions. 37246 37247 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void 37248 *ARG) 37249 This hook is used to generate the dispatcher logic to invoke the 37250 right function version at run-time for a given set of function 37251 versions. ARG points to the callgraph node of the dispatcher 37252 function whose body must be generated. 37253 37254 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx 37255 INSN) 37256 Take an instruction in INSN and return NULL if it is valid within a 37257 low-overhead loop, otherwise return a string explaining why doloop 37258 could not be applied. 37259 37260 Many targets use special registers for low-overhead looping. For 37261 any instruction that clobbers these this function should return a 37262 string indicating the reason why the doloop could not be applied. 37263 By default, the RTL loop optimizer does not use a present doloop 37264 pattern for loops containing function calls or branch on table 37265 instructions. 37266 37267 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx INSN) 37268 Take an instruction in INSN and return `false' if the instruction 37269 is not appropriate as a combination of two or more instructions. 37270 The default is to accept all instructions. 37271 37272 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2) 37273 Take a branch insn in BRANCH1 and another in BRANCH2. Return true 37274 if redirecting BRANCH1 to the destination of BRANCH2 is possible. 37275 37276 On some targets, branches may have a limited range. Optimizing the 37277 filling of delay slots can result in branches being redirected, 37278 and this may in turn cause a branch offset to overflow. 37279 37280 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const_rtx FOLLOWER, 37281 const_rtx FOLLOWEE) 37282 FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if 37283 FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. 37284 For example, on some targets, certain kinds of branches can't be 37285 made to follow through a hot/cold partitioning. 37286 37287 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 37288 This target hook returns `true' if X is considered to be 37289 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 37290 PA doesn't consider PLUS to be commutative inside a MEM. 37291 OUTER_CODE is the rtx code of the enclosing rtl, if known, 37292 otherwise it is UNKNOWN. 37293 37294 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 37295 When the initial value of a hard register has been copied in a 37296 pseudo register, it is often not necessary to actually allocate 37297 another register to this pseudo register, because the original 37298 hard register or a stack slot it has been saved into can be used. 37299 `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 37300 allocation once for each hard register that had its initial value 37301 copied by using `get_func_hard_reg_initial_val' or 37302 `get_hard_reg_initial_val'. Possible values are `NULL_RTX', if 37303 you don't want to do any special allocation, a `REG' rtx--that 37304 would typically be the hard register itself, if it is known not to 37305 be clobbered--or a `MEM'. If you are returning a `MEM', this is 37306 only a hint for the allocator; it might decide to use another 37307 register anyways. You may use `current_function_is_leaf' or 37308 `REG_N_SETS' in the hook to determine if the hard register in 37309 question will not be clobbered. The default value of this hook is 37310 `NULL', which disables any special allocation. 37311 37312 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 37313 FLAGS) 37314 This target hook returns nonzero if X, an `unspec' or 37315 `unspec_volatile' operation, might cause a trap. Targets can use 37316 this hook to enhance precision of analysis for `unspec' and 37317 `unspec_volatile' operations. You may call `may_trap_p_1' to 37318 analyze inner elements of X in which case FLAGS should be passed 37319 along. 37320 37321 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 37322 The compiler invokes this hook whenever it changes its current 37323 function context (`cfun'). You can define this function if the 37324 back end needs to perform any initialization or reset actions on a 37325 per-function basis. For example, it may be used to implement 37326 function attributes that affect register usage or code generation 37327 patterns. The argument DECL is the declaration for the new 37328 function context, and may be null to indicate that the compiler 37329 has left a function context and is returning to processing at the 37330 top level. The default hook function does nothing. 37331 37332 GCC sets `cfun' to a dummy function context during initialization 37333 of some parts of the back end. The hook function is not invoked 37334 in this situation; you need not worry about the hook being invoked 37335 recursively, or when the back end is in a partially-initialized 37336 state. `cfun' might be `NULL' to indicate processing at top level, 37337 outside of any function scope. 37338 37339 -- Macro: TARGET_OBJECT_SUFFIX 37340 Define this macro to be a C string representing the suffix for 37341 object files on your target machine. If you do not define this 37342 macro, GCC will use `.o' as the suffix for object files. 37343 37344 -- Macro: TARGET_EXECUTABLE_SUFFIX 37345 Define this macro to be a C string representing the suffix to be 37346 automatically added to executable files on your target machine. 37347 If you do not define this macro, GCC will use the null string as 37348 the suffix for executable files. 37349 37350 -- Macro: COLLECT_EXPORT_LIST 37351 If defined, `collect2' will scan the individual object files 37352 specified on its command line and create an export list for the 37353 linker. Define this macro for systems like AIX, where the linker 37354 discards object files that are not referenced from `main' and uses 37355 export lists. 37356 37357 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 37358 Define this macro to a C expression representing a variant of the 37359 method call MDECL, if Java Native Interface (JNI) methods must be 37360 invoked differently from other methods on your target. For 37361 example, on 32-bit Microsoft Windows, JNI methods must be invoked 37362 using the `stdcall' calling convention and this macro is then 37363 defined as this expression: 37364 37365 build_type_attribute_variant (MDECL, 37366 build_tree_list 37367 (get_identifier ("stdcall"), 37368 NULL)) 37369 37370 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 37371 This target hook returns `true' past the point in which new jump 37372 instructions could be created. On machines that require a 37373 register for every jump such as the SHmedia ISA of SH5, this point 37374 would typically be reload, so this target hook should be defined 37375 to a function such as: 37376 37377 static bool 37378 cannot_modify_jumps_past_reload_p () 37379 { 37380 return (reload_completed || reload_in_progress); 37381 } 37382 37383 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void) 37384 This target hook returns a register class for which branch target 37385 register optimizations should be applied. All registers in this 37386 class should be usable interchangeably. After reload, registers 37387 in this class will be re-allocated and loads will be hoisted out 37388 of loops and be subjected to inter-block scheduling. 37389 37390 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 37391 AFTER_PROLOGUE_EPILOGUE_GEN) 37392 Branch target register optimization will by default exclude 37393 callee-saved registers that are not already live during the 37394 current function; if this target hook returns true, they will be 37395 included. The target code must than make sure that all target 37396 registers in the class returned by 37397 `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are 37398 saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and 37399 epilogues have already been generated. Note, even if you only 37400 return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still 37401 are likely to have to make special provisions in 37402 `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 37403 target registers. 37404 37405 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 37406 This target hook returns true if the target supports conditional 37407 execution. This target hook is required only when the target has 37408 several different modes and they have different conditional 37409 execution capability, such as ARM. 37410 37411 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL, 37412 struct loop *LOOP) 37413 This target hook returns a new value for the number of times LOOP 37414 should be unrolled. The parameter NUNROLL is the number of times 37415 the loop is to be unrolled. The parameter LOOP is a pointer to the 37416 loop, which is going to be checked for unrolling. This target hook 37417 is required only when the target has special constraints like 37418 maximum number of memory accesses. 37419 37420 -- Macro: POWI_MAX_MULTS 37421 If defined, this macro is interpreted as a signed integer C 37422 expression that specifies the maximum number of floating point 37423 multiplications that should be emitted when expanding 37424 exponentiation by an integer constant inline. When this value is 37425 defined, exponentiation requiring more than this number of 37426 multiplications is implemented by calling the system library's 37427 `pow', `powf' or `powl' routines. The default value places no 37428 upper bound on the multiplication count. 37429 37430 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 37431 *IPREFIX, int STDINC) 37432 This target hook should register any extra include files for the 37433 target. The parameter STDINC indicates if normal include files 37434 are present. The parameter SYSROOT is the system root directory. 37435 The parameter IPREFIX is the prefix for the gcc directory. 37436 37437 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 37438 char *IPREFIX, int STDINC) 37439 This target hook should register any extra include files for the 37440 target before any standard headers. The parameter STDINC 37441 indicates if normal include files are present. The parameter 37442 SYSROOT is the system root directory. The parameter IPREFIX is 37443 the prefix for the gcc directory. 37444 37445 -- Macro: void TARGET_OPTF (char *PATH) 37446 This target hook should register special include paths for the 37447 target. The parameter PATH is the include to register. On Darwin 37448 systems, this is used for Framework includes, which have semantics 37449 that are different from `-I'. 37450 37451 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 37452 This target macro returns `true' if it is safe to use a local alias 37453 for a virtual function FNDECL when constructing thunks, `false' 37454 otherwise. By default, the macro returns `true' for all 37455 functions, if a target supports aliases (i.e. defines 37456 `ASM_OUTPUT_DEF'), `false' otherwise, 37457 37458 -- Macro: TARGET_FORMAT_TYPES 37459 If defined, this macro is the name of a global variable containing 37460 target-specific format checking information for the `-Wformat' 37461 option. The default is to have no target-specific format checks. 37462 37463 -- Macro: TARGET_N_FORMAT_TYPES 37464 If defined, this macro is the number of entries in 37465 `TARGET_FORMAT_TYPES'. 37466 37467 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 37468 If defined, this macro is the name of a global variable containing 37469 target-specific format overrides for the `-Wformat' option. The 37470 default is to have no target-specific format overrides. If defined, 37471 `TARGET_FORMAT_TYPES' must be defined, too. 37472 37473 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 37474 If defined, this macro specifies the number of entries in 37475 `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 37476 37477 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 37478 If defined, this macro specifies the optional initialization 37479 routine for target specific customizations of the system printf 37480 and scanf formatter settings. 37481 37482 -- Target Hook: bool TARGET_RELAXED_ORDERING 37483 If set to `true', means that the target's memory model does not 37484 guarantee that loads which do not depend on one another will access 37485 main memory in the order of the instruction stream; if ordering is 37486 important, an explicit memory barrier must be used. This is true 37487 of many recent processors which implement a policy of "relaxed," 37488 "weak," or "release" memory consistency, such as Alpha, PowerPC, 37489 and ia64. The default is `false'. 37490 37491 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 37492 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 37493 If defined, this macro returns the diagnostic message when it is 37494 illegal to pass argument VAL to function FUNCDECL with prototype 37495 TYPELIST. 37496 37497 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 37498 FROMTYPE, const_tree TOTYPE) 37499 If defined, this macro returns the diagnostic message when it is 37500 invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity 37501 should be determined by the front end. 37502 37503 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 37504 const_tree TYPE) 37505 If defined, this macro returns the diagnostic message when it is 37506 invalid to apply operation OP (where unary plus is denoted by 37507 `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity 37508 should be determined by the front end. 37509 37510 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 37511 const_tree TYPE1, const_tree TYPE2) 37512 If defined, this macro returns the diagnostic message when it is 37513 invalid to apply operation OP to operands of types TYPE1 and 37514 TYPE2, or `NULL' if validity should be determined by the front end. 37515 37516 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree 37517 TYPE) 37518 If defined, this macro returns the diagnostic message when it is 37519 invalid for functions to include parameters of type TYPE, or 37520 `NULL' if validity should be determined by the front end. This is 37521 currently used only by the C and C++ front ends. 37522 37523 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree 37524 TYPE) 37525 If defined, this macro returns the diagnostic message when it is 37526 invalid for functions to have return type TYPE, or `NULL' if 37527 validity should be determined by the front end. This is currently 37528 used only by the C and C++ front ends. 37529 37530 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 37531 If defined, this target hook returns the type to which values of 37532 TYPE should be promoted when they appear in expressions, analogous 37533 to the integer promotions, or `NULL_TREE' to use the front end's 37534 normal promotion rules. This hook is useful when there are 37535 target-specific types with special promotion rules. This is 37536 currently used only by the C and C++ front ends. 37537 37538 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 37539 If defined, this hook returns the result of converting EXPR to 37540 TYPE. It should return the converted expression, or `NULL_TREE' 37541 to apply the front end's normal conversion rules. This hook is 37542 useful when there are target-specific types with special 37543 conversion rules. This is currently used only by the C and C++ 37544 front ends. 37545 37546 -- Macro: TARGET_USE_JCR_SECTION 37547 This macro determines whether to use the JCR section to register 37548 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 37549 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, 37550 else 0. 37551 37552 -- Macro: OBJC_JBLEN 37553 This macro determines the size of the objective C jump buffer for 37554 the NeXT runtime. By default, OBJC_JBLEN is defined to an 37555 innocuous value. 37556 37557 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 37558 Define this macro if any target-specific attributes need to be 37559 attached to the functions in `libgcc' that provide low-level 37560 support for call stack unwinding. It is used in declarations in 37561 `unwind-generic.h' and the associated definitions of those 37562 functions. 37563 37564 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 37565 Define this macro to update the current function stack boundary if 37566 necessary. 37567 37568 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 37569 This hook should return an rtx for Dynamic Realign Argument 37570 Pointer (DRAP) if a different argument pointer register is needed 37571 to access the function's argument list due to stack realignment. 37572 Return `NULL' if no DRAP is needed. 37573 37574 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 37575 When optimization is disabled, this hook indicates whether or not 37576 arguments should be allocated to stack slots. Normally, GCC 37577 allocates stacks slots for arguments when not optimizing in order 37578 to make debugging easier. However, when a function is declared 37579 with `__attribute__((naked))', there is no stack frame, and the 37580 compiler cannot safely move arguments from the registers in which 37581 they are passed to the stack. Therefore, this hook should return 37582 true in general, but false for naked functions. The default 37583 implementation always returns true. 37584 37585 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 37586 On some architectures it can take multiple instructions to 37587 synthesize a constant. If there is another constant already in a 37588 register that is close enough in value then it is preferable that 37589 the new constant is computed from this register using immediate 37590 addition or subtraction. We accomplish this through CSE. Besides 37591 the value of the constant we also add a lower and an upper 37592 constant anchor to the available expressions. These are then 37593 queried when encountering new constants. The anchors are computed 37594 by rounding the constant up and down to a multiple of the value of 37595 `TARGET_CONST_ANCHOR'. `TARGET_CONST_ANCHOR' should be the 37596 maximum positive value accepted by immediate-add plus one. We 37597 currently assume that the value of `TARGET_CONST_ANCHOR' is a 37598 power of 2. For example, on MIPS, where add-immediate takes a 37599 16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'. 37600 The default value is zero, which disables this optimization. 37601 37602 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void) 37603 Return the offset bitwise ored into shifted address to get 37604 corresponding Address Sanitizer shadow memory address. NULL if 37605 Address Sanitizer is not supported by the target. 37606 37607 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned 37608 HOST_WIDE_INT VAL) 37609 Validate target specific memory model mask bits. When NULL no 37610 target specific memory model bits are allowed. 37611 37612 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 37613 This value should be set if the result written by 37614 `atomic_test_and_set' is not exactly 1, i.e. the `bool' `true'. 37615 37616 37617 File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 37618 37619 18 Host Configuration 37620 ********************* 37621 37622 Most details about the machine and system on which the compiler is 37623 actually running are detected by the `configure' script. Some things 37624 are impossible for `configure' to detect; these are described in two 37625 ways, either by macros defined in a file named `xm-MACHINE.h' or by 37626 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable 37627 in `config.gcc'. (The intention is that very few hosts will need a 37628 header file but nearly every fully supported host will need to override 37629 some hooks.) 37630 37631 If you need to define only a few macros, and they have simple 37632 definitions, consider using the `xm_defines' variable in your 37633 `config.gcc' entry instead of creating a host configuration header. 37634 *Note System Config::. 37635 37636 * Menu: 37637 37638 * Host Common:: Things every host probably needs implemented. 37639 * Filesystem:: Your host can't have the letter `a' in filenames? 37640 * Host Misc:: Rare configuration options for hosts. 37641 37642 37643 File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 37644 37645 18.1 Host Common 37646 ================ 37647 37648 Some things are just not portable, even between similar operating 37649 systems, and are too difficult for autoconf to detect. They get 37650 implemented using hook functions in the file specified by the 37651 HOST_HOOK_OBJ variable in `config.gcc'. 37652 37653 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 37654 This host hook is used to set up handling for extra signals. The 37655 most common thing to do in this hook is to detect stack overflow. 37656 37657 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 37658 FD) 37659 This host hook returns the address of some space that is likely to 37660 be free in some subsequent invocation of the compiler. We intend 37661 to load the PCH data at this address such that the data need not 37662 be relocated. The area should be able to hold SIZE bytes. If the 37663 host uses `mmap', FD is an open file descriptor that can be used 37664 for probing. 37665 37666 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, 37667 size_t SIZE, int FD, size_t OFFSET) 37668 This host hook is called when a PCH file is about to be loaded. 37669 We want to load SIZE bytes from FD at OFFSET into memory at 37670 ADDRESS. The given address will be the result of a previous 37671 invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we 37672 couldn't allocate SIZE bytes at ADDRESS. Return 0 if the memory 37673 is allocated but the data is not loaded. Return 1 if the hook has 37674 performed everything. 37675 37676 If the implementation uses reserved address space, free any 37677 reserved space beyond SIZE, regardless of the return value. If no 37678 PCH will be loaded, this hook may be called with SIZE zero, in 37679 which case all reserved address space should be freed. 37680 37681 Do not try to handle values of ADDRESS that could not have been 37682 returned by this executable; just return -1. Such values usually 37683 indicate an out-of-date PCH file (built by some other GCC 37684 executable), and such a PCH file won't work. 37685 37686 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 37687 This host hook returns the alignment required for allocating 37688 virtual memory. Usually this is the same as getpagesize, but on 37689 some hosts the alignment for reserving memory differs from the 37690 pagesize for committing memory. 37691 37692 37693 File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 37694 37695 18.2 Host Filesystem 37696 ==================== 37697 37698 GCC needs to know a number of things about the semantics of the host 37699 machine's filesystem. Filesystems with Unix and MS-DOS semantics are 37700 automatically detected. For other systems, you can define the 37701 following macros in `xm-MACHINE.h'. 37702 37703 `HAVE_DOS_BASED_FILE_SYSTEM' 37704 This macro is automatically defined by `system.h' if the host file 37705 system obeys the semantics defined by MS-DOS instead of Unix. DOS 37706 file systems are case insensitive, file specifications may begin 37707 with a drive letter, and both forward slash and backslash (`/' and 37708 `\') are directory separators. 37709 37710 `DIR_SEPARATOR' 37711 `DIR_SEPARATOR_2' 37712 If defined, these macros expand to character constants specifying 37713 separators for directory names within a file specification. 37714 `system.h' will automatically give them appropriate values on Unix 37715 and MS-DOS file systems. If your file system is neither of these, 37716 define one or both appropriately in `xm-MACHINE.h'. 37717 37718 However, operating systems like VMS, where constructing a pathname 37719 is more complicated than just stringing together directory names 37720 separated by a special character, should not define either of these 37721 macros. 37722 37723 `PATH_SEPARATOR' 37724 If defined, this macro should expand to a character constant 37725 specifying the separator for elements of search paths. The default 37726 value is a colon (`:'). DOS-based systems usually, but not 37727 always, use semicolon (`;'). 37728 37729 `VMS' 37730 Define this macro if the host system is VMS. 37731 37732 `HOST_OBJECT_SUFFIX' 37733 Define this macro to be a C string representing the suffix for 37734 object files on your host machine. If you do not define this 37735 macro, GCC will use `.o' as the suffix for object files. 37736 37737 `HOST_EXECUTABLE_SUFFIX' 37738 Define this macro to be a C string representing the suffix for 37739 executable files on your host machine. If you do not define this 37740 macro, GCC will use the null string as the suffix for executable 37741 files. 37742 37743 `HOST_BIT_BUCKET' 37744 A pathname defined by the host operating system, which can be 37745 opened as a file and written to, but all the information written 37746 is discarded. This is commonly known as a "bit bucket" or "null 37747 device". If you do not define this macro, GCC will use 37748 `/dev/null' as the bit bucket. If the host does not support a bit 37749 bucket, define this macro to an invalid filename. 37750 37751 `UPDATE_PATH_HOST_CANONICALIZE (PATH)' 37752 If defined, a C statement (sans semicolon) that performs 37753 host-dependent canonicalization when a path used in a compilation 37754 driver or preprocessor is canonicalized. PATH is a malloc-ed path 37755 to be canonicalized. If the C statement does canonicalize PATH 37756 into a different buffer, the old path should be freed and the new 37757 buffer should have been allocated with malloc. 37758 37759 `DUMPFILE_FORMAT' 37760 Define this macro to be a C string representing the format to use 37761 for constructing the index part of debugging dump file names. The 37762 resultant string must fit in fifteen bytes. The full filename 37763 will be the concatenation of: the prefix of the assembler file 37764 name, the string resulting from applying this format to an index 37765 number, and a string unique to each dump file kind, e.g. `rtl'. 37766 37767 If you do not define this macro, GCC will use `.%02d.'. You should 37768 define this macro if using the default will create an invalid file 37769 name. 37770 37771 `DELETE_IF_ORDINARY' 37772 Define this macro to be a C statement (sans semicolon) that 37773 performs host-dependent removal of ordinary temp files in the 37774 compilation driver. 37775 37776 If you do not define this macro, GCC will use the default version. 37777 You should define this macro if the default version does not 37778 reliably remove the temp file as, for example, on VMS which allows 37779 multiple versions of a file. 37780 37781 `HOST_LACKS_INODE_NUMBERS' 37782 Define this macro if the host filesystem does not report 37783 meaningful inode numbers in struct stat. 37784 37785 37786 File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 37787 37788 18.3 Host Misc 37789 ============== 37790 37791 `FATAL_EXIT_CODE' 37792 A C expression for the status code to be returned when the compiler 37793 exits after serious errors. The default is the system-provided 37794 macro `EXIT_FAILURE', or `1' if the system doesn't define that 37795 macro. Define this macro only if these defaults are incorrect. 37796 37797 `SUCCESS_EXIT_CODE' 37798 A C expression for the status code to be returned when the compiler 37799 exits without serious errors. (Warnings are not serious errors.) 37800 The default is the system-provided macro `EXIT_SUCCESS', or `0' if 37801 the system doesn't define that macro. Define this macro only if 37802 these defaults are incorrect. 37803 37804 `USE_C_ALLOCA' 37805 Define this macro if GCC should use the C implementation of 37806 `alloca' provided by `libiberty.a'. This only affects how some 37807 parts of the compiler itself allocate memory. It does not change 37808 code generation. 37809 37810 When GCC is built with a compiler other than itself, the C `alloca' 37811 is always used. This is because most other implementations have 37812 serious bugs. You should define this macro only on a system where 37813 no stack-based `alloca' can possibly work. For instance, if a 37814 system has a small limit on the size of the stack, GCC's builtin 37815 `alloca' will not work reliably. 37816 37817 `COLLECT2_HOST_INITIALIZATION' 37818 If defined, a C statement (sans semicolon) that performs 37819 host-dependent initialization when `collect2' is being initialized. 37820 37821 `GCC_DRIVER_HOST_INITIALIZATION' 37822 If defined, a C statement (sans semicolon) that performs 37823 host-dependent initialization when a compilation driver is being 37824 initialized. 37825 37826 `HOST_LONG_LONG_FORMAT' 37827 If defined, the string used to indicate an argument of type `long 37828 long' to functions like `printf'. The default value is `"ll"'. 37829 37830 `HOST_LONG_FORMAT' 37831 If defined, the string used to indicate an argument of type `long' 37832 to functions like `printf'. The default value is `"l"'. 37833 37834 `HOST_PTR_PRINTF' 37835 If defined, the string used to indicate an argument of type `void 37836 *' to functions like `printf'. The default value is `"%p"'. 37837 37838 In addition, if `configure' generates an incorrect definition of any 37839 of the macros in `auto-host.h', you can override that definition in a 37840 host configuration header. If you need to do this, first see if it is 37841 possible to fix `configure'. 37842 37843 37844 File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 37845 37846 19 Makefile Fragments 37847 ********************* 37848 37849 When you configure GCC using the `configure' script, it will construct 37850 the file `Makefile' from the template file `Makefile.in'. When it does 37851 this, it can incorporate makefile fragments from the `config' 37852 directory. These are used to set Makefile parameters that are not 37853 amenable to being calculated by autoconf. The list of fragments to 37854 incorporate is set by `config.gcc' (and occasionally `config.build' and 37855 `config.host'); *Note System Config::. 37856 37857 Fragments are named either `t-TARGET' or `x-HOST', depending on 37858 whether they are relevant to configuring GCC to produce code for a 37859 particular target, or to configuring GCC to run on a particular host. 37860 Here TARGET and HOST are mnemonics which usually have some relationship 37861 to the canonical system name, but no formal connection. 37862 37863 If these files do not exist, it means nothing needs to be added for a 37864 given target or host. Most targets need a few `t-TARGET' fragments, 37865 but needing `x-HOST' fragments is rare. 37866 37867 * Menu: 37868 37869 * Target Fragment:: Writing `t-TARGET' files. 37870 * Host Fragment:: Writing `x-HOST' files. 37871 37872 37873 File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 37874 37875 19.1 Target Makefile Fragments 37876 ============================== 37877 37878 Target makefile fragments can set these Makefile variables. 37879 37880 `LIBGCC2_CFLAGS' 37881 Compiler flags to use when compiling `libgcc2.c'. 37882 37883 `LIB2FUNCS_EXTRA' 37884 A list of source file names to be compiled or assembled and 37885 inserted into `libgcc.a'. 37886 37887 `CRTSTUFF_T_CFLAGS' 37888 Special flags used when compiling `crtstuff.c'. *Note 37889 Initialization::. 37890 37891 `CRTSTUFF_T_CFLAGS_S' 37892 Special flags used when compiling `crtstuff.c' for shared linking. 37893 Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'. 37894 *Note Initialization::. 37895 37896 `MULTILIB_OPTIONS' 37897 For some targets, invoking GCC in different ways produces objects 37898 that can not be linked together. For example, for some targets GCC 37899 produces both big and little endian code. For these targets, you 37900 must arrange for multiple versions of `libgcc.a' to be compiled, 37901 one for each set of incompatible options. When GCC invokes the 37902 linker, it arranges to link in the right version of `libgcc.a', 37903 based on the command line options used. 37904 37905 The `MULTILIB_OPTIONS' macro lists the set of options for which 37906 special versions of `libgcc.a' must be built. Write options that 37907 are mutually incompatible side by side, separated by a slash. 37908 Write options that may be used together separated by a space. The 37909 build procedure will build all combinations of compatible options. 37910 37911 For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020 37912 msoft-float', `Makefile' will build special versions of `libgcc.a' 37913 using the following sets of options: `-m68000', `-m68020', 37914 `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'. 37915 37916 `MULTILIB_DIRNAMES' 37917 If `MULTILIB_OPTIONS' is used, this variable specifies the 37918 directory names that should be used to hold the various libraries. 37919 Write one element in `MULTILIB_DIRNAMES' for each element in 37920 `MULTILIB_OPTIONS'. If `MULTILIB_DIRNAMES' is not used, the 37921 default value will be `MULTILIB_OPTIONS', with all slashes treated 37922 as spaces. 37923 37924 `MULTILIB_DIRNAMES' describes the multilib directories using GCC 37925 conventions and is applied to directories that are part of the GCC 37926 installation. When multilib-enabled, the compiler will add a 37927 subdirectory of the form PREFIX/MULTILIB before each directory in 37928 the search path for libraries and crt files. 37929 37930 For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020 37931 msoft-float', then the default value of `MULTILIB_DIRNAMES' is 37932 `m68000 m68020 msoft-float'. You may specify a different value if 37933 you desire a different set of directory names. 37934 37935 `MULTILIB_MATCHES' 37936 Sometimes the same option may be written in two different ways. 37937 If an option is listed in `MULTILIB_OPTIONS', GCC needs to know 37938 about any synonyms. In that case, set `MULTILIB_MATCHES' to a 37939 list of items of the form `option=option' to describe all relevant 37940 synonyms. For example, `m68000=mc68000 m68020=mc68020'. 37941 37942 `MULTILIB_EXCEPTIONS' 37943 Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being 37944 specified, there are combinations that should not be built. In 37945 that case, set `MULTILIB_EXCEPTIONS' to be all of the switch 37946 exceptions in shell case syntax that should not be built. 37947 37948 For example the ARM processor cannot execute both hardware floating 37949 point instructions and the reduced size THUMB instructions at the 37950 same time, so there is no need to build libraries with both of 37951 these options enabled. Therefore `MULTILIB_EXCEPTIONS' is set to: 37952 *mthumb/*mhard-float* 37953 37954 `MULTILIB_REQUIRED' 37955 Sometimes when there are only a few combinations are required, it 37956 would be a big effort to come up with a `MULTILIB_EXCEPTIONS' list 37957 to cover all undesired ones. In such a case, just listing all the 37958 required combinations in `MULTILIB_REQUIRED' would be more 37959 straightforward. 37960 37961 The way to specify the entries in `MULTILIB_REQUIRED' is same with 37962 the way used for `MULTILIB_EXCEPTIONS', only this time what are 37963 required will be specified. Suppose there are multiple sets of 37964 `MULTILIB_OPTIONS' and only two combinations are required, one for 37965 ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, 37966 the `MULTILIB_REQUIRED' can be set to: 37967 `MULTILIB_REQUIRED' = mthumb/march=armv7-m 37968 `MULTILIB_REQUIRED' += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 37969 37970 The `MULTILIB_REQUIRED' can be used together with 37971 `MULTILIB_EXCEPTIONS'. The option combinations generated from 37972 `MULTILIB_OPTIONS' will be filtered by `MULTILIB_EXCEPTIONS' and 37973 then by `MULTILIB_REQUIRED'. 37974 37975 `MULTILIB_REUSE' 37976 Sometimes it is desirable to reuse one existing multilib for 37977 different sets of options. Such kind of reuse can minimize the 37978 number of multilib variants. And for some targets it is better to 37979 reuse an existing multilib than to fall back to default multilib 37980 when there is no corresponding multilib. This can be done by 37981 adding reuse rules to `MULTILIB_REUSE'. 37982 37983 A reuse rule is comprised of two parts connected by equality sign. 37984 The left part is option set used to build multilib and the right 37985 part is option set that will reuse this multilib. The order of 37986 options in the left part matters and should be same with those 37987 specified in `MULTILIB_REQUIRED' or aligned with order in 37988 `MULTILIB_OPTIONS'. There is no such limitation for options in 37989 right part as we don't build multilib from them. But the equality 37990 sign in both parts should be replaced with period. 37991 37992 The `MULTILIB_REUSE' is different from `MULTILIB_MATCHES' in that 37993 it sets up relations between two option sets rather than two 37994 options. Here is an example to demo how we reuse libraries built 37995 in Thumb mode for applications built in ARM mode: 37996 `MULTILIB_REUSE' = mthumb/march.armv7-r=marm/march.armv7-r 37997 37998 Before the advent of `MULTILIB_REUSE', GCC select multilib by 37999 comparing command line options with options used to build 38000 multilib. The `MULTILIB_REUSE' is complementary to that way. 38001 Only when the original comparison matches nothing it will work to 38002 see if it is OK to reuse some existing multilib. 38003 38004 `MULTILIB_EXTRA_OPTS' 38005 Sometimes it is desirable that when building multiple versions of 38006 `libgcc.a' certain options should always be passed on to the 38007 compiler. In that case, set `MULTILIB_EXTRA_OPTS' to be the list 38008 of options to be used for all builds. If you set this, you should 38009 probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it. 38010 38011 `MULTILIB_OSDIRNAMES' 38012 If `MULTILIB_OPTIONS' is used, this variable specifies a list of 38013 subdirectory names, that are used to modify the search path 38014 depending on the chosen multilib. Unlike `MULTILIB_DIRNAMES', 38015 `MULTILIB_OSDIRNAMES' describes the multilib directories using 38016 operating systems conventions, and is applied to the directories 38017 such as `lib' or those in the `LIBRARY_PATH' environment variable. 38018 The format is either the same as of `MULTILIB_DIRNAMES', or a set 38019 of mappings. When it is the same as `MULTILIB_DIRNAMES', it 38020 describes the multilib directories using operating system 38021 conventions, rather than GCC conventions. When it is a set of 38022 mappings of the form GCCDIR=OSDIR, the left side gives the GCC 38023 convention and the right gives the equivalent OS defined location. 38024 If the OSDIR part begins with a `!', GCC will not search in the 38025 non-multilib directory and use exclusively the multilib directory. 38026 Otherwise, the compiler will examine the search path for libraries 38027 and crt files twice; the first time it will add MULTILIB to each 38028 directory in the search path, the second it will not. 38029 38030 For configurations that support both multilib and multiarch, 38031 `MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus 38032 subsuming `MULTIARCH_DIRNAME'. The multiarch name is appended to 38033 each directory name, separated by a colon (e.g. 38034 `../lib32:i386-linux-gnu'). 38035 38036 Each multiarch subdirectory will be searched before the 38037 corresponding OS multilib directory, for example 38038 `/lib/i386-linux-gnu' before `/lib/../lib32'. The multiarch name 38039 will also be used to modify the system header search path, as 38040 explained for `MULTIARCH_DIRNAME'. 38041 38042 `MULTIARCH_DIRNAME' 38043 This variable specifies the multiarch name for configurations that 38044 are multiarch-enabled but not multilibbed configurations. 38045 38046 The multiarch name is used to augment the search path for 38047 libraries, crt files and system header files with additional 38048 locations. The compiler will add a multiarch subdirectory of the 38049 form PREFIX/MULTIARCH before each directory in the library and crt 38050 search path. It will also add two directories 38051 `LOCAL_INCLUDE_DIR'/MULTIARCH and 38052 `NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search 38053 path, respectively before `LOCAL_INCLUDE_DIR' and 38054 `NATIVE_SYSTEM_HEADER_DIR'. 38055 38056 `MULTIARCH_DIRNAME' is not used for configurations that support 38057 both multilib and multiarch. In that case, multiarch names are 38058 encoded in `MULTILIB_OSDIRNAMES' instead. 38059 38060 More documentation about multiarch can be found at 38061 `http://wiki.debian.org/Multiarch'. 38062 38063 `SPECS' 38064 Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since 38065 it does not affect the build of target libraries, at least not the 38066 build of the default multilib. One possible work-around is to use 38067 `DRIVER_SELF_SPECS' to bring options from the `specs' file as if 38068 they had been passed in the compiler driver command line. 38069 However, you don't want to be adding these options after the 38070 toolchain is installed, so you can instead tweak the `specs' file 38071 that will be used during the toolchain build, while you still 38072 install the original, built-in `specs'. The trick is to set 38073 `SPECS' to some other filename (say `specs.install'), that will 38074 then be created out of the built-in specs, and introduce a 38075 `Makefile' rule to generate the `specs' file that's going to be 38076 used at build time out of your `specs.install'. 38077 38078 `T_CFLAGS' 38079 These are extra flags to pass to the C compiler. They are used 38080 both when building GCC, and when compiling things with the 38081 just-built GCC. This variable is deprecated and should not be 38082 used. 38083 38084 38085 File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 38086 38087 19.2 Host Makefile Fragments 38088 ============================ 38089 38090 The use of `x-HOST' fragments is discouraged. You should only use it 38091 for makefile dependencies. 38092 38093 38094 File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 38095 38096 20 `collect2' 38097 ************* 38098 38099 GCC uses a utility called `collect2' on nearly all systems to arrange 38100 to call various initialization functions at start time. 38101 38102 The program `collect2' works by linking the program once and looking 38103 through the linker output file for symbols with particular names 38104 indicating they are constructor functions. If it finds any, it creates 38105 a new temporary `.c' file containing a table of them, compiles it, and 38106 links the program a second time including that file. 38107 38108 The actual calls to the constructors are carried out by a subroutine 38109 called `__main', which is called (automatically) at the beginning of 38110 the body of `main' (provided `main' was compiled with GNU CC). Calling 38111 `__main' is necessary, even when compiling C code, to allow linking C 38112 and C++ object code together. (If you use `-nostdlib', you get an 38113 unresolved reference to `__main', since it's defined in the standard 38114 GCC library. Include `-lgcc' at the end of your compiler command line 38115 to resolve this reference.) 38116 38117 The program `collect2' is installed as `ld' in the directory where the 38118 passes of the compiler are installed. When `collect2' needs to find 38119 the _real_ `ld', it tries the following file names: 38120 38121 * a hard coded linker file name, if GCC was configured with the 38122 `--with-ld' option. 38123 38124 * `real-ld' in the directories listed in the compiler's search 38125 directories. 38126 38127 * `real-ld' in the directories listed in the environment variable 38128 `PATH'. 38129 38130 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 38131 if specified. 38132 38133 * `ld' in the compiler's search directories, except that `collect2' 38134 will not execute itself recursively. 38135 38136 * `ld' in `PATH'. 38137 38138 "The compiler's search directories" means all the directories where 38139 `gcc' searches for passes of the compiler. This includes directories 38140 that you specify with `-B'. 38141 38142 Cross-compilers search a little differently: 38143 38144 * `real-ld' in the compiler's search directories. 38145 38146 * `TARGET-real-ld' in `PATH'. 38147 38148 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 38149 if specified. 38150 38151 * `ld' in the compiler's search directories. 38152 38153 * `TARGET-ld' in `PATH'. 38154 38155 `collect2' explicitly avoids running `ld' using the file name under 38156 which `collect2' itself was invoked. In fact, it remembers up a list 38157 of such names--in case one copy of `collect2' finds another copy (or 38158 version) of `collect2' installed as `ld' in a second place in the 38159 search path. 38160 38161 `collect2' searches for the utilities `nm' and `strip' using the same 38162 algorithm as above for `ld'. 38163 38164 38165 File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 38166 38167 21 Standard Header File Directories 38168 *********************************** 38169 38170 `GCC_INCLUDE_DIR' means the same thing for native and cross. It is 38171 where GCC stores its private include files, and also where GCC stores 38172 the fixed include files. A cross compiled GCC runs `fixincludes' on 38173 the header files in `$(tooldir)/include'. (If the cross compilation 38174 header files need to be fixed, they must be installed before GCC is 38175 built. If the cross compilation header files are already suitable for 38176 GCC, nothing special need be done). 38177 38178 `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 38179 is where `g++' looks first for header files. The C++ library installs 38180 only target independent header files in that directory. 38181 38182 `LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 38183 install anything there. It is normally `/usr/local/include'. This is 38184 where local additions to a packaged system should place header files. 38185 38186 `CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 38187 install anything there. 38188 38189 `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 38190 the place for other packages to install header files that GCC will use. 38191 For a cross-compiler, this is the equivalent of `/usr/include'. When 38192 you build a cross-compiler, `fixincludes' processes any header files in 38193 this directory. 38194 38195 38196 File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 38197 38198 22 Memory Management and Type Information 38199 ***************************************** 38200 38201 GCC uses some fairly sophisticated memory management techniques, which 38202 involve determining information about GCC's data structures from GCC's 38203 source code and using this information to perform garbage collection and 38204 implement precompiled headers. 38205 38206 A full C++ parser would be too complicated for this task, so a limited 38207 subset of C++ is interpreted and special markers are used to determine 38208 what parts of the source to look at. All `struct', `union' and 38209 `template' structure declarations that define data structures that are 38210 allocated under control of the garbage collector must be marked. All 38211 global variables that hold pointers to garbage-collected memory must 38212 also be marked. Finally, all global variables that need to be saved 38213 and restored by a precompiled header must be marked. (The precompiled 38214 header mechanism can only save static variables if they're scalar. 38215 Complex data structures must be allocated in garbage-collected memory 38216 to be saved in a precompiled header.) 38217 38218 The full format of a marker is 38219 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 38220 but in most cases no options are needed. The outer double parentheses 38221 are still necessary, though: `GTY(())'. Markers can appear: 38222 38223 * In a structure definition, before the open brace; 38224 38225 * In a global variable declaration, after the keyword `static' or 38226 `extern'; and 38227 38228 * In a structure field definition, before the name of the field. 38229 38230 Here are some examples of marking simple data structures and globals. 38231 38232 struct GTY(()) TAG 38233 { 38234 FIELDS... 38235 }; 38236 38237 typedef struct GTY(()) TAG 38238 { 38239 FIELDS... 38240 } *TYPENAME; 38241 38242 static GTY(()) struct TAG *LIST; /* points to GC memory */ 38243 static GTY(()) int COUNTER; /* save counter in a PCH */ 38244 38245 The parser understands simple typedefs such as `typedef struct TAG 38246 *NAME;' and `typedef int NAME;'. These don't need to be marked. 38247 38248 Since `gengtype''s understanding of C++ is limited, there are several 38249 constructs and declarations that are not supported inside 38250 classes/structures marked for automatic GC code generation. The 38251 following C++ constructs produce a `gengtype' error on 38252 structures/classes marked for automatic GC code generation: 38253 38254 * Type definitions inside classes/structures are not supported. 38255 38256 * Enumerations inside classes/structures are not supported. 38257 38258 If you have a class or structure using any of the above constructs, 38259 you need to mark that class as `GTY ((user))' and provide your own 38260 marking routines (see section *note User GC:: for details). 38261 38262 It is always valid to include function definitions inside classes. 38263 Those are always ignored by `gengtype', as it only cares about data 38264 members. 38265 38266 * Menu: 38267 38268 * GTY Options:: What goes inside a `GTY(())'. 38269 * User GC:: Adding user-provided GC marking routines. 38270 * GGC Roots:: Making global variables GGC roots. 38271 * Files:: How the generated files work. 38272 * Invoking the garbage collector:: How to invoke the garbage collector. 38273 * Troubleshooting:: When something does not work as expected. 38274 38275 38276 File: gccint.info, Node: GTY Options, Next: User GC, Up: Type Information 38277 38278 22.1 The Inside of a `GTY(())' 38279 ============================== 38280 38281 Sometimes the C code is not enough to fully describe the type 38282 structure. Extra information can be provided with `GTY' options and 38283 additional markers. Some options take a parameter, which may be either 38284 a string or a type name, depending on the parameter. If an option 38285 takes no parameter, it is acceptable either to omit the parameter 38286 entirely, or to provide an empty string as a parameter. For example, 38287 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent. 38288 38289 When the parameter is a string, often it is a fragment of C code. Four 38290 special escapes may be used in these strings, to refer to pieces of the 38291 data structure being marked: 38292 38293 `%h' 38294 The current structure. 38295 38296 `%1' 38297 The structure that immediately contains the current structure. 38298 38299 `%0' 38300 The outermost structure that contains the current structure. 38301 38302 `%a' 38303 A partial expression of the form `[i1][i2]...' that indexes the 38304 array item currently being marked. 38305 38306 For instance, suppose that you have a structure of the form 38307 struct A { 38308 ... 38309 }; 38310 struct B { 38311 struct A foo[12]; 38312 }; 38313 and `b' is a variable of type `struct B'. When marking `b.foo[11]', 38314 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to 38315 `b', and `%a' would expand to `[11]'. 38316 38317 As in ordinary C, adjacent strings will be concatenated; this is 38318 helpful when you have a complicated expression. 38319 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 38320 " ? TYPE_NEXT_VARIANT (&%h.generic)" 38321 " : TREE_CHAIN (&%h.generic)"))) 38322 38323 The available options are: 38324 38325 `length ("EXPRESSION")' 38326 There are two places the type machinery will need to be explicitly 38327 told the length of an array of non-atomic objects. The first case 38328 is when a structure ends in a variable-length array, like this: 38329 struct GTY(()) rtvec_def { 38330 int num_elem; /* number of elements */ 38331 rtx GTY ((length ("%h.num_elem"))) elem[1]; 38332 }; 38333 38334 In this case, the `length' option is used to override the specified 38335 array length (which should usually be `1'). The parameter of the 38336 option is a fragment of C code that calculates the length. 38337 38338 The second case is when a structure or a global variable contains a 38339 pointer to an array, like this: 38340 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter; 38341 In this case, `iter' has been allocated by writing something like 38342 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse); 38343 and the `collapse' provides the length of the field. 38344 38345 This second use of `length' also works on global variables, like: static GTY((length("reg_known_value_size"))) rtx *reg_known_value; 38346 38347 Note that the `length' option is only meant for use with arrays of 38348 non-atomic objects, that is, objects that contain pointers 38349 pointing to other GTY-managed objects. For other GC-allocated 38350 arrays and strings you should use `atomic'. 38351 38352 `skip' 38353 If `skip' is applied to a field, the type machinery will ignore it. 38354 This is somewhat dangerous; the only safe use is in a union when 38355 one field really isn't ever used. 38356 38357 `desc ("EXPRESSION")' 38358 `tag ("CONSTANT")' 38359 `default' 38360 The type machinery needs to be told which field of a `union' is 38361 currently active. This is done by giving each field a constant 38362 `tag' value, and then specifying a discriminator using `desc'. 38363 The value of the expression given by `desc' is compared against 38364 each `tag' value, each of which should be different. If no `tag' 38365 is matched, the field marked with `default' is used if there is 38366 one, otherwise no field in the union will be marked. 38367 38368 In the `desc' option, the "current structure" is the union that it 38369 discriminates. Use `%1' to mean the structure containing it. 38370 There are no escapes available to the `tag' option, since it is a 38371 constant. 38372 38373 For example, 38374 struct GTY(()) tree_binding 38375 { 38376 struct tree_common common; 38377 union tree_binding_u { 38378 tree GTY ((tag ("0"))) scope; 38379 struct cp_binding_level * GTY ((tag ("1"))) level; 38380 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 38381 tree value; 38382 }; 38383 38384 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 38385 `struct tree_binding *' is presumed to be 0 or 1. If 1, the type 38386 mechanism will treat the field `level' as being present and if 0, 38387 will treat the field `scope' as being present. 38388 38389 `param_is (TYPE)' 38390 `use_param' 38391 Sometimes it's convenient to define some data structure to work on 38392 generic pointers (that is, `PTR') and then use it with a specific 38393 type. `param_is' specifies the real type pointed to, and 38394 `use_param' says where in the generic data structure that type 38395 should be put. 38396 38397 For instance, to have a `htab_t' that points to trees, one would 38398 write the definition of `htab_t' like this: 38399 typedef struct GTY(()) { 38400 ... 38401 void ** GTY ((use_param, ...)) entries; 38402 ... 38403 } htab_t; 38404 and then declare variables like this: 38405 static htab_t GTY ((param_is (union tree_node))) ict; 38406 38407 `paramN_is (TYPE)' 38408 `use_paramN' 38409 In more complicated cases, the data structure might need to work on 38410 several different types, which might not necessarily all be 38411 pointers. For this, `param1_is' through `param9_is' may be used to 38412 specify the real type of a field identified by `use_param1' through 38413 `use_param9'. 38414 38415 `use_params' 38416 When a structure contains another structure that is parameterized, 38417 there's no need to do anything special, the inner structure 38418 inherits the parameters of the outer one. When a structure 38419 contains a pointer to a parameterized structure, the type 38420 machinery won't automatically detect this (it could, it just 38421 doesn't yet), so it's necessary to tell it that the pointed-to 38422 structure should use the same parameters as the outer structure. 38423 This is done by marking the pointer with the `use_params' option. 38424 38425 `deletable' 38426 `deletable', when applied to a global variable, indicates that when 38427 garbage collection runs, there's no need to mark anything pointed 38428 to by this variable, it can just be set to `NULL' instead. This 38429 is used to keep a list of free structures around for re-use. 38430 38431 `if_marked ("EXPRESSION")' 38432 Suppose you want some kinds of object to be unique, and so you put 38433 them in a hash table. If garbage collection marks the hash table, 38434 these objects will never be freed, even if the last other 38435 reference to them goes away. GGC has special handling to deal 38436 with this: if you use the `if_marked' option on a global hash 38437 table, GGC will call the routine whose name is the parameter to 38438 the option on each hash table entry. If the routine returns 38439 nonzero, the hash table entry will be marked as usual. If the 38440 routine returns zero, the hash table entry will be deleted. 38441 38442 The routine `ggc_marked_p' can be used to determine if an element 38443 has been marked already; in fact, the usual case is to use 38444 `if_marked ("ggc_marked_p")'. 38445 38446 `mark_hook ("HOOK-ROUTINE-NAME")' 38447 If provided for a structure or union type, the given 38448 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine 38449 called when the garbage collector has just marked the data as 38450 reachable. This routine should not change the data, or call any ggc 38451 routine. Its only argument is a pointer to the just marked (const) 38452 structure or union. 38453 38454 `maybe_undef' 38455 When applied to a field, `maybe_undef' indicates that it's OK if 38456 the structure that this fields points to is never defined, so long 38457 as this field is always `NULL'. This is used to avoid requiring 38458 backends to define certain optional structures. It doesn't work 38459 with language frontends. 38460 38461 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 38462 The type machinery expects all pointers to point to the start of an 38463 object. Sometimes for abstraction purposes it's convenient to have 38464 a pointer which points inside an object. So long as it's possible 38465 to convert the original object to and from the pointer, such 38466 pointers can still be used. TYPE is the type of the original 38467 object, the TO EXPRESSION returns the pointer given the original 38468 object, and the FROM EXPRESSION returns the original object given 38469 the pointer. The pointer will be available using the `%h' escape. 38470 38471 `chain_next ("EXPRESSION")' 38472 `chain_prev ("EXPRESSION")' 38473 `chain_circular ("EXPRESSION")' 38474 It's helpful for the type machinery to know if objects are often 38475 chained together in long lists; this lets it generate code that 38476 uses less stack space by iterating along the list instead of 38477 recursing down it. `chain_next' is an expression for the next 38478 item in the list, `chain_prev' is an expression for the previous 38479 item. For singly linked lists, use only `chain_next'; for doubly 38480 linked lists, use both. The machinery requires that taking the 38481 next item of the previous item gives the original item. 38482 `chain_circular' is similar to `chain_next', but can be used for 38483 circular single linked lists. 38484 38485 `reorder ("FUNCTION NAME")' 38486 Some data structures depend on the relative ordering of pointers. 38487 If the precompiled header machinery needs to change that ordering, 38488 it will call the function referenced by the `reorder' option, 38489 before changing the pointers in the object that's pointed to by 38490 the field the option applies to. The function must take four 38491 arguments, with the signature 38492 `void *, void *, gt_pointer_operator, void *'. The first 38493 parameter is a pointer to the structure that contains the object 38494 being updated, or the object itself if there is no containing 38495 structure. The second parameter is a cookie that should be 38496 ignored. The third parameter is a routine that, given a pointer, 38497 will update it to its correct new value. The fourth parameter is 38498 a cookie that must be passed to the second parameter. 38499 38500 PCH cannot handle data structures that depend on the absolute 38501 values of pointers. `reorder' functions can be expensive. When 38502 possible, it is better to depend on properties of the data, like 38503 an ID number or the hash of a string instead. 38504 38505 `variable_size' 38506 The type machinery expects the types to be of constant size. When 38507 this is not true, for example, with structs that have array fields 38508 or unions, the type machinery cannot tell how many bytes need to 38509 be allocated at each allocation. The `variable_size' is used to 38510 mark such types. The type machinery then provides allocators that 38511 take a parameter indicating an exact size of object being 38512 allocated. Note that the size must be provided in bytes whereas 38513 the `length' option works with array lengths in number of elements. 38514 38515 For example, 38516 struct GTY((variable_size)) sorted_fields_type { 38517 int len; 38518 tree GTY((length ("%h.len"))) elts[1]; 38519 }; 38520 38521 Then the objects of `struct sorted_fields_type' are allocated in GC 38522 memory as follows: 38523 field_vec = ggc_alloc_sorted_fields_type (size); 38524 38525 If FIELD_VEC->ELTS stores N elements, then SIZE could be 38526 calculated as follows: 38527 size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree); 38528 38529 `atomic' 38530 The `atomic' option can only be used with pointers. It informs 38531 the GC machinery that the memory that the pointer points to does 38532 not contain any pointers, and hence it should be treated by the GC 38533 and PCH machinery as an "atomic" block of memory that does not 38534 need to be examined when scanning memory for pointers. In 38535 particular, the machinery will not scan that memory for pointers 38536 to mark them as reachable (when marking pointers for GC) or to 38537 relocate them (when writing a PCH file). 38538 38539 The `atomic' option differs from the `skip' option. `atomic' 38540 keeps the memory under Garbage Collection, but makes the GC ignore 38541 the contents of the memory. `skip' is more drastic in that it 38542 causes the pointer and the memory to be completely ignored by the 38543 Garbage Collector. So, memory marked as `atomic' is automatically 38544 freed when no longer reachable, while memory marked as `skip' is 38545 not. 38546 38547 The `atomic' option must be used with great care, because all 38548 sorts of problem can occur if used incorrectly, that is, if the 38549 memory the pointer points to does actually contain a pointer. 38550 38551 Here is an example of how to use it: 38552 struct GTY(()) my_struct { 38553 int number_of_elements; 38554 unsigned int * GTY ((atomic)) elements; 38555 }; 38556 In this case, `elements' is a pointer under GC, and the memory it 38557 points to needs to be allocated using the Garbage Collector, and 38558 will be freed automatically by the Garbage Collector when it is no 38559 longer referenced. But the memory that the pointer points to is 38560 an array of `unsigned int' elements, and the GC must not try to 38561 scan it to find pointers to mark or relocate, which is why it is 38562 marked with the `atomic' option. 38563 38564 Note that, currently, global variables can not be marked with 38565 `atomic'; only fields of a struct can. This is a known 38566 limitation. It would be useful to be able to mark global pointers 38567 with `atomic' to make the PCH machinery aware of them so that they 38568 are saved and restored correctly to PCH files. 38569 38570 `special ("NAME")' 38571 The `special' option is used to mark types that have to be dealt 38572 with by special case machinery. The parameter is the name of the 38573 special case. See `gengtype.c' for further details. Avoid adding 38574 new special cases unless there is no other alternative. 38575 38576 `user' 38577 The `user' option indicates that the code to mark structure fields 38578 is completely handled by user-provided routines. See section 38579 *note User GC:: for details on what functions need to be provided. 38580 38581 38582 File: gccint.info, Node: User GC, Next: GGC Roots, Prev: GTY Options, Up: Type Information 38583 38584 22.2 Support for user-provided GC marking routines 38585 ================================================== 38586 38587 The garbage collector supports types for which no automatic marking 38588 code is generated. For these types, the user is required to provide 38589 three functions: one to act as a marker for garbage collection, and two 38590 functions to act as marker and pointer walker for pre-compiled headers. 38591 38592 Given a structure `struct GTY((user)) my_struct', the following 38593 functions should be defined to mark `my_struct': 38594 38595 void gt_ggc_mx (my_struct *p) 38596 { 38597 /* This marks field 'fld'. */ 38598 gt_ggc_mx (p->fld); 38599 } 38600 38601 void gt_pch_nx (my_struct *p) 38602 { 38603 /* This marks field 'fld'. */ 38604 gt_pch_nx (tp->fld); 38605 } 38606 38607 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie) 38608 { 38609 /* For every field 'fld', call the given pointer operator. */ 38610 op (&(tp->fld), cookie); 38611 } 38612 38613 In general, each marker `M' should call `M' for every pointer field in 38614 the structure. Fields that are not allocated in GC or are not pointers 38615 must be ignored. 38616 38617 For embedded lists (e.g., structures with a `next' or `prev' pointer), 38618 the marker must follow the chain and mark every element in it. 38619 38620 Note that the rules for the pointer walker `gt_pch_nx (my_struct *, 38621 gt_pointer_operator, void *)' are slightly different. In this case, 38622 the operation `op' must be applied to the _address_ of every pointer 38623 field. 38624 38625 22.2.1 User-provided marking routines for template types 38626 -------------------------------------------------------- 38627 38628 When a template type `TP' is marked with `GTY', all instances of that 38629 type are considered user-provided types. This means that the 38630 individual instances of `TP' do not need to be marked with `GTY'. The 38631 user needs to provide template functions to mark all the fields of the 38632 type. 38633 38634 The following code snippets represent all the functions that need to 38635 be provided. Note that type `TP' may reference to more than one type. 38636 In these snippets, there is only one type `T', but there could be more. 38637 38638 template<typename T> 38639 void gt_ggc_mx (TP<T> *tp) 38640 { 38641 extern void gt_ggc_mx (T&); 38642 38643 /* This marks field 'fld' of type 'T'. */ 38644 gt_ggc_mx (tp->fld); 38645 } 38646 38647 template<typename T> 38648 void gt_pch_nx (TP<T> *tp) 38649 { 38650 extern void gt_pch_nx (T&); 38651 38652 /* This marks field 'fld' of type 'T'. */ 38653 gt_pch_nx (tp->fld); 38654 } 38655 38656 template<typename T> 38657 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie) 38658 { 38659 /* For every field 'fld' of 'tp' with type 'T *', call the given 38660 pointer operator. */ 38661 op (&(tp->fld), cookie); 38662 } 38663 38664 template<typename T> 38665 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie) 38666 { 38667 extern void gt_pch_nx (T *, gt_pointer_operator, void *); 38668 38669 /* For every field 'fld' of 'tp' with type 'T', call the pointer 38670 walker for all the fields of T. */ 38671 gt_pch_nx (&(tp->fld), op, cookie); 38672 } 38673 38674 Support for user-defined types is currently limited. The following 38675 restrictions apply: 38676 38677 1. Type `TP' and all the argument types `T' must be marked with `GTY'. 38678 38679 2. Type `TP' can only have type names in its argument list. 38680 38681 3. The pointer walker functions are different for `TP<T>' and `TP<T 38682 *>'. In the case of `TP<T>', references to `T' must be handled by 38683 calling `gt_pch_nx' (which will, in turn, walk all the pointers 38684 inside fields of `T'). In the case of `TP<T *>', references to `T 38685 *' must be handled by calling the `op' function on the address of 38686 the pointer (see the code snippets above). 38687 38688 38689 File: gccint.info, Node: GGC Roots, Next: Files, Prev: User GC, Up: Type Information 38690 38691 22.3 Marking Roots for the Garbage Collector 38692 ============================================ 38693 38694 In addition to keeping track of types, the type machinery also locates 38695 the global variables ("roots") that the garbage collector starts at. 38696 Roots must be declared using one of the following syntaxes: 38697 38698 * `extern GTY(([OPTIONS])) TYPE NAME;' 38699 38700 * `static GTY(([OPTIONS])) TYPE NAME;' 38701 The syntax 38702 * `GTY(([OPTIONS])) TYPE NAME;' 38703 is _not_ accepted. There should be an `extern' declaration of such a 38704 variable in a header somewhere--mark that, not the definition. Or, if 38705 the variable is only used in one file, make it `static'. 38706 38707 38708 File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 38709 38710 22.4 Source Files Containing Type Information 38711 ============================================= 38712 38713 Whenever you add `GTY' markers to a source file that previously had 38714 none, or create a new source file containing `GTY' markers, there are 38715 three things you need to do: 38716 38717 1. You need to add the file to the list of source files the type 38718 machinery scans. There are four cases: 38719 38720 a. For a back-end file, this is usually done automatically; if 38721 not, you should add it to `target_gtfiles' in the appropriate 38722 port's entries in `config.gcc'. 38723 38724 b. For files shared by all front ends, add the filename to the 38725 `GTFILES' variable in `Makefile.in'. 38726 38727 c. For files that are part of one front end, add the filename to 38728 the `gtfiles' variable defined in the appropriate 38729 `config-lang.in'. Headers should appear before non-headers 38730 in this list. 38731 38732 d. For files that are part of some but not all front ends, add 38733 the filename to the `gtfiles' variable of _all_ the front ends 38734 that use it. 38735 38736 2. If the file was a header file, you'll need to check that it's 38737 included in the right place to be visible to the generated files. 38738 For a back-end header file, this should be done automatically. 38739 For a front-end header file, it needs to be included by the same 38740 file that includes `gtype-LANG.h'. For other header files, it 38741 needs to be included in `gtype-desc.c', which is a generated file, 38742 so add it to `ifiles' in `open_base_file' in `gengtype.c'. 38743 38744 For source files that aren't header files, the machinery will 38745 generate a header file that should be included in the source file 38746 you just changed. The file will be called `gt-PATH.h' where PATH 38747 is the pathname relative to the `gcc' directory with slashes 38748 replaced by -, so for example the header file to be included in 38749 `cp/parser.c' is called `gt-cp-parser.c'. The generated header 38750 file should be included after everything else in the source file. 38751 Don't forget to mention this file as a dependency in the 38752 `Makefile'! 38753 38754 38755 For language frontends, there is another file that needs to be included 38756 somewhere. It will be called `gtype-LANG.h', where LANG is the name of 38757 the subdirectory the language is contained in. 38758 38759 Plugins can add additional root tables. Run the `gengtype' utility in 38760 plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 38761 with your plugin files PLUGIN*.C using `GTY' to generate the 38762 PLUGINOUT.H file. The GCC build tree is needed to be present in that 38763 mode. 38764 38765 38766 File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting, Prev: Files, Up: Type Information 38767 38768 22.5 How to invoke the garbage collector 38769 ======================================== 38770 38771 The GCC garbage collector GGC is only invoked explicitly. In contrast 38772 with many other garbage collectors, it is not implicitly invoked by 38773 allocation routines when a lot of memory has been consumed. So the only 38774 way to have GGC reclaim storage is to call the `ggc_collect' function 38775 explicitly. This call is an expensive operation, as it may have to 38776 scan the entire heap. Beware that local variables (on the GCC call 38777 stack) are not followed by such an invocation (as many other garbage 38778 collectors do): you should reference all your data from static or 38779 external `GTY'-ed variables, and it is advised to call `ggc_collect' 38780 with a shallow call stack. The GGC is an exact mark and sweep garbage 38781 collector (so it does not scan the call stack for pointers). In 38782 practice GCC passes don't often call `ggc_collect' themselves, because 38783 it is called by the pass manager between passes. 38784 38785 At the time of the `ggc_collect' call all pointers in the GC-marked 38786 structures must be valid or `NULL'. In practice this means that there 38787 should not be uninitialized pointer fields in the structures even if 38788 your code never reads or writes those fields at a particular instance. 38789 One way to ensure this is to use cleared versions of allocators unless 38790 all the fields are initialized manually immediately after allocation. 38791 38792 38793 File: gccint.info, Node: Troubleshooting, Prev: Invoking the garbage collector, Up: Type Information 38794 38795 22.6 Troubleshooting the garbage collector 38796 ========================================== 38797 38798 With the current garbage collector implementation, most issues should 38799 show up as GCC compilation errors. Some of the most commonly 38800 encountered issues are described below. 38801 38802 * Gengtype does not produce allocators for a `GTY'-marked type. 38803 Gengtype checks if there is at least one possible path from GC 38804 roots to at least one instance of each type before outputting 38805 allocators. If there is no such path, the `GTY' markers will be 38806 ignored and no allocators will be output. Solve this by making 38807 sure that there exists at least one such path. If creating it is 38808 unfeasible or raises a "code smell", consider if you really must 38809 use GC for allocating such type. 38810 38811 * Link-time errors about undefined `gt_ggc_r_foo_bar' and 38812 similarly-named symbols. Check if your `foo_bar' source file has 38813 `#include "gt-foo_bar.h"' as its very last line. 38814 38815 38816 38817 File: gccint.info, Node: Plugins, Next: LTO, Prev: Type Information, Up: Top 38818 38819 23 Plugins 38820 ********** 38821 38822 GCC plugin is a loadable module that provides extra features to the 38823 compiler, which they can further pass around as a shareable module. 38824 38825 GCC plugins provide developers with a rich subset of the GCC API to 38826 allow them to extend GCC as they see fit. Whether it is writing an 38827 additional optimization pass, transforming code, or analyzing 38828 information, plugins can be quite useful. 38829 38830 * Menu: 38831 38832 * Plugins loading:: How can we load plugins. 38833 * Plugin API:: The APIs for plugins. 38834 * Plugins pass:: How a plugin interact with the pass manager. 38835 * Plugins GC:: How a plugin Interact with GCC Garbage Collector. 38836 * Plugins description:: Giving information about a plugin itself. 38837 * Plugins attr:: Registering custom attributes or pragmas. 38838 * Plugins recording:: Recording information about pass execution. 38839 * Plugins gate:: Controlling which passes are being run. 38840 * Plugins tracking:: Keeping track of available passes. 38841 * Plugins building:: How can we build a plugin. 38842 38843 38844 File: gccint.info, Node: Plugins loading, Next: Plugin API, Up: Plugins 38845 38846 23.1 Loading Plugins 38847 ==================== 38848 38849 Plugins are supported on platforms that support `-ldl -rdynamic'. They 38850 are loaded by the compiler using `dlopen' and invoked at pre-determined 38851 locations in the compilation process. 38852 38853 Plugins are loaded with 38854 38855 `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-KEY1[=VALUE1]' 38856 38857 The plugin arguments are parsed by GCC and passed to respective 38858 plugins as key-value pairs. Multiple plugins can be invoked by 38859 specifying multiple `-fplugin' arguments. 38860 38861 A plugin can be simply given by its short name (no dots or slashes). 38862 When simply passing `-fplugin=NAME', the plugin is loaded from the 38863 `plugin' directory, so `-fplugin=NAME' is the same as `-fplugin=`gcc 38864 -print-file-name=plugin`/NAME.so', using backquote shell syntax to 38865 query the `plugin' directory. 38866 38867 38868 File: gccint.info, Node: Plugin API, Next: Plugins pass, Prev: Plugins loading, Up: Plugins 38869 38870 23.2 Plugin API 38871 =============== 38872 38873 Plugins are activated by the compiler at specific events as defined in 38874 `gcc-plugin.h'. For each event of interest, the plugin should call 38875 `register_callback' specifying the name of the event and address of the 38876 callback function that will handle that event. 38877 38878 The header `gcc-plugin.h' must be the first gcc header to be included. 38879 38880 23.2.1 Plugin license check 38881 --------------------------- 38882 38883 Every plugin should define the global symbol `plugin_is_GPL_compatible' 38884 to assert that it has been licensed under a GPL-compatible license. If 38885 this symbol does not exist, the compiler will emit a fatal error and 38886 exit with the error message: 38887 38888 fatal error: plugin NAME is not licensed under a GPL-compatible license 38889 NAME: undefined symbol: plugin_is_GPL_compatible 38890 compilation terminated 38891 38892 The declared type of the symbol should be int, to match a forward 38893 declaration in `gcc-plugin.h' that suppresses C++ mangling. It does 38894 not need to be in any allocated section, though. The compiler merely 38895 asserts that the symbol exists in the global scope. Something like 38896 this is enough: 38897 38898 int plugin_is_GPL_compatible; 38899 38900 23.2.2 Plugin initialization 38901 ---------------------------- 38902 38903 Every plugin should export a function called `plugin_init' that is 38904 called right after the plugin is loaded. This function is responsible 38905 for registering all the callbacks required by the plugin and do any 38906 other required initialization. 38907 38908 This function is called from `compile_file' right before invoking the 38909 parser. The arguments to `plugin_init' are: 38910 38911 * `plugin_info': Plugin invocation information. 38912 38913 * `version': GCC version. 38914 38915 The `plugin_info' struct is defined as follows: 38916 38917 struct plugin_name_args 38918 { 38919 char *base_name; /* Short name of the plugin 38920 (filename without .so suffix). */ 38921 const char *full_name; /* Path to the plugin as specified with 38922 -fplugin=. */ 38923 int argc; /* Number of arguments specified with 38924 -fplugin-arg-.... */ 38925 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 38926 const char *version; /* Version string provided by plugin. */ 38927 const char *help; /* Help string provided by plugin. */ 38928 } 38929 38930 If initialization fails, `plugin_init' must return a non-zero value. 38931 Otherwise, it should return 0. 38932 38933 The version of the GCC compiler loading the plugin is described by the 38934 following structure: 38935 38936 struct plugin_gcc_version 38937 { 38938 const char *basever; 38939 const char *datestamp; 38940 const char *devphase; 38941 const char *revision; 38942 const char *configuration_arguments; 38943 }; 38944 38945 The function `plugin_default_version_check' takes two pointers to such 38946 structure and compare them field by field. It can be used by the 38947 plugin's `plugin_init' function. 38948 38949 The version of GCC used to compile the plugin can be found in the 38950 symbol `gcc_version' defined in the header `plugin-version.h'. The 38951 recommended version check to perform looks like 38952 38953 #include "plugin-version.h" 38954 ... 38955 38956 int 38957 plugin_init (struct plugin_name_args *plugin_info, 38958 struct plugin_gcc_version *version) 38959 { 38960 if (!plugin_default_version_check (version, &gcc_version)) 38961 return 1; 38962 38963 } 38964 38965 but you can also check the individual fields if you want a less strict 38966 check. 38967 38968 23.2.3 Plugin callbacks 38969 ----------------------- 38970 38971 Callback functions have the following prototype: 38972 38973 /* The prototype for a plugin callback function. 38974 gcc_data - event-specific data provided by GCC 38975 user_data - plugin-specific data provided by the plug-in. */ 38976 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 38977 38978 Callbacks can be invoked at the following pre-determined events: 38979 38980 enum plugin_event 38981 { 38982 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 38983 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 38984 PLUGIN_FINISH_DECL, /* After finishing parsing a declaration. */ 38985 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 38986 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 38987 PLUGIN_FINISH, /* Called before GCC exits. */ 38988 PLUGIN_INFO, /* Information about the plugin. */ 38989 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 38990 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 38991 PLUGIN_GGC_END, /* Called at end of GGC. */ 38992 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 38993 PLUGIN_REGISTER_GGC_CACHES, /* Register an extra GGC cache table. */ 38994 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 38995 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 38996 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 38997 /* Called before first pass from all_passes. */ 38998 PLUGIN_ALL_PASSES_START, 38999 /* Called after last pass from all_passes. */ 39000 PLUGIN_ALL_PASSES_END, 39001 /* Called before first ipa pass. */ 39002 PLUGIN_ALL_IPA_PASSES_START, 39003 /* Called after last ipa pass. */ 39004 PLUGIN_ALL_IPA_PASSES_END, 39005 /* Allows to override pass gate decision for current_pass. */ 39006 PLUGIN_OVERRIDE_GATE, 39007 /* Called before executing a pass. */ 39008 PLUGIN_PASS_EXECUTION, 39009 /* Called before executing subpasses of a GIMPLE_PASS in 39010 execute_ipa_pass_list. */ 39011 PLUGIN_EARLY_GIMPLE_PASSES_START, 39012 /* Called after executing subpasses of a GIMPLE_PASS in 39013 execute_ipa_pass_list. */ 39014 PLUGIN_EARLY_GIMPLE_PASSES_END, 39015 /* Called when a pass is first instantiated. */ 39016 PLUGIN_NEW_PASS, 39017 39018 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 39019 array. */ 39020 }; 39021 39022 In addition, plugins can also look up the enumerator of a named event, 39023 and / or generate new events dynamically, by calling the function 39024 `get_named_event_id'. 39025 39026 To register a callback, the plugin calls `register_callback' with the 39027 arguments: 39028 39029 * `char *name': Plugin name. 39030 39031 * `int event': The event code. 39032 39033 * `plugin_callback_func callback': The function that handles `event'. 39034 39035 * `void *user_data': Pointer to plugin-specific data. 39036 39037 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, 39038 PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events 39039 the `callback' should be null, and the `user_data' is specific. 39040 39041 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as 39042 data from GCC), plugins may register their own pragmas using functions 39043 like `c_register_pragma' or `c_register_pragma_with_expansion'. 39044 39045 39046 File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, Up: Plugins 39047 39048 23.3 Interacting with the pass manager 39049 ====================================== 39050 39051 There needs to be a way to add/reorder/remove passes dynamically. This 39052 is useful for both analysis plugins (plugging in after a certain pass 39053 such as CFG or an IPA pass) and optimization plugins. 39054 39055 Basic support for inserting new passes or replacing existing passes is 39056 provided. A plugin registers a new pass with GCC by calling 39057 `register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a 39058 pointer to a `struct register_pass_info' object defined as follows 39059 39060 enum pass_positioning_ops 39061 { 39062 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 39063 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 39064 PASS_POS_REPLACE // Replace the reference pass. 39065 }; 39066 39067 struct register_pass_info 39068 { 39069 struct opt_pass *pass; /* New pass provided by the plugin. */ 39070 const char *reference_pass_name; /* Name of the reference pass for hooking 39071 up the new pass. */ 39072 int ref_pass_instance_number; /* Insert the pass at the specified 39073 instance number of the reference pass. */ 39074 /* Do it for every instance if it is 0. */ 39075 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 39076 }; 39077 39078 39079 /* Sample plugin code that registers a new pass. */ 39080 int 39081 plugin_init (struct plugin_name_args *plugin_info, 39082 struct plugin_gcc_version *version) 39083 { 39084 struct register_pass_info pass_info; 39085 39086 ... 39087 39088 /* Code to fill in the pass_info object with new pass information. */ 39089 39090 ... 39091 39092 /* Register the new pass. */ 39093 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 39094 39095 ... 39096 } 39097 39098 39099 File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins pass, Up: Plugins 39100 39101 23.4 Interacting with the GCC Garbage Collector 39102 =============================================== 39103 39104 Some plugins may want to be informed when GGC (the GCC Garbage 39105 Collector) is running. They can register callbacks for the 39106 `PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback 39107 is called with a null `gcc_data') to be notified of the start or end of 39108 the GCC garbage collection. 39109 39110 Some plugins may need to have GGC mark additional data. This can be 39111 done by registering a callback (called with a null `gcc_data') for the 39112 `PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark' 39113 routine, preferably through the `ggc_mark' macro (and conversely, these 39114 routines should usually not be used in plugins outside of the 39115 `PLUGIN_GGC_MARKING' event). 39116 39117 Some plugins may need to add extra GGC root tables, e.g. to handle 39118 their own `GTY'-ed data. This can be done with the 39119 `PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 39120 extra root table (of type `struct ggc_root_tab*') as `user_data'. 39121 Plugins that want to use the `if_marked' hash table option can add the 39122 extra GGC cache tables generated by `gengtype' using the 39123 `PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the 39124 extra cache table (of type `struct ggc_cache_tab*') as `user_data'. 39125 Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 39126 generates these extra root tables. 39127 39128 You should understand the details of memory management inside GCC 39129 before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or 39130 `PLUGIN_REGISTER_GGC_CACHES'. 39131 39132 39133 File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugins GC, Up: Plugins 39134 39135 23.5 Giving information about a plugin 39136 ====================================== 39137 39138 A plugin should give some information to the user about itself. This 39139 uses the following structure: 39140 39141 struct plugin_info 39142 { 39143 const char *version; 39144 const char *help; 39145 }; 39146 39147 Such a structure is passed as the `user_data' by the plugin's init 39148 routine using `register_callback' with the `PLUGIN_INFO' pseudo-event 39149 and a null callback. 39150 39151 39152 File: gccint.info, Node: Plugins attr, Next: Plugins recording, Prev: Plugins description, Up: Plugins 39153 39154 23.6 Registering custom attributes or pragmas 39155 ============================================= 39156 39157 For analysis (or other) purposes it is useful to be able to add custom 39158 attributes or pragmas. 39159 39160 The `PLUGIN_ATTRIBUTES' callback is called during attribute 39161 registration. Use the `register_attribute' function to register custom 39162 attributes. 39163 39164 /* Attribute handler callback */ 39165 static tree 39166 handle_user_attribute (tree *node, tree name, tree args, 39167 int flags, bool *no_add_attrs) 39168 { 39169 return NULL_TREE; 39170 } 39171 39172 /* Attribute definition */ 39173 static struct attribute_spec user_attr = 39174 { "user", 1, 1, false, false, false, handle_user_attribute, false }; 39175 39176 /* Plugin callback called during attribute registration. 39177 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 39178 */ 39179 static void 39180 register_attributes (void *event_data, void *data) 39181 { 39182 warning (0, G_("Callback to register attributes")); 39183 register_attribute (&user_attr); 39184 } 39185 39186 The `PLUGIN_PRAGMAS' callback is called during pragmas registration. 39187 Use the `c_register_pragma' or `c_register_pragma_with_expansion' 39188 functions to register custom pragmas. 39189 39190 /* Plugin callback called during pragmas registration. Registered with 39191 register_callback (plugin_name, PLUGIN_PRAGMAS, 39192 register_my_pragma, NULL); 39193 */ 39194 static void 39195 register_my_pragma (void *event_data, void *data) 39196 { 39197 warning (0, G_("Callback to register pragmas")); 39198 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 39199 } 39200 39201 It is suggested to pass `"GCCPLUGIN"' (or a short name identifying 39202 your plugin) as the "space" argument of your pragma. 39203 39204 39205 File: gccint.info, Node: Plugins recording, Next: Plugins gate, Prev: Plugins attr, Up: Plugins 39206 39207 23.7 Recording information about pass execution 39208 =============================================== 39209 39210 The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 39211 (the same as current_pass) as `gcc_data' to the callback. You can also 39212 inspect cfun to find out about which function this pass is executed for. 39213 Note that this event will only be invoked if the gate check (if 39214 applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 39215 other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END', 39216 `PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END', 39217 `PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 39218 `PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 39219 plugin(s) in order to get context for the pass execution. 39220 39221 39222 File: gccint.info, Node: Plugins gate, Next: Plugins tracking, Prev: Plugins recording, Up: Plugins 39223 39224 23.8 Controlling which passes are being run 39225 =========================================== 39226 39227 After the original gate function for a pass is called, its result - the 39228 gate status - is stored as an integer. Then the event 39229 `PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 39230 the `gcc_data' parameter to the callback function. A nonzero value of 39231 the gate status means that the pass is to be executed. You can both 39232 read and write the gate status via the passed pointer. 39233 39234 39235 File: gccint.info, Node: Plugins tracking, Next: Plugins building, Prev: Plugins gate, Up: Plugins 39236 39237 23.9 Keeping track of available passes 39238 ====================================== 39239 39240 When your plugin is loaded, you can inspect the various pass lists to 39241 determine what passes are available. However, other plugins might add 39242 new passes. Also, future changes to GCC might cause generic passes to 39243 be added after plugin loading. When a pass is first added to one of 39244 the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the 39245 callback parameter `gcc_data' pointing to the new pass. 39246 39247 39248 File: gccint.info, Node: Plugins building, Prev: Plugins tracking, Up: Plugins 39249 39250 23.10 Building GCC plugins 39251 ========================== 39252 39253 If plugins are enabled, GCC installs the headers needed to build a 39254 plugin (somewhere in the installation tree, e.g. under `/usr/local'). 39255 In particular a `plugin/include' directory is installed, containing all 39256 the header files needed to build plugins. 39257 39258 On most systems, you can query this `plugin' directory by invoking 39259 `gcc -print-file-name=plugin' (replace if needed `gcc' with the 39260 appropriate program path). 39261 39262 Inside plugins, this `plugin' directory name can be queried by calling 39263 `default_plugin_dir_name ()'. 39264 39265 Plugins may know, when they are compiled, the GCC version for which 39266 `plugin-version.h' is provided. The constant macros 39267 `GCCPLUGIN_VERSION_MAJOR', `GCCPLUGIN_VERSION_MINOR', 39268 `GCCPLUGIN_VERSION_PATCHLEVEL', `GCCPLUGIN_VERSION' are integer 39269 numbers, so a plugin could ensure it is built for GCC 4.7 with 39270 #if GCCPLUGIN_VERSION != 4007 39271 #error this GCC plugin is for GCC 4.7 39272 #endif 39273 39274 The following GNU Makefile excerpt shows how to build a simple plugin: 39275 39276 GCC=gcc 39277 PLUGIN_SOURCE_FILES= plugin1.c plugin2.c 39278 PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES)) 39279 GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin) 39280 CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2 39281 39282 plugin.so: $(PLUGIN_OBJECT_FILES) 39283 $(GCC) -shared $^ -o $@ 39284 39285 A single source file plugin may be built with `gcc -I`gcc 39286 -print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o 39287 plugin.so', using backquote shell syntax to query the `plugin' 39288 directory. 39289 39290 When a plugin needs to use `gengtype', be sure that both `gengtype' 39291 and `gtype.state' have the same version as the GCC for which the plugin 39292 is built. 39293 39294 39295 File: gccint.info, Node: LTO, Next: Funding, Prev: Plugins, Up: Top 39296 39297 24 Link Time Optimization 39298 ************************* 39299 39300 Link Time Optimization (LTO) gives GCC the capability of dumping its 39301 internal representation (GIMPLE) to disk, so that all the different 39302 compilation units that make up a single executable can be optimized as 39303 a single module. This expands the scope of inter-procedural 39304 optimizations to encompass the whole program (or, rather, everything 39305 that is visible at link time). 39306 39307 * Menu: 39308 39309 * LTO Overview:: Overview of LTO. 39310 * LTO object file layout:: LTO file sections in ELF. 39311 * IPA:: Using summary information in IPA passes. 39312 * WHOPR:: Whole program assumptions, 39313 linker plugin and symbol visibilities. 39314 * Internal flags:: Internal flags controlling `lto1'. 39315 39316 39317 File: gccint.info, Node: LTO Overview, Next: LTO object file layout, Up: LTO 39318 39319 24.1 Design Overview 39320 ==================== 39321 39322 Link time optimization is implemented as a GCC front end for a bytecode 39323 representation of GIMPLE that is emitted in special sections of `.o' 39324 files. Currently, LTO support is enabled in most ELF-based systems, as 39325 well as darwin, cygwin and mingw systems. 39326 39327 Since GIMPLE bytecode is saved alongside final object code, object 39328 files generated with LTO support are larger than regular object files. 39329 This "fat" object format makes it easy to integrate LTO into existing 39330 build systems, as one can, for instance, produce archives of the files. 39331 Additionally, one might be able to ship one set of fat objects which 39332 could be used both for development and the production of optimized 39333 builds. A, perhaps surprising, side effect of this feature is that any 39334 mistake in the toolchain that leads to LTO information not being used 39335 (e.g. an older `libtool' calling `ld' directly). This is both an 39336 advantage, as the system is more robust, and a disadvantage, as the 39337 user is not informed that the optimization has been disabled. 39338 39339 The current implementation only produces "fat" objects, effectively 39340 doubling compilation time and increasing file sizes up to 5x the 39341 original size. This hides the problem that some tools, such as `ar' 39342 and `nm', need to understand symbol tables of LTO sections. These 39343 tools were extended to use the plugin infrastructure, and with these 39344 problems solved, GCC will also support "slim" objects consisting of the 39345 intermediate code alone. 39346 39347 At the highest level, LTO splits the compiler in two. The first half 39348 (the "writer") produces a streaming representation of all the internal 39349 data structures needed to optimize and generate code. This includes 39350 declarations, types, the callgraph and the GIMPLE representation of 39351 function bodies. 39352 39353 When `-flto' is given during compilation of a source file, the pass 39354 manager executes all the passes in `all_lto_gen_passes'. Currently, 39355 this phase is composed of two IPA passes: 39356 39357 * `pass_ipa_lto_gimple_out' This pass executes the function 39358 `lto_output' in `lto-streamer-out.c', which traverses the call 39359 graph encoding every reachable declaration, type and function. 39360 This generates a memory representation of all the file sections 39361 described below. 39362 39363 * `pass_ipa_lto_finish_out' This pass executes the function 39364 `produce_asm_for_decls' in `lto-streamer-out.c', which takes the 39365 memory image built in the previous pass and encodes it in the 39366 corresponding ELF file sections. 39367 39368 The second half of LTO support is the "reader". This is implemented 39369 as the GCC front end `lto1' in `lto/lto.c'. When `collect2' detects a 39370 link set of `.o'/`.a' files with LTO information and the `-flto' is 39371 enabled, it invokes `lto1' which reads the set of files and aggregates 39372 them into a single translation unit for optimization. The main entry 39373 point for the reader is `lto/lto.c':`lto_main'. 39374 39375 24.1.1 LTO modes of operation 39376 ----------------------------- 39377 39378 One of the main goals of the GCC link-time infrastructure was to allow 39379 effective compilation of large programs. For this reason GCC 39380 implements two link-time compilation modes. 39381 39382 1. _LTO mode_, in which the whole program is read into the compiler 39383 at link-time and optimized in a similar way as if it were a single 39384 source-level compilation unit. 39385 39386 2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs 39387 and/or a distributed compilation environment to quickly link large 39388 applications. WHOPR stands for WHOle Program optimizeR (not to be 39389 confused with the semantics of `-fwhole-program'). It partitions 39390 the aggregated callgraph from many different `.o' files and 39391 distributes the compilation of the sub-graphs to different CPUs. 39392 39393 Note that distributed compilation is not implemented yet, but since 39394 the parallelism is facilitated via generating a `Makefile', it 39395 would be easy to implement. 39396 39397 WHOPR splits LTO into three main stages: 39398 1. Local generation (LGEN) This stage executes in parallel. Every 39399 file in the program is compiled into the intermediate language and 39400 packaged together with the local call-graph and summary 39401 information. This stage is the same for both the LTO and WHOPR 39402 compilation mode. 39403 39404 2. Whole Program Analysis (WPA) WPA is performed sequentially. The 39405 global call-graph is generated, and a global analysis procedure 39406 makes transformation decisions. The global call-graph is 39407 partitioned to facilitate parallel optimization during phase 3. 39408 The results of the WPA stage are stored into new object files 39409 which contain the partitions of program expressed in the 39410 intermediate language and the optimization decisions. 39411 39412 3. Local transformations (LTRANS) This stage executes in parallel. 39413 All the decisions made during phase 2 are implemented locally in 39414 each partitioned object file, and the final object code is 39415 generated. Optimizations which cannot be decided efficiently 39416 during the phase 2 may be performed on the local call-graph 39417 partitions. 39418 39419 WHOPR can be seen as an extension of the usual LTO mode of 39420 compilation. In LTO, WPA and LTRANS are executed within a single 39421 execution of the compiler, after the whole program has been read into 39422 memory. 39423 39424 When compiling in WHOPR mode, the callgraph is partitioned during the 39425 WPA stage. The whole program is split into a given number of 39426 partitions of roughly the same size. The compiler tries to minimize 39427 the number of references which cross partition boundaries. The main 39428 advantage of WHOPR is to allow the parallel execution of LTRANS stages, 39429 which are the most time-consuming part of the compilation process. 39430 Additionally, it avoids the need to load the whole program into memory. 39431 39432 39433 File: gccint.info, Node: LTO object file layout, Next: IPA, Prev: LTO Overview, Up: LTO 39434 39435 24.2 LTO file sections 39436 ====================== 39437 39438 LTO information is stored in several ELF sections inside object files. 39439 Data structures and enum codes for sections are defined in 39440 `lto-streamer.h'. 39441 39442 These sections are emitted from `lto-streamer-out.c' and mapped in all 39443 at once from `lto/lto.c':`lto_file_read'. The individual functions 39444 dealing with the reading/writing of each section are described below. 39445 39446 * Command line options (`.gnu.lto_.opts') 39447 39448 This section contains the command line options used to generate the 39449 object files. This is used at link time to determine the 39450 optimization level and other settings when they are not explicitly 39451 specified at the linker command line. 39452 39453 Currently, GCC does not support combining LTO object files compiled 39454 with different set of the command line options into a single 39455 binary. At link time, the options given on the command line and 39456 the options saved on all the files in a link-time set are applied 39457 globally. No attempt is made at validating the combination of 39458 flags (other than the usual validation done by option processing). 39459 This is implemented in `lto/lto.c':`lto_read_all_file_options'. 39460 39461 * Symbol table (`.gnu.lto_.symtab') 39462 39463 This table replaces the ELF symbol table for functions and 39464 variables represented in the LTO IL. Symbols used and exported by 39465 the optimized assembly code of "fat" objects might not match the 39466 ones used and exported by the intermediate code. This table is 39467 necessary because the intermediate code is less optimized and thus 39468 requires a separate symbol table. 39469 39470 Additionally, the binary code in the "fat" object will lack a call 39471 to a function, since the call was optimized out at compilation time 39472 after the intermediate language was streamed out. In some special 39473 cases, the same optimization may not happen during link-time 39474 optimization. This would lead to an undefined symbol if only one 39475 symbol table was used. 39476 39477 The symbol table is emitted in 39478 `lto-streamer-out.c':`produce_symtab'. 39479 39480 * Global declarations and types (`.gnu.lto_.decls') 39481 39482 This section contains an intermediate language dump of all 39483 declarations and types required to represent the callgraph, static 39484 variables and top-level debug info. 39485 39486 The contents of this section are emitted in 39487 `lto-streamer-out.c':`produce_asm_for_decls'. Types and symbols 39488 are emitted in a topological order that preserves the sharing of 39489 pointers when the file is read back in 39490 (`lto.c':`read_cgraph_and_symbols'). 39491 39492 * The callgraph (`.gnu.lto_.cgraph') 39493 39494 This section contains the basic data structure used by the GCC 39495 inter-procedural optimization infrastructure. This section stores 39496 an annotated multi-graph which represents the functions and call 39497 sites as well as the variables, aliases and top-level `asm' 39498 statements. 39499 39500 This section is emitted in `lto-streamer-out.c':`output_cgraph' 39501 and read in `lto-cgraph.c':`input_cgraph'. 39502 39503 * IPA references (`.gnu.lto_.refs') 39504 39505 This section contains references between function and static 39506 variables. It is emitted by `lto-cgraph.c':`output_refs' and read 39507 by `lto-cgraph.c':`input_refs'. 39508 39509 * Function bodies (`.gnu.lto_.function_body.<name>') 39510 39511 This section contains function bodies in the intermediate language 39512 representation. Every function body is in a separate section to 39513 allow copying of the section independently to different object 39514 files or reading the function on demand. 39515 39516 Functions are emitted in `lto-streamer-out.c':`output_function' 39517 and read in `lto-streamer-in.c':`input_function'. 39518 39519 * Static variable initializers (`.gnu.lto_.vars') 39520 39521 This section contains all the symbols in the global variable pool. 39522 It is emitted by `lto-cgraph.c':`output_varpool' and read in 39523 `lto-cgraph.c':`input_cgraph'. 39524 39525 * Summaries and optimization summaries used by IPA passes 39526 (`.gnu.lto_.<xxx>', where `<xxx>' is one of `jmpfuncs', 39527 `pureconst' or `reference') 39528 39529 These sections are used by IPA passes that need to emit summary 39530 information during LTO generation to be read and aggregated at 39531 link time. Each pass is responsible for implementing two pass 39532 manager hooks: one for writing the summary and another for reading 39533 it in. The format of these sections is entirely up to each 39534 individual pass. The only requirement is that the writer and 39535 reader hooks agree on the format. 39536 39537 39538 File: gccint.info, Node: IPA, Next: WHOPR, Prev: LTO object file layout, Up: LTO 39539 39540 24.3 Using summary information in IPA passes 39541 ============================================ 39542 39543 Programs are represented internally as a _callgraph_ (a multi-graph 39544 where nodes are functions and edges are call sites) and a _varpool_ (a 39545 list of static and external variables in the program). 39546 39547 The inter-procedural optimization is organized as a sequence of 39548 individual passes, which operate on the callgraph and the varpool. To 39549 make the implementation of WHOPR possible, every inter-procedural 39550 optimization pass is split into several stages that are executed at 39551 different times during WHOPR compilation: 39552 39553 * LGEN time 39554 1. _Generate summary_ (`generate_summary' in `struct 39555 ipa_opt_pass_d'). This stage analyzes every function body 39556 and variable initializer is examined and stores relevant 39557 information into a pass-specific data structure. 39558 39559 2. _Write summary_ (`write_summary' in `struct ipa_opt_pass_d'). 39560 This stage writes all the pass-specific information generated 39561 by `generate_summary'. Summaries go into their own 39562 `LTO_section_*' sections that have to be declared in 39563 `lto-streamer.h':`enum lto_section_type'. A new section is 39564 created by calling `create_output_block' and data can be 39565 written using the `lto_output_*' routines. 39566 39567 * WPA time 39568 1. _Read summary_ (`read_summary' in `struct ipa_opt_pass_d'). 39569 This stage reads all the pass-specific information in exactly 39570 the same order that it was written by `write_summary'. 39571 39572 2. _Execute_ (`execute' in `struct opt_pass'). This performs 39573 inter-procedural propagation. This must be done without 39574 actual access to the individual function bodies or variable 39575 initializers. Typically, this results in a transitive 39576 closure operation over the summary information of all the 39577 nodes in the callgraph. 39578 39579 3. _Write optimization summary_ (`write_optimization_summary' in 39580 `struct ipa_opt_pass_d'). This writes the result of the 39581 inter-procedural propagation into the object file. This can 39582 use the same data structures and helper routines used in 39583 `write_summary'. 39584 39585 * LTRANS time 39586 1. _Read optimization summary_ (`read_optimization_summary' in 39587 `struct ipa_opt_pass_d'). The counterpart to 39588 `write_optimization_summary'. This reads the interprocedural 39589 optimization decisions in exactly the same format emitted by 39590 `write_optimization_summary'. 39591 39592 2. _Transform_ (`function_transform' and `variable_transform' in 39593 `struct ipa_opt_pass_d'). The actual function bodies and 39594 variable initializers are updated based on the information 39595 passed down from the _Execute_ stage. 39596 39597 The implementation of the inter-procedural passes are shared between 39598 LTO, WHOPR and classic non-LTO compilation. 39599 39600 * During the traditional file-by-file mode every pass executes its 39601 own _Generate summary_, _Execute_, and _Transform_ stages within 39602 the single execution context of the compiler. 39603 39604 * In LTO compilation mode, every pass uses _Generate summary_ and 39605 _Write summary_ stages at compilation time, while the _Read 39606 summary_, _Execute_, and _Transform_ stages are executed at link 39607 time. 39608 39609 * In WHOPR mode all stages are used. 39610 39611 To simplify development, the GCC pass manager differentiates between 39612 normal inter-procedural passes and small inter-procedural passes. A 39613 _small inter-procedural pass_ (`SIMPLE_IPA_PASS') is a pass that does 39614 everything at once and thus it can not be executed during WPA in WHOPR 39615 mode. It defines only the _Execute_ stage and during this stage it 39616 accesses and modifies the function bodies. Such passes are useful for 39617 optimization at LGEN or LTRANS time and are used, for example, to 39618 implement early optimization before writing object files. The simple 39619 inter-procedural passes can also be used for easier prototyping and 39620 development of a new inter-procedural pass. 39621 39622 24.3.1 Virtual clones 39623 --------------------- 39624 39625 One of the main challenges of introducing the WHOPR compilation mode 39626 was addressing the interactions between optimization passes. In LTO 39627 compilation mode, the passes are executed in a sequence, each of which 39628 consists of analysis (or _Generate summary_), propagation (or 39629 _Execute_) and _Transform_ stages. Once the work of one pass is 39630 finished, the next pass sees the updated program representation and can 39631 execute. This makes the individual passes dependent on each other. 39632 39633 In WHOPR mode all passes first execute their _Generate summary_ stage. 39634 Then summary writing marks the end of the LGEN stage. At WPA time, the 39635 summaries are read back into memory and all passes run the _Execute_ 39636 stage. Optimization summaries are streamed and sent to LTRANS, where 39637 all the passes execute the _Transform_ stage. 39638 39639 Most optimization passes split naturally into analysis, propagation 39640 and transformation stages. But some do not. The main problem arises 39641 when one pass performs changes and the following pass gets confused by 39642 seeing different callgraphs between the _Transform_ stage and the 39643 _Generate summary_ or _Execute_ stage. This means that the passes are 39644 required to communicate their decisions with each other. 39645 39646 To facilitate this communication, the GCC callgraph infrastructure 39647 implements _virtual clones_, a method of representing the changes 39648 performed by the optimization passes in the callgraph without needing 39649 to update function bodies. 39650 39651 A _virtual clone_ in the callgraph is a function that has no 39652 associated body, just a description of how to create its body based on 39653 a different function (which itself may be a virtual clone). 39654 39655 The description of function modifications includes adjustments to the 39656 function's signature (which allows, for example, removing or adding 39657 function arguments), substitutions to perform on the function body, 39658 and, for inlined functions, a pointer to the function that it will be 39659 inlined into. 39660 39661 It is also possible to redirect any edge of the callgraph from a 39662 function to its virtual clone. This implies updating of the call site 39663 to adjust for the new function signature. 39664 39665 Most of the transformations performed by inter-procedural 39666 optimizations can be represented via virtual clones. For instance, a 39667 constant propagation pass can produce a virtual clone of the function 39668 which replaces one of its arguments by a constant. The inliner can 39669 represent its decisions by producing a clone of a function whose body 39670 will be later integrated into a given function. 39671 39672 Using _virtual clones_, the program can be easily updated during the 39673 _Execute_ stage, solving most of pass interactions problems that would 39674 otherwise occur during _Transform_. 39675 39676 Virtual clones are later materialized in the LTRANS stage and turned 39677 into real functions. Passes executed after the virtual clone were 39678 introduced also perform their _Transform_ stage on new functions, so 39679 for a pass there is no significant difference between operating on a 39680 real function or a virtual clone introduced before its _Execute_ stage. 39681 39682 Optimization passes then work on virtual clones introduced before 39683 their _Execute_ stage as if they were real functions. The only 39684 difference is that clones are not visible during the _Generate Summary_ 39685 stage. 39686 39687 To keep function summaries updated, the callgraph interface allows an 39688 optimizer to register a callback that is called every time a new clone 39689 is introduced as well as when the actual function or variable is 39690 generated or when a function or variable is removed. These hooks are 39691 registered in the _Generate summary_ stage and allow the pass to keep 39692 its information intact until the _Execute_ stage. The same hooks can 39693 also be registered during the _Execute_ stage to keep the optimization 39694 summaries updated for the _Transform_ stage. 39695 39696 24.3.2 IPA references 39697 --------------------- 39698 39699 GCC represents IPA references in the callgraph. For a function or 39700 variable `A', the _IPA reference_ is a list of all locations where the 39701 address of `A' is taken and, when `A' is a variable, a list of all 39702 direct stores and reads to/from `A'. References represent an oriented 39703 multi-graph on the union of nodes of the callgraph and the varpool. See 39704 `ipa-reference.c':`ipa_reference_write_optimization_summary' and 39705 `ipa-reference.c':`ipa_reference_read_optimization_summary' for details. 39706 39707 24.3.3 Jump functions 39708 --------------------- 39709 39710 Suppose that an optimization pass sees a function `A' and it knows the 39711 values of (some of) its arguments. The _jump function_ describes the 39712 value of a parameter of a given function call in function `A' based on 39713 this knowledge. 39714 39715 Jump functions are used by several optimizations, such as the 39716 inter-procedural constant propagation pass and the devirtualization 39717 pass. The inliner also uses jump functions to perform inlining of 39718 callbacks. 39719 39720 39721 File: gccint.info, Node: WHOPR, Next: Internal flags, Prev: IPA, Up: LTO 39722 39723 24.4 Whole program assumptions, linker plugin and symbol visibilities 39724 ===================================================================== 39725 39726 Link-time optimization gives relatively minor benefits when used alone. 39727 The problem is that propagation of inter-procedural information does 39728 not work well across functions and variables that are called or 39729 referenced by other compilation units (such as from a dynamically 39730 linked library). We say that such functions and variables are 39731 _externally visible_. 39732 39733 To make the situation even more difficult, many applications organize 39734 themselves as a set of shared libraries, and the default ELF visibility 39735 rules allow one to overwrite any externally visible symbol with a 39736 different symbol at runtime. This basically disables any optimizations 39737 across such functions and variables, because the compiler cannot be 39738 sure that the function body it is seeing is the same function body that 39739 will be used at runtime. Any function or variable not declared 39740 `static' in the sources degrades the quality of inter-procedural 39741 optimization. 39742 39743 To avoid this problem the compiler must assume that it sees the whole 39744 program when doing link-time optimization. Strictly speaking, the 39745 whole program is rarely visible even at link-time. Standard system 39746 libraries are usually linked dynamically or not provided with the 39747 link-time information. In GCC, the whole program option 39748 (`-fwhole-program') asserts that every function and variable defined in 39749 the current compilation unit is static, except for function `main' 39750 (note: at link time, the current unit is the union of all objects 39751 compiled with LTO). Since some functions and variables need to be 39752 referenced externally, for example by another DSO or from an assembler 39753 file, GCC also provides the function and variable attribute 39754 `externally_visible' which can be used to disable the effect of 39755 `-fwhole-program' on a specific symbol. 39756 39757 The whole program mode assumptions are slightly more complex in C++, 39758 where inline functions in headers are put into _COMDAT_ sections. 39759 COMDAT function and variables can be defined by multiple object files 39760 and their bodies are unified at link-time and dynamic link-time. 39761 COMDAT functions are changed to local only when their address is not 39762 taken and thus un-sharing them with a library is not harmful. COMDAT 39763 variables always remain externally visible, however for readonly 39764 variables it is assumed that their initializers cannot be overwritten 39765 by a different value. 39766 39767 GCC provides the function and variable attribute `visibility' that can 39768 be used to specify the visibility of externally visible symbols (or 39769 alternatively an `-fdefault-visibility' command line option). ELF 39770 defines the `default', `protected', `hidden' and `internal' 39771 visibilities. 39772 39773 The most commonly used is visibility is `hidden'. It specifies that 39774 the symbol cannot be referenced from outside of the current shared 39775 library. Unfortunately, this information cannot be used directly by 39776 the link-time optimization in the compiler since the whole shared 39777 library also might contain non-LTO objects and those are not visible to 39778 the compiler. 39779 39780 GCC solves this problem using linker plugins. A _linker plugin_ is an 39781 interface to the linker that allows an external program to claim the 39782 ownership of a given object file. The linker then performs the linking 39783 procedure by querying the plugin about the symbol table of the claimed 39784 objects and once the linking decisions are complete, the plugin is 39785 allowed to provide the final object file before the actual linking is 39786 made. The linker plugin obtains the symbol resolution information 39787 which specifies which symbols provided by the claimed objects are bound 39788 from the rest of a binary being linked. 39789 39790 Currently, the linker plugin works only in combination with the Gold 39791 linker, but a GNU ld implementation is under development. 39792 39793 GCC is designed to be independent of the rest of the toolchain and 39794 aims to support linkers without plugin support. For this reason it 39795 does not use the linker plugin by default. Instead, the object files 39796 are examined by `collect2' before being passed to the linker and 39797 objects found to have LTO sections are passed to `lto1' first. This 39798 mode does not work for library archives. The decision on what object 39799 files from the archive are needed depends on the actual linking and 39800 thus GCC would have to implement the linker itself. The resolution 39801 information is missing too and thus GCC needs to make an educated guess 39802 based on `-fwhole-program'. Without the linker plugin GCC also assumes 39803 that symbols are declared `hidden' and not referred by non-LTO code by 39804 default. 39805 39806 39807 File: gccint.info, Node: Internal flags, Prev: WHOPR, Up: LTO 39808 39809 24.5 Internal flags controlling `lto1' 39810 ====================================== 39811 39812 The following flags are passed into `lto1' and are not meant to be used 39813 directly from the command line. 39814 39815 * -fwpa This option runs the serial part of the link-time optimizer 39816 performing the inter-procedural propagation (WPA mode). The 39817 compiler reads in summary information from all inputs and performs 39818 an analysis based on summary information only. It generates 39819 object files for subsequent runs of the link-time optimizer where 39820 individual object files are optimized using both summary 39821 information from the WPA mode and the actual function bodies. It 39822 then drives the LTRANS phase. 39823 39824 * -fltrans This option runs the link-time optimizer in the 39825 local-transformation (LTRANS) mode, which reads in output from a 39826 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 39827 optimizes an object and produces the final assembly. 39828 39829 * -fltrans-output-list=FILE This option specifies a file to which 39830 the names of LTRANS output files are written. This option is only 39831 meaningful in conjunction with `-fwpa'. 39832 39833 39834 File: gccint.info, Node: Funding, Next: GNU Project, Prev: LTO, Up: Top 39835 39836 Funding Free Software 39837 ********************* 39838 39839 If you want to have more free software a few years from now, it makes 39840 sense for you to help encourage people to contribute funds for its 39841 development. The most effective approach known is to encourage 39842 commercial redistributors to donate. 39843 39844 Users of free software systems can boost the pace of development by 39845 encouraging for-a-fee distributors to donate part of their selling price 39846 to free software developers--the Free Software Foundation, and others. 39847 39848 The way to convince distributors to do this is to demand it and expect 39849 it from them. So when you compare distributors, judge them partly by 39850 how much they give to free software development. Show distributors 39851 they must compete to be the one who gives the most. 39852 39853 To make this approach work, you must insist on numbers that you can 39854 compare, such as, "We will donate ten dollars to the Frobnitz project 39855 for each disk sold." Don't be satisfied with a vague promise, such as 39856 "A portion of the profits are donated," since it doesn't give a basis 39857 for comparison. 39858 39859 Even a precise fraction "of the profits from this disk" is not very 39860 meaningful, since creative accounting and unrelated business decisions 39861 can greatly alter what fraction of the sales price counts as profit. 39862 If the price you pay is $50, ten percent of the profit is probably less 39863 than a dollar; it might be a few cents, or nothing at all. 39864 39865 Some redistributors do development work themselves. This is useful 39866 too; but to keep everyone honest, you need to inquire how much they do, 39867 and what kind. Some kinds of development make much more long-term 39868 difference than others. For example, maintaining a separate version of 39869 a program contributes very little; maintaining the standard version of a 39870 program for the whole community contributes much. Easy new ports 39871 contribute little, since someone else would surely do them; difficult 39872 ports such as adding a new CPU to the GNU Compiler Collection 39873 contribute more; major new features or packages contribute the most. 39874 39875 By establishing the idea that supporting further development is "the 39876 proper thing to do" when distributing free software for a fee, we can 39877 assure a steady flow of resources into making more free software. 39878 39879 Copyright (C) 1994 Free Software Foundation, Inc. 39880 Verbatim copying and redistribution of this section is permitted 39881 without royalty; alteration is not permitted. 39882 39883 39884 File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 39885 39886 The GNU Project and GNU/Linux 39887 ***************************** 39888 39889 The GNU Project was launched in 1984 to develop a complete Unix-like 39890 operating system which is free software: the GNU system. (GNU is a 39891 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 39892 Variants of the GNU operating system, which use the kernel Linux, are 39893 now widely used; though these systems are often referred to as "Linux", 39894 they are more accurately called GNU/Linux systems. 39895 39896 For more information, see: 39897 `http://www.gnu.org/' 39898 `http://www.gnu.org/gnu/linux-and-gnu.html' 39899 39900 39901 File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 39902 39903 GNU General Public License 39904 ************************** 39905 39906 Version 3, 29 June 2007 39907 39908 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 39909 39910 Everyone is permitted to copy and distribute verbatim copies of this 39911 license document, but changing it is not allowed. 39912 39913 Preamble 39914 ======== 39915 39916 The GNU General Public License is a free, copyleft license for software 39917 and other kinds of works. 39918 39919 The licenses for most software and other practical works are designed 39920 to take away your freedom to share and change the works. By contrast, 39921 the GNU General Public License is intended to guarantee your freedom to 39922 share and change all versions of a program-to make sure it remains free 39923 software for all its users. We, the Free Software Foundation, use the 39924 GNU General Public License for most of our software; it applies also to 39925 any other work released this way by its authors. You can apply it to 39926 your programs, too. 39927 39928 When we speak of free software, we are referring to freedom, not 39929 price. Our General Public Licenses are designed to make sure that you 39930 have the freedom to distribute copies of free software (and charge for 39931 them if you wish), that you receive source code or can get it if you 39932 want it, that you can change the software or use pieces of it in new 39933 free programs, and that you know you can do these things. 39934 39935 To protect your rights, we need to prevent others from denying you 39936 these rights or asking you to surrender the rights. Therefore, you 39937 have certain responsibilities if you distribute copies of the software, 39938 or if you modify it: responsibilities to respect the freedom of others. 39939 39940 For example, if you distribute copies of such a program, whether 39941 gratis or for a fee, you must pass on to the recipients the same 39942 freedoms that you received. You must make sure that they, too, receive 39943 or can get the source code. And you must show them these terms so they 39944 know their rights. 39945 39946 Developers that use the GNU GPL protect your rights with two steps: 39947 (1) assert copyright on the software, and (2) offer you this License 39948 giving you legal permission to copy, distribute and/or modify it. 39949 39950 For the developers' and authors' protection, the GPL clearly explains 39951 that there is no warranty for this free software. For both users' and 39952 authors' sake, the GPL requires that modified versions be marked as 39953 changed, so that their problems will not be attributed erroneously to 39954 authors of previous versions. 39955 39956 Some devices are designed to deny users access to install or run 39957 modified versions of the software inside them, although the 39958 manufacturer can do so. This is fundamentally incompatible with the 39959 aim of protecting users' freedom to change the software. The 39960 systematic pattern of such abuse occurs in the area of products for 39961 individuals to use, which is precisely where it is most unacceptable. 39962 Therefore, we have designed this version of the GPL to prohibit the 39963 practice for those products. If such problems arise substantially in 39964 other domains, we stand ready to extend this provision to those domains 39965 in future versions of the GPL, as needed to protect the freedom of 39966 users. 39967 39968 Finally, every program is threatened constantly by software patents. 39969 States should not allow patents to restrict development and use of 39970 software on general-purpose computers, but in those that do, we wish to 39971 avoid the special danger that patents applied to a free program could 39972 make it effectively proprietary. To prevent this, the GPL assures that 39973 patents cannot be used to render the program non-free. 39974 39975 The precise terms and conditions for copying, distribution and 39976 modification follow. 39977 39978 TERMS AND CONDITIONS 39979 ==================== 39980 39981 0. Definitions. 39982 39983 "This License" refers to version 3 of the GNU General Public 39984 License. 39985 39986 "Copyright" also means copyright-like laws that apply to other 39987 kinds of works, such as semiconductor masks. 39988 39989 "The Program" refers to any copyrightable work licensed under this 39990 License. Each licensee is addressed as "you". "Licensees" and 39991 "recipients" may be individuals or organizations. 39992 39993 To "modify" a work means to copy from or adapt all or part of the 39994 work in a fashion requiring copyright permission, other than the 39995 making of an exact copy. The resulting work is called a "modified 39996 version" of the earlier work or a work "based on" the earlier work. 39997 39998 A "covered work" means either the unmodified Program or a work 39999 based on the Program. 40000 40001 To "propagate" a work means to do anything with it that, without 40002 permission, would make you directly or secondarily liable for 40003 infringement under applicable copyright law, except executing it 40004 on a computer or modifying a private copy. Propagation includes 40005 copying, distribution (with or without modification), making 40006 available to the public, and in some countries other activities as 40007 well. 40008 40009 To "convey" a work means any kind of propagation that enables other 40010 parties to make or receive copies. Mere interaction with a user 40011 through a computer network, with no transfer of a copy, is not 40012 conveying. 40013 40014 An interactive user interface displays "Appropriate Legal Notices" 40015 to the extent that it includes a convenient and prominently visible 40016 feature that (1) displays an appropriate copyright notice, and (2) 40017 tells the user that there is no warranty for the work (except to 40018 the extent that warranties are provided), that licensees may 40019 convey the work under this License, and how to view a copy of this 40020 License. If the interface presents a list of user commands or 40021 options, such as a menu, a prominent item in the list meets this 40022 criterion. 40023 40024 1. Source Code. 40025 40026 The "source code" for a work means the preferred form of the work 40027 for making modifications to it. "Object code" means any 40028 non-source form of a work. 40029 40030 A "Standard Interface" means an interface that either is an 40031 official standard defined by a recognized standards body, or, in 40032 the case of interfaces specified for a particular programming 40033 language, one that is widely used among developers working in that 40034 language. 40035 40036 The "System Libraries" of an executable work include anything, 40037 other than the work as a whole, that (a) is included in the normal 40038 form of packaging a Major Component, but which is not part of that 40039 Major Component, and (b) serves only to enable use of the work 40040 with that Major Component, or to implement a Standard Interface 40041 for which an implementation is available to the public in source 40042 code form. A "Major Component", in this context, means a major 40043 essential component (kernel, window system, and so on) of the 40044 specific operating system (if any) on which the executable work 40045 runs, or a compiler used to produce the work, or an object code 40046 interpreter used to run it. 40047 40048 The "Corresponding Source" for a work in object code form means all 40049 the source code needed to generate, install, and (for an executable 40050 work) run the object code and to modify the work, including 40051 scripts to control those activities. However, it does not include 40052 the work's System Libraries, or general-purpose tools or generally 40053 available free programs which are used unmodified in performing 40054 those activities but which are not part of the work. For example, 40055 Corresponding Source includes interface definition files 40056 associated with source files for the work, and the source code for 40057 shared libraries and dynamically linked subprograms that the work 40058 is specifically designed to require, such as by intimate data 40059 communication or control flow between those subprograms and other 40060 parts of the work. 40061 40062 The Corresponding Source need not include anything that users can 40063 regenerate automatically from other parts of the Corresponding 40064 Source. 40065 40066 The Corresponding Source for a work in source code form is that 40067 same work. 40068 40069 2. Basic Permissions. 40070 40071 All rights granted under this License are granted for the term of 40072 copyright on the Program, and are irrevocable provided the stated 40073 conditions are met. This License explicitly affirms your unlimited 40074 permission to run the unmodified Program. The output from running 40075 a covered work is covered by this License only if the output, 40076 given its content, constitutes a covered work. This License 40077 acknowledges your rights of fair use or other equivalent, as 40078 provided by copyright law. 40079 40080 You may make, run and propagate covered works that you do not 40081 convey, without conditions so long as your license otherwise 40082 remains in force. You may convey covered works to others for the 40083 sole purpose of having them make modifications exclusively for 40084 you, or provide you with facilities for running those works, 40085 provided that you comply with the terms of this License in 40086 conveying all material for which you do not control copyright. 40087 Those thus making or running the covered works for you must do so 40088 exclusively on your behalf, under your direction and control, on 40089 terms that prohibit them from making any copies of your 40090 copyrighted material outside their relationship with you. 40091 40092 Conveying under any other circumstances is permitted solely under 40093 the conditions stated below. Sublicensing is not allowed; section 40094 10 makes it unnecessary. 40095 40096 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 40097 40098 No covered work shall be deemed part of an effective technological 40099 measure under any applicable law fulfilling obligations under 40100 article 11 of the WIPO copyright treaty adopted on 20 December 40101 1996, or similar laws prohibiting or restricting circumvention of 40102 such measures. 40103 40104 When you convey a covered work, you waive any legal power to forbid 40105 circumvention of technological measures to the extent such 40106 circumvention is effected by exercising rights under this License 40107 with respect to the covered work, and you disclaim any intention 40108 to limit operation or modification of the work as a means of 40109 enforcing, against the work's users, your or third parties' legal 40110 rights to forbid circumvention of technological measures. 40111 40112 4. Conveying Verbatim Copies. 40113 40114 You may convey verbatim copies of the Program's source code as you 40115 receive it, in any medium, provided that you conspicuously and 40116 appropriately publish on each copy an appropriate copyright notice; 40117 keep intact all notices stating that this License and any 40118 non-permissive terms added in accord with section 7 apply to the 40119 code; keep intact all notices of the absence of any warranty; and 40120 give all recipients a copy of this License along with the Program. 40121 40122 You may charge any price or no price for each copy that you convey, 40123 and you may offer support or warranty protection for a fee. 40124 40125 5. Conveying Modified Source Versions. 40126 40127 You may convey a work based on the Program, or the modifications to 40128 produce it from the Program, in the form of source code under the 40129 terms of section 4, provided that you also meet all of these 40130 conditions: 40131 40132 a. The work must carry prominent notices stating that you 40133 modified it, and giving a relevant date. 40134 40135 b. The work must carry prominent notices stating that it is 40136 released under this License and any conditions added under 40137 section 7. This requirement modifies the requirement in 40138 section 4 to "keep intact all notices". 40139 40140 c. You must license the entire work, as a whole, under this 40141 License to anyone who comes into possession of a copy. This 40142 License will therefore apply, along with any applicable 40143 section 7 additional terms, to the whole of the work, and all 40144 its parts, regardless of how they are packaged. This License 40145 gives no permission to license the work in any other way, but 40146 it does not invalidate such permission if you have separately 40147 received it. 40148 40149 d. If the work has interactive user interfaces, each must display 40150 Appropriate Legal Notices; however, if the Program has 40151 interactive interfaces that do not display Appropriate Legal 40152 Notices, your work need not make them do so. 40153 40154 A compilation of a covered work with other separate and independent 40155 works, which are not by their nature extensions of the covered 40156 work, and which are not combined with it such as to form a larger 40157 program, in or on a volume of a storage or distribution medium, is 40158 called an "aggregate" if the compilation and its resulting 40159 copyright are not used to limit the access or legal rights of the 40160 compilation's users beyond what the individual works permit. 40161 Inclusion of a covered work in an aggregate does not cause this 40162 License to apply to the other parts of the aggregate. 40163 40164 6. Conveying Non-Source Forms. 40165 40166 You may convey a covered work in object code form under the terms 40167 of sections 4 and 5, provided that you also convey the 40168 machine-readable Corresponding Source under the terms of this 40169 License, in one of these ways: 40170 40171 a. Convey the object code in, or embodied in, a physical product 40172 (including a physical distribution medium), accompanied by the 40173 Corresponding Source fixed on a durable physical medium 40174 customarily used for software interchange. 40175 40176 b. Convey the object code in, or embodied in, a physical product 40177 (including a physical distribution medium), accompanied by a 40178 written offer, valid for at least three years and valid for 40179 as long as you offer spare parts or customer support for that 40180 product model, to give anyone who possesses the object code 40181 either (1) a copy of the Corresponding Source for all the 40182 software in the product that is covered by this License, on a 40183 durable physical medium customarily used for software 40184 interchange, for a price no more than your reasonable cost of 40185 physically performing this conveying of source, or (2) access 40186 to copy the Corresponding Source from a network server at no 40187 charge. 40188 40189 c. Convey individual copies of the object code with a copy of 40190 the written offer to provide the Corresponding Source. This 40191 alternative is allowed only occasionally and noncommercially, 40192 and only if you received the object code with such an offer, 40193 in accord with subsection 6b. 40194 40195 d. Convey the object code by offering access from a designated 40196 place (gratis or for a charge), and offer equivalent access 40197 to the Corresponding Source in the same way through the same 40198 place at no further charge. You need not require recipients 40199 to copy the Corresponding Source along with the object code. 40200 If the place to copy the object code is a network server, the 40201 Corresponding Source may be on a different server (operated 40202 by you or a third party) that supports equivalent copying 40203 facilities, provided you maintain clear directions next to 40204 the object code saying where to find the Corresponding Source. 40205 Regardless of what server hosts the Corresponding Source, you 40206 remain obligated to ensure that it is available for as long 40207 as needed to satisfy these requirements. 40208 40209 e. Convey the object code using peer-to-peer transmission, 40210 provided you inform other peers where the object code and 40211 Corresponding Source of the work are being offered to the 40212 general public at no charge under subsection 6d. 40213 40214 40215 A separable portion of the object code, whose source code is 40216 excluded from the Corresponding Source as a System Library, need 40217 not be included in conveying the object code work. 40218 40219 A "User Product" is either (1) a "consumer product", which means 40220 any tangible personal property which is normally used for personal, 40221 family, or household purposes, or (2) anything designed or sold for 40222 incorporation into a dwelling. In determining whether a product 40223 is a consumer product, doubtful cases shall be resolved in favor of 40224 coverage. For a particular product received by a particular user, 40225 "normally used" refers to a typical or common use of that class of 40226 product, regardless of the status of the particular user or of the 40227 way in which the particular user actually uses, or expects or is 40228 expected to use, the product. A product is a consumer product 40229 regardless of whether the product has substantial commercial, 40230 industrial or non-consumer uses, unless such uses represent the 40231 only significant mode of use of the product. 40232 40233 "Installation Information" for a User Product means any methods, 40234 procedures, authorization keys, or other information required to 40235 install and execute modified versions of a covered work in that 40236 User Product from a modified version of its Corresponding Source. 40237 The information must suffice to ensure that the continued 40238 functioning of the modified object code is in no case prevented or 40239 interfered with solely because modification has been made. 40240 40241 If you convey an object code work under this section in, or with, 40242 or specifically for use in, a User Product, and the conveying 40243 occurs as part of a transaction in which the right of possession 40244 and use of the User Product is transferred to the recipient in 40245 perpetuity or for a fixed term (regardless of how the transaction 40246 is characterized), the Corresponding Source conveyed under this 40247 section must be accompanied by the Installation Information. But 40248 this requirement does not apply if neither you nor any third party 40249 retains the ability to install modified object code on the User 40250 Product (for example, the work has been installed in ROM). 40251 40252 The requirement to provide Installation Information does not 40253 include a requirement to continue to provide support service, 40254 warranty, or updates for a work that has been modified or 40255 installed by the recipient, or for the User Product in which it 40256 has been modified or installed. Access to a network may be denied 40257 when the modification itself materially and adversely affects the 40258 operation of the network or violates the rules and protocols for 40259 communication across the network. 40260 40261 Corresponding Source conveyed, and Installation Information 40262 provided, in accord with this section must be in a format that is 40263 publicly documented (and with an implementation available to the 40264 public in source code form), and must require no special password 40265 or key for unpacking, reading or copying. 40266 40267 7. Additional Terms. 40268 40269 "Additional permissions" are terms that supplement the terms of 40270 this License by making exceptions from one or more of its 40271 conditions. Additional permissions that are applicable to the 40272 entire Program shall be treated as though they were included in 40273 this License, to the extent that they are valid under applicable 40274 law. If additional permissions apply only to part of the Program, 40275 that part may be used separately under those permissions, but the 40276 entire Program remains governed by this License without regard to 40277 the additional permissions. 40278 40279 When you convey a copy of a covered work, you may at your option 40280 remove any additional permissions from that copy, or from any part 40281 of it. (Additional permissions may be written to require their own 40282 removal in certain cases when you modify the work.) You may place 40283 additional permissions on material, added by you to a covered work, 40284 for which you have or can give appropriate copyright permission. 40285 40286 Notwithstanding any other provision of this License, for material 40287 you add to a covered work, you may (if authorized by the copyright 40288 holders of that material) supplement the terms of this License 40289 with terms: 40290 40291 a. Disclaiming warranty or limiting liability differently from 40292 the terms of sections 15 and 16 of this License; or 40293 40294 b. Requiring preservation of specified reasonable legal notices 40295 or author attributions in that material or in the Appropriate 40296 Legal Notices displayed by works containing it; or 40297 40298 c. Prohibiting misrepresentation of the origin of that material, 40299 or requiring that modified versions of such material be 40300 marked in reasonable ways as different from the original 40301 version; or 40302 40303 d. Limiting the use for publicity purposes of names of licensors 40304 or authors of the material; or 40305 40306 e. Declining to grant rights under trademark law for use of some 40307 trade names, trademarks, or service marks; or 40308 40309 f. Requiring indemnification of licensors and authors of that 40310 material by anyone who conveys the material (or modified 40311 versions of it) with contractual assumptions of liability to 40312 the recipient, for any liability that these contractual 40313 assumptions directly impose on those licensors and authors. 40314 40315 All other non-permissive additional terms are considered "further 40316 restrictions" within the meaning of section 10. If the Program as 40317 you received it, or any part of it, contains a notice stating that 40318 it is governed by this License along with a term that is a further 40319 restriction, you may remove that term. If a license document 40320 contains a further restriction but permits relicensing or 40321 conveying under this License, you may add to a covered work 40322 material governed by the terms of that license document, provided 40323 that the further restriction does not survive such relicensing or 40324 conveying. 40325 40326 If you add terms to a covered work in accord with this section, you 40327 must place, in the relevant source files, a statement of the 40328 additional terms that apply to those files, or a notice indicating 40329 where to find the applicable terms. 40330 40331 Additional terms, permissive or non-permissive, may be stated in 40332 the form of a separately written license, or stated as exceptions; 40333 the above requirements apply either way. 40334 40335 8. Termination. 40336 40337 You may not propagate or modify a covered work except as expressly 40338 provided under this License. Any attempt otherwise to propagate or 40339 modify it is void, and will automatically terminate your rights 40340 under this License (including any patent licenses granted under 40341 the third paragraph of section 11). 40342 40343 However, if you cease all violation of this License, then your 40344 license from a particular copyright holder is reinstated (a) 40345 provisionally, unless and until the copyright holder explicitly 40346 and finally terminates your license, and (b) permanently, if the 40347 copyright holder fails to notify you of the violation by some 40348 reasonable means prior to 60 days after the cessation. 40349 40350 Moreover, your license from a particular copyright holder is 40351 reinstated permanently if the copyright holder notifies you of the 40352 violation by some reasonable means, this is the first time you have 40353 received notice of violation of this License (for any work) from 40354 that copyright holder, and you cure the violation prior to 30 days 40355 after your receipt of the notice. 40356 40357 Termination of your rights under this section does not terminate 40358 the licenses of parties who have received copies or rights from 40359 you under this License. If your rights have been terminated and 40360 not permanently reinstated, you do not qualify to receive new 40361 licenses for the same material under section 10. 40362 40363 9. Acceptance Not Required for Having Copies. 40364 40365 You are not required to accept this License in order to receive or 40366 run a copy of the Program. Ancillary propagation of a covered work 40367 occurring solely as a consequence of using peer-to-peer 40368 transmission to receive a copy likewise does not require 40369 acceptance. However, nothing other than this License grants you 40370 permission to propagate or modify any covered work. These actions 40371 infringe copyright if you do not accept this License. Therefore, 40372 by modifying or propagating a covered work, you indicate your 40373 acceptance of this License to do so. 40374 40375 10. Automatic Licensing of Downstream Recipients. 40376 40377 Each time you convey a covered work, the recipient automatically 40378 receives a license from the original licensors, to run, modify and 40379 propagate that work, subject to this License. You are not 40380 responsible for enforcing compliance by third parties with this 40381 License. 40382 40383 An "entity transaction" is a transaction transferring control of an 40384 organization, or substantially all assets of one, or subdividing an 40385 organization, or merging organizations. If propagation of a 40386 covered work results from an entity transaction, each party to that 40387 transaction who receives a copy of the work also receives whatever 40388 licenses to the work the party's predecessor in interest had or 40389 could give under the previous paragraph, plus a right to 40390 possession of the Corresponding Source of the work from the 40391 predecessor in interest, if the predecessor has it or can get it 40392 with reasonable efforts. 40393 40394 You may not impose any further restrictions on the exercise of the 40395 rights granted or affirmed under this License. For example, you 40396 may not impose a license fee, royalty, or other charge for 40397 exercise of rights granted under this License, and you may not 40398 initiate litigation (including a cross-claim or counterclaim in a 40399 lawsuit) alleging that any patent claim is infringed by making, 40400 using, selling, offering for sale, or importing the Program or any 40401 portion of it. 40402 40403 11. Patents. 40404 40405 A "contributor" is a copyright holder who authorizes use under this 40406 License of the Program or a work on which the Program is based. 40407 The work thus licensed is called the contributor's "contributor 40408 version". 40409 40410 A contributor's "essential patent claims" are all patent claims 40411 owned or controlled by the contributor, whether already acquired or 40412 hereafter acquired, that would be infringed by some manner, 40413 permitted by this License, of making, using, or selling its 40414 contributor version, but do not include claims that would be 40415 infringed only as a consequence of further modification of the 40416 contributor version. For purposes of this definition, "control" 40417 includes the right to grant patent sublicenses in a manner 40418 consistent with the requirements of this License. 40419 40420 Each contributor grants you a non-exclusive, worldwide, 40421 royalty-free patent license under the contributor's essential 40422 patent claims, to make, use, sell, offer for sale, import and 40423 otherwise run, modify and propagate the contents of its 40424 contributor version. 40425 40426 In the following three paragraphs, a "patent license" is any 40427 express agreement or commitment, however denominated, not to 40428 enforce a patent (such as an express permission to practice a 40429 patent or covenant not to sue for patent infringement). To 40430 "grant" such a patent license to a party means to make such an 40431 agreement or commitment not to enforce a patent against the party. 40432 40433 If you convey a covered work, knowingly relying on a patent 40434 license, and the Corresponding Source of the work is not available 40435 for anyone to copy, free of charge and under the terms of this 40436 License, through a publicly available network server or other 40437 readily accessible means, then you must either (1) cause the 40438 Corresponding Source to be so available, or (2) arrange to deprive 40439 yourself of the benefit of the patent license for this particular 40440 work, or (3) arrange, in a manner consistent with the requirements 40441 of this License, to extend the patent license to downstream 40442 recipients. "Knowingly relying" means you have actual knowledge 40443 that, but for the patent license, your conveying the covered work 40444 in a country, or your recipient's use of the covered work in a 40445 country, would infringe one or more identifiable patents in that 40446 country that you have reason to believe are valid. 40447 40448 If, pursuant to or in connection with a single transaction or 40449 arrangement, you convey, or propagate by procuring conveyance of, a 40450 covered work, and grant a patent license to some of the parties 40451 receiving the covered work authorizing them to use, propagate, 40452 modify or convey a specific copy of the covered work, then the 40453 patent license you grant is automatically extended to all 40454 recipients of the covered work and works based on it. 40455 40456 A patent license is "discriminatory" if it does not include within 40457 the scope of its coverage, prohibits the exercise of, or is 40458 conditioned on the non-exercise of one or more of the rights that 40459 are specifically granted under this License. You may not convey a 40460 covered work if you are a party to an arrangement with a third 40461 party that is in the business of distributing software, under 40462 which you make payment to the third party based on the extent of 40463 your activity of conveying the work, and under which the third 40464 party grants, to any of the parties who would receive the covered 40465 work from you, a discriminatory patent license (a) in connection 40466 with copies of the covered work conveyed by you (or copies made 40467 from those copies), or (b) primarily for and in connection with 40468 specific products or compilations that contain the covered work, 40469 unless you entered into that arrangement, or that patent license 40470 was granted, prior to 28 March 2007. 40471 40472 Nothing in this License shall be construed as excluding or limiting 40473 any implied license or other defenses to infringement that may 40474 otherwise be available to you under applicable patent law. 40475 40476 12. No Surrender of Others' Freedom. 40477 40478 If conditions are imposed on you (whether by court order, 40479 agreement or otherwise) that contradict the conditions of this 40480 License, they do not excuse you from the conditions of this 40481 License. If you cannot convey a covered work so as to satisfy 40482 simultaneously your obligations under this License and any other 40483 pertinent obligations, then as a consequence you may not convey it 40484 at all. For example, if you agree to terms that obligate you to 40485 collect a royalty for further conveying from those to whom you 40486 convey the Program, the only way you could satisfy both those 40487 terms and this License would be to refrain entirely from conveying 40488 the Program. 40489 40490 13. Use with the GNU Affero General Public License. 40491 40492 Notwithstanding any other provision of this License, you have 40493 permission to link or combine any covered work with a work licensed 40494 under version 3 of the GNU Affero General Public License into a 40495 single combined work, and to convey the resulting work. The terms 40496 of this License will continue to apply to the part which is the 40497 covered work, but the special requirements of the GNU Affero 40498 General Public License, section 13, concerning interaction through 40499 a network will apply to the combination as such. 40500 40501 14. Revised Versions of this License. 40502 40503 The Free Software Foundation may publish revised and/or new 40504 versions of the GNU General Public License from time to time. 40505 Such new versions will be similar in spirit to the present 40506 version, but may differ in detail to address new problems or 40507 concerns. 40508 40509 Each version is given a distinguishing version number. If the 40510 Program specifies that a certain numbered version of the GNU 40511 General Public License "or any later version" applies to it, you 40512 have the option of following the terms and conditions either of 40513 that numbered version or of any later version published by the 40514 Free Software Foundation. If the Program does not specify a 40515 version number of the GNU General Public License, you may choose 40516 any version ever published by the Free Software Foundation. 40517 40518 If the Program specifies that a proxy can decide which future 40519 versions of the GNU General Public License can be used, that 40520 proxy's public statement of acceptance of a version permanently 40521 authorizes you to choose that version for the Program. 40522 40523 Later license versions may give you additional or different 40524 permissions. However, no additional obligations are imposed on any 40525 author or copyright holder as a result of your choosing to follow a 40526 later version. 40527 40528 15. Disclaimer of Warranty. 40529 40530 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 40531 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 40532 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 40533 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 40534 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 40535 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 40536 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 40537 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 40538 NECESSARY SERVICING, REPAIR OR CORRECTION. 40539 40540 16. Limitation of Liability. 40541 40542 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 40543 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 40544 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 40545 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 40546 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 40547 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 40548 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 40549 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 40550 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 40551 THE POSSIBILITY OF SUCH DAMAGES. 40552 40553 17. Interpretation of Sections 15 and 16. 40554 40555 If the disclaimer of warranty and limitation of liability provided 40556 above cannot be given local legal effect according to their terms, 40557 reviewing courts shall apply local law that most closely 40558 approximates an absolute waiver of all civil liability in 40559 connection with the Program, unless a warranty or assumption of 40560 liability accompanies a copy of the Program in return for a fee. 40561 40562 40563 END OF TERMS AND CONDITIONS 40564 =========================== 40565 40566 How to Apply These Terms to Your New Programs 40567 ============================================= 40568 40569 If you develop a new program, and you want it to be of the greatest 40570 possible use to the public, the best way to achieve this is to make it 40571 free software which everyone can redistribute and change under these 40572 terms. 40573 40574 To do so, attach the following notices to the program. It is safest 40575 to attach them to the start of each source file to most effectively 40576 state the exclusion of warranty; and each file should have at least the 40577 "copyright" line and a pointer to where the full notice is found. 40578 40579 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 40580 Copyright (C) YEAR NAME OF AUTHOR 40581 40582 This program is free software: you can redistribute it and/or modify 40583 it under the terms of the GNU General Public License as published by 40584 the Free Software Foundation, either version 3 of the License, or (at 40585 your option) any later version. 40586 40587 This program is distributed in the hope that it will be useful, but 40588 WITHOUT ANY WARRANTY; without even the implied warranty of 40589 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 40590 General Public License for more details. 40591 40592 You should have received a copy of the GNU General Public License 40593 along with this program. If not, see `http://www.gnu.org/licenses/'. 40594 40595 Also add information on how to contact you by electronic and paper 40596 mail. 40597 40598 If the program does terminal interaction, make it output a short 40599 notice like this when it starts in an interactive mode: 40600 40601 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 40602 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 40603 This is free software, and you are welcome to redistribute it 40604 under certain conditions; type `show c' for details. 40605 40606 The hypothetical commands `show w' and `show c' should show the 40607 appropriate parts of the General Public License. Of course, your 40608 program's commands might be different; for a GUI interface, you would 40609 use an "about box". 40610 40611 You should also get your employer (if you work as a programmer) or 40612 school, if any, to sign a "copyright disclaimer" for the program, if 40613 necessary. For more information on this, and how to apply and follow 40614 the GNU GPL, see `http://www.gnu.org/licenses/'. 40615 40616 The GNU General Public License does not permit incorporating your 40617 program into proprietary programs. If your program is a subroutine 40618 library, you may consider it more useful to permit linking proprietary 40619 applications with the library. If this is what you want to do, use the 40620 GNU Lesser General Public License instead of this License. But first, 40621 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 40622 40623 40624 File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 40625 40626 GNU Free Documentation License 40627 ****************************** 40628 40629 Version 1.3, 3 November 2008 40630 40631 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 40632 `http://fsf.org/' 40633 40634 Everyone is permitted to copy and distribute verbatim copies 40635 of this license document, but changing it is not allowed. 40636 40637 0. PREAMBLE 40638 40639 The purpose of this License is to make a manual, textbook, or other 40640 functional and useful document "free" in the sense of freedom: to 40641 assure everyone the effective freedom to copy and redistribute it, 40642 with or without modifying it, either commercially or 40643 noncommercially. Secondarily, this License preserves for the 40644 author and publisher a way to get credit for their work, while not 40645 being considered responsible for modifications made by others. 40646 40647 This License is a kind of "copyleft", which means that derivative 40648 works of the document must themselves be free in the same sense. 40649 It complements the GNU General Public License, which is a copyleft 40650 license designed for free software. 40651 40652 We have designed this License in order to use it for manuals for 40653 free software, because free software needs free documentation: a 40654 free program should come with manuals providing the same freedoms 40655 that the software does. But this License is not limited to 40656 software manuals; it can be used for any textual work, regardless 40657 of subject matter or whether it is published as a printed book. 40658 We recommend this License principally for works whose purpose is 40659 instruction or reference. 40660 40661 1. APPLICABILITY AND DEFINITIONS 40662 40663 This License applies to any manual or other work, in any medium, 40664 that contains a notice placed by the copyright holder saying it 40665 can be distributed under the terms of this License. Such a notice 40666 grants a world-wide, royalty-free license, unlimited in duration, 40667 to use that work under the conditions stated herein. The 40668 "Document", below, refers to any such manual or work. Any member 40669 of the public is a licensee, and is addressed as "you". You 40670 accept the license if you copy, modify or distribute the work in a 40671 way requiring permission under copyright law. 40672 40673 A "Modified Version" of the Document means any work containing the 40674 Document or a portion of it, either copied verbatim, or with 40675 modifications and/or translated into another language. 40676 40677 A "Secondary Section" is a named appendix or a front-matter section 40678 of the Document that deals exclusively with the relationship of the 40679 publishers or authors of the Document to the Document's overall 40680 subject (or to related matters) and contains nothing that could 40681 fall directly within that overall subject. (Thus, if the Document 40682 is in part a textbook of mathematics, a Secondary Section may not 40683 explain any mathematics.) The relationship could be a matter of 40684 historical connection with the subject or with related matters, or 40685 of legal, commercial, philosophical, ethical or political position 40686 regarding them. 40687 40688 The "Invariant Sections" are certain Secondary Sections whose 40689 titles are designated, as being those of Invariant Sections, in 40690 the notice that says that the Document is released under this 40691 License. If a section does not fit the above definition of 40692 Secondary then it is not allowed to be designated as Invariant. 40693 The Document may contain zero Invariant Sections. If the Document 40694 does not identify any Invariant Sections then there are none. 40695 40696 The "Cover Texts" are certain short passages of text that are 40697 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 40698 that says that the Document is released under this License. A 40699 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 40700 be at most 25 words. 40701 40702 A "Transparent" copy of the Document means a machine-readable copy, 40703 represented in a format whose specification is available to the 40704 general public, that is suitable for revising the document 40705 straightforwardly with generic text editors or (for images 40706 composed of pixels) generic paint programs or (for drawings) some 40707 widely available drawing editor, and that is suitable for input to 40708 text formatters or for automatic translation to a variety of 40709 formats suitable for input to text formatters. A copy made in an 40710 otherwise Transparent file format whose markup, or absence of 40711 markup, has been arranged to thwart or discourage subsequent 40712 modification by readers is not Transparent. An image format is 40713 not Transparent if used for any substantial amount of text. A 40714 copy that is not "Transparent" is called "Opaque". 40715 40716 Examples of suitable formats for Transparent copies include plain 40717 ASCII without markup, Texinfo input format, LaTeX input format, 40718 SGML or XML using a publicly available DTD, and 40719 standard-conforming simple HTML, PostScript or PDF designed for 40720 human modification. Examples of transparent image formats include 40721 PNG, XCF and JPG. Opaque formats include proprietary formats that 40722 can be read and edited only by proprietary word processors, SGML or 40723 XML for which the DTD and/or processing tools are not generally 40724 available, and the machine-generated HTML, PostScript or PDF 40725 produced by some word processors for output purposes only. 40726 40727 The "Title Page" means, for a printed book, the title page itself, 40728 plus such following pages as are needed to hold, legibly, the 40729 material this License requires to appear in the title page. For 40730 works in formats which do not have any title page as such, "Title 40731 Page" means the text near the most prominent appearance of the 40732 work's title, preceding the beginning of the body of the text. 40733 40734 The "publisher" means any person or entity that distributes copies 40735 of the Document to the public. 40736 40737 A section "Entitled XYZ" means a named subunit of the Document 40738 whose title either is precisely XYZ or contains XYZ in parentheses 40739 following text that translates XYZ in another language. (Here XYZ 40740 stands for a specific section name mentioned below, such as 40741 "Acknowledgements", "Dedications", "Endorsements", or "History".) 40742 To "Preserve the Title" of such a section when you modify the 40743 Document means that it remains a section "Entitled XYZ" according 40744 to this definition. 40745 40746 The Document may include Warranty Disclaimers next to the notice 40747 which states that this License applies to the Document. These 40748 Warranty Disclaimers are considered to be included by reference in 40749 this License, but only as regards disclaiming warranties: any other 40750 implication that these Warranty Disclaimers may have is void and 40751 has no effect on the meaning of this License. 40752 40753 2. VERBATIM COPYING 40754 40755 You may copy and distribute the Document in any medium, either 40756 commercially or noncommercially, provided that this License, the 40757 copyright notices, and the license notice saying this License 40758 applies to the Document are reproduced in all copies, and that you 40759 add no other conditions whatsoever to those of this License. You 40760 may not use technical measures to obstruct or control the reading 40761 or further copying of the copies you make or distribute. However, 40762 you may accept compensation in exchange for copies. If you 40763 distribute a large enough number of copies you must also follow 40764 the conditions in section 3. 40765 40766 You may also lend copies, under the same conditions stated above, 40767 and you may publicly display copies. 40768 40769 3. COPYING IN QUANTITY 40770 40771 If you publish printed copies (or copies in media that commonly 40772 have printed covers) of the Document, numbering more than 100, and 40773 the Document's license notice requires Cover Texts, you must 40774 enclose the copies in covers that carry, clearly and legibly, all 40775 these Cover Texts: Front-Cover Texts on the front cover, and 40776 Back-Cover Texts on the back cover. Both covers must also clearly 40777 and legibly identify you as the publisher of these copies. The 40778 front cover must present the full title with all words of the 40779 title equally prominent and visible. You may add other material 40780 on the covers in addition. Copying with changes limited to the 40781 covers, as long as they preserve the title of the Document and 40782 satisfy these conditions, can be treated as verbatim copying in 40783 other respects. 40784 40785 If the required texts for either cover are too voluminous to fit 40786 legibly, you should put the first ones listed (as many as fit 40787 reasonably) on the actual cover, and continue the rest onto 40788 adjacent pages. 40789 40790 If you publish or distribute Opaque copies of the Document 40791 numbering more than 100, you must either include a 40792 machine-readable Transparent copy along with each Opaque copy, or 40793 state in or with each Opaque copy a computer-network location from 40794 which the general network-using public has access to download 40795 using public-standard network protocols a complete Transparent 40796 copy of the Document, free of added material. If you use the 40797 latter option, you must take reasonably prudent steps, when you 40798 begin distribution of Opaque copies in quantity, to ensure that 40799 this Transparent copy will remain thus accessible at the stated 40800 location until at least one year after the last time you 40801 distribute an Opaque copy (directly or through your agents or 40802 retailers) of that edition to the public. 40803 40804 It is requested, but not required, that you contact the authors of 40805 the Document well before redistributing any large number of 40806 copies, to give them a chance to provide you with an updated 40807 version of the Document. 40808 40809 4. MODIFICATIONS 40810 40811 You may copy and distribute a Modified Version of the Document 40812 under the conditions of sections 2 and 3 above, provided that you 40813 release the Modified Version under precisely this License, with 40814 the Modified Version filling the role of the Document, thus 40815 licensing distribution and modification of the Modified Version to 40816 whoever possesses a copy of it. In addition, you must do these 40817 things in the Modified Version: 40818 40819 A. Use in the Title Page (and on the covers, if any) a title 40820 distinct from that of the Document, and from those of 40821 previous versions (which should, if there were any, be listed 40822 in the History section of the Document). You may use the 40823 same title as a previous version if the original publisher of 40824 that version gives permission. 40825 40826 B. List on the Title Page, as authors, one or more persons or 40827 entities responsible for authorship of the modifications in 40828 the Modified Version, together with at least five of the 40829 principal authors of the Document (all of its principal 40830 authors, if it has fewer than five), unless they release you 40831 from this requirement. 40832 40833 C. State on the Title page the name of the publisher of the 40834 Modified Version, as the publisher. 40835 40836 D. Preserve all the copyright notices of the Document. 40837 40838 E. Add an appropriate copyright notice for your modifications 40839 adjacent to the other copyright notices. 40840 40841 F. Include, immediately after the copyright notices, a license 40842 notice giving the public permission to use the Modified 40843 Version under the terms of this License, in the form shown in 40844 the Addendum below. 40845 40846 G. Preserve in that license notice the full lists of Invariant 40847 Sections and required Cover Texts given in the Document's 40848 license notice. 40849 40850 H. Include an unaltered copy of this License. 40851 40852 I. Preserve the section Entitled "History", Preserve its Title, 40853 and add to it an item stating at least the title, year, new 40854 authors, and publisher of the Modified Version as given on 40855 the Title Page. If there is no section Entitled "History" in 40856 the Document, create one stating the title, year, authors, 40857 and publisher of the Document as given on its Title Page, 40858 then add an item describing the Modified Version as stated in 40859 the previous sentence. 40860 40861 J. Preserve the network location, if any, given in the Document 40862 for public access to a Transparent copy of the Document, and 40863 likewise the network locations given in the Document for 40864 previous versions it was based on. These may be placed in 40865 the "History" section. You may omit a network location for a 40866 work that was published at least four years before the 40867 Document itself, or if the original publisher of the version 40868 it refers to gives permission. 40869 40870 K. For any section Entitled "Acknowledgements" or "Dedications", 40871 Preserve the Title of the section, and preserve in the 40872 section all the substance and tone of each of the contributor 40873 acknowledgements and/or dedications given therein. 40874 40875 L. Preserve all the Invariant Sections of the Document, 40876 unaltered in their text and in their titles. Section numbers 40877 or the equivalent are not considered part of the section 40878 titles. 40879 40880 M. Delete any section Entitled "Endorsements". Such a section 40881 may not be included in the Modified Version. 40882 40883 N. Do not retitle any existing section to be Entitled 40884 "Endorsements" or to conflict in title with any Invariant 40885 Section. 40886 40887 O. Preserve any Warranty Disclaimers. 40888 40889 If the Modified Version includes new front-matter sections or 40890 appendices that qualify as Secondary Sections and contain no 40891 material copied from the Document, you may at your option 40892 designate some or all of these sections as invariant. To do this, 40893 add their titles to the list of Invariant Sections in the Modified 40894 Version's license notice. These titles must be distinct from any 40895 other section titles. 40896 40897 You may add a section Entitled "Endorsements", provided it contains 40898 nothing but endorsements of your Modified Version by various 40899 parties--for example, statements of peer review or that the text 40900 has been approved by an organization as the authoritative 40901 definition of a standard. 40902 40903 You may add a passage of up to five words as a Front-Cover Text, 40904 and a passage of up to 25 words as a Back-Cover Text, to the end 40905 of the list of Cover Texts in the Modified Version. Only one 40906 passage of Front-Cover Text and one of Back-Cover Text may be 40907 added by (or through arrangements made by) any one entity. If the 40908 Document already includes a cover text for the same cover, 40909 previously added by you or by arrangement made by the same entity 40910 you are acting on behalf of, you may not add another; but you may 40911 replace the old one, on explicit permission from the previous 40912 publisher that added the old one. 40913 40914 The author(s) and publisher(s) of the Document do not by this 40915 License give permission to use their names for publicity for or to 40916 assert or imply endorsement of any Modified Version. 40917 40918 5. COMBINING DOCUMENTS 40919 40920 You may combine the Document with other documents released under 40921 this License, under the terms defined in section 4 above for 40922 modified versions, provided that you include in the combination 40923 all of the Invariant Sections of all of the original documents, 40924 unmodified, and list them all as Invariant Sections of your 40925 combined work in its license notice, and that you preserve all 40926 their Warranty Disclaimers. 40927 40928 The combined work need only contain one copy of this License, and 40929 multiple identical Invariant Sections may be replaced with a single 40930 copy. If there are multiple Invariant Sections with the same name 40931 but different contents, make the title of each such section unique 40932 by adding at the end of it, in parentheses, the name of the 40933 original author or publisher of that section if known, or else a 40934 unique number. Make the same adjustment to the section titles in 40935 the list of Invariant Sections in the license notice of the 40936 combined work. 40937 40938 In the combination, you must combine any sections Entitled 40939 "History" in the various original documents, forming one section 40940 Entitled "History"; likewise combine any sections Entitled 40941 "Acknowledgements", and any sections Entitled "Dedications". You 40942 must delete all sections Entitled "Endorsements." 40943 40944 6. COLLECTIONS OF DOCUMENTS 40945 40946 You may make a collection consisting of the Document and other 40947 documents released under this License, and replace the individual 40948 copies of this License in the various documents with a single copy 40949 that is included in the collection, provided that you follow the 40950 rules of this License for verbatim copying of each of the 40951 documents in all other respects. 40952 40953 You may extract a single document from such a collection, and 40954 distribute it individually under this License, provided you insert 40955 a copy of this License into the extracted document, and follow 40956 this License in all other respects regarding verbatim copying of 40957 that document. 40958 40959 7. AGGREGATION WITH INDEPENDENT WORKS 40960 40961 A compilation of the Document or its derivatives with other 40962 separate and independent documents or works, in or on a volume of 40963 a storage or distribution medium, is called an "aggregate" if the 40964 copyright resulting from the compilation is not used to limit the 40965 legal rights of the compilation's users beyond what the individual 40966 works permit. When the Document is included in an aggregate, this 40967 License does not apply to the other works in the aggregate which 40968 are not themselves derivative works of the Document. 40969 40970 If the Cover Text requirement of section 3 is applicable to these 40971 copies of the Document, then if the Document is less than one half 40972 of the entire aggregate, the Document's Cover Texts may be placed 40973 on covers that bracket the Document within the aggregate, or the 40974 electronic equivalent of covers if the Document is in electronic 40975 form. Otherwise they must appear on printed covers that bracket 40976 the whole aggregate. 40977 40978 8. TRANSLATION 40979 40980 Translation is considered a kind of modification, so you may 40981 distribute translations of the Document under the terms of section 40982 4. Replacing Invariant Sections with translations requires special 40983 permission from their copyright holders, but you may include 40984 translations of some or all Invariant Sections in addition to the 40985 original versions of these Invariant Sections. You may include a 40986 translation of this License, and all the license notices in the 40987 Document, and any Warranty Disclaimers, provided that you also 40988 include the original English version of this License and the 40989 original versions of those notices and disclaimers. In case of a 40990 disagreement between the translation and the original version of 40991 this License or a notice or disclaimer, the original version will 40992 prevail. 40993 40994 If a section in the Document is Entitled "Acknowledgements", 40995 "Dedications", or "History", the requirement (section 4) to 40996 Preserve its Title (section 1) will typically require changing the 40997 actual title. 40998 40999 9. TERMINATION 41000 41001 You may not copy, modify, sublicense, or distribute the Document 41002 except as expressly provided under this License. Any attempt 41003 otherwise to copy, modify, sublicense, or distribute it is void, 41004 and will automatically terminate your rights under this License. 41005 41006 However, if you cease all violation of this License, then your 41007 license from a particular copyright holder is reinstated (a) 41008 provisionally, unless and until the copyright holder explicitly 41009 and finally terminates your license, and (b) permanently, if the 41010 copyright holder fails to notify you of the violation by some 41011 reasonable means prior to 60 days after the cessation. 41012 41013 Moreover, your license from a particular copyright holder is 41014 reinstated permanently if the copyright holder notifies you of the 41015 violation by some reasonable means, this is the first time you have 41016 received notice of violation of this License (for any work) from 41017 that copyright holder, and you cure the violation prior to 30 days 41018 after your receipt of the notice. 41019 41020 Termination of your rights under this section does not terminate 41021 the licenses of parties who have received copies or rights from 41022 you under this License. If your rights have been terminated and 41023 not permanently reinstated, receipt of a copy of some or all of 41024 the same material does not give you any rights to use it. 41025 41026 10. FUTURE REVISIONS OF THIS LICENSE 41027 41028 The Free Software Foundation may publish new, revised versions of 41029 the GNU Free Documentation License from time to time. Such new 41030 versions will be similar in spirit to the present version, but may 41031 differ in detail to address new problems or concerns. See 41032 `http://www.gnu.org/copyleft/'. 41033 41034 Each version of the License is given a distinguishing version 41035 number. If the Document specifies that a particular numbered 41036 version of this License "or any later version" applies to it, you 41037 have the option of following the terms and conditions either of 41038 that specified version or of any later version that has been 41039 published (not as a draft) by the Free Software Foundation. If 41040 the Document does not specify a version number of this License, 41041 you may choose any version ever published (not as a draft) by the 41042 Free Software Foundation. If the Document specifies that a proxy 41043 can decide which future versions of this License can be used, that 41044 proxy's public statement of acceptance of a version permanently 41045 authorizes you to choose that version for the Document. 41046 41047 11. RELICENSING 41048 41049 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 41050 World Wide Web server that publishes copyrightable works and also 41051 provides prominent facilities for anybody to edit those works. A 41052 public wiki that anybody can edit is an example of such a server. 41053 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 41054 site means any set of copyrightable works thus published on the MMC 41055 site. 41056 41057 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 41058 license published by Creative Commons Corporation, a not-for-profit 41059 corporation with a principal place of business in San Francisco, 41060 California, as well as future copyleft versions of that license 41061 published by that same organization. 41062 41063 "Incorporate" means to publish or republish a Document, in whole or 41064 in part, as part of another Document. 41065 41066 An MMC is "eligible for relicensing" if it is licensed under this 41067 License, and if all works that were first published under this 41068 License somewhere other than this MMC, and subsequently 41069 incorporated in whole or in part into the MMC, (1) had no cover 41070 texts or invariant sections, and (2) were thus incorporated prior 41071 to November 1, 2008. 41072 41073 The operator of an MMC Site may republish an MMC contained in the 41074 site under CC-BY-SA on the same site at any time before August 1, 41075 2009, provided the MMC is eligible for relicensing. 41076 41077 41078 ADDENDUM: How to use this License for your documents 41079 ==================================================== 41080 41081 To use this License in a document you have written, include a copy of 41082 the License in the document and put the following copyright and license 41083 notices just after the title page: 41084 41085 Copyright (C) YEAR YOUR NAME. 41086 Permission is granted to copy, distribute and/or modify this document 41087 under the terms of the GNU Free Documentation License, Version 1.3 41088 or any later version published by the Free Software Foundation; 41089 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 41090 Texts. A copy of the license is included in the section entitled ``GNU 41091 Free Documentation License''. 41092 41093 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 41094 replace the "with...Texts." line with this: 41095 41096 with the Invariant Sections being LIST THEIR TITLES, with 41097 the Front-Cover Texts being LIST, and with the Back-Cover Texts 41098 being LIST. 41099 41100 If you have Invariant Sections without Cover Texts, or some other 41101 combination of the three, merge those two alternatives to suit the 41102 situation. 41103 41104 If your document contains nontrivial examples of program code, we 41105 recommend releasing these examples in parallel under your choice of 41106 free software license, such as the GNU General Public License, to 41107 permit their use in free software. 41108 41109 41110 File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 41111 41112 Contributors to GCC 41113 ******************* 41114 41115 The GCC project would like to thank its many contributors. Without 41116 them the project would not have been nearly as successful as it has 41117 been. Any omissions in this list are accidental. Feel free to contact 41118 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 41119 some of your contributions are not listed. Please keep this list in 41120 alphabetical order. 41121 41122 * Analog Devices helped implement the support for complex data types 41123 and iterators. 41124 41125 * John David Anglin for threading-related fixes and improvements to 41126 libstdc++-v3, and the HP-UX port. 41127 41128 * James van Artsdalen wrote the code that makes efficient use of the 41129 Intel 80387 register stack. 41130 41131 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 41132 Series port. 41133 41134 * Alasdair Baird for various bug fixes. 41135 41136 * Giovanni Bajo for analyzing lots of complicated C++ problem 41137 reports. 41138 41139 * Peter Barada for his work to improve code generation for new 41140 ColdFire cores. 41141 41142 * Gerald Baumgartner added the signature extension to the C++ front 41143 end. 41144 41145 * Godmar Back for his Java improvements and encouragement. 41146 41147 * Scott Bambrough for help porting the Java compiler. 41148 41149 * Wolfgang Bangerth for processing tons of bug reports. 41150 41151 * Jon Beniston for his Microsoft Windows port of Java and port to 41152 Lattice Mico32. 41153 41154 * Daniel Berlin for better DWARF2 support, faster/better 41155 optimizations, improved alias analysis, plus migrating GCC to 41156 Bugzilla. 41157 41158 * Geoff Berry for his Java object serialization work and various 41159 patches. 41160 41161 * David Binderman tests weekly snapshots of GCC trunk against Fedora 41162 Rawhide for several architectures. 41163 41164 * Uros Bizjak for the implementation of x87 math built-in functions 41165 and for various middle end and i386 back end improvements and bug 41166 fixes. 41167 41168 * Eric Blake for helping to make GCJ and libgcj conform to the 41169 specifications. 41170 41171 * Janne Blomqvist for contributions to GNU Fortran. 41172 41173 * Segher Boessenkool for various fixes. 41174 41175 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 41176 other Java work. 41177 41178 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 41179 miscellaneous clean-ups. 41180 41181 * Steven Bosscher for integrating the GNU Fortran front end into GCC 41182 and for contributing to the tree-ssa branch. 41183 41184 * Eric Botcazou for fixing middle- and backend bugs left and right. 41185 41186 * Per Bothner for his direction via the steering committee and 41187 various improvements to the infrastructure for supporting new 41188 languages. Chill front end implementation. Initial 41189 implementations of cpplib, fix-header, config.guess, libio, and 41190 past C++ library (libg++) maintainer. Dreaming up, designing and 41191 implementing much of GCJ. 41192 41193 * Devon Bowen helped port GCC to the Tahoe. 41194 41195 * Don Bowman for mips-vxworks contributions. 41196 41197 * Dave Brolley for work on cpplib and Chill. 41198 41199 * Paul Brook for work on the ARM architecture and maintaining GNU 41200 Fortran. 41201 41202 * Robert Brown implemented the support for Encore 32000 systems. 41203 41204 * Christian Bruel for improvements to local store elimination. 41205 41206 * Herman A.J. ten Brugge for various fixes. 41207 41208 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 41209 FAQ. 41210 41211 * Joe Buck for his direction via the steering committee. 41212 41213 * Craig Burley for leadership of the G77 Fortran effort. 41214 41215 * Stephan Buys for contributing Doxygen notes for libstdc++. 41216 41217 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 41218 to the C++ strings, streambufs and formatted I/O, hard detective 41219 work on the frustrating localization issues, and keeping up with 41220 the problem reports. 41221 41222 * John Carr for his alias work, SPARC hacking, infrastructure 41223 improvements, previous contributions to the steering committee, 41224 loop optimizations, etc. 41225 41226 * Stephane Carrez for 68HC11 and 68HC12 ports. 41227 41228 * Steve Chamberlain for support for the Renesas SH and H8 processors 41229 and the PicoJava processor, and for GCJ config fixes. 41230 41231 * Glenn Chambers for help with the GCJ FAQ. 41232 41233 * John-Marc Chandonia for various libgcj patches. 41234 41235 * Denis Chertykov for contributing and maintaining the AVR port, the 41236 first GCC port for an 8-bit architecture. 41237 41238 * Scott Christley for his Objective-C contributions. 41239 41240 * Eric Christopher for his Java porting help and clean-ups. 41241 41242 * Branko Cibej for more warning contributions. 41243 41244 * The GNU Classpath project for all of their merged runtime code. 41245 41246 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 41247 and other random hacking. 41248 41249 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 41250 41251 * R. Kelley Cook for making GCC buildable from a read-only directory 41252 as well as other miscellaneous build process and documentation 41253 clean-ups. 41254 41255 * Ralf Corsepius for SH testing and minor bug fixing. 41256 41257 * Stan Cox for care and feeding of the x86 port and lots of behind 41258 the scenes hacking. 41259 41260 * Alex Crain provided changes for the 3b1. 41261 41262 * Ian Dall for major improvements to the NS32k port. 41263 41264 * Paul Dale for his work to add uClinux platform support to the m68k 41265 backend. 41266 41267 * Dario Dariol contributed the four varieties of sample programs 41268 that print a copy of their source. 41269 41270 * Russell Davidson for fstream and stringstream fixes in libstdc++. 41271 41272 * Bud Davis for work on the G77 and GNU Fortran compilers. 41273 41274 * Mo DeJong for GCJ and libgcj bug fixes. 41275 41276 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 41277 various bug fixes, and the M32C, MeP, and RL78 ports. 41278 41279 * Arnaud Desitter for helping to debug GNU Fortran. 41280 41281 * Gabriel Dos Reis for contributions to G++, contributions and 41282 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 41283 including `valarray<>', `complex<>', maintaining the numerics 41284 library (including that pesky `<limits>' :-) and keeping 41285 up-to-date anything to do with numbers. 41286 41287 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 41288 ISO C99 support, CFG dumping support, etc., plus support of the 41289 C++ runtime libraries including for all kinds of C interface 41290 issues, contributing and maintaining `complex<>', sanity checking 41291 and disbursement, configuration architecture, libio maintenance, 41292 and early math work. 41293 41294 * Zdenek Dvorak for a new loop unroller and various fixes. 41295 41296 * Michael Eager for his work on the Xilinx MicroBlaze port. 41297 41298 * Richard Earnshaw for his ongoing work with the ARM. 41299 41300 * David Edelsohn for his direction via the steering committee, 41301 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 41302 loop changes, doing the entire AIX port of libstdc++ with his bare 41303 hands, and for ensuring GCC properly keeps working on AIX. 41304 41305 * Kevin Ediger for the floating point formatting of num_put::do_put 41306 in libstdc++. 41307 41308 * Phil Edwards for libstdc++ work including configuration hackery, 41309 documentation maintainer, chief breaker of the web pages, the 41310 occasional iostream bug fix, and work on shared library symbol 41311 versioning. 41312 41313 * Paul Eggert for random hacking all over GCC. 41314 41315 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 41316 configuration support for locales and fstream-related fixes. 41317 41318 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 41319 iostreams. 41320 41321 * Christian Ehrhardt for dealing with bug reports. 41322 41323 * Ben Elliston for his work to move the Objective-C runtime into its 41324 own subdirectory and for his work on autoconf. 41325 41326 * Revital Eres for work on the PowerPC 750CL port. 41327 41328 * Marc Espie for OpenBSD support. 41329 41330 * Doug Evans for much of the global optimization framework, arc, 41331 m32r, and SPARC work. 41332 41333 * Christopher Faylor for his work on the Cygwin port and for caring 41334 and feeding the gcc.gnu.org box and saving its users tons of spam. 41335 41336 * Fred Fish for BeOS support and Ada fixes. 41337 41338 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 41339 41340 * Peter Gerwinski for various bug fixes and the Pascal front end. 41341 41342 * Kaveh R. Ghazi for his direction via the steering committee, 41343 amazing work to make `-W -Wall -W* -Werror' useful, and testing 41344 GCC on a plethora of platforms. Kaveh extends his gratitude to 41345 the CAIP Center at Rutgers University for providing him with 41346 computing resources to work on Free Software from the late 1980s 41347 to 2010. 41348 41349 * John Gilmore for a donation to the FSF earmarked improving GNU 41350 Java. 41351 41352 * Judy Goldberg for c++ contributions. 41353 41354 * Torbjorn Granlund for various fixes and the c-torture testsuite, 41355 multiply- and divide-by-constant optimization, improved long long 41356 support, improved leaf function register allocation, and his 41357 direction via the steering committee. 41358 41359 * Anthony Green for his `-Os' contributions, the moxie port, and 41360 Java front end work. 41361 41362 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 41363 Java code. 41364 41365 * Michael K. Gschwind contributed the port to the PDP-11. 41366 41367 * Richard Guenther for his ongoing middle-end contributions and bug 41368 fixes and for release management. 41369 41370 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 41371 the support for Dwarf symbolic debugging information, and much of 41372 the support for System V Release 4. He has also worked heavily on 41373 the Intel 386 and 860 support. 41374 41375 * Sumanth Gundapaneni for contributing the CR16 port. 41376 41377 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 41378 GCSE. 41379 41380 * Bruno Haible for improvements in the runtime overhead for EH, new 41381 warnings and assorted bug fixes. 41382 41383 * Andrew Haley for his amazing Java compiler and library efforts. 41384 41385 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 41386 series 300. 41387 41388 * Michael Hayes for various thankless work he's done trying to get 41389 the c30/c40 ports functional. Lots of loop and unroll 41390 improvements and fixes. 41391 41392 * Dara Hazeghi for wading through myriads of target-specific bug 41393 reports. 41394 41395 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 41396 41397 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 41398 work, loop opts, and generally fixing lots of old problems we've 41399 ignored for years, flow rewrite and lots of further stuff, 41400 including reviewing tons of patches. 41401 41402 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 41403 various fixes. 41404 41405 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 41406 contributed the support for the Sony NEWS machine. 41407 41408 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 41409 various fixes. 41410 41411 * Katherine Holcomb for work on GNU Fortran. 41412 41413 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 41414 of testing and bug fixing, particularly of GCC configury code. 41415 41416 * Steve Holmgren for MachTen patches. 41417 41418 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 41419 41420 * Jan Hubicka for his x86 port improvements. 41421 41422 * Falk Hueffner for working on C and optimization bug reports. 41423 41424 * Bernardo Innocenti for his m68k work, including merging of 41425 ColdFire improvements and uClinux support. 41426 41427 * Christian Iseli for various bug fixes. 41428 41429 * Kamil Iskra for general m68k hacking. 41430 41431 * Lee Iverson for random fixes and MIPS testing. 41432 41433 * Andreas Jaeger for testing and benchmarking of GCC and various bug 41434 fixes. 41435 41436 * Jakub Jelinek for his SPARC work and sibling call optimizations as 41437 well as lots of bug fixes and test cases, and for improving the 41438 Java build system. 41439 41440 * Janis Johnson for ia64 testing and fixes, her quality improvement 41441 sidetracks, and web page maintenance. 41442 41443 * Kean Johnston for SCO OpenServer support and various fixes. 41444 41445 * Tim Josling for the sample language treelang based originally on 41446 Richard Kenner's "toy" language. 41447 41448 * Nicolai Josuttis for additional libstdc++ documentation. 41449 41450 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 41451 target. 41452 41453 * Steven G. Kargl for work on GNU Fortran. 41454 41455 * David Kashtan of SRI adapted GCC to VMS. 41456 41457 * Ryszard Kabatek for many, many libstdc++ bug fixes and 41458 optimizations of strings, especially member functions, and for 41459 auto_ptr fixes. 41460 41461 * Geoffrey Keating for his ongoing work to make the PPC work for 41462 GNU/Linux and his automatic regression tester. 41463 41464 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 41465 work in just about every part of libstdc++. 41466 41467 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 41468 MIL-STD-1750A. 41469 41470 * Richard Kenner of the New York University Ultracomputer Research 41471 Laboratory wrote the machine descriptions for the AMD 29000, the 41472 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 41473 support for instruction attributes. He also made changes to 41474 better support RISC processors including changes to common 41475 subexpression elimination, strength reduction, function calling 41476 sequence handling, and condition code support, in addition to 41477 generalizing the code for frame pointer elimination and delay slot 41478 scheduling. Richard Kenner was also the head maintainer of GCC 41479 for several years. 41480 41481 * Mumit Khan for various contributions to the Cygwin and Mingw32 41482 ports and maintaining binary releases for Microsoft Windows hosts, 41483 and for massive libstdc++ porting work to Cygwin/Mingw32. 41484 41485 * Robin Kirkham for cpu32 support. 41486 41487 * Mark Klein for PA improvements. 41488 41489 * Thomas Koenig for various bug fixes. 41490 41491 * Bruce Korb for the new and improved fixincludes code. 41492 41493 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 41494 effort. 41495 41496 * Charles LaBrec contributed the support for the Integrated Solutions 41497 68020 system. 41498 41499 * Asher Langton and Mike Kumbera for contributing Cray pointer 41500 support to GNU Fortran, and for other GNU Fortran improvements. 41501 41502 * Jeff Law for his direction via the steering committee, 41503 coordinating the entire egcs project and GCC 2.95, rolling out 41504 snapshots and releases, handling merges from GCC2, reviewing tons 41505 of patches that might have fallen through the cracks else, and 41506 random but extensive hacking. 41507 41508 * Walter Lee for work on the TILE-Gx and TILEPro ports. 41509 41510 * Marc Lehmann for his direction via the steering committee and 41511 helping with analysis and improvements of x86 performance. 41512 41513 * Victor Leikehman for work on GNU Fortran. 41514 41515 * Ted Lemon wrote parts of the RTL reader and printer. 41516 41517 * Kriang Lerdsuwanakij for C++ improvements including template as 41518 template parameter support, and many C++ fixes. 41519 41520 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 41521 and random work on the Java front end. 41522 41523 * Alain Lichnewsky ported GCC to the MIPS CPU. 41524 41525 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 41526 and patches. 41527 41528 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 41529 41530 * Chen Liqin for various S+core related fixes/improvement, and for 41531 maintaining the S+core port. 41532 41533 * Weiwen Liu for testing and various bug fixes. 41534 41535 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 41536 diagnostics fixes and improvements. 41537 41538 * Dave Love for his ongoing work with the Fortran front end and 41539 runtime libraries. 41540 41541 * Martin von Lo"wis for internal consistency checking infrastructure, 41542 various C++ improvements including namespace support, and tons of 41543 assistance with libstdc++/compiler merges. 41544 41545 * H.J. Lu for his previous contributions to the steering committee, 41546 many x86 bug reports, prototype patches, and keeping the GNU/Linux 41547 ports working. 41548 41549 * Greg McGary for random fixes and (someday) bounded pointers. 41550 41551 * Andrew MacLeod for his ongoing work in building a real EH system, 41552 various code generation improvements, work on the global 41553 optimizer, etc. 41554 41555 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 41556 hacking improvements to compile-time performance, overall 41557 knowledge and direction in the area of instruction scheduling, and 41558 design and implementation of the automaton based instruction 41559 scheduler. 41560 41561 * Bob Manson for his behind the scenes work on dejagnu. 41562 41563 * Philip Martin for lots of libstdc++ string and vector iterator 41564 fixes and improvements, and string clean up and testsuites. 41565 41566 * All of the Mauve project contributors, for Java test code. 41567 41568 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 41569 41570 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 41571 41572 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 41573 powerpc, haifa, ECOFF debug support, and other assorted hacking. 41574 41575 * Jason Merrill for his direction via the steering committee and 41576 leading the G++ effort. 41577 41578 * Martin Michlmayr for testing GCC on several architectures using the 41579 entire Debian archive. 41580 41581 * David Miller for his direction via the steering committee, lots of 41582 SPARC work, improvements in jump.c and interfacing with the Linux 41583 kernel developers. 41584 41585 * Gary Miller ported GCC to Charles River Data Systems machines. 41586 41587 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 41588 the entire libstdc++ testsuite namespace-compatible. 41589 41590 * Mark Mitchell for his direction via the steering committee, 41591 mountains of C++ work, load/store hoisting out of loops, alias 41592 analysis improvements, ISO C `restrict' support, and serving as 41593 release manager from 2000 to 2011. 41594 41595 * Alan Modra for various GNU/Linux bits and testing. 41596 41597 * Toon Moene for his direction via the steering committee, Fortran 41598 maintenance, and his ongoing work to make us make Fortran run fast. 41599 41600 * Jason Molenda for major help in the care and feeding of all the 41601 services on the gcc.gnu.org (formerly egcs.cygnus.com) 41602 machine--mail, web services, ftp services, etc etc. Doing all 41603 this work on scrap paper and the backs of envelopes would have 41604 been... difficult. 41605 41606 * Catherine Moore for fixing various ugly problems we have sent her 41607 way, including the haifa bug which was killing the Alpha & PowerPC 41608 Linux kernels. 41609 41610 * Mike Moreton for his various Java patches. 41611 41612 * David Mosberger-Tang for various Alpha improvements, and for the 41613 initial IA-64 port. 41614 41615 * Stephen Moshier contributed the floating point emulator that 41616 assists in cross-compilation and permits support for floating 41617 point numbers wider than 64 bits and for ISO C99 support. 41618 41619 * Bill Moyer for his behind the scenes work on various issues. 41620 41621 * Philippe De Muyter for his work on the m68k port. 41622 41623 * Joseph S. Myers for his work on the PDP-11 port, format checking 41624 and ISO C99 support, and continuous emphasis on (and contributions 41625 to) documentation. 41626 41627 * Nathan Myers for his work on libstdc++-v3: architecture and 41628 authorship through the first three snapshots, including 41629 implementation of locale infrastructure, string, shadow C headers, 41630 and the initial project documentation (DESIGN, CHECKLIST, and so 41631 forth). Later, more work on MT-safe string and shadow headers. 41632 41633 * Felix Natter for documentation on porting libstdc++. 41634 41635 * Nathanael Nerode for cleaning up the configuration/build process. 41636 41637 * NeXT, Inc. donated the front end that supports the Objective-C 41638 language. 41639 41640 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 41641 the search engine setup, various documentation fixes and other 41642 small fixes. 41643 41644 * Geoff Noer for his work on getting cygwin native builds working. 41645 41646 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 41647 tracking web pages, GIMPLE tuples, and assorted fixes. 41648 41649 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 41650 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 41651 related infrastructure improvements. 41652 41653 * Alexandre Oliva for various build infrastructure improvements, 41654 scripts and amazing testing work, including keeping libtool issues 41655 sane and happy. 41656 41657 * Stefan Olsson for work on mt_alloc. 41658 41659 * Melissa O'Neill for various NeXT fixes. 41660 41661 * Rainer Orth for random MIPS work, including improvements to GCC's 41662 o32 ABI support, improvements to dejagnu's MIPS support, Java 41663 configuration clean-ups and porting work, and maintaining the 41664 IRIX, Solaris 2, and Tru64 UNIX ports. 41665 41666 * Hartmut Penner for work on the s390 port. 41667 41668 * Paul Petersen wrote the machine description for the Alliant FX/8. 41669 41670 * Alexandre Petit-Bianco for implementing much of the Java compiler 41671 and continued Java maintainership. 41672 41673 * Matthias Pfaller for major improvements to the NS32k port. 41674 41675 * Gerald Pfeifer for his direction via the steering committee, 41676 pointing out lots of problems we need to solve, maintenance of the 41677 web pages, and taking care of documentation maintenance in general. 41678 41679 * Andrew Pinski for processing bug reports by the dozen. 41680 41681 * Ovidiu Predescu for his work on the Objective-C front end and 41682 runtime libraries. 41683 41684 * Jerry Quinn for major performance improvements in C++ formatted 41685 I/O. 41686 41687 * Ken Raeburn for various improvements to checker, MIPS ports and 41688 various cleanups in the compiler. 41689 41690 * Rolf W. Rasmussen for hacking on AWT. 41691 41692 * David Reese of Sun Microsystems contributed to the Solaris on 41693 PowerPC port. 41694 41695 * Volker Reichelt for keeping up with the problem reports. 41696 41697 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 41698 hacking and developing and maintaining the Epiphany port. 41699 41700 * Loren J. Rittle for improvements to libstdc++-v3 including the 41701 FreeBSD port, threading fixes, thread-related configury changes, 41702 critical threading documentation, and solutions to really tricky 41703 I/O problems, as well as keeping GCC properly working on FreeBSD 41704 and continuous testing. 41705 41706 * Craig Rodrigues for processing tons of bug reports. 41707 41708 * Ola Ro"nnerup for work on mt_alloc. 41709 41710 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 41711 41712 * David Ronis inspired and encouraged Craig to rewrite the G77 41713 documentation in texinfo format by contributing a first pass at a 41714 translation of the old `g77-0.5.16/f/DOC' file. 41715 41716 * Ken Rose for fixes to GCC's delay slot filling code. 41717 41718 * Paul Rubin wrote most of the preprocessor. 41719 41720 * Pe'tur Runo'lfsson for major performance improvements in C++ 41721 formatted I/O and large file support in C++ filebuf. 41722 41723 * Chip Salzenberg for libstdc++ patches and improvements to locales, 41724 traits, Makefiles, libio, libtool hackery, and "long long" support. 41725 41726 * Juha Sarlin for improvements to the H8 code generator. 41727 41728 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 41729 300. 41730 41731 * Roger Sayle for improvements to constant folding and GCC's RTL 41732 optimizers as well as for fixing numerous bugs. 41733 41734 * Bradley Schatz for his work on the GCJ FAQ. 41735 41736 * Peter Schauer wrote the code to allow debugging to work on the 41737 Alpha. 41738 41739 * William Schelter did most of the work on the Intel 80386 support. 41740 41741 * Tobias Schlu"ter for work on GNU Fortran. 41742 41743 * Bernd Schmidt for various code generation improvements and major 41744 work in the reload pass, serving as release manager for GCC 41745 2.95.3, and work on the Blackfin and C6X ports. 41746 41747 * Peter Schmid for constant testing of libstdc++--especially 41748 application testing, going above and beyond what was requested for 41749 the release criteria--and libstdc++ header file tweaks. 41750 41751 * Jason Schroeder for jcf-dump patches. 41752 41753 * Andreas Schwab for his work on the m68k port. 41754 41755 * Lars Segerlund for work on GNU Fortran. 41756 41757 * Dodji Seketeli for numerous C++ bug fixes and debug info 41758 improvements. 41759 41760 * Joel Sherrill for his direction via the steering committee, RTEMS 41761 contributions and RTEMS testing. 41762 41763 * Nathan Sidwell for many C++ fixes/improvements. 41764 41765 * Jeffrey Siegal for helping RMS with the original design of GCC, 41766 some code which handles the parse tree and RTL data structures, 41767 constant folding and help with the original VAX & m68k ports. 41768 41769 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 41770 from the LWG (thereby keeping GCC in line with updates from the 41771 ISO). 41772 41773 * Franz Sirl for his ongoing work with making the PPC port stable 41774 for GNU/Linux. 41775 41776 * Andrey Slepuhin for assorted AIX hacking. 41777 41778 * Trevor Smigiel for contributing the SPU port. 41779 41780 * Christopher Smith did the port for Convex machines. 41781 41782 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 41783 41784 * Randy Smith finished the Sun FPA support. 41785 41786 * Scott Snyder for queue, iterator, istream, and string fixes and 41787 libstdc++ testsuite entries. Also for providing the patch to G77 41788 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 41789 `LOGICAL*1'. 41790 41791 * Zdenek Sojka for running automated regression testing of GCC and 41792 reporting numerous bugs. 41793 41794 * Jayant Sonar for contributing the CR16 port. 41795 41796 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 41797 41798 * Richard Stallman, for writing the original GCC and launching the 41799 GNU project. 41800 41801 * Jan Stein of the Chalmers Computer Society provided support for 41802 Genix, as well as part of the 32000 machine description. 41803 41804 * Nigel Stephens for various mips16 related fixes/improvements. 41805 41806 * Jonathan Stone wrote the machine description for the Pyramid 41807 computer. 41808 41809 * Graham Stott for various infrastructure improvements. 41810 41811 * John Stracke for his Java HTTP protocol fixes. 41812 41813 * Mike Stump for his Elxsi port, G++ contributions over the years 41814 and more recently his vxworks contributions 41815 41816 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 41817 41818 * Shigeya Suzuki for this fixes for the bsdi platforms. 41819 41820 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 41821 support, general configury hacking, fixincludes, etc. 41822 41823 * Holger Teutsch provided the support for the Clipper CPU. 41824 41825 * Gary Thomas for his ongoing work to make the PPC work for 41826 GNU/Linux. 41827 41828 * Philipp Thomas for random bug fixes throughout the compiler 41829 41830 * Jason Thorpe for thread support in libstdc++ on NetBSD. 41831 41832 * Kresten Krab Thorup wrote the run time support for the Objective-C 41833 language and the fantastic Java bytecode interpreter. 41834 41835 * Michael Tiemann for random bug fixes, the first instruction 41836 scheduler, initial C++ support, function integration, NS32k, SPARC 41837 and M88k machine description work, delay slot scheduling. 41838 41839 * Andreas Tobler for his work porting libgcj to Darwin. 41840 41841 * Teemu Torma for thread safe exception handling support. 41842 41843 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 41844 definitions, and of the VAX machine description. 41845 41846 * Daniel Towner and Hariharan Sandanagobalane contributed and 41847 maintain the picoChip port. 41848 41849 * Tom Tromey for internationalization support and for his many Java 41850 contributions and libgcj maintainership. 41851 41852 * Lassi Tuura for improvements to config.guess to determine HP 41853 processor types. 41854 41855 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 41856 41857 * Andy Vaught for the design and initial implementation of the GNU 41858 Fortran front end. 41859 41860 * Brent Verner for work with the libstdc++ cshadow files and their 41861 associated configure steps. 41862 41863 * Todd Vierling for contributions for NetBSD ports. 41864 41865 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 41866 guidance. 41867 41868 * Dean Wakerley for converting the install documentation from HTML 41869 to texinfo in time for GCC 3.0. 41870 41871 * Krister Walfridsson for random bug fixes. 41872 41873 * Feng Wang for contributions to GNU Fortran. 41874 41875 * Stephen M. Webb for time and effort on making libstdc++ shadow 41876 files work with the tricky Solaris 8+ headers, and for pushing the 41877 build-time header tree. 41878 41879 * John Wehle for various improvements for the x86 code generator, 41880 related infrastructure improvements to help x86 code generation, 41881 value range propagation and other work, WE32k port. 41882 41883 * Ulrich Weigand for work on the s390 port. 41884 41885 * Zack Weinberg for major work on cpplib and various other bug fixes. 41886 41887 * Matt Welsh for help with Linux Threads support in GCJ. 41888 41889 * Urban Widmark for help fixing java.io. 41890 41891 * Mark Wielaard for new Java library code and his work integrating 41892 with Classpath. 41893 41894 * Dale Wiles helped port GCC to the Tahoe. 41895 41896 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 41897 41898 * Jim Wilson for his direction via the steering committee, tackling 41899 hard problems in various places that nobody else wanted to work 41900 on, strength reduction and other loop optimizations. 41901 41902 * Paul Woegerer and Tal Agmon for the CRX port. 41903 41904 * Carlo Wood for various fixes. 41905 41906 * Tom Wood for work on the m88k port. 41907 41908 * Canqun Yang for work on GNU Fortran. 41909 41910 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 41911 description for the Tron architecture (specifically, the Gmicro). 41912 41913 * Kevin Zachmann helped port GCC to the Tahoe. 41914 41915 * Ayal Zaks for Swing Modulo Scheduling (SMS). 41916 41917 * Xiaoqiang Zhang for work on GNU Fortran. 41918 41919 * Gilles Zunino for help porting Java to Irix. 41920 41921 41922 The following people are recognized for their contributions to GNAT, 41923 the Ada front end of GCC: 41924 * Bernard Banner 41925 41926 * Romain Berrendonner 41927 41928 * Geert Bosch 41929 41930 * Emmanuel Briot 41931 41932 * Joel Brobecker 41933 41934 * Ben Brosgol 41935 41936 * Vincent Celier 41937 41938 * Arnaud Charlet 41939 41940 * Chien Chieng 41941 41942 * Cyrille Comar 41943 41944 * Cyrille Crozes 41945 41946 * Robert Dewar 41947 41948 * Gary Dismukes 41949 41950 * Robert Duff 41951 41952 * Ed Falis 41953 41954 * Ramon Fernandez 41955 41956 * Sam Figueroa 41957 41958 * Vasiliy Fofanov 41959 41960 * Michael Friess 41961 41962 * Franco Gasperoni 41963 41964 * Ted Giering 41965 41966 * Matthew Gingell 41967 41968 * Laurent Guerby 41969 41970 * Jerome Guitton 41971 41972 * Olivier Hainque 41973 41974 * Jerome Hugues 41975 41976 * Hristian Kirtchev 41977 41978 * Jerome Lambourg 41979 41980 * Bruno Leclerc 41981 41982 * Albert Lee 41983 41984 * Sean McNeil 41985 41986 * Javier Miranda 41987 41988 * Laurent Nana 41989 41990 * Pascal Obry 41991 41992 * Dong-Ik Oh 41993 41994 * Laurent Pautet 41995 41996 * Brett Porter 41997 41998 * Thomas Quinot 41999 42000 * Nicolas Roche 42001 42002 * Pat Rogers 42003 42004 * Jose Ruiz 42005 42006 * Douglas Rupp 42007 42008 * Sergey Rybin 42009 42010 * Gail Schenker 42011 42012 * Ed Schonberg 42013 42014 * Nicolas Setton 42015 42016 * Samuel Tardieu 42017 42018 42019 The following people are recognized for their contributions of new 42020 features, bug reports, testing and integration of classpath/libgcj for 42021 GCC version 4.1: 42022 * Lillian Angel for `JTree' implementation and lots Free Swing 42023 additions and bug fixes. 42024 42025 * Wolfgang Baer for `GapContent' bug fixes. 42026 42027 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 42028 event fixes, lots of Free Swing work including `JTable' editing. 42029 42030 * Stuart Ballard for RMI constant fixes. 42031 42032 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 42033 42034 * Gary Benson for `MessageFormat' fixes. 42035 42036 * Daniel Bonniot for `Serialization' fixes. 42037 42038 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 42039 and `DOM xml:id' support. 42040 42041 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 42042 42043 * Archie Cobbs for build fixes, VM interface updates, 42044 `URLClassLoader' updates. 42045 42046 * Kelley Cook for build fixes. 42047 42048 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 42049 42050 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 42051 and improvements. 42052 42053 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 42054 2D support. Lots of imageio framework additions, lots of AWT and 42055 Free Swing bug fixes. 42056 42057 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 42058 fixes, better `Proxy' support, bug fixes and IKVM integration. 42059 42060 * Santiago Gala for `AccessControlContext' fixes. 42061 42062 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 42063 improvements. 42064 42065 * David Gilbert for `basic' and `metal' icon and plaf support and 42066 lots of documenting, Lots of Free Swing and metal theme additions. 42067 `MetalIconFactory' implementation. 42068 42069 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 42070 42071 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 42072 build speedups. 42073 42074 * Kim Ho for `JFileChooser' implementation. 42075 42076 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 42077 updates, `Serialization' fixes, `Properties' XML support and 42078 generic branch work, VMIntegration guide update. 42079 42080 * Bastiaan Huisman for `TimeZone' bug fixing. 42081 42082 * Andreas Jaeger for mprec updates. 42083 42084 * Paul Jenner for better `-Werror' support. 42085 42086 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 42087 42088 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 42089 bug fixes all over. Lots of Free Swing work including styled text. 42090 42091 * Simon Kitching for `String' cleanups and optimization suggestions. 42092 42093 * Michael Koch for configuration fixes, `Locale' updates, bug and 42094 build fixes. 42095 42096 * Guilhem Lavaux for configuration, thread and channel fixes and 42097 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 42098 42099 * David Lichteblau for JCL support library global/local reference 42100 cleanups. 42101 42102 * Aaron Luchko for JDWP updates and documentation fixes. 42103 42104 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 42105 features. 42106 42107 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 42108 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 42109 and implementing the Qt4 peers. 42110 42111 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 42112 `SystemLogger' and `FileHandler' rotate implementations, NIO 42113 `FileChannel.map' support, security and policy updates. 42114 42115 * Bryce McKinlay for RMI work. 42116 42117 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 42118 testing and documenting. 42119 42120 * Kalle Olavi Niemitalo for build fixes. 42121 42122 * Rainer Orth for build fixes. 42123 42124 * Andrew Overholt for `File' locking fixes. 42125 42126 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 42127 42128 * Olga Rodimina for `MenuSelectionManager' implementation. 42129 42130 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 42131 42132 * Julian Scheid for documentation updates and gjdoc support. 42133 42134 * Christian Schlichtherle for zip fixes and cleanups. 42135 42136 * Robert Schuster for documentation updates and beans fixes, 42137 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 42138 and URL, AWT and Free Swing bug fixes. 42139 42140 * Keith Seitz for lots of JDWP work. 42141 42142 * Christian Thalinger for 64-bit cleanups, Configuration and VM 42143 interface fixes and `CACAO' integration, `fdlibm' updates. 42144 42145 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 42146 42147 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 42148 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 42149 42150 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 42151 integration. `Qt4' build infrastructure, `SHA1PRNG' and 42152 `GdkPixbugDecoder' updates. 42153 42154 * Tom Tromey for Eclipse integration, generics work, lots of bug 42155 fixes and gcj integration including coordinating The Big Merge. 42156 42157 * Mark Wielaard for bug fixes, packaging and release management, 42158 `Clipboard' implementation, system call interrupts and network 42159 timeouts and `GdkPixpufDecoder' fixes. 42160 42161 42162 In addition to the above, all of which also contributed time and 42163 energy in testing GCC, we would like to thank the following for their 42164 contributions to testing: 42165 42166 * Michael Abd-El-Malek 42167 42168 * Thomas Arend 42169 42170 * Bonzo Armstrong 42171 42172 * Steven Ashe 42173 42174 * Chris Baldwin 42175 42176 * David Billinghurst 42177 42178 * Jim Blandy 42179 42180 * Stephane Bortzmeyer 42181 42182 * Horst von Brand 42183 42184 * Frank Braun 42185 42186 * Rodney Brown 42187 42188 * Sidney Cadot 42189 42190 * Bradford Castalia 42191 42192 * Robert Clark 42193 42194 * Jonathan Corbet 42195 42196 * Ralph Doncaster 42197 42198 * Richard Emberson 42199 42200 * Levente Farkas 42201 42202 * Graham Fawcett 42203 42204 * Mark Fernyhough 42205 42206 * Robert A. French 42207 42208 * Jo"rgen Freyh 42209 42210 * Mark K. Gardner 42211 42212 * Charles-Antoine Gauthier 42213 42214 * Yung Shing Gene 42215 42216 * David Gilbert 42217 42218 * Simon Gornall 42219 42220 * Fred Gray 42221 42222 * John Griffin 42223 42224 * Patrik Hagglund 42225 42226 * Phil Hargett 42227 42228 * Amancio Hasty 42229 42230 * Takafumi Hayashi 42231 42232 * Bryan W. Headley 42233 42234 * Kevin B. Hendricks 42235 42236 * Joep Jansen 42237 42238 * Christian Joensson 42239 42240 * Michel Kern 42241 42242 * David Kidd 42243 42244 * Tobias Kuipers 42245 42246 * Anand Krishnaswamy 42247 42248 * A. O. V. Le Blanc 42249 42250 * llewelly 42251 42252 * Damon Love 42253 42254 * Brad Lucier 42255 42256 * Matthias Klose 42257 42258 * Martin Knoblauch 42259 42260 * Rick Lutowski 42261 42262 * Jesse Macnish 42263 42264 * Stefan Morrell 42265 42266 * Anon A. Mous 42267 42268 * Matthias Mueller 42269 42270 * Pekka Nikander 42271 42272 * Rick Niles 42273 42274 * Jon Olson 42275 42276 * Magnus Persson 42277 42278 * Chris Pollard 42279 42280 * Richard Polton 42281 42282 * Derk Reefman 42283 42284 * David Rees 42285 42286 * Paul Reilly 42287 42288 * Tom Reilly 42289 42290 * Torsten Rueger 42291 42292 * Danny Sadinoff 42293 42294 * Marc Schifer 42295 42296 * Erik Schnetter 42297 42298 * Wayne K. Schroll 42299 42300 * David Schuler 42301 42302 * Vin Shelton 42303 42304 * Tim Souder 42305 42306 * Adam Sulmicki 42307 42308 * Bill Thorson 42309 42310 * George Talbot 42311 42312 * Pedro A. M. Vazquez 42313 42314 * Gregory Warnes 42315 42316 * Ian Watson 42317 42318 * David E. Young 42319 42320 * And many others 42321 42322 And finally we'd like to thank everyone who uses the compiler, provides 42323 feedback and generally reminds us why we're doing this work in the first 42324 place. 42325 42326 42327 File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 42328 42329 Option Index 42330 ************ 42331 42332 GCC's command line options are indexed here without any initial `-' or 42333 `--'. Where an option has both positive and negative forms (such as 42334 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 42335 indexed under the most appropriate form; it may sometimes be useful to 42336 look up both forms. 42337 42338 [index] 42339 * Menu: 42340 42341 * fltrans: Internal flags. (line 18) 42342 * fltrans-output-list: Internal flags. (line 23) 42343 * fwpa: Internal flags. (line 9) 42344 * msoft-float: Soft float library routines. 42345 (line 6) 42346 42347 42348 File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 42349 42350 Concept Index 42351 ************* 42352 42353 [index] 42354 * Menu: 42355 42356 * ! in constraint: Multi-Alternative. (line 47) 42357 * # in constraint: Modifiers. (line 67) 42358 * # in template: Output Template. (line 66) 42359 * #pragma: Misc. (line 379) 42360 * % in constraint: Modifiers. (line 45) 42361 * % in GTY option: GTY Options. (line 18) 42362 * % in template: Output Template. (line 6) 42363 * & in constraint: Modifiers. (line 25) 42364 * (nil): RTL Objects. (line 73) 42365 * * in constraint: Modifiers. (line 72) 42366 * * in template: Output Statement. (line 29) 42367 * + in constraint: Modifiers. (line 12) 42368 * -fsection-anchors <1>: Anchored Addresses. (line 6) 42369 * -fsection-anchors: Special Accessors. (line 120) 42370 * /c in RTL dump: Flags. (line 221) 42371 * /f in RTL dump: Flags. (line 229) 42372 * /i in RTL dump: Flags. (line 274) 42373 * /j in RTL dump: Flags. (line 286) 42374 * /s in RTL dump: Flags. (line 245) 42375 * /u in RTL dump: Flags. (line 296) 42376 * /v in RTL dump: Flags. (line 328) 42377 * 0 in constraint: Simple Constraints. (line 130) 42378 * < in constraint: Simple Constraints. (line 48) 42379 * = in constraint: Modifiers. (line 8) 42380 * > in constraint: Simple Constraints. (line 61) 42381 * ? in constraint: Multi-Alternative. (line 41) 42382 * \: Output Template. (line 46) 42383 * __absvdi2: Integer library routines. 42384 (line 107) 42385 * __absvsi2: Integer library routines. 42386 (line 106) 42387 * __addda3: Fixed-point fractional library routines. 42388 (line 45) 42389 * __adddf3: Soft float library routines. 42390 (line 23) 42391 * __adddq3: Fixed-point fractional library routines. 42392 (line 33) 42393 * __addha3: Fixed-point fractional library routines. 42394 (line 43) 42395 * __addhq3: Fixed-point fractional library routines. 42396 (line 30) 42397 * __addqq3: Fixed-point fractional library routines. 42398 (line 29) 42399 * __addsa3: Fixed-point fractional library routines. 42400 (line 44) 42401 * __addsf3: Soft float library routines. 42402 (line 22) 42403 * __addsq3: Fixed-point fractional library routines. 42404 (line 31) 42405 * __addta3: Fixed-point fractional library routines. 42406 (line 47) 42407 * __addtf3: Soft float library routines. 42408 (line 25) 42409 * __adduda3: Fixed-point fractional library routines. 42410 (line 53) 42411 * __addudq3: Fixed-point fractional library routines. 42412 (line 41) 42413 * __adduha3: Fixed-point fractional library routines. 42414 (line 49) 42415 * __adduhq3: Fixed-point fractional library routines. 42416 (line 37) 42417 * __adduqq3: Fixed-point fractional library routines. 42418 (line 35) 42419 * __addusa3: Fixed-point fractional library routines. 42420 (line 51) 42421 * __addusq3: Fixed-point fractional library routines. 42422 (line 39) 42423 * __adduta3: Fixed-point fractional library routines. 42424 (line 55) 42425 * __addvdi3: Integer library routines. 42426 (line 111) 42427 * __addvsi3: Integer library routines. 42428 (line 110) 42429 * __addxf3: Soft float library routines. 42430 (line 27) 42431 * __ashlda3: Fixed-point fractional library routines. 42432 (line 351) 42433 * __ashldi3: Integer library routines. 42434 (line 14) 42435 * __ashldq3: Fixed-point fractional library routines. 42436 (line 340) 42437 * __ashlha3: Fixed-point fractional library routines. 42438 (line 349) 42439 * __ashlhq3: Fixed-point fractional library routines. 42440 (line 337) 42441 * __ashlqq3: Fixed-point fractional library routines. 42442 (line 336) 42443 * __ashlsa3: Fixed-point fractional library routines. 42444 (line 350) 42445 * __ashlsi3: Integer library routines. 42446 (line 13) 42447 * __ashlsq3: Fixed-point fractional library routines. 42448 (line 338) 42449 * __ashlta3: Fixed-point fractional library routines. 42450 (line 353) 42451 * __ashlti3: Integer library routines. 42452 (line 15) 42453 * __ashluda3: Fixed-point fractional library routines. 42454 (line 359) 42455 * __ashludq3: Fixed-point fractional library routines. 42456 (line 348) 42457 * __ashluha3: Fixed-point fractional library routines. 42458 (line 355) 42459 * __ashluhq3: Fixed-point fractional library routines. 42460 (line 344) 42461 * __ashluqq3: Fixed-point fractional library routines. 42462 (line 342) 42463 * __ashlusa3: Fixed-point fractional library routines. 42464 (line 357) 42465 * __ashlusq3: Fixed-point fractional library routines. 42466 (line 346) 42467 * __ashluta3: Fixed-point fractional library routines. 42468 (line 361) 42469 * __ashrda3: Fixed-point fractional library routines. 42470 (line 371) 42471 * __ashrdi3: Integer library routines. 42472 (line 19) 42473 * __ashrdq3: Fixed-point fractional library routines. 42474 (line 368) 42475 * __ashrha3: Fixed-point fractional library routines. 42476 (line 369) 42477 * __ashrhq3: Fixed-point fractional library routines. 42478 (line 365) 42479 * __ashrqq3: Fixed-point fractional library routines. 42480 (line 364) 42481 * __ashrsa3: Fixed-point fractional library routines. 42482 (line 370) 42483 * __ashrsi3: Integer library routines. 42484 (line 18) 42485 * __ashrsq3: Fixed-point fractional library routines. 42486 (line 366) 42487 * __ashrta3: Fixed-point fractional library routines. 42488 (line 373) 42489 * __ashrti3: Integer library routines. 42490 (line 20) 42491 * __bid_adddd3: Decimal float library routines. 42492 (line 25) 42493 * __bid_addsd3: Decimal float library routines. 42494 (line 21) 42495 * __bid_addtd3: Decimal float library routines. 42496 (line 29) 42497 * __bid_divdd3: Decimal float library routines. 42498 (line 68) 42499 * __bid_divsd3: Decimal float library routines. 42500 (line 64) 42501 * __bid_divtd3: Decimal float library routines. 42502 (line 72) 42503 * __bid_eqdd2: Decimal float library routines. 42504 (line 259) 42505 * __bid_eqsd2: Decimal float library routines. 42506 (line 257) 42507 * __bid_eqtd2: Decimal float library routines. 42508 (line 261) 42509 * __bid_extendddtd2: Decimal float library routines. 42510 (line 92) 42511 * __bid_extendddtf: Decimal float library routines. 42512 (line 140) 42513 * __bid_extendddxf: Decimal float library routines. 42514 (line 134) 42515 * __bid_extenddfdd: Decimal float library routines. 42516 (line 147) 42517 * __bid_extenddftd: Decimal float library routines. 42518 (line 107) 42519 * __bid_extendsddd2: Decimal float library routines. 42520 (line 88) 42521 * __bid_extendsddf: Decimal float library routines. 42522 (line 128) 42523 * __bid_extendsdtd2: Decimal float library routines. 42524 (line 90) 42525 * __bid_extendsdtf: Decimal float library routines. 42526 (line 138) 42527 * __bid_extendsdxf: Decimal float library routines. 42528 (line 132) 42529 * __bid_extendsfdd: Decimal float library routines. 42530 (line 103) 42531 * __bid_extendsfsd: Decimal float library routines. 42532 (line 145) 42533 * __bid_extendsftd: Decimal float library routines. 42534 (line 105) 42535 * __bid_extendtftd: Decimal float library routines. 42536 (line 149) 42537 * __bid_extendxftd: Decimal float library routines. 42538 (line 109) 42539 * __bid_fixdddi: Decimal float library routines. 42540 (line 170) 42541 * __bid_fixddsi: Decimal float library routines. 42542 (line 162) 42543 * __bid_fixsddi: Decimal float library routines. 42544 (line 168) 42545 * __bid_fixsdsi: Decimal float library routines. 42546 (line 160) 42547 * __bid_fixtddi: Decimal float library routines. 42548 (line 172) 42549 * __bid_fixtdsi: Decimal float library routines. 42550 (line 164) 42551 * __bid_fixunsdddi: Decimal float library routines. 42552 (line 187) 42553 * __bid_fixunsddsi: Decimal float library routines. 42554 (line 178) 42555 * __bid_fixunssddi: Decimal float library routines. 42556 (line 185) 42557 * __bid_fixunssdsi: Decimal float library routines. 42558 (line 176) 42559 * __bid_fixunstddi: Decimal float library routines. 42560 (line 189) 42561 * __bid_fixunstdsi: Decimal float library routines. 42562 (line 180) 42563 * __bid_floatdidd: Decimal float library routines. 42564 (line 205) 42565 * __bid_floatdisd: Decimal float library routines. 42566 (line 203) 42567 * __bid_floatditd: Decimal float library routines. 42568 (line 207) 42569 * __bid_floatsidd: Decimal float library routines. 42570 (line 196) 42571 * __bid_floatsisd: Decimal float library routines. 42572 (line 194) 42573 * __bid_floatsitd: Decimal float library routines. 42574 (line 198) 42575 * __bid_floatunsdidd: Decimal float library routines. 42576 (line 223) 42577 * __bid_floatunsdisd: Decimal float library routines. 42578 (line 221) 42579 * __bid_floatunsditd: Decimal float library routines. 42580 (line 225) 42581 * __bid_floatunssidd: Decimal float library routines. 42582 (line 214) 42583 * __bid_floatunssisd: Decimal float library routines. 42584 (line 212) 42585 * __bid_floatunssitd: Decimal float library routines. 42586 (line 216) 42587 * __bid_gedd2: Decimal float library routines. 42588 (line 277) 42589 * __bid_gesd2: Decimal float library routines. 42590 (line 275) 42591 * __bid_getd2: Decimal float library routines. 42592 (line 279) 42593 * __bid_gtdd2: Decimal float library routines. 42594 (line 304) 42595 * __bid_gtsd2: Decimal float library routines. 42596 (line 302) 42597 * __bid_gttd2: Decimal float library routines. 42598 (line 306) 42599 * __bid_ledd2: Decimal float library routines. 42600 (line 295) 42601 * __bid_lesd2: Decimal float library routines. 42602 (line 293) 42603 * __bid_letd2: Decimal float library routines. 42604 (line 297) 42605 * __bid_ltdd2: Decimal float library routines. 42606 (line 286) 42607 * __bid_ltsd2: Decimal float library routines. 42608 (line 284) 42609 * __bid_lttd2: Decimal float library routines. 42610 (line 288) 42611 * __bid_muldd3: Decimal float library routines. 42612 (line 54) 42613 * __bid_mulsd3: Decimal float library routines. 42614 (line 50) 42615 * __bid_multd3: Decimal float library routines. 42616 (line 58) 42617 * __bid_nedd2: Decimal float library routines. 42618 (line 268) 42619 * __bid_negdd2: Decimal float library routines. 42620 (line 78) 42621 * __bid_negsd2: Decimal float library routines. 42622 (line 76) 42623 * __bid_negtd2: Decimal float library routines. 42624 (line 80) 42625 * __bid_nesd2: Decimal float library routines. 42626 (line 266) 42627 * __bid_netd2: Decimal float library routines. 42628 (line 270) 42629 * __bid_subdd3: Decimal float library routines. 42630 (line 39) 42631 * __bid_subsd3: Decimal float library routines. 42632 (line 35) 42633 * __bid_subtd3: Decimal float library routines. 42634 (line 43) 42635 * __bid_truncdddf: Decimal float library routines. 42636 (line 153) 42637 * __bid_truncddsd2: Decimal float library routines. 42638 (line 94) 42639 * __bid_truncddsf: Decimal float library routines. 42640 (line 124) 42641 * __bid_truncdfsd: Decimal float library routines. 42642 (line 111) 42643 * __bid_truncsdsf: Decimal float library routines. 42644 (line 151) 42645 * __bid_trunctddd2: Decimal float library routines. 42646 (line 98) 42647 * __bid_trunctddf: Decimal float library routines. 42648 (line 130) 42649 * __bid_trunctdsd2: Decimal float library routines. 42650 (line 96) 42651 * __bid_trunctdsf: Decimal float library routines. 42652 (line 126) 42653 * __bid_trunctdtf: Decimal float library routines. 42654 (line 155) 42655 * __bid_trunctdxf: Decimal float library routines. 42656 (line 136) 42657 * __bid_trunctfdd: Decimal float library routines. 42658 (line 119) 42659 * __bid_trunctfsd: Decimal float library routines. 42660 (line 115) 42661 * __bid_truncxfdd: Decimal float library routines. 42662 (line 117) 42663 * __bid_truncxfsd: Decimal float library routines. 42664 (line 113) 42665 * __bid_unorddd2: Decimal float library routines. 42666 (line 235) 42667 * __bid_unordsd2: Decimal float library routines. 42668 (line 233) 42669 * __bid_unordtd2: Decimal float library routines. 42670 (line 237) 42671 * __bswapdi2: Integer library routines. 42672 (line 162) 42673 * __bswapsi2: Integer library routines. 42674 (line 161) 42675 * __builtin_classify_type: Varargs. (line 51) 42676 * __builtin_next_arg: Varargs. (line 42) 42677 * __builtin_saveregs: Varargs. (line 24) 42678 * __clear_cache: Miscellaneous routines. 42679 (line 10) 42680 * __clzdi2: Integer library routines. 42681 (line 131) 42682 * __clzsi2: Integer library routines. 42683 (line 130) 42684 * __clzti2: Integer library routines. 42685 (line 132) 42686 * __cmpda2: Fixed-point fractional library routines. 42687 (line 451) 42688 * __cmpdf2: Soft float library routines. 42689 (line 164) 42690 * __cmpdi2: Integer library routines. 42691 (line 87) 42692 * __cmpdq2: Fixed-point fractional library routines. 42693 (line 441) 42694 * __cmpha2: Fixed-point fractional library routines. 42695 (line 449) 42696 * __cmphq2: Fixed-point fractional library routines. 42697 (line 438) 42698 * __cmpqq2: Fixed-point fractional library routines. 42699 (line 437) 42700 * __cmpsa2: Fixed-point fractional library routines. 42701 (line 450) 42702 * __cmpsf2: Soft float library routines. 42703 (line 163) 42704 * __cmpsq2: Fixed-point fractional library routines. 42705 (line 439) 42706 * __cmpta2: Fixed-point fractional library routines. 42707 (line 453) 42708 * __cmptf2: Soft float library routines. 42709 (line 165) 42710 * __cmpti2: Integer library routines. 42711 (line 88) 42712 * __cmpuda2: Fixed-point fractional library routines. 42713 (line 458) 42714 * __cmpudq2: Fixed-point fractional library routines. 42715 (line 448) 42716 * __cmpuha2: Fixed-point fractional library routines. 42717 (line 455) 42718 * __cmpuhq2: Fixed-point fractional library routines. 42719 (line 444) 42720 * __cmpuqq2: Fixed-point fractional library routines. 42721 (line 443) 42722 * __cmpusa2: Fixed-point fractional library routines. 42723 (line 456) 42724 * __cmpusq2: Fixed-point fractional library routines. 42725 (line 446) 42726 * __cmputa2: Fixed-point fractional library routines. 42727 (line 460) 42728 * __CTOR_LIST__: Initialization. (line 25) 42729 * __ctzdi2: Integer library routines. 42730 (line 138) 42731 * __ctzsi2: Integer library routines. 42732 (line 137) 42733 * __ctzti2: Integer library routines. 42734 (line 139) 42735 * __divda3: Fixed-point fractional library routines. 42736 (line 227) 42737 * __divdc3: Soft float library routines. 42738 (line 252) 42739 * __divdf3: Soft float library routines. 42740 (line 48) 42741 * __divdi3: Integer library routines. 42742 (line 25) 42743 * __divdq3: Fixed-point fractional library routines. 42744 (line 223) 42745 * __divha3: Fixed-point fractional library routines. 42746 (line 225) 42747 * __divhq3: Fixed-point fractional library routines. 42748 (line 220) 42749 * __divqq3: Fixed-point fractional library routines. 42750 (line 219) 42751 * __divsa3: Fixed-point fractional library routines. 42752 (line 226) 42753 * __divsc3: Soft float library routines. 42754 (line 250) 42755 * __divsf3: Soft float library routines. 42756 (line 47) 42757 * __divsi3: Integer library routines. 42758 (line 24) 42759 * __divsq3: Fixed-point fractional library routines. 42760 (line 221) 42761 * __divta3: Fixed-point fractional library routines. 42762 (line 229) 42763 * __divtc3: Soft float library routines. 42764 (line 254) 42765 * __divtf3: Soft float library routines. 42766 (line 50) 42767 * __divti3: Integer library routines. 42768 (line 26) 42769 * __divxc3: Soft float library routines. 42770 (line 256) 42771 * __divxf3: Soft float library routines. 42772 (line 52) 42773 * __dpd_adddd3: Decimal float library routines. 42774 (line 23) 42775 * __dpd_addsd3: Decimal float library routines. 42776 (line 19) 42777 * __dpd_addtd3: Decimal float library routines. 42778 (line 27) 42779 * __dpd_divdd3: Decimal float library routines. 42780 (line 66) 42781 * __dpd_divsd3: Decimal float library routines. 42782 (line 62) 42783 * __dpd_divtd3: Decimal float library routines. 42784 (line 70) 42785 * __dpd_eqdd2: Decimal float library routines. 42786 (line 258) 42787 * __dpd_eqsd2: Decimal float library routines. 42788 (line 256) 42789 * __dpd_eqtd2: Decimal float library routines. 42790 (line 260) 42791 * __dpd_extendddtd2: Decimal float library routines. 42792 (line 91) 42793 * __dpd_extendddtf: Decimal float library routines. 42794 (line 139) 42795 * __dpd_extendddxf: Decimal float library routines. 42796 (line 133) 42797 * __dpd_extenddfdd: Decimal float library routines. 42798 (line 146) 42799 * __dpd_extenddftd: Decimal float library routines. 42800 (line 106) 42801 * __dpd_extendsddd2: Decimal float library routines. 42802 (line 87) 42803 * __dpd_extendsddf: Decimal float library routines. 42804 (line 127) 42805 * __dpd_extendsdtd2: Decimal float library routines. 42806 (line 89) 42807 * __dpd_extendsdtf: Decimal float library routines. 42808 (line 137) 42809 * __dpd_extendsdxf: Decimal float library routines. 42810 (line 131) 42811 * __dpd_extendsfdd: Decimal float library routines. 42812 (line 102) 42813 * __dpd_extendsfsd: Decimal float library routines. 42814 (line 144) 42815 * __dpd_extendsftd: Decimal float library routines. 42816 (line 104) 42817 * __dpd_extendtftd: Decimal float library routines. 42818 (line 148) 42819 * __dpd_extendxftd: Decimal float library routines. 42820 (line 108) 42821 * __dpd_fixdddi: Decimal float library routines. 42822 (line 169) 42823 * __dpd_fixddsi: Decimal float library routines. 42824 (line 161) 42825 * __dpd_fixsddi: Decimal float library routines. 42826 (line 167) 42827 * __dpd_fixsdsi: Decimal float library routines. 42828 (line 159) 42829 * __dpd_fixtddi: Decimal float library routines. 42830 (line 171) 42831 * __dpd_fixtdsi: Decimal float library routines. 42832 (line 163) 42833 * __dpd_fixunsdddi: Decimal float library routines. 42834 (line 186) 42835 * __dpd_fixunsddsi: Decimal float library routines. 42836 (line 177) 42837 * __dpd_fixunssddi: Decimal float library routines. 42838 (line 184) 42839 * __dpd_fixunssdsi: Decimal float library routines. 42840 (line 175) 42841 * __dpd_fixunstddi: Decimal float library routines. 42842 (line 188) 42843 * __dpd_fixunstdsi: Decimal float library routines. 42844 (line 179) 42845 * __dpd_floatdidd: Decimal float library routines. 42846 (line 204) 42847 * __dpd_floatdisd: Decimal float library routines. 42848 (line 202) 42849 * __dpd_floatditd: Decimal float library routines. 42850 (line 206) 42851 * __dpd_floatsidd: Decimal float library routines. 42852 (line 195) 42853 * __dpd_floatsisd: Decimal float library routines. 42854 (line 193) 42855 * __dpd_floatsitd: Decimal float library routines. 42856 (line 197) 42857 * __dpd_floatunsdidd: Decimal float library routines. 42858 (line 222) 42859 * __dpd_floatunsdisd: Decimal float library routines. 42860 (line 220) 42861 * __dpd_floatunsditd: Decimal float library routines. 42862 (line 224) 42863 * __dpd_floatunssidd: Decimal float library routines. 42864 (line 213) 42865 * __dpd_floatunssisd: Decimal float library routines. 42866 (line 211) 42867 * __dpd_floatunssitd: Decimal float library routines. 42868 (line 215) 42869 * __dpd_gedd2: Decimal float library routines. 42870 (line 276) 42871 * __dpd_gesd2: Decimal float library routines. 42872 (line 274) 42873 * __dpd_getd2: Decimal float library routines. 42874 (line 278) 42875 * __dpd_gtdd2: Decimal float library routines. 42876 (line 303) 42877 * __dpd_gtsd2: Decimal float library routines. 42878 (line 301) 42879 * __dpd_gttd2: Decimal float library routines. 42880 (line 305) 42881 * __dpd_ledd2: Decimal float library routines. 42882 (line 294) 42883 * __dpd_lesd2: Decimal float library routines. 42884 (line 292) 42885 * __dpd_letd2: Decimal float library routines. 42886 (line 296) 42887 * __dpd_ltdd2: Decimal float library routines. 42888 (line 285) 42889 * __dpd_ltsd2: Decimal float library routines. 42890 (line 283) 42891 * __dpd_lttd2: Decimal float library routines. 42892 (line 287) 42893 * __dpd_muldd3: Decimal float library routines. 42894 (line 52) 42895 * __dpd_mulsd3: Decimal float library routines. 42896 (line 48) 42897 * __dpd_multd3: Decimal float library routines. 42898 (line 56) 42899 * __dpd_nedd2: Decimal float library routines. 42900 (line 267) 42901 * __dpd_negdd2: Decimal float library routines. 42902 (line 77) 42903 * __dpd_negsd2: Decimal float library routines. 42904 (line 75) 42905 * __dpd_negtd2: Decimal float library routines. 42906 (line 79) 42907 * __dpd_nesd2: Decimal float library routines. 42908 (line 265) 42909 * __dpd_netd2: Decimal float library routines. 42910 (line 269) 42911 * __dpd_subdd3: Decimal float library routines. 42912 (line 37) 42913 * __dpd_subsd3: Decimal float library routines. 42914 (line 33) 42915 * __dpd_subtd3: Decimal float library routines. 42916 (line 41) 42917 * __dpd_truncdddf: Decimal float library routines. 42918 (line 152) 42919 * __dpd_truncddsd2: Decimal float library routines. 42920 (line 93) 42921 * __dpd_truncddsf: Decimal float library routines. 42922 (line 123) 42923 * __dpd_truncdfsd: Decimal float library routines. 42924 (line 110) 42925 * __dpd_truncsdsf: Decimal float library routines. 42926 (line 150) 42927 * __dpd_trunctddd2: Decimal float library routines. 42928 (line 97) 42929 * __dpd_trunctddf: Decimal float library routines. 42930 (line 129) 42931 * __dpd_trunctdsd2: Decimal float library routines. 42932 (line 95) 42933 * __dpd_trunctdsf: Decimal float library routines. 42934 (line 125) 42935 * __dpd_trunctdtf: Decimal float library routines. 42936 (line 154) 42937 * __dpd_trunctdxf: Decimal float library routines. 42938 (line 135) 42939 * __dpd_trunctfdd: Decimal float library routines. 42940 (line 118) 42941 * __dpd_trunctfsd: Decimal float library routines. 42942 (line 114) 42943 * __dpd_truncxfdd: Decimal float library routines. 42944 (line 116) 42945 * __dpd_truncxfsd: Decimal float library routines. 42946 (line 112) 42947 * __dpd_unorddd2: Decimal float library routines. 42948 (line 234) 42949 * __dpd_unordsd2: Decimal float library routines. 42950 (line 232) 42951 * __dpd_unordtd2: Decimal float library routines. 42952 (line 236) 42953 * __DTOR_LIST__: Initialization. (line 25) 42954 * __eqdf2: Soft float library routines. 42955 (line 194) 42956 * __eqsf2: Soft float library routines. 42957 (line 193) 42958 * __eqtf2: Soft float library routines. 42959 (line 195) 42960 * __extenddftf2: Soft float library routines. 42961 (line 68) 42962 * __extenddfxf2: Soft float library routines. 42963 (line 69) 42964 * __extendsfdf2: Soft float library routines. 42965 (line 65) 42966 * __extendsftf2: Soft float library routines. 42967 (line 66) 42968 * __extendsfxf2: Soft float library routines. 42969 (line 67) 42970 * __ffsdi2: Integer library routines. 42971 (line 144) 42972 * __ffsti2: Integer library routines. 42973 (line 145) 42974 * __fixdfdi: Soft float library routines. 42975 (line 88) 42976 * __fixdfsi: Soft float library routines. 42977 (line 81) 42978 * __fixdfti: Soft float library routines. 42979 (line 94) 42980 * __fixsfdi: Soft float library routines. 42981 (line 87) 42982 * __fixsfsi: Soft float library routines. 42983 (line 80) 42984 * __fixsfti: Soft float library routines. 42985 (line 93) 42986 * __fixtfdi: Soft float library routines. 42987 (line 89) 42988 * __fixtfsi: Soft float library routines. 42989 (line 82) 42990 * __fixtfti: Soft float library routines. 42991 (line 95) 42992 * __fixunsdfdi: Soft float library routines. 42993 (line 108) 42994 * __fixunsdfsi: Soft float library routines. 42995 (line 101) 42996 * __fixunsdfti: Soft float library routines. 42997 (line 115) 42998 * __fixunssfdi: Soft float library routines. 42999 (line 107) 43000 * __fixunssfsi: Soft float library routines. 43001 (line 100) 43002 * __fixunssfti: Soft float library routines. 43003 (line 114) 43004 * __fixunstfdi: Soft float library routines. 43005 (line 109) 43006 * __fixunstfsi: Soft float library routines. 43007 (line 102) 43008 * __fixunstfti: Soft float library routines. 43009 (line 116) 43010 * __fixunsxfdi: Soft float library routines. 43011 (line 110) 43012 * __fixunsxfsi: Soft float library routines. 43013 (line 103) 43014 * __fixunsxfti: Soft float library routines. 43015 (line 117) 43016 * __fixxfdi: Soft float library routines. 43017 (line 90) 43018 * __fixxfsi: Soft float library routines. 43019 (line 83) 43020 * __fixxfti: Soft float library routines. 43021 (line 96) 43022 * __floatdidf: Soft float library routines. 43023 (line 128) 43024 * __floatdisf: Soft float library routines. 43025 (line 127) 43026 * __floatditf: Soft float library routines. 43027 (line 129) 43028 * __floatdixf: Soft float library routines. 43029 (line 130) 43030 * __floatsidf: Soft float library routines. 43031 (line 122) 43032 * __floatsisf: Soft float library routines. 43033 (line 121) 43034 * __floatsitf: Soft float library routines. 43035 (line 123) 43036 * __floatsixf: Soft float library routines. 43037 (line 124) 43038 * __floattidf: Soft float library routines. 43039 (line 134) 43040 * __floattisf: Soft float library routines. 43041 (line 133) 43042 * __floattitf: Soft float library routines. 43043 (line 135) 43044 * __floattixf: Soft float library routines. 43045 (line 136) 43046 * __floatundidf: Soft float library routines. 43047 (line 146) 43048 * __floatundisf: Soft float library routines. 43049 (line 145) 43050 * __floatunditf: Soft float library routines. 43051 (line 147) 43052 * __floatundixf: Soft float library routines. 43053 (line 148) 43054 * __floatunsidf: Soft float library routines. 43055 (line 140) 43056 * __floatunsisf: Soft float library routines. 43057 (line 139) 43058 * __floatunsitf: Soft float library routines. 43059 (line 141) 43060 * __floatunsixf: Soft float library routines. 43061 (line 142) 43062 * __floatuntidf: Soft float library routines. 43063 (line 152) 43064 * __floatuntisf: Soft float library routines. 43065 (line 151) 43066 * __floatuntitf: Soft float library routines. 43067 (line 153) 43068 * __floatuntixf: Soft float library routines. 43069 (line 154) 43070 * __fractdadf: Fixed-point fractional library routines. 43071 (line 636) 43072 * __fractdadi: Fixed-point fractional library routines. 43073 (line 633) 43074 * __fractdadq: Fixed-point fractional library routines. 43075 (line 616) 43076 * __fractdaha2: Fixed-point fractional library routines. 43077 (line 617) 43078 * __fractdahi: Fixed-point fractional library routines. 43079 (line 631) 43080 * __fractdahq: Fixed-point fractional library routines. 43081 (line 614) 43082 * __fractdaqi: Fixed-point fractional library routines. 43083 (line 630) 43084 * __fractdaqq: Fixed-point fractional library routines. 43085 (line 613) 43086 * __fractdasa2: Fixed-point fractional library routines. 43087 (line 618) 43088 * __fractdasf: Fixed-point fractional library routines. 43089 (line 635) 43090 * __fractdasi: Fixed-point fractional library routines. 43091 (line 632) 43092 * __fractdasq: Fixed-point fractional library routines. 43093 (line 615) 43094 * __fractdata2: Fixed-point fractional library routines. 43095 (line 619) 43096 * __fractdati: Fixed-point fractional library routines. 43097 (line 634) 43098 * __fractdauda: Fixed-point fractional library routines. 43099 (line 627) 43100 * __fractdaudq: Fixed-point fractional library routines. 43101 (line 624) 43102 * __fractdauha: Fixed-point fractional library routines. 43103 (line 625) 43104 * __fractdauhq: Fixed-point fractional library routines. 43105 (line 621) 43106 * __fractdauqq: Fixed-point fractional library routines. 43107 (line 620) 43108 * __fractdausa: Fixed-point fractional library routines. 43109 (line 626) 43110 * __fractdausq: Fixed-point fractional library routines. 43111 (line 622) 43112 * __fractdauta: Fixed-point fractional library routines. 43113 (line 629) 43114 * __fractdfda: Fixed-point fractional library routines. 43115 (line 1025) 43116 * __fractdfdq: Fixed-point fractional library routines. 43117 (line 1022) 43118 * __fractdfha: Fixed-point fractional library routines. 43119 (line 1023) 43120 * __fractdfhq: Fixed-point fractional library routines. 43121 (line 1020) 43122 * __fractdfqq: Fixed-point fractional library routines. 43123 (line 1019) 43124 * __fractdfsa: Fixed-point fractional library routines. 43125 (line 1024) 43126 * __fractdfsq: Fixed-point fractional library routines. 43127 (line 1021) 43128 * __fractdfta: Fixed-point fractional library routines. 43129 (line 1026) 43130 * __fractdfuda: Fixed-point fractional library routines. 43131 (line 1033) 43132 * __fractdfudq: Fixed-point fractional library routines. 43133 (line 1030) 43134 * __fractdfuha: Fixed-point fractional library routines. 43135 (line 1031) 43136 * __fractdfuhq: Fixed-point fractional library routines. 43137 (line 1028) 43138 * __fractdfuqq: Fixed-point fractional library routines. 43139 (line 1027) 43140 * __fractdfusa: Fixed-point fractional library routines. 43141 (line 1032) 43142 * __fractdfusq: Fixed-point fractional library routines. 43143 (line 1029) 43144 * __fractdfuta: Fixed-point fractional library routines. 43145 (line 1034) 43146 * __fractdida: Fixed-point fractional library routines. 43147 (line 975) 43148 * __fractdidq: Fixed-point fractional library routines. 43149 (line 972) 43150 * __fractdiha: Fixed-point fractional library routines. 43151 (line 973) 43152 * __fractdihq: Fixed-point fractional library routines. 43153 (line 970) 43154 * __fractdiqq: Fixed-point fractional library routines. 43155 (line 969) 43156 * __fractdisa: Fixed-point fractional library routines. 43157 (line 974) 43158 * __fractdisq: Fixed-point fractional library routines. 43159 (line 971) 43160 * __fractdita: Fixed-point fractional library routines. 43161 (line 976) 43162 * __fractdiuda: Fixed-point fractional library routines. 43163 (line 983) 43164 * __fractdiudq: Fixed-point fractional library routines. 43165 (line 980) 43166 * __fractdiuha: Fixed-point fractional library routines. 43167 (line 981) 43168 * __fractdiuhq: Fixed-point fractional library routines. 43169 (line 978) 43170 * __fractdiuqq: Fixed-point fractional library routines. 43171 (line 977) 43172 * __fractdiusa: Fixed-point fractional library routines. 43173 (line 982) 43174 * __fractdiusq: Fixed-point fractional library routines. 43175 (line 979) 43176 * __fractdiuta: Fixed-point fractional library routines. 43177 (line 984) 43178 * __fractdqda: Fixed-point fractional library routines. 43179 (line 544) 43180 * __fractdqdf: Fixed-point fractional library routines. 43181 (line 566) 43182 * __fractdqdi: Fixed-point fractional library routines. 43183 (line 563) 43184 * __fractdqha: Fixed-point fractional library routines. 43185 (line 542) 43186 * __fractdqhi: Fixed-point fractional library routines. 43187 (line 561) 43188 * __fractdqhq2: Fixed-point fractional library routines. 43189 (line 540) 43190 * __fractdqqi: Fixed-point fractional library routines. 43191 (line 560) 43192 * __fractdqqq2: Fixed-point fractional library routines. 43193 (line 539) 43194 * __fractdqsa: Fixed-point fractional library routines. 43195 (line 543) 43196 * __fractdqsf: Fixed-point fractional library routines. 43197 (line 565) 43198 * __fractdqsi: Fixed-point fractional library routines. 43199 (line 562) 43200 * __fractdqsq2: Fixed-point fractional library routines. 43201 (line 541) 43202 * __fractdqta: Fixed-point fractional library routines. 43203 (line 545) 43204 * __fractdqti: Fixed-point fractional library routines. 43205 (line 564) 43206 * __fractdquda: Fixed-point fractional library routines. 43207 (line 557) 43208 * __fractdqudq: Fixed-point fractional library routines. 43209 (line 552) 43210 * __fractdquha: Fixed-point fractional library routines. 43211 (line 554) 43212 * __fractdquhq: Fixed-point fractional library routines. 43213 (line 548) 43214 * __fractdquqq: Fixed-point fractional library routines. 43215 (line 547) 43216 * __fractdqusa: Fixed-point fractional library routines. 43217 (line 555) 43218 * __fractdqusq: Fixed-point fractional library routines. 43219 (line 550) 43220 * __fractdquta: Fixed-point fractional library routines. 43221 (line 559) 43222 * __fracthada2: Fixed-point fractional library routines. 43223 (line 572) 43224 * __fracthadf: Fixed-point fractional library routines. 43225 (line 590) 43226 * __fracthadi: Fixed-point fractional library routines. 43227 (line 587) 43228 * __fracthadq: Fixed-point fractional library routines. 43229 (line 570) 43230 * __fracthahi: Fixed-point fractional library routines. 43231 (line 585) 43232 * __fracthahq: Fixed-point fractional library routines. 43233 (line 568) 43234 * __fracthaqi: Fixed-point fractional library routines. 43235 (line 584) 43236 * __fracthaqq: Fixed-point fractional library routines. 43237 (line 567) 43238 * __fracthasa2: Fixed-point fractional library routines. 43239 (line 571) 43240 * __fracthasf: Fixed-point fractional library routines. 43241 (line 589) 43242 * __fracthasi: Fixed-point fractional library routines. 43243 (line 586) 43244 * __fracthasq: Fixed-point fractional library routines. 43245 (line 569) 43246 * __fracthata2: Fixed-point fractional library routines. 43247 (line 573) 43248 * __fracthati: Fixed-point fractional library routines. 43249 (line 588) 43250 * __fracthauda: Fixed-point fractional library routines. 43251 (line 581) 43252 * __fracthaudq: Fixed-point fractional library routines. 43253 (line 578) 43254 * __fracthauha: Fixed-point fractional library routines. 43255 (line 579) 43256 * __fracthauhq: Fixed-point fractional library routines. 43257 (line 575) 43258 * __fracthauqq: Fixed-point fractional library routines. 43259 (line 574) 43260 * __fracthausa: Fixed-point fractional library routines. 43261 (line 580) 43262 * __fracthausq: Fixed-point fractional library routines. 43263 (line 576) 43264 * __fracthauta: Fixed-point fractional library routines. 43265 (line 583) 43266 * __fracthida: Fixed-point fractional library routines. 43267 (line 943) 43268 * __fracthidq: Fixed-point fractional library routines. 43269 (line 940) 43270 * __fracthiha: Fixed-point fractional library routines. 43271 (line 941) 43272 * __fracthihq: Fixed-point fractional library routines. 43273 (line 938) 43274 * __fracthiqq: Fixed-point fractional library routines. 43275 (line 937) 43276 * __fracthisa: Fixed-point fractional library routines. 43277 (line 942) 43278 * __fracthisq: Fixed-point fractional library routines. 43279 (line 939) 43280 * __fracthita: Fixed-point fractional library routines. 43281 (line 944) 43282 * __fracthiuda: Fixed-point fractional library routines. 43283 (line 951) 43284 * __fracthiudq: Fixed-point fractional library routines. 43285 (line 948) 43286 * __fracthiuha: Fixed-point fractional library routines. 43287 (line 949) 43288 * __fracthiuhq: Fixed-point fractional library routines. 43289 (line 946) 43290 * __fracthiuqq: Fixed-point fractional library routines. 43291 (line 945) 43292 * __fracthiusa: Fixed-point fractional library routines. 43293 (line 950) 43294 * __fracthiusq: Fixed-point fractional library routines. 43295 (line 947) 43296 * __fracthiuta: Fixed-point fractional library routines. 43297 (line 952) 43298 * __fracthqda: Fixed-point fractional library routines. 43299 (line 498) 43300 * __fracthqdf: Fixed-point fractional library routines. 43301 (line 514) 43302 * __fracthqdi: Fixed-point fractional library routines. 43303 (line 511) 43304 * __fracthqdq2: Fixed-point fractional library routines. 43305 (line 495) 43306 * __fracthqha: Fixed-point fractional library routines. 43307 (line 496) 43308 * __fracthqhi: Fixed-point fractional library routines. 43309 (line 509) 43310 * __fracthqqi: Fixed-point fractional library routines. 43311 (line 508) 43312 * __fracthqqq2: Fixed-point fractional library routines. 43313 (line 493) 43314 * __fracthqsa: Fixed-point fractional library routines. 43315 (line 497) 43316 * __fracthqsf: Fixed-point fractional library routines. 43317 (line 513) 43318 * __fracthqsi: Fixed-point fractional library routines. 43319 (line 510) 43320 * __fracthqsq2: Fixed-point fractional library routines. 43321 (line 494) 43322 * __fracthqta: Fixed-point fractional library routines. 43323 (line 499) 43324 * __fracthqti: Fixed-point fractional library routines. 43325 (line 512) 43326 * __fracthquda: Fixed-point fractional library routines. 43327 (line 506) 43328 * __fracthqudq: Fixed-point fractional library routines. 43329 (line 503) 43330 * __fracthquha: Fixed-point fractional library routines. 43331 (line 504) 43332 * __fracthquhq: Fixed-point fractional library routines. 43333 (line 501) 43334 * __fracthquqq: Fixed-point fractional library routines. 43335 (line 500) 43336 * __fracthqusa: Fixed-point fractional library routines. 43337 (line 505) 43338 * __fracthqusq: Fixed-point fractional library routines. 43339 (line 502) 43340 * __fracthquta: Fixed-point fractional library routines. 43341 (line 507) 43342 * __fractqida: Fixed-point fractional library routines. 43343 (line 925) 43344 * __fractqidq: Fixed-point fractional library routines. 43345 (line 922) 43346 * __fractqiha: Fixed-point fractional library routines. 43347 (line 923) 43348 * __fractqihq: Fixed-point fractional library routines. 43349 (line 920) 43350 * __fractqiqq: Fixed-point fractional library routines. 43351 (line 919) 43352 * __fractqisa: Fixed-point fractional library routines. 43353 (line 924) 43354 * __fractqisq: Fixed-point fractional library routines. 43355 (line 921) 43356 * __fractqita: Fixed-point fractional library routines. 43357 (line 926) 43358 * __fractqiuda: Fixed-point fractional library routines. 43359 (line 934) 43360 * __fractqiudq: Fixed-point fractional library routines. 43361 (line 931) 43362 * __fractqiuha: Fixed-point fractional library routines. 43363 (line 932) 43364 * __fractqiuhq: Fixed-point fractional library routines. 43365 (line 928) 43366 * __fractqiuqq: Fixed-point fractional library routines. 43367 (line 927) 43368 * __fractqiusa: Fixed-point fractional library routines. 43369 (line 933) 43370 * __fractqiusq: Fixed-point fractional library routines. 43371 (line 929) 43372 * __fractqiuta: Fixed-point fractional library routines. 43373 (line 936) 43374 * __fractqqda: Fixed-point fractional library routines. 43375 (line 474) 43376 * __fractqqdf: Fixed-point fractional library routines. 43377 (line 492) 43378 * __fractqqdi: Fixed-point fractional library routines. 43379 (line 489) 43380 * __fractqqdq2: Fixed-point fractional library routines. 43381 (line 471) 43382 * __fractqqha: Fixed-point fractional library routines. 43383 (line 472) 43384 * __fractqqhi: Fixed-point fractional library routines. 43385 (line 487) 43386 * __fractqqhq2: Fixed-point fractional library routines. 43387 (line 469) 43388 * __fractqqqi: Fixed-point fractional library routines. 43389 (line 486) 43390 * __fractqqsa: Fixed-point fractional library routines. 43391 (line 473) 43392 * __fractqqsf: Fixed-point fractional library routines. 43393 (line 491) 43394 * __fractqqsi: Fixed-point fractional library routines. 43395 (line 488) 43396 * __fractqqsq2: Fixed-point fractional library routines. 43397 (line 470) 43398 * __fractqqta: Fixed-point fractional library routines. 43399 (line 475) 43400 * __fractqqti: Fixed-point fractional library routines. 43401 (line 490) 43402 * __fractqquda: Fixed-point fractional library routines. 43403 (line 483) 43404 * __fractqqudq: Fixed-point fractional library routines. 43405 (line 480) 43406 * __fractqquha: Fixed-point fractional library routines. 43407 (line 481) 43408 * __fractqquhq: Fixed-point fractional library routines. 43409 (line 477) 43410 * __fractqquqq: Fixed-point fractional library routines. 43411 (line 476) 43412 * __fractqqusa: Fixed-point fractional library routines. 43413 (line 482) 43414 * __fractqqusq: Fixed-point fractional library routines. 43415 (line 478) 43416 * __fractqquta: Fixed-point fractional library routines. 43417 (line 485) 43418 * __fractsada2: Fixed-point fractional library routines. 43419 (line 596) 43420 * __fractsadf: Fixed-point fractional library routines. 43421 (line 612) 43422 * __fractsadi: Fixed-point fractional library routines. 43423 (line 609) 43424 * __fractsadq: Fixed-point fractional library routines. 43425 (line 594) 43426 * __fractsaha2: Fixed-point fractional library routines. 43427 (line 595) 43428 * __fractsahi: Fixed-point fractional library routines. 43429 (line 607) 43430 * __fractsahq: Fixed-point fractional library routines. 43431 (line 592) 43432 * __fractsaqi: Fixed-point fractional library routines. 43433 (line 606) 43434 * __fractsaqq: Fixed-point fractional library routines. 43435 (line 591) 43436 * __fractsasf: Fixed-point fractional library routines. 43437 (line 611) 43438 * __fractsasi: Fixed-point fractional library routines. 43439 (line 608) 43440 * __fractsasq: Fixed-point fractional library routines. 43441 (line 593) 43442 * __fractsata2: Fixed-point fractional library routines. 43443 (line 597) 43444 * __fractsati: Fixed-point fractional library routines. 43445 (line 610) 43446 * __fractsauda: Fixed-point fractional library routines. 43447 (line 604) 43448 * __fractsaudq: Fixed-point fractional library routines. 43449 (line 601) 43450 * __fractsauha: Fixed-point fractional library routines. 43451 (line 602) 43452 * __fractsauhq: Fixed-point fractional library routines. 43453 (line 599) 43454 * __fractsauqq: Fixed-point fractional library routines. 43455 (line 598) 43456 * __fractsausa: Fixed-point fractional library routines. 43457 (line 603) 43458 * __fractsausq: Fixed-point fractional library routines. 43459 (line 600) 43460 * __fractsauta: Fixed-point fractional library routines. 43461 (line 605) 43462 * __fractsfda: Fixed-point fractional library routines. 43463 (line 1009) 43464 * __fractsfdq: Fixed-point fractional library routines. 43465 (line 1006) 43466 * __fractsfha: Fixed-point fractional library routines. 43467 (line 1007) 43468 * __fractsfhq: Fixed-point fractional library routines. 43469 (line 1004) 43470 * __fractsfqq: Fixed-point fractional library routines. 43471 (line 1003) 43472 * __fractsfsa: Fixed-point fractional library routines. 43473 (line 1008) 43474 * __fractsfsq: Fixed-point fractional library routines. 43475 (line 1005) 43476 * __fractsfta: Fixed-point fractional library routines. 43477 (line 1010) 43478 * __fractsfuda: Fixed-point fractional library routines. 43479 (line 1017) 43480 * __fractsfudq: Fixed-point fractional library routines. 43481 (line 1014) 43482 * __fractsfuha: Fixed-point fractional library routines. 43483 (line 1015) 43484 * __fractsfuhq: Fixed-point fractional library routines. 43485 (line 1012) 43486 * __fractsfuqq: Fixed-point fractional library routines. 43487 (line 1011) 43488 * __fractsfusa: Fixed-point fractional library routines. 43489 (line 1016) 43490 * __fractsfusq: Fixed-point fractional library routines. 43491 (line 1013) 43492 * __fractsfuta: Fixed-point fractional library routines. 43493 (line 1018) 43494 * __fractsida: Fixed-point fractional library routines. 43495 (line 959) 43496 * __fractsidq: Fixed-point fractional library routines. 43497 (line 956) 43498 * __fractsiha: Fixed-point fractional library routines. 43499 (line 957) 43500 * __fractsihq: Fixed-point fractional library routines. 43501 (line 954) 43502 * __fractsiqq: Fixed-point fractional library routines. 43503 (line 953) 43504 * __fractsisa: Fixed-point fractional library routines. 43505 (line 958) 43506 * __fractsisq: Fixed-point fractional library routines. 43507 (line 955) 43508 * __fractsita: Fixed-point fractional library routines. 43509 (line 960) 43510 * __fractsiuda: Fixed-point fractional library routines. 43511 (line 967) 43512 * __fractsiudq: Fixed-point fractional library routines. 43513 (line 964) 43514 * __fractsiuha: Fixed-point fractional library routines. 43515 (line 965) 43516 * __fractsiuhq: Fixed-point fractional library routines. 43517 (line 962) 43518 * __fractsiuqq: Fixed-point fractional library routines. 43519 (line 961) 43520 * __fractsiusa: Fixed-point fractional library routines. 43521 (line 966) 43522 * __fractsiusq: Fixed-point fractional library routines. 43523 (line 963) 43524 * __fractsiuta: Fixed-point fractional library routines. 43525 (line 968) 43526 * __fractsqda: Fixed-point fractional library routines. 43527 (line 520) 43528 * __fractsqdf: Fixed-point fractional library routines. 43529 (line 538) 43530 * __fractsqdi: Fixed-point fractional library routines. 43531 (line 535) 43532 * __fractsqdq2: Fixed-point fractional library routines. 43533 (line 517) 43534 * __fractsqha: Fixed-point fractional library routines. 43535 (line 518) 43536 * __fractsqhi: Fixed-point fractional library routines. 43537 (line 533) 43538 * __fractsqhq2: Fixed-point fractional library routines. 43539 (line 516) 43540 * __fractsqqi: Fixed-point fractional library routines. 43541 (line 532) 43542 * __fractsqqq2: Fixed-point fractional library routines. 43543 (line 515) 43544 * __fractsqsa: Fixed-point fractional library routines. 43545 (line 519) 43546 * __fractsqsf: Fixed-point fractional library routines. 43547 (line 537) 43548 * __fractsqsi: Fixed-point fractional library routines. 43549 (line 534) 43550 * __fractsqta: Fixed-point fractional library routines. 43551 (line 521) 43552 * __fractsqti: Fixed-point fractional library routines. 43553 (line 536) 43554 * __fractsquda: Fixed-point fractional library routines. 43555 (line 529) 43556 * __fractsqudq: Fixed-point fractional library routines. 43557 (line 526) 43558 * __fractsquha: Fixed-point fractional library routines. 43559 (line 527) 43560 * __fractsquhq: Fixed-point fractional library routines. 43561 (line 523) 43562 * __fractsquqq: Fixed-point fractional library routines. 43563 (line 522) 43564 * __fractsqusa: Fixed-point fractional library routines. 43565 (line 528) 43566 * __fractsqusq: Fixed-point fractional library routines. 43567 (line 524) 43568 * __fractsquta: Fixed-point fractional library routines. 43569 (line 531) 43570 * __fracttada2: Fixed-point fractional library routines. 43571 (line 643) 43572 * __fracttadf: Fixed-point fractional library routines. 43573 (line 664) 43574 * __fracttadi: Fixed-point fractional library routines. 43575 (line 661) 43576 * __fracttadq: Fixed-point fractional library routines. 43577 (line 640) 43578 * __fracttaha2: Fixed-point fractional library routines. 43579 (line 641) 43580 * __fracttahi: Fixed-point fractional library routines. 43581 (line 659) 43582 * __fracttahq: Fixed-point fractional library routines. 43583 (line 638) 43584 * __fracttaqi: Fixed-point fractional library routines. 43585 (line 658) 43586 * __fracttaqq: Fixed-point fractional library routines. 43587 (line 637) 43588 * __fracttasa2: Fixed-point fractional library routines. 43589 (line 642) 43590 * __fracttasf: Fixed-point fractional library routines. 43591 (line 663) 43592 * __fracttasi: Fixed-point fractional library routines. 43593 (line 660) 43594 * __fracttasq: Fixed-point fractional library routines. 43595 (line 639) 43596 * __fracttati: Fixed-point fractional library routines. 43597 (line 662) 43598 * __fracttauda: Fixed-point fractional library routines. 43599 (line 655) 43600 * __fracttaudq: Fixed-point fractional library routines. 43601 (line 650) 43602 * __fracttauha: Fixed-point fractional library routines. 43603 (line 652) 43604 * __fracttauhq: Fixed-point fractional library routines. 43605 (line 646) 43606 * __fracttauqq: Fixed-point fractional library routines. 43607 (line 645) 43608 * __fracttausa: Fixed-point fractional library routines. 43609 (line 653) 43610 * __fracttausq: Fixed-point fractional library routines. 43611 (line 648) 43612 * __fracttauta: Fixed-point fractional library routines. 43613 (line 657) 43614 * __fracttida: Fixed-point fractional library routines. 43615 (line 991) 43616 * __fracttidq: Fixed-point fractional library routines. 43617 (line 988) 43618 * __fracttiha: Fixed-point fractional library routines. 43619 (line 989) 43620 * __fracttihq: Fixed-point fractional library routines. 43621 (line 986) 43622 * __fracttiqq: Fixed-point fractional library routines. 43623 (line 985) 43624 * __fracttisa: Fixed-point fractional library routines. 43625 (line 990) 43626 * __fracttisq: Fixed-point fractional library routines. 43627 (line 987) 43628 * __fracttita: Fixed-point fractional library routines. 43629 (line 992) 43630 * __fracttiuda: Fixed-point fractional library routines. 43631 (line 1000) 43632 * __fracttiudq: Fixed-point fractional library routines. 43633 (line 997) 43634 * __fracttiuha: Fixed-point fractional library routines. 43635 (line 998) 43636 * __fracttiuhq: Fixed-point fractional library routines. 43637 (line 994) 43638 * __fracttiuqq: Fixed-point fractional library routines. 43639 (line 993) 43640 * __fracttiusa: Fixed-point fractional library routines. 43641 (line 999) 43642 * __fracttiusq: Fixed-point fractional library routines. 43643 (line 995) 43644 * __fracttiuta: Fixed-point fractional library routines. 43645 (line 1002) 43646 * __fractudada: Fixed-point fractional library routines. 43647 (line 858) 43648 * __fractudadf: Fixed-point fractional library routines. 43649 (line 881) 43650 * __fractudadi: Fixed-point fractional library routines. 43651 (line 878) 43652 * __fractudadq: Fixed-point fractional library routines. 43653 (line 855) 43654 * __fractudaha: Fixed-point fractional library routines. 43655 (line 856) 43656 * __fractudahi: Fixed-point fractional library routines. 43657 (line 876) 43658 * __fractudahq: Fixed-point fractional library routines. 43659 (line 852) 43660 * __fractudaqi: Fixed-point fractional library routines. 43661 (line 875) 43662 * __fractudaqq: Fixed-point fractional library routines. 43663 (line 851) 43664 * __fractudasa: Fixed-point fractional library routines. 43665 (line 857) 43666 * __fractudasf: Fixed-point fractional library routines. 43667 (line 880) 43668 * __fractudasi: Fixed-point fractional library routines. 43669 (line 877) 43670 * __fractudasq: Fixed-point fractional library routines. 43671 (line 853) 43672 * __fractudata: Fixed-point fractional library routines. 43673 (line 860) 43674 * __fractudati: Fixed-point fractional library routines. 43675 (line 879) 43676 * __fractudaudq: Fixed-point fractional library routines. 43677 (line 868) 43678 * __fractudauha2: Fixed-point fractional library routines. 43679 (line 870) 43680 * __fractudauhq: Fixed-point fractional library routines. 43681 (line 864) 43682 * __fractudauqq: Fixed-point fractional library routines. 43683 (line 862) 43684 * __fractudausa2: Fixed-point fractional library routines. 43685 (line 872) 43686 * __fractudausq: Fixed-point fractional library routines. 43687 (line 866) 43688 * __fractudauta2: Fixed-point fractional library routines. 43689 (line 874) 43690 * __fractudqda: Fixed-point fractional library routines. 43691 (line 766) 43692 * __fractudqdf: Fixed-point fractional library routines. 43693 (line 791) 43694 * __fractudqdi: Fixed-point fractional library routines. 43695 (line 787) 43696 * __fractudqdq: Fixed-point fractional library routines. 43697 (line 761) 43698 * __fractudqha: Fixed-point fractional library routines. 43699 (line 763) 43700 * __fractudqhi: Fixed-point fractional library routines. 43701 (line 785) 43702 * __fractudqhq: Fixed-point fractional library routines. 43703 (line 757) 43704 * __fractudqqi: Fixed-point fractional library routines. 43705 (line 784) 43706 * __fractudqqq: Fixed-point fractional library routines. 43707 (line 756) 43708 * __fractudqsa: Fixed-point fractional library routines. 43709 (line 764) 43710 * __fractudqsf: Fixed-point fractional library routines. 43711 (line 790) 43712 * __fractudqsi: Fixed-point fractional library routines. 43713 (line 786) 43714 * __fractudqsq: Fixed-point fractional library routines. 43715 (line 759) 43716 * __fractudqta: Fixed-point fractional library routines. 43717 (line 768) 43718 * __fractudqti: Fixed-point fractional library routines. 43719 (line 789) 43720 * __fractudquda: Fixed-point fractional library routines. 43721 (line 780) 43722 * __fractudquha: Fixed-point fractional library routines. 43723 (line 776) 43724 * __fractudquhq2: Fixed-point fractional library routines. 43725 (line 772) 43726 * __fractudquqq2: Fixed-point fractional library routines. 43727 (line 770) 43728 * __fractudqusa: Fixed-point fractional library routines. 43729 (line 778) 43730 * __fractudqusq2: Fixed-point fractional library routines. 43731 (line 774) 43732 * __fractudquta: Fixed-point fractional library routines. 43733 (line 782) 43734 * __fractuhada: Fixed-point fractional library routines. 43735 (line 799) 43736 * __fractuhadf: Fixed-point fractional library routines. 43737 (line 822) 43738 * __fractuhadi: Fixed-point fractional library routines. 43739 (line 819) 43740 * __fractuhadq: Fixed-point fractional library routines. 43741 (line 796) 43742 * __fractuhaha: Fixed-point fractional library routines. 43743 (line 797) 43744 * __fractuhahi: Fixed-point fractional library routines. 43745 (line 817) 43746 * __fractuhahq: Fixed-point fractional library routines. 43747 (line 793) 43748 * __fractuhaqi: Fixed-point fractional library routines. 43749 (line 816) 43750 * __fractuhaqq: Fixed-point fractional library routines. 43751 (line 792) 43752 * __fractuhasa: Fixed-point fractional library routines. 43753 (line 798) 43754 * __fractuhasf: Fixed-point fractional library routines. 43755 (line 821) 43756 * __fractuhasi: Fixed-point fractional library routines. 43757 (line 818) 43758 * __fractuhasq: Fixed-point fractional library routines. 43759 (line 794) 43760 * __fractuhata: Fixed-point fractional library routines. 43761 (line 801) 43762 * __fractuhati: Fixed-point fractional library routines. 43763 (line 820) 43764 * __fractuhauda2: Fixed-point fractional library routines. 43765 (line 813) 43766 * __fractuhaudq: Fixed-point fractional library routines. 43767 (line 809) 43768 * __fractuhauhq: Fixed-point fractional library routines. 43769 (line 805) 43770 * __fractuhauqq: Fixed-point fractional library routines. 43771 (line 803) 43772 * __fractuhausa2: Fixed-point fractional library routines. 43773 (line 811) 43774 * __fractuhausq: Fixed-point fractional library routines. 43775 (line 807) 43776 * __fractuhauta2: Fixed-point fractional library routines. 43777 (line 815) 43778 * __fractuhqda: Fixed-point fractional library routines. 43779 (line 702) 43780 * __fractuhqdf: Fixed-point fractional library routines. 43781 (line 723) 43782 * __fractuhqdi: Fixed-point fractional library routines. 43783 (line 720) 43784 * __fractuhqdq: Fixed-point fractional library routines. 43785 (line 699) 43786 * __fractuhqha: Fixed-point fractional library routines. 43787 (line 700) 43788 * __fractuhqhi: Fixed-point fractional library routines. 43789 (line 718) 43790 * __fractuhqhq: Fixed-point fractional library routines. 43791 (line 697) 43792 * __fractuhqqi: Fixed-point fractional library routines. 43793 (line 717) 43794 * __fractuhqqq: Fixed-point fractional library routines. 43795 (line 696) 43796 * __fractuhqsa: Fixed-point fractional library routines. 43797 (line 701) 43798 * __fractuhqsf: Fixed-point fractional library routines. 43799 (line 722) 43800 * __fractuhqsi: Fixed-point fractional library routines. 43801 (line 719) 43802 * __fractuhqsq: Fixed-point fractional library routines. 43803 (line 698) 43804 * __fractuhqta: Fixed-point fractional library routines. 43805 (line 703) 43806 * __fractuhqti: Fixed-point fractional library routines. 43807 (line 721) 43808 * __fractuhquda: Fixed-point fractional library routines. 43809 (line 714) 43810 * __fractuhqudq2: Fixed-point fractional library routines. 43811 (line 709) 43812 * __fractuhquha: Fixed-point fractional library routines. 43813 (line 711) 43814 * __fractuhquqq2: Fixed-point fractional library routines. 43815 (line 705) 43816 * __fractuhqusa: Fixed-point fractional library routines. 43817 (line 712) 43818 * __fractuhqusq2: Fixed-point fractional library routines. 43819 (line 707) 43820 * __fractuhquta: Fixed-point fractional library routines. 43821 (line 716) 43822 * __fractunsdadi: Fixed-point fractional library routines. 43823 (line 1555) 43824 * __fractunsdahi: Fixed-point fractional library routines. 43825 (line 1553) 43826 * __fractunsdaqi: Fixed-point fractional library routines. 43827 (line 1552) 43828 * __fractunsdasi: Fixed-point fractional library routines. 43829 (line 1554) 43830 * __fractunsdati: Fixed-point fractional library routines. 43831 (line 1556) 43832 * __fractunsdida: Fixed-point fractional library routines. 43833 (line 1707) 43834 * __fractunsdidq: Fixed-point fractional library routines. 43835 (line 1704) 43836 * __fractunsdiha: Fixed-point fractional library routines. 43837 (line 1705) 43838 * __fractunsdihq: Fixed-point fractional library routines. 43839 (line 1702) 43840 * __fractunsdiqq: Fixed-point fractional library routines. 43841 (line 1701) 43842 * __fractunsdisa: Fixed-point fractional library routines. 43843 (line 1706) 43844 * __fractunsdisq: Fixed-point fractional library routines. 43845 (line 1703) 43846 * __fractunsdita: Fixed-point fractional library routines. 43847 (line 1708) 43848 * __fractunsdiuda: Fixed-point fractional library routines. 43849 (line 1720) 43850 * __fractunsdiudq: Fixed-point fractional library routines. 43851 (line 1715) 43852 * __fractunsdiuha: Fixed-point fractional library routines. 43853 (line 1717) 43854 * __fractunsdiuhq: Fixed-point fractional library routines. 43855 (line 1711) 43856 * __fractunsdiuqq: Fixed-point fractional library routines. 43857 (line 1710) 43858 * __fractunsdiusa: Fixed-point fractional library routines. 43859 (line 1718) 43860 * __fractunsdiusq: Fixed-point fractional library routines. 43861 (line 1713) 43862 * __fractunsdiuta: Fixed-point fractional library routines. 43863 (line 1722) 43864 * __fractunsdqdi: Fixed-point fractional library routines. 43865 (line 1539) 43866 * __fractunsdqhi: Fixed-point fractional library routines. 43867 (line 1537) 43868 * __fractunsdqqi: Fixed-point fractional library routines. 43869 (line 1536) 43870 * __fractunsdqsi: Fixed-point fractional library routines. 43871 (line 1538) 43872 * __fractunsdqti: Fixed-point fractional library routines. 43873 (line 1541) 43874 * __fractunshadi: Fixed-point fractional library routines. 43875 (line 1545) 43876 * __fractunshahi: Fixed-point fractional library routines. 43877 (line 1543) 43878 * __fractunshaqi: Fixed-point fractional library routines. 43879 (line 1542) 43880 * __fractunshasi: Fixed-point fractional library routines. 43881 (line 1544) 43882 * __fractunshati: Fixed-point fractional library routines. 43883 (line 1546) 43884 * __fractunshida: Fixed-point fractional library routines. 43885 (line 1663) 43886 * __fractunshidq: Fixed-point fractional library routines. 43887 (line 1660) 43888 * __fractunshiha: Fixed-point fractional library routines. 43889 (line 1661) 43890 * __fractunshihq: Fixed-point fractional library routines. 43891 (line 1658) 43892 * __fractunshiqq: Fixed-point fractional library routines. 43893 (line 1657) 43894 * __fractunshisa: Fixed-point fractional library routines. 43895 (line 1662) 43896 * __fractunshisq: Fixed-point fractional library routines. 43897 (line 1659) 43898 * __fractunshita: Fixed-point fractional library routines. 43899 (line 1664) 43900 * __fractunshiuda: Fixed-point fractional library routines. 43901 (line 1676) 43902 * __fractunshiudq: Fixed-point fractional library routines. 43903 (line 1671) 43904 * __fractunshiuha: Fixed-point fractional library routines. 43905 (line 1673) 43906 * __fractunshiuhq: Fixed-point fractional library routines. 43907 (line 1667) 43908 * __fractunshiuqq: Fixed-point fractional library routines. 43909 (line 1666) 43910 * __fractunshiusa: Fixed-point fractional library routines. 43911 (line 1674) 43912 * __fractunshiusq: Fixed-point fractional library routines. 43913 (line 1669) 43914 * __fractunshiuta: Fixed-point fractional library routines. 43915 (line 1678) 43916 * __fractunshqdi: Fixed-point fractional library routines. 43917 (line 1529) 43918 * __fractunshqhi: Fixed-point fractional library routines. 43919 (line 1527) 43920 * __fractunshqqi: Fixed-point fractional library routines. 43921 (line 1526) 43922 * __fractunshqsi: Fixed-point fractional library routines. 43923 (line 1528) 43924 * __fractunshqti: Fixed-point fractional library routines. 43925 (line 1530) 43926 * __fractunsqida: Fixed-point fractional library routines. 43927 (line 1641) 43928 * __fractunsqidq: Fixed-point fractional library routines. 43929 (line 1638) 43930 * __fractunsqiha: Fixed-point fractional library routines. 43931 (line 1639) 43932 * __fractunsqihq: Fixed-point fractional library routines. 43933 (line 1636) 43934 * __fractunsqiqq: Fixed-point fractional library routines. 43935 (line 1635) 43936 * __fractunsqisa: Fixed-point fractional library routines. 43937 (line 1640) 43938 * __fractunsqisq: Fixed-point fractional library routines. 43939 (line 1637) 43940 * __fractunsqita: Fixed-point fractional library routines. 43941 (line 1642) 43942 * __fractunsqiuda: Fixed-point fractional library routines. 43943 (line 1654) 43944 * __fractunsqiudq: Fixed-point fractional library routines. 43945 (line 1649) 43946 * __fractunsqiuha: Fixed-point fractional library routines. 43947 (line 1651) 43948 * __fractunsqiuhq: Fixed-point fractional library routines. 43949 (line 1645) 43950 * __fractunsqiuqq: Fixed-point fractional library routines. 43951 (line 1644) 43952 * __fractunsqiusa: Fixed-point fractional library routines. 43953 (line 1652) 43954 * __fractunsqiusq: Fixed-point fractional library routines. 43955 (line 1647) 43956 * __fractunsqiuta: Fixed-point fractional library routines. 43957 (line 1656) 43958 * __fractunsqqdi: Fixed-point fractional library routines. 43959 (line 1524) 43960 * __fractunsqqhi: Fixed-point fractional library routines. 43961 (line 1522) 43962 * __fractunsqqqi: Fixed-point fractional library routines. 43963 (line 1521) 43964 * __fractunsqqsi: Fixed-point fractional library routines. 43965 (line 1523) 43966 * __fractunsqqti: Fixed-point fractional library routines. 43967 (line 1525) 43968 * __fractunssadi: Fixed-point fractional library routines. 43969 (line 1550) 43970 * __fractunssahi: Fixed-point fractional library routines. 43971 (line 1548) 43972 * __fractunssaqi: Fixed-point fractional library routines. 43973 (line 1547) 43974 * __fractunssasi: Fixed-point fractional library routines. 43975 (line 1549) 43976 * __fractunssati: Fixed-point fractional library routines. 43977 (line 1551) 43978 * __fractunssida: Fixed-point fractional library routines. 43979 (line 1685) 43980 * __fractunssidq: Fixed-point fractional library routines. 43981 (line 1682) 43982 * __fractunssiha: Fixed-point fractional library routines. 43983 (line 1683) 43984 * __fractunssihq: Fixed-point fractional library routines. 43985 (line 1680) 43986 * __fractunssiqq: Fixed-point fractional library routines. 43987 (line 1679) 43988 * __fractunssisa: Fixed-point fractional library routines. 43989 (line 1684) 43990 * __fractunssisq: Fixed-point fractional library routines. 43991 (line 1681) 43992 * __fractunssita: Fixed-point fractional library routines. 43993 (line 1686) 43994 * __fractunssiuda: Fixed-point fractional library routines. 43995 (line 1698) 43996 * __fractunssiudq: Fixed-point fractional library routines. 43997 (line 1693) 43998 * __fractunssiuha: Fixed-point fractional library routines. 43999 (line 1695) 44000 * __fractunssiuhq: Fixed-point fractional library routines. 44001 (line 1689) 44002 * __fractunssiuqq: Fixed-point fractional library routines. 44003 (line 1688) 44004 * __fractunssiusa: Fixed-point fractional library routines. 44005 (line 1696) 44006 * __fractunssiusq: Fixed-point fractional library routines. 44007 (line 1691) 44008 * __fractunssiuta: Fixed-point fractional library routines. 44009 (line 1700) 44010 * __fractunssqdi: Fixed-point fractional library routines. 44011 (line 1534) 44012 * __fractunssqhi: Fixed-point fractional library routines. 44013 (line 1532) 44014 * __fractunssqqi: Fixed-point fractional library routines. 44015 (line 1531) 44016 * __fractunssqsi: Fixed-point fractional library routines. 44017 (line 1533) 44018 * __fractunssqti: Fixed-point fractional library routines. 44019 (line 1535) 44020 * __fractunstadi: Fixed-point fractional library routines. 44021 (line 1560) 44022 * __fractunstahi: Fixed-point fractional library routines. 44023 (line 1558) 44024 * __fractunstaqi: Fixed-point fractional library routines. 44025 (line 1557) 44026 * __fractunstasi: Fixed-point fractional library routines. 44027 (line 1559) 44028 * __fractunstati: Fixed-point fractional library routines. 44029 (line 1562) 44030 * __fractunstida: Fixed-point fractional library routines. 44031 (line 1730) 44032 * __fractunstidq: Fixed-point fractional library routines. 44033 (line 1727) 44034 * __fractunstiha: Fixed-point fractional library routines. 44035 (line 1728) 44036 * __fractunstihq: Fixed-point fractional library routines. 44037 (line 1724) 44038 * __fractunstiqq: Fixed-point fractional library routines. 44039 (line 1723) 44040 * __fractunstisa: Fixed-point fractional library routines. 44041 (line 1729) 44042 * __fractunstisq: Fixed-point fractional library routines. 44043 (line 1725) 44044 * __fractunstita: Fixed-point fractional library routines. 44045 (line 1732) 44046 * __fractunstiuda: Fixed-point fractional library routines. 44047 (line 1746) 44048 * __fractunstiudq: Fixed-point fractional library routines. 44049 (line 1740) 44050 * __fractunstiuha: Fixed-point fractional library routines. 44051 (line 1742) 44052 * __fractunstiuhq: Fixed-point fractional library routines. 44053 (line 1736) 44054 * __fractunstiuqq: Fixed-point fractional library routines. 44055 (line 1734) 44056 * __fractunstiusa: Fixed-point fractional library routines. 44057 (line 1744) 44058 * __fractunstiusq: Fixed-point fractional library routines. 44059 (line 1738) 44060 * __fractunstiuta: Fixed-point fractional library routines. 44061 (line 1748) 44062 * __fractunsudadi: Fixed-point fractional library routines. 44063 (line 1622) 44064 * __fractunsudahi: Fixed-point fractional library routines. 44065 (line 1618) 44066 * __fractunsudaqi: Fixed-point fractional library routines. 44067 (line 1616) 44068 * __fractunsudasi: Fixed-point fractional library routines. 44069 (line 1620) 44070 * __fractunsudati: Fixed-point fractional library routines. 44071 (line 1624) 44072 * __fractunsudqdi: Fixed-point fractional library routines. 44073 (line 1596) 44074 * __fractunsudqhi: Fixed-point fractional library routines. 44075 (line 1592) 44076 * __fractunsudqqi: Fixed-point fractional library routines. 44077 (line 1590) 44078 * __fractunsudqsi: Fixed-point fractional library routines. 44079 (line 1594) 44080 * __fractunsudqti: Fixed-point fractional library routines. 44081 (line 1598) 44082 * __fractunsuhadi: Fixed-point fractional library routines. 44083 (line 1606) 44084 * __fractunsuhahi: Fixed-point fractional library routines. 44085 (line 1602) 44086 * __fractunsuhaqi: Fixed-point fractional library routines. 44087 (line 1600) 44088 * __fractunsuhasi: Fixed-point fractional library routines. 44089 (line 1604) 44090 * __fractunsuhati: Fixed-point fractional library routines. 44091 (line 1608) 44092 * __fractunsuhqdi: Fixed-point fractional library routines. 44093 (line 1576) 44094 * __fractunsuhqhi: Fixed-point fractional library routines. 44095 (line 1574) 44096 * __fractunsuhqqi: Fixed-point fractional library routines. 44097 (line 1573) 44098 * __fractunsuhqsi: Fixed-point fractional library routines. 44099 (line 1575) 44100 * __fractunsuhqti: Fixed-point fractional library routines. 44101 (line 1578) 44102 * __fractunsuqqdi: Fixed-point fractional library routines. 44103 (line 1570) 44104 * __fractunsuqqhi: Fixed-point fractional library routines. 44105 (line 1566) 44106 * __fractunsuqqqi: Fixed-point fractional library routines. 44107 (line 1564) 44108 * __fractunsuqqsi: Fixed-point fractional library routines. 44109 (line 1568) 44110 * __fractunsuqqti: Fixed-point fractional library routines. 44111 (line 1572) 44112 * __fractunsusadi: Fixed-point fractional library routines. 44113 (line 1612) 44114 * __fractunsusahi: Fixed-point fractional library routines. 44115 (line 1610) 44116 * __fractunsusaqi: Fixed-point fractional library routines. 44117 (line 1609) 44118 * __fractunsusasi: Fixed-point fractional library routines. 44119 (line 1611) 44120 * __fractunsusati: Fixed-point fractional library routines. 44121 (line 1614) 44122 * __fractunsusqdi: Fixed-point fractional library routines. 44123 (line 1586) 44124 * __fractunsusqhi: Fixed-point fractional library routines. 44125 (line 1582) 44126 * __fractunsusqqi: Fixed-point fractional library routines. 44127 (line 1580) 44128 * __fractunsusqsi: Fixed-point fractional library routines. 44129 (line 1584) 44130 * __fractunsusqti: Fixed-point fractional library routines. 44131 (line 1588) 44132 * __fractunsutadi: Fixed-point fractional library routines. 44133 (line 1632) 44134 * __fractunsutahi: Fixed-point fractional library routines. 44135 (line 1628) 44136 * __fractunsutaqi: Fixed-point fractional library routines. 44137 (line 1626) 44138 * __fractunsutasi: Fixed-point fractional library routines. 44139 (line 1630) 44140 * __fractunsutati: Fixed-point fractional library routines. 44141 (line 1634) 44142 * __fractuqqda: Fixed-point fractional library routines. 44143 (line 672) 44144 * __fractuqqdf: Fixed-point fractional library routines. 44145 (line 695) 44146 * __fractuqqdi: Fixed-point fractional library routines. 44147 (line 692) 44148 * __fractuqqdq: Fixed-point fractional library routines. 44149 (line 669) 44150 * __fractuqqha: Fixed-point fractional library routines. 44151 (line 670) 44152 * __fractuqqhi: Fixed-point fractional library routines. 44153 (line 690) 44154 * __fractuqqhq: Fixed-point fractional library routines. 44155 (line 666) 44156 * __fractuqqqi: Fixed-point fractional library routines. 44157 (line 689) 44158 * __fractuqqqq: Fixed-point fractional library routines. 44159 (line 665) 44160 * __fractuqqsa: Fixed-point fractional library routines. 44161 (line 671) 44162 * __fractuqqsf: Fixed-point fractional library routines. 44163 (line 694) 44164 * __fractuqqsi: Fixed-point fractional library routines. 44165 (line 691) 44166 * __fractuqqsq: Fixed-point fractional library routines. 44167 (line 667) 44168 * __fractuqqta: Fixed-point fractional library routines. 44169 (line 674) 44170 * __fractuqqti: Fixed-point fractional library routines. 44171 (line 693) 44172 * __fractuqquda: Fixed-point fractional library routines. 44173 (line 686) 44174 * __fractuqqudq2: Fixed-point fractional library routines. 44175 (line 680) 44176 * __fractuqquha: Fixed-point fractional library routines. 44177 (line 682) 44178 * __fractuqquhq2: Fixed-point fractional library routines. 44179 (line 676) 44180 * __fractuqqusa: Fixed-point fractional library routines. 44181 (line 684) 44182 * __fractuqqusq2: Fixed-point fractional library routines. 44183 (line 678) 44184 * __fractuqquta: Fixed-point fractional library routines. 44185 (line 688) 44186 * __fractusada: Fixed-point fractional library routines. 44187 (line 829) 44188 * __fractusadf: Fixed-point fractional library routines. 44189 (line 850) 44190 * __fractusadi: Fixed-point fractional library routines. 44191 (line 847) 44192 * __fractusadq: Fixed-point fractional library routines. 44193 (line 826) 44194 * __fractusaha: Fixed-point fractional library routines. 44195 (line 827) 44196 * __fractusahi: Fixed-point fractional library routines. 44197 (line 845) 44198 * __fractusahq: Fixed-point fractional library routines. 44199 (line 824) 44200 * __fractusaqi: Fixed-point fractional library routines. 44201 (line 844) 44202 * __fractusaqq: Fixed-point fractional library routines. 44203 (line 823) 44204 * __fractusasa: Fixed-point fractional library routines. 44205 (line 828) 44206 * __fractusasf: Fixed-point fractional library routines. 44207 (line 849) 44208 * __fractusasi: Fixed-point fractional library routines. 44209 (line 846) 44210 * __fractusasq: Fixed-point fractional library routines. 44211 (line 825) 44212 * __fractusata: Fixed-point fractional library routines. 44213 (line 830) 44214 * __fractusati: Fixed-point fractional library routines. 44215 (line 848) 44216 * __fractusauda2: Fixed-point fractional library routines. 44217 (line 841) 44218 * __fractusaudq: Fixed-point fractional library routines. 44219 (line 837) 44220 * __fractusauha2: Fixed-point fractional library routines. 44221 (line 839) 44222 * __fractusauhq: Fixed-point fractional library routines. 44223 (line 833) 44224 * __fractusauqq: Fixed-point fractional library routines. 44225 (line 832) 44226 * __fractusausq: Fixed-point fractional library routines. 44227 (line 835) 44228 * __fractusauta2: Fixed-point fractional library routines. 44229 (line 843) 44230 * __fractusqda: Fixed-point fractional library routines. 44231 (line 731) 44232 * __fractusqdf: Fixed-point fractional library routines. 44233 (line 754) 44234 * __fractusqdi: Fixed-point fractional library routines. 44235 (line 751) 44236 * __fractusqdq: Fixed-point fractional library routines. 44237 (line 728) 44238 * __fractusqha: Fixed-point fractional library routines. 44239 (line 729) 44240 * __fractusqhi: Fixed-point fractional library routines. 44241 (line 749) 44242 * __fractusqhq: Fixed-point fractional library routines. 44243 (line 725) 44244 * __fractusqqi: Fixed-point fractional library routines. 44245 (line 748) 44246 * __fractusqqq: Fixed-point fractional library routines. 44247 (line 724) 44248 * __fractusqsa: Fixed-point fractional library routines. 44249 (line 730) 44250 * __fractusqsf: Fixed-point fractional library routines. 44251 (line 753) 44252 * __fractusqsi: Fixed-point fractional library routines. 44253 (line 750) 44254 * __fractusqsq: Fixed-point fractional library routines. 44255 (line 726) 44256 * __fractusqta: Fixed-point fractional library routines. 44257 (line 733) 44258 * __fractusqti: Fixed-point fractional library routines. 44259 (line 752) 44260 * __fractusquda: Fixed-point fractional library routines. 44261 (line 745) 44262 * __fractusqudq2: Fixed-point fractional library routines. 44263 (line 739) 44264 * __fractusquha: Fixed-point fractional library routines. 44265 (line 741) 44266 * __fractusquhq2: Fixed-point fractional library routines. 44267 (line 737) 44268 * __fractusquqq2: Fixed-point fractional library routines. 44269 (line 735) 44270 * __fractusqusa: Fixed-point fractional library routines. 44271 (line 743) 44272 * __fractusquta: Fixed-point fractional library routines. 44273 (line 747) 44274 * __fractutada: Fixed-point fractional library routines. 44275 (line 893) 44276 * __fractutadf: Fixed-point fractional library routines. 44277 (line 918) 44278 * __fractutadi: Fixed-point fractional library routines. 44279 (line 914) 44280 * __fractutadq: Fixed-point fractional library routines. 44281 (line 888) 44282 * __fractutaha: Fixed-point fractional library routines. 44283 (line 890) 44284 * __fractutahi: Fixed-point fractional library routines. 44285 (line 912) 44286 * __fractutahq: Fixed-point fractional library routines. 44287 (line 884) 44288 * __fractutaqi: Fixed-point fractional library routines. 44289 (line 911) 44290 * __fractutaqq: Fixed-point fractional library routines. 44291 (line 883) 44292 * __fractutasa: Fixed-point fractional library routines. 44293 (line 891) 44294 * __fractutasf: Fixed-point fractional library routines. 44295 (line 917) 44296 * __fractutasi: Fixed-point fractional library routines. 44297 (line 913) 44298 * __fractutasq: Fixed-point fractional library routines. 44299 (line 886) 44300 * __fractutata: Fixed-point fractional library routines. 44301 (line 895) 44302 * __fractutati: Fixed-point fractional library routines. 44303 (line 916) 44304 * __fractutauda2: Fixed-point fractional library routines. 44305 (line 909) 44306 * __fractutaudq: Fixed-point fractional library routines. 44307 (line 903) 44308 * __fractutauha2: Fixed-point fractional library routines. 44309 (line 905) 44310 * __fractutauhq: Fixed-point fractional library routines. 44311 (line 899) 44312 * __fractutauqq: Fixed-point fractional library routines. 44313 (line 897) 44314 * __fractutausa2: Fixed-point fractional library routines. 44315 (line 907) 44316 * __fractutausq: Fixed-point fractional library routines. 44317 (line 901) 44318 * __gedf2: Soft float library routines. 44319 (line 206) 44320 * __gesf2: Soft float library routines. 44321 (line 205) 44322 * __getf2: Soft float library routines. 44323 (line 207) 44324 * __gtdf2: Soft float library routines. 44325 (line 224) 44326 * __gtsf2: Soft float library routines. 44327 (line 223) 44328 * __gttf2: Soft float library routines. 44329 (line 225) 44330 * __ledf2: Soft float library routines. 44331 (line 218) 44332 * __lesf2: Soft float library routines. 44333 (line 217) 44334 * __letf2: Soft float library routines. 44335 (line 219) 44336 * __lshrdi3: Integer library routines. 44337 (line 31) 44338 * __lshrsi3: Integer library routines. 44339 (line 30) 44340 * __lshrti3: Integer library routines. 44341 (line 32) 44342 * __lshruda3: Fixed-point fractional library routines. 44343 (line 390) 44344 * __lshrudq3: Fixed-point fractional library routines. 44345 (line 384) 44346 * __lshruha3: Fixed-point fractional library routines. 44347 (line 386) 44348 * __lshruhq3: Fixed-point fractional library routines. 44349 (line 380) 44350 * __lshruqq3: Fixed-point fractional library routines. 44351 (line 378) 44352 * __lshrusa3: Fixed-point fractional library routines. 44353 (line 388) 44354 * __lshrusq3: Fixed-point fractional library routines. 44355 (line 382) 44356 * __lshruta3: Fixed-point fractional library routines. 44357 (line 392) 44358 * __ltdf2: Soft float library routines. 44359 (line 212) 44360 * __ltsf2: Soft float library routines. 44361 (line 211) 44362 * __lttf2: Soft float library routines. 44363 (line 213) 44364 * __main: Collect2. (line 15) 44365 * __moddi3: Integer library routines. 44366 (line 37) 44367 * __modsi3: Integer library routines. 44368 (line 36) 44369 * __modti3: Integer library routines. 44370 (line 38) 44371 * __morestack_current_segment: Miscellaneous routines. 44372 (line 46) 44373 * __morestack_initial_sp: Miscellaneous routines. 44374 (line 47) 44375 * __morestack_segments: Miscellaneous routines. 44376 (line 45) 44377 * __mulda3: Fixed-point fractional library routines. 44378 (line 171) 44379 * __muldc3: Soft float library routines. 44380 (line 241) 44381 * __muldf3: Soft float library routines. 44382 (line 40) 44383 * __muldi3: Integer library routines. 44384 (line 43) 44385 * __muldq3: Fixed-point fractional library routines. 44386 (line 159) 44387 * __mulha3: Fixed-point fractional library routines. 44388 (line 169) 44389 * __mulhq3: Fixed-point fractional library routines. 44390 (line 156) 44391 * __mulqq3: Fixed-point fractional library routines. 44392 (line 155) 44393 * __mulsa3: Fixed-point fractional library routines. 44394 (line 170) 44395 * __mulsc3: Soft float library routines. 44396 (line 239) 44397 * __mulsf3: Soft float library routines. 44398 (line 39) 44399 * __mulsi3: Integer library routines. 44400 (line 42) 44401 * __mulsq3: Fixed-point fractional library routines. 44402 (line 157) 44403 * __multa3: Fixed-point fractional library routines. 44404 (line 173) 44405 * __multc3: Soft float library routines. 44406 (line 243) 44407 * __multf3: Soft float library routines. 44408 (line 42) 44409 * __multi3: Integer library routines. 44410 (line 44) 44411 * __muluda3: Fixed-point fractional library routines. 44412 (line 179) 44413 * __muludq3: Fixed-point fractional library routines. 44414 (line 167) 44415 * __muluha3: Fixed-point fractional library routines. 44416 (line 175) 44417 * __muluhq3: Fixed-point fractional library routines. 44418 (line 163) 44419 * __muluqq3: Fixed-point fractional library routines. 44420 (line 161) 44421 * __mulusa3: Fixed-point fractional library routines. 44422 (line 177) 44423 * __mulusq3: Fixed-point fractional library routines. 44424 (line 165) 44425 * __muluta3: Fixed-point fractional library routines. 44426 (line 181) 44427 * __mulvdi3: Integer library routines. 44428 (line 115) 44429 * __mulvsi3: Integer library routines. 44430 (line 114) 44431 * __mulxc3: Soft float library routines. 44432 (line 245) 44433 * __mulxf3: Soft float library routines. 44434 (line 44) 44435 * __nedf2: Soft float library routines. 44436 (line 200) 44437 * __negda2: Fixed-point fractional library routines. 44438 (line 299) 44439 * __negdf2: Soft float library routines. 44440 (line 56) 44441 * __negdi2: Integer library routines. 44442 (line 47) 44443 * __negdq2: Fixed-point fractional library routines. 44444 (line 289) 44445 * __negha2: Fixed-point fractional library routines. 44446 (line 297) 44447 * __neghq2: Fixed-point fractional library routines. 44448 (line 287) 44449 * __negqq2: Fixed-point fractional library routines. 44450 (line 286) 44451 * __negsa2: Fixed-point fractional library routines. 44452 (line 298) 44453 * __negsf2: Soft float library routines. 44454 (line 55) 44455 * __negsq2: Fixed-point fractional library routines. 44456 (line 288) 44457 * __negta2: Fixed-point fractional library routines. 44458 (line 300) 44459 * __negtf2: Soft float library routines. 44460 (line 57) 44461 * __negti2: Integer library routines. 44462 (line 48) 44463 * __neguda2: Fixed-point fractional library routines. 44464 (line 305) 44465 * __negudq2: Fixed-point fractional library routines. 44466 (line 296) 44467 * __neguha2: Fixed-point fractional library routines. 44468 (line 302) 44469 * __neguhq2: Fixed-point fractional library routines. 44470 (line 292) 44471 * __neguqq2: Fixed-point fractional library routines. 44472 (line 291) 44473 * __negusa2: Fixed-point fractional library routines. 44474 (line 303) 44475 * __negusq2: Fixed-point fractional library routines. 44476 (line 294) 44477 * __neguta2: Fixed-point fractional library routines. 44478 (line 307) 44479 * __negvdi2: Integer library routines. 44480 (line 119) 44481 * __negvsi2: Integer library routines. 44482 (line 118) 44483 * __negxf2: Soft float library routines. 44484 (line 58) 44485 * __nesf2: Soft float library routines. 44486 (line 199) 44487 * __netf2: Soft float library routines. 44488 (line 201) 44489 * __paritydi2: Integer library routines. 44490 (line 151) 44491 * __paritysi2: Integer library routines. 44492 (line 150) 44493 * __parityti2: Integer library routines. 44494 (line 152) 44495 * __popcountdi2: Integer library routines. 44496 (line 157) 44497 * __popcountsi2: Integer library routines. 44498 (line 156) 44499 * __popcountti2: Integer library routines. 44500 (line 158) 44501 * __powidf2: Soft float library routines. 44502 (line 233) 44503 * __powisf2: Soft float library routines. 44504 (line 232) 44505 * __powitf2: Soft float library routines. 44506 (line 234) 44507 * __powixf2: Soft float library routines. 44508 (line 235) 44509 * __satfractdadq: Fixed-point fractional library routines. 44510 (line 1153) 44511 * __satfractdaha2: Fixed-point fractional library routines. 44512 (line 1154) 44513 * __satfractdahq: Fixed-point fractional library routines. 44514 (line 1151) 44515 * __satfractdaqq: Fixed-point fractional library routines. 44516 (line 1150) 44517 * __satfractdasa2: Fixed-point fractional library routines. 44518 (line 1155) 44519 * __satfractdasq: Fixed-point fractional library routines. 44520 (line 1152) 44521 * __satfractdata2: Fixed-point fractional library routines. 44522 (line 1156) 44523 * __satfractdauda: Fixed-point fractional library routines. 44524 (line 1166) 44525 * __satfractdaudq: Fixed-point fractional library routines. 44526 (line 1162) 44527 * __satfractdauha: Fixed-point fractional library routines. 44528 (line 1164) 44529 * __satfractdauhq: Fixed-point fractional library routines. 44530 (line 1159) 44531 * __satfractdauqq: Fixed-point fractional library routines. 44532 (line 1158) 44533 * __satfractdausa: Fixed-point fractional library routines. 44534 (line 1165) 44535 * __satfractdausq: Fixed-point fractional library routines. 44536 (line 1160) 44537 * __satfractdauta: Fixed-point fractional library routines. 44538 (line 1168) 44539 * __satfractdfda: Fixed-point fractional library routines. 44540 (line 1506) 44541 * __satfractdfdq: Fixed-point fractional library routines. 44542 (line 1503) 44543 * __satfractdfha: Fixed-point fractional library routines. 44544 (line 1504) 44545 * __satfractdfhq: Fixed-point fractional library routines. 44546 (line 1501) 44547 * __satfractdfqq: Fixed-point fractional library routines. 44548 (line 1500) 44549 * __satfractdfsa: Fixed-point fractional library routines. 44550 (line 1505) 44551 * __satfractdfsq: Fixed-point fractional library routines. 44552 (line 1502) 44553 * __satfractdfta: Fixed-point fractional library routines. 44554 (line 1507) 44555 * __satfractdfuda: Fixed-point fractional library routines. 44556 (line 1515) 44557 * __satfractdfudq: Fixed-point fractional library routines. 44558 (line 1512) 44559 * __satfractdfuha: Fixed-point fractional library routines. 44560 (line 1513) 44561 * __satfractdfuhq: Fixed-point fractional library routines. 44562 (line 1509) 44563 * __satfractdfuqq: Fixed-point fractional library routines. 44564 (line 1508) 44565 * __satfractdfusa: Fixed-point fractional library routines. 44566 (line 1514) 44567 * __satfractdfusq: Fixed-point fractional library routines. 44568 (line 1510) 44569 * __satfractdfuta: Fixed-point fractional library routines. 44570 (line 1517) 44571 * __satfractdida: Fixed-point fractional library routines. 44572 (line 1456) 44573 * __satfractdidq: Fixed-point fractional library routines. 44574 (line 1453) 44575 * __satfractdiha: Fixed-point fractional library routines. 44576 (line 1454) 44577 * __satfractdihq: Fixed-point fractional library routines. 44578 (line 1451) 44579 * __satfractdiqq: Fixed-point fractional library routines. 44580 (line 1450) 44581 * __satfractdisa: Fixed-point fractional library routines. 44582 (line 1455) 44583 * __satfractdisq: Fixed-point fractional library routines. 44584 (line 1452) 44585 * __satfractdita: Fixed-point fractional library routines. 44586 (line 1457) 44587 * __satfractdiuda: Fixed-point fractional library routines. 44588 (line 1464) 44589 * __satfractdiudq: Fixed-point fractional library routines. 44590 (line 1461) 44591 * __satfractdiuha: Fixed-point fractional library routines. 44592 (line 1462) 44593 * __satfractdiuhq: Fixed-point fractional library routines. 44594 (line 1459) 44595 * __satfractdiuqq: Fixed-point fractional library routines. 44596 (line 1458) 44597 * __satfractdiusa: Fixed-point fractional library routines. 44598 (line 1463) 44599 * __satfractdiusq: Fixed-point fractional library routines. 44600 (line 1460) 44601 * __satfractdiuta: Fixed-point fractional library routines. 44602 (line 1465) 44603 * __satfractdqda: Fixed-point fractional library routines. 44604 (line 1098) 44605 * __satfractdqha: Fixed-point fractional library routines. 44606 (line 1096) 44607 * __satfractdqhq2: Fixed-point fractional library routines. 44608 (line 1094) 44609 * __satfractdqqq2: Fixed-point fractional library routines. 44610 (line 1093) 44611 * __satfractdqsa: Fixed-point fractional library routines. 44612 (line 1097) 44613 * __satfractdqsq2: Fixed-point fractional library routines. 44614 (line 1095) 44615 * __satfractdqta: Fixed-point fractional library routines. 44616 (line 1099) 44617 * __satfractdquda: Fixed-point fractional library routines. 44618 (line 1111) 44619 * __satfractdqudq: Fixed-point fractional library routines. 44620 (line 1106) 44621 * __satfractdquha: Fixed-point fractional library routines. 44622 (line 1108) 44623 * __satfractdquhq: Fixed-point fractional library routines. 44624 (line 1102) 44625 * __satfractdquqq: Fixed-point fractional library routines. 44626 (line 1101) 44627 * __satfractdqusa: Fixed-point fractional library routines. 44628 (line 1109) 44629 * __satfractdqusq: Fixed-point fractional library routines. 44630 (line 1104) 44631 * __satfractdquta: Fixed-point fractional library routines. 44632 (line 1113) 44633 * __satfracthada2: Fixed-point fractional library routines. 44634 (line 1119) 44635 * __satfracthadq: Fixed-point fractional library routines. 44636 (line 1117) 44637 * __satfracthahq: Fixed-point fractional library routines. 44638 (line 1115) 44639 * __satfracthaqq: Fixed-point fractional library routines. 44640 (line 1114) 44641 * __satfracthasa2: Fixed-point fractional library routines. 44642 (line 1118) 44643 * __satfracthasq: Fixed-point fractional library routines. 44644 (line 1116) 44645 * __satfracthata2: Fixed-point fractional library routines. 44646 (line 1120) 44647 * __satfracthauda: Fixed-point fractional library routines. 44648 (line 1132) 44649 * __satfracthaudq: Fixed-point fractional library routines. 44650 (line 1127) 44651 * __satfracthauha: Fixed-point fractional library routines. 44652 (line 1129) 44653 * __satfracthauhq: Fixed-point fractional library routines. 44654 (line 1123) 44655 * __satfracthauqq: Fixed-point fractional library routines. 44656 (line 1122) 44657 * __satfracthausa: Fixed-point fractional library routines. 44658 (line 1130) 44659 * __satfracthausq: Fixed-point fractional library routines. 44660 (line 1125) 44661 * __satfracthauta: Fixed-point fractional library routines. 44662 (line 1134) 44663 * __satfracthida: Fixed-point fractional library routines. 44664 (line 1424) 44665 * __satfracthidq: Fixed-point fractional library routines. 44666 (line 1421) 44667 * __satfracthiha: Fixed-point fractional library routines. 44668 (line 1422) 44669 * __satfracthihq: Fixed-point fractional library routines. 44670 (line 1419) 44671 * __satfracthiqq: Fixed-point fractional library routines. 44672 (line 1418) 44673 * __satfracthisa: Fixed-point fractional library routines. 44674 (line 1423) 44675 * __satfracthisq: Fixed-point fractional library routines. 44676 (line 1420) 44677 * __satfracthita: Fixed-point fractional library routines. 44678 (line 1425) 44679 * __satfracthiuda: Fixed-point fractional library routines. 44680 (line 1432) 44681 * __satfracthiudq: Fixed-point fractional library routines. 44682 (line 1429) 44683 * __satfracthiuha: Fixed-point fractional library routines. 44684 (line 1430) 44685 * __satfracthiuhq: Fixed-point fractional library routines. 44686 (line 1427) 44687 * __satfracthiuqq: Fixed-point fractional library routines. 44688 (line 1426) 44689 * __satfracthiusa: Fixed-point fractional library routines. 44690 (line 1431) 44691 * __satfracthiusq: Fixed-point fractional library routines. 44692 (line 1428) 44693 * __satfracthiuta: Fixed-point fractional library routines. 44694 (line 1433) 44695 * __satfracthqda: Fixed-point fractional library routines. 44696 (line 1064) 44697 * __satfracthqdq2: Fixed-point fractional library routines. 44698 (line 1061) 44699 * __satfracthqha: Fixed-point fractional library routines. 44700 (line 1062) 44701 * __satfracthqqq2: Fixed-point fractional library routines. 44702 (line 1059) 44703 * __satfracthqsa: Fixed-point fractional library routines. 44704 (line 1063) 44705 * __satfracthqsq2: Fixed-point fractional library routines. 44706 (line 1060) 44707 * __satfracthqta: Fixed-point fractional library routines. 44708 (line 1065) 44709 * __satfracthquda: Fixed-point fractional library routines. 44710 (line 1072) 44711 * __satfracthqudq: Fixed-point fractional library routines. 44712 (line 1069) 44713 * __satfracthquha: Fixed-point fractional library routines. 44714 (line 1070) 44715 * __satfracthquhq: Fixed-point fractional library routines. 44716 (line 1067) 44717 * __satfracthquqq: Fixed-point fractional library routines. 44718 (line 1066) 44719 * __satfracthqusa: Fixed-point fractional library routines. 44720 (line 1071) 44721 * __satfracthqusq: Fixed-point fractional library routines. 44722 (line 1068) 44723 * __satfracthquta: Fixed-point fractional library routines. 44724 (line 1073) 44725 * __satfractqida: Fixed-point fractional library routines. 44726 (line 1402) 44727 * __satfractqidq: Fixed-point fractional library routines. 44728 (line 1399) 44729 * __satfractqiha: Fixed-point fractional library routines. 44730 (line 1400) 44731 * __satfractqihq: Fixed-point fractional library routines. 44732 (line 1397) 44733 * __satfractqiqq: Fixed-point fractional library routines. 44734 (line 1396) 44735 * __satfractqisa: Fixed-point fractional library routines. 44736 (line 1401) 44737 * __satfractqisq: Fixed-point fractional library routines. 44738 (line 1398) 44739 * __satfractqita: Fixed-point fractional library routines. 44740 (line 1403) 44741 * __satfractqiuda: Fixed-point fractional library routines. 44742 (line 1415) 44743 * __satfractqiudq: Fixed-point fractional library routines. 44744 (line 1410) 44745 * __satfractqiuha: Fixed-point fractional library routines. 44746 (line 1412) 44747 * __satfractqiuhq: Fixed-point fractional library routines. 44748 (line 1406) 44749 * __satfractqiuqq: Fixed-point fractional library routines. 44750 (line 1405) 44751 * __satfractqiusa: Fixed-point fractional library routines. 44752 (line 1413) 44753 * __satfractqiusq: Fixed-point fractional library routines. 44754 (line 1408) 44755 * __satfractqiuta: Fixed-point fractional library routines. 44756 (line 1417) 44757 * __satfractqqda: Fixed-point fractional library routines. 44758 (line 1043) 44759 * __satfractqqdq2: Fixed-point fractional library routines. 44760 (line 1040) 44761 * __satfractqqha: Fixed-point fractional library routines. 44762 (line 1041) 44763 * __satfractqqhq2: Fixed-point fractional library routines. 44764 (line 1038) 44765 * __satfractqqsa: Fixed-point fractional library routines. 44766 (line 1042) 44767 * __satfractqqsq2: Fixed-point fractional library routines. 44768 (line 1039) 44769 * __satfractqqta: Fixed-point fractional library routines. 44770 (line 1044) 44771 * __satfractqquda: Fixed-point fractional library routines. 44772 (line 1056) 44773 * __satfractqqudq: Fixed-point fractional library routines. 44774 (line 1051) 44775 * __satfractqquha: Fixed-point fractional library routines. 44776 (line 1053) 44777 * __satfractqquhq: Fixed-point fractional library routines. 44778 (line 1047) 44779 * __satfractqquqq: Fixed-point fractional library routines. 44780 (line 1046) 44781 * __satfractqqusa: Fixed-point fractional library routines. 44782 (line 1054) 44783 * __satfractqqusq: Fixed-point fractional library routines. 44784 (line 1049) 44785 * __satfractqquta: Fixed-point fractional library routines. 44786 (line 1058) 44787 * __satfractsada2: Fixed-point fractional library routines. 44788 (line 1140) 44789 * __satfractsadq: Fixed-point fractional library routines. 44790 (line 1138) 44791 * __satfractsaha2: Fixed-point fractional library routines. 44792 (line 1139) 44793 * __satfractsahq: Fixed-point fractional library routines. 44794 (line 1136) 44795 * __satfractsaqq: Fixed-point fractional library routines. 44796 (line 1135) 44797 * __satfractsasq: Fixed-point fractional library routines. 44798 (line 1137) 44799 * __satfractsata2: Fixed-point fractional library routines. 44800 (line 1141) 44801 * __satfractsauda: Fixed-point fractional library routines. 44802 (line 1148) 44803 * __satfractsaudq: Fixed-point fractional library routines. 44804 (line 1145) 44805 * __satfractsauha: Fixed-point fractional library routines. 44806 (line 1146) 44807 * __satfractsauhq: Fixed-point fractional library routines. 44808 (line 1143) 44809 * __satfractsauqq: Fixed-point fractional library routines. 44810 (line 1142) 44811 * __satfractsausa: Fixed-point fractional library routines. 44812 (line 1147) 44813 * __satfractsausq: Fixed-point fractional library routines. 44814 (line 1144) 44815 * __satfractsauta: Fixed-point fractional library routines. 44816 (line 1149) 44817 * __satfractsfda: Fixed-point fractional library routines. 44818 (line 1490) 44819 * __satfractsfdq: Fixed-point fractional library routines. 44820 (line 1487) 44821 * __satfractsfha: Fixed-point fractional library routines. 44822 (line 1488) 44823 * __satfractsfhq: Fixed-point fractional library routines. 44824 (line 1485) 44825 * __satfractsfqq: Fixed-point fractional library routines. 44826 (line 1484) 44827 * __satfractsfsa: Fixed-point fractional library routines. 44828 (line 1489) 44829 * __satfractsfsq: Fixed-point fractional library routines. 44830 (line 1486) 44831 * __satfractsfta: Fixed-point fractional library routines. 44832 (line 1491) 44833 * __satfractsfuda: Fixed-point fractional library routines. 44834 (line 1498) 44835 * __satfractsfudq: Fixed-point fractional library routines. 44836 (line 1495) 44837 * __satfractsfuha: Fixed-point fractional library routines. 44838 (line 1496) 44839 * __satfractsfuhq: Fixed-point fractional library routines. 44840 (line 1493) 44841 * __satfractsfuqq: Fixed-point fractional library routines. 44842 (line 1492) 44843 * __satfractsfusa: Fixed-point fractional library routines. 44844 (line 1497) 44845 * __satfractsfusq: Fixed-point fractional library routines. 44846 (line 1494) 44847 * __satfractsfuta: Fixed-point fractional library routines. 44848 (line 1499) 44849 * __satfractsida: Fixed-point fractional library routines. 44850 (line 1440) 44851 * __satfractsidq: Fixed-point fractional library routines. 44852 (line 1437) 44853 * __satfractsiha: Fixed-point fractional library routines. 44854 (line 1438) 44855 * __satfractsihq: Fixed-point fractional library routines. 44856 (line 1435) 44857 * __satfractsiqq: Fixed-point fractional library routines. 44858 (line 1434) 44859 * __satfractsisa: Fixed-point fractional library routines. 44860 (line 1439) 44861 * __satfractsisq: Fixed-point fractional library routines. 44862 (line 1436) 44863 * __satfractsita: Fixed-point fractional library routines. 44864 (line 1441) 44865 * __satfractsiuda: Fixed-point fractional library routines. 44866 (line 1448) 44867 * __satfractsiudq: Fixed-point fractional library routines. 44868 (line 1445) 44869 * __satfractsiuha: Fixed-point fractional library routines. 44870 (line 1446) 44871 * __satfractsiuhq: Fixed-point fractional library routines. 44872 (line 1443) 44873 * __satfractsiuqq: Fixed-point fractional library routines. 44874 (line 1442) 44875 * __satfractsiusa: Fixed-point fractional library routines. 44876 (line 1447) 44877 * __satfractsiusq: Fixed-point fractional library routines. 44878 (line 1444) 44879 * __satfractsiuta: Fixed-point fractional library routines. 44880 (line 1449) 44881 * __satfractsqda: Fixed-point fractional library routines. 44882 (line 1079) 44883 * __satfractsqdq2: Fixed-point fractional library routines. 44884 (line 1076) 44885 * __satfractsqha: Fixed-point fractional library routines. 44886 (line 1077) 44887 * __satfractsqhq2: Fixed-point fractional library routines. 44888 (line 1075) 44889 * __satfractsqqq2: Fixed-point fractional library routines. 44890 (line 1074) 44891 * __satfractsqsa: Fixed-point fractional library routines. 44892 (line 1078) 44893 * __satfractsqta: Fixed-point fractional library routines. 44894 (line 1080) 44895 * __satfractsquda: Fixed-point fractional library routines. 44896 (line 1090) 44897 * __satfractsqudq: Fixed-point fractional library routines. 44898 (line 1086) 44899 * __satfractsquha: Fixed-point fractional library routines. 44900 (line 1088) 44901 * __satfractsquhq: Fixed-point fractional library routines. 44902 (line 1083) 44903 * __satfractsquqq: Fixed-point fractional library routines. 44904 (line 1082) 44905 * __satfractsqusa: Fixed-point fractional library routines. 44906 (line 1089) 44907 * __satfractsqusq: Fixed-point fractional library routines. 44908 (line 1084) 44909 * __satfractsquta: Fixed-point fractional library routines. 44910 (line 1092) 44911 * __satfracttada2: Fixed-point fractional library routines. 44912 (line 1175) 44913 * __satfracttadq: Fixed-point fractional library routines. 44914 (line 1172) 44915 * __satfracttaha2: Fixed-point fractional library routines. 44916 (line 1173) 44917 * __satfracttahq: Fixed-point fractional library routines. 44918 (line 1170) 44919 * __satfracttaqq: Fixed-point fractional library routines. 44920 (line 1169) 44921 * __satfracttasa2: Fixed-point fractional library routines. 44922 (line 1174) 44923 * __satfracttasq: Fixed-point fractional library routines. 44924 (line 1171) 44925 * __satfracttauda: Fixed-point fractional library routines. 44926 (line 1187) 44927 * __satfracttaudq: Fixed-point fractional library routines. 44928 (line 1182) 44929 * __satfracttauha: Fixed-point fractional library routines. 44930 (line 1184) 44931 * __satfracttauhq: Fixed-point fractional library routines. 44932 (line 1178) 44933 * __satfracttauqq: Fixed-point fractional library routines. 44934 (line 1177) 44935 * __satfracttausa: Fixed-point fractional library routines. 44936 (line 1185) 44937 * __satfracttausq: Fixed-point fractional library routines. 44938 (line 1180) 44939 * __satfracttauta: Fixed-point fractional library routines. 44940 (line 1189) 44941 * __satfracttida: Fixed-point fractional library routines. 44942 (line 1472) 44943 * __satfracttidq: Fixed-point fractional library routines. 44944 (line 1469) 44945 * __satfracttiha: Fixed-point fractional library routines. 44946 (line 1470) 44947 * __satfracttihq: Fixed-point fractional library routines. 44948 (line 1467) 44949 * __satfracttiqq: Fixed-point fractional library routines. 44950 (line 1466) 44951 * __satfracttisa: Fixed-point fractional library routines. 44952 (line 1471) 44953 * __satfracttisq: Fixed-point fractional library routines. 44954 (line 1468) 44955 * __satfracttita: Fixed-point fractional library routines. 44956 (line 1473) 44957 * __satfracttiuda: Fixed-point fractional library routines. 44958 (line 1481) 44959 * __satfracttiudq: Fixed-point fractional library routines. 44960 (line 1478) 44961 * __satfracttiuha: Fixed-point fractional library routines. 44962 (line 1479) 44963 * __satfracttiuhq: Fixed-point fractional library routines. 44964 (line 1475) 44965 * __satfracttiuqq: Fixed-point fractional library routines. 44966 (line 1474) 44967 * __satfracttiusa: Fixed-point fractional library routines. 44968 (line 1480) 44969 * __satfracttiusq: Fixed-point fractional library routines. 44970 (line 1476) 44971 * __satfracttiuta: Fixed-point fractional library routines. 44972 (line 1483) 44973 * __satfractudada: Fixed-point fractional library routines. 44974 (line 1351) 44975 * __satfractudadq: Fixed-point fractional library routines. 44976 (line 1347) 44977 * __satfractudaha: Fixed-point fractional library routines. 44978 (line 1349) 44979 * __satfractudahq: Fixed-point fractional library routines. 44980 (line 1344) 44981 * __satfractudaqq: Fixed-point fractional library routines. 44982 (line 1343) 44983 * __satfractudasa: Fixed-point fractional library routines. 44984 (line 1350) 44985 * __satfractudasq: Fixed-point fractional library routines. 44986 (line 1345) 44987 * __satfractudata: Fixed-point fractional library routines. 44988 (line 1353) 44989 * __satfractudaudq: Fixed-point fractional library routines. 44990 (line 1361) 44991 * __satfractudauha2: Fixed-point fractional library routines. 44992 (line 1363) 44993 * __satfractudauhq: Fixed-point fractional library routines. 44994 (line 1357) 44995 * __satfractudauqq: Fixed-point fractional library routines. 44996 (line 1355) 44997 * __satfractudausa2: Fixed-point fractional library routines. 44998 (line 1365) 44999 * __satfractudausq: Fixed-point fractional library routines. 45000 (line 1359) 45001 * __satfractudauta2: Fixed-point fractional library routines. 45002 (line 1367) 45003 * __satfractudqda: Fixed-point fractional library routines. 45004 (line 1276) 45005 * __satfractudqdq: Fixed-point fractional library routines. 45006 (line 1271) 45007 * __satfractudqha: Fixed-point fractional library routines. 45008 (line 1273) 45009 * __satfractudqhq: Fixed-point fractional library routines. 45010 (line 1267) 45011 * __satfractudqqq: Fixed-point fractional library routines. 45012 (line 1266) 45013 * __satfractudqsa: Fixed-point fractional library routines. 45014 (line 1274) 45015 * __satfractudqsq: Fixed-point fractional library routines. 45016 (line 1269) 45017 * __satfractudqta: Fixed-point fractional library routines. 45018 (line 1278) 45019 * __satfractudquda: Fixed-point fractional library routines. 45020 (line 1290) 45021 * __satfractudquha: Fixed-point fractional library routines. 45022 (line 1286) 45023 * __satfractudquhq2: Fixed-point fractional library routines. 45024 (line 1282) 45025 * __satfractudquqq2: Fixed-point fractional library routines. 45026 (line 1280) 45027 * __satfractudqusa: Fixed-point fractional library routines. 45028 (line 1288) 45029 * __satfractudqusq2: Fixed-point fractional library routines. 45030 (line 1284) 45031 * __satfractudquta: Fixed-point fractional library routines. 45032 (line 1292) 45033 * __satfractuhada: Fixed-point fractional library routines. 45034 (line 1304) 45035 * __satfractuhadq: Fixed-point fractional library routines. 45036 (line 1299) 45037 * __satfractuhaha: Fixed-point fractional library routines. 45038 (line 1301) 45039 * __satfractuhahq: Fixed-point fractional library routines. 45040 (line 1295) 45041 * __satfractuhaqq: Fixed-point fractional library routines. 45042 (line 1294) 45043 * __satfractuhasa: Fixed-point fractional library routines. 45044 (line 1302) 45045 * __satfractuhasq: Fixed-point fractional library routines. 45046 (line 1297) 45047 * __satfractuhata: Fixed-point fractional library routines. 45048 (line 1306) 45049 * __satfractuhauda2: Fixed-point fractional library routines. 45050 (line 1318) 45051 * __satfractuhaudq: Fixed-point fractional library routines. 45052 (line 1314) 45053 * __satfractuhauhq: Fixed-point fractional library routines. 45054 (line 1310) 45055 * __satfractuhauqq: Fixed-point fractional library routines. 45056 (line 1308) 45057 * __satfractuhausa2: Fixed-point fractional library routines. 45058 (line 1316) 45059 * __satfractuhausq: Fixed-point fractional library routines. 45060 (line 1312) 45061 * __satfractuhauta2: Fixed-point fractional library routines. 45062 (line 1320) 45063 * __satfractuhqda: Fixed-point fractional library routines. 45064 (line 1224) 45065 * __satfractuhqdq: Fixed-point fractional library routines. 45066 (line 1221) 45067 * __satfractuhqha: Fixed-point fractional library routines. 45068 (line 1222) 45069 * __satfractuhqhq: Fixed-point fractional library routines. 45070 (line 1219) 45071 * __satfractuhqqq: Fixed-point fractional library routines. 45072 (line 1218) 45073 * __satfractuhqsa: Fixed-point fractional library routines. 45074 (line 1223) 45075 * __satfractuhqsq: Fixed-point fractional library routines. 45076 (line 1220) 45077 * __satfractuhqta: Fixed-point fractional library routines. 45078 (line 1225) 45079 * __satfractuhquda: Fixed-point fractional library routines. 45080 (line 1236) 45081 * __satfractuhqudq2: Fixed-point fractional library routines. 45082 (line 1231) 45083 * __satfractuhquha: Fixed-point fractional library routines. 45084 (line 1233) 45085 * __satfractuhquqq2: Fixed-point fractional library routines. 45086 (line 1227) 45087 * __satfractuhqusa: Fixed-point fractional library routines. 45088 (line 1234) 45089 * __satfractuhqusq2: Fixed-point fractional library routines. 45090 (line 1229) 45091 * __satfractuhquta: Fixed-point fractional library routines. 45092 (line 1238) 45093 * __satfractunsdida: Fixed-point fractional library routines. 45094 (line 1834) 45095 * __satfractunsdidq: Fixed-point fractional library routines. 45096 (line 1831) 45097 * __satfractunsdiha: Fixed-point fractional library routines. 45098 (line 1832) 45099 * __satfractunsdihq: Fixed-point fractional library routines. 45100 (line 1828) 45101 * __satfractunsdiqq: Fixed-point fractional library routines. 45102 (line 1827) 45103 * __satfractunsdisa: Fixed-point fractional library routines. 45104 (line 1833) 45105 * __satfractunsdisq: Fixed-point fractional library routines. 45106 (line 1829) 45107 * __satfractunsdita: Fixed-point fractional library routines. 45108 (line 1836) 45109 * __satfractunsdiuda: Fixed-point fractional library routines. 45110 (line 1850) 45111 * __satfractunsdiudq: Fixed-point fractional library routines. 45112 (line 1844) 45113 * __satfractunsdiuha: Fixed-point fractional library routines. 45114 (line 1846) 45115 * __satfractunsdiuhq: Fixed-point fractional library routines. 45116 (line 1840) 45117 * __satfractunsdiuqq: Fixed-point fractional library routines. 45118 (line 1838) 45119 * __satfractunsdiusa: Fixed-point fractional library routines. 45120 (line 1848) 45121 * __satfractunsdiusq: Fixed-point fractional library routines. 45122 (line 1842) 45123 * __satfractunsdiuta: Fixed-point fractional library routines. 45124 (line 1852) 45125 * __satfractunshida: Fixed-point fractional library routines. 45126 (line 1786) 45127 * __satfractunshidq: Fixed-point fractional library routines. 45128 (line 1783) 45129 * __satfractunshiha: Fixed-point fractional library routines. 45130 (line 1784) 45131 * __satfractunshihq: Fixed-point fractional library routines. 45132 (line 1780) 45133 * __satfractunshiqq: Fixed-point fractional library routines. 45134 (line 1779) 45135 * __satfractunshisa: Fixed-point fractional library routines. 45136 (line 1785) 45137 * __satfractunshisq: Fixed-point fractional library routines. 45138 (line 1781) 45139 * __satfractunshita: Fixed-point fractional library routines. 45140 (line 1788) 45141 * __satfractunshiuda: Fixed-point fractional library routines. 45142 (line 1802) 45143 * __satfractunshiudq: Fixed-point fractional library routines. 45144 (line 1796) 45145 * __satfractunshiuha: Fixed-point fractional library routines. 45146 (line 1798) 45147 * __satfractunshiuhq: Fixed-point fractional library routines. 45148 (line 1792) 45149 * __satfractunshiuqq: Fixed-point fractional library routines. 45150 (line 1790) 45151 * __satfractunshiusa: Fixed-point fractional library routines. 45152 (line 1800) 45153 * __satfractunshiusq: Fixed-point fractional library routines. 45154 (line 1794) 45155 * __satfractunshiuta: Fixed-point fractional library routines. 45156 (line 1804) 45157 * __satfractunsqida: Fixed-point fractional library routines. 45158 (line 1760) 45159 * __satfractunsqidq: Fixed-point fractional library routines. 45160 (line 1757) 45161 * __satfractunsqiha: Fixed-point fractional library routines. 45162 (line 1758) 45163 * __satfractunsqihq: Fixed-point fractional library routines. 45164 (line 1754) 45165 * __satfractunsqiqq: Fixed-point fractional library routines. 45166 (line 1753) 45167 * __satfractunsqisa: Fixed-point fractional library routines. 45168 (line 1759) 45169 * __satfractunsqisq: Fixed-point fractional library routines. 45170 (line 1755) 45171 * __satfractunsqita: Fixed-point fractional library routines. 45172 (line 1762) 45173 * __satfractunsqiuda: Fixed-point fractional library routines. 45174 (line 1776) 45175 * __satfractunsqiudq: Fixed-point fractional library routines. 45176 (line 1770) 45177 * __satfractunsqiuha: Fixed-point fractional library routines. 45178 (line 1772) 45179 * __satfractunsqiuhq: Fixed-point fractional library routines. 45180 (line 1766) 45181 * __satfractunsqiuqq: Fixed-point fractional library routines. 45182 (line 1764) 45183 * __satfractunsqiusa: Fixed-point fractional library routines. 45184 (line 1774) 45185 * __satfractunsqiusq: Fixed-point fractional library routines. 45186 (line 1768) 45187 * __satfractunsqiuta: Fixed-point fractional library routines. 45188 (line 1778) 45189 * __satfractunssida: Fixed-point fractional library routines. 45190 (line 1811) 45191 * __satfractunssidq: Fixed-point fractional library routines. 45192 (line 1808) 45193 * __satfractunssiha: Fixed-point fractional library routines. 45194 (line 1809) 45195 * __satfractunssihq: Fixed-point fractional library routines. 45196 (line 1806) 45197 * __satfractunssiqq: Fixed-point fractional library routines. 45198 (line 1805) 45199 * __satfractunssisa: Fixed-point fractional library routines. 45200 (line 1810) 45201 * __satfractunssisq: Fixed-point fractional library routines. 45202 (line 1807) 45203 * __satfractunssita: Fixed-point fractional library routines. 45204 (line 1812) 45205 * __satfractunssiuda: Fixed-point fractional library routines. 45206 (line 1824) 45207 * __satfractunssiudq: Fixed-point fractional library routines. 45208 (line 1819) 45209 * __satfractunssiuha: Fixed-point fractional library routines. 45210 (line 1821) 45211 * __satfractunssiuhq: Fixed-point fractional library routines. 45212 (line 1815) 45213 * __satfractunssiuqq: Fixed-point fractional library routines. 45214 (line 1814) 45215 * __satfractunssiusa: Fixed-point fractional library routines. 45216 (line 1822) 45217 * __satfractunssiusq: Fixed-point fractional library routines. 45218 (line 1817) 45219 * __satfractunssiuta: Fixed-point fractional library routines. 45220 (line 1826) 45221 * __satfractunstida: Fixed-point fractional library routines. 45222 (line 1864) 45223 * __satfractunstidq: Fixed-point fractional library routines. 45224 (line 1859) 45225 * __satfractunstiha: Fixed-point fractional library routines. 45226 (line 1861) 45227 * __satfractunstihq: Fixed-point fractional library routines. 45228 (line 1855) 45229 * __satfractunstiqq: Fixed-point fractional library routines. 45230 (line 1854) 45231 * __satfractunstisa: Fixed-point fractional library routines. 45232 (line 1862) 45233 * __satfractunstisq: Fixed-point fractional library routines. 45234 (line 1857) 45235 * __satfractunstita: Fixed-point fractional library routines. 45236 (line 1866) 45237 * __satfractunstiuda: Fixed-point fractional library routines. 45238 (line 1880) 45239 * __satfractunstiudq: Fixed-point fractional library routines. 45240 (line 1874) 45241 * __satfractunstiuha: Fixed-point fractional library routines. 45242 (line 1876) 45243 * __satfractunstiuhq: Fixed-point fractional library routines. 45244 (line 1870) 45245 * __satfractunstiuqq: Fixed-point fractional library routines. 45246 (line 1868) 45247 * __satfractunstiusa: Fixed-point fractional library routines. 45248 (line 1878) 45249 * __satfractunstiusq: Fixed-point fractional library routines. 45250 (line 1872) 45251 * __satfractunstiuta: Fixed-point fractional library routines. 45252 (line 1882) 45253 * __satfractuqqda: Fixed-point fractional library routines. 45254 (line 1201) 45255 * __satfractuqqdq: Fixed-point fractional library routines. 45256 (line 1196) 45257 * __satfractuqqha: Fixed-point fractional library routines. 45258 (line 1198) 45259 * __satfractuqqhq: Fixed-point fractional library routines. 45260 (line 1192) 45261 * __satfractuqqqq: Fixed-point fractional library routines. 45262 (line 1191) 45263 * __satfractuqqsa: Fixed-point fractional library routines. 45264 (line 1199) 45265 * __satfractuqqsq: Fixed-point fractional library routines. 45266 (line 1194) 45267 * __satfractuqqta: Fixed-point fractional library routines. 45268 (line 1203) 45269 * __satfractuqquda: Fixed-point fractional library routines. 45270 (line 1215) 45271 * __satfractuqqudq2: Fixed-point fractional library routines. 45272 (line 1209) 45273 * __satfractuqquha: Fixed-point fractional library routines. 45274 (line 1211) 45275 * __satfractuqquhq2: Fixed-point fractional library routines. 45276 (line 1205) 45277 * __satfractuqqusa: Fixed-point fractional library routines. 45278 (line 1213) 45279 * __satfractuqqusq2: Fixed-point fractional library routines. 45280 (line 1207) 45281 * __satfractuqquta: Fixed-point fractional library routines. 45282 (line 1217) 45283 * __satfractusada: Fixed-point fractional library routines. 45284 (line 1327) 45285 * __satfractusadq: Fixed-point fractional library routines. 45286 (line 1324) 45287 * __satfractusaha: Fixed-point fractional library routines. 45288 (line 1325) 45289 * __satfractusahq: Fixed-point fractional library routines. 45290 (line 1322) 45291 * __satfractusaqq: Fixed-point fractional library routines. 45292 (line 1321) 45293 * __satfractusasa: Fixed-point fractional library routines. 45294 (line 1326) 45295 * __satfractusasq: Fixed-point fractional library routines. 45296 (line 1323) 45297 * __satfractusata: Fixed-point fractional library routines. 45298 (line 1328) 45299 * __satfractusauda2: Fixed-point fractional library routines. 45300 (line 1339) 45301 * __satfractusaudq: Fixed-point fractional library routines. 45302 (line 1335) 45303 * __satfractusauha2: Fixed-point fractional library routines. 45304 (line 1337) 45305 * __satfractusauhq: Fixed-point fractional library routines. 45306 (line 1331) 45307 * __satfractusauqq: Fixed-point fractional library routines. 45308 (line 1330) 45309 * __satfractusausq: Fixed-point fractional library routines. 45310 (line 1333) 45311 * __satfractusauta2: Fixed-point fractional library routines. 45312 (line 1341) 45313 * __satfractusqda: Fixed-point fractional library routines. 45314 (line 1248) 45315 * __satfractusqdq: Fixed-point fractional library routines. 45316 (line 1244) 45317 * __satfractusqha: Fixed-point fractional library routines. 45318 (line 1246) 45319 * __satfractusqhq: Fixed-point fractional library routines. 45320 (line 1241) 45321 * __satfractusqqq: Fixed-point fractional library routines. 45322 (line 1240) 45323 * __satfractusqsa: Fixed-point fractional library routines. 45324 (line 1247) 45325 * __satfractusqsq: Fixed-point fractional library routines. 45326 (line 1242) 45327 * __satfractusqta: Fixed-point fractional library routines. 45328 (line 1250) 45329 * __satfractusquda: Fixed-point fractional library routines. 45330 (line 1262) 45331 * __satfractusqudq2: Fixed-point fractional library routines. 45332 (line 1256) 45333 * __satfractusquha: Fixed-point fractional library routines. 45334 (line 1258) 45335 * __satfractusquhq2: Fixed-point fractional library routines. 45336 (line 1254) 45337 * __satfractusquqq2: Fixed-point fractional library routines. 45338 (line 1252) 45339 * __satfractusqusa: Fixed-point fractional library routines. 45340 (line 1260) 45341 * __satfractusquta: Fixed-point fractional library routines. 45342 (line 1264) 45343 * __satfractutada: Fixed-point fractional library routines. 45344 (line 1379) 45345 * __satfractutadq: Fixed-point fractional library routines. 45346 (line 1374) 45347 * __satfractutaha: Fixed-point fractional library routines. 45348 (line 1376) 45349 * __satfractutahq: Fixed-point fractional library routines. 45350 (line 1370) 45351 * __satfractutaqq: Fixed-point fractional library routines. 45352 (line 1369) 45353 * __satfractutasa: Fixed-point fractional library routines. 45354 (line 1377) 45355 * __satfractutasq: Fixed-point fractional library routines. 45356 (line 1372) 45357 * __satfractutata: Fixed-point fractional library routines. 45358 (line 1381) 45359 * __satfractutauda2: Fixed-point fractional library routines. 45360 (line 1395) 45361 * __satfractutaudq: Fixed-point fractional library routines. 45362 (line 1389) 45363 * __satfractutauha2: Fixed-point fractional library routines. 45364 (line 1391) 45365 * __satfractutauhq: Fixed-point fractional library routines. 45366 (line 1385) 45367 * __satfractutauqq: Fixed-point fractional library routines. 45368 (line 1383) 45369 * __satfractutausa2: Fixed-point fractional library routines. 45370 (line 1393) 45371 * __satfractutausq: Fixed-point fractional library routines. 45372 (line 1387) 45373 * __splitstack_find: Miscellaneous routines. 45374 (line 18) 45375 * __ssaddda3: Fixed-point fractional library routines. 45376 (line 67) 45377 * __ssadddq3: Fixed-point fractional library routines. 45378 (line 63) 45379 * __ssaddha3: Fixed-point fractional library routines. 45380 (line 65) 45381 * __ssaddhq3: Fixed-point fractional library routines. 45382 (line 60) 45383 * __ssaddqq3: Fixed-point fractional library routines. 45384 (line 59) 45385 * __ssaddsa3: Fixed-point fractional library routines. 45386 (line 66) 45387 * __ssaddsq3: Fixed-point fractional library routines. 45388 (line 61) 45389 * __ssaddta3: Fixed-point fractional library routines. 45390 (line 69) 45391 * __ssashlda3: Fixed-point fractional library routines. 45392 (line 402) 45393 * __ssashldq3: Fixed-point fractional library routines. 45394 (line 399) 45395 * __ssashlha3: Fixed-point fractional library routines. 45396 (line 400) 45397 * __ssashlhq3: Fixed-point fractional library routines. 45398 (line 396) 45399 * __ssashlsa3: Fixed-point fractional library routines. 45400 (line 401) 45401 * __ssashlsq3: Fixed-point fractional library routines. 45402 (line 397) 45403 * __ssashlta3: Fixed-point fractional library routines. 45404 (line 404) 45405 * __ssdivda3: Fixed-point fractional library routines. 45406 (line 261) 45407 * __ssdivdq3: Fixed-point fractional library routines. 45408 (line 257) 45409 * __ssdivha3: Fixed-point fractional library routines. 45410 (line 259) 45411 * __ssdivhq3: Fixed-point fractional library routines. 45412 (line 254) 45413 * __ssdivqq3: Fixed-point fractional library routines. 45414 (line 253) 45415 * __ssdivsa3: Fixed-point fractional library routines. 45416 (line 260) 45417 * __ssdivsq3: Fixed-point fractional library routines. 45418 (line 255) 45419 * __ssdivta3: Fixed-point fractional library routines. 45420 (line 263) 45421 * __ssmulda3: Fixed-point fractional library routines. 45422 (line 193) 45423 * __ssmuldq3: Fixed-point fractional library routines. 45424 (line 189) 45425 * __ssmulha3: Fixed-point fractional library routines. 45426 (line 191) 45427 * __ssmulhq3: Fixed-point fractional library routines. 45428 (line 186) 45429 * __ssmulqq3: Fixed-point fractional library routines. 45430 (line 185) 45431 * __ssmulsa3: Fixed-point fractional library routines. 45432 (line 192) 45433 * __ssmulsq3: Fixed-point fractional library routines. 45434 (line 187) 45435 * __ssmulta3: Fixed-point fractional library routines. 45436 (line 195) 45437 * __ssnegda2: Fixed-point fractional library routines. 45438 (line 316) 45439 * __ssnegdq2: Fixed-point fractional library routines. 45440 (line 313) 45441 * __ssnegha2: Fixed-point fractional library routines. 45442 (line 314) 45443 * __ssneghq2: Fixed-point fractional library routines. 45444 (line 311) 45445 * __ssnegqq2: Fixed-point fractional library routines. 45446 (line 310) 45447 * __ssnegsa2: Fixed-point fractional library routines. 45448 (line 315) 45449 * __ssnegsq2: Fixed-point fractional library routines. 45450 (line 312) 45451 * __ssnegta2: Fixed-point fractional library routines. 45452 (line 317) 45453 * __sssubda3: Fixed-point fractional library routines. 45454 (line 129) 45455 * __sssubdq3: Fixed-point fractional library routines. 45456 (line 125) 45457 * __sssubha3: Fixed-point fractional library routines. 45458 (line 127) 45459 * __sssubhq3: Fixed-point fractional library routines. 45460 (line 122) 45461 * __sssubqq3: Fixed-point fractional library routines. 45462 (line 121) 45463 * __sssubsa3: Fixed-point fractional library routines. 45464 (line 128) 45465 * __sssubsq3: Fixed-point fractional library routines. 45466 (line 123) 45467 * __sssubta3: Fixed-point fractional library routines. 45468 (line 131) 45469 * __subda3: Fixed-point fractional library routines. 45470 (line 107) 45471 * __subdf3: Soft float library routines. 45472 (line 31) 45473 * __subdq3: Fixed-point fractional library routines. 45474 (line 95) 45475 * __subha3: Fixed-point fractional library routines. 45476 (line 105) 45477 * __subhq3: Fixed-point fractional library routines. 45478 (line 92) 45479 * __subqq3: Fixed-point fractional library routines. 45480 (line 91) 45481 * __subsa3: Fixed-point fractional library routines. 45482 (line 106) 45483 * __subsf3: Soft float library routines. 45484 (line 30) 45485 * __subsq3: Fixed-point fractional library routines. 45486 (line 93) 45487 * __subta3: Fixed-point fractional library routines. 45488 (line 109) 45489 * __subtf3: Soft float library routines. 45490 (line 33) 45491 * __subuda3: Fixed-point fractional library routines. 45492 (line 115) 45493 * __subudq3: Fixed-point fractional library routines. 45494 (line 103) 45495 * __subuha3: Fixed-point fractional library routines. 45496 (line 111) 45497 * __subuhq3: Fixed-point fractional library routines. 45498 (line 99) 45499 * __subuqq3: Fixed-point fractional library routines. 45500 (line 97) 45501 * __subusa3: Fixed-point fractional library routines. 45502 (line 113) 45503 * __subusq3: Fixed-point fractional library routines. 45504 (line 101) 45505 * __subuta3: Fixed-point fractional library routines. 45506 (line 117) 45507 * __subvdi3: Integer library routines. 45508 (line 123) 45509 * __subvsi3: Integer library routines. 45510 (line 122) 45511 * __subxf3: Soft float library routines. 45512 (line 35) 45513 * __truncdfsf2: Soft float library routines. 45514 (line 76) 45515 * __trunctfdf2: Soft float library routines. 45516 (line 73) 45517 * __trunctfsf2: Soft float library routines. 45518 (line 75) 45519 * __truncxfdf2: Soft float library routines. 45520 (line 72) 45521 * __truncxfsf2: Soft float library routines. 45522 (line 74) 45523 * __ucmpdi2: Integer library routines. 45524 (line 93) 45525 * __ucmpti2: Integer library routines. 45526 (line 95) 45527 * __udivdi3: Integer library routines. 45528 (line 54) 45529 * __udivmoddi4: Integer library routines. 45530 (line 61) 45531 * __udivmodti4: Integer library routines. 45532 (line 63) 45533 * __udivsi3: Integer library routines. 45534 (line 52) 45535 * __udivti3: Integer library routines. 45536 (line 56) 45537 * __udivuda3: Fixed-point fractional library routines. 45538 (line 246) 45539 * __udivudq3: Fixed-point fractional library routines. 45540 (line 240) 45541 * __udivuha3: Fixed-point fractional library routines. 45542 (line 242) 45543 * __udivuhq3: Fixed-point fractional library routines. 45544 (line 236) 45545 * __udivuqq3: Fixed-point fractional library routines. 45546 (line 234) 45547 * __udivusa3: Fixed-point fractional library routines. 45548 (line 244) 45549 * __udivusq3: Fixed-point fractional library routines. 45550 (line 238) 45551 * __udivuta3: Fixed-point fractional library routines. 45552 (line 248) 45553 * __umoddi3: Integer library routines. 45554 (line 71) 45555 * __umodsi3: Integer library routines. 45556 (line 69) 45557 * __umodti3: Integer library routines. 45558 (line 73) 45559 * __unorddf2: Soft float library routines. 45560 (line 173) 45561 * __unordsf2: Soft float library routines. 45562 (line 172) 45563 * __unordtf2: Soft float library routines. 45564 (line 174) 45565 * __usadduda3: Fixed-point fractional library routines. 45566 (line 85) 45567 * __usaddudq3: Fixed-point fractional library routines. 45568 (line 79) 45569 * __usadduha3: Fixed-point fractional library routines. 45570 (line 81) 45571 * __usadduhq3: Fixed-point fractional library routines. 45572 (line 75) 45573 * __usadduqq3: Fixed-point fractional library routines. 45574 (line 73) 45575 * __usaddusa3: Fixed-point fractional library routines. 45576 (line 83) 45577 * __usaddusq3: Fixed-point fractional library routines. 45578 (line 77) 45579 * __usadduta3: Fixed-point fractional library routines. 45580 (line 87) 45581 * __usashluda3: Fixed-point fractional library routines. 45582 (line 421) 45583 * __usashludq3: Fixed-point fractional library routines. 45584 (line 415) 45585 * __usashluha3: Fixed-point fractional library routines. 45586 (line 417) 45587 * __usashluhq3: Fixed-point fractional library routines. 45588 (line 411) 45589 * __usashluqq3: Fixed-point fractional library routines. 45590 (line 409) 45591 * __usashlusa3: Fixed-point fractional library routines. 45592 (line 419) 45593 * __usashlusq3: Fixed-point fractional library routines. 45594 (line 413) 45595 * __usashluta3: Fixed-point fractional library routines. 45596 (line 423) 45597 * __usdivuda3: Fixed-point fractional library routines. 45598 (line 280) 45599 * __usdivudq3: Fixed-point fractional library routines. 45600 (line 274) 45601 * __usdivuha3: Fixed-point fractional library routines. 45602 (line 276) 45603 * __usdivuhq3: Fixed-point fractional library routines. 45604 (line 270) 45605 * __usdivuqq3: Fixed-point fractional library routines. 45606 (line 268) 45607 * __usdivusa3: Fixed-point fractional library routines. 45608 (line 278) 45609 * __usdivusq3: Fixed-point fractional library routines. 45610 (line 272) 45611 * __usdivuta3: Fixed-point fractional library routines. 45612 (line 282) 45613 * __usmuluda3: Fixed-point fractional library routines. 45614 (line 212) 45615 * __usmuludq3: Fixed-point fractional library routines. 45616 (line 206) 45617 * __usmuluha3: Fixed-point fractional library routines. 45618 (line 208) 45619 * __usmuluhq3: Fixed-point fractional library routines. 45620 (line 202) 45621 * __usmuluqq3: Fixed-point fractional library routines. 45622 (line 200) 45623 * __usmulusa3: Fixed-point fractional library routines. 45624 (line 210) 45625 * __usmulusq3: Fixed-point fractional library routines. 45626 (line 204) 45627 * __usmuluta3: Fixed-point fractional library routines. 45628 (line 214) 45629 * __usneguda2: Fixed-point fractional library routines. 45630 (line 331) 45631 * __usnegudq2: Fixed-point fractional library routines. 45632 (line 326) 45633 * __usneguha2: Fixed-point fractional library routines. 45634 (line 328) 45635 * __usneguhq2: Fixed-point fractional library routines. 45636 (line 322) 45637 * __usneguqq2: Fixed-point fractional library routines. 45638 (line 321) 45639 * __usnegusa2: Fixed-point fractional library routines. 45640 (line 329) 45641 * __usnegusq2: Fixed-point fractional library routines. 45642 (line 324) 45643 * __usneguta2: Fixed-point fractional library routines. 45644 (line 333) 45645 * __ussubuda3: Fixed-point fractional library routines. 45646 (line 148) 45647 * __ussubudq3: Fixed-point fractional library routines. 45648 (line 142) 45649 * __ussubuha3: Fixed-point fractional library routines. 45650 (line 144) 45651 * __ussubuhq3: Fixed-point fractional library routines. 45652 (line 138) 45653 * __ussubuqq3: Fixed-point fractional library routines. 45654 (line 136) 45655 * __ussubusa3: Fixed-point fractional library routines. 45656 (line 146) 45657 * __ussubusq3: Fixed-point fractional library routines. 45658 (line 140) 45659 * __ussubuta3: Fixed-point fractional library routines. 45660 (line 150) 45661 * abort: Portability. (line 21) 45662 * abs: Arithmetic. (line 200) 45663 * abs and attributes: Expressions. (line 85) 45664 * ABS_EXPR: Unary and Binary Expressions. 45665 (line 6) 45666 * absence_set: Processor pipeline description. 45667 (line 224) 45668 * absM2 instruction pattern: Standard Names. (line 535) 45669 * absolute value: Arithmetic. (line 200) 45670 * access to operands: Accessors. (line 6) 45671 * access to special operands: Special Accessors. (line 6) 45672 * accessors: Accessors. (line 6) 45673 * ACCUM_TYPE_SIZE: Type Layout. (line 88) 45674 * ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 49) 45675 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 135) 45676 * ADA_LONG_TYPE_SIZE: Type Layout. (line 26) 45677 * Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 45678 (line 6) 45679 * ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 15) 45680 * addM3 instruction pattern: Standard Names. (line 263) 45681 * addMODEcc instruction pattern: Standard Names. (line 1050) 45682 * addr_diff_vec: Side Effects. (line 308) 45683 * addr_diff_vec, length of: Insn Lengths. (line 26) 45684 * ADDR_EXPR: Storage References. (line 6) 45685 * addr_vec: Side Effects. (line 303) 45686 * addr_vec, length of: Insn Lengths. (line 26) 45687 * address constraints: Simple Constraints. (line 164) 45688 * address_operand <1>: Simple Constraints. (line 168) 45689 * address_operand: Machine-Independent Predicates. 45690 (line 63) 45691 * addressing modes: Addressing Modes. (line 6) 45692 * ADJUST_FIELD_ALIGN: Storage Layout. (line 197) 45693 * ADJUST_INSN_LENGTH: Insn Lengths. (line 35) 45694 * ADJUST_REG_ALLOC_ORDER: Allocation Order. (line 23) 45695 * aggregates as return values: Aggregate Return. (line 6) 45696 * alias: Alias analysis. (line 6) 45697 * ALL_REGS: Register Classes. (line 17) 45698 * allocate_stack instruction pattern: Standard Names. (line 1375) 45699 * alternate entry points: Insns. (line 146) 45700 * anchored addresses: Anchored Addresses. (line 6) 45701 * and: Arithmetic. (line 158) 45702 * and and attributes: Expressions. (line 50) 45703 * and, canonicalization of: Insn Canonicalizations. 45704 (line 52) 45705 * andM3 instruction pattern: Standard Names. (line 269) 45706 * annotations: Annotations. (line 6) 45707 * APPLY_RESULT_SIZE: Scalar Return. (line 112) 45708 * ARG_POINTER_CFA_OFFSET: Frame Layout. (line 194) 45709 * ARG_POINTER_REGNUM: Frame Registers. (line 41) 45710 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65) 45711 * arg_pointer_rtx: Frame Registers. (line 104) 45712 * ARGS_GROW_DOWNWARD: Frame Layout. (line 35) 45713 * argument passing: Interface. (line 36) 45714 * arguments in registers: Register Arguments. (line 6) 45715 * arguments on stack: Stack Arguments. (line 6) 45716 * arithmetic library: Soft float library routines. 45717 (line 6) 45718 * arithmetic shift: Arithmetic. (line 173) 45719 * arithmetic shift with signed saturation: Arithmetic. (line 173) 45720 * arithmetic shift with unsigned saturation: Arithmetic. (line 173) 45721 * arithmetic, in RTL: Arithmetic. (line 6) 45722 * ARITHMETIC_TYPE_P: Types for C++. (line 61) 45723 * array: Types. (line 6) 45724 * ARRAY_RANGE_REF: Storage References. (line 6) 45725 * ARRAY_REF: Storage References. (line 6) 45726 * ARRAY_TYPE: Types. (line 6) 45727 * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 89) 45728 * ashift: Arithmetic. (line 173) 45729 * ashift and attributes: Expressions. (line 85) 45730 * ashiftrt: Arithmetic. (line 190) 45731 * ashiftrt and attributes: Expressions. (line 85) 45732 * ashlM3 instruction pattern: Standard Names. (line 510) 45733 * ashrM3 instruction pattern: Standard Names. (line 520) 45734 * ASM_APP_OFF: File Framework. (line 78) 45735 * ASM_APP_ON: File Framework. (line 71) 45736 * ASM_COMMENT_START: File Framework. (line 66) 45737 * ASM_DECLARE_FUNCTION_NAME: Label Output. (line 111) 45738 * ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 126) 45739 * ASM_DECLARE_OBJECT_NAME: Label Output. (line 139) 45740 * ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 168) 45741 * ASM_FINAL_SPEC: Driver. (line 82) 45742 * ASM_FINISH_DECLARE_OBJECT: Label Output. (line 176) 45743 * ASM_FORMAT_PRIVATE_NAME: Label Output. (line 395) 45744 * asm_fprintf: Instruction Output. (line 151) 45745 * ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 162) 45746 * ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 379) 45747 * asm_input: Side Effects. (line 290) 45748 * asm_input and /v: Flags. (line 76) 45749 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 82) 45750 * ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 79) 45751 * asm_noperands: Insns. (line 314) 45752 * asm_operands and /v: Flags. (line 76) 45753 * asm_operands, RTL sharing: Sharing. (line 45) 45754 * asm_operands, usage: Assembler. (line 6) 45755 * ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 9) 45756 * ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 26) 45757 * ASM_OUTPUT_ALIGN: Alignment Output. (line 86) 45758 * ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 91) 45759 * ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 46) 45760 * ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 30) 45761 * ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 38) 45762 * ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 91) 45763 * ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 83) 45764 * ASM_OUTPUT_ASCII: Data Output. (line 51) 45765 * ASM_OUTPUT_CASE_END: Dispatch Tables. (line 51) 45766 * ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 38) 45767 * ASM_OUTPUT_COMMON: Uninitialized Data. (line 10) 45768 * ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 367) 45769 * ASM_OUTPUT_DEF: Label Output. (line 416) 45770 * ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 424) 45771 * ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 74) 45772 * ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 83) 45773 * ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 89) 45774 * ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 94) 45775 * ASM_OUTPUT_DWARF_VMS_DELTA: SDB and DWARF. (line 78) 45776 * ASM_OUTPUT_EXTERNAL: Label Output. (line 296) 45777 * ASM_OUTPUT_FDESC: Data Output. (line 60) 45778 * ASM_OUTPUT_FUNCTION_LABEL: Label Output. (line 17) 45779 * ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 29) 45780 * ASM_OUTPUT_LABEL: Label Output. (line 9) 45781 * ASM_OUTPUT_LABEL_REF: Label Output. (line 340) 45782 * ASM_OUTPUT_LABELREF: Label Output. (line 318) 45783 * ASM_OUTPUT_LOCAL: Uninitialized Data. (line 70) 45784 * ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 95) 45785 * ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 53) 45786 * ASM_OUTPUT_OPCODE: Instruction Output. (line 36) 45787 * ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 110) 45788 * ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 73) 45789 * ASM_OUTPUT_REG_POP: Instruction Output. (line 206) 45790 * ASM_OUTPUT_REG_PUSH: Instruction Output. (line 201) 45791 * ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 47) 45792 * ASM_OUTPUT_SKIP: Alignment Output. (line 73) 45793 * ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 85) 45794 * ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 85) 45795 * ASM_OUTPUT_SYMBOL_REF: Label Output. (line 333) 45796 * ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 101) 45797 * ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 442) 45798 * ASM_OUTPUT_WEAKREF: Label Output. (line 228) 45799 * ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 67) 45800 * ASM_SPEC: Driver. (line 74) 45801 * ASM_STABD_OP: DBX Options. (line 36) 45802 * ASM_STABN_OP: DBX Options. (line 43) 45803 * ASM_STABS_OP: DBX Options. (line 29) 45804 * ASM_WEAKEN_DECL: Label Output. (line 220) 45805 * ASM_WEAKEN_LABEL: Label Output. (line 207) 45806 * assemble_name: Label Output. (line 8) 45807 * assemble_name_raw: Label Output. (line 28) 45808 * assembler format: File Framework. (line 6) 45809 * assembler instructions in RTL: Assembler. (line 6) 45810 * ASSEMBLER_DIALECT: Instruction Output. (line 174) 45811 * assigning attribute values to insns: Tagging Insns. (line 6) 45812 * ASSUME_EXTENDED_UNWIND_CONTEXT: Frame Registers. (line 164) 45813 * asterisk in template: Output Statement. (line 29) 45814 * atan2M3 instruction pattern: Standard Names. (line 618) 45815 * atomic: GTY Options. (line 254) 45816 * atomic_add_fetchMODE instruction pattern: Standard Names. (line 1808) 45817 * atomic_addMODE instruction pattern: Standard Names. (line 1779) 45818 * atomic_and_fetchMODE instruction pattern: Standard Names. (line 1808) 45819 * atomic_andMODE instruction pattern: Standard Names. (line 1779) 45820 * atomic_compare_and_swapMODE instruction pattern: Standard Names. 45821 (line 1715) 45822 * atomic_exchangeMODE instruction pattern: Standard Names. (line 1767) 45823 * atomic_fetch_addMODE instruction pattern: Standard Names. (line 1793) 45824 * atomic_fetch_andMODE instruction pattern: Standard Names. (line 1793) 45825 * atomic_fetch_nandMODE instruction pattern: Standard Names. (line 1793) 45826 * atomic_fetch_orMODE instruction pattern: Standard Names. (line 1793) 45827 * atomic_fetch_subMODE instruction pattern: Standard Names. (line 1793) 45828 * atomic_fetch_xorMODE instruction pattern: Standard Names. (line 1793) 45829 * atomic_loadMODE instruction pattern: Standard Names. (line 1746) 45830 * atomic_nand_fetchMODE instruction pattern: Standard Names. (line 1808) 45831 * atomic_nandMODE instruction pattern: Standard Names. (line 1779) 45832 * atomic_or_fetchMODE instruction pattern: Standard Names. (line 1808) 45833 * atomic_orMODE instruction pattern: Standard Names. (line 1779) 45834 * atomic_storeMODE instruction pattern: Standard Names. (line 1756) 45835 * atomic_sub_fetchMODE instruction pattern: Standard Names. (line 1808) 45836 * atomic_subMODE instruction pattern: Standard Names. (line 1779) 45837 * atomic_test_and_set instruction pattern: Standard Names. (line 1825) 45838 * atomic_xor_fetchMODE instruction pattern: Standard Names. (line 1808) 45839 * atomic_xorMODE instruction pattern: Standard Names. (line 1779) 45840 * attr <1>: Tagging Insns. (line 54) 45841 * attr: Expressions. (line 165) 45842 * attr_flag: Expressions. (line 140) 45843 * attribute expressions: Expressions. (line 6) 45844 * attribute specifications: Attr Example. (line 6) 45845 * attribute specifications example: Attr Example. (line 6) 45846 * ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 179) 45847 * attributes: Attributes. (line 6) 45848 * attributes, defining: Defining Attributes. 45849 (line 6) 45850 * attributes, target-specific: Target Attributes. (line 6) 45851 * autoincrement addressing, availability: Portability. (line 21) 45852 * autoincrement/decrement addressing: Simple Constraints. (line 30) 45853 * automata_option: Processor pipeline description. 45854 (line 305) 45855 * automaton based pipeline description: Processor pipeline description. 45856 (line 6) 45857 * automaton based scheduler: Processor pipeline description. 45858 (line 6) 45859 * AVOID_CCMODE_COPIES: Values in Registers. 45860 (line 153) 45861 * backslash: Output Template. (line 46) 45862 * barrier: Insns. (line 166) 45863 * barrier and /f: Flags. (line 107) 45864 * barrier and /v: Flags. (line 44) 45865 * BASE_REG_CLASS: Register Classes. (line 114) 45866 * basic block: Basic Blocks. (line 6) 45867 * Basic Statements: Basic Statements. (line 6) 45868 * basic-block.h: Control Flow. (line 6) 45869 * BASIC_BLOCK: Basic Blocks. (line 14) 45870 * basic_block: Basic Blocks. (line 6) 45871 * BB_HEAD, BB_END: Maintaining the CFG. 45872 (line 77) 45873 * bb_seq: GIMPLE sequences. (line 73) 45874 * BIGGEST_ALIGNMENT: Storage Layout. (line 169) 45875 * BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 190) 45876 * BImode: Machine Modes. (line 22) 45877 * BIND_EXPR: Unary and Binary Expressions. 45878 (line 6) 45879 * BINFO_TYPE: Classes. (line 6) 45880 * bit-fields: Bit-Fields. (line 6) 45881 * BIT_AND_EXPR: Unary and Binary Expressions. 45882 (line 6) 45883 * BIT_IOR_EXPR: Unary and Binary Expressions. 45884 (line 6) 45885 * BIT_NOT_EXPR: Unary and Binary Expressions. 45886 (line 6) 45887 * BIT_XOR_EXPR: Unary and Binary Expressions. 45888 (line 6) 45889 * BITFIELD_NBYTES_LIMITED: Storage Layout. (line 394) 45890 * BITS_BIG_ENDIAN: Storage Layout. (line 12) 45891 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8) 45892 * BITS_PER_UNIT: Storage Layout. (line 51) 45893 * BITS_PER_WORD: Storage Layout. (line 56) 45894 * bitwise complement: Arithmetic. (line 154) 45895 * bitwise exclusive-or: Arithmetic. (line 168) 45896 * bitwise inclusive-or: Arithmetic. (line 163) 45897 * bitwise logical-and: Arithmetic. (line 158) 45898 * BLKmode: Machine Modes. (line 183) 45899 * BLKmode, and function return values: Calls. (line 23) 45900 * BLOCK_FOR_INSN, gimple_bb: Maintaining the CFG. 45901 (line 29) 45902 * BLOCK_REG_PADDING: Register Arguments. (line 230) 45903 * blockage instruction pattern: Standard Names. (line 1578) 45904 * Blocks: Blocks. (line 6) 45905 * bool: Misc. (line 857) 45906 * BOOL_TYPE_SIZE: Type Layout. (line 44) 45907 * BOOLEAN_TYPE: Types. (line 6) 45908 * branch prediction: Profile information. 45909 (line 24) 45910 * BRANCH_COST: Costs. (line 105) 45911 * break_out_memory_refs: Addressing Modes. (line 135) 45912 * BREAK_STMT: Statements for C++. (line 6) 45913 * BSS_SECTION_ASM_OP: Sections. (line 68) 45914 * bswap: Arithmetic. (line 247) 45915 * bswapM2 instruction pattern: Standard Names. (line 528) 45916 * btruncM2 instruction pattern: Standard Names. (line 636) 45917 * build0: Macros and Functions. 45918 (line 16) 45919 * build1: Macros and Functions. 45920 (line 17) 45921 * build2: Macros and Functions. 45922 (line 18) 45923 * build3: Macros and Functions. 45924 (line 19) 45925 * build4: Macros and Functions. 45926 (line 20) 45927 * build5: Macros and Functions. 45928 (line 21) 45929 * build6: Macros and Functions. 45930 (line 22) 45931 * builtin_longjmp instruction pattern: Standard Names. (line 1475) 45932 * builtin_setjmp_receiver instruction pattern: Standard Names. 45933 (line 1465) 45934 * builtin_setjmp_setup instruction pattern: Standard Names. (line 1454) 45935 * byte_mode: Machine Modes. (line 336) 45936 * BYTES_BIG_ENDIAN: Storage Layout. (line 24) 45937 * BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 221) 45938 * C statements for assembler output: Output Statement. (line 6) 45939 * C99 math functions, implicit usage: Library Calls. (line 70) 45940 * C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 137) 45941 * c_register_pragma: Misc. (line 402) 45942 * c_register_pragma_with_expansion: Misc. (line 404) 45943 * call <1>: Side Effects. (line 92) 45944 * call: Flags. (line 221) 45945 * call instruction pattern: Standard Names. (line 1107) 45946 * call usage: Calls. (line 10) 45947 * call, in call_insn: Flags. (line 33) 45948 * call, in mem: Flags. (line 81) 45949 * call-clobbered register: Register Basics. (line 35) 45950 * call-saved register: Register Basics. (line 35) 45951 * call-used register: Register Basics. (line 35) 45952 * CALL_EXPR: Unary and Binary Expressions. 45953 (line 6) 45954 * call_insn: Insns. (line 95) 45955 * call_insn and /c: Flags. (line 33) 45956 * call_insn and /f: Flags. (line 107) 45957 * call_insn and /i: Flags. (line 24) 45958 * call_insn and /j: Flags. (line 161) 45959 * call_insn and /s: Flags. (line 49) 45960 * call_insn and /u: Flags. (line 19) 45961 * call_insn and /u or /i: Flags. (line 29) 45962 * call_insn and /v: Flags. (line 44) 45963 * CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 45964 * call_pop instruction pattern: Standard Names. (line 1135) 45965 * CALL_POPS_ARGS: Stack Arguments. (line 133) 45966 * CALL_REALLY_USED_REGISTERS: Register Basics. (line 46) 45967 * CALL_USED_REGISTERS: Register Basics. (line 35) 45968 * call_used_regs: Register Basics. (line 59) 45969 * call_value instruction pattern: Standard Names. (line 1127) 45970 * call_value_pop instruction pattern: Standard Names. (line 1135) 45971 * CALLER_SAVE_PROFITABLE: Caller Saves. (line 11) 45972 * calling conventions: Stack and Calling. (line 6) 45973 * calling functions in RTL: Calls. (line 6) 45974 * can_create_pseudo_p: Standard Names. (line 75) 45975 * can_fallthru: Basic Blocks. (line 67) 45976 * canadian: Configure Terms. (line 6) 45977 * CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 538) 45978 * CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory. 45979 (line 280) 45980 * canonicalization of instructions: Insn Canonicalizations. 45981 (line 6) 45982 * canonicalize_funcptr_for_compare instruction pattern: Standard Names. 45983 (line 1306) 45984 * CASE_VECTOR_MODE: Misc. (line 27) 45985 * CASE_VECTOR_PC_RELATIVE: Misc. (line 40) 45986 * CASE_VECTOR_SHORTEN_MODE: Misc. (line 31) 45987 * casesi instruction pattern: Standard Names. (line 1229) 45988 * cbranchMODE4 instruction pattern: Standard Names. (line 1096) 45989 * cc0 <1>: CC0 Condition Codes. 45990 (line 6) 45991 * cc0: Regs and Memory. (line 307) 45992 * cc0, RTL sharing: Sharing. (line 27) 45993 * cc0_rtx: Regs and Memory. (line 333) 45994 * CC1_SPEC: Driver. (line 56) 45995 * CC1PLUS_SPEC: Driver. (line 64) 45996 * cc_status: CC0 Condition Codes. 45997 (line 6) 45998 * CC_STATUS_MDEP: CC0 Condition Codes. 45999 (line 17) 46000 * CC_STATUS_MDEP_INIT: CC0 Condition Codes. 46001 (line 23) 46002 * CCmode <1>: MODE_CC Condition Codes. 46003 (line 6) 46004 * CCmode: Machine Modes. (line 176) 46005 * CDImode: Machine Modes. (line 202) 46006 * CEIL_DIV_EXPR: Unary and Binary Expressions. 46007 (line 6) 46008 * CEIL_MOD_EXPR: Unary and Binary Expressions. 46009 (line 6) 46010 * ceilM2 instruction pattern: Standard Names. (line 652) 46011 * CFA_FRAME_BASE_OFFSET: Frame Layout. (line 226) 46012 * CFG verification: Maintaining the CFG. 46013 (line 119) 46014 * CFG, Control Flow Graph: Control Flow. (line 6) 46015 * cfghooks.h: Maintaining the CFG. 46016 (line 6) 46017 * cgraph_finalize_function: Parsing pass. (line 52) 46018 * chain_circular: GTY Options. (line 196) 46019 * chain_next: GTY Options. (line 196) 46020 * chain_prev: GTY Options. (line 196) 46021 * change_address: Standard Names. (line 47) 46022 * CHAR_TYPE_SIZE: Type Layout. (line 39) 46023 * check_stack instruction pattern: Standard Names. (line 1393) 46024 * CHImode: Machine Modes. (line 202) 46025 * class definitions, register: Register Classes. (line 6) 46026 * class preference constraints: Class Preferences. (line 6) 46027 * class, scope: Classes. (line 6) 46028 * CLASS_MAX_NREGS: Register Classes. (line 526) 46029 * CLASS_TYPE_P: Types for C++. (line 65) 46030 * classes of RTX codes: RTL Classes. (line 6) 46031 * CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 46032 * CLASSTYPE_HAS_MUTABLE: Classes. (line 85) 46033 * CLASSTYPE_NON_POD_P: Classes. (line 90) 46034 * CLEANUP_DECL: Statements for C++. (line 6) 46035 * CLEANUP_EXPR: Statements for C++. (line 6) 46036 * CLEANUP_POINT_EXPR: Unary and Binary Expressions. 46037 (line 6) 46038 * CLEANUP_STMT: Statements for C++. (line 6) 46039 * Cleanups: Cleanups. (line 6) 46040 * CLEAR_BY_PIECES_P: Costs. (line 188) 46041 * clear_cache instruction pattern: Standard Names. (line 1885) 46042 * CLEAR_INSN_CACHE: Trampolines. (line 99) 46043 * CLEAR_RATIO: Costs. (line 176) 46044 * clobber: Side Effects. (line 106) 46045 * clrsb: Arithmetic. (line 216) 46046 * clz: Arithmetic. (line 223) 46047 * CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 305) 46048 * clzM2 instruction pattern: Standard Names. (line 717) 46049 * cmpmemM instruction pattern: Standard Names. (line 850) 46050 * cmpstrM instruction pattern: Standard Names. (line 829) 46051 * cmpstrnM instruction pattern: Standard Names. (line 816) 46052 * code generation RTL sequences: Expander Definitions. 46053 (line 6) 46054 * code iterators in .md files: Code Iterators. (line 6) 46055 * CODE_LABEL: Basic Blocks. (line 50) 46056 * code_label: Insns. (line 125) 46057 * code_label and /i: Flags. (line 59) 46058 * code_label and /v: Flags. (line 44) 46059 * CODE_LABEL_NUMBER: Insns. (line 125) 46060 * codes, RTL expression: RTL Objects. (line 47) 46061 * COImode: Machine Modes. (line 202) 46062 * COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 46063 * COLLECT_EXPORT_LIST: Misc. (line 756) 46064 * COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 46065 (line 44) 46066 * COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 46067 (line 33) 46068 * commit_edge_insertions: Maintaining the CFG. 46069 (line 107) 46070 * compare: Arithmetic. (line 43) 46071 * compare, canonicalization of: Insn Canonicalizations. 46072 (line 37) 46073 * comparison_operator: Machine-Independent Predicates. 46074 (line 111) 46075 * compiler passes and files: Passes. (line 6) 46076 * complement, bitwise: Arithmetic. (line 154) 46077 * COMPLEX_CST: Constant expressions. 46078 (line 6) 46079 * COMPLEX_EXPR: Unary and Binary Expressions. 46080 (line 6) 46081 * COMPLEX_TYPE: Types. (line 6) 46082 * COMPONENT_REF: Storage References. (line 6) 46083 * Compound Expressions: Compound Expressions. 46084 (line 6) 46085 * Compound Lvalues: Compound Lvalues. (line 6) 46086 * COMPOUND_EXPR: Unary and Binary Expressions. 46087 (line 6) 46088 * COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 46089 (line 6) 46090 * COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 46091 (line 375) 46092 * COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 46093 (line 375) 46094 * computed jump: Edges. (line 128) 46095 * computing the length of an insn: Insn Lengths. (line 6) 46096 * concat: Regs and Memory. (line 385) 46097 * concatn: Regs and Memory. (line 391) 46098 * cond: Comparisons. (line 90) 46099 * cond and attributes: Expressions. (line 37) 46100 * cond_exec: Side Effects. (line 254) 46101 * COND_EXPR: Unary and Binary Expressions. 46102 (line 6) 46103 * condition code register: Regs and Memory. (line 307) 46104 * condition code status: Condition Code. (line 6) 46105 * condition codes: Comparisons. (line 20) 46106 * conditional execution <1>: Cond Exec Macros. (line 6) 46107 * conditional execution: Conditional Execution. 46108 (line 6) 46109 * Conditional Expressions: Conditional Expressions. 46110 (line 6) 46111 * conditions, in patterns: Patterns. (line 43) 46112 * configuration file <1>: Host Misc. (line 6) 46113 * configuration file: Filesystem. (line 6) 46114 * configure terms: Configure Terms. (line 6) 46115 * CONJ_EXPR: Unary and Binary Expressions. 46116 (line 6) 46117 * const: Constants. (line 110) 46118 * CONST0_RTX: Constants. (line 130) 46119 * const0_rtx: Constants. (line 21) 46120 * CONST1_RTX: Constants. (line 130) 46121 * const1_rtx: Constants. (line 21) 46122 * CONST2_RTX: Constants. (line 130) 46123 * const2_rtx: Constants. (line 21) 46124 * CONST_DECL: Declarations. (line 6) 46125 * const_double: Constants. (line 37) 46126 * const_double, RTL sharing: Sharing. (line 29) 46127 * CONST_DOUBLE_LOW: Constants. (line 50) 46128 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P: Old Constraints. (line 69) 46129 * CONST_DOUBLE_OK_FOR_LETTER_P: Old Constraints. (line 54) 46130 * const_double_operand: Machine-Independent Predicates. 46131 (line 21) 46132 * const_fixed: Constants. (line 63) 46133 * const_int: Constants. (line 8) 46134 * const_int and attribute tests: Expressions. (line 47) 46135 * const_int and attributes: Expressions. (line 10) 46136 * const_int, RTL sharing: Sharing. (line 23) 46137 * const_int_operand: Machine-Independent Predicates. 46138 (line 16) 46139 * CONST_OK_FOR_CONSTRAINT_P: Old Constraints. (line 49) 46140 * CONST_OK_FOR_LETTER_P: Old Constraints. (line 40) 46141 * const_string: Constants. (line 82) 46142 * const_string and attributes: Expressions. (line 20) 46143 * const_true_rtx: Constants. (line 31) 46144 * const_vector: Constants. (line 70) 46145 * const_vector, RTL sharing: Sharing. (line 32) 46146 * constant attributes: Constant Attributes. 46147 (line 6) 46148 * constant definitions: Constant Definitions. 46149 (line 6) 46150 * CONSTANT_ADDRESS_P: Addressing Modes. (line 29) 46151 * CONSTANT_ALIGNMENT: Storage Layout. (line 237) 46152 * CONSTANT_P: Addressing Modes. (line 36) 46153 * CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 46154 * CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 65) 46155 * constants in constraints: Simple Constraints. (line 70) 46156 * constm1_rtx: Constants. (line 21) 46157 * constraint modifier characters: Modifiers. (line 6) 46158 * constraint, matching: Simple Constraints. (line 142) 46159 * CONSTRAINT_LEN: Old Constraints. (line 12) 46160 * constraint_num: C Constraint Interface. 46161 (line 38) 46162 * constraint_satisfied_p: C Constraint Interface. 46163 (line 54) 46164 * constraints: Constraints. (line 6) 46165 * constraints, defining: Define Constraints. (line 6) 46166 * constraints, defining, obsolete method: Old Constraints. (line 6) 46167 * constraints, machine specific: Machine Constraints. 46168 (line 6) 46169 * constraints, testing: C Constraint Interface. 46170 (line 6) 46171 * CONSTRUCTOR: Unary and Binary Expressions. 46172 (line 6) 46173 * constructors, automatic calls: Collect2. (line 15) 46174 * constructors, output of: Initialization. (line 6) 46175 * container: Containers. (line 6) 46176 * CONTINUE_STMT: Statements for C++. (line 6) 46177 * contributors: Contributors. (line 6) 46178 * controlling register usage: Register Basics. (line 73) 46179 * controlling the compilation driver: Driver. (line 6) 46180 * conventions, run-time: Interface. (line 6) 46181 * conversions: Conversions. (line 6) 46182 * CONVERT_EXPR: Unary and Binary Expressions. 46183 (line 6) 46184 * copy_rtx: Addressing Modes. (line 190) 46185 * copy_rtx_if_shared: Sharing. (line 64) 46186 * copysignM3 instruction pattern: Standard Names. (line 698) 46187 * cosM2 instruction pattern: Standard Names. (line 564) 46188 * costs of instructions: Costs. (line 6) 46189 * CP_INTEGRAL_TYPE: Types for C++. (line 57) 46190 * cp_namespace_decls: Namespaces. (line 49) 46191 * CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 46192 * CP_TYPE_CONST_P: Types for C++. (line 24) 46193 * cp_type_quals: Types for C++. (line 6) 46194 * CP_TYPE_RESTRICT_P: Types for C++. (line 30) 46195 * CP_TYPE_VOLATILE_P: Types for C++. (line 27) 46196 * CPLUSPLUS_CPP_SPEC: Driver. (line 51) 46197 * CPP_SPEC: Driver. (line 44) 46198 * CQImode: Machine Modes. (line 202) 46199 * cross compilation and floating point: Floating Point. (line 6) 46200 * CRT_CALL_STATIC_FUNCTION: Sections. (line 121) 46201 * crtl->args.pops_args: Function Entry. (line 106) 46202 * crtl->args.pretend_args_size: Function Entry. (line 112) 46203 * crtl->outgoing_args_size: Stack Arguments. (line 48) 46204 * CRTSTUFF_T_CFLAGS: Target Fragment. (line 15) 46205 * CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 19) 46206 * CSImode: Machine Modes. (line 202) 46207 * cstoreMODE4 instruction pattern: Standard Names. (line 1057) 46208 * CTImode: Machine Modes. (line 202) 46209 * ctrapMM4 instruction pattern: Standard Names. (line 1547) 46210 * ctz: Arithmetic. (line 231) 46211 * CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 306) 46212 * ctzM2 instruction pattern: Standard Names. (line 726) 46213 * CUMULATIVE_ARGS: Register Arguments. (line 128) 46214 * current_function_is_leaf: Leaf Functions. (line 51) 46215 * current_function_uses_only_leaf_regs: Leaf Functions. (line 51) 46216 * current_insn_predicate: Conditional Execution. 46217 (line 26) 46218 * DAmode: Machine Modes. (line 152) 46219 * data bypass: Processor pipeline description. 46220 (line 106) 46221 * data dependence delays: Processor pipeline description. 46222 (line 6) 46223 * Data Dependency Analysis: Dependency analysis. 46224 (line 6) 46225 * data structures: Per-Function Data. (line 6) 46226 * DATA_ALIGNMENT: Storage Layout. (line 224) 46227 * DATA_SECTION_ASM_OP: Sections. (line 53) 46228 * DBR_OUTPUT_SEQEND: Instruction Output. (line 135) 46229 * dbr_sequence_length: Instruction Output. (line 134) 46230 * DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 103) 46231 * DBX_CONTIN_CHAR: DBX Options. (line 66) 46232 * DBX_CONTIN_LENGTH: DBX Options. (line 56) 46233 * DBX_DEBUGGING_INFO: DBX Options. (line 9) 46234 * DBX_FUNCTION_FIRST: DBX Options. (line 97) 46235 * DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 109) 46236 * DBX_NO_XREFS: DBX Options. (line 50) 46237 * DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 34) 46238 * DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 9) 46239 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 46240 (line 42) 46241 * DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 9) 46242 * DBX_REGISTER_NUMBER: All Debuggers. (line 9) 46243 * DBX_REGPARM_STABS_CODE: DBX Options. (line 87) 46244 * DBX_REGPARM_STABS_LETTER: DBX Options. (line 92) 46245 * DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 82) 46246 * DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 73) 46247 * DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 78) 46248 * DBX_USE_BINCL: DBX Options. (line 115) 46249 * DCmode: Machine Modes. (line 197) 46250 * DDmode: Machine Modes. (line 90) 46251 * De Morgan's law: Insn Canonicalizations. 46252 (line 52) 46253 * dead_or_set_p: define_peephole. (line 65) 46254 * debug_expr: Debug Information. (line 22) 46255 * DEBUG_EXPR_DECL: Declarations. (line 6) 46256 * debug_insn: Insns. (line 245) 46257 * DEBUG_SYMS_TEXT: DBX Options. (line 25) 46258 * DEBUGGER_ARG_OFFSET: All Debuggers. (line 37) 46259 * DEBUGGER_AUTO_OFFSET: All Debuggers. (line 28) 46260 * decimal float library: Decimal float library routines. 46261 (line 6) 46262 * DECL_ALIGN: Declarations. (line 6) 46263 * DECL_ANTICIPATED: Functions for C++. (line 42) 46264 * DECL_ARGUMENTS: Function Basics. (line 36) 46265 * DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 46266 * DECL_ARTIFICIAL <1>: Function Properties. 46267 (line 47) 46268 * DECL_ARTIFICIAL <2>: Function Basics. (line 6) 46269 * DECL_ARTIFICIAL: Working with declarations. 46270 (line 24) 46271 * DECL_ASSEMBLER_NAME: Function Basics. (line 6) 46272 * DECL_ATTRIBUTES: Attributes. (line 22) 46273 * DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 46274 * DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 46275 * DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 46276 * DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 46277 * DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 46278 * DECL_CONTEXT: Namespaces. (line 31) 46279 * DECL_CONV_FN_P: Functions for C++. (line 105) 46280 * DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 46281 * DECL_DESTRUCTOR_P: Functions for C++. (line 95) 46282 * DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 46283 * DECL_EXTERNAL <1>: Function Properties. 46284 (line 25) 46285 * DECL_EXTERNAL: Declarations. (line 6) 46286 * DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 46287 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 46288 (line 61) 46289 * DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 46290 * DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 46291 (line 55) 46292 * DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 46293 * DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 46294 * DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 46295 * DECL_INITIAL <1>: Function Basics. (line 51) 46296 * DECL_INITIAL: Declarations. (line 6) 46297 * DECL_LINKONCE_P: Functions for C++. (line 50) 46298 * DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 46299 * DECL_MAIN_P: Functions for C++. (line 34) 46300 * DECL_NAME <1>: Namespaces. (line 20) 46301 * DECL_NAME <2>: Function Basics. (line 6) 46302 * DECL_NAME: Working with declarations. 46303 (line 7) 46304 * DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 46305 * DECL_NAMESPACE_STD_P: Namespaces. (line 45) 46306 * DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 46307 * DECL_NONCONVERTING_P: Functions for C++. (line 80) 46308 * DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 46309 * DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 46310 * DECL_PURE_P: Function Properties. 46311 (line 40) 46312 * DECL_RESULT: Function Basics. (line 41) 46313 * DECL_SAVED_TREE: Function Basics. (line 44) 46314 * DECL_SIZE: Declarations. (line 6) 46315 * DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 46316 * DECL_STMT: Statements for C++. (line 6) 46317 * DECL_STMT_DECL: Statements for C++. (line 6) 46318 * DECL_THUNK_P: Functions for C++. (line 116) 46319 * DECL_VIRTUAL_P: Function Properties. 46320 (line 44) 46321 * DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 46322 * declaration: Declarations. (line 6) 46323 * declarations, RTL: RTL Declarations. (line 6) 46324 * DECLARE_LIBRARY_RENAMES: Library Calls. (line 9) 46325 * decrement_and_branch_until_zero instruction pattern: Standard Names. 46326 (line 1267) 46327 * default: GTY Options. (line 82) 46328 * default_file_start: File Framework. (line 8) 46329 * DEFAULT_GDB_EXTENSIONS: DBX Options. (line 18) 46330 * DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 35) 46331 * DEFAULT_SIGNED_CHAR: Type Layout. (line 161) 46332 * define_address_constraint: Define Constraints. (line 107) 46333 * define_asm_attributes: Tagging Insns. (line 73) 46334 * define_attr: Defining Attributes. 46335 (line 6) 46336 * define_automaton: Processor pipeline description. 46337 (line 53) 46338 * define_bypass: Processor pipeline description. 46339 (line 197) 46340 * define_c_enum: Constant Definitions. 46341 (line 49) 46342 * define_code_attr: Code Iterators. (line 6) 46343 * define_code_iterator: Code Iterators. (line 6) 46344 * define_cond_exec: Conditional Execution. 46345 (line 13) 46346 * define_constants: Constant Definitions. 46347 (line 6) 46348 * define_constraint: Define Constraints. (line 48) 46349 * define_cpu_unit: Processor pipeline description. 46350 (line 68) 46351 * define_delay: Delay Slots. (line 25) 46352 * define_enum: Constant Definitions. 46353 (line 118) 46354 * define_enum_attr <1>: Constant Definitions. 46355 (line 136) 46356 * define_enum_attr: Defining Attributes. 46357 (line 76) 46358 * define_expand: Expander Definitions. 46359 (line 11) 46360 * define_insn: Patterns. (line 6) 46361 * define_insn example: Example. (line 6) 46362 * define_insn_and_split: Insn Splitting. (line 170) 46363 * define_insn_reservation: Processor pipeline description. 46364 (line 106) 46365 * define_int_attr: Int Iterators. (line 6) 46366 * define_int_iterator: Int Iterators. (line 6) 46367 * define_memory_constraint: Define Constraints. (line 88) 46368 * define_mode_attr: Substitutions. (line 6) 46369 * define_mode_iterator: Defining Mode Iterators. 46370 (line 6) 46371 * define_peephole: define_peephole. (line 6) 46372 * define_peephole2: define_peephole2. (line 6) 46373 * define_predicate: Defining Predicates. 46374 (line 6) 46375 * define_query_cpu_unit: Processor pipeline description. 46376 (line 90) 46377 * define_register_constraint: Define Constraints. (line 28) 46378 * define_reservation: Processor pipeline description. 46379 (line 186) 46380 * define_special_predicate: Defining Predicates. 46381 (line 6) 46382 * define_split: Insn Splitting. (line 32) 46383 * define_subst <1>: Subst Iterators. (line 6) 46384 * define_subst <2>: Define Subst Output Template. 46385 (line 6) 46386 * define_subst <3>: Define Subst Pattern Matching. 46387 (line 6) 46388 * define_subst <4>: Define Subst Example. 46389 (line 6) 46390 * define_subst: Define Subst. (line 6) 46391 * define_subst_attr: Subst Iterators. (line 6) 46392 * defining attributes and their values: Defining Attributes. 46393 (line 6) 46394 * defining constraints: Define Constraints. (line 6) 46395 * defining constraints, obsolete method: Old Constraints. (line 6) 46396 * defining jump instruction patterns: Jump Patterns. (line 6) 46397 * defining looping instruction patterns: Looping Patterns. (line 6) 46398 * defining peephole optimizers: Peephole Definitions. 46399 (line 6) 46400 * defining predicates: Defining Predicates. 46401 (line 6) 46402 * defining RTL sequences for code generation: Expander Definitions. 46403 (line 6) 46404 * delay slots, defining: Delay Slots. (line 6) 46405 * deletable: GTY Options. (line 150) 46406 * DELETE_IF_ORDINARY: Filesystem. (line 79) 46407 * Dependent Patterns: Dependent Patterns. (line 6) 46408 * desc: GTY Options. (line 82) 46409 * destructors, output of: Initialization. (line 6) 46410 * deterministic finite state automaton: Processor pipeline description. 46411 (line 6) 46412 * DF_SIZE: Type Layout. (line 137) 46413 * DFmode: Machine Modes. (line 73) 46414 * digits in constraint: Simple Constraints. (line 130) 46415 * DImode: Machine Modes. (line 45) 46416 * DIR_SEPARATOR: Filesystem. (line 18) 46417 * DIR_SEPARATOR_2: Filesystem. (line 19) 46418 * directory options .md: Including Patterns. (line 44) 46419 * disabling certain registers: Register Basics. (line 73) 46420 * dispatch table: Dispatch Tables. (line 8) 46421 * div: Arithmetic. (line 116) 46422 * div and attributes: Expressions. (line 85) 46423 * division: Arithmetic. (line 116) 46424 * divM3 instruction pattern: Standard Names. (line 269) 46425 * divmodM4 instruction pattern: Standard Names. (line 490) 46426 * DO_BODY: Statements for C++. (line 6) 46427 * DO_COND: Statements for C++. (line 6) 46428 * DO_STMT: Statements for C++. (line 6) 46429 * DOLLARS_IN_IDENTIFIERS: Misc. (line 446) 46430 * doloop_begin instruction pattern: Standard Names. (line 1299) 46431 * doloop_end instruction pattern: Standard Names. (line 1277) 46432 * DONE: Expander Definitions. 46433 (line 77) 46434 * DONT_USE_BUILTIN_SETJMP: Exception Region Output. 46435 (line 79) 46436 * DOUBLE_TYPE_SIZE: Type Layout. (line 53) 46437 * DQmode: Machine Modes. (line 115) 46438 * driver: Driver. (line 6) 46439 * DRIVER_SELF_SPECS: Driver. (line 9) 46440 * DUMPFILE_FORMAT: Filesystem. (line 67) 46441 * DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 50) 46442 * DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 13) 46443 * DWARF2_FRAME_INFO: SDB and DWARF. (line 30) 46444 * DWARF2_FRAME_REG_OUT: Frame Registers. (line 150) 46445 * DWARF2_UNWIND_INFO: Exception Region Output. 46446 (line 40) 46447 * DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 152) 46448 * DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 46449 (line 91) 46450 * DWARF_FRAME_REGISTERS: Frame Registers. (line 110) 46451 * DWARF_FRAME_REGNUM: Frame Registers. (line 142) 46452 * DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 134) 46453 * DWARF_ZERO_REG: Frame Layout. (line 163) 46454 * DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 92) 46455 * E in constraint: Simple Constraints. (line 89) 46456 * earlyclobber operand: Modifiers. (line 25) 46457 * edge: Edges. (line 6) 46458 * edge in the flow graph: Edges. (line 6) 46459 * edge iterators: Edges. (line 15) 46460 * edge splitting: Maintaining the CFG. 46461 (line 107) 46462 * EDGE_ABNORMAL: Edges. (line 128) 46463 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 172) 46464 * EDGE_ABNORMAL, EDGE_EH: Edges. (line 96) 46465 * EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 122) 46466 * EDGE_FALLTHRU, force_nonfallthru: Edges. (line 86) 46467 * EDOM, implicit usage: Library Calls. (line 52) 46468 * EH_FRAME_IN_DATA_SECTION: Exception Region Output. 46469 (line 20) 46470 * EH_FRAME_SECTION_NAME: Exception Region Output. 46471 (line 10) 46472 * eh_return instruction pattern: Standard Names. (line 1481) 46473 * EH_RETURN_DATA_REGNO: Exception Handling. (line 7) 46474 * EH_RETURN_HANDLER_RTX: Exception Handling. (line 39) 46475 * EH_RETURN_STACKADJ_RTX: Exception Handling. (line 22) 46476 * EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 46477 (line 29) 46478 * EH_USES: Function Entry. (line 158) 46479 * ei_edge: Edges. (line 43) 46480 * ei_end_p: Edges. (line 27) 46481 * ei_last: Edges. (line 23) 46482 * ei_next: Edges. (line 35) 46483 * ei_one_before_end_p: Edges. (line 31) 46484 * ei_prev: Edges. (line 39) 46485 * ei_safe_safe: Edges. (line 47) 46486 * ei_start: Edges. (line 19) 46487 * ELIMINABLE_REGS: Elimination. (line 47) 46488 * ELSE_CLAUSE: Statements for C++. (line 6) 46489 * Embedded C: Fixed-point fractional library routines. 46490 (line 6) 46491 * EMIT_MODE_SET: Mode Switching. (line 75) 46492 * Empty Statements: Empty Statements. (line 6) 46493 * EMPTY_CLASS_EXPR: Statements for C++. (line 6) 46494 * EMPTY_FIELD_BOUNDARY: Storage Layout. (line 307) 46495 * Emulated TLS: Emulated TLS. (line 6) 46496 * enabled: Disable Insn Alternatives. 46497 (line 6) 46498 * ENDFILE_SPEC: Driver. (line 156) 46499 * endianness: Portability. (line 21) 46500 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 10) 46501 * enum machine_mode: Machine Modes. (line 6) 46502 * enum reg_class: Register Classes. (line 72) 46503 * ENUMERAL_TYPE: Types. (line 6) 46504 * enumerations: Constant Definitions. 46505 (line 49) 46506 * epilogue: Function Entry. (line 6) 46507 * epilogue instruction pattern: Standard Names. (line 1519) 46508 * EPILOGUE_USES: Function Entry. (line 152) 46509 * eq: Comparisons. (line 52) 46510 * eq and attributes: Expressions. (line 85) 46511 * eq_attr: Expressions. (line 106) 46512 * EQ_EXPR: Unary and Binary Expressions. 46513 (line 6) 46514 * equal: Comparisons. (line 52) 46515 * errno, implicit usage: Library Calls. (line 64) 46516 * EXACT_DIV_EXPR: Unary and Binary Expressions. 46517 (line 6) 46518 * examining SSA_NAMEs: SSA. (line 216) 46519 * exception handling <1>: Exception Handling. (line 6) 46520 * exception handling: Edges. (line 96) 46521 * exception_receiver instruction pattern: Standard Names. (line 1445) 46522 * exclamation point: Multi-Alternative. (line 47) 46523 * exclusion_set: Processor pipeline description. 46524 (line 224) 46525 * exclusive-or, bitwise: Arithmetic. (line 168) 46526 * EXIT_EXPR: Unary and Binary Expressions. 46527 (line 6) 46528 * EXIT_IGNORE_STACK: Function Entry. (line 140) 46529 * expander definitions: Expander Definitions. 46530 (line 6) 46531 * expM2 instruction pattern: Standard Names. (line 593) 46532 * EXPR_FILENAME: Working with declarations. 46533 (line 14) 46534 * EXPR_LINENO: Working with declarations. 46535 (line 20) 46536 * expr_list: Insns. (line 552) 46537 * EXPR_STMT: Statements for C++. (line 6) 46538 * EXPR_STMT_EXPR: Statements for C++. (line 6) 46539 * expression: Expression trees. (line 6) 46540 * expression codes: RTL Objects. (line 47) 46541 * extendMN2 instruction pattern: Standard Names. (line 908) 46542 * extensible constraints: Simple Constraints. (line 173) 46543 * EXTRA_ADDRESS_CONSTRAINT: Old Constraints. (line 123) 46544 * EXTRA_CONSTRAINT: Old Constraints. (line 74) 46545 * EXTRA_CONSTRAINT_STR: Old Constraints. (line 95) 46546 * EXTRA_MEMORY_CONSTRAINT: Old Constraints. (line 100) 46547 * EXTRA_SPECS: Driver. (line 183) 46548 * extv instruction pattern: Standard Names. (line 999) 46549 * extvM instruction pattern: Standard Names. (line 944) 46550 * extvmisalignM instruction pattern: Standard Names. (line 954) 46551 * extzv instruction pattern: Standard Names. (line 1017) 46552 * extzvM instruction pattern: Standard Names. (line 968) 46553 * extzvmisalignM instruction pattern: Standard Names. (line 971) 46554 * F in constraint: Simple Constraints. (line 94) 46555 * FAIL: Expander Definitions. 46556 (line 83) 46557 * fall-thru: Edges. (line 69) 46558 * FATAL_EXIT_CODE: Host Misc. (line 6) 46559 * FDL, GNU Free Documentation License: GNU Free Documentation License. 46560 (line 6) 46561 * features, optional, in system conventions: Run-time Target. 46562 (line 59) 46563 * ffs: Arithmetic. (line 211) 46564 * ffsM2 instruction pattern: Standard Names. (line 707) 46565 * FIELD_DECL: Declarations. (line 6) 46566 * file_end_indicate_exec_stack: File Framework. (line 41) 46567 * files and passes of the compiler: Passes. (line 6) 46568 * files, generated: Files. (line 6) 46569 * final_absence_set: Processor pipeline description. 46570 (line 224) 46571 * FINAL_PRESCAN_INSN: Instruction Output. (line 61) 46572 * final_presence_set: Processor pipeline description. 46573 (line 224) 46574 * final_sequence: Instruction Output. (line 145) 46575 * FIND_BASE_TERM: Addressing Modes. (line 119) 46576 * FINI_ARRAY_SECTION_ASM_OP: Sections. (line 114) 46577 * FINI_SECTION_ASM_OP: Sections. (line 99) 46578 * finite state automaton minimization: Processor pipeline description. 46579 (line 305) 46580 * FIRST_PARM_OFFSET: Frame Layout. (line 67) 46581 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65) 46582 * FIRST_PSEUDO_REGISTER: Register Basics. (line 9) 46583 * FIRST_STACK_REG: Stack Registers. (line 27) 46584 * FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 46585 * fix: Conversions. (line 66) 46586 * FIX_TRUNC_EXPR: Unary and Binary Expressions. 46587 (line 6) 46588 * fix_truncMN2 instruction pattern: Standard Names. (line 895) 46589 * fixed register: Register Basics. (line 15) 46590 * fixed-point fractional library: Fixed-point fractional library routines. 46591 (line 6) 46592 * FIXED_CONVERT_EXPR: Unary and Binary Expressions. 46593 (line 6) 46594 * FIXED_CST: Constant expressions. 46595 (line 6) 46596 * FIXED_POINT_TYPE: Types. (line 6) 46597 * FIXED_REGISTERS: Register Basics. (line 15) 46598 * fixed_regs: Register Basics. (line 59) 46599 * fixMN2 instruction pattern: Standard Names. (line 875) 46600 * fixuns_truncMN2 instruction pattern: Standard Names. (line 899) 46601 * fixunsMN2 instruction pattern: Standard Names. (line 884) 46602 * flags in RTL expression: Flags. (line 6) 46603 * float: Conversions. (line 58) 46604 * FLOAT_EXPR: Unary and Binary Expressions. 46605 (line 6) 46606 * float_extend: Conversions. (line 33) 46607 * FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 33) 46608 * FLOAT_STORE_FLAG_VALUE: Misc. (line 287) 46609 * float_truncate: Conversions. (line 53) 46610 * FLOAT_TYPE_SIZE: Type Layout. (line 49) 46611 * FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 42) 46612 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory. 46613 (line 226) 46614 * floating point and cross compilation: Floating Point. (line 6) 46615 * floatMN2 instruction pattern: Standard Names. (line 867) 46616 * floatunsMN2 instruction pattern: Standard Names. (line 871) 46617 * FLOOR_DIV_EXPR: Unary and Binary Expressions. 46618 (line 6) 46619 * FLOOR_MOD_EXPR: Unary and Binary Expressions. 46620 (line 6) 46621 * floorM2 instruction pattern: Standard Names. (line 628) 46622 * flow-insensitive alias analysis: Alias analysis. (line 6) 46623 * flow-sensitive alias analysis: Alias analysis. (line 6) 46624 * fma: Arithmetic. (line 111) 46625 * fmaM4 instruction pattern: Standard Names. (line 279) 46626 * fmodM3 instruction pattern: Standard Names. (line 546) 46627 * fmsM4 instruction pattern: Standard Names. (line 286) 46628 * fnmaM4 instruction pattern: Standard Names. (line 292) 46629 * fnmsM4 instruction pattern: Standard Names. (line 298) 46630 * FOR_BODY: Statements for C++. (line 6) 46631 * FOR_COND: Statements for C++. (line 6) 46632 * FOR_EXPR: Statements for C++. (line 6) 46633 * FOR_INIT_STMT: Statements for C++. (line 6) 46634 * FOR_STMT: Statements for C++. (line 6) 46635 * FORCE_CODE_SECTION_ALIGN: Sections. (line 145) 46636 * force_reg: Standard Names. (line 36) 46637 * fract_convert: Conversions. (line 82) 46638 * FRACT_TYPE_SIZE: Type Layout. (line 68) 46639 * fractional types: Fixed-point fractional library routines. 46640 (line 6) 46641 * fractMN2 instruction pattern: Standard Names. (line 917) 46642 * fractunsMN2 instruction pattern: Standard Names. (line 932) 46643 * frame layout: Frame Layout. (line 6) 46644 * FRAME_ADDR_RTX: Frame Layout. (line 116) 46645 * FRAME_GROWS_DOWNWARD: Frame Layout. (line 31) 46646 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory. 46647 (line 69) 46648 * FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 212) 46649 * frame_pointer_needed: Function Entry. (line 34) 46650 * FRAME_POINTER_REGNUM: Frame Registers. (line 14) 46651 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory. 46652 (line 74) 46653 * frame_pointer_rtx: Frame Registers. (line 104) 46654 * frame_related: Flags. (line 229) 46655 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags. 46656 (line 107) 46657 * frame_related, in mem: Flags. (line 85) 46658 * frame_related, in reg: Flags. (line 94) 46659 * frame_related, in symbol_ref: Flags. (line 165) 46660 * frequency, count, BB_FREQ_BASE: Profile information. 46661 (line 30) 46662 * ftruncM2 instruction pattern: Standard Names. (line 890) 46663 * function <1>: Functions for C++. (line 6) 46664 * function: Functions. (line 6) 46665 * function call conventions: Interface. (line 6) 46666 * function entry and exit: Function Entry. (line 6) 46667 * function entry point, alternate function entry point: Edges. 46668 (line 181) 46669 * function properties: Function Properties. 46670 (line 6) 46671 * function-call insns: Calls. (line 6) 46672 * FUNCTION_ARG_OFFSET: Register Arguments. (line 198) 46673 * FUNCTION_ARG_PADDING: Register Arguments. (line 205) 46674 * FUNCTION_ARG_REGNO_P: Register Arguments. (line 253) 46675 * FUNCTION_BOUNDARY: Storage Layout. (line 166) 46676 * FUNCTION_DECL <1>: Functions for C++. (line 6) 46677 * FUNCTION_DECL: Functions. (line 6) 46678 * FUNCTION_MODE: Misc. (line 342) 46679 * FUNCTION_PROFILER: Profiling. (line 9) 46680 * FUNCTION_TYPE: Types. (line 6) 46681 * FUNCTION_VALUE: Scalar Return. (line 52) 46682 * FUNCTION_VALUE_REGNO_P: Scalar Return. (line 78) 46683 * functions, leaf: Leaf Functions. (line 6) 46684 * fundamental type: Types. (line 6) 46685 * g in constraint: Simple Constraints. (line 120) 46686 * G in constraint: Simple Constraints. (line 98) 46687 * garbage collector, invocation: Invoking the garbage collector. 46688 (line 6) 46689 * garbage collector, troubleshooting: Troubleshooting. (line 6) 46690 * GCC and portability: Portability. (line 6) 46691 * GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 46692 * gcov_type: Profile information. 46693 (line 41) 46694 * ge: Comparisons. (line 72) 46695 * ge and attributes: Expressions. (line 85) 46696 * GE_EXPR: Unary and Binary Expressions. 46697 (line 6) 46698 * GEN_ERRNO_RTX: Library Calls. (line 65) 46699 * gencodes: RTL passes. (line 18) 46700 * general_operand: Machine-Independent Predicates. 46701 (line 105) 46702 * GENERAL_REGS: Register Classes. (line 23) 46703 * generated files: Files. (line 6) 46704 * generating assembler output: Output Statement. (line 6) 46705 * generating insns: RTL Template. (line 6) 46706 * GENERIC <1>: GENERIC. (line 6) 46707 * GENERIC: Parsing pass. (line 6) 46708 * generic predicates: Machine-Independent Predicates. 46709 (line 6) 46710 * genflags: RTL passes. (line 18) 46711 * get_attr: Expressions. (line 101) 46712 * get_attr_length: Insn Lengths. (line 46) 46713 * GET_CLASS_NARROWEST_MODE: Machine Modes. (line 333) 46714 * GET_CODE: RTL Objects. (line 47) 46715 * get_frame_size: Elimination. (line 34) 46716 * get_insns: Insns. (line 34) 46717 * get_last_insn: Insns. (line 34) 46718 * GET_MODE: Machine Modes. (line 280) 46719 * GET_MODE_ALIGNMENT: Machine Modes. (line 320) 46720 * GET_MODE_BITSIZE: Machine Modes. (line 304) 46721 * GET_MODE_CLASS: Machine Modes. (line 294) 46722 * GET_MODE_FBIT: Machine Modes. (line 311) 46723 * GET_MODE_IBIT: Machine Modes. (line 307) 46724 * GET_MODE_MASK: Machine Modes. (line 315) 46725 * GET_MODE_NAME: Machine Modes. (line 291) 46726 * GET_MODE_NUNITS: Machine Modes. (line 329) 46727 * GET_MODE_SIZE: Machine Modes. (line 301) 46728 * GET_MODE_UNIT_SIZE: Machine Modes. (line 323) 46729 * GET_MODE_WIDER_MODE: Machine Modes. (line 297) 46730 * GET_RTX_CLASS: RTL Classes. (line 6) 46731 * GET_RTX_FORMAT: RTL Classes. (line 131) 46732 * GET_RTX_LENGTH: RTL Classes. (line 128) 46733 * get_thread_pointerMODE instruction pattern: Standard Names. 46734 (line 1856) 46735 * geu: Comparisons. (line 72) 46736 * geu and attributes: Expressions. (line 85) 46737 * GGC: Type Information. (line 6) 46738 * ggc_collect: Invoking the garbage collector. 46739 (line 6) 46740 * GIMPLE <1>: GIMPLE. (line 6) 46741 * GIMPLE <2>: Gimplification pass. 46742 (line 6) 46743 * GIMPLE: Parsing pass. (line 14) 46744 * GIMPLE Exception Handling: GIMPLE Exception Handling. 46745 (line 6) 46746 * GIMPLE instruction set: GIMPLE instruction set. 46747 (line 6) 46748 * GIMPLE sequences: GIMPLE sequences. (line 6) 46749 * GIMPLE statement iterators <1>: Maintaining the CFG. 46750 (line 34) 46751 * GIMPLE statement iterators: Basic Blocks. (line 78) 46752 * gimple_addresses_taken: Manipulating GIMPLE statements. 46753 (line 90) 46754 * GIMPLE_ASM: GIMPLE_ASM. (line 6) 46755 * gimple_asm_clear_volatile: GIMPLE_ASM. (line 63) 46756 * gimple_asm_clobber_op: GIMPLE_ASM. (line 46) 46757 * gimple_asm_input_op: GIMPLE_ASM. (line 30) 46758 * gimple_asm_nclobbers: GIMPLE_ASM. (line 27) 46759 * gimple_asm_ninputs: GIMPLE_ASM. (line 21) 46760 * gimple_asm_noutputs: GIMPLE_ASM. (line 24) 46761 * gimple_asm_output_op: GIMPLE_ASM. (line 38) 46762 * gimple_asm_set_clobber_op: GIMPLE_ASM. (line 50) 46763 * gimple_asm_set_input_op: GIMPLE_ASM. (line 34) 46764 * gimple_asm_set_output_op: GIMPLE_ASM. (line 42) 46765 * gimple_asm_set_volatile: GIMPLE_ASM. (line 60) 46766 * gimple_asm_string: GIMPLE_ASM. (line 53) 46767 * gimple_asm_volatile_p: GIMPLE_ASM. (line 57) 46768 * GIMPLE_ASSIGN: GIMPLE_ASSIGN. (line 6) 46769 * gimple_assign_cast_p <1>: GIMPLE_ASSIGN. (line 93) 46770 * gimple_assign_cast_p: Logical Operators. (line 160) 46771 * gimple_assign_lhs: GIMPLE_ASSIGN. (line 51) 46772 * gimple_assign_lhs_ptr: GIMPLE_ASSIGN. (line 54) 46773 * gimple_assign_rhs1: GIMPLE_ASSIGN. (line 57) 46774 * gimple_assign_rhs1_ptr: GIMPLE_ASSIGN. (line 60) 46775 * gimple_assign_rhs2: GIMPLE_ASSIGN. (line 64) 46776 * gimple_assign_rhs2_ptr: GIMPLE_ASSIGN. (line 67) 46777 * gimple_assign_rhs3: GIMPLE_ASSIGN. (line 71) 46778 * gimple_assign_rhs3_ptr: GIMPLE_ASSIGN. (line 74) 46779 * gimple_assign_rhs_class: GIMPLE_ASSIGN. (line 46) 46780 * gimple_assign_rhs_code: GIMPLE_ASSIGN. (line 41) 46781 * gimple_assign_set_lhs: GIMPLE_ASSIGN. (line 78) 46782 * gimple_assign_set_rhs1: GIMPLE_ASSIGN. (line 81) 46783 * gimple_assign_set_rhs2: GIMPLE_ASSIGN. (line 85) 46784 * gimple_assign_set_rhs3: GIMPLE_ASSIGN. (line 89) 46785 * gimple_bb: Manipulating GIMPLE statements. 46786 (line 18) 46787 * GIMPLE_BIND: GIMPLE_BIND. (line 6) 46788 * gimple_bind_add_seq: GIMPLE_BIND. (line 36) 46789 * gimple_bind_add_stmt: GIMPLE_BIND. (line 32) 46790 * gimple_bind_append_vars: GIMPLE_BIND. (line 19) 46791 * gimple_bind_block: GIMPLE_BIND. (line 40) 46792 * gimple_bind_body: GIMPLE_BIND. (line 23) 46793 * gimple_bind_set_block: GIMPLE_BIND. (line 45) 46794 * gimple_bind_set_body: GIMPLE_BIND. (line 28) 46795 * gimple_bind_set_vars: GIMPLE_BIND. (line 15) 46796 * gimple_bind_vars: GIMPLE_BIND. (line 12) 46797 * gimple_block: Manipulating GIMPLE statements. 46798 (line 21) 46799 * gimple_build_asm: GIMPLE_ASM. (line 8) 46800 * gimple_build_asm_vec: GIMPLE_ASM. (line 17) 46801 * gimple_build_assign: GIMPLE_ASSIGN. (line 7) 46802 * gimple_build_assign_with_ops: GIMPLE_ASSIGN. (line 30) 46803 * gimple_build_bind: GIMPLE_BIND. (line 8) 46804 * gimple_build_call: GIMPLE_CALL. (line 8) 46805 * gimple_build_call_from_tree: GIMPLE_CALL. (line 16) 46806 * gimple_build_call_vec: GIMPLE_CALL. (line 25) 46807 * gimple_build_catch: GIMPLE_CATCH. (line 8) 46808 * gimple_build_cond: GIMPLE_COND. (line 8) 46809 * gimple_build_cond_from_tree: GIMPLE_COND. (line 16) 46810 * gimple_build_debug_bind: GIMPLE_DEBUG. (line 8) 46811 * gimple_build_eh_filter: GIMPLE_EH_FILTER. (line 8) 46812 * gimple_build_goto: GIMPLE_LABEL. (line 18) 46813 * gimple_build_label: GIMPLE_LABEL. (line 7) 46814 * gimple_build_nop: GIMPLE_NOP. (line 7) 46815 * gimple_build_omp_atomic_load: GIMPLE_OMP_ATOMIC_LOAD. 46816 (line 8) 46817 * gimple_build_omp_atomic_store: GIMPLE_OMP_ATOMIC_STORE. 46818 (line 7) 46819 * gimple_build_omp_continue: GIMPLE_OMP_CONTINUE. 46820 (line 8) 46821 * gimple_build_omp_critical: GIMPLE_OMP_CRITICAL. 46822 (line 8) 46823 * gimple_build_omp_for: GIMPLE_OMP_FOR. (line 9) 46824 * gimple_build_omp_master: GIMPLE_OMP_MASTER. (line 7) 46825 * gimple_build_omp_ordered: GIMPLE_OMP_ORDERED. (line 7) 46826 * gimple_build_omp_parallel: GIMPLE_OMP_PARALLEL. 46827 (line 8) 46828 * gimple_build_omp_return: GIMPLE_OMP_RETURN. (line 7) 46829 * gimple_build_omp_section: GIMPLE_OMP_SECTION. (line 7) 46830 * gimple_build_omp_sections: GIMPLE_OMP_SECTIONS. 46831 (line 8) 46832 * gimple_build_omp_sections_switch: GIMPLE_OMP_SECTIONS. 46833 (line 14) 46834 * gimple_build_omp_single: GIMPLE_OMP_SINGLE. (line 8) 46835 * gimple_build_resx: GIMPLE_RESX. (line 7) 46836 * gimple_build_return: GIMPLE_RETURN. (line 7) 46837 * gimple_build_switch: GIMPLE_SWITCH. (line 8) 46838 * gimple_build_try: GIMPLE_TRY. (line 8) 46839 * gimple_build_wce: GIMPLE_WITH_CLEANUP_EXPR. 46840 (line 7) 46841 * GIMPLE_CALL: GIMPLE_CALL. (line 6) 46842 * gimple_call_arg: GIMPLE_CALL. (line 66) 46843 * gimple_call_arg_ptr: GIMPLE_CALL. (line 71) 46844 * gimple_call_cannot_inline_p: GIMPLE_CALL. (line 91) 46845 * gimple_call_chain: GIMPLE_CALL. (line 57) 46846 * gimple_call_copy_skip_args: GIMPLE_CALL. (line 98) 46847 * gimple_call_fn: GIMPLE_CALL. (line 38) 46848 * gimple_call_fndecl: GIMPLE_CALL. (line 46) 46849 * gimple_call_lhs: GIMPLE_CALL. (line 29) 46850 * gimple_call_lhs_ptr: GIMPLE_CALL. (line 32) 46851 * gimple_call_mark_uninlinable: GIMPLE_CALL. (line 88) 46852 * gimple_call_noreturn_p: GIMPLE_CALL. (line 94) 46853 * gimple_call_num_args: GIMPLE_CALL. (line 63) 46854 * gimple_call_return_type: GIMPLE_CALL. (line 54) 46855 * gimple_call_set_arg: GIMPLE_CALL. (line 76) 46856 * gimple_call_set_chain: GIMPLE_CALL. (line 60) 46857 * gimple_call_set_fn: GIMPLE_CALL. (line 42) 46858 * gimple_call_set_fndecl: GIMPLE_CALL. (line 51) 46859 * gimple_call_set_lhs: GIMPLE_CALL. (line 35) 46860 * gimple_call_set_tail: GIMPLE_CALL. (line 80) 46861 * gimple_call_tail_p: GIMPLE_CALL. (line 85) 46862 * GIMPLE_CATCH: GIMPLE_CATCH. (line 6) 46863 * gimple_catch_handler: GIMPLE_CATCH. (line 20) 46864 * gimple_catch_set_handler: GIMPLE_CATCH. (line 28) 46865 * gimple_catch_set_types: GIMPLE_CATCH. (line 24) 46866 * gimple_catch_types: GIMPLE_CATCH. (line 13) 46867 * gimple_catch_types_ptr: GIMPLE_CATCH. (line 16) 46868 * gimple_code: Manipulating GIMPLE statements. 46869 (line 15) 46870 * GIMPLE_COND: GIMPLE_COND. (line 6) 46871 * gimple_cond_code: GIMPLE_COND. (line 21) 46872 * gimple_cond_false_label: GIMPLE_COND. (line 60) 46873 * gimple_cond_lhs: GIMPLE_COND. (line 30) 46874 * gimple_cond_make_false: GIMPLE_COND. (line 64) 46875 * gimple_cond_make_true: GIMPLE_COND. (line 67) 46876 * gimple_cond_rhs: GIMPLE_COND. (line 38) 46877 * gimple_cond_set_code: GIMPLE_COND. (line 26) 46878 * gimple_cond_set_false_label: GIMPLE_COND. (line 56) 46879 * gimple_cond_set_lhs: GIMPLE_COND. (line 34) 46880 * gimple_cond_set_rhs: GIMPLE_COND. (line 42) 46881 * gimple_cond_set_true_label: GIMPLE_COND. (line 51) 46882 * gimple_cond_true_label: GIMPLE_COND. (line 46) 46883 * gimple_copy: Manipulating GIMPLE statements. 46884 (line 147) 46885 * GIMPLE_DEBUG: GIMPLE_DEBUG. (line 6) 46886 * GIMPLE_DEBUG_BIND: GIMPLE_DEBUG. (line 6) 46887 * gimple_debug_bind_get_value: GIMPLE_DEBUG. (line 48) 46888 * gimple_debug_bind_get_value_ptr: GIMPLE_DEBUG. (line 53) 46889 * gimple_debug_bind_get_var: GIMPLE_DEBUG. (line 45) 46890 * gimple_debug_bind_has_value_p: GIMPLE_DEBUG. (line 70) 46891 * gimple_debug_bind_p: Logical Operators. (line 164) 46892 * gimple_debug_bind_reset_value: GIMPLE_DEBUG. (line 66) 46893 * gimple_debug_bind_set_value: GIMPLE_DEBUG. (line 62) 46894 * gimple_debug_bind_set_var: GIMPLE_DEBUG. (line 58) 46895 * gimple_def_ops: Manipulating GIMPLE statements. 46896 (line 94) 46897 * GIMPLE_EH_FILTER: GIMPLE_EH_FILTER. (line 6) 46898 * gimple_eh_filter_failure: GIMPLE_EH_FILTER. (line 19) 46899 * gimple_eh_filter_must_not_throw: GIMPLE_EH_FILTER. (line 33) 46900 * gimple_eh_filter_set_failure: GIMPLE_EH_FILTER. (line 29) 46901 * gimple_eh_filter_set_must_not_throw: GIMPLE_EH_FILTER. (line 37) 46902 * gimple_eh_filter_set_types: GIMPLE_EH_FILTER. (line 24) 46903 * gimple_eh_filter_types: GIMPLE_EH_FILTER. (line 12) 46904 * gimple_eh_filter_types_ptr: GIMPLE_EH_FILTER. (line 15) 46905 * gimple_expr_code: Manipulating GIMPLE statements. 46906 (line 31) 46907 * gimple_expr_type: Manipulating GIMPLE statements. 46908 (line 24) 46909 * gimple_goto_dest: GIMPLE_LABEL. (line 21) 46910 * gimple_goto_set_dest: GIMPLE_LABEL. (line 24) 46911 * gimple_has_mem_ops: Manipulating GIMPLE statements. 46912 (line 72) 46913 * gimple_has_ops: Manipulating GIMPLE statements. 46914 (line 69) 46915 * gimple_has_volatile_ops: Manipulating GIMPLE statements. 46916 (line 134) 46917 * GIMPLE_LABEL: GIMPLE_LABEL. (line 6) 46918 * gimple_label_label: GIMPLE_LABEL. (line 11) 46919 * gimple_label_set_label: GIMPLE_LABEL. (line 14) 46920 * gimple_loaded_syms: Manipulating GIMPLE statements. 46921 (line 122) 46922 * gimple_locus: Manipulating GIMPLE statements. 46923 (line 42) 46924 * gimple_locus_empty_p: Manipulating GIMPLE statements. 46925 (line 48) 46926 * gimple_modified_p: Manipulating GIMPLE statements. 46927 (line 130) 46928 * gimple_no_warning_p: Manipulating GIMPLE statements. 46929 (line 51) 46930 * GIMPLE_NOP: GIMPLE_NOP. (line 6) 46931 * gimple_nop_p: GIMPLE_NOP. (line 10) 46932 * gimple_num_ops <1>: Manipulating GIMPLE statements. 46933 (line 75) 46934 * gimple_num_ops: Logical Operators. (line 78) 46935 * GIMPLE_OMP_ATOMIC_LOAD: GIMPLE_OMP_ATOMIC_LOAD. 46936 (line 6) 46937 * gimple_omp_atomic_load_lhs: GIMPLE_OMP_ATOMIC_LOAD. 46938 (line 17) 46939 * gimple_omp_atomic_load_rhs: GIMPLE_OMP_ATOMIC_LOAD. 46940 (line 24) 46941 * gimple_omp_atomic_load_set_lhs: GIMPLE_OMP_ATOMIC_LOAD. 46942 (line 14) 46943 * gimple_omp_atomic_load_set_rhs: GIMPLE_OMP_ATOMIC_LOAD. 46944 (line 21) 46945 * GIMPLE_OMP_ATOMIC_STORE: GIMPLE_OMP_ATOMIC_STORE. 46946 (line 6) 46947 * gimple_omp_atomic_store_set_val: GIMPLE_OMP_ATOMIC_STORE. 46948 (line 12) 46949 * gimple_omp_atomic_store_val: GIMPLE_OMP_ATOMIC_STORE. 46950 (line 15) 46951 * gimple_omp_body: GIMPLE_OMP_PARALLEL. 46952 (line 24) 46953 * GIMPLE_OMP_CONTINUE: GIMPLE_OMP_CONTINUE. 46954 (line 6) 46955 * gimple_omp_continue_control_def: GIMPLE_OMP_CONTINUE. 46956 (line 13) 46957 * gimple_omp_continue_control_def_ptr: GIMPLE_OMP_CONTINUE. 46958 (line 17) 46959 * gimple_omp_continue_control_use: GIMPLE_OMP_CONTINUE. 46960 (line 24) 46961 * gimple_omp_continue_control_use_ptr: GIMPLE_OMP_CONTINUE. 46962 (line 28) 46963 * gimple_omp_continue_set_control_def: GIMPLE_OMP_CONTINUE. 46964 (line 20) 46965 * gimple_omp_continue_set_control_use: GIMPLE_OMP_CONTINUE. 46966 (line 31) 46967 * GIMPLE_OMP_CRITICAL: GIMPLE_OMP_CRITICAL. 46968 (line 6) 46969 * gimple_omp_critical_name: GIMPLE_OMP_CRITICAL. 46970 (line 13) 46971 * gimple_omp_critical_name_ptr: GIMPLE_OMP_CRITICAL. 46972 (line 16) 46973 * gimple_omp_critical_set_name: GIMPLE_OMP_CRITICAL. 46974 (line 21) 46975 * GIMPLE_OMP_FOR: GIMPLE_OMP_FOR. (line 6) 46976 * gimple_omp_for_clauses: GIMPLE_OMP_FOR. (line 20) 46977 * gimple_omp_for_clauses_ptr: GIMPLE_OMP_FOR. (line 23) 46978 * gimple_omp_for_cond: GIMPLE_OMP_FOR. (line 83) 46979 * gimple_omp_for_final: GIMPLE_OMP_FOR. (line 51) 46980 * gimple_omp_for_final_ptr: GIMPLE_OMP_FOR. (line 54) 46981 * gimple_omp_for_incr: GIMPLE_OMP_FOR. (line 61) 46982 * gimple_omp_for_incr_ptr: GIMPLE_OMP_FOR. (line 64) 46983 * gimple_omp_for_index: GIMPLE_OMP_FOR. (line 31) 46984 * gimple_omp_for_index_ptr: GIMPLE_OMP_FOR. (line 34) 46985 * gimple_omp_for_initial: GIMPLE_OMP_FOR. (line 41) 46986 * gimple_omp_for_initial_ptr: GIMPLE_OMP_FOR. (line 44) 46987 * gimple_omp_for_pre_body: GIMPLE_OMP_FOR. (line 70) 46988 * gimple_omp_for_set_clauses: GIMPLE_OMP_FOR. (line 27) 46989 * gimple_omp_for_set_cond: GIMPLE_OMP_FOR. (line 80) 46990 * gimple_omp_for_set_final: GIMPLE_OMP_FOR. (line 58) 46991 * gimple_omp_for_set_incr: GIMPLE_OMP_FOR. (line 67) 46992 * gimple_omp_for_set_index: GIMPLE_OMP_FOR. (line 38) 46993 * gimple_omp_for_set_initial: GIMPLE_OMP_FOR. (line 48) 46994 * gimple_omp_for_set_pre_body: GIMPLE_OMP_FOR. (line 75) 46995 * GIMPLE_OMP_MASTER: GIMPLE_OMP_MASTER. (line 6) 46996 * GIMPLE_OMP_ORDERED: GIMPLE_OMP_ORDERED. (line 6) 46997 * GIMPLE_OMP_PARALLEL: GIMPLE_OMP_PARALLEL. 46998 (line 6) 46999 * gimple_omp_parallel_child_fn: GIMPLE_OMP_PARALLEL. 47000 (line 42) 47001 * gimple_omp_parallel_child_fn_ptr: GIMPLE_OMP_PARALLEL. 47002 (line 46) 47003 * gimple_omp_parallel_clauses: GIMPLE_OMP_PARALLEL. 47004 (line 31) 47005 * gimple_omp_parallel_clauses_ptr: GIMPLE_OMP_PARALLEL. 47006 (line 34) 47007 * gimple_omp_parallel_combined_p: GIMPLE_OMP_PARALLEL. 47008 (line 16) 47009 * gimple_omp_parallel_data_arg: GIMPLE_OMP_PARALLEL. 47010 (line 54) 47011 * gimple_omp_parallel_data_arg_ptr: GIMPLE_OMP_PARALLEL. 47012 (line 58) 47013 * gimple_omp_parallel_set_child_fn: GIMPLE_OMP_PARALLEL. 47014 (line 51) 47015 * gimple_omp_parallel_set_clauses: GIMPLE_OMP_PARALLEL. 47016 (line 38) 47017 * gimple_omp_parallel_set_combined_p: GIMPLE_OMP_PARALLEL. 47018 (line 20) 47019 * gimple_omp_parallel_set_data_arg: GIMPLE_OMP_PARALLEL. 47020 (line 62) 47021 * GIMPLE_OMP_RETURN: GIMPLE_OMP_RETURN. (line 6) 47022 * gimple_omp_return_nowait_p: GIMPLE_OMP_RETURN. (line 14) 47023 * gimple_omp_return_set_nowait: GIMPLE_OMP_RETURN. (line 11) 47024 * GIMPLE_OMP_SECTION: GIMPLE_OMP_SECTION. (line 6) 47025 * gimple_omp_section_last_p: GIMPLE_OMP_SECTION. (line 12) 47026 * gimple_omp_section_set_last: GIMPLE_OMP_SECTION. (line 16) 47027 * GIMPLE_OMP_SECTIONS: GIMPLE_OMP_SECTIONS. 47028 (line 6) 47029 * gimple_omp_sections_clauses: GIMPLE_OMP_SECTIONS. 47030 (line 30) 47031 * gimple_omp_sections_clauses_ptr: GIMPLE_OMP_SECTIONS. 47032 (line 33) 47033 * gimple_omp_sections_control: GIMPLE_OMP_SECTIONS. 47034 (line 17) 47035 * gimple_omp_sections_control_ptr: GIMPLE_OMP_SECTIONS. 47036 (line 21) 47037 * gimple_omp_sections_set_clauses: GIMPLE_OMP_SECTIONS. 47038 (line 37) 47039 * gimple_omp_sections_set_control: GIMPLE_OMP_SECTIONS. 47040 (line 26) 47041 * gimple_omp_set_body: GIMPLE_OMP_PARALLEL. 47042 (line 28) 47043 * GIMPLE_OMP_SINGLE: GIMPLE_OMP_SINGLE. (line 6) 47044 * gimple_omp_single_clauses: GIMPLE_OMP_SINGLE. (line 14) 47045 * gimple_omp_single_clauses_ptr: GIMPLE_OMP_SINGLE. (line 17) 47046 * gimple_omp_single_set_clauses: GIMPLE_OMP_SINGLE. (line 21) 47047 * gimple_op <1>: Manipulating GIMPLE statements. 47048 (line 81) 47049 * gimple_op: Logical Operators. (line 81) 47050 * gimple_op_ptr: Manipulating GIMPLE statements. 47051 (line 84) 47052 * gimple_ops <1>: Manipulating GIMPLE statements. 47053 (line 78) 47054 * gimple_ops: Logical Operators. (line 84) 47055 * GIMPLE_PHI: GIMPLE_PHI. (line 6) 47056 * gimple_phi_arg: GIMPLE_PHI. (line 25) 47057 * gimple_phi_capacity: GIMPLE_PHI. (line 7) 47058 * gimple_phi_num_args: GIMPLE_PHI. (line 11) 47059 * gimple_phi_result: GIMPLE_PHI. (line 16) 47060 * gimple_phi_result_ptr: GIMPLE_PHI. (line 19) 47061 * gimple_phi_set_arg: GIMPLE_PHI. (line 30) 47062 * gimple_phi_set_result: GIMPLE_PHI. (line 22) 47063 * gimple_plf: Manipulating GIMPLE statements. 47064 (line 66) 47065 * GIMPLE_RESX: GIMPLE_RESX. (line 6) 47066 * gimple_resx_region: GIMPLE_RESX. (line 13) 47067 * gimple_resx_set_region: GIMPLE_RESX. (line 16) 47068 * GIMPLE_RETURN: GIMPLE_RETURN. (line 6) 47069 * gimple_return_retval: GIMPLE_RETURN. (line 10) 47070 * gimple_return_set_retval: GIMPLE_RETURN. (line 14) 47071 * gimple_seq_add_seq: GIMPLE sequences. (line 32) 47072 * gimple_seq_add_stmt: GIMPLE sequences. (line 26) 47073 * gimple_seq_alloc: GIMPLE sequences. (line 62) 47074 * gimple_seq_copy: GIMPLE sequences. (line 67) 47075 * gimple_seq_deep_copy: GIMPLE sequences. (line 37) 47076 * gimple_seq_empty_p: GIMPLE sequences. (line 70) 47077 * gimple_seq_first: GIMPLE sequences. (line 44) 47078 * gimple_seq_init: GIMPLE sequences. (line 59) 47079 * gimple_seq_last: GIMPLE sequences. (line 47) 47080 * gimple_seq_reverse: GIMPLE sequences. (line 40) 47081 * gimple_seq_set_first: GIMPLE sequences. (line 55) 47082 * gimple_seq_set_last: GIMPLE sequences. (line 51) 47083 * gimple_seq_singleton_p: GIMPLE sequences. (line 79) 47084 * gimple_set_block: Manipulating GIMPLE statements. 47085 (line 39) 47086 * gimple_set_def_ops: Manipulating GIMPLE statements. 47087 (line 98) 47088 * gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 47089 (line 138) 47090 * gimple_set_locus: Manipulating GIMPLE statements. 47091 (line 45) 47092 * gimple_set_op: Manipulating GIMPLE statements. 47093 (line 87) 47094 * gimple_set_plf: Manipulating GIMPLE statements. 47095 (line 62) 47096 * gimple_set_use_ops: Manipulating GIMPLE statements. 47097 (line 105) 47098 * gimple_set_vdef_ops: Manipulating GIMPLE statements. 47099 (line 119) 47100 * gimple_set_visited: Manipulating GIMPLE statements. 47101 (line 55) 47102 * gimple_set_vuse_ops: Manipulating GIMPLE statements. 47103 (line 112) 47104 * gimple_statement_base: Tuple representation. 47105 (line 14) 47106 * gimple_statement_with_ops: Tuple representation. 47107 (line 96) 47108 * gimple_stored_syms: Manipulating GIMPLE statements. 47109 (line 126) 47110 * GIMPLE_SWITCH: GIMPLE_SWITCH. (line 6) 47111 * gimple_switch_default_label: GIMPLE_SWITCH. (line 39) 47112 * gimple_switch_index: GIMPLE_SWITCH. (line 24) 47113 * gimple_switch_label: GIMPLE_SWITCH. (line 30) 47114 * gimple_switch_num_labels: GIMPLE_SWITCH. (line 15) 47115 * gimple_switch_set_default_label: GIMPLE_SWITCH. (line 43) 47116 * gimple_switch_set_index: GIMPLE_SWITCH. (line 27) 47117 * gimple_switch_set_label: GIMPLE_SWITCH. (line 35) 47118 * gimple_switch_set_num_labels: GIMPLE_SWITCH. (line 20) 47119 * GIMPLE_TRY: GIMPLE_TRY. (line 6) 47120 * gimple_try_catch_is_cleanup: GIMPLE_TRY. (line 20) 47121 * gimple_try_cleanup: GIMPLE_TRY. (line 27) 47122 * gimple_try_eval: GIMPLE_TRY. (line 23) 47123 * gimple_try_kind: GIMPLE_TRY. (line 16) 47124 * gimple_try_set_catch_is_cleanup: GIMPLE_TRY. (line 32) 47125 * gimple_try_set_cleanup: GIMPLE_TRY. (line 41) 47126 * gimple_try_set_eval: GIMPLE_TRY. (line 36) 47127 * gimple_use_ops: Manipulating GIMPLE statements. 47128 (line 101) 47129 * gimple_vdef_ops: Manipulating GIMPLE statements. 47130 (line 115) 47131 * gimple_visited_p: Manipulating GIMPLE statements. 47132 (line 58) 47133 * gimple_vuse_ops: Manipulating GIMPLE statements. 47134 (line 108) 47135 * gimple_wce_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 47136 (line 11) 47137 * gimple_wce_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 47138 (line 18) 47139 * gimple_wce_set_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 47140 (line 15) 47141 * gimple_wce_set_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 47142 (line 22) 47143 * GIMPLE_WITH_CLEANUP_EXPR: GIMPLE_WITH_CLEANUP_EXPR. 47144 (line 6) 47145 * gimplification <1>: Gimplification pass. 47146 (line 6) 47147 * gimplification: Parsing pass. (line 14) 47148 * gimplifier: Parsing pass. (line 14) 47149 * gimplify_assign: GIMPLE_ASSIGN. (line 19) 47150 * gimplify_expr: Gimplification pass. 47151 (line 18) 47152 * gimplify_function_tree: Gimplification pass. 47153 (line 18) 47154 * GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 47155 * global_regs: Register Basics. (line 59) 47156 * GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 91) 47157 * greater than: Comparisons. (line 60) 47158 * gsi_after_labels: Sequence iterators. (line 76) 47159 * gsi_bb: Sequence iterators. (line 83) 47160 * gsi_commit_edge_inserts <1>: Maintaining the CFG. 47161 (line 107) 47162 * gsi_commit_edge_inserts: Sequence iterators. (line 194) 47163 * gsi_commit_one_edge_insert: Sequence iterators. (line 190) 47164 * gsi_end_p <1>: Maintaining the CFG. 47165 (line 49) 47166 * gsi_end_p: Sequence iterators. (line 60) 47167 * gsi_for_stmt: Sequence iterators. (line 157) 47168 * gsi_insert_after <1>: Maintaining the CFG. 47169 (line 61) 47170 * gsi_insert_after: Sequence iterators. (line 147) 47171 * gsi_insert_before <1>: Maintaining the CFG. 47172 (line 67) 47173 * gsi_insert_before: Sequence iterators. (line 136) 47174 * gsi_insert_on_edge <1>: Maintaining the CFG. 47175 (line 107) 47176 * gsi_insert_on_edge: Sequence iterators. (line 174) 47177 * gsi_insert_on_edge_immediate: Sequence iterators. (line 185) 47178 * gsi_insert_seq_after: Sequence iterators. (line 154) 47179 * gsi_insert_seq_before: Sequence iterators. (line 143) 47180 * gsi_insert_seq_on_edge: Sequence iterators. (line 179) 47181 * gsi_last <1>: Maintaining the CFG. 47182 (line 45) 47183 * gsi_last: Sequence iterators. (line 50) 47184 * gsi_last_bb: Sequence iterators. (line 56) 47185 * gsi_link_after: Sequence iterators. (line 115) 47186 * gsi_link_before: Sequence iterators. (line 105) 47187 * gsi_link_seq_after: Sequence iterators. (line 110) 47188 * gsi_link_seq_before: Sequence iterators. (line 99) 47189 * gsi_move_after: Sequence iterators. (line 161) 47190 * gsi_move_before: Sequence iterators. (line 166) 47191 * gsi_move_to_bb_end: Sequence iterators. (line 171) 47192 * gsi_next <1>: Maintaining the CFG. 47193 (line 53) 47194 * gsi_next: Sequence iterators. (line 66) 47195 * gsi_one_before_end_p: Sequence iterators. (line 63) 47196 * gsi_prev <1>: Maintaining the CFG. 47197 (line 57) 47198 * gsi_prev: Sequence iterators. (line 69) 47199 * gsi_remove <1>: Maintaining the CFG. 47200 (line 73) 47201 * gsi_remove: Sequence iterators. (line 90) 47202 * gsi_replace: Sequence iterators. (line 130) 47203 * gsi_seq: Sequence iterators. (line 86) 47204 * gsi_split_seq_after: Sequence iterators. (line 120) 47205 * gsi_split_seq_before: Sequence iterators. (line 125) 47206 * gsi_start <1>: Maintaining the CFG. 47207 (line 41) 47208 * gsi_start: Sequence iterators. (line 40) 47209 * gsi_start_bb: Sequence iterators. (line 46) 47210 * gsi_stmt: Sequence iterators. (line 72) 47211 * gsi_stmt_ptr: Sequence iterators. (line 80) 47212 * gt: Comparisons. (line 60) 47213 * gt and attributes: Expressions. (line 85) 47214 * GT_EXPR: Unary and Binary Expressions. 47215 (line 6) 47216 * gtu: Comparisons. (line 64) 47217 * gtu and attributes: Expressions. (line 85) 47218 * GTY: Type Information. (line 6) 47219 * H in constraint: Simple Constraints. (line 98) 47220 * HAmode: Machine Modes. (line 144) 47221 * HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 436) 47222 * HANDLER: Statements for C++. (line 6) 47223 * HANDLER_BODY: Statements for C++. (line 6) 47224 * HANDLER_PARMS: Statements for C++. (line 6) 47225 * hard registers: Regs and Memory. (line 9) 47226 * HARD_FRAME_POINTER_IS_ARG_POINTER: Frame Registers. (line 58) 47227 * HARD_FRAME_POINTER_IS_FRAME_POINTER: Frame Registers. (line 51) 47228 * HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 20) 47229 * HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 53) 47230 * HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 20) 47231 * HARD_REGNO_MODE_OK: Values in Registers. 47232 (line 58) 47233 * HARD_REGNO_NREGS: Values in Registers. 47234 (line 11) 47235 * HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 47236 (line 25) 47237 * HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 47238 (line 43) 47239 * HARD_REGNO_RENAME_OK: Values in Registers. 47240 (line 119) 47241 * HAS_INIT_SECTION: Macros for Initialization. 47242 (line 19) 47243 * HAS_LONG_COND_BRANCH: Misc. (line 9) 47244 * HAS_LONG_UNCOND_BRANCH: Misc. (line 18) 47245 * HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 47246 * HAVE_POST_DECREMENT: Addressing Modes. (line 12) 47247 * HAVE_POST_INCREMENT: Addressing Modes. (line 11) 47248 * HAVE_POST_MODIFY_DISP: Addressing Modes. (line 18) 47249 * HAVE_POST_MODIFY_REG: Addressing Modes. (line 24) 47250 * HAVE_PRE_DECREMENT: Addressing Modes. (line 10) 47251 * HAVE_PRE_INCREMENT: Addressing Modes. (line 9) 47252 * HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 17) 47253 * HAVE_PRE_MODIFY_REG: Addressing Modes. (line 23) 47254 * HCmode: Machine Modes. (line 197) 47255 * HFmode: Machine Modes. (line 58) 47256 * high: Constants. (line 120) 47257 * HImode: Machine Modes. (line 29) 47258 * HImode, in insn: Insns. (line 278) 47259 * HONOR_REG_ALLOC_ORDER: Allocation Order. (line 37) 47260 * host configuration: Host Config. (line 6) 47261 * host functions: Host Common. (line 6) 47262 * host hooks: Host Common. (line 6) 47263 * host makefile fragment: Host Fragment. (line 6) 47264 * HOST_BIT_BUCKET: Filesystem. (line 51) 47265 * HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 47266 * HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 12) 47267 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 45) 47268 * HOST_HOOKS_GT_PCH_GET_ADDRESS: Host Common. (line 17) 47269 * HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 26) 47270 * HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 47271 * HOST_LONG_FORMAT: Host Misc. (line 45) 47272 * HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 47273 * HOST_OBJECT_SUFFIX: Filesystem. (line 40) 47274 * HOST_PTR_PRINTF: Host Misc. (line 49) 47275 * HOT_TEXT_SECTION_NAME: Sections. (line 43) 47276 * HQmode: Machine Modes. (line 107) 47277 * I in constraint: Simple Constraints. (line 81) 47278 * i in constraint: Simple Constraints. (line 70) 47279 * identifier: Identifiers. (line 6) 47280 * IDENTIFIER_LENGTH: Identifiers. (line 22) 47281 * IDENTIFIER_NODE: Identifiers. (line 6) 47282 * IDENTIFIER_OPNAME_P: Identifiers. (line 27) 47283 * IDENTIFIER_POINTER: Identifiers. (line 17) 47284 * IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 47285 * IEEE 754-2008: Decimal float library routines. 47286 (line 6) 47287 * IF_COND: Statements for C++. (line 6) 47288 * if_marked: GTY Options. (line 156) 47289 * IF_STMT: Statements for C++. (line 6) 47290 * if_then_else: Comparisons. (line 80) 47291 * if_then_else and attributes: Expressions. (line 32) 47292 * if_then_else usage: Side Effects. (line 56) 47293 * IFCVT_MACHDEP_INIT: Misc. (line 560) 47294 * IFCVT_MODIFY_CANCEL: Misc. (line 554) 47295 * IFCVT_MODIFY_FINAL: Misc. (line 548) 47296 * IFCVT_MODIFY_INSN: Misc. (line 542) 47297 * IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 535) 47298 * IFCVT_MODIFY_TESTS: Misc. (line 524) 47299 * IMAGPART_EXPR: Unary and Binary Expressions. 47300 (line 6) 47301 * Immediate Uses: SSA Operands. (line 274) 47302 * immediate_operand: Machine-Independent Predicates. 47303 (line 11) 47304 * IMMEDIATE_PREFIX: Instruction Output. (line 155) 47305 * in_struct: Flags. (line 245) 47306 * in_struct, in code_label and note: Flags. (line 59) 47307 * in_struct, in insn and jump_insn and call_insn: Flags. (line 49) 47308 * in_struct, in insn, jump_insn and call_insn: Flags. (line 148) 47309 * in_struct, in subreg: Flags. (line 187) 47310 * include: Including Patterns. (line 6) 47311 * INCLUDE_DEFAULTS: Driver. (line 328) 47312 * inclusive-or, bitwise: Arithmetic. (line 163) 47313 * INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 183) 47314 * INCOMING_REGNO: Register Basics. (line 88) 47315 * INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 139) 47316 * INCOMING_STACK_BOUNDARY: Storage Layout. (line 161) 47317 * INDEX_REG_CLASS: Register Classes. (line 143) 47318 * indirect_jump instruction pattern: Standard Names. (line 1225) 47319 * indirect_operand: Machine-Independent Predicates. 47320 (line 71) 47321 * INDIRECT_REF: Storage References. (line 6) 47322 * INIT_ARRAY_SECTION_ASM_OP: Sections. (line 107) 47323 * INIT_CUMULATIVE_ARGS: Register Arguments. (line 150) 47324 * INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 177) 47325 * INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 171) 47326 * INIT_ENVIRONMENT: Driver. (line 306) 47327 * INIT_EXPANDERS: Per-Function Data. (line 39) 47328 * INIT_EXPR: Unary and Binary Expressions. 47329 (line 6) 47330 * init_machine_status: Per-Function Data. (line 45) 47331 * init_one_libfunc: Library Calls. (line 15) 47332 * INIT_SECTION_ASM_OP <1>: Macros for Initialization. 47333 (line 10) 47334 * INIT_SECTION_ASM_OP: Sections. (line 91) 47335 * INITIAL_ELIMINATION_OFFSET: Elimination. (line 85) 47336 * INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 83) 47337 * INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 35) 47338 * initialization routines: Initialization. (line 6) 47339 * inlining: Target Attributes. (line 95) 47340 * insert_insn_on_edge: Maintaining the CFG. 47341 (line 107) 47342 * insn: Insns. (line 63) 47343 * insn and /f: Flags. (line 107) 47344 * insn and /j: Flags. (line 157) 47345 * insn and /s: Flags. (line 49) 47346 * insn and /u: Flags. (line 39) 47347 * insn and /v: Flags. (line 44) 47348 * insn attributes: Insn Attributes. (line 6) 47349 * insn canonicalization: Insn Canonicalizations. 47350 (line 6) 47351 * insn includes: Including Patterns. (line 6) 47352 * insn lengths, computing: Insn Lengths. (line 6) 47353 * insn notes, notes: Basic Blocks. (line 52) 47354 * insn splitting: Insn Splitting. (line 6) 47355 * insn-attr.h: Defining Attributes. 47356 (line 32) 47357 * INSN_ANNULLED_BRANCH_P: Flags. (line 39) 47358 * INSN_CODE: Insns. (line 305) 47359 * INSN_DELETED_P: Flags. (line 44) 47360 * INSN_FROM_TARGET_P: Flags. (line 49) 47361 * insn_list: Insns. (line 552) 47362 * INSN_REFERENCES_ARE_DELAYED: Misc. (line 463) 47363 * INSN_SETS_ARE_DELAYED: Misc. (line 452) 47364 * INSN_UID: Insns. (line 23) 47365 * INSN_VAR_LOCATION: Insns. (line 245) 47366 * insns: Insns. (line 6) 47367 * insns, generating: RTL Template. (line 6) 47368 * insns, recognizing: RTL Template. (line 6) 47369 * instruction attributes: Insn Attributes. (line 6) 47370 * instruction latency time: Processor pipeline description. 47371 (line 6) 47372 * instruction patterns: Patterns. (line 6) 47373 * instruction splitting: Insn Splitting. (line 6) 47374 * insv instruction pattern: Standard Names. (line 1023) 47375 * insvM instruction pattern: Standard Names. (line 975) 47376 * insvmisalignM instruction pattern: Standard Names. (line 985) 47377 * int iterators in .md files: Int Iterators. (line 6) 47378 * INT16_TYPE: Type Layout. (line 254) 47379 * INT32_TYPE: Type Layout. (line 255) 47380 * INT64_TYPE: Type Layout. (line 256) 47381 * INT8_TYPE: Type Layout. (line 253) 47382 * INT_FAST16_TYPE: Type Layout. (line 270) 47383 * INT_FAST32_TYPE: Type Layout. (line 271) 47384 * INT_FAST64_TYPE: Type Layout. (line 272) 47385 * INT_FAST8_TYPE: Type Layout. (line 269) 47386 * INT_LEAST16_TYPE: Type Layout. (line 262) 47387 * INT_LEAST32_TYPE: Type Layout. (line 263) 47388 * INT_LEAST64_TYPE: Type Layout. (line 264) 47389 * INT_LEAST8_TYPE: Type Layout. (line 261) 47390 * INT_TYPE_SIZE: Type Layout. (line 12) 47391 * INTEGER_CST: Constant expressions. 47392 (line 6) 47393 * INTEGER_TYPE: Types. (line 6) 47394 * Interdependence of Patterns: Dependent Patterns. (line 6) 47395 * interfacing to GCC output: Interface. (line 6) 47396 * interlock delays: Processor pipeline description. 47397 (line 6) 47398 * intermediate representation lowering: Parsing pass. (line 14) 47399 * INTMAX_TYPE: Type Layout. (line 230) 47400 * INTPTR_TYPE: Type Layout. (line 277) 47401 * introduction: Top. (line 6) 47402 * INVOKE__main: Macros for Initialization. 47403 (line 51) 47404 * ior: Arithmetic. (line 163) 47405 * ior and attributes: Expressions. (line 50) 47406 * ior, canonicalization of: Insn Canonicalizations. 47407 (line 52) 47408 * iorM3 instruction pattern: Standard Names. (line 269) 47409 * IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 45) 47410 * IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 121) 47411 * is_gimple_addressable: Logical Operators. (line 115) 47412 * is_gimple_asm_val: Logical Operators. (line 119) 47413 * is_gimple_assign: Logical Operators. (line 151) 47414 * is_gimple_call: Logical Operators. (line 154) 47415 * is_gimple_call_addr: Logical Operators. (line 122) 47416 * is_gimple_constant: Logical Operators. (line 130) 47417 * is_gimple_debug: Logical Operators. (line 157) 47418 * is_gimple_ip_invariant: Logical Operators. (line 139) 47419 * is_gimple_ip_invariant_address: Logical Operators. (line 144) 47420 * is_gimple_mem_ref_addr: Logical Operators. (line 126) 47421 * is_gimple_min_invariant: Logical Operators. (line 133) 47422 * is_gimple_omp: GIMPLE_OMP_PARALLEL. 47423 (line 65) 47424 * is_gimple_val: Logical Operators. (line 109) 47425 * iterators in .md files: Iterators. (line 6) 47426 * IV analysis on GIMPLE: Scalar evolutions. (line 6) 47427 * IV analysis on RTL: loop-iv. (line 6) 47428 * JMP_BUF_SIZE: Exception Region Output. 47429 (line 84) 47430 * jump: Flags. (line 286) 47431 * jump instruction pattern: Standard Names. (line 1102) 47432 * jump instruction patterns: Jump Patterns. (line 6) 47433 * jump instructions and set: Side Effects. (line 56) 47434 * jump, in call_insn: Flags. (line 161) 47435 * jump, in insn: Flags. (line 157) 47436 * jump, in mem: Flags. (line 70) 47437 * JUMP_ALIGN: Alignment Output. (line 9) 47438 * jump_insn: Insns. (line 73) 47439 * jump_insn and /f: Flags. (line 107) 47440 * jump_insn and /s: Flags. (line 49) 47441 * jump_insn and /u: Flags. (line 39) 47442 * jump_insn and /v: Flags. (line 44) 47443 * JUMP_LABEL: Insns. (line 80) 47444 * JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 151) 47445 * Jumps: Jumps. (line 6) 47446 * LABEL_ALIGN: Alignment Output. (line 58) 47447 * LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 27) 47448 * LABEL_ALT_ENTRY_P: Insns. (line 146) 47449 * LABEL_ALTERNATE_NAME: Edges. (line 181) 47450 * LABEL_DECL: Declarations. (line 6) 47451 * LABEL_KIND: Insns. (line 146) 47452 * LABEL_NUSES: Insns. (line 142) 47453 * LABEL_PRESERVE_P: Flags. (line 59) 47454 * label_ref: Constants. (line 97) 47455 * label_ref and /v: Flags. (line 65) 47456 * label_ref, RTL sharing: Sharing. (line 35) 47457 * LABEL_REF_NONLOCAL_P: Flags. (line 65) 47458 * lang_hooks.gimplify_expr: Gimplification pass. 47459 (line 18) 47460 * lang_hooks.parse_file: Parsing pass. (line 6) 47461 * language-dependent trees: Language-dependent trees. 47462 (line 6) 47463 * language-independent intermediate representation: Parsing pass. 47464 (line 14) 47465 * large return values: Aggregate Return. (line 6) 47466 * LARGEST_EXPONENT_IS_NORMAL: Storage Layout. (line 486) 47467 * LAST_STACK_REG: Stack Registers. (line 31) 47468 * LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 47469 * lceilMN2: Standard Names. (line 693) 47470 * LCSSA: LCSSA. (line 6) 47471 * LD_FINI_SWITCH: Macros for Initialization. 47472 (line 29) 47473 * LD_INIT_SWITCH: Macros for Initialization. 47474 (line 25) 47475 * LDD_SUFFIX: Macros for Initialization. 47476 (line 122) 47477 * le: Comparisons. (line 76) 47478 * le and attributes: Expressions. (line 85) 47479 * LE_EXPR: Unary and Binary Expressions. 47480 (line 6) 47481 * leaf functions: Leaf Functions. (line 6) 47482 * leaf_function_p: Standard Names. (line 1187) 47483 * LEAF_REG_REMAP: Leaf Functions. (line 39) 47484 * LEAF_REGISTERS: Leaf Functions. (line 25) 47485 * left rotate: Arithmetic. (line 195) 47486 * left shift: Arithmetic. (line 173) 47487 * LEGITIMATE_PIC_OPERAND_P: PIC. (line 32) 47488 * LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 153) 47489 * length: GTY Options. (line 50) 47490 * less than: Comparisons. (line 68) 47491 * less than or equal: Comparisons. (line 76) 47492 * leu: Comparisons. (line 76) 47493 * leu and attributes: Expressions. (line 85) 47494 * lfloorMN2: Standard Names. (line 688) 47495 * LIB2FUNCS_EXTRA: Target Fragment. (line 11) 47496 * LIB_SPEC: Driver. (line 108) 47497 * LIBCALL_VALUE: Scalar Return. (line 56) 47498 * libgcc.a: Library Calls. (line 6) 47499 * LIBGCC2_CFLAGS: Target Fragment. (line 8) 47500 * LIBGCC2_GNU_PREFIX: Type Layout. (line 128) 47501 * LIBGCC2_HAS_DF_MODE: Type Layout. (line 109) 47502 * LIBGCC2_HAS_TF_MODE: Type Layout. (line 122) 47503 * LIBGCC2_HAS_XF_MODE: Type Layout. (line 116) 47504 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 103) 47505 * LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 963) 47506 * LIBGCC_SPEC: Driver. (line 116) 47507 * library subroutine names: Library Calls. (line 6) 47508 * LIBRARY_PATH_ENV: Misc. (line 503) 47509 * LIMIT_RELOAD_CLASS: Register Classes. (line 300) 47510 * Linear loop transformations framework: Lambda. (line 6) 47511 * LINK_COMMAND_SPEC: Driver. (line 237) 47512 * LINK_EH_SPEC: Driver. (line 143) 47513 * LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 233) 47514 * LINK_LIBGCC_SPECIAL_1: Driver. (line 228) 47515 * LINK_SPEC: Driver. (line 101) 47516 * list: Containers. (line 6) 47517 * Liveness representation: Liveness information. 47518 (line 6) 47519 * lo_sum: Arithmetic. (line 24) 47520 * load address instruction: Simple Constraints. (line 164) 47521 * LOAD_EXTEND_OP: Misc. (line 60) 47522 * load_multiple instruction pattern: Standard Names. (line 137) 47523 * Local Register Allocator (LRA): RTL passes. (line 200) 47524 * LOCAL_ALIGNMENT: Storage Layout. (line 250) 47525 * LOCAL_CLASS_P: Classes. (line 73) 47526 * LOCAL_DECL_ALIGNMENT: Storage Layout. (line 287) 47527 * LOCAL_INCLUDE_DIR: Driver. (line 313) 47528 * LOCAL_LABEL_PREFIX: Instruction Output. (line 153) 47529 * LOCAL_REGNO: Register Basics. (line 102) 47530 * LOG_LINKS: Insns. (line 324) 47531 * Logical Operators: Logical Operators. (line 6) 47532 * logical-and, bitwise: Arithmetic. (line 158) 47533 * LOGICAL_OP_NON_SHORT_CIRCUIT: Costs. (line 265) 47534 * logM2 instruction pattern: Standard Names. (line 601) 47535 * LONG_ACCUM_TYPE_SIZE: Type Layout. (line 93) 47536 * LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 58) 47537 * LONG_FRACT_TYPE_SIZE: Type Layout. (line 73) 47538 * LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 98) 47539 * LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 78) 47540 * LONG_LONG_TYPE_SIZE: Type Layout. (line 33) 47541 * LONG_TYPE_SIZE: Type Layout. (line 22) 47542 * longjmp and automatic variables: Interface. (line 52) 47543 * Loop analysis: Loop representation. 47544 (line 6) 47545 * Loop manipulation: Loop manipulation. (line 6) 47546 * Loop querying: Loop querying. (line 6) 47547 * Loop representation: Loop representation. 47548 (line 6) 47549 * Loop-closed SSA form: LCSSA. (line 6) 47550 * LOOP_ALIGN: Alignment Output. (line 41) 47551 * LOOP_EXPR: Unary and Binary Expressions. 47552 (line 6) 47553 * looping instruction patterns: Looping Patterns. (line 6) 47554 * lowering, language-dependent intermediate representation: Parsing pass. 47555 (line 14) 47556 * lrintMN2: Standard Names. (line 678) 47557 * lroundMN2: Standard Names. (line 683) 47558 * LSHIFT_EXPR: Unary and Binary Expressions. 47559 (line 6) 47560 * lshiftrt: Arithmetic. (line 190) 47561 * lshiftrt and attributes: Expressions. (line 85) 47562 * lshrM3 instruction pattern: Standard Names. (line 520) 47563 * lt: Comparisons. (line 68) 47564 * lt and attributes: Expressions. (line 85) 47565 * LT_EXPR: Unary and Binary Expressions. 47566 (line 6) 47567 * LTGT_EXPR: Unary and Binary Expressions. 47568 (line 6) 47569 * lto: LTO. (line 6) 47570 * ltrans: LTO. (line 6) 47571 * ltu: Comparisons. (line 68) 47572 * m in constraint: Simple Constraints. (line 17) 47573 * machine attributes: Target Attributes. (line 6) 47574 * machine description macros: Target Macros. (line 6) 47575 * machine descriptions: Machine Desc. (line 6) 47576 * machine mode conversions: Conversions. (line 6) 47577 * machine modes: Machine Modes. (line 6) 47578 * machine specific constraints: Machine Constraints. 47579 (line 6) 47580 * machine-independent predicates: Machine-Independent Predicates. 47581 (line 6) 47582 * macros, target description: Target Macros. (line 6) 47583 * maddMN4 instruction pattern: Standard Names. (line 443) 47584 * MAKE_DECL_ONE_ONLY: Label Output. (line 250) 47585 * make_safe_from: Expander Definitions. 47586 (line 151) 47587 * makefile fragment: Fragments. (line 6) 47588 * makefile targets: Makefile. (line 6) 47589 * MALLOC_ABI_ALIGNMENT: Storage Layout. (line 175) 47590 * Manipulating GIMPLE statements: Manipulating GIMPLE statements. 47591 (line 6) 47592 * mark_hook: GTY Options. (line 171) 47593 * marking roots: GGC Roots. (line 6) 47594 * MASK_RETURN_ADDR: Exception Region Output. 47595 (line 35) 47596 * match_dup <1>: define_peephole2. (line 28) 47597 * match_dup: RTL Template. (line 73) 47598 * match_dup and attributes: Insn Lengths. (line 16) 47599 * match_op_dup: RTL Template. (line 163) 47600 * match_operand: RTL Template. (line 16) 47601 * match_operand and attributes: Expressions. (line 55) 47602 * match_operator: RTL Template. (line 95) 47603 * match_par_dup: RTL Template. (line 219) 47604 * match_parallel: RTL Template. (line 172) 47605 * match_scratch <1>: define_peephole2. (line 28) 47606 * match_scratch: RTL Template. (line 58) 47607 * match_test and attributes: Expressions. (line 64) 47608 * matching constraint: Simple Constraints. (line 142) 47609 * matching operands: Output Template. (line 49) 47610 * math library: Soft float library routines. 47611 (line 6) 47612 * math, in RTL: Arithmetic. (line 6) 47613 * MATH_LIBRARY: Misc. (line 496) 47614 * matherr: Library Calls. (line 52) 47615 * MAX_BITS_PER_WORD: Storage Layout. (line 60) 47616 * MAX_CONDITIONAL_EXECUTE: Misc. (line 518) 47617 * MAX_FIXED_MODE_SIZE: Storage Layout. (line 433) 47618 * MAX_MOVE_MAX: Misc. (line 106) 47619 * MAX_OFILE_ALIGNMENT: Storage Layout. (line 212) 47620 * MAX_REGS_PER_ADDRESS: Addressing Modes. (line 43) 47621 * MAX_STACK_ALIGNMENT: Storage Layout. (line 205) 47622 * maxM3 instruction pattern: Standard Names. (line 304) 47623 * may_trap_p, tree_could_trap_p: Edges. (line 115) 47624 * maybe_undef: GTY Options. (line 179) 47625 * mcount: Profiling. (line 12) 47626 * MD_CAN_REDIRECT_BRANCH: Misc. (line 678) 47627 * MD_EXEC_PREFIX: Driver. (line 268) 47628 * MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 94) 47629 * MD_HANDLE_UNWABI: Exception Handling. (line 114) 47630 * MD_STARTFILE_PREFIX: Driver. (line 296) 47631 * MD_STARTFILE_PREFIX_1: Driver. (line 301) 47632 * mem: Regs and Memory. (line 374) 47633 * mem and /c: Flags. (line 81) 47634 * mem and /f: Flags. (line 85) 47635 * mem and /j: Flags. (line 70) 47636 * mem and /u: Flags. (line 134) 47637 * mem and /v: Flags. (line 76) 47638 * mem, RTL sharing: Sharing. (line 40) 47639 * MEM_ADDR_SPACE: Special Accessors. (line 49) 47640 * MEM_ALIAS_SET: Special Accessors. (line 9) 47641 * MEM_ALIGN: Special Accessors. (line 46) 47642 * MEM_EXPR: Special Accessors. (line 20) 47643 * MEM_KEEP_ALIAS_SET_P: Flags. (line 70) 47644 * MEM_NOTRAP_P: Flags. (line 81) 47645 * MEM_OFFSET: Special Accessors. (line 32) 47646 * MEM_OFFSET_KNOWN_P: Special Accessors. (line 28) 47647 * MEM_POINTER: Flags. (line 85) 47648 * MEM_READONLY_P: Flags. (line 134) 47649 * MEM_REF: Storage References. (line 6) 47650 * mem_signal_fenceMODE instruction pattern: Standard Names. (line 1844) 47651 * MEM_SIZE: Special Accessors. (line 40) 47652 * MEM_SIZE_KNOWN_P: Special Accessors. (line 36) 47653 * mem_thread_fenceMODE instruction pattern: Standard Names. (line 1836) 47654 * MEM_VOLATILE_P: Flags. (line 76) 47655 * memory model: Memory model. (line 6) 47656 * memory reference, nonoffsettable: Simple Constraints. (line 256) 47657 * memory references in constraints: Simple Constraints. (line 17) 47658 * memory_barrier instruction pattern: Standard Names. (line 1585) 47659 * MEMORY_MOVE_COST: Costs. (line 54) 47660 * memory_operand: Machine-Independent Predicates. 47661 (line 58) 47662 * METHOD_TYPE: Types. (line 6) 47663 * MIN_UNITS_PER_WORD: Storage Layout. (line 70) 47664 * MINIMUM_ALIGNMENT: Storage Layout. (line 300) 47665 * MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 183) 47666 * minM3 instruction pattern: Standard Names. (line 304) 47667 * minus: Arithmetic. (line 36) 47668 * minus and attributes: Expressions. (line 85) 47669 * minus, canonicalization of: Insn Canonicalizations. 47670 (line 27) 47671 * MINUS_EXPR: Unary and Binary Expressions. 47672 (line 6) 47673 * MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 47674 * mod: Arithmetic. (line 136) 47675 * mod and attributes: Expressions. (line 85) 47676 * mode classes: Machine Modes. (line 219) 47677 * mode iterators in .md files: Mode Iterators. (line 6) 47678 * mode switching: Mode Switching. (line 6) 47679 * MODE_ACCUM: Machine Modes. (line 249) 47680 * MODE_AFTER: Mode Switching. (line 49) 47681 * MODE_BASE_REG_CLASS: Register Classes. (line 119) 47682 * MODE_BASE_REG_REG_CLASS: Register Classes. (line 125) 47683 * MODE_CC <1>: MODE_CC Condition Codes. 47684 (line 6) 47685 * MODE_CC: Machine Modes. (line 268) 47686 * MODE_CODE_BASE_REG_CLASS: Register Classes. (line 133) 47687 * MODE_COMPLEX_FLOAT: Machine Modes. (line 260) 47688 * MODE_COMPLEX_INT: Machine Modes. (line 257) 47689 * MODE_DECIMAL_FLOAT: Machine Modes. (line 237) 47690 * MODE_ENTRY: Mode Switching. (line 55) 47691 * MODE_EXIT: Mode Switching. (line 61) 47692 * MODE_FLOAT: Machine Modes. (line 233) 47693 * MODE_FRACT: Machine Modes. (line 241) 47694 * MODE_FUNCTION: Machine Modes. (line 264) 47695 * MODE_INT: Machine Modes. (line 225) 47696 * MODE_NEEDED: Mode Switching. (line 42) 47697 * MODE_PARTIAL_INT: Machine Modes. (line 229) 47698 * MODE_PRIORITY_TO_MODE: Mode Switching. (line 67) 47699 * MODE_RANDOM: Machine Modes. (line 273) 47700 * MODE_UACCUM: Machine Modes. (line 253) 47701 * MODE_UFRACT: Machine Modes. (line 245) 47702 * MODES_TIEABLE_P: Values in Registers. 47703 (line 129) 47704 * modifiers in constraints: Modifiers. (line 6) 47705 * MODIFY_EXPR: Unary and Binary Expressions. 47706 (line 6) 47707 * MODIFY_JNI_METHOD_CALL: Misc. (line 763) 47708 * modM3 instruction pattern: Standard Names. (line 269) 47709 * modulo scheduling: RTL passes. (line 132) 47710 * MOVE_BY_PIECES_P: Costs. (line 165) 47711 * MOVE_MAX: Misc. (line 101) 47712 * MOVE_MAX_PIECES: Costs. (line 171) 47713 * MOVE_RATIO: Costs. (line 149) 47714 * movM instruction pattern: Standard Names. (line 11) 47715 * movmemM instruction pattern: Standard Names. (line 750) 47716 * movmisalignM instruction pattern: Standard Names. (line 126) 47717 * movMODEcc instruction pattern: Standard Names. (line 1037) 47718 * movstr instruction pattern: Standard Names. (line 785) 47719 * movstrictM instruction pattern: Standard Names. (line 120) 47720 * msubMN4 instruction pattern: Standard Names. (line 466) 47721 * mulhisi3 instruction pattern: Standard Names. (line 419) 47722 * mulM3 instruction pattern: Standard Names. (line 269) 47723 * mulqihi3 instruction pattern: Standard Names. (line 423) 47724 * mulsidi3 instruction pattern: Standard Names. (line 423) 47725 * mult: Arithmetic. (line 92) 47726 * mult and attributes: Expressions. (line 85) 47727 * mult, canonicalization of: Insn Canonicalizations. 47728 (line 27) 47729 * MULT_EXPR: Unary and Binary Expressions. 47730 (line 6) 47731 * MULT_HIGHPART_EXPR: Unary and Binary Expressions. 47732 (line 6) 47733 * MULTIARCH_DIRNAME: Target Fragment. (line 170) 47734 * MULTILIB_DEFAULTS: Driver. (line 253) 47735 * MULTILIB_DIRNAMES: Target Fragment. (line 44) 47736 * MULTILIB_EXCEPTIONS: Target Fragment. (line 70) 47737 * MULTILIB_EXTRA_OPTS: Target Fragment. (line 132) 47738 * MULTILIB_MATCHES: Target Fragment. (line 63) 47739 * MULTILIB_OPTIONS: Target Fragment. (line 24) 47740 * MULTILIB_OSDIRNAMES: Target Fragment. (line 139) 47741 * MULTILIB_REQUIRED: Target Fragment. (line 82) 47742 * MULTILIB_REUSE: Target Fragment. (line 103) 47743 * multiple alternative constraints: Multi-Alternative. (line 6) 47744 * MULTIPLE_SYMBOL_SPACES: Misc. (line 476) 47745 * multiplication: Arithmetic. (line 92) 47746 * multiplication with signed saturation: Arithmetic. (line 92) 47747 * multiplication with unsigned saturation: Arithmetic. (line 92) 47748 * n in constraint: Simple Constraints. (line 75) 47749 * N_REG_CLASSES: Register Classes. (line 83) 47750 * name: Identifiers. (line 6) 47751 * named address spaces: Named Address Spaces. 47752 (line 6) 47753 * named patterns and conditions: Patterns. (line 47) 47754 * names, pattern: Standard Names. (line 6) 47755 * namespace, scope: Namespaces. (line 6) 47756 * NAMESPACE_DECL <1>: Namespaces. (line 6) 47757 * NAMESPACE_DECL: Declarations. (line 6) 47758 * NATIVE_SYSTEM_HEADER_COMPONENT: Driver. (line 323) 47759 * ne: Comparisons. (line 56) 47760 * ne and attributes: Expressions. (line 85) 47761 * NE_EXPR: Unary and Binary Expressions. 47762 (line 6) 47763 * nearbyintM2 instruction pattern: Standard Names. (line 660) 47764 * neg: Arithmetic. (line 81) 47765 * neg and attributes: Expressions. (line 85) 47766 * neg, canonicalization of: Insn Canonicalizations. 47767 (line 27) 47768 * NEGATE_EXPR: Unary and Binary Expressions. 47769 (line 6) 47770 * negation: Arithmetic. (line 81) 47771 * negation with signed saturation: Arithmetic. (line 81) 47772 * negation with unsigned saturation: Arithmetic. (line 81) 47773 * negM2 instruction pattern: Standard Names. (line 532) 47774 * nested functions, trampolines for: Trampolines. (line 6) 47775 * nested_ptr: GTY Options. (line 186) 47776 * next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks. (line 25) 47777 * NEXT_INSN: Insns. (line 30) 47778 * NEXT_OBJC_RUNTIME: Library Calls. (line 88) 47779 * nil: RTL Objects. (line 73) 47780 * NM_FLAGS: Macros for Initialization. 47781 (line 111) 47782 * NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 26) 47783 * NO_DBX_FUNCTION_END: DBX Hooks. (line 20) 47784 * NO_DBX_GCC_MARKER: File Names and DBX. (line 28) 47785 * NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 23) 47786 * NO_DOLLAR_IN_LABEL: Label Output. (line 67) 47787 * NO_DOT_IN_LABEL: Label Output. (line 73) 47788 * NO_FUNCTION_CSE: Costs. (line 261) 47789 * NO_IMPLICIT_EXTERN_C: Misc. (line 374) 47790 * NO_PROFILE_COUNTERS: Profiling. (line 28) 47791 * NO_REGS: Register Classes. (line 17) 47792 * NON_LVALUE_EXPR: Unary and Binary Expressions. 47793 (line 6) 47794 * nondeterministic finite state automaton: Processor pipeline description. 47795 (line 305) 47796 * nonimmediate_operand: Machine-Independent Predicates. 47797 (line 101) 47798 * nonlocal goto handler: Edges. (line 172) 47799 * nonlocal_goto instruction pattern: Standard Names. (line 1417) 47800 * nonlocal_goto_receiver instruction pattern: Standard Names. 47801 (line 1434) 47802 * nonmemory_operand: Machine-Independent Predicates. 47803 (line 97) 47804 * nonoffsettable memory reference: Simple Constraints. (line 256) 47805 * nop instruction pattern: Standard Names. (line 1220) 47806 * NOP_EXPR: Unary and Binary Expressions. 47807 (line 6) 47808 * normal predicates: Predicates. (line 31) 47809 * not: Arithmetic. (line 154) 47810 * not and attributes: Expressions. (line 50) 47811 * not equal: Comparisons. (line 56) 47812 * not, canonicalization of: Insn Canonicalizations. 47813 (line 27) 47814 * note: Insns. (line 174) 47815 * note and /i: Flags. (line 59) 47816 * note and /v: Flags. (line 44) 47817 * NOTE_INSN_BASIC_BLOCK: Basic Blocks. (line 50) 47818 * NOTE_INSN_BLOCK_BEG: Insns. (line 199) 47819 * NOTE_INSN_BLOCK_END: Insns. (line 199) 47820 * NOTE_INSN_DELETED: Insns. (line 189) 47821 * NOTE_INSN_DELETED_LABEL: Insns. (line 194) 47822 * NOTE_INSN_EH_REGION_BEG: Insns. (line 205) 47823 * NOTE_INSN_EH_REGION_END: Insns. (line 205) 47824 * NOTE_INSN_FUNCTION_BEG: Insns. (line 229) 47825 * NOTE_INSN_LOOP_BEG: Insns. (line 213) 47826 * NOTE_INSN_LOOP_CONT: Insns. (line 219) 47827 * NOTE_INSN_LOOP_END: Insns. (line 213) 47828 * NOTE_INSN_LOOP_VTOP: Insns. (line 223) 47829 * NOTE_INSN_VAR_LOCATION: Insns. (line 233) 47830 * NOTE_LINE_NUMBER: Insns. (line 174) 47831 * NOTE_SOURCE_FILE: Insns. (line 174) 47832 * NOTE_VAR_LOCATION: Insns. (line 233) 47833 * NOTICE_UPDATE_CC: CC0 Condition Codes. 47834 (line 31) 47835 * NUM_MACHINE_MODES: Machine Modes. (line 286) 47836 * NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 47837 * Number of iterations analysis: Number of iterations. 47838 (line 6) 47839 * o in constraint: Simple Constraints. (line 23) 47840 * OBJC_GEN_METHOD_LABEL: Label Output. (line 452) 47841 * OBJC_JBLEN: Misc. (line 958) 47842 * OBJECT_FORMAT_COFF: Macros for Initialization. 47843 (line 97) 47844 * OFFSET_TYPE: Types. (line 6) 47845 * offsettable address: Simple Constraints. (line 23) 47846 * OImode: Machine Modes. (line 51) 47847 * Omega a solver for linear programming problems: Omega. (line 6) 47848 * OMP_ATOMIC: OpenMP. (line 6) 47849 * OMP_CLAUSE: OpenMP. (line 6) 47850 * OMP_CONTINUE: OpenMP. (line 6) 47851 * OMP_CRITICAL: OpenMP. (line 6) 47852 * OMP_FOR: OpenMP. (line 6) 47853 * OMP_MASTER: OpenMP. (line 6) 47854 * OMP_ORDERED: OpenMP. (line 6) 47855 * OMP_PARALLEL: OpenMP. (line 6) 47856 * OMP_RETURN: OpenMP. (line 6) 47857 * OMP_SECTION: OpenMP. (line 6) 47858 * OMP_SECTIONS: OpenMP. (line 6) 47859 * OMP_SINGLE: OpenMP. (line 6) 47860 * one_cmplM2 instruction pattern: Standard Names. (line 747) 47861 * operand access: Accessors. (line 6) 47862 * Operand Access Routines: SSA Operands. (line 119) 47863 * operand constraints: Constraints. (line 6) 47864 * Operand Iterators: SSA Operands. (line 119) 47865 * operand predicates: Predicates. (line 6) 47866 * operand substitution: Output Template. (line 6) 47867 * operands <1>: Patterns. (line 53) 47868 * operands: SSA Operands. (line 6) 47869 * Operands: Operands. (line 6) 47870 * operator predicates: Predicates. (line 6) 47871 * optc-gen.awk: Options. (line 6) 47872 * Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 47873 * OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 9) 47874 * option specification files: Options. (line 6) 47875 * OPTION_DEFAULT_SPECS: Driver. (line 26) 47876 * optional hardware or system features: Run-time Target. (line 59) 47877 * options, directory search: Including Patterns. (line 44) 47878 * order of register allocation: Allocation Order. (line 6) 47879 * ordered_comparison_operator: Machine-Independent Predicates. 47880 (line 116) 47881 * ORDERED_EXPR: Unary and Binary Expressions. 47882 (line 6) 47883 * Ordering of Patterns: Pattern Ordering. (line 6) 47884 * ORIGINAL_REGNO: Special Accessors. (line 54) 47885 * other register constraints: Simple Constraints. (line 173) 47886 * outgoing_args_size: Stack Arguments. (line 48) 47887 * OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 74) 47888 * OUTGOING_REGNO: Register Basics. (line 95) 47889 * output of assembler code: File Framework. (line 6) 47890 * output statements: Output Statement. (line 6) 47891 * output templates: Output Template. (line 6) 47892 * output_asm_insn: Output Statement. (line 53) 47893 * OUTPUT_QUOTED_STRING: File Framework. (line 108) 47894 * OVERLAPPING_REGISTER_NAMES: Instruction Output. (line 21) 47895 * OVERLOAD: Functions for C++. (line 6) 47896 * OVERRIDE_ABI_FORMAT: Register Arguments. (line 141) 47897 * OVL_CURRENT: Functions for C++. (line 6) 47898 * OVL_NEXT: Functions for C++. (line 6) 47899 * p in constraint: Simple Constraints. (line 164) 47900 * PAD_VARARGS_DOWN: Register Arguments. (line 222) 47901 * parallel: Side Effects. (line 210) 47902 * param_is: GTY Options. (line 114) 47903 * parameters, c++ abi: C++ ABI. (line 6) 47904 * parameters, miscellaneous: Misc. (line 6) 47905 * parameters, precompiled headers: PCH Target. (line 6) 47906 * paramN_is: GTY Options. (line 132) 47907 * parity: Arithmetic. (line 243) 47908 * parityM2 instruction pattern: Standard Names. (line 741) 47909 * PARM_BOUNDARY: Storage Layout. (line 140) 47910 * PARM_DECL: Declarations. (line 6) 47911 * PARSE_LDD_OUTPUT: Macros for Initialization. 47912 (line 127) 47913 * pass_duplicate_computed_gotos: Edges. (line 162) 47914 * passes and files of the compiler: Passes. (line 6) 47915 * passing arguments: Interface. (line 36) 47916 * PATH_SEPARATOR: Filesystem. (line 31) 47917 * PATTERN: Insns. (line 294) 47918 * pattern conditions: Patterns. (line 43) 47919 * pattern names: Standard Names. (line 6) 47920 * Pattern Ordering: Pattern Ordering. (line 6) 47921 * patterns: Patterns. (line 6) 47922 * pc: Regs and Memory. (line 361) 47923 * pc and attributes: Insn Lengths. (line 20) 47924 * pc, RTL sharing: Sharing. (line 25) 47925 * PC_REGNUM: Register Basics. (line 109) 47926 * pc_rtx: Regs and Memory. (line 366) 47927 * PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 326) 47928 * PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 65) 47929 * PDImode: Machine Modes. (line 40) 47930 * peephole optimization, RTL representation: Side Effects. (line 244) 47931 * peephole optimizer definitions: Peephole Definitions. 47932 (line 6) 47933 * per-function data: Per-Function Data. (line 6) 47934 * percent sign: Output Template. (line 6) 47935 * PHI nodes: SSA. (line 31) 47936 * PHI_ARG_DEF: SSA. (line 71) 47937 * PHI_ARG_EDGE: SSA. (line 68) 47938 * PHI_ARG_ELT: SSA. (line 63) 47939 * PHI_NUM_ARGS: SSA. (line 59) 47940 * PHI_RESULT: SSA. (line 56) 47941 * PIC: PIC. (line 6) 47942 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 26) 47943 * PIC_OFFSET_TABLE_REGNUM: PIC. (line 16) 47944 * pipeline hazard recognizer: Processor pipeline description. 47945 (line 6) 47946 * Plugins: Plugins. (line 6) 47947 * plus: Arithmetic. (line 14) 47948 * plus and attributes: Expressions. (line 85) 47949 * plus, canonicalization of: Insn Canonicalizations. 47950 (line 27) 47951 * PLUS_EXPR: Unary and Binary Expressions. 47952 (line 6) 47953 * Pmode: Misc. (line 330) 47954 * pmode_register_operand: Machine-Independent Predicates. 47955 (line 35) 47956 * pointer: Types. (line 6) 47957 * POINTER_PLUS_EXPR: Unary and Binary Expressions. 47958 (line 6) 47959 * POINTER_SIZE: Storage Layout. (line 76) 47960 * POINTER_TYPE: Types. (line 6) 47961 * POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 82) 47962 * pop_operand: Machine-Independent Predicates. 47963 (line 88) 47964 * popcount: Arithmetic. (line 239) 47965 * popcountM2 instruction pattern: Standard Names. (line 735) 47966 * pops_args: Function Entry. (line 106) 47967 * portability: Portability. (line 6) 47968 * position independent code: PIC. (line 6) 47969 * post_dec: Incdec. (line 25) 47970 * post_inc: Incdec. (line 30) 47971 * post_modify: Incdec. (line 33) 47972 * post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks. 47973 (line 34) 47974 * POSTDECREMENT_EXPR: Unary and Binary Expressions. 47975 (line 6) 47976 * POSTINCREMENT_EXPR: Unary and Binary Expressions. 47977 (line 6) 47978 * POWI_MAX_MULTS: Misc. (line 826) 47979 * powM3 instruction pattern: Standard Names. (line 609) 47980 * pragma: Misc. (line 379) 47981 * pre_dec: Incdec. (line 8) 47982 * PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 127) 47983 * pre_inc: Incdec. (line 22) 47984 * pre_modify: Incdec. (line 51) 47985 * PREDECREMENT_EXPR: Unary and Binary Expressions. 47986 (line 6) 47987 * predefined macros: Run-time Target. (line 6) 47988 * predicates: Predicates. (line 6) 47989 * predicates and machine modes: Predicates. (line 31) 47990 * predication <1>: Cond Exec Macros. (line 6) 47991 * predication: Conditional Execution. 47992 (line 6) 47993 * predict.def: Profile information. 47994 (line 24) 47995 * PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 42) 47996 * PREFERRED_RELOAD_CLASS: Register Classes. (line 253) 47997 * PREFERRED_STACK_BOUNDARY: Storage Layout. (line 154) 47998 * prefetch: Side Effects. (line 318) 47999 * prefetch and /v: Flags. (line 214) 48000 * prefetch instruction pattern: Standard Names. (line 1562) 48001 * PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 214) 48002 * PREINCREMENT_EXPR: Unary and Binary Expressions. 48003 (line 6) 48004 * presence_set: Processor pipeline description. 48005 (line 224) 48006 * preserving SSA form: SSA. (line 76) 48007 * preserving virtual SSA form: SSA. (line 184) 48008 * pretend_args_size: Function Entry. (line 112) 48009 * prev_active_insn: define_peephole. (line 60) 48010 * PREV_INSN: Insns. (line 26) 48011 * PRINT_OPERAND: Instruction Output. (line 96) 48012 * PRINT_OPERAND_ADDRESS: Instruction Output. (line 124) 48013 * PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 117) 48014 * probe_stack instruction pattern: Standard Names. (line 1409) 48015 * probe_stack_address instruction pattern: Standard Names. (line 1402) 48016 * processor functional units: Processor pipeline description. 48017 (line 6) 48018 * processor pipeline description: Processor pipeline description. 48019 (line 6) 48020 * product: Arithmetic. (line 92) 48021 * profile feedback: Profile information. 48022 (line 14) 48023 * profile representation: Profile information. 48024 (line 6) 48025 * PROFILE_BEFORE_PROLOGUE: Profiling. (line 35) 48026 * PROFILE_HOOK: Profiling. (line 23) 48027 * profiling, code generation: Profiling. (line 6) 48028 * program counter: Regs and Memory. (line 362) 48029 * prologue: Function Entry. (line 6) 48030 * prologue instruction pattern: Standard Names. (line 1500) 48031 * PROMOTE_MODE: Storage Layout. (line 93) 48032 * pseudo registers: Regs and Memory. (line 9) 48033 * PSImode: Machine Modes. (line 32) 48034 * PTRDIFF_TYPE: Type Layout. (line 201) 48035 * purge_dead_edges <1>: Maintaining the CFG. 48036 (line 82) 48037 * purge_dead_edges: Edges. (line 104) 48038 * push address instruction: Simple Constraints. (line 164) 48039 * PUSH_ARGS: Stack Arguments. (line 18) 48040 * PUSH_ARGS_REVERSED: Stack Arguments. (line 26) 48041 * push_operand: Machine-Independent Predicates. 48042 (line 81) 48043 * push_reload: Addressing Modes. (line 177) 48044 * PUSH_ROUNDING: Stack Arguments. (line 32) 48045 * pushM1 instruction pattern: Standard Names. (line 256) 48046 * PUT_CODE: RTL Objects. (line 47) 48047 * PUT_MODE: Machine Modes. (line 283) 48048 * PUT_REG_NOTE_KIND: Insns. (line 357) 48049 * PUT_SDB_: SDB and DWARF. (line 106) 48050 * QCmode: Machine Modes. (line 197) 48051 * QFmode: Machine Modes. (line 54) 48052 * QImode: Machine Modes. (line 25) 48053 * QImode, in insn: Insns. (line 278) 48054 * QQmode: Machine Modes. (line 103) 48055 * qualified type <1>: Types for C++. (line 6) 48056 * qualified type: Types. (line 6) 48057 * querying function unit reservations: Processor pipeline description. 48058 (line 90) 48059 * question mark: Multi-Alternative. (line 41) 48060 * quotient: Arithmetic. (line 116) 48061 * r in constraint: Simple Constraints. (line 66) 48062 * RDIV_EXPR: Unary and Binary Expressions. 48063 (line 6) 48064 * READONLY_DATA_SECTION_ASM_OP: Sections. (line 63) 48065 * real operands: SSA Operands. (line 6) 48066 * REAL_ARITHMETIC: Floating Point. (line 66) 48067 * REAL_CST: Constant expressions. 48068 (line 6) 48069 * REAL_LIBGCC_SPEC: Driver. (line 125) 48070 * REAL_NM_FILE_NAME: Macros for Initialization. 48071 (line 106) 48072 * REAL_TYPE: Types. (line 6) 48073 * REAL_VALUE_ABS: Floating Point. (line 82) 48074 * REAL_VALUE_ATOF: Floating Point. (line 50) 48075 * REAL_VALUE_FIX: Floating Point. (line 41) 48076 * REAL_VALUE_FROM_INT: Floating Point. (line 92) 48077 * REAL_VALUE_ISINF: Floating Point. (line 59) 48078 * REAL_VALUE_ISNAN: Floating Point. (line 62) 48079 * REAL_VALUE_NEGATE: Floating Point. (line 79) 48080 * REAL_VALUE_NEGATIVE: Floating Point. (line 56) 48081 * REAL_VALUE_TO_INT: Floating Point. (line 86) 48082 * REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 145) 48083 * REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 143) 48084 * REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 144) 48085 * REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 141) 48086 * REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 142) 48087 * REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 140) 48088 * REAL_VALUE_TYPE: Floating Point. (line 26) 48089 * REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 45) 48090 * REAL_VALUES_EQUAL: Floating Point. (line 32) 48091 * REAL_VALUES_LESS: Floating Point. (line 38) 48092 * REALPART_EXPR: Unary and Binary Expressions. 48093 (line 6) 48094 * recog_data.operand: Instruction Output. (line 54) 48095 * recognizing insns: RTL Template. (line 6) 48096 * RECORD_TYPE <1>: Classes. (line 6) 48097 * RECORD_TYPE: Types. (line 6) 48098 * redirect_edge_and_branch: Profile information. 48099 (line 71) 48100 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 48101 (line 92) 48102 * reduc_smax_M instruction pattern: Standard Names. (line 310) 48103 * reduc_smin_M instruction pattern: Standard Names. (line 310) 48104 * reduc_splus_M instruction pattern: Standard Names. (line 322) 48105 * reduc_umax_M instruction pattern: Standard Names. (line 316) 48106 * reduc_umin_M instruction pattern: Standard Names. (line 316) 48107 * reduc_uplus_M instruction pattern: Standard Names. (line 328) 48108 * reference: Types. (line 6) 48109 * REFERENCE_TYPE: Types. (line 6) 48110 * reg: Regs and Memory. (line 9) 48111 * reg and /f: Flags. (line 94) 48112 * reg and /i: Flags. (line 89) 48113 * reg and /v: Flags. (line 98) 48114 * reg, RTL sharing: Sharing. (line 17) 48115 * REG_ALLOC_ORDER: Allocation Order. (line 9) 48116 * REG_BR_PRED: Insns. (line 538) 48117 * REG_BR_PROB: Insns. (line 532) 48118 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 48119 (line 82) 48120 * REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 48121 (line 52) 48122 * REG_CC_SETTER: Insns. (line 503) 48123 * REG_CC_USER: Insns. (line 503) 48124 * REG_CLASS_CONTENTS: Register Classes. (line 93) 48125 * reg_class_contents: Register Basics. (line 59) 48126 * REG_CLASS_FROM_CONSTRAINT: Old Constraints. (line 35) 48127 * REG_CLASS_FROM_LETTER: Old Constraints. (line 27) 48128 * REG_CLASS_NAMES: Register Classes. (line 88) 48129 * REG_CROSSING_JUMP: Insns. (line 416) 48130 * REG_DEAD: Insns. (line 368) 48131 * REG_DEAD, REG_UNUSED: Liveness information. 48132 (line 32) 48133 * REG_DEP_ANTI: Insns. (line 525) 48134 * REG_DEP_OUTPUT: Insns. (line 521) 48135 * REG_DEP_TRUE: Insns. (line 518) 48136 * REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 110) 48137 * REG_EQUAL: Insns. (line 431) 48138 * REG_EQUIV: Insns. (line 431) 48139 * REG_EXPR: Special Accessors. (line 60) 48140 * REG_FRAME_RELATED_EXPR: Insns. (line 544) 48141 * REG_FUNCTION_VALUE_P: Flags. (line 89) 48142 * REG_INC: Insns. (line 384) 48143 * reg_label and /v: Flags. (line 65) 48144 * REG_LABEL_OPERAND: Insns. (line 398) 48145 * REG_LABEL_TARGET: Insns. (line 407) 48146 * reg_names <1>: Instruction Output. (line 108) 48147 * reg_names: Register Basics. (line 59) 48148 * REG_NONNEG: Insns. (line 390) 48149 * REG_NOTE_KIND: Insns. (line 357) 48150 * REG_NOTES: Insns. (line 331) 48151 * REG_OFFSET: Special Accessors. (line 64) 48152 * REG_OK_STRICT: Addressing Modes. (line 100) 48153 * REG_PARM_STACK_SPACE: Stack Arguments. (line 59) 48154 * REG_PARM_STACK_SPACE, and TARGET_FUNCTION_ARG: Register Arguments. 48155 (line 51) 48156 * REG_POINTER: Flags. (line 94) 48157 * REG_SETJMP: Insns. (line 425) 48158 * REG_UNUSED: Insns. (line 377) 48159 * REG_USERVAR_P: Flags. (line 98) 48160 * REG_VALUE_IN_UNWIND_CONTEXT: Frame Registers. (line 157) 48161 * REG_WORDS_BIG_ENDIAN: Storage Layout. (line 36) 48162 * regclass_for_constraint: C Constraint Interface. 48163 (line 60) 48164 * register allocation order: Allocation Order. (line 6) 48165 * register class definitions: Register Classes. (line 6) 48166 * register class preference constraints: Class Preferences. (line 6) 48167 * register pairs: Values in Registers. 48168 (line 69) 48169 * Register Transfer Language (RTL): RTL. (line 6) 48170 * register usage: Registers. (line 6) 48171 * REGISTER_MOVE_COST: Costs. (line 10) 48172 * REGISTER_NAMES: Instruction Output. (line 9) 48173 * register_operand: Machine-Independent Predicates. 48174 (line 30) 48175 * REGISTER_PREFIX: Instruction Output. (line 152) 48176 * REGISTER_TARGET_PRAGMAS: Misc. (line 380) 48177 * registers arguments: Register Arguments. (line 6) 48178 * registers in constraints: Simple Constraints. (line 66) 48179 * REGMODE_NATURAL_SIZE: Values in Registers. 48180 (line 50) 48181 * REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 176) 48182 * REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 153) 48183 * REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 163) 48184 * REGNO_OK_FOR_BASE_P: Register Classes. (line 149) 48185 * REGNO_OK_FOR_INDEX_P: Register Classes. (line 190) 48186 * REGNO_REG_CLASS: Register Classes. (line 108) 48187 * regs_ever_live: Function Entry. (line 21) 48188 * regular expressions: Processor pipeline description. 48189 (line 6) 48190 * relative costs: Costs. (line 6) 48191 * RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 263) 48192 * reload_completed: Standard Names. (line 1187) 48193 * reload_in instruction pattern: Standard Names. (line 99) 48194 * reload_in_progress: Standard Names. (line 57) 48195 * reload_out instruction pattern: Standard Names. (line 99) 48196 * reloading: RTL passes. (line 183) 48197 * remainder: Arithmetic. (line 136) 48198 * remainderM3 instruction pattern: Standard Names. (line 555) 48199 * reorder: GTY Options. (line 210) 48200 * representation of RTL: RTL. (line 6) 48201 * reservation delays: Processor pipeline description. 48202 (line 6) 48203 * rest_of_decl_compilation: Parsing pass. (line 52) 48204 * rest_of_type_compilation: Parsing pass. (line 52) 48205 * restore_stack_block instruction pattern: Standard Names. (line 1322) 48206 * restore_stack_function instruction pattern: Standard Names. 48207 (line 1322) 48208 * restore_stack_nonlocal instruction pattern: Standard Names. 48209 (line 1322) 48210 * RESULT_DECL: Declarations. (line 6) 48211 * return: Side Effects. (line 72) 48212 * return instruction pattern: Standard Names. (line 1160) 48213 * return values in registers: Scalar Return. (line 6) 48214 * RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 135) 48215 * RETURN_ADDR_OFFSET: Exception Handling. (line 60) 48216 * RETURN_ADDR_RTX: Frame Layout. (line 124) 48217 * RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 65) 48218 * RETURN_EXPR: Statements for C++. (line 6) 48219 * RETURN_STMT: Statements for C++. (line 6) 48220 * return_val: Flags. (line 274) 48221 * return_val, in call_insn: Flags. (line 24) 48222 * return_val, in reg: Flags. (line 89) 48223 * return_val, in symbol_ref: Flags. (line 202) 48224 * returning aggregate values: Aggregate Return. (line 6) 48225 * returning structures and unions: Interface. (line 10) 48226 * reverse probability: Profile information. 48227 (line 66) 48228 * REVERSE_CONDITION: MODE_CC Condition Codes. 48229 (line 92) 48230 * REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 48231 (line 78) 48232 * right rotate: Arithmetic. (line 195) 48233 * right shift: Arithmetic. (line 190) 48234 * rintM2 instruction pattern: Standard Names. (line 668) 48235 * RISC: Processor pipeline description. 48236 (line 6) 48237 * roots, marking: GGC Roots. (line 6) 48238 * rotate: Arithmetic. (line 195) 48239 * rotatert: Arithmetic. (line 195) 48240 * rotlM3 instruction pattern: Standard Names. (line 520) 48241 * rotrM3 instruction pattern: Standard Names. (line 520) 48242 * ROUND_DIV_EXPR: Unary and Binary Expressions. 48243 (line 6) 48244 * ROUND_MOD_EXPR: Unary and Binary Expressions. 48245 (line 6) 48246 * ROUND_TOWARDS_ZERO: Storage Layout. (line 477) 48247 * ROUND_TYPE_ALIGN: Storage Layout. (line 424) 48248 * roundM2 instruction pattern: Standard Names. (line 644) 48249 * RSHIFT_EXPR: Unary and Binary Expressions. 48250 (line 6) 48251 * RTL addition: Arithmetic. (line 14) 48252 * RTL addition with signed saturation: Arithmetic. (line 14) 48253 * RTL addition with unsigned saturation: Arithmetic. (line 14) 48254 * RTL classes: RTL Classes. (line 6) 48255 * RTL comparison: Arithmetic. (line 43) 48256 * RTL comparison operations: Comparisons. (line 6) 48257 * RTL constant expression types: Constants. (line 6) 48258 * RTL constants: Constants. (line 6) 48259 * RTL declarations: RTL Declarations. (line 6) 48260 * RTL difference: Arithmetic. (line 36) 48261 * RTL expression: RTL Objects. (line 6) 48262 * RTL expressions for arithmetic: Arithmetic. (line 6) 48263 * RTL format: RTL Classes. (line 72) 48264 * RTL format characters: RTL Classes. (line 77) 48265 * RTL function-call insns: Calls. (line 6) 48266 * RTL insn template: RTL Template. (line 6) 48267 * RTL integers: RTL Objects. (line 6) 48268 * RTL memory expressions: Regs and Memory. (line 6) 48269 * RTL object types: RTL Objects. (line 6) 48270 * RTL postdecrement: Incdec. (line 6) 48271 * RTL postincrement: Incdec. (line 6) 48272 * RTL predecrement: Incdec. (line 6) 48273 * RTL preincrement: Incdec. (line 6) 48274 * RTL register expressions: Regs and Memory. (line 6) 48275 * RTL representation: RTL. (line 6) 48276 * RTL side effect expressions: Side Effects. (line 6) 48277 * RTL strings: RTL Objects. (line 6) 48278 * RTL structure sharing assumptions: Sharing. (line 6) 48279 * RTL subtraction: Arithmetic. (line 36) 48280 * RTL subtraction with signed saturation: Arithmetic. (line 36) 48281 * RTL subtraction with unsigned saturation: Arithmetic. (line 36) 48282 * RTL sum: Arithmetic. (line 14) 48283 * RTL vectors: RTL Objects. (line 6) 48284 * RTL_CONST_CALL_P: Flags. (line 19) 48285 * RTL_CONST_OR_PURE_CALL_P: Flags. (line 29) 48286 * RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33) 48287 * RTL_PURE_CALL_P: Flags. (line 24) 48288 * RTX (See RTL): RTL Objects. (line 6) 48289 * RTX codes, classes of: RTL Classes. (line 6) 48290 * RTX_FRAME_RELATED_P: Flags. (line 107) 48291 * run-time conventions: Interface. (line 6) 48292 * run-time target specification: Run-time Target. (line 6) 48293 * s in constraint: Simple Constraints. (line 102) 48294 * same_type_p: Types. (line 88) 48295 * SAmode: Machine Modes. (line 148) 48296 * sat_fract: Conversions. (line 90) 48297 * satfractMN2 instruction pattern: Standard Names. (line 925) 48298 * satfractunsMN2 instruction pattern: Standard Names. (line 938) 48299 * satisfies_constraint_: C Constraint Interface. 48300 (line 47) 48301 * SAVE_EXPR: Unary and Binary Expressions. 48302 (line 6) 48303 * save_stack_block instruction pattern: Standard Names. (line 1322) 48304 * save_stack_function instruction pattern: Standard Names. (line 1322) 48305 * save_stack_nonlocal instruction pattern: Standard Names. (line 1322) 48306 * SBSS_SECTION_ASM_OP: Sections. (line 76) 48307 * Scalar evolutions: Scalar evolutions. (line 6) 48308 * scalars, returned as values: Scalar Return. (line 6) 48309 * SCHED_GROUP_P: Flags. (line 148) 48310 * SCmode: Machine Modes. (line 197) 48311 * scratch: Regs and Memory. (line 298) 48312 * scratch operands: Regs and Memory. (line 298) 48313 * scratch, RTL sharing: Sharing. (line 35) 48314 * scratch_operand: Machine-Independent Predicates. 48315 (line 50) 48316 * SDATA_SECTION_ASM_OP: Sections. (line 58) 48317 * SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 124) 48318 * SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 119) 48319 * SDB_DEBUGGING_INFO: SDB and DWARF. (line 9) 48320 * SDB_DELIM: SDB and DWARF. (line 112) 48321 * SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 129) 48322 * SDmode: Machine Modes. (line 85) 48323 * sdot_prodM instruction pattern: Standard Names. (line 334) 48324 * search options: Including Patterns. (line 44) 48325 * SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 396) 48326 * SECONDARY_MEMORY_NEEDED: Register Classes. (line 452) 48327 * SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 471) 48328 * SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 462) 48329 * SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 397) 48330 * SECONDARY_RELOAD_CLASS: Register Classes. (line 395) 48331 * SELECT_CC_MODE: MODE_CC Condition Codes. 48332 (line 7) 48333 * sequence: Side Effects. (line 260) 48334 * Sequence iterators: Sequence iterators. (line 6) 48335 * set: Side Effects. (line 15) 48336 * set and /f: Flags. (line 107) 48337 * SET_ASM_OP: Label Output. (line 419) 48338 * set_attr: Tagging Insns. (line 31) 48339 * set_attr_alternative: Tagging Insns. (line 49) 48340 * set_bb_seq: GIMPLE sequences. (line 76) 48341 * SET_BY_PIECES_P: Costs. (line 206) 48342 * SET_DEST: Side Effects. (line 69) 48343 * SET_IS_RETURN_P: Flags. (line 157) 48344 * SET_LABEL_KIND: Insns. (line 146) 48345 * set_optab_libfunc: Library Calls. (line 15) 48346 * SET_RATIO: Costs. (line 194) 48347 * SET_SRC: Side Effects. (line 69) 48348 * set_thread_pointerMODE instruction pattern: Standard Names. 48349 (line 1856) 48350 * SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 48351 * setmemM instruction pattern: Standard Names. (line 793) 48352 * SETUP_FRAME_ADDRESSES: Frame Layout. (line 102) 48353 * SF_SIZE: Type Layout. (line 136) 48354 * SFmode: Machine Modes. (line 66) 48355 * sharing of RTL components: Sharing. (line 6) 48356 * shift: Arithmetic. (line 173) 48357 * SHIFT_COUNT_TRUNCATED: Misc. (line 113) 48358 * SHLIB_SUFFIX: Macros for Initialization. 48359 (line 135) 48360 * SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 83) 48361 * SHORT_FRACT_TYPE_SIZE: Type Layout. (line 63) 48362 * SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 87) 48363 * SHORT_TYPE_SIZE: Type Layout. (line 16) 48364 * sibcall_epilogue instruction pattern: Standard Names. (line 1532) 48365 * sibling call: Edges. (line 122) 48366 * SIBLING_CALL_P: Flags. (line 161) 48367 * SIG_ATOMIC_TYPE: Type Layout. (line 252) 48368 * sign_extend: Conversions. (line 23) 48369 * sign_extract: Bit-Fields. (line 8) 48370 * sign_extract, canonicalization of: Insn Canonicalizations. 48371 (line 88) 48372 * signed division: Arithmetic. (line 116) 48373 * signed division with signed saturation: Arithmetic. (line 116) 48374 * signed maximum: Arithmetic. (line 141) 48375 * signed minimum: Arithmetic. (line 141) 48376 * SImode: Machine Modes. (line 37) 48377 * simple constraints: Simple Constraints. (line 6) 48378 * simple_return: Side Effects. (line 86) 48379 * simple_return instruction pattern: Standard Names. (line 1176) 48380 * sincos math function, implicit usage: Library Calls. (line 78) 48381 * sincosM3 instruction pattern: Standard Names. (line 580) 48382 * sinM2 instruction pattern: Standard Names. (line 572) 48383 * SIZE_ASM_OP: Label Output. (line 35) 48384 * SIZE_TYPE: Type Layout. (line 175) 48385 * SIZETYPE: Type Layout. (line 191) 48386 * skip: GTY Options. (line 77) 48387 * SLOW_BYTE_ACCESS: Costs. (line 118) 48388 * SLOW_UNALIGNED_ACCESS: Costs. (line 133) 48389 * smax: Arithmetic. (line 141) 48390 * smin: Arithmetic. (line 141) 48391 * sms, swing, software pipelining: RTL passes. (line 132) 48392 * smulM3_highpart instruction pattern: Standard Names. (line 435) 48393 * soft float library: Soft float library routines. 48394 (line 6) 48395 * special: GTY Options. (line 295) 48396 * special predicates: Predicates. (line 31) 48397 * SPECS: Target Fragment. (line 191) 48398 * speed of instructions: Costs. (line 6) 48399 * split_block: Maintaining the CFG. 48400 (line 99) 48401 * splitting instructions: Insn Splitting. (line 6) 48402 * SQmode: Machine Modes. (line 111) 48403 * sqrt: Arithmetic. (line 207) 48404 * sqrtM2 instruction pattern: Standard Names. (line 538) 48405 * square root: Arithmetic. (line 207) 48406 * ss_abs: Arithmetic. (line 200) 48407 * ss_ashift: Arithmetic. (line 173) 48408 * ss_div: Arithmetic. (line 116) 48409 * ss_minus: Arithmetic. (line 36) 48410 * ss_mult: Arithmetic. (line 92) 48411 * ss_neg: Arithmetic. (line 81) 48412 * ss_plus: Arithmetic. (line 14) 48413 * ss_truncate: Conversions. (line 43) 48414 * SSA: SSA. (line 6) 48415 * SSA_NAME_DEF_STMT: SSA. (line 219) 48416 * SSA_NAME_VERSION: SSA. (line 224) 48417 * ssaddM3 instruction pattern: Standard Names. (line 269) 48418 * ssashlM3 instruction pattern: Standard Names. (line 510) 48419 * ssdivM3 instruction pattern: Standard Names. (line 269) 48420 * ssmaddMN4 instruction pattern: Standard Names. (line 458) 48421 * ssmsubMN4 instruction pattern: Standard Names. (line 482) 48422 * ssmulM3 instruction pattern: Standard Names. (line 269) 48423 * ssnegM2 instruction pattern: Standard Names. (line 532) 48424 * sssubM3 instruction pattern: Standard Names. (line 269) 48425 * ssum_widenM3 instruction pattern: Standard Names. (line 344) 48426 * stack arguments: Stack Arguments. (line 6) 48427 * stack frame layout: Frame Layout. (line 6) 48428 * stack smashing protection: Stack Smashing Protection. 48429 (line 6) 48430 * STACK_ALIGNMENT_NEEDED: Frame Layout. (line 48) 48431 * STACK_BOUNDARY: Storage Layout. (line 146) 48432 * STACK_CHECK_BUILTIN: Stack Checking. (line 32) 48433 * STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 83) 48434 * STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 74) 48435 * STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 90) 48436 * STACK_CHECK_MOVING_SP: Stack Checking. (line 54) 48437 * STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 46) 48438 * STACK_CHECK_PROTECT: Stack Checking. (line 63) 48439 * STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 39) 48440 * STACK_DYNAMIC_OFFSET: Frame Layout. (line 75) 48441 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory. 48442 (line 83) 48443 * STACK_GROWS_DOWNWARD: Frame Layout. (line 9) 48444 * STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 84) 48445 * STACK_POINTER_OFFSET: Frame Layout. (line 58) 48446 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory. 48447 (line 93) 48448 * STACK_POINTER_REGNUM: Frame Registers. (line 9) 48449 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory. 48450 (line 83) 48451 * stack_pointer_rtx: Frame Registers. (line 104) 48452 * stack_protect_set instruction pattern: Standard Names. (line 1866) 48453 * stack_protect_test instruction pattern: Standard Names. (line 1876) 48454 * STACK_PUSH_CODE: Frame Layout. (line 17) 48455 * STACK_REG_COVER_CLASS: Stack Registers. (line 23) 48456 * STACK_REGS: Stack Registers. (line 20) 48457 * STACK_SAVEAREA_MODE: Storage Layout. (line 440) 48458 * STACK_SIZE_MODE: Storage Layout. (line 452) 48459 * STACK_SLOT_ALIGNMENT: Storage Layout. (line 271) 48460 * standard pattern names: Standard Names. (line 6) 48461 * STANDARD_STARTFILE_PREFIX: Driver. (line 275) 48462 * STANDARD_STARTFILE_PREFIX_1: Driver. (line 282) 48463 * STANDARD_STARTFILE_PREFIX_2: Driver. (line 289) 48464 * STARTFILE_SPEC: Driver. (line 148) 48465 * STARTING_FRAME_OFFSET: Frame Layout. (line 39) 48466 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory. 48467 (line 74) 48468 * Statement and operand traversals: Statement and operand traversals. 48469 (line 6) 48470 * Statement Sequences: Statement Sequences. 48471 (line 6) 48472 * statements <1>: Statements for C++. (line 6) 48473 * statements: Function Properties. 48474 (line 6) 48475 * Statements: Statements. (line 6) 48476 * Static profile estimation: Profile information. 48477 (line 24) 48478 * static single assignment: SSA. (line 6) 48479 * STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 78) 48480 * STATIC_CHAIN_REGNUM: Frame Registers. (line 77) 48481 * stdarg.h and register arguments: Register Arguments. (line 45) 48482 * STDC_0_IN_SYSTEM_HEADERS: Misc. (line 351) 48483 * STMT_EXPR: Unary and Binary Expressions. 48484 (line 6) 48485 * STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 48486 * storage layout: Storage Layout. (line 6) 48487 * STORE_BY_PIECES_P: Costs. (line 213) 48488 * STORE_FLAG_VALUE: Misc. (line 202) 48489 * store_multiple instruction pattern: Standard Names. (line 160) 48490 * strcpy: Storage Layout. (line 231) 48491 * STRICT_ALIGNMENT: Storage Layout. (line 321) 48492 * strict_low_part: RTL Declarations. (line 9) 48493 * strict_memory_address_p: Addressing Modes. (line 187) 48494 * STRING_CST: Constant expressions. 48495 (line 6) 48496 * STRING_POOL_ADDRESS_P: Flags. (line 165) 48497 * strlenM instruction pattern: Standard Names. (line 860) 48498 * structure value address: Aggregate Return. (line 6) 48499 * STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 313) 48500 * structures, returning: Interface. (line 10) 48501 * subM3 instruction pattern: Standard Names. (line 269) 48502 * SUBOBJECT: Statements for C++. (line 6) 48503 * SUBOBJECT_CLEANUP: Statements for C++. (line 6) 48504 * subreg: Regs and Memory. (line 97) 48505 * subreg and /s: Flags. (line 187) 48506 * subreg and /u: Flags. (line 180) 48507 * subreg and /u and /v: Flags. (line 170) 48508 * subreg, in strict_low_part: RTL Declarations. (line 9) 48509 * SUBREG_BYTE: Regs and Memory. (line 289) 48510 * SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 170) 48511 * SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 180) 48512 * SUBREG_PROMOTED_VAR_P: Flags. (line 187) 48513 * SUBREG_REG: Regs and Memory. (line 289) 48514 * subst iterators in .md files: Subst Iterators. (line 6) 48515 * SUCCESS_EXIT_CODE: Host Misc. (line 12) 48516 * SUPPORTS_INIT_PRIORITY: Macros for Initialization. 48517 (line 58) 48518 * SUPPORTS_ONE_ONLY: Label Output. (line 259) 48519 * SUPPORTS_WEAK: Label Output. (line 233) 48520 * SWITCH_BODY: Statements for C++. (line 6) 48521 * SWITCH_COND: Statements for C++. (line 6) 48522 * SWITCH_STMT: Statements for C++. (line 6) 48523 * SWITCHABLE_TARGET: Run-time Target. (line 165) 48524 * SYMBOL_FLAG_ANCHOR: Special Accessors. (line 120) 48525 * SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 102) 48526 * SYMBOL_FLAG_FUNCTION: Special Accessors. (line 95) 48527 * SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 116) 48528 * SYMBOL_FLAG_LOCAL: Special Accessors. (line 98) 48529 * SYMBOL_FLAG_SMALL: Special Accessors. (line 107) 48530 * SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 111) 48531 * symbol_ref: Constants. (line 87) 48532 * symbol_ref and /f: Flags. (line 165) 48533 * symbol_ref and /i: Flags. (line 202) 48534 * symbol_ref and /u: Flags. (line 10) 48535 * symbol_ref and /v: Flags. (line 206) 48536 * symbol_ref, RTL sharing: Sharing. (line 20) 48537 * SYMBOL_REF_ANCHOR_P: Special Accessors. (line 120) 48538 * SYMBOL_REF_BLOCK: Special Accessors. (line 133) 48539 * SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 138) 48540 * SYMBOL_REF_CONSTANT: Special Accessors. (line 81) 48541 * SYMBOL_REF_DATA: Special Accessors. (line 85) 48542 * SYMBOL_REF_DECL: Special Accessors. (line 69) 48543 * SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 102) 48544 * SYMBOL_REF_FLAG: Flags. (line 206) 48545 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 277) 48546 * SYMBOL_REF_FLAGS: Special Accessors. (line 89) 48547 * SYMBOL_REF_FUNCTION_P: Special Accessors. (line 95) 48548 * SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 116) 48549 * SYMBOL_REF_LOCAL_P: Special Accessors. (line 98) 48550 * SYMBOL_REF_SMALL_P: Special Accessors. (line 107) 48551 * SYMBOL_REF_TLS_MODEL: Special Accessors. (line 111) 48552 * SYMBOL_REF_USED: Flags. (line 197) 48553 * SYMBOL_REF_WEAK: Flags. (line 202) 48554 * symbolic label: Sharing. (line 20) 48555 * sync_addMODE instruction pattern: Standard Names. (line 1631) 48556 * sync_andMODE instruction pattern: Standard Names. (line 1631) 48557 * sync_compare_and_swapMODE instruction pattern: Standard Names. 48558 (line 1591) 48559 * sync_iorMODE instruction pattern: Standard Names. (line 1631) 48560 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1696) 48561 * sync_lock_test_and_setMODE instruction pattern: Standard Names. 48562 (line 1670) 48563 * sync_nandMODE instruction pattern: Standard Names. (line 1631) 48564 * sync_new_addMODE instruction pattern: Standard Names. (line 1663) 48565 * sync_new_andMODE instruction pattern: Standard Names. (line 1663) 48566 * sync_new_iorMODE instruction pattern: Standard Names. (line 1663) 48567 * sync_new_nandMODE instruction pattern: Standard Names. (line 1663) 48568 * sync_new_subMODE instruction pattern: Standard Names. (line 1663) 48569 * sync_new_xorMODE instruction pattern: Standard Names. (line 1663) 48570 * sync_old_addMODE instruction pattern: Standard Names. (line 1646) 48571 * sync_old_andMODE instruction pattern: Standard Names. (line 1646) 48572 * sync_old_iorMODE instruction pattern: Standard Names. (line 1646) 48573 * sync_old_nandMODE instruction pattern: Standard Names. (line 1646) 48574 * sync_old_subMODE instruction pattern: Standard Names. (line 1646) 48575 * sync_old_xorMODE instruction pattern: Standard Names. (line 1646) 48576 * sync_subMODE instruction pattern: Standard Names. (line 1631) 48577 * sync_xorMODE instruction pattern: Standard Names. (line 1631) 48578 * SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 177) 48579 * SYSROOT_SUFFIX_SPEC: Driver. (line 172) 48580 * t-TARGET: Target Fragment. (line 6) 48581 * table jump: Basic Blocks. (line 67) 48582 * tablejump instruction pattern: Standard Names. (line 1249) 48583 * tag: GTY Options. (line 82) 48584 * tagging insns: Tagging Insns. (line 6) 48585 * tail calls: Tail Calls. (line 6) 48586 * TAmode: Machine Modes. (line 156) 48587 * target attributes: Target Attributes. (line 6) 48588 * target description macros: Target Macros. (line 6) 48589 * target functions: Target Structure. (line 6) 48590 * target hooks: Target Structure. (line 6) 48591 * target makefile fragment: Target Fragment. (line 6) 48592 * target specifications: Run-time Target. (line 6) 48593 * TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 48594 (line 45) 48595 * TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 48596 (line 88) 48597 * TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 48598 (line 63) 48599 * TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 48600 (line 72) 48601 * TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 48602 (line 38) 48603 * TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 48604 (line 79) 48605 * TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 48606 (line 52) 48607 * TARGET_ADDRESS_COST: Costs. (line 302) 48608 * TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 398) 48609 * TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 700) 48610 * TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 980) 48611 * TARGET_ALWAYS_STRIP_DOTDOT: Driver. (line 247) 48612 * TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 84) 48613 * TARGET_ARM_EABI_UNWINDER: Exception Region Output. 48614 (line 129) 48615 * TARGET_ARRAY_MODE_SUPPORTED_P: Register Arguments. (line 337) 48616 * TARGET_ASAN_SHADOW_OFFSET: Misc. (line 1008) 48617 * TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 10) 48618 * TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 8) 48619 * TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 9) 48620 * TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 11) 48621 * TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 271) 48622 * TARGET_ASM_BYTE_OP: Data Output. (line 7) 48623 * TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 207) 48624 * TARGET_ASM_CLOSE_PAREN: Data Output. (line 131) 48625 * TARGET_ASM_CODE_END: File Framework. (line 59) 48626 * TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 48627 (line 69) 48628 * TARGET_ASM_DECLARE_CONSTANT_NAME: Label Output. (line 154) 48629 * TARGET_ASM_DESTRUCTOR: Macros for Initialization. 48630 (line 83) 48631 * TARGET_ASM_EMIT_EXCEPT_PERSONALITY: Dispatch Tables. (line 82) 48632 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 74) 48633 * TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 63) 48634 * TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 306) 48635 * TARGET_ASM_FILE_END: File Framework. (line 37) 48636 * TARGET_ASM_FILE_START: File Framework. (line 9) 48637 * TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 17) 48638 * TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 31) 48639 * TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 84) 48640 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 61) 48641 * TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 55) 48642 * TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 68) 48643 * TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 11) 48644 * TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 215) 48645 * TARGET_ASM_FUNCTION_SECTION: File Framework. (line 124) 48646 * TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework. 48647 (line 134) 48648 * TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 199) 48649 * TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 190) 48650 * TARGET_ASM_INIT_SECTIONS: Sections. (line 160) 48651 * TARGET_ASM_INTEGER: Data Output. (line 27) 48652 * TARGET_ASM_INTERNAL_LABEL: Label Output. (line 350) 48653 * TARGET_ASM_JUMP_ALIGN_MAX_SKIP: Alignment Output. (line 22) 48654 * TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. 48655 (line 36) 48656 * TARGET_ASM_LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 69) 48657 * TARGET_ASM_LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 54) 48658 * TARGET_ASM_LTO_END: File Framework. (line 54) 48659 * TARGET_ASM_LTO_START: File Framework. (line 49) 48660 * TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 313) 48661 * TARGET_ASM_MERGEABLE_RODATA_PREFIX: Sections. (line 222) 48662 * TARGET_ASM_NAMED_SECTION: File Framework. (line 116) 48663 * TARGET_ASM_OPEN_PAREN: Data Output. (line 130) 48664 * TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 40) 48665 * TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 44) 48666 * TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 101) 48667 * TARGET_ASM_OUTPUT_IDENT: File Framework. (line 102) 48668 * TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 165) 48669 * TARGET_ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 94) 48670 * TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 165) 48671 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 209) 48672 * TARGET_ASM_RELOC_RW_MASK: Sections. (line 169) 48673 * TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 232) 48674 * TARGET_ASM_SELECT_SECTION: Sections. (line 181) 48675 * TARGET_ASM_TM_CLONE_TABLE_SECTION: Sections. (line 227) 48676 * TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 29) 48677 * TARGET_ASM_TTYPE: Exception Region Output. 48678 (line 123) 48679 * TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 14) 48680 * TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 12) 48681 * TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 13) 48682 * TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 15) 48683 * TARGET_ASM_UNIQUE_SECTION: Sections. (line 202) 48684 * TARGET_ASM_UNWIND_EMIT: Dispatch Tables. (line 88) 48685 * TARGET_ASM_UNWIND_EMIT_BEFORE_INSN: Dispatch Tables. (line 93) 48686 * TARGET_ATOMIC_TEST_AND_SET_TRUEVAL: Misc. (line 1018) 48687 * TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 11) 48688 * TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P: Target Attributes. (line 19) 48689 * TARGET_BINDS_LOCAL_P: Sections. (line 309) 48690 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 797) 48691 * TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 789) 48692 * TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 273) 48693 * TARGET_BUILTIN_DECL: Misc. (line 597) 48694 * TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 264) 48695 * TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 109) 48696 * TARGET_C99_FUNCTIONS: Library Calls. (line 71) 48697 * TARGET_C_PREINCLUDE: Misc. (line 362) 48698 * TARGET_CALLEE_COPIES: Register Arguments. (line 116) 48699 * TARGET_CAN_ELIMINATE: Elimination. (line 75) 48700 * TARGET_CAN_FOLLOW_JUMP: Misc. (line 687) 48701 * TARGET_CAN_INLINE_P: Target Attributes. (line 158) 48702 * TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 237) 48703 * TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 776) 48704 * TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 294) 48705 * TARGET_CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 48706 (line 57) 48707 * TARGET_CASE_VALUES_THRESHOLD: Misc. (line 47) 48708 * TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 48709 (line 121) 48710 * TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 28) 48711 * TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target. (line 121) 48712 * TARGET_CLASS_LIKELY_SPILLED_P: Register Classes. (line 494) 48713 * TARGET_CLASS_MAX_NREGS: Register Classes. (line 511) 48714 * TARGET_COMMUTATIVE_P: Misc. (line 693) 48715 * TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 27) 48716 * TARGET_COMPARE_VERSION_PRIORITY: Misc. (line 637) 48717 * TARGET_CONDITIONAL_REGISTER_USAGE: Register Basics. (line 60) 48718 * TARGET_CONST_ANCHOR: Misc. (line 991) 48719 * TARGET_CONST_NOT_OK_FOR_DEBUG_P: Addressing Modes. (line 232) 48720 * TARGET_CONVERT_TO_TYPE: Misc. (line 944) 48721 * TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 9) 48722 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 87) 48723 * TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 38) 48724 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 62) 48725 * TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 25) 48726 * TARGET_CXX_DECL_MANGLING_CONTEXT: C++ ABI. (line 93) 48727 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 54) 48728 * TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 18) 48729 * TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 12) 48730 * TARGET_CXX_GUARD_TYPE: C++ ABI. (line 7) 48731 * TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 30) 48732 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 43) 48733 * TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 69) 48734 * TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 74) 48735 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 80) 48736 * TARGET_DEBUG_UNWIND_INFO: SDB and DWARF. (line 37) 48737 * TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 524) 48738 * TARGET_DECLSPEC: Target Attributes. (line 73) 48739 * TARGET_DEFAULT_PACK_STRUCT: Misc. (line 440) 48740 * TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 167) 48741 * TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 56) 48742 * TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 434) 48743 * TARGET_DELAY_SCHED2: SDB and DWARF. (line 66) 48744 * TARGET_DELAY_VARTRACK: SDB and DWARF. (line 70) 48745 * TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 223) 48746 * TARGET_DIFFERENT_ADDR_DISPLACEMENT_P: Register Classes. (line 570) 48747 * TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 55) 48748 * TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 18) 48749 * TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 172) 48750 * TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 48751 (line 106) 48752 * TARGET_EDOM: Library Calls. (line 53) 48753 * TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 68) 48754 * TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 19) 48755 * TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 24) 48756 * TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 45) 48757 * TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 36) 48758 * TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 63) 48759 * TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 49) 48760 * TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 57) 48761 * TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 41) 48762 * TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 31) 48763 * TARGET_ENCODE_SECTION_INFO: Sections. (line 253) 48764 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes. 48765 (line 83) 48766 * TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 128) 48767 * TARGET_ENUM_VA_LIST_P: Register Arguments. (line 278) 48768 * TARGET_EXCEPT_UNWIND_INFO: Exception Region Output. 48769 (line 48) 48770 * TARGET_EXECUTABLE_SUFFIX: Misc. (line 750) 48771 * TARGET_EXPAND_BUILTIN: Misc. (line 607) 48772 * TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 67) 48773 * TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 530) 48774 * TARGET_EXPR: Unary and Binary Expressions. 48775 (line 6) 48776 * TARGET_EXTRA_INCLUDES: Misc. (line 837) 48777 * TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 21) 48778 * TARGET_EXTRA_PRE_INCLUDES: Misc. (line 844) 48779 * TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 48780 (line 106) 48781 * TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 527) 48782 * target_flags: Run-time Target. (line 52) 48783 * TARGET_FLAGS_REGNUM: Register Arguments. (line 394) 48784 * TARGET_FLT_EVAL_METHOD: Type Layout. (line 148) 48785 * TARGET_FN_ABI_VA_LIST: Register Arguments. (line 289) 48786 * TARGET_FOLD_BUILTIN: Misc. (line 628) 48787 * TARGET_FORCE_AT_COMP_DIR: SDB and DWARF. (line 61) 48788 * TARGET_FORMAT_TYPES: Misc. (line 864) 48789 * TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 9) 48790 * TARGET_FUNCTION_ARG: Register Arguments. (line 12) 48791 * TARGET_FUNCTION_ARG_ADVANCE: Register Arguments. (line 187) 48792 * TARGET_FUNCTION_ARG_BOUNDARY: Register Arguments. (line 241) 48793 * TARGET_FUNCTION_ARG_ROUND_BOUNDARY: Register Arguments. (line 247) 48794 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 95) 48795 * TARGET_FUNCTION_INCOMING_ARG: Register Arguments. (line 68) 48796 * TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 8) 48797 * TARGET_FUNCTION_VALUE: Scalar Return. (line 11) 48798 * TARGET_FUNCTION_VALUE_REGNO_P: Scalar Return. (line 97) 48799 * TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc. (line 654) 48800 * TARGET_GET_DRAP_RTX: Misc. (line 974) 48801 * TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc. (line 647) 48802 * TARGET_GET_PCH_VALIDITY: PCH Target. (line 7) 48803 * TARGET_GET_RAW_ARG_MODE: Aggregate Return. (line 83) 48804 * TARGET_GET_RAW_RESULT_MODE: Aggregate Return. (line 78) 48805 * TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 300) 48806 * TARGET_HANDLE_C_OPTION: Run-time Target. (line 75) 48807 * TARGET_HANDLE_OPTION: Run-time Target. (line 62) 48808 * TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 48809 (line 144) 48810 * TARGET_HAS_SINCOS: Library Calls. (line 79) 48811 * TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 811) 48812 * TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 48813 (line 64) 48814 * TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 141) 48815 * TARGET_HAVE_SRODATA_SECTION: Sections. (line 298) 48816 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 146) 48817 * TARGET_HAVE_TLS: Sections. (line 318) 48818 * TARGET_IN_SMALL_DATA_P: Sections. (line 294) 48819 * TARGET_INIT_BUILTINS: Misc. (line 580) 48820 * TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 48821 (line 115) 48822 * TARGET_INIT_LIBFUNCS: Library Calls. (line 16) 48823 * TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 82) 48824 * TARGET_INSTANTIATE_DECLS: Storage Layout. (line 538) 48825 * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 898) 48826 * TARGET_INVALID_BINARY_OP: Misc. (line 917) 48827 * TARGET_INVALID_CONVERSION: Misc. (line 904) 48828 * TARGET_INVALID_PARAMETER_TYPE: Misc. (line 923) 48829 * TARGET_INVALID_RETURN_TYPE: Misc. (line 930) 48830 * TARGET_INVALID_UNARY_OP: Misc. (line 910) 48831 * TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 661) 48832 * TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 50) 48833 * TARGET_LEGITIMATE_COMBINED_INSN: Misc. (line 673) 48834 * TARGET_LEGITIMATE_CONSTANT_P: Addressing Modes. (line 216) 48835 * TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 132) 48836 * TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 43) 48837 * TARGET_LIBCALL_VALUE: Scalar Return. (line 66) 48838 * TARGET_LIBFUNC_GNU_PREFIX: Library Calls. (line 25) 48839 * TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 461) 48840 * TARGET_LIBGCC_SDATA_SECTION: Sections. (line 132) 48841 * TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 467) 48842 * TARGET_LOOP_UNROLL_ADJUST: Misc. (line 818) 48843 * TARGET_LRA_P: Register Classes. (line 553) 48844 * TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 565) 48845 * TARGET_MANGLE_ASSEMBLER_NAME: Label Output. (line 325) 48846 * TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 243) 48847 * TARGET_MANGLE_TYPE: Storage Layout. (line 542) 48848 * TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 39) 48849 * TARGET_MD_ASM_CLOBBERS: Misc. (line 486) 48850 * TARGET_MEM_CONSTRAINT: Addressing Modes. (line 109) 48851 * TARGET_MEM_REF: Storage References. (line 6) 48852 * TARGET_MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 413) 48853 * TARGET_MEMMODEL_CHECK: Misc. (line 1014) 48854 * TARGET_MEMORY_MOVE_COST: Costs. (line 81) 48855 * TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 47) 48856 * TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 39) 48857 * TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 33) 48858 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 92) 48859 * TARGET_MODE_DEPENDENT_ADDRESS_P: Addressing Modes. (line 199) 48860 * TARGET_MODE_REP_EXTENDED: Misc. (line 177) 48861 * TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 497) 48862 * TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 61) 48863 * TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments. 48864 (line 51) 48865 * TARGET_N_FORMAT_TYPES: Misc. (line 869) 48866 * TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 404) 48867 * TARGET_OBJC_CONSTRUCT_STRING_OBJECT: Run-time Target. (line 90) 48868 * TARGET_OBJC_DECLARE_CLASS_DEFINITION: Run-time Target. (line 111) 48869 * TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target. 48870 (line 106) 48871 * TARGET_OBJECT_SUFFIX: Misc. (line 745) 48872 * TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 46) 48873 * TARGET_OPTF: Misc. (line 851) 48874 * TARGET_OPTION_DEFAULT_PARAMS: Run-time Target. (line 161) 48875 * TARGET_OPTION_FUNCTION_VERSIONS: Target Attributes. (line 151) 48876 * TARGET_OPTION_INIT_STRUCT: Run-time Target. (line 158) 48877 * TARGET_OPTION_OPTIMIZATION_TABLE: Run-time Target. (line 144) 48878 * TARGET_OPTION_OVERRIDE: Target Attributes. (line 137) 48879 * TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 131) 48880 * TARGET_OPTION_PRINT: Target Attributes. (line 125) 48881 * TARGET_OPTION_RESTORE: Target Attributes. (line 119) 48882 * TARGET_OPTION_SAVE: Target Attributes. (line 113) 48883 * TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 102) 48884 * TARGET_OS_CPP_BUILTINS: Run-time Target. (line 42) 48885 * TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 127) 48886 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 873) 48887 * TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 879) 48888 * TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 883) 48889 * TARGET_PASS_BY_REFERENCE: Register Arguments. (line 104) 48890 * TARGET_PCH_VALID_P: PCH Target. (line 13) 48891 * TARGET_POSIX_IO: Misc. (line 510) 48892 * TARGET_PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 289) 48893 * TARGET_PREFERRED_RELOAD_CLASS: Register Classes. (line 218) 48894 * TARGET_PREFERRED_RENAME_CLASS: Register Classes. (line 206) 48895 * TARGET_PREPARE_PCH_SAVE: PCH Target. (line 35) 48896 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 128) 48897 * TARGET_PROFILE_BEFORE_PROLOGUE: Sections. (line 302) 48898 * TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 118) 48899 * TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 11) 48900 * TARGET_PROMOTED_TYPE: Misc. (line 936) 48901 * TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 295) 48902 * TARGET_REF_MAY_ALIAS_ERRNO: Register Arguments. (line 311) 48903 * TARGET_REGISTER_MOVE_COST: Costs. (line 33) 48904 * TARGET_REGISTER_PRIORITY: Register Classes. (line 558) 48905 * TARGET_RELAXED_ORDERING: Misc. (line 888) 48906 * TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 617) 48907 * TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 17) 48908 * TARGET_RETURN_IN_MSB: Scalar Return. (line 117) 48909 * TARGET_RETURN_POPS_ARGS: Stack Arguments. (line 94) 48910 * TARGET_RTX_COSTS: Costs. (line 271) 48911 * TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 319) 48912 * TARGET_SCHED_ADJUST_COST: Scheduling. (line 37) 48913 * TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 52) 48914 * TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 274) 48915 * TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 289) 48916 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 89) 48917 * TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 235) 48918 * TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 160) 48919 * TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 144) 48920 * TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 153) 48921 * TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 132) 48922 * TARGET_SCHED_DISPATCH: Scheduling. (line 355) 48923 * TARGET_SCHED_DISPATCH_DO: Scheduling. (line 360) 48924 * TARGET_SCHED_EXPOSED_PIPELINE: Scheduling. (line 364) 48925 * TARGET_SCHED_FINISH: Scheduling. (line 109) 48926 * TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 126) 48927 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling. (line 215) 48928 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling. (line 204) 48929 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 48930 (line 168) 48931 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 48932 (line 196) 48933 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling. 48934 (line 328) 48935 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling. (line 220) 48936 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling. (line 230) 48937 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling. (line 225) 48938 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling. (line 210) 48939 * TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 293) 48940 * TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 315) 48941 * TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 269) 48942 * TARGET_SCHED_INIT: Scheduling. (line 99) 48943 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 149) 48944 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 141) 48945 * TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 118) 48946 * TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 279) 48947 * TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 246) 48948 * TARGET_SCHED_ISSUE_RATE: Scheduling. (line 12) 48949 * TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 308) 48950 * TARGET_SCHED_REASSOCIATION_WIDTH: Scheduling. (line 370) 48951 * TARGET_SCHED_REORDER: Scheduling. (line 60) 48952 * TARGET_SCHED_REORDER2: Scheduling. (line 77) 48953 * TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 285) 48954 * TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 340) 48955 * TARGET_SCHED_SMS_RES_MII: Scheduling. (line 346) 48956 * TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 297) 48957 * TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 24) 48958 * TARGET_SECONDARY_RELOAD: Register Classes. (line 318) 48959 * TARGET_SECTION_TYPE_FLAGS: File Framework. (line 152) 48960 * TARGET_SET_CURRENT_FUNCTION: Misc. (line 727) 48961 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 34) 48962 * TARGET_SET_UP_BY_PROLOGUE: Tail Calls. (line 31) 48963 * TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 76) 48964 * TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 140) 48965 * TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments. 48966 (line 361) 48967 * TARGET_SPILL_CLASS: Register Classes. (line 578) 48968 * TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 261) 48969 * TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 48970 (line 17) 48971 * TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 48972 (line 7) 48973 * TARGET_STATIC_CHAIN: Frame Registers. (line 92) 48974 * TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 112) 48975 * TARGET_STRING_OBJECT_REF_TYPE_P: Run-time Target. (line 116) 48976 * TARGET_STRIP_NAME_ENCODING: Sections. (line 290) 48977 * TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 45) 48978 * TARGET_SUPPORTS_SPLIT_STACK: Stack Smashing Protection. 48979 (line 27) 48980 * TARGET_SUPPORTS_WEAK: Label Output. (line 241) 48981 * TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 48982 (line 100) 48983 * TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 75) 48984 * TARGET_TRAMPOLINE_INIT: Trampolines. (line 56) 48985 * TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 719) 48986 * TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 48987 (line 74) 48988 * TARGET_UNWIND_WORD_MODE: Storage Layout. (line 473) 48989 * TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 970) 48990 * TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 55) 48991 * TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 251) 48992 * TARGET_USE_BLOCKS_FOR_DECL_P: Addressing Modes. (line 257) 48993 * TARGET_USE_JCR_SECTION: Misc. (line 952) 48994 * TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 126) 48995 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 68) 48996 * TARGET_VALID_POINTER_MODE: Register Arguments. (line 306) 48997 * TARGET_VECTOR_ALIGNMENT: Storage Layout. (line 264) 48998 * TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 331) 48999 * TARGET_VECTORIZE_ADD_STMT_COST: Addressing Modes. (line 373) 49000 * TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes. 49001 (line 353) 49002 * TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 315) 49003 * TARGET_VECTORIZE_BUILTIN_GATHER: Addressing Modes. (line 404) 49004 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 273) 49005 * TARGET_VECTORIZE_BUILTIN_TM_LOAD: Addressing Modes. (line 395) 49006 * TARGET_VECTORIZE_BUILTIN_TM_STORE: Addressing Modes. (line 399) 49007 * TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 49008 (line 300) 49009 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 49010 (line 327) 49011 * TARGET_VECTORIZE_DESTROY_COST_DATA: Addressing Modes. (line 390) 49012 * TARGET_VECTORIZE_FINISH_COST: Addressing Modes. (line 384) 49013 * TARGET_VECTORIZE_INIT_COST: Addressing Modes. (line 361) 49014 * TARGET_VECTORIZE_PREFERRED_SIMD_MODE: Addressing Modes. (line 346) 49015 * TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. 49016 (line 337) 49017 * TARGET_VECTORIZE_VEC_PERM_CONST_OK: Addressing Modes. (line 311) 49018 * TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 49019 (line 306) 49020 * TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 348) 49021 * TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 342) 49022 * TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 331) 49023 * TARGET_WANT_DEBUG_PUB_SECTIONS: SDB and DWARF. (line 56) 49024 * TARGET_WARN_FUNC_RETURN: Tail Calls. (line 36) 49025 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 277) 49026 * targetm: Target Structure. (line 7) 49027 * targets, makefile: Makefile. (line 6) 49028 * TCmode: Machine Modes. (line 197) 49029 * TDmode: Machine Modes. (line 94) 49030 * TEMPLATE_DECL: Declarations. (line 6) 49031 * Temporaries: Temporaries. (line 6) 49032 * termination routines: Initialization. (line 6) 49033 * testing constraints: C Constraint Interface. 49034 (line 6) 49035 * TEXT_SECTION_ASM_OP: Sections. (line 38) 49036 * TF_SIZE: Type Layout. (line 139) 49037 * TFmode: Machine Modes. (line 98) 49038 * THEN_CLAUSE: Statements for C++. (line 6) 49039 * THREAD_MODEL_SPEC: Driver. (line 163) 49040 * THROW_EXPR: Unary and Binary Expressions. 49041 (line 6) 49042 * THUNK_DECL: Declarations. (line 6) 49043 * THUNK_DELTA: Declarations. (line 6) 49044 * TImode: Machine Modes. (line 48) 49045 * TImode, in insn: Insns. (line 278) 49046 * TLS_COMMON_ASM_OP: Sections. (line 81) 49047 * TLS_SECTION_ASM_FLAG: Sections. (line 86) 49048 * tm.h macros: Target Macros. (line 6) 49049 * TQFmode: Machine Modes. (line 62) 49050 * TQmode: Machine Modes. (line 119) 49051 * TRAMPOLINE_ALIGNMENT: Trampolines. (line 49) 49052 * TRAMPOLINE_SECTION: Trampolines. (line 40) 49053 * TRAMPOLINE_SIZE: Trampolines. (line 45) 49054 * trampolines for nested functions: Trampolines. (line 6) 49055 * TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 111) 49056 * trap instruction pattern: Standard Names. (line 1542) 49057 * tree <1>: Macros and Functions. 49058 (line 6) 49059 * tree: Tree overview. (line 6) 49060 * Tree SSA: Tree SSA. (line 6) 49061 * TREE_CHAIN: Macros and Functions. 49062 (line 6) 49063 * TREE_CODE: Tree overview. (line 6) 49064 * tree_int_cst_equal: Constant expressions. 49065 (line 6) 49066 * TREE_INT_CST_HIGH: Constant expressions. 49067 (line 6) 49068 * TREE_INT_CST_LOW: Constant expressions. 49069 (line 6) 49070 * tree_int_cst_lt: Constant expressions. 49071 (line 6) 49072 * TREE_LIST: Containers. (line 6) 49073 * TREE_OPERAND: Expression trees. (line 6) 49074 * TREE_PUBLIC <1>: Function Properties. 49075 (line 28) 49076 * TREE_PUBLIC: Function Basics. (line 6) 49077 * TREE_PURPOSE: Containers. (line 6) 49078 * TREE_READONLY: Function Properties. 49079 (line 37) 49080 * tree_size: Macros and Functions. 49081 (line 13) 49082 * TREE_STATIC: Function Properties. 49083 (line 31) 49084 * TREE_STRING_LENGTH: Constant expressions. 49085 (line 6) 49086 * TREE_STRING_POINTER: Constant expressions. 49087 (line 6) 49088 * TREE_THIS_VOLATILE: Function Properties. 49089 (line 34) 49090 * TREE_TYPE <1>: Types for C++. (line 6) 49091 * TREE_TYPE <2>: Function Basics. (line 47) 49092 * TREE_TYPE <3>: Expression trees. (line 6) 49093 * TREE_TYPE <4>: Working with declarations. 49094 (line 11) 49095 * TREE_TYPE <5>: Types. (line 6) 49096 * TREE_TYPE: Macros and Functions. 49097 (line 6) 49098 * TREE_VALUE: Containers. (line 6) 49099 * TREE_VEC: Containers. (line 6) 49100 * TREE_VEC_ELT: Containers. (line 6) 49101 * TREE_VEC_LENGTH: Containers. (line 6) 49102 * TRULY_NOOP_TRUNCATION: Misc. (line 163) 49103 * TRUNC_DIV_EXPR: Unary and Binary Expressions. 49104 (line 6) 49105 * TRUNC_MOD_EXPR: Unary and Binary Expressions. 49106 (line 6) 49107 * truncate: Conversions. (line 38) 49108 * truncMN2 instruction pattern: Standard Names. (line 903) 49109 * TRUTH_AND_EXPR: Unary and Binary Expressions. 49110 (line 6) 49111 * TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 49112 (line 6) 49113 * TRUTH_NOT_EXPR: Unary and Binary Expressions. 49114 (line 6) 49115 * TRUTH_OR_EXPR: Unary and Binary Expressions. 49116 (line 6) 49117 * TRUTH_ORIF_EXPR: Unary and Binary Expressions. 49118 (line 6) 49119 * TRUTH_XOR_EXPR: Unary and Binary Expressions. 49120 (line 6) 49121 * TRY_BLOCK: Statements for C++. (line 6) 49122 * TRY_HANDLERS: Statements for C++. (line 6) 49123 * TRY_STMTS: Statements for C++. (line 6) 49124 * Tuple specific accessors: Tuple specific accessors. 49125 (line 6) 49126 * tuples: Tuple representation. 49127 (line 6) 49128 * type: Types. (line 6) 49129 * type declaration: Declarations. (line 6) 49130 * TYPE_ALIGN <1>: Types for C++. (line 6) 49131 * TYPE_ALIGN: Types. (line 6) 49132 * TYPE_ARG_TYPES <1>: Types for C++. (line 6) 49133 * TYPE_ARG_TYPES: Types. (line 6) 49134 * TYPE_ASM_OP: Label Output. (line 79) 49135 * TYPE_ATTRIBUTES: Attributes. (line 25) 49136 * TYPE_BINFO: Classes. (line 6) 49137 * TYPE_BUILT_IN: Types for C++. (line 68) 49138 * TYPE_CANONICAL: Types. (line 6) 49139 * TYPE_CONTEXT <1>: Types for C++. (line 6) 49140 * TYPE_CONTEXT: Types. (line 6) 49141 * TYPE_DECL: Declarations. (line 6) 49142 * TYPE_FIELDS <1>: Classes. (line 6) 49143 * TYPE_FIELDS <2>: Types for C++. (line 6) 49144 * TYPE_FIELDS: Types. (line 6) 49145 * TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96) 49146 * TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81) 49147 * TYPE_HAS_MUTABLE_P: Classes. (line 86) 49148 * TYPE_HAS_NEW_OPERATOR: Classes. (line 93) 49149 * TYPE_MAIN_VARIANT <1>: Types for C++. (line 6) 49150 * TYPE_MAIN_VARIANT: Types. (line 6) 49151 * TYPE_MAX_VALUE: Types. (line 6) 49152 * TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 49153 * TYPE_METHOD_BASETYPE: Types. (line 6) 49154 * TYPE_METHODS: Classes. (line 6) 49155 * TYPE_MIN_VALUE: Types. (line 6) 49156 * TYPE_NAME <1>: Types for C++. (line 6) 49157 * TYPE_NAME: Types. (line 6) 49158 * TYPE_NOTHROW_P: Functions for C++. (line 154) 49159 * TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 49160 * TYPE_OFFSET_BASETYPE: Types. (line 6) 49161 * TYPE_OPERAND_FMT: Label Output. (line 90) 49162 * TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104) 49163 * TYPE_OVERLOADS_ARROW: Classes. (line 107) 49164 * TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100) 49165 * TYPE_POLYMORPHIC_P: Classes. (line 77) 49166 * TYPE_PRECISION <1>: Types for C++. (line 6) 49167 * TYPE_PRECISION: Types. (line 6) 49168 * TYPE_PTR_P: Types for C++. (line 74) 49169 * TYPE_PTRDATAMEM_P: Types for C++. (line 6) 49170 * TYPE_PTRFN_P: Types for C++. (line 78) 49171 * TYPE_PTROB_P: Types for C++. (line 81) 49172 * TYPE_PTROBV_P: Types for C++. (line 6) 49173 * TYPE_QUAL_CONST <1>: Types for C++. (line 6) 49174 * TYPE_QUAL_CONST: Types. (line 6) 49175 * TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 49176 * TYPE_QUAL_RESTRICT: Types. (line 6) 49177 * TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 49178 * TYPE_QUAL_VOLATILE: Types. (line 6) 49179 * TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 49180 * TYPE_SIZE <1>: Types for C++. (line 6) 49181 * TYPE_SIZE: Types. (line 6) 49182 * TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 49183 * TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 49184 * TYPE_UNQUALIFIED: Types. (line 6) 49185 * TYPE_VFIELD: Classes. (line 6) 49186 * TYPENAME_TYPE: Types for C++. (line 6) 49187 * TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 49188 * TYPENAME_TYPE_FULLNAME: Types. (line 6) 49189 * TYPEOF_TYPE: Types for C++. (line 6) 49190 * UDAmode: Machine Modes. (line 168) 49191 * udiv: Arithmetic. (line 130) 49192 * udivM3 instruction pattern: Standard Names. (line 269) 49193 * udivmodM4 instruction pattern: Standard Names. (line 507) 49194 * udot_prodM instruction pattern: Standard Names. (line 335) 49195 * UDQmode: Machine Modes. (line 136) 49196 * UHAmode: Machine Modes. (line 160) 49197 * UHQmode: Machine Modes. (line 128) 49198 * UINT16_TYPE: Type Layout. (line 258) 49199 * UINT32_TYPE: Type Layout. (line 259) 49200 * UINT64_TYPE: Type Layout. (line 260) 49201 * UINT8_TYPE: Type Layout. (line 257) 49202 * UINT_FAST16_TYPE: Type Layout. (line 274) 49203 * UINT_FAST32_TYPE: Type Layout. (line 275) 49204 * UINT_FAST64_TYPE: Type Layout. (line 276) 49205 * UINT_FAST8_TYPE: Type Layout. (line 273) 49206 * UINT_LEAST16_TYPE: Type Layout. (line 266) 49207 * UINT_LEAST32_TYPE: Type Layout. (line 267) 49208 * UINT_LEAST64_TYPE: Type Layout. (line 268) 49209 * UINT_LEAST8_TYPE: Type Layout. (line 265) 49210 * UINTMAX_TYPE: Type Layout. (line 241) 49211 * UINTPTR_TYPE: Type Layout. (line 278) 49212 * umaddMN4 instruction pattern: Standard Names. (line 454) 49213 * umax: Arithmetic. (line 149) 49214 * umaxM3 instruction pattern: Standard Names. (line 269) 49215 * umin: Arithmetic. (line 149) 49216 * uminM3 instruction pattern: Standard Names. (line 269) 49217 * umod: Arithmetic. (line 136) 49218 * umodM3 instruction pattern: Standard Names. (line 269) 49219 * umsubMN4 instruction pattern: Standard Names. (line 478) 49220 * umulhisi3 instruction pattern: Standard Names. (line 426) 49221 * umulM3_highpart instruction pattern: Standard Names. (line 440) 49222 * umulqihi3 instruction pattern: Standard Names. (line 426) 49223 * umulsidi3 instruction pattern: Standard Names. (line 426) 49224 * unchanging: Flags. (line 296) 49225 * unchanging, in call_insn: Flags. (line 19) 49226 * unchanging, in jump_insn, call_insn and insn: Flags. (line 39) 49227 * unchanging, in mem: Flags. (line 134) 49228 * unchanging, in subreg: Flags. (line 170) 49229 * unchanging, in symbol_ref: Flags. (line 10) 49230 * UNEQ_EXPR: Unary and Binary Expressions. 49231 (line 6) 49232 * UNGE_EXPR: Unary and Binary Expressions. 49233 (line 6) 49234 * UNGT_EXPR: Unary and Binary Expressions. 49235 (line 6) 49236 * UNION_TYPE <1>: Classes. (line 6) 49237 * UNION_TYPE: Types. (line 6) 49238 * unions, returning: Interface. (line 10) 49239 * UNITS_PER_WORD: Storage Layout. (line 66) 49240 * UNKNOWN_TYPE <1>: Types for C++. (line 6) 49241 * UNKNOWN_TYPE: Types. (line 6) 49242 * UNLE_EXPR: Unary and Binary Expressions. 49243 (line 6) 49244 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 49) 49245 * UNLT_EXPR: Unary and Binary Expressions. 49246 (line 6) 49247 * UNORDERED_EXPR: Unary and Binary Expressions. 49248 (line 6) 49249 * unshare_all_rtl: Sharing. (line 58) 49250 * unsigned division: Arithmetic. (line 130) 49251 * unsigned division with unsigned saturation: Arithmetic. (line 130) 49252 * unsigned greater than: Comparisons. (line 64) 49253 * unsigned less than: Comparisons. (line 68) 49254 * unsigned minimum and maximum: Arithmetic. (line 149) 49255 * unsigned_fix: Conversions. (line 77) 49256 * unsigned_float: Conversions. (line 62) 49257 * unsigned_fract_convert: Conversions. (line 97) 49258 * unsigned_sat_fract: Conversions. (line 103) 49259 * unspec <1>: Constant Definitions. 49260 (line 111) 49261 * unspec: Side Effects. (line 293) 49262 * unspec_volatile <1>: Constant Definitions. 49263 (line 99) 49264 * unspec_volatile: Side Effects. (line 293) 49265 * untyped_call instruction pattern: Standard Names. (line 1145) 49266 * untyped_return instruction pattern: Standard Names. (line 1209) 49267 * UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 49268 * update_ssa: SSA. (line 76) 49269 * update_stmt <1>: SSA Operands. (line 6) 49270 * update_stmt: Manipulating GIMPLE statements. 49271 (line 141) 49272 * update_stmt_if_modified: Manipulating GIMPLE statements. 49273 (line 144) 49274 * UQQmode: Machine Modes. (line 123) 49275 * us_ashift: Arithmetic. (line 173) 49276 * us_minus: Arithmetic. (line 36) 49277 * us_mult: Arithmetic. (line 92) 49278 * us_neg: Arithmetic. (line 81) 49279 * us_plus: Arithmetic. (line 14) 49280 * us_truncate: Conversions. (line 48) 49281 * usaddM3 instruction pattern: Standard Names. (line 269) 49282 * USAmode: Machine Modes. (line 164) 49283 * usashlM3 instruction pattern: Standard Names. (line 510) 49284 * usdivM3 instruction pattern: Standard Names. (line 269) 49285 * use: Side Effects. (line 168) 49286 * USE_C_ALLOCA: Host Misc. (line 19) 49287 * USE_LD_AS_NEEDED: Driver. (line 136) 49288 * USE_LOAD_POST_DECREMENT: Costs. (line 226) 49289 * USE_LOAD_POST_INCREMENT: Costs. (line 221) 49290 * USE_LOAD_PRE_DECREMENT: Costs. (line 236) 49291 * USE_LOAD_PRE_INCREMENT: Costs. (line 231) 49292 * use_param: GTY Options. (line 114) 49293 * use_paramN: GTY Options. (line 132) 49294 * use_params: GTY Options. (line 140) 49295 * USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 194) 49296 * USE_STORE_POST_DECREMENT: Costs. (line 246) 49297 * USE_STORE_POST_INCREMENT: Costs. (line 241) 49298 * USE_STORE_PRE_DECREMENT: Costs. (line 256) 49299 * USE_STORE_PRE_INCREMENT: Costs. (line 251) 49300 * used: Flags. (line 314) 49301 * used, in symbol_ref: Flags. (line 197) 49302 * user: GTY Options. (line 301) 49303 * user gc: User GC. (line 6) 49304 * USER_LABEL_PREFIX: Instruction Output. (line 154) 49305 * USING_STMT: Statements for C++. (line 6) 49306 * usmaddMN4 instruction pattern: Standard Names. (line 462) 49307 * usmsubMN4 instruction pattern: Standard Names. (line 486) 49308 * usmulhisi3 instruction pattern: Standard Names. (line 430) 49309 * usmulM3 instruction pattern: Standard Names. (line 269) 49310 * usmulqihi3 instruction pattern: Standard Names. (line 430) 49311 * usmulsidi3 instruction pattern: Standard Names. (line 430) 49312 * usnegM2 instruction pattern: Standard Names. (line 532) 49313 * USQmode: Machine Modes. (line 132) 49314 * ussubM3 instruction pattern: Standard Names. (line 269) 49315 * usum_widenM3 instruction pattern: Standard Names. (line 345) 49316 * UTAmode: Machine Modes. (line 172) 49317 * UTQmode: Machine Modes. (line 140) 49318 * V in constraint: Simple Constraints. (line 43) 49319 * VA_ARG_EXPR: Unary and Binary Expressions. 49320 (line 6) 49321 * values, returned by functions: Scalar Return. (line 6) 49322 * VAR_DECL: Declarations. (line 6) 49323 * var_location: Debug Information. (line 14) 49324 * varargs implementation: Varargs. (line 6) 49325 * variable: Declarations. (line 6) 49326 * Variable Location Debug Information in RTL: Debug Information. 49327 (line 6) 49328 * variable_size: GTY Options. (line 230) 49329 * vashlM3 instruction pattern: Standard Names. (line 524) 49330 * vashrM3 instruction pattern: Standard Names. (line 524) 49331 * vcondMN instruction pattern: Standard Names. (line 214) 49332 * vec_concat: Vector Operations. (line 28) 49333 * vec_duplicate: Vector Operations. (line 33) 49334 * vec_extractM instruction pattern: Standard Names. (line 204) 49335 * vec_initM instruction pattern: Standard Names. (line 209) 49336 * vec_load_lanesMN instruction pattern: Standard Names. (line 166) 49337 * VEC_LSHIFT_EXPR: Vectors. (line 6) 49338 * vec_merge: Vector Operations. (line 11) 49339 * VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 49340 * VEC_PACK_SAT_EXPR: Vectors. (line 6) 49341 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 372) 49342 * vec_pack_ssat_M instruction pattern: Standard Names. (line 365) 49343 * VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 49344 * vec_pack_trunc_M instruction pattern: Standard Names. (line 358) 49345 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 372) 49346 * vec_pack_usat_M instruction pattern: Standard Names. (line 365) 49347 * vec_perm_constM instruction pattern: Standard Names. (line 242) 49348 * vec_permM instruction pattern: Standard Names. (line 224) 49349 * VEC_RSHIFT_EXPR: Vectors. (line 6) 49350 * vec_select: Vector Operations. (line 19) 49351 * vec_setM instruction pattern: Standard Names. (line 199) 49352 * vec_shl_M instruction pattern: Standard Names. (line 352) 49353 * vec_shr_M instruction pattern: Standard Names. (line 352) 49354 * vec_store_lanesMN instruction pattern: Standard Names. (line 188) 49355 * VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 49356 * VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 49357 * VEC_UNPACK_HI_EXPR: Vectors. (line 6) 49358 * VEC_UNPACK_LO_EXPR: Vectors. (line 6) 49359 * vec_unpacks_float_hi_M instruction pattern: Standard Names. 49360 (line 394) 49361 * vec_unpacks_float_lo_M instruction pattern: Standard Names. 49362 (line 394) 49363 * vec_unpacks_hi_M instruction pattern: Standard Names. (line 379) 49364 * vec_unpacks_lo_M instruction pattern: Standard Names. (line 379) 49365 * vec_unpacku_float_hi_M instruction pattern: Standard Names. 49366 (line 394) 49367 * vec_unpacku_float_lo_M instruction pattern: Standard Names. 49368 (line 394) 49369 * vec_unpacku_hi_M instruction pattern: Standard Names. (line 387) 49370 * vec_unpacku_lo_M instruction pattern: Standard Names. (line 387) 49371 * VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 49372 * VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 49373 * vec_widen_smult_even_M instruction pattern: Standard Names. 49374 (line 403) 49375 * vec_widen_smult_hi_M instruction pattern: Standard Names. (line 403) 49376 * vec_widen_smult_lo_M instruction pattern: Standard Names. (line 403) 49377 * vec_widen_smult_odd_M instruction pattern: Standard Names. (line 403) 49378 * vec_widen_sshiftl_hi_M instruction pattern: Standard Names. 49379 (line 412) 49380 * vec_widen_sshiftl_lo_M instruction pattern: Standard Names. 49381 (line 412) 49382 * vec_widen_umult_even_M instruction pattern: Standard Names. 49383 (line 403) 49384 * vec_widen_umult_hi_M instruction pattern: Standard Names. (line 403) 49385 * vec_widen_umult_lo_M instruction pattern: Standard Names. (line 403) 49386 * vec_widen_umult_odd_M instruction pattern: Standard Names. (line 403) 49387 * vec_widen_ushiftl_hi_M instruction pattern: Standard Names. 49388 (line 412) 49389 * vec_widen_ushiftl_lo_M instruction pattern: Standard Names. 49390 (line 412) 49391 * vector: Containers. (line 6) 49392 * vector operations: Vector Operations. (line 6) 49393 * VECTOR_CST: Constant expressions. 49394 (line 6) 49395 * VECTOR_STORE_FLAG_VALUE: Misc. (line 294) 49396 * verify_flow_info: Maintaining the CFG. 49397 (line 119) 49398 * virtual operands: SSA Operands. (line 6) 49399 * VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 49400 * VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 49401 * VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 49402 * VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 49403 * VLIW: Processor pipeline description. 49404 (line 6) 49405 * vlshrM3 instruction pattern: Standard Names. (line 524) 49406 * VMS: Filesystem. (line 37) 49407 * VMS_DEBUGGING_INFO: VMS Debug. (line 9) 49408 * VOID_TYPE: Types. (line 6) 49409 * VOIDmode: Machine Modes. (line 190) 49410 * volatil: Flags. (line 328) 49411 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags. 49412 (line 44) 49413 * volatil, in label_ref and reg_label: Flags. (line 65) 49414 * volatil, in mem, asm_operands, and asm_input: Flags. (line 76) 49415 * volatil, in reg: Flags. (line 98) 49416 * volatil, in subreg: Flags. (line 170) 49417 * volatil, in symbol_ref: Flags. (line 206) 49418 * volatile memory references: Flags. (line 329) 49419 * volatile, in prefetch: Flags. (line 214) 49420 * voting between constraint alternatives: Class Preferences. (line 6) 49421 * vrotlM3 instruction pattern: Standard Names. (line 524) 49422 * vrotrM3 instruction pattern: Standard Names. (line 524) 49423 * walk_dominator_tree: SSA. (line 254) 49424 * walk_gimple_op: Statement and operand traversals. 49425 (line 32) 49426 * walk_gimple_seq: Statement and operand traversals. 49427 (line 50) 49428 * walk_gimple_stmt: Statement and operand traversals. 49429 (line 13) 49430 * walk_use_def_chains: SSA. (line 230) 49431 * WCHAR_TYPE: Type Layout. (line 209) 49432 * WCHAR_TYPE_SIZE: Type Layout. (line 217) 49433 * which_alternative: Output Statement. (line 59) 49434 * WHILE_BODY: Statements for C++. (line 6) 49435 * WHILE_COND: Statements for C++. (line 6) 49436 * WHILE_STMT: Statements for C++. (line 6) 49437 * whopr: LTO. (line 6) 49438 * WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 154) 49439 * window_save instruction pattern: Standard Names. (line 1513) 49440 * WINT_TYPE: Type Layout. (line 222) 49441 * word_mode: Machine Modes. (line 336) 49442 * WORD_REGISTER_OPERATIONS: Misc. (line 54) 49443 * WORDS_BIG_ENDIAN: Storage Layout. (line 29) 49444 * WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 217) 49445 * wpa: LTO. (line 6) 49446 * X in constraint: Simple Constraints. (line 124) 49447 * x-HOST: Host Fragment. (line 6) 49448 * XCmode: Machine Modes. (line 197) 49449 * XCOFF_DEBUGGING_INFO: DBX Options. (line 13) 49450 * XEXP: Accessors. (line 6) 49451 * XF_SIZE: Type Layout. (line 138) 49452 * XFmode: Machine Modes. (line 79) 49453 * XINT: Accessors. (line 6) 49454 * xm-MACHINE.h <1>: Host Misc. (line 6) 49455 * xm-MACHINE.h: Filesystem. (line 6) 49456 * xor: Arithmetic. (line 168) 49457 * xor, canonicalization of: Insn Canonicalizations. 49458 (line 79) 49459 * xorM3 instruction pattern: Standard Names. (line 269) 49460 * XSTR: Accessors. (line 6) 49461 * XVEC: Accessors. (line 41) 49462 * XVECEXP: Accessors. (line 48) 49463 * XVECLEN: Accessors. (line 44) 49464 * XWINT: Accessors. (line 6) 49465 * zero_extend: Conversions. (line 28) 49466 * zero_extendMN2 instruction pattern: Standard Names. (line 913) 49467 * zero_extract: Bit-Fields. (line 30) 49468 * zero_extract, canonicalization of: Insn Canonicalizations. 49469 (line 88) 49470 49471 49472 49473 Tag Table: 49474 Node: Top1854 49475 Node: Contributing4942 49476 Node: Portability5683 49477 Node: Interface7471 49478 Node: Libgcc10511 49479 Node: Integer library routines12352 49480 Node: Soft float library routines19194 49481 Node: Decimal float library routines31131 49482 Node: Fixed-point fractional library routines46888 49483 Node: Exception handling routines147286 49484 Node: Miscellaneous routines148393 49485 Node: Languages150513 49486 Node: Source Tree152062 49487 Node: Configure Terms152644 49488 Node: Top Level155602 49489 Node: gcc Directory159176 49490 Node: Subdirectories160126 49491 Node: Configuration162293 49492 Node: Config Fragments163013 49493 Node: System Config164242 49494 Node: Configuration Files165178 49495 Node: Build168003 49496 Node: Makefile168415 49497 Ref: Makefile-Footnote-1175218 49498 Ref: Makefile-Footnote-2175363 49499 Node: Library Files175435 49500 Node: Headers175997 49501 Node: Documentation178080 49502 Node: Texinfo Manuals178939 49503 Node: Man Page Generation181272 49504 Node: Miscellaneous Docs183187 49505 Node: Front End184581 49506 Node: Front End Directory188274 49507 Node: Front End Config189594 49508 Node: Front End Makefile192420 49509 Node: Back End196202 49510 Node: Testsuites199999 49511 Node: Test Idioms200930 49512 Node: Test Directives204327 49513 Node: Directives204854 49514 Node: Selectors215164 49515 Node: Effective-Target Keywords216522 49516 Ref: arm_neon_ok224081 49517 Ref: arm_neonv2_ok224239 49518 Ref: arm_neon_fp16_ok224411 49519 Node: Add Options234782 49520 Node: Require Support235979 49521 Node: Final Actions238486 49522 Node: Ada Tests243653 49523 Node: C Tests244985 49524 Node: libgcj Tests249408 49525 Node: LTO Testing250535 49526 Node: gcov Testing252182 49527 Node: profopt Testing255169 49528 Node: compat Testing256884 49529 Node: Torture Tests261124 49530 Node: Options262741 49531 Node: Option file format263181 49532 Node: Option properties270171 49533 Node: Passes283050 49534 Node: Parsing pass283794 49535 Node: Gimplification pass287324 49536 Node: Pass manager289157 49537 Node: Tree SSA passes290951 49538 Node: RTL passes313423 49539 Node: RTL326554 49540 Node: RTL Objects328742 49541 Node: RTL Classes332616 49542 Node: Accessors337614 49543 Node: Special Accessors340008 49544 Node: Flags345778 49545 Node: Machine Modes360502 49546 Node: Constants372814 49547 Node: Regs and Memory379544 49548 Node: Arithmetic397445 49549 Node: Comparisons407535 49550 Node: Bit-Fields411827 49551 Node: Vector Operations413379 49552 Node: Conversions415261 49553 Node: RTL Declarations419759 49554 Node: Side Effects420580 49555 Node: Incdec437180 49556 Node: Assembler440515 49557 Node: Debug Information442060 49558 Node: Insns443258 49559 Node: Calls469752 49560 Node: Sharing472345 49561 Node: Reading RTL475455 49562 Node: GENERIC476447 49563 Node: Deficiencies478320 49564 Node: Tree overview478561 49565 Node: Macros and Functions482688 49566 Node: Identifiers483513 49567 Node: Containers485124 49568 Node: Types486281 49569 Node: Declarations498377 49570 Node: Working with declarations498872 49571 Node: Internal structure504478 49572 Node: Current structure hierarchy504862 49573 Node: Adding new DECL node types506956 49574 Node: Attributes511029 49575 Node: Expression trees512274 49576 Node: Constant expressions514027 49577 Node: Storage References518246 49578 Node: Unary and Binary Expressions521765 49579 Node: Vectors541627 49580 Node: Statements546354 49581 Node: Basic Statements546874 49582 Node: Blocks551381 49583 Node: Statement Sequences552785 49584 Node: Empty Statements553118 49585 Node: Jumps553692 49586 Node: Cleanups554345 49587 Node: OpenMP556113 49588 Node: Functions561953 49589 Node: Function Basics562424 49590 Node: Function Properties566109 49591 Node: Language-dependent trees568891 49592 Node: C and C++ Trees569777 49593 Node: Types for C++572681 49594 Node: Namespaces577659 49595 Node: Classes580766 49596 Node: Functions for C++585844 49597 Node: Statements for C++592097 49598 Node: C++ Expressions600145 49599 Node: Java Trees601646 49600 Node: GIMPLE601759 49601 Node: Tuple representation605380 49602 Node: GIMPLE instruction set613656 49603 Node: GIMPLE Exception Handling615324 49604 Node: Temporaries617238 49605 Ref: Temporaries-Footnote-1618553 49606 Node: Operands618616 49607 Node: Compound Expressions619378 49608 Node: Compound Lvalues619612 49609 Node: Conditional Expressions620374 49610 Node: Logical Operators621032 49611 Node: Manipulating GIMPLE statements627789 49612 Node: Tuple specific accessors633723 49613 Node: `GIMPLE_ASM'634542 49614 Node: `GIMPLE_ASSIGN'637175 49615 Node: `GIMPLE_BIND'641281 49616 Node: `GIMPLE_CALL'643088 49617 Node: `GIMPLE_CATCH'647358 49618 Node: `GIMPLE_COND'648502 49619 Node: `GIMPLE_DEBUG'651290 49620 Node: `GIMPLE_EH_FILTER'654673 49621 Node: `GIMPLE_LABEL'656161 49622 Node: `GIMPLE_NOP'657136 49623 Node: `GIMPLE_OMP_ATOMIC_LOAD'657505 49624 Node: `GIMPLE_OMP_ATOMIC_STORE'658415 49625 Node: `GIMPLE_OMP_CONTINUE'659054 49626 Node: `GIMPLE_OMP_CRITICAL'660404 49627 Node: `GIMPLE_OMP_FOR'661341 49628 Node: `GIMPLE_OMP_MASTER'664856 49629 Node: `GIMPLE_OMP_ORDERED'665239 49630 Node: `GIMPLE_OMP_PARALLEL'665639 49631 Node: `GIMPLE_OMP_RETURN'668411 49632 Node: `GIMPLE_OMP_SECTION'669061 49633 Node: `GIMPLE_OMP_SECTIONS'669727 49634 Node: `GIMPLE_OMP_SINGLE'671333 49635 Node: `GIMPLE_PHI'672270 49636 Node: `GIMPLE_RESX'673556 49637 Node: `GIMPLE_RETURN'674275 49638 Node: `GIMPLE_SWITCH'674843 49639 Node: `GIMPLE_TRY'676643 49640 Node: `GIMPLE_WITH_CLEANUP_EXPR'678433 49641 Node: GIMPLE sequences679316 49642 Node: Sequence iterators682522 49643 Node: Adding a new GIMPLE statement code690978 49644 Node: Statement and operand traversals692254 49645 Node: Tree SSA694854 49646 Node: Annotations696640 49647 Node: SSA Operands697166 49648 Node: SSA711697 49649 Node: Alias analysis723817 49650 Node: Memory model727597 49651 Node: Loop Analysis and Representation728960 49652 Node: Loop representation730141 49653 Node: Loop querying737061 49654 Node: Loop manipulation739894 49655 Node: LCSSA742262 49656 Node: Scalar evolutions744334 49657 Node: loop-iv747578 49658 Node: Number of iterations749504 49659 Node: Dependency analysis752313 49660 Node: Lambda758681 49661 Node: Omega760352 49662 Node: Control Flow761917 49663 Node: Basic Blocks763683 49664 Node: Edges768974 49665 Node: Profile information777606 49666 Node: Maintaining the CFG782290 49667 Node: Liveness information788152 49668 Node: Machine Desc790278 49669 Node: Overview792841 49670 Node: Patterns794882 49671 Node: Example798320 49672 Node: RTL Template799755 49673 Node: Output Template810410 49674 Node: Output Statement814375 49675 Node: Predicates818714 49676 Node: Machine-Independent Predicates821632 49677 Node: Defining Predicates826577 49678 Node: Constraints832542 49679 Node: Simple Constraints834024 49680 Node: Multi-Alternative846880 49681 Node: Class Preferences849721 49682 Node: Modifiers850613 49683 Node: Machine Constraints854859 49684 Node: Disable Insn Alternatives906168 49685 Node: Define Constraints909070 49686 Node: C Constraint Interface915857 49687 Node: Standard Names919498 49688 Ref: shift patterns942049 49689 Ref: prologue instruction pattern986989 49690 Ref: window_save instruction pattern987482 49691 Ref: epilogue instruction pattern987757 49692 Node: Pattern Ordering1005328 49693 Node: Dependent Patterns1006564 49694 Node: Jump Patterns1008184 49695 Ref: Jump Patterns-Footnote-11010328 49696 Node: Looping Patterns1010374 49697 Node: Insn Canonicalizations1015102 49698 Node: Expander Definitions1019693 49699 Node: Insn Splitting1027905 49700 Node: Including Patterns1037507 49701 Node: Peephole Definitions1039287 49702 Node: define_peephole1040540 49703 Node: define_peephole21046871 49704 Node: Insn Attributes1049938 49705 Node: Defining Attributes1051044 49706 Ref: define_enum_attr1054255 49707 Node: Expressions1055290 49708 Node: Tagging Insns1062039 49709 Node: Attr Example1066392 49710 Node: Insn Lengths1068766 49711 Node: Constant Attributes1071825 49712 Node: Delay Slots1072994 49713 Node: Processor pipeline description1076218 49714 Ref: Processor pipeline description-Footnote-11095031 49715 Node: Conditional Execution1095353 49716 Node: Define Subst1098415 49717 Node: Define Subst Example1100449 49718 Node: Define Subst Pattern Matching1103443 49719 Node: Define Subst Output Template1104668 49720 Node: Constant Definitions1106738 49721 Ref: define_enum1110520 49722 Node: Iterators1111008 49723 Node: Mode Iterators1111586 49724 Node: Defining Mode Iterators1112564 49725 Node: Substitutions1114058 49726 Node: Examples1116299 49727 Node: Code Iterators1117747 49728 Node: Int Iterators1120026 49729 Node: Subst Iterators1122484 49730 Node: Target Macros1124176 49731 Node: Target Structure1127264 49732 Node: Driver1129379 49733 Node: Run-time Target1148162 49734 Node: Per-Function Data1157315 49735 Node: Storage Layout1160080 49736 Node: Type Layout1186155 49737 Node: Registers1201482 49738 Node: Register Basics1202456 49739 Node: Allocation Order1207961 49740 Node: Values in Registers1210407 49741 Node: Leaf Functions1217896 49742 Node: Stack Registers1220754 49743 Node: Register Classes1222026 49744 Node: Old Constraints1252031 49745 Node: Stack and Calling1259183 49746 Node: Frame Layout1259717 49747 Node: Exception Handling1270597 49748 Node: Stack Checking1276819 49749 Node: Frame Registers1281632 49750 Node: Elimination1289891 49751 Node: Stack Arguments1294120 49752 Node: Register Arguments1300982 49753 Node: Scalar Return1321298 49754 Node: Aggregate Return1327384 49755 Node: Caller Saves1331594 49756 Node: Function Entry1332772 49757 Node: Profiling1343876 49758 Node: Tail Calls1345575 49759 Node: Stack Smashing Protection1347478 49760 Node: Varargs1349106 49761 Node: Trampolines1355802 49762 Node: Library Calls1361845 49763 Node: Addressing Modes1366784 49764 Node: Anchored Addresses1386818 49765 Node: Condition Code1389467 49766 Node: CC0 Condition Codes1391596 49767 Node: MODE_CC Condition Codes1394842 49768 Node: Cond Exec Macros1401363 49769 Node: Costs1401709 49770 Node: Scheduling1418178 49771 Node: Sections1437584 49772 Node: PIC1453282 49773 Node: Assembler Format1455342 49774 Node: File Framework1456480 49775 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1463421 49776 Node: Data Output1466686 49777 Node: Uninitialized Data1474462 49778 Node: Label Output1479473 49779 Node: Initialization1502441 49780 Node: Macros for Initialization1508403 49781 Node: Instruction Output1515126 49782 Node: Dispatch Tables1525628 49783 Node: Exception Region Output1530006 49784 Node: Alignment Output1536689 49785 Node: Debugging Info1541234 49786 Node: All Debuggers1541904 49787 Node: DBX Options1544759 49788 Node: DBX Hooks1550208 49789 Node: File Names and DBX1551517 49790 Node: SDB and DWARF1553629 49791 Node: VMS Debug1559701 49792 Node: Floating Point1560288 49793 Node: Mode Switching1564764 49794 Node: Target Attributes1568760 49795 Node: Emulated TLS1577074 49796 Node: MIPS Coprocessors1580464 49797 Node: PCH Target1581761 49798 Node: C++ ABI1583603 49799 Node: Named Address Spaces1588395 49800 Node: Misc1593334 49801 Ref: TARGET_SHIFT_TRUNCATION_MASK1600076 49802 Node: Host Config1645242 49803 Node: Host Common1646310 49804 Node: Filesystem1648689 49805 Node: Host Misc1652804 49806 Node: Fragments1655253 49807 Node: Target Fragment1656448 49808 Node: Host Fragment1667081 49809 Node: Collect21667321 49810 Node: Header Dirs1669957 49811 Node: Type Information1671380 49812 Node: GTY Options1674603 49813 Node: User GC1688924 49814 Node: GGC Roots1692651 49815 Node: Files1693367 49816 Node: Invoking the garbage collector1696074 49817 Node: Troubleshooting1697577 49818 Node: Plugins1698653 49819 Node: Plugins loading1699771 49820 Node: Plugin API1700640 49821 Node: Plugins pass1707669 49822 Node: Plugins GC1709638 49823 Node: Plugins description1711298 49824 Node: Plugins attr1711833 49825 Node: Plugins recording1713718 49826 Node: Plugins gate1714568 49827 Node: Plugins tracking1715159 49828 Node: Plugins building1715747 49829 Node: LTO1717533 49830 Node: LTO Overview1718394 49831 Node: LTO object file layout1724226 49832 Node: IPA1728858 49833 Node: WHOPR1737823 49834 Node: Internal flags1742514 49835 Node: Funding1743726 49836 Node: GNU Project1746209 49837 Node: Copying1746858 49838 Node: GNU Free Documentation License1784389 49839 Node: Contributors1809529 49840 Node: Option Index1846934 49841 Node: Concept Index1847738 49842 49843 End Tag Table 49844