1 This is doc/gccint.info, produced by makeinfo version 4.8 from 2 ../../../toolchain/android-toolchain/gcc-4.3.1/gcc/doc/gccint.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software 6 Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9 under the terms of the GNU Free Documentation License, Version 1.2 or 10 any later version published by the Free Software Foundation; with the 11 Invariant Sections being "GNU General Public License" and "Funding Free 12 Software", the Front-Cover texts being (a) (see below), and with the 13 Back-Cover Texts being (b) (see below). A copy of the license is 14 included in the section entitled "GNU Free Documentation License". 15 16 (a) The FSF's Front-Cover Text is: 17 18 A GNU Manual 19 20 (b) The FSF's Back-Cover Text is: 21 22 You have freedom to copy and modify this GNU Manual, like GNU 23 software. Copies published by the Free Software Foundation raise 24 funds for GNU development. 25 26 INFO-DIR-SECTION Software development 27 START-INFO-DIR-ENTRY 28 * gccint: (gccint). Internals of the GNU Compiler Collection. 29 END-INFO-DIR-ENTRY 30 This file documents the internals of the GNU compilers. 31 32 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 33 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software 34 Foundation, Inc. 35 36 Permission is granted to copy, distribute and/or modify this document 37 under the terms of the GNU Free Documentation License, Version 1.2 or 38 any later version published by the Free Software Foundation; with the 39 Invariant Sections being "GNU General Public License" and "Funding Free 40 Software", the Front-Cover texts being (a) (see below), and with the 41 Back-Cover Texts being (b) (see below). A copy of the license is 42 included in the section entitled "GNU Free Documentation License". 43 44 (a) The FSF's Front-Cover Text is: 45 46 A GNU Manual 47 48 (b) The FSF's Back-Cover Text is: 49 50 You have freedom to copy and modify this GNU Manual, like GNU 51 software. Copies published by the Free Software Foundation raise 52 funds for GNU development. 53 54 55 56 File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 57 58 Introduction 59 ************ 60 61 This manual documents the internals of the GNU compilers, including how 62 to port them to new targets and some information about how to write 63 front ends for new languages. It corresponds to the compilers 64 (GCC) version 4.3.1. The use of the GNU compilers is documented in a 65 separate manual. *Note Introduction: (gcc)Top. 66 67 This manual is mainly a reference manual rather than a tutorial. It 68 discusses how to contribute to GCC (*note Contributing::), the 69 characteristics of the machines supported by GCC as hosts and targets 70 (*note Portability::), how GCC relates to the ABIs on such systems 71 (*note Interface::), and the characteristics of the languages for which 72 GCC front ends are written (*note Languages::). It then describes the 73 GCC source tree structure and build system, some of the interfaces to 74 GCC front ends, and how support for a target system is implemented in 75 GCC. 76 77 Additional tutorial information is linked to from 78 `http://gcc.gnu.org/readings.html'. 79 80 * Menu: 81 82 * Contributing:: How to contribute to testing and developing GCC. 83 * Portability:: Goals of GCC's portability features. 84 * Interface:: Function-call interface of GCC output. 85 * Libgcc:: Low-level runtime library used by GCC. 86 * Languages:: Languages for which GCC front ends are written. 87 * Source Tree:: GCC source tree structure and build system. 88 * Options:: Option specification files. 89 * Passes:: Order of passes, what they do, and what each file is for. 90 * Trees:: The source representation used by the C and C++ front ends. 91 * RTL:: The intermediate representation that most passes work on. 92 * Control Flow:: Maintaining and manipulating the control flow graph. 93 * Tree SSA:: Analysis and optimization of the tree representation. 94 * Loop Analysis and Representation:: Analysis and representation of loops 95 * Machine Desc:: How to write machine description instruction patterns. 96 * Target Macros:: How to write the machine description C macros and functions. 97 * Host Config:: Writing the `xm-MACHINE.h' file. 98 * Fragments:: Writing the `t-TARGET' and `x-HOST' files. 99 * Collect2:: How `collect2' works; how it finds `ld'. 100 * Header Dirs:: Understanding the standard header file directories. 101 * Type Information:: GCC's memory management; generating type information. 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 __udivmoddi3 (unsigned long A, 333 unsigned long B, unsigned long *C) 334 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 335 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 754R 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 2940 File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2941 2942 5 Language Front Ends in GCC 2943 **************************** 2944 2945 The interface to front ends for languages in GCC, and in particular the 2946 `tree' structure (*note Trees::), was initially designed for C, and 2947 many aspects of it are still somewhat biased towards C and C-like 2948 languages. It is, however, reasonably well suited to other procedural 2949 languages, and front ends for many such languages have been written for 2950 GCC. 2951 2952 Writing a compiler as a front end for GCC, rather than compiling 2953 directly to assembler or generating C code which is then compiled by 2954 GCC, has several advantages: 2955 2956 * GCC front ends benefit from the support for many different target 2957 machines already present in GCC. 2958 2959 * GCC front ends benefit from all the optimizations in GCC. Some of 2960 these, such as alias analysis, may work better when GCC is 2961 compiling directly from source code then when it is compiling from 2962 generated C code. 2963 2964 * Better debugging information is generated when compiling directly 2965 from source code than when going via intermediate generated C code. 2966 2967 Because of the advantages of writing a compiler as a GCC front end, 2968 GCC front ends have also been created for languages very different from 2969 those for which GCC was designed, such as the declarative 2970 logic/functional language Mercury. For these reasons, it may also be 2971 useful to implement compilers created for specialized purposes (for 2972 example, as part of a research project) as GCC front ends. 2973 2974 2975 File: gccint.info, Node: Source Tree, Next: Options, Prev: Languages, Up: Top 2976 2977 6 Source Tree Structure and Build System 2978 **************************************** 2979 2980 This chapter describes the structure of the GCC source tree, and how 2981 GCC is built. The user documentation for building and installing GCC 2982 is in a separate manual (`http://gcc.gnu.org/install/'), with which it 2983 is presumed that you are familiar. 2984 2985 * Menu: 2986 2987 * Configure Terms:: Configuration terminology and history. 2988 * Top Level:: The top level source directory. 2989 * gcc Directory:: The `gcc' subdirectory. 2990 * Testsuites:: The GCC testsuites. 2991 2992 2993 File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 2994 2995 6.1 Configure Terms and History 2996 =============================== 2997 2998 The configure and build process has a long and colorful history, and can 2999 be confusing to anyone who doesn't know why things are the way they are. 3000 While there are other documents which describe the configuration process 3001 in detail, here are a few things that everyone working on GCC should 3002 know. 3003 3004 There are three system names that the build knows about: the machine 3005 you are building on ("build"), the machine that you are building for 3006 ("host"), and the machine that GCC will produce code for ("target"). 3007 When you configure GCC, you specify these with `--build=', `--host=', 3008 and `--target='. 3009 3010 Specifying the host without specifying the build should be avoided, as 3011 `configure' may (and once did) assume that the host you specify is also 3012 the build, which may not be true. 3013 3014 If build, host, and target are all the same, this is called a 3015 "native". If build and host are the same but target is different, this 3016 is called a "cross". If build, host, and target are all different this 3017 is called a "canadian" (for obscure reasons dealing with Canada's 3018 political party and the background of the person working on the build 3019 at that time). If host and target are the same, but build is 3020 different, you are using a cross-compiler to build a native for a 3021 different system. Some people call this a "host-x-host", "crossed 3022 native", or "cross-built native". If build and target are the same, 3023 but host is different, you are using a cross compiler to build a cross 3024 compiler that produces code for the machine you're building on. This 3025 is rare, so there is no common way of describing it. There is a 3026 proposal to call this a "crossback". 3027 3028 If build and host are the same, the GCC you are building will also be 3029 used to build the target libraries (like `libstdc++'). If build and 3030 host are different, you must have already built and installed a cross 3031 compiler that will be used to build the target libraries (if you 3032 configured with `--target=foo-bar', this compiler will be called 3033 `foo-bar-gcc'). 3034 3035 In the case of target libraries, the machine you're building for is the 3036 machine you specified with `--target'. So, build is the machine you're 3037 building on (no change there), host is the machine you're building for 3038 (the target libraries are built for the target, so host is the target 3039 you specified), and target doesn't apply (because you're not building a 3040 compiler, you're building libraries). The configure/make process will 3041 adjust these variables as needed. It also sets `$with_cross_host' to 3042 the original `--host' value in case you need it. 3043 3044 The `libiberty' support library is built up to three times: once for 3045 the host, once for the target (even if they are the same), and once for 3046 the build if build and host are different. This allows it to be used 3047 by all programs which are generated in the course of the build process. 3048 3049 3050 File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3051 3052 6.2 Top Level Source Directory 3053 ============================== 3054 3055 The top level source directory in a GCC distribution contains several 3056 files and directories that are shared with other software distributions 3057 such as that of GNU Binutils. It also contains several subdirectories 3058 that contain parts of GCC and its runtime libraries: 3059 3060 `boehm-gc' 3061 The Boehm conservative garbage collector, used as part of the Java 3062 runtime library. 3063 3064 `contrib' 3065 Contributed scripts that may be found useful in conjunction with 3066 GCC. One of these, `contrib/texi2pod.pl', is used to generate man 3067 pages from Texinfo manuals as part of the GCC build process. 3068 3069 `fastjar' 3070 An implementation of the `jar' command, used with the Java front 3071 end. 3072 3073 `gcc' 3074 The main sources of GCC itself (except for runtime libraries), 3075 including optimizers, support for different target architectures, 3076 language front ends, and testsuites. *Note The `gcc' 3077 Subdirectory: gcc Directory, for details. 3078 3079 `include' 3080 Headers for the `libiberty' library. 3081 3082 `libada' 3083 The Ada runtime library. 3084 3085 `libcpp' 3086 The C preprocessor library. 3087 3088 `libgfortran' 3089 The Fortran runtime library. 3090 3091 `libffi' 3092 The `libffi' library, used as part of the Java runtime library. 3093 3094 `libiberty' 3095 The `libiberty' library, used for portability and for some 3096 generally useful data structures and algorithms. *Note 3097 Introduction: (libiberty)Top, for more information about this 3098 library. 3099 3100 `libjava' 3101 The Java runtime library. 3102 3103 `libmudflap' 3104 The `libmudflap' library, used for instrumenting pointer and array 3105 dereferencing operations. 3106 3107 `libobjc' 3108 The Objective-C and Objective-C++ runtime library. 3109 3110 `libstdc++-v3' 3111 The C++ runtime library. 3112 3113 `maintainer-scripts' 3114 Scripts used by the `gccadmin' account on `gcc.gnu.org'. 3115 3116 `zlib' 3117 The `zlib' compression library, used by the Java front end and as 3118 part of the Java runtime library. 3119 3120 The build system in the top level directory, including how recursion 3121 into subdirectories works and how building runtime libraries for 3122 multilibs is handled, is documented in a separate manual, included with 3123 GNU Binutils. *Note GNU configure and build system: (configure)Top, 3124 for details. 3125 3126 3127 File: gccint.info, Node: gcc Directory, Next: Testsuites, Prev: Top Level, Up: Source Tree 3128 3129 6.3 The `gcc' Subdirectory 3130 ========================== 3131 3132 The `gcc' directory contains many files that are part of the C sources 3133 of GCC, other files used as part of the configuration and build 3134 process, and subdirectories including documentation and a testsuite. 3135 The files that are sources of GCC are documented in a separate chapter. 3136 *Note Passes and Files of the Compiler: Passes. 3137 3138 * Menu: 3139 3140 * Subdirectories:: Subdirectories of `gcc'. 3141 * Configuration:: The configuration process, and the files it uses. 3142 * Build:: The build system in the `gcc' directory. 3143 * Makefile:: Targets in `gcc/Makefile'. 3144 * Library Files:: Library source files and headers under `gcc/'. 3145 * Headers:: Headers installed by GCC. 3146 * Documentation:: Building documentation in GCC. 3147 * Front End:: Anatomy of a language front end. 3148 * Back End:: Anatomy of a target back end. 3149 3150 3151 File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3152 3153 6.3.1 Subdirectories of `gcc' 3154 ----------------------------- 3155 3156 The `gcc' directory contains the following subdirectories: 3157 3158 `LANGUAGE' 3159 Subdirectories for various languages. Directories containing a 3160 file `config-lang.in' are language subdirectories. The contents of 3161 the subdirectories `cp' (for C++), `objc' (for Objective-C) and 3162 `objcp' (for Objective-C++) are documented in this manual (*note 3163 Passes and Files of the Compiler: Passes.); those for other 3164 languages are not. *Note Anatomy of a Language Front End: Front 3165 End, for details of the files in these directories. 3166 3167 `config' 3168 Configuration files for supported architectures and operating 3169 systems. *Note Anatomy of a Target Back End: Back End, for 3170 details of the files in this directory. 3171 3172 `doc' 3173 Texinfo documentation for GCC, together with automatically 3174 generated man pages and support for converting the installation 3175 manual to HTML. *Note Documentation::. 3176 3177 `fixinc' 3178 The support for fixing system headers to work with GCC. See 3179 `fixinc/README' for more information. The headers fixed by this 3180 mechanism are installed in `LIBSUBDIR/include'. Along with those 3181 headers, `README-fixinc' is also installed, as 3182 `LIBSUBDIR/include/README'. 3183 3184 `ginclude' 3185 System headers installed by GCC, mainly those required by the C 3186 standard of freestanding implementations. *Note Headers Installed 3187 by GCC: Headers, for details of when these and other headers are 3188 installed. 3189 3190 `intl' 3191 GNU `libintl', from GNU `gettext', for systems which do not 3192 include it in libc. Properly, this directory should be at top 3193 level, parallel to the `gcc' directory. 3194 3195 `po' 3196 Message catalogs with translations of messages produced by GCC into 3197 various languages, `LANGUAGE.po'. This directory also contains 3198 `gcc.pot', the template for these message catalogues, `exgettext', 3199 a wrapper around `gettext' to extract the messages from the GCC 3200 sources and create `gcc.pot', which is run by `make gcc.pot', and 3201 `EXCLUDES', a list of files from which messages should not be 3202 extracted. 3203 3204 `testsuite' 3205 The GCC testsuites (except for those for runtime libraries). 3206 *Note Testsuites::. 3207 3208 3209 File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3210 3211 6.3.2 Configuration in the `gcc' Directory 3212 ------------------------------------------ 3213 3214 The `gcc' directory is configured with an Autoconf-generated script 3215 `configure'. The `configure' script is generated from `configure.ac' 3216 and `aclocal.m4'. From the files `configure.ac' and `acconfig.h', 3217 Autoheader generates the file `config.in'. The file `cstamp-h.in' is 3218 used as a timestamp. 3219 3220 * Menu: 3221 3222 * Config Fragments:: Scripts used by `configure'. 3223 * System Config:: The `config.build', `config.host', and 3224 `config.gcc' files. 3225 * Configuration Files:: Files created by running `configure'. 3226 3227 3228 File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3229 3230 6.3.2.1 Scripts Used by `configure' 3231 ................................... 3232 3233 `configure' uses some other scripts to help in its work: 3234 3235 * The standard GNU `config.sub' and `config.guess' files, kept in 3236 the top level directory, are used. FIXME: when is the 3237 `config.guess' file in the `gcc' directory (that just calls the 3238 top level one) used? 3239 3240 * The file `config.gcc' is used to handle configuration specific to 3241 the particular target machine. The file `config.build' is used to 3242 handle configuration specific to the particular build machine. 3243 The file `config.host' is used to handle configuration specific to 3244 the particular host machine. (In general, these should only be 3245 used for features that cannot reasonably be tested in Autoconf 3246 feature tests.) *Note The `config.build'; `config.host'; and 3247 `config.gcc' Files: System Config, for details of the contents of 3248 these files. 3249 3250 * Each language subdirectory has a file `LANGUAGE/config-lang.in' 3251 that is used for front-end-specific configuration. *Note The 3252 Front End `config-lang.in' File: Front End Config, for details of 3253 this file. 3254 3255 * A helper script `configure.frag' is used as part of creating the 3256 output of `configure'. 3257 3258 3259 File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3260 3261 6.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files 3262 ................................................................. 3263 3264 The `config.build' file contains specific rules for particular systems 3265 which GCC is built on. This should be used as rarely as possible, as 3266 the behavior of the build system can always be detected by autoconf. 3267 3268 The `config.host' file contains specific rules for particular systems 3269 which GCC will run on. This is rarely needed. 3270 3271 The `config.gcc' file contains specific rules for particular systems 3272 which GCC will generate code for. This is usually needed. 3273 3274 Each file has a list of the shell variables it sets, with 3275 descriptions, at the top of the file. 3276 3277 FIXME: document the contents of these files, and what variables should 3278 be set to control build, host and target configuration. 3279 3280 3281 File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3282 3283 6.3.2.3 Files Created by `configure' 3284 .................................... 3285 3286 Here we spell out what files will be set up by `configure' in the `gcc' 3287 directory. Some other files are created as temporary files in the 3288 configuration process, and are not used in the subsequent build; these 3289 are not documented. 3290 3291 * `Makefile' is constructed from `Makefile.in', together with the 3292 host and target fragments (*note Makefile Fragments: Fragments.) 3293 `t-TARGET' and `x-HOST' from `config', if any, and language 3294 Makefile fragments `LANGUAGE/Make-lang.in'. 3295 3296 * `auto-host.h' contains information about the host machine 3297 determined by `configure'. If the host machine is different from 3298 the build machine, then `auto-build.h' is also created, containing 3299 such information about the build machine. 3300 3301 * `config.status' is a script that may be run to recreate the 3302 current configuration. 3303 3304 * `configargs.h' is a header containing details of the arguments 3305 passed to `configure' to configure GCC, and of the thread model 3306 used. 3307 3308 * `cstamp-h' is used as a timestamp. 3309 3310 * `fixinc/Makefile' is constructed from `fixinc/Makefile.in'. 3311 3312 * `gccbug', a script for reporting bugs in GCC, is constructed from 3313 `gccbug.in'. 3314 3315 * `intl/Makefile' is constructed from `intl/Makefile.in'. 3316 3317 * If a language `config-lang.in' file (*note The Front End 3318 `config-lang.in' File: Front End Config.) sets `outputs', then the 3319 files listed in `outputs' there are also generated. 3320 3321 The following configuration headers are created from the Makefile, 3322 using `mkconfig.sh', rather than directly by `configure'. `config.h', 3323 `bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if 3324 any, appropriate to the host, build and target machines respectively, 3325 the configuration headers for the target, and some definitions; for the 3326 host and build machines, these include the autoconfigured headers 3327 generated by `configure'. The other configuration headers are 3328 determined by `config.gcc'. They also contain the typedefs for `rtx', 3329 `rtvec' and `tree'. 3330 3331 * `config.h', for use in programs that run on the host machine. 3332 3333 * `bconfig.h', for use in programs that run on the build machine. 3334 3335 * `tconfig.h', for use in programs and libraries for the target 3336 machine. 3337 3338 * `tm_p.h', which includes the header `MACHINE-protos.h' that 3339 contains prototypes for functions in the target `.c' file. FIXME: 3340 why is such a separate header necessary? 3341 3342 3343 File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3344 3345 6.3.3 Build System in the `gcc' Directory 3346 ----------------------------------------- 3347 3348 FIXME: describe the build system, including what is built in what 3349 stages. Also list the various source files that are used in the build 3350 process but aren't source files of GCC itself and so aren't documented 3351 below (*note Passes::). 3352 3353 3354 File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3355 3356 6.3.4 Makefile Targets 3357 ---------------------- 3358 3359 These targets are available from the `gcc' directory: 3360 3361 `all' 3362 This is the default target. Depending on what your 3363 build/host/target configuration is, it coordinates all the things 3364 that need to be built. 3365 3366 `doc' 3367 Produce info-formatted documentation and man pages. Essentially it 3368 calls `make man' and `make info'. 3369 3370 `dvi' 3371 Produce DVI-formatted documentation. 3372 3373 `pdf' 3374 Produce PDF-formatted documentation. 3375 3376 `html' 3377 Produce HTML-formatted documentation. 3378 3379 `man' 3380 Generate man pages. 3381 3382 `info' 3383 Generate info-formatted pages. 3384 3385 `mostlyclean' 3386 Delete the files made while building the compiler. 3387 3388 `clean' 3389 That, and all the other files built by `make all'. 3390 3391 `distclean' 3392 That, and all the files created by `configure'. 3393 3394 `maintainer-clean' 3395 Distclean plus any file that can be generated from other files. 3396 Note that additional tools may be required beyond what is normally 3397 needed to build gcc. 3398 3399 `srcextra' 3400 Generates files in the source directory that do not exist in CVS 3401 but should go into a release tarball. One example is 3402 `gcc/java/parse.c' which is generated from the CVS source file 3403 `gcc/java/parse.y'. 3404 3405 `srcinfo' 3406 `srcman' 3407 Copies the info-formatted and manpage documentation into the source 3408 directory usually for the purpose of generating a release tarball. 3409 3410 `install' 3411 Installs gcc. 3412 3413 `uninstall' 3414 Deletes installed files. 3415 3416 `check' 3417 Run the testsuite. This creates a `testsuite' subdirectory that 3418 has various `.sum' and `.log' files containing the results of the 3419 testing. You can run subsets with, for example, `make check-gcc'. 3420 You can specify specific tests by setting RUNTESTFLAGS to be the 3421 name of the `.exp' file, optionally followed by (for some tests) 3422 an equals and a file wildcard, like: 3423 3424 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3425 3426 Note that running the testsuite may require additional tools be 3427 installed, such as TCL or dejagnu. 3428 3429 The toplevel tree from which you start GCC compilation is not the GCC 3430 directory, but rather a complex Makefile that coordinates the various 3431 steps of the build, including bootstrapping the compiler and using the 3432 new compiler to build target libraries. 3433 3434 When GCC is configured for a native configuration, the default action 3435 for `make' is to do a full three-stage bootstrap. This means that GCC 3436 is built three times--once with the native compiler, once with the 3437 native-built compiler it just built, and once with the compiler it 3438 built the second time. In theory, the last two should produce the same 3439 results, which `make compare' can check. Each stage is configured 3440 separately and compiled into a separate directory, to minimize problems 3441 due to ABI incompatibilities between the native compiler and GCC. 3442 3443 If you do a change, rebuilding will also start from the first stage 3444 and "bubble" up the change through the three stages. Each stage is 3445 taken from its build directory (if it had been built previously), 3446 rebuilt, and copied to its subdirectory. This will allow you to, for 3447 example, continue a bootstrap after fixing a bug which causes the 3448 stage2 build to crash. It does not provide as good coverage of the 3449 compiler as bootstrapping from scratch, but it ensures that the new 3450 code is syntactically correct (e.g., that you did not use GCC extensions 3451 by mistake), and avoids spurious bootstrap comparison failures(1). 3452 3453 Other targets available from the top level include: 3454 3455 `bootstrap-lean' 3456 Like `bootstrap', except that the various stages are removed once 3457 they're no longer needed. This saves disk space. 3458 3459 `bootstrap2' 3460 `bootstrap2-lean' 3461 Performs only the first two stages of bootstrap. Unlike a 3462 three-stage bootstrap, this does not perform a comparison to test 3463 that the compiler is running properly. Note that the disk space 3464 required by a "lean" bootstrap is approximately independent of the 3465 number of stages. 3466 3467 `stageN-bubble (N = 1...4)' 3468 Rebuild all the stages up to N, with the appropriate flags, 3469 "bubbling" the changes as described above. 3470 3471 `all-stageN (N = 1...4)' 3472 Assuming that stage N has already been built, rebuild it with the 3473 appropriate flags. This is rarely needed. 3474 3475 `cleanstrap' 3476 Remove everything (`make clean') and rebuilds (`make bootstrap'). 3477 3478 `compare' 3479 Compares the results of stages 2 and 3. This ensures that the 3480 compiler is running properly, since it should produce the same 3481 object files regardless of how it itself was compiled. 3482 3483 `profiledbootstrap' 3484 Builds a compiler with profiling feedback information. For more 3485 information, see *Note Building with profile feedback: 3486 (gccinstall)Building. 3487 3488 `restrap' 3489 Restart a bootstrap, so that everything that was not built with 3490 the system compiler is rebuilt. 3491 3492 `stageN-start (N = 1...4)' 3493 For each package that is bootstrapped, rename directories so that, 3494 for example, `gcc' points to the stageN GCC, compiled with the 3495 stageN-1 GCC(2). 3496 3497 You will invoke this target if you need to test or debug the 3498 stageN GCC. If you only need to execute GCC (but you need not run 3499 `make' either to rebuild it or to run test suites), you should be 3500 able to work directly in the `stageN-gcc' directory. This makes 3501 it easier to debug multiple stages in parallel. 3502 3503 `stage' 3504 For each package that is bootstrapped, relocate its build directory 3505 to indicate its stage. For example, if the `gcc' directory points 3506 to the stage2 GCC, after invoking this target it will be renamed 3507 to `stage2-gcc'. 3508 3509 3510 If you wish to use non-default GCC flags when compiling the stage2 and 3511 stage3 compilers, set `BOOT_CFLAGS' on the command line when doing 3512 `make'. 3513 3514 Usually, the first stage only builds the languages that the compiler 3515 is written in: typically, C and maybe Ada. If you are debugging a 3516 miscompilation of a different stage2 front-end (for example, of the 3517 Fortran front-end), you may want to have front-ends for other languages 3518 in the first stage as well. To do so, set `STAGE1_LANGUAGES' on the 3519 command line when doing `make'. 3520 3521 For example, in the aforementioned scenario of debugging a Fortran 3522 front-end miscompilation caused by the stage1 compiler, you may need a 3523 command like 3524 3525 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3526 3527 Alternatively, you can use per-language targets to build and test 3528 languages that are not enabled by default in stage1. For example, 3529 `make f951' will build a Fortran compiler even in the stage1 build 3530 directory. 3531 3532 ---------- Footnotes ---------- 3533 3534 (1) Except if the compiler was buggy and miscompiled some of the 3535 files that were not modified. In this case, it's best to use `make 3536 restrap'. 3537 3538 (2) Customarily, the system compiler is also termed the `stage0' GCC. 3539 3540 3541 File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3542 3543 6.3.5 Library Source Files and Headers under the `gcc' Directory 3544 ---------------------------------------------------------------- 3545 3546 FIXME: list here, with explanation, all the C source files and headers 3547 under the `gcc' directory that aren't built into the GCC executable but 3548 rather are part of runtime libraries and object files, such as 3549 `crtstuff.c' and `unwind-dw2.c'. *Note Headers Installed by GCC: 3550 Headers, for more information about the `ginclude' directory. 3551 3552 3553 File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3554 3555 6.3.6 Headers Installed by GCC 3556 ------------------------------ 3557 3558 In general, GCC expects the system C library to provide most of the 3559 headers to be used with it. However, GCC will fix those headers if 3560 necessary to make them work with GCC, and will install some headers 3561 required of freestanding implementations. These headers are installed 3562 in `LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3563 installed by GCC; these are not documented here. (FIXME: document them 3564 somewhere.) 3565 3566 Several of the headers GCC installs are in the `ginclude' directory. 3567 These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are 3568 installed in `LIBSUBDIR/include', unless the target Makefile fragment 3569 (*note Target Fragment::) overrides this by setting `USER_H'. 3570 3571 In addition to these headers and those generated by fixing system 3572 headers to work with GCC, some other headers may also be installed in 3573 `LIBSUBDIR/include'. `config.gcc' may set `extra_headers'; this 3574 specifies additional headers under `config' to be installed on some 3575 systems. 3576 3577 GCC installs its own version of `<float.h>', from `ginclude/float.h'. 3578 This is done to cope with command-line options that change the 3579 representation of floating point numbers. 3580 3581 GCC also installs its own version of `<limits.h>'; this is generated 3582 from `glimits.h', together with `limitx.h' and `limity.h' if the system 3583 also has its own version of `<limits.h>'. (GCC provides its own header 3584 because it is required of ISO C freestanding implementations, but needs 3585 to include the system header from its own header as well because other 3586 standards such as POSIX specify additional values to be defined in 3587 `<limits.h>'.) The system's `<limits.h>' header is used via 3588 `LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if 3589 it does not need fixing to work with GCC; if it needs fixing, 3590 `syslimits.h' is the fixed copy. 3591 3592 GCC can also install `<tgmath.h>'. It will do this when `config.gcc' 3593 sets `use_gcc_tgmath' to `yes'. 3594 3595 3596 File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3597 3598 6.3.7 Building Documentation 3599 ---------------------------- 3600 3601 The main GCC documentation is in the form of manuals in Texinfo format. 3602 These are installed in Info format; DVI versions may be generated by 3603 `make dvi', PDF versions by `make pdf', and HTML versions by `make 3604 html'. In addition, some man pages are generated from the Texinfo 3605 manuals, there are some other text files with miscellaneous 3606 documentation, and runtime libraries have their own documentation 3607 outside the `gcc' directory. FIXME: document the documentation for 3608 runtime libraries somewhere. 3609 3610 * Menu: 3611 3612 * Texinfo Manuals:: GCC manuals in Texinfo format. 3613 * Man Page Generation:: Generating man pages from Texinfo manuals. 3614 * Miscellaneous Docs:: Miscellaneous text files with documentation. 3615 3616 3617 File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3618 3619 6.3.7.1 Texinfo Manuals 3620 ....................... 3621 3622 The manuals for GCC as a whole, and the C and C++ front ends, are in 3623 files `doc/*.texi'. Other front ends have their own manuals in files 3624 `LANGUAGE/*.texi'. Common files `doc/include/*.texi' are provided 3625 which may be included in multiple manuals; the following files are in 3626 `doc/include': 3627 3628 `fdl.texi' 3629 The GNU Free Documentation License. 3630 3631 `funding.texi' 3632 The section "Funding Free Software". 3633 3634 `gcc-common.texi' 3635 Common definitions for manuals. 3636 3637 `gpl.texi' 3638 `gpl_v3.texi' 3639 The GNU General Public License. 3640 3641 `texinfo.tex' 3642 A copy of `texinfo.tex' known to work with the GCC manuals. 3643 3644 DVI-formatted manuals are generated by `make dvi', which uses 3645 `texi2dvi' (via the Makefile macro `$(TEXI2DVI)'). PDF-formatted 3646 manuals are generated by `make pdf', which uses `texi2pdf' (via the 3647 Makefile macro `$(TEXI2PDF)'). HTML formatted manuals are generated by 3648 `make html'. Info manuals are generated by `make info' (which is run 3649 as part of a bootstrap); this generates the manuals in the source 3650 directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and 3651 they are included in release distributions. 3652 3653 Manuals are also provided on the GCC web site, in both HTML and 3654 PostScript forms. This is done via the script 3655 `maintainer-scripts/update_web_docs'. Each manual to be provided 3656 online must be listed in the definition of `MANUALS' in that file; a 3657 file `NAME.texi' must only appear once in the source tree, and the 3658 output manual must have the same name as the source file. (However, 3659 other Texinfo files, included in manuals but not themselves the root 3660 files of manuals, may have names that appear more than once in the 3661 source tree.) The manual file `NAME.texi' should only include other 3662 files in its own directory or in `doc/include'. HTML manuals will be 3663 generated by `makeinfo --html', PostScript manuals by `texi2dvi' and 3664 `dvips', and PDF manuals by `texi2pdf'. All Texinfo files that are 3665 parts of manuals must be checked into SVN, even if they are generated 3666 files, for the generation of online manuals to work. 3667 3668 The installation manual, `doc/install.texi', is also provided on the 3669 GCC web site. The HTML version is generated by the script 3670 `doc/install.texi2html'. 3671 3672 3673 File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3674 3675 6.3.7.2 Man Page Generation 3676 ........................... 3677 3678 Because of user demand, in addition to full Texinfo manuals, man pages 3679 are provided which contain extracts from those manuals. These man 3680 pages are generated from the Texinfo manuals using 3681 `contrib/texi2pod.pl' and `pod2man'. (The man page for `g++', 3682 `cp/g++.1', just contains a `.so' reference to `gcc.1', but all the 3683 other man pages are generated from Texinfo manuals.) 3684 3685 Because many systems may not have the necessary tools installed to 3686 generate the man pages, they are only generated if the `configure' 3687 script detects that recent enough tools are installed, and the 3688 Makefiles allow generating man pages to fail without aborting the 3689 build. Man pages are also included in release distributions. They are 3690 generated in the source directory. 3691 3692 Magic comments in Texinfo files starting `@c man' control what parts 3693 of a Texinfo file go into a man page. Only a subset of Texinfo is 3694 supported by `texi2pod.pl', and it may be necessary to add support for 3695 more Texinfo features to this script when generating new man pages. To 3696 improve the man page output, some special Texinfo macros are provided 3697 in `doc/include/gcc-common.texi' which `texi2pod.pl' understands: 3698 3699 `@gcctabopt' 3700 Use in the form `@table @gcctabopt' for tables of options, where 3701 for printed output the effect of `@code' is better than that of 3702 `@option' but for man page output a different effect is wanted. 3703 3704 `@gccoptlist' 3705 Use for summary lists of options in manuals. 3706 3707 `@gol' 3708 Use at the end of each line inside `@gccoptlist'. This is 3709 necessary to avoid problems with differences in how the 3710 `@gccoptlist' macro is handled by different Texinfo formatters. 3711 3712 FIXME: describe the `texi2pod.pl' input language and magic comments in 3713 more detail. 3714 3715 3716 File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3717 3718 6.3.7.3 Miscellaneous Documentation 3719 ................................... 3720 3721 In addition to the formal documentation that is installed by GCC, there 3722 are several other text files with miscellaneous documentation: 3723 3724 `ABOUT-GCC-NLS' 3725 Notes on GCC's Native Language Support. FIXME: this should be 3726 part of this manual rather than a separate file. 3727 3728 `ABOUT-NLS' 3729 Notes on the Free Translation Project. 3730 3731 `COPYING' 3732 The GNU General Public License. 3733 3734 `COPYING.LIB' 3735 The GNU Lesser General Public License. 3736 3737 `*ChangeLog*' 3738 `*/ChangeLog*' 3739 Change log files for various parts of GCC. 3740 3741 `LANGUAGES' 3742 Details of a few changes to the GCC front-end interface. FIXME: 3743 the information in this file should be part of general 3744 documentation of the front-end interface in this manual. 3745 3746 `ONEWS' 3747 Information about new features in old versions of GCC. (For recent 3748 versions, the information is on the GCC web site.) 3749 3750 `README.Portability' 3751 Information about portability issues when writing code in GCC. 3752 FIXME: why isn't this part of this manual or of the GCC Coding 3753 Conventions? 3754 3755 FIXME: document such files in subdirectories, at least `config', `cp', 3756 `objc', `testsuite'. 3757 3758 3759 File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3760 3761 6.3.8 Anatomy of a Language Front End 3762 ------------------------------------- 3763 3764 A front end for a language in GCC has the following parts: 3765 3766 * A directory `LANGUAGE' under `gcc' containing source files for 3767 that front end. *Note The Front End `LANGUAGE' Directory: Front 3768 End Directory, for details. 3769 3770 * A mention of the language in the list of supported languages in 3771 `gcc/doc/install.texi'. 3772 3773 * A mention of the name under which the language's runtime library is 3774 recognized by `--enable-shared=PACKAGE' in the documentation of 3775 that option in `gcc/doc/install.texi'. 3776 3777 * A mention of any special prerequisites for building the front end 3778 in the documentation of prerequisites in `gcc/doc/install.texi'. 3779 3780 * Details of contributors to that front end in 3781 `gcc/doc/contrib.texi'. If the details are in that front end's 3782 own manual then there should be a link to that manual's list in 3783 `contrib.texi'. 3784 3785 * Information about support for that language in 3786 `gcc/doc/frontends.texi'. 3787 3788 * Information about standards for that language, and the front end's 3789 support for them, in `gcc/doc/standards.texi'. This may be a link 3790 to such information in the front end's own manual. 3791 3792 * Details of source file suffixes for that language and `-x LANG' 3793 options supported, in `gcc/doc/invoke.texi'. 3794 3795 * Entries in `default_compilers' in `gcc.c' for source file suffixes 3796 for that language. 3797 3798 * Preferably testsuites, which may be under `gcc/testsuite' or 3799 runtime library directories. FIXME: document somewhere how to 3800 write testsuite harnesses. 3801 3802 * Probably a runtime library for the language, outside the `gcc' 3803 directory. FIXME: document this further. 3804 3805 * Details of the directories of any runtime libraries in 3806 `gcc/doc/sourcebuild.texi'. 3807 3808 If the front end is added to the official GCC source repository, the 3809 following are also necessary: 3810 3811 * At least one Bugzilla component for bugs in that front end and 3812 runtime libraries. This category needs to be mentioned in 3813 `gcc/gccbug.in', as well as being added to the Bugzilla database. 3814 3815 * Normally, one or more maintainers of that front end listed in 3816 `MAINTAINERS'. 3817 3818 * Mentions on the GCC web site in `index.html' and `frontends.html', 3819 with any relevant links on `readings.html'. (Front ends that are 3820 not an official part of GCC may also be listed on 3821 `frontends.html', with relevant links.) 3822 3823 * A news item on `index.html', and possibly an announcement on the 3824 <gcc-announce (a] gcc.gnu.org> mailing list. 3825 3826 * The front end's manuals should be mentioned in 3827 `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and 3828 the online manuals should be linked to from 3829 `onlinedocs/index.html'. 3830 3831 * Any old releases or CVS repositories of the front end, before its 3832 inclusion in GCC, should be made available on the GCC FTP site 3833 `ftp://gcc.gnu.org/pub/gcc/old-releases/'. 3834 3835 * The release and snapshot script `maintainer-scripts/gcc_release' 3836 should be updated to generate appropriate tarballs for this front 3837 end. The associated `maintainer-scripts/snapshot-README' and 3838 `maintainer-scripts/snapshot-index.html' files should be updated 3839 to list the tarballs and diffs for this front end. 3840 3841 * If this front end includes its own version files that include the 3842 current date, `maintainer-scripts/update_version' should be 3843 updated accordingly. 3844 3845 * Menu: 3846 3847 * Front End Directory:: The front end `LANGUAGE' directory. 3848 * Front End Config:: The front end `config-lang.in' file. 3849 3850 3851 File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3852 3853 6.3.8.1 The Front End `LANGUAGE' Directory 3854 .......................................... 3855 3856 A front end `LANGUAGE' directory contains the source files of that 3857 front end (but not of any runtime libraries, which should be outside 3858 the `gcc' directory). This includes documentation, and possibly some 3859 subsidiary programs build alongside the front end. Certain files are 3860 special and other parts of the compiler depend on their names: 3861 3862 `config-lang.in' 3863 This file is required in all language subdirectories. *Note The 3864 Front End `config-lang.in' File: Front End Config, for details of 3865 its contents 3866 3867 `Make-lang.in' 3868 This file is required in all language subdirectories. It contains 3869 targets `LANG.HOOK' (where `LANG' is the setting of `language' in 3870 `config-lang.in') for the following values of `HOOK', and any 3871 other Makefile rules required to build those targets (which may if 3872 necessary use other Makefiles specified in `outputs' in 3873 `config-lang.in', although this is deprecated). It also adds any 3874 testsuite targets that can use the standard rule in 3875 `gcc/Makefile.in' to the variable `lang_checks'. 3876 3877 `all.cross' 3878 `start.encap' 3879 `rest.encap' 3880 FIXME: exactly what goes in each of these targets? 3881 3882 `tags' 3883 Build an `etags' `TAGS' file in the language subdirectory in 3884 the source tree. 3885 3886 `info' 3887 Build info documentation for the front end, in the build 3888 directory. This target is only called by `make bootstrap' if 3889 a suitable version of `makeinfo' is available, so does not 3890 need to check for this, and should fail if an error occurs. 3891 3892 `dvi' 3893 Build DVI documentation for the front end, in the build 3894 directory. This should be done using `$(TEXI2DVI)', with 3895 appropriate `-I' arguments pointing to directories of 3896 included files. 3897 3898 `pdf' 3899 Build PDF documentation for the front end, in the build 3900 directory. This should be done using `$(TEXI2PDF)', with 3901 appropriate `-I' arguments pointing to directories of 3902 included files. 3903 3904 `html' 3905 Build HTML documentation for the front end, in the build 3906 directory. 3907 3908 `man' 3909 Build generated man pages for the front end from Texinfo 3910 manuals (*note Man Page Generation::), in the build 3911 directory. This target is only called if the necessary tools 3912 are available, but should ignore errors so as not to stop the 3913 build if errors occur; man pages are optional and the tools 3914 involved may be installed in a broken way. 3915 3916 `install-common' 3917 Install everything that is part of the front end, apart from 3918 the compiler executables listed in `compilers' in 3919 `config-lang.in'. 3920 3921 `install-info' 3922 Install info documentation for the front end, if it is 3923 present in the source directory. This target should have 3924 dependencies on info files that should be installed. 3925 3926 `install-man' 3927 Install man pages for the front end. This target should 3928 ignore errors. 3929 3930 `srcextra' 3931 Copies its dependencies into the source directory. This 3932 generally should be used for generated files such as Bison 3933 output files which are not present in CVS, but should be 3934 included in any release tarballs. This target will be 3935 executed during a bootstrap if 3936 `--enable-generated-files-in-srcdir' was specified as a 3937 `configure' option. 3938 3939 `srcinfo' 3940 `srcman' 3941 Copies its dependencies into the source directory. These 3942 targets will be executed during a bootstrap if 3943 `--enable-generated-files-in-srcdir' was specified as a 3944 `configure' option. 3945 3946 `uninstall' 3947 Uninstall files installed by installing the compiler. This is 3948 currently documented not to be supported, so the hook need 3949 not do anything. 3950 3951 `mostlyclean' 3952 `clean' 3953 `distclean' 3954 `maintainer-clean' 3955 The language parts of the standard GNU `*clean' targets. 3956 *Note Standard Targets for Users: (standards)Standard 3957 Targets, for details of the standard targets. For GCC, 3958 `maintainer-clean' should delete all generated files in the 3959 source directory that are not checked into CVS, but should 3960 not delete anything checked into CVS. 3961 3962 `lang.opt' 3963 This file registers the set of switches that the front end accepts 3964 on the command line, and their `--help' text. *Note Options::. 3965 3966 `lang-specs.h' 3967 This file provides entries for `default_compilers' in `gcc.c' 3968 which override the default of giving an error that a compiler for 3969 that language is not installed. 3970 3971 `LANGUAGE-tree.def' 3972 This file, which need not exist, defines any language-specific tree 3973 codes. 3974 3975 3976 File: gccint.info, Node: Front End Config, Prev: Front End Directory, Up: Front End 3977 3978 6.3.8.2 The Front End `config-lang.in' File 3979 ........................................... 3980 3981 Each language subdirectory contains a `config-lang.in' file. In 3982 addition the main directory contains `c-config-lang.in', which contains 3983 limited information for the C language. This file is a shell script 3984 that may define some variables describing the language: 3985 3986 `language' 3987 This definition must be present, and gives the name of the language 3988 for some purposes such as arguments to `--enable-languages'. 3989 3990 `lang_requires' 3991 If defined, this variable lists (space-separated) language front 3992 ends other than C that this front end requires to be enabled (with 3993 the names given being their `language' settings). For example, the 3994 Java front end depends on the C++ front end, so sets 3995 `lang_requires=c++'. 3996 3997 `subdir_requires' 3998 If defined, this variable lists (space-separated) front end 3999 directories other than C that this front end requires to be 4000 present. For example, the Objective-C++ front end uses source 4001 files from the C++ and Objective-C front ends, so sets 4002 `subdir_requires="cp objc"'. 4003 4004 `target_libs' 4005 If defined, this variable lists (space-separated) targets in the 4006 top level `Makefile' to build the runtime libraries for this 4007 language, such as `target-libobjc'. 4008 4009 `lang_dirs' 4010 If defined, this variable lists (space-separated) top level 4011 directories (parallel to `gcc'), apart from the runtime libraries, 4012 that should not be configured if this front end is not built. 4013 4014 `build_by_default' 4015 If defined to `no', this language front end is not built unless 4016 enabled in a `--enable-languages' argument. Otherwise, front ends 4017 are built by default, subject to any special logic in 4018 `configure.ac' (as is present to disable the Ada front end if the 4019 Ada compiler is not already installed). 4020 4021 `boot_language' 4022 If defined to `yes', this front end is built in stage 1 of the 4023 bootstrap. This is only relevant to front ends written in their 4024 own languages. 4025 4026 `compilers' 4027 If defined, a space-separated list of compiler executables that 4028 will be run by the driver. The names here will each end with 4029 `\$(exeext)'. 4030 4031 `outputs' 4032 If defined, a space-separated list of files that should be 4033 generated by `configure' substituting values in them. This 4034 mechanism can be used to create a file `LANGUAGE/Makefile' from 4035 `LANGUAGE/Makefile.in', but this is deprecated, building 4036 everything from the single `gcc/Makefile' is preferred. 4037 4038 `gtfiles' 4039 If defined, a space-separated list of files that should be scanned 4040 by gengtype.c to generate the garbage collection tables and 4041 routines for this language. This excludes the files that are 4042 common to all front ends. *Note Type Information::. 4043 4044 4045 4046 File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4047 4048 6.3.9 Anatomy of a Target Back End 4049 ---------------------------------- 4050 4051 A back end for a target architecture in GCC has the following parts: 4052 4053 * A directory `MACHINE' under `gcc/config', containing a machine 4054 description `MACHINE.md' file (*note Machine Descriptions: Machine 4055 Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a 4056 source file `MACHINE.c' (*note Target Description Macros and 4057 Functions: Target Macros.), possibly a target Makefile fragment 4058 `t-MACHINE' (*note The Target Makefile Fragment: Target 4059 Fragment.), and maybe some other files. The names of these files 4060 may be changed from the defaults given by explicit specifications 4061 in `config.gcc'. 4062 4063 * If necessary, a file `MACHINE-modes.def' in the `MACHINE' 4064 directory, containing additional machine modes to represent 4065 condition codes. *Note Condition Code::, for further details. 4066 4067 * An optional `MACHINE.opt' file in the `MACHINE' directory, 4068 containing a list of target-specific options. You can also add 4069 other option files using the `extra_options' variable in 4070 `config.gcc'. *Note Options::. 4071 4072 * Entries in `config.gcc' (*note The `config.gcc' File: System 4073 Config.) for the systems with this target architecture. 4074 4075 * Documentation in `gcc/doc/invoke.texi' for any command-line 4076 options supported by this target (*note Run-time Target 4077 Specification: Run-time Target.). This means both entries in the 4078 summary table of options and details of the individual options. 4079 4080 * Documentation in `gcc/doc/extend.texi' for any target-specific 4081 attributes supported (*note Defining target-specific uses of 4082 `__attribute__': Target Attributes.), including where the same 4083 attribute is already supported on some targets, which are 4084 enumerated in the manual. 4085 4086 * Documentation in `gcc/doc/extend.texi' for any target-specific 4087 pragmas supported. 4088 4089 * Documentation in `gcc/doc/extend.texi' of any target-specific 4090 built-in functions supported. 4091 4092 * Documentation in `gcc/doc/extend.texi' of any target-specific 4093 format checking styles supported. 4094 4095 * Documentation in `gcc/doc/md.texi' of any target-specific 4096 constraint letters (*note Constraints for Particular Machines: 4097 Machine Constraints.). 4098 4099 * A note in `gcc/doc/contrib.texi' under the person or people who 4100 contributed the target support. 4101 4102 * Entries in `gcc/doc/install.texi' for all target triplets 4103 supported with this target architecture, giving details of any 4104 special notes about installation for this target, or saying that 4105 there are no special notes if there are none. 4106 4107 * Possibly other support outside the `gcc' directory for runtime 4108 libraries. FIXME: reference docs for this. The libstdc++ porting 4109 manual needs to be installed as info for this to work, or to be a 4110 chapter of this manual. 4111 4112 If the back end is added to the official GCC source repository, the 4113 following are also necessary: 4114 4115 * An entry for the target architecture in `readings.html' on the GCC 4116 web site, with any relevant links. 4117 4118 * Details of the properties of the back end and target architecture 4119 in `backends.html' on the GCC web site. 4120 4121 * A news item about the contribution of support for that target 4122 architecture, in `index.html' on the GCC web site. 4123 4124 * Normally, one or more maintainers of that target listed in 4125 `MAINTAINERS'. Some existing architectures may be unmaintained, 4126 but it would be unusual to add support for a target that does not 4127 have a maintainer when support is added. 4128 4129 4130 File: gccint.info, Node: Testsuites, Prev: gcc Directory, Up: Source Tree 4131 4132 6.4 Testsuites 4133 ============== 4134 4135 GCC contains several testsuites to help maintain compiler quality. 4136 Most of the runtime libraries and language front ends in GCC have 4137 testsuites. Currently only the C language testsuites are documented 4138 here; FIXME: document the others. 4139 4140 * Menu: 4141 4142 * Test Idioms:: Idioms used in testsuite code. 4143 * Test Directives:: Directives used within DejaGnu tests. 4144 * Ada Tests:: The Ada language testsuites. 4145 * C Tests:: The C language testsuites. 4146 * libgcj Tests:: The Java library testsuites. 4147 * gcov Testing:: Support for testing gcov. 4148 * profopt Testing:: Support for testing profile-directed optimizations. 4149 * compat Testing:: Support for testing binary compatibility. 4150 4151 4152 File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4153 4154 6.4.1 Idioms Used in Testsuite Code 4155 ----------------------------------- 4156 4157 In general, C testcases have a trailing `-N.c', starting with `-1.c', 4158 in case other testcases with similar names are added later. If the 4159 test is a test of some well-defined feature, it should have a name 4160 referring to that feature such as `FEATURE-1.c'. If it does not test a 4161 well-defined feature but just happens to exercise a bug somewhere in 4162 the compiler, and a bug report has been filed for this bug in the GCC 4163 bug database, `prBUG-NUMBER-1.c' is the appropriate form of name. 4164 Otherwise (for miscellaneous bugs not filed in the GCC bug database), 4165 and previously more generally, test cases are named after the date on 4166 which they were added. This allows people to tell at a glance whether 4167 a test failure is because of a recently found bug that has not yet been 4168 fixed, or whether it may be a regression, but does not give any other 4169 information about the bug or where discussion of it may be found. Some 4170 other language testsuites follow similar conventions. 4171 4172 In the `gcc.dg' testsuite, it is often necessary to test that an error 4173 is indeed a hard error and not just a warning--for example, where it is 4174 a constraint violation in the C standard, which must become an error 4175 with `-pedantic-errors'. The following idiom, where the first line 4176 shown is line LINE of the file and the line that generates the error, 4177 is used for this: 4178 4179 /* { dg-bogus "warning" "warning in place of error" } */ 4180 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4181 4182 It may be necessary to check that an expression is an integer constant 4183 expression and has a certain value. To check that `E' has value `V', 4184 an idiom similar to the following is used: 4185 4186 char x[((E) == (V) ? 1 : -1)]; 4187 4188 In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions 4189 about the types of expressions. See, for example, 4190 `gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4191 rules for the types of conditional expressions in the C standard; see, 4192 for example, `gcc.dg/c99-intconst-1.c'. 4193 4194 It is useful to be able to test that optimizations are being made 4195 properly. This cannot be done in all cases, but it can be done where 4196 the optimization will lead to code being optimized away (for example, 4197 where flow analysis or alias analysis should show that certain code 4198 cannot be called) or to functions not being called because they have 4199 been expanded as built-in functions. Such tests go in 4200 `gcc.c-torture/execute'. Where code should be optimized away, a call 4201 to a nonexistent function such as `link_failure ()' may be inserted; a 4202 definition 4203 4204 #ifndef __OPTIMIZE__ 4205 void 4206 link_failure (void) 4207 { 4208 abort (); 4209 } 4210 #endif 4211 4212 will also be needed so that linking still succeeds when the test is run 4213 without optimization. When all calls to a built-in function should 4214 have been optimized and no calls to the non-built-in version of the 4215 function should remain, that function may be defined as `static' to 4216 call `abort ()' (although redeclaring a function as static may not work 4217 on all targets). 4218 4219 All testcases must be portable. Target-specific testcases must have 4220 appropriate code to avoid causing failures on unsupported systems; 4221 unfortunately, the mechanisms for this differ by directory. 4222 4223 FIXME: discuss non-C testsuites here. 4224 4225 4226 File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4227 4228 6.4.2 Directives used within DejaGnu tests 4229 ------------------------------------------ 4230 4231 Test directives appear within comments in a test source file and begin 4232 with `dg-'. Some of these are defined within DejaGnu and others are 4233 local to the GCC testsuite. 4234 4235 The order in which test directives appear in a test can be important: 4236 directives local to GCC sometimes override information used by the 4237 DejaGnu directives, which know nothing about the GCC directives, so the 4238 DejaGnu directives must precede GCC directives. 4239 4240 Several test directives include selectors which are usually preceded by 4241 the keyword `target' or `xfail'. A selector is: one or more target 4242 triplets, possibly including wildcard characters; a single 4243 effective-target keyword; or a logical expression. Depending on the 4244 context, the selector specifies whether a test is skipped and reported 4245 as unsupported or is expected to fail. Use `*-*-*' to match any target. 4246 Effective-target keywords are defined in `target-supports.exp' in the 4247 GCC testsuite. 4248 4249 A selector expression appears within curly braces and uses a single 4250 logical operator: one of `!', `&&', or `||'. An operand is another 4251 selector expression, an effective-target keyword, a single target 4252 triplet, or a list of target triplets within quotes or curly braces. 4253 For example: 4254 4255 { target { ! "hppa*-*-* ia64*-*-*" } } 4256 { target { powerpc*-*-* && lp64 } } 4257 { xfail { lp64 || vect_no_align } } 4258 4259 `{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4260 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4261 is executed. It is one of: 4262 4263 `preprocess' 4264 Compile with `-E' to run only the preprocessor. 4265 4266 `compile' 4267 Compile with `-S' to produce an assembly code file. 4268 4269 `assemble' 4270 Compile with `-c' to produce a relocatable object file. 4271 4272 `link' 4273 Compile, assemble, and link to produce an executable file. 4274 4275 `run' 4276 Produce and run an executable file, which is expected to 4277 return an exit code of 0. 4278 4279 The default is `compile'. That can be overridden for a set of 4280 tests by redefining `dg-do-what-default' within the `.exp' file 4281 for those tests. 4282 4283 If the directive includes the optional `{ target SELECTOR }' then 4284 the test is skipped unless the target system is included in the 4285 list of target triplets or matches the effective-target keyword. 4286 4287 If `do-what-keyword' is `run' and the directive includes the 4288 optional `{ xfail SELECTOR }' and the selector is met then the 4289 test is expected to fail. The `xfail' clause is ignored for other 4290 values of `do-what-keyword'; those tests can use directive 4291 `dg-xfail-if'. 4292 4293 `{ dg-options OPTIONS [{ target SELECTOR }] }' 4294 This DejaGnu directive provides a list of compiler options, to be 4295 used if the target system matches SELECTOR, that replace the 4296 default options used for this set of tests. 4297 4298 `{ dg-add-options FEATURE ... }' 4299 Add any compiler options that are needed to access certain 4300 features. This directive does nothing on targets that enable the 4301 features by default, or that don't provide them at all. It must 4302 come after all `dg-options' directives. 4303 4304 The supported values of FEATURE are: 4305 `c99_runtime' 4306 The target's C99 runtime (both headers and libraries). 4307 4308 `mips16_attribute' 4309 `mips16' function attributes. Only MIPS targets support this 4310 feature, and only then in certain modes. 4311 4312 `{ dg-skip-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }' 4313 Skip the test if the test system is included in SELECTOR and if 4314 each of the options in INCLUDE-OPTS is in the set of options with 4315 which the test would be compiled and if none of the options in 4316 EXCLUDE-OPTS is in the set of options with which the test would be 4317 compiled. 4318 4319 Use `"*"' for an empty INCLUDE-OPTS list and `""' for an empty 4320 EXCLUDE-OPTS list. 4321 4322 `{ dg-xfail-if COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }' 4323 Expect the test to fail if the conditions (which are the same as 4324 for `dg-skip-if') are met. 4325 4326 `{ dg-require-SUPPORT args }' 4327 Skip the test if the target does not provide the required support; 4328 see `gcc-dg.exp' in the GCC testsuite for the actual directives. 4329 These directives must appear after any `dg-do' directive in the 4330 test and before any `dg-additional-sources' directive. They 4331 require at least one argument, which can be an empty string if the 4332 specific procedure does not examine the argument. 4333 4334 `{ dg-require-effective-target KEYWORD }' 4335 Skip the test if the test target, including current multilib flags, 4336 is not covered by the effective-target keyword. This directive 4337 must appear after any `dg-do' directive in the test and before any 4338 `dg-additional-sources' directive. 4339 4340 `{ dg-shouldfail COMMENT { SELECTOR } { INCLUDE-OPTS } { EXCLUDE-OPTS } }' 4341 Expect the test executable to return a nonzero exit status if the 4342 conditions (which are the same as for `dg-skip-if') are met. 4343 4344 `{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4345 This DejaGnu directive appears on a source line that is expected 4346 to get an error message, or else specifies the source line 4347 associated with the message. If there is no message for that line 4348 or if the text of that message is not matched by REGEXP then the 4349 check fails and COMMENT is included in the `FAIL' message. The 4350 check does not look for the string `"error"' unless it is part of 4351 REGEXP. 4352 4353 `{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4354 This DejaGnu directive appears on a source line that is expected 4355 to get a warning message, or else specifies the source line 4356 associated with the message. If there is no message for that line 4357 or if the text of that message is not matched by REGEXP then the 4358 check fails and COMMENT is included in the `FAIL' message. The 4359 check does not look for the string `"warning"' unless it is part 4360 of REGEXP. 4361 4362 `{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4363 The line is expected to get a message other than an error or 4364 warning. If there is no message for that line or if the text of 4365 that message is not matched by REGEXP then the check fails and 4366 COMMENT is included in the `FAIL' message. 4367 4368 `{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4369 This DejaGnu directive appears on a source line that should not 4370 get a message matching REGEXP, or else specifies the source line 4371 associated with the bogus message. It is usually used with `xfail' 4372 to indicate that the message is a known problem for a particular 4373 set of targets. 4374 4375 `{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4376 This DejaGnu directive indicates that the test is expected to fail 4377 due to compiler messages that are not handled by `dg-error', 4378 `dg-warning' or `dg-bogus'. For this directive `xfail' has the 4379 same effect as `target'. 4380 4381 `{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4382 This DejaGnu directive compares REGEXP to the combined output that 4383 the test executable writes to `stdout' and `stderr'. 4384 4385 `{ dg-prune-output REGEXP }' 4386 Prune messages matching REGEXP from test output. 4387 4388 `{ dg-additional-files "FILELIST" }' 4389 Specify additional files, other than source files, that must be 4390 copied to the system where the compiler runs. 4391 4392 `{ dg-additional-sources "FILELIST" }' 4393 Specify additional source files to appear in the compile line 4394 following the main test file. 4395 4396 `{ dg-final { LOCAL-DIRECTIVE } }' 4397 This DejaGnu directive is placed within a comment anywhere in the 4398 source file and is processed after the test has been compiled and 4399 run. Multiple `dg-final' commands are processed in the order in 4400 which they appear in the source file. 4401 4402 The GCC testsuite defines the following directives to be used 4403 within `dg-final'. 4404 4405 `cleanup-coverage-files' 4406 Removes coverage data files generated for this test. 4407 4408 `cleanup-repo-files' 4409 Removes files generated for this test for `-frepo'. 4410 4411 `cleanup-rtl-dump SUFFIX' 4412 Removes RTL dump files generated for this test. 4413 4414 `cleanup-tree-dump SUFFIX' 4415 Removes tree dump files matching SUFFIX which were generated 4416 for this test. 4417 4418 `cleanup-saved-temps' 4419 Removes files for the current test which were kept for 4420 `--save-temps'. 4421 4422 `scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 4423 Passes if REGEXP matches text in FILENAME. 4424 4425 `scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 4426 Passes if REGEXP does not match text in FILENAME. 4427 4428 `scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 4429 Passes if SYMBOL is defined as a hidden symbol in the test's 4430 assembly output. 4431 4432 `scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 4433 Passes if SYMBOL is not defined as a hidden symbol in the 4434 test's assembly output. 4435 4436 `scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 4437 Passes if REGEX is matched exactly NUM times in the test's 4438 assembler output. 4439 4440 `scan-assembler REGEX [{ target/xfail SELECTOR }]' 4441 Passes if REGEX matches text in the test's assembler output. 4442 4443 `scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 4444 Passes if REGEX does not match text in the test's assembler 4445 output. 4446 4447 `scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 4448 Passes if REGEX matches text in the test's demangled 4449 assembler output. 4450 4451 `scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 4452 Passes if REGEX does not match text in the test's demangled 4453 assembler output. 4454 4455 `scan-tree-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 4456 Passes if REGEX is found exactly NUM times in the dump file 4457 with suffix SUFFIX. 4458 4459 `scan-tree-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 4460 Passes if REGEX matches text in the dump file with suffix 4461 SUFFIX. 4462 4463 `scan-tree-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 4464 Passes if REGEX does not match text in the dump file with 4465 suffix SUFFIX. 4466 4467 `scan-tree-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 4468 Passes if REGEX matches demangled text in the dump file with 4469 suffix SUFFIX. 4470 4471 `scan-tree-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 4472 Passes if REGEX does not match demangled text in the dump 4473 file with suffix SUFFIX. 4474 4475 `output-exists [{ target/xfail SELECTOR }]' 4476 Passes if compiler output file exists. 4477 4478 `output-exists-not [{ target/xfail SELECTOR }]' 4479 Passes if compiler output file does not exist. 4480 4481 `run-gcov SOURCEFILE' 4482 Check line counts in `gcov' tests. 4483 4484 `run-gcov [branches] [calls] { OPTS SOURCEFILE }' 4485 Check branch and/or call counts, in addition to line counts, 4486 in `gcov' tests. 4487 4488 4489 File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 4490 4491 6.4.3 Ada Language Testsuites 4492 ----------------------------- 4493 4494 The Ada testsuite includes executable tests from the ACATS 2.5 4495 testsuite, publicly available at 4496 `http://www.adaic.org/compilers/acats/2.5' 4497 4498 These tests are integrated in the GCC testsuite in the 4499 `gcc/testsuite/ada/acats' directory, and enabled automatically when 4500 running `make check', assuming the Ada language has been enabled when 4501 configuring GCC. 4502 4503 You can also run the Ada testsuite independently, using `make 4504 check-ada', or run a subset of the tests by specifying which chapter to 4505 run, e.g.: 4506 4507 $ make check-ada CHAPTERS="c3 c9" 4508 4509 The tests are organized by directory, each directory corresponding to 4510 a chapter of the Ada Reference Manual. So for example, c9 corresponds 4511 to chapter 9, which deals with tasking features of the language. 4512 4513 There is also an extra chapter called `gcc' containing a template for 4514 creating new executable tests. 4515 4516 The tests are run using two `sh' scripts: `run_acats' and 4517 `run_all.sh'. To run the tests using a simulator or a cross target, 4518 see the small customization section at the top of `run_all.sh'. 4519 4520 These tests are run using the build tree: they can be run without doing 4521 a `make install'. 4522 4523 4524 File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 4525 4526 6.4.4 C Language Testsuites 4527 --------------------------- 4528 4529 GCC contains the following C language testsuites, in the 4530 `gcc/testsuite' directory: 4531 4532 `gcc.dg' 4533 This contains tests of particular features of the C compiler, 4534 using the more modern `dg' harness. Correctness tests for various 4535 compiler features should go here if possible. 4536 4537 Magic comments determine whether the file is preprocessed, 4538 compiled, linked or run. In these tests, error and warning 4539 message texts are compared against expected texts or regular 4540 expressions given in comments. These tests are run with the 4541 options `-ansi -pedantic' unless other options are given in the 4542 test. Except as noted below they are not run with multiple 4543 optimization options. 4544 4545 `gcc.dg/compat' 4546 This subdirectory contains tests for binary compatibility using 4547 `compat.exp', which in turn uses the language-independent support 4548 (*note Support for testing binary compatibility: compat Testing.). 4549 4550 `gcc.dg/cpp' 4551 This subdirectory contains tests of the preprocessor. 4552 4553 `gcc.dg/debug' 4554 This subdirectory contains tests for debug formats. Tests in this 4555 subdirectory are run for each debug format that the compiler 4556 supports. 4557 4558 `gcc.dg/format' 4559 This subdirectory contains tests of the `-Wformat' format 4560 checking. Tests in this directory are run with and without 4561 `-DWIDE'. 4562 4563 `gcc.dg/noncompile' 4564 This subdirectory contains tests of code that should not compile 4565 and does not need any special compilation options. They are run 4566 with multiple optimization options, since sometimes invalid code 4567 crashes the compiler with optimization. 4568 4569 `gcc.dg/special' 4570 FIXME: describe this. 4571 4572 `gcc.c-torture' 4573 This contains particular code fragments which have historically 4574 broken easily. These tests are run with multiple optimization 4575 options, so tests for features which only break at some 4576 optimization levels belong here. This also contains tests to 4577 check that certain optimizations occur. It might be worthwhile to 4578 separate the correctness tests cleanly from the code quality 4579 tests, but it hasn't been done yet. 4580 4581 `gcc.c-torture/compat' 4582 FIXME: describe this. 4583 4584 This directory should probably not be used for new tests. 4585 4586 `gcc.c-torture/compile' 4587 This testsuite contains test cases that should compile, but do not 4588 need to link or run. These test cases are compiled with several 4589 different combinations of optimization options. All warnings are 4590 disabled for these test cases, so this directory is not suitable if 4591 you wish to test for the presence or absence of compiler warnings. 4592 While special options can be set, and tests disabled on specific 4593 platforms, by the use of `.x' files, mostly these test cases 4594 should not contain platform dependencies. FIXME: discuss how 4595 defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used. 4596 4597 `gcc.c-torture/execute' 4598 This testsuite contains test cases that should compile, link and 4599 run; otherwise the same comments as for `gcc.c-torture/compile' 4600 apply. 4601 4602 `gcc.c-torture/execute/ieee' 4603 This contains tests which are specific to IEEE floating point. 4604 4605 `gcc.c-torture/unsorted' 4606 FIXME: describe this. 4607 4608 This directory should probably not be used for new tests. 4609 4610 `gcc.c-torture/misc-tests' 4611 This directory contains C tests that require special handling. 4612 Some of these tests have individual expect files, and others share 4613 special-purpose expect files: 4614 4615 ``bprob*.c'' 4616 Test `-fbranch-probabilities' using `bprob.exp', which in 4617 turn uses the generic, language-independent framework (*note 4618 Support for testing profile-directed optimizations: profopt 4619 Testing.). 4620 4621 ``dg-*.c'' 4622 Test the testsuite itself using `dg-test.exp'. 4623 4624 ``gcov*.c'' 4625 Test `gcov' output using `gcov.exp', which in turn uses the 4626 language-independent support (*note Support for testing gcov: 4627 gcov Testing.). 4628 4629 ``i386-pf-*.c'' 4630 Test i386-specific support for data prefetch using 4631 `i386-prefetch.exp'. 4632 4633 4634 FIXME: merge in `testsuite/README.gcc' and discuss the format of test 4635 cases and magic comments more. 4636 4637 4638 File: gccint.info, Node: libgcj Tests, Next: gcov Testing, Prev: C Tests, Up: Testsuites 4639 4640 6.4.5 The Java library testsuites. 4641 ---------------------------------- 4642 4643 Runtime tests are executed via `make check' in the 4644 `TARGET/libjava/testsuite' directory in the build tree. Additional 4645 runtime tests can be checked into this testsuite. 4646 4647 Regression testing of the core packages in libgcj is also covered by 4648 the Mauve testsuite. The Mauve Project develops tests for the Java 4649 Class Libraries. These tests are run as part of libgcj testing by 4650 placing the Mauve tree within the libjava testsuite sources at 4651 `libjava/testsuite/libjava.mauve/mauve', or by specifying the location 4652 of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'. 4653 4654 To detect regressions, a mechanism in `mauve.exp' compares the 4655 failures for a test run against the list of expected failures in 4656 `libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 4657 Update this file when adding new failing tests to Mauve, or when fixing 4658 bugs in libgcj that had caused Mauve test failures. 4659 4660 We encourage developers to contribute test cases to Mauve. 4661 4662 4663 File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: libgcj Tests, Up: Testsuites 4664 4665 6.4.6 Support for testing `gcov' 4666 -------------------------------- 4667 4668 Language-independent support for testing `gcov', and for checking that 4669 branch profiling produces expected values, is provided by the expect 4670 file `gcov.exp'. `gcov' tests also rely on procedures in `gcc.dg.exp' 4671 to compile and run the test program. A typical `gcov' test contains 4672 the following DejaGnu commands within comments: 4673 4674 { dg-options "-fprofile-arcs -ftest-coverage" } 4675 { dg-do run { target native } } 4676 { dg-final { run-gcov sourcefile } } 4677 4678 Checks of `gcov' output can include line counts, branch percentages, 4679 and call return percentages. All of these checks are requested via 4680 commands that appear in comments in the test's source file. Commands 4681 to check line counts are processed by default. Commands to check 4682 branch percentages and call return percentages are processed if the 4683 `run-gcov' command has arguments `branches' or `calls', respectively. 4684 For example, the following specifies checking both, as well as passing 4685 `-b' to `gcov': 4686 4687 { dg-final { run-gcov branches calls { -b sourcefile } } } 4688 4689 A line count command appears within a comment on the source line that 4690 is expected to get the specified count and has the form `count(CNT)'. 4691 A test should only check line counts for lines that will get the same 4692 count for any architecture. 4693 4694 Commands to check branch percentages (`branch') and call return 4695 percentages (`returns') are very similar to each other. A beginning 4696 command appears on or before the first of a range of lines that will 4697 report the percentage, and the ending command follows that range of 4698 lines. The beginning command can include a list of percentages, all of 4699 which are expected to be found within the range. A range is terminated 4700 by the next command of the same kind. A command `branch(end)' or 4701 `returns(end)' marks the end of a range without starting a new one. 4702 For example: 4703 4704 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 4705 /* branch(end) */ 4706 foo (i, j); 4707 4708 For a call return percentage, the value specified is the percentage of 4709 calls reported to return. For a branch percentage, the value is either 4710 the expected percentage or 100 minus that value, since the direction of 4711 a branch can differ depending on the target or the optimization level. 4712 4713 Not all branches and calls need to be checked. A test should not 4714 check for branches that might be optimized away or replaced with 4715 predicated instructions. Don't check for calls inserted by the 4716 compiler or ones that might be inlined or optimized away. 4717 4718 A single test can check for combinations of line counts, branch 4719 percentages, and call return percentages. The command to check a line 4720 count must appear on the line that will report that count, but commands 4721 to check branch percentages and call return percentages can bracket the 4722 lines that report them. 4723 4724 4725 File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 4726 4727 6.4.7 Support for testing profile-directed optimizations 4728 -------------------------------------------------------- 4729 4730 The file `profopt.exp' provides language-independent support for 4731 checking correct execution of a test built with profile-directed 4732 optimization. This testing requires that a test program be built and 4733 executed twice. The first time it is compiled to generate profile 4734 data, and the second time it is compiled to use the data that was 4735 generated during the first execution. The second execution is to 4736 verify that the test produces the expected results. 4737 4738 To check that the optimization actually generated better code, a test 4739 can be built and run a third time with normal optimizations to verify 4740 that the performance is better with the profile-directed optimizations. 4741 `profopt.exp' has the beginnings of this kind of support. 4742 4743 `profopt.exp' provides generic support for profile-directed 4744 optimizations. Each set of tests that uses it provides information 4745 about a specific optimization: 4746 4747 `tool' 4748 tool being tested, e.g., `gcc' 4749 4750 `profile_option' 4751 options used to generate profile data 4752 4753 `feedback_option' 4754 options used to optimize using that profile data 4755 4756 `prof_ext' 4757 suffix of profile data files 4758 4759 `PROFOPT_OPTIONS' 4760 list of options with which to run each test, similar to the lists 4761 for torture tests 4762 4763 4764 File: gccint.info, Node: compat Testing, Prev: profopt Testing, Up: Testsuites 4765 4766 6.4.8 Support for testing binary compatibility 4767 ---------------------------------------------- 4768 4769 The file `compat.exp' provides language-independent support for binary 4770 compatibility testing. It supports testing interoperability of two 4771 compilers that follow the same ABI, or of multiple sets of compiler 4772 options that should not affect binary compatibility. It is intended to 4773 be used for testsuites that complement ABI testsuites. 4774 4775 A test supported by this framework has three parts, each in a separate 4776 source file: a main program and two pieces that interact with each 4777 other to split up the functionality being tested. 4778 4779 `TESTNAME_main.SUFFIX' 4780 Contains the main program, which calls a function in file 4781 `TESTNAME_x.SUFFIX'. 4782 4783 `TESTNAME_x.SUFFIX' 4784 Contains at least one call to a function in `TESTNAME_y.SUFFIX'. 4785 4786 `TESTNAME_y.SUFFIX' 4787 Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'. 4788 4789 Within each test, the main program and one functional piece are 4790 compiled by the GCC under test. The other piece can be compiled by an 4791 alternate compiler. If no alternate compiler is specified, then all 4792 three source files are all compiled by the GCC under test. You can 4793 specify pairs of sets of compiler options. The first element of such a 4794 pair specifies options used with the GCC under test, and the second 4795 element of the pair specifies options used with the alternate compiler. 4796 Each test is compiled with each pair of options. 4797 4798 `compat.exp' defines default pairs of compiler options. These can be 4799 overridden by defining the environment variable `COMPAT_OPTIONS' as: 4800 4801 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 4802 ...[list {TSTN} {ALTN}]]" 4803 4804 where TSTI and ALTI are lists of options, with TSTI used by the 4805 compiler under test and ALTI used by the alternate compiler. For 4806 example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 4807 the test is first built with `-g -O0' by the compiler under test and 4808 with `-O3' by the alternate compiler. The test is built a second time 4809 using `-fpic' by the compiler under test and `-fPIC -O2' by the 4810 alternate compiler. 4811 4812 An alternate compiler is specified by defining an environment variable 4813 to be the full pathname of an installed compiler; for C define 4814 `ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'. These 4815 will be written to the `site.exp' file used by DejaGnu. The default is 4816 to build each test with the compiler under test using the first of each 4817 pair of compiler options from `COMPAT_OPTIONS'. When 4818 `ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is 4819 built using the compiler under test but with combinations of the 4820 options from `COMPAT_OPTIONS'. 4821 4822 To run only the C++ compatibility suite using the compiler under test 4823 and another version of GCC using specific compiler options, do the 4824 following from `OBJDIR/gcc': 4825 4826 rm site.exp 4827 make -k \ 4828 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 4829 COMPAT_OPTIONS="lists as shown above" \ 4830 check-c++ \ 4831 RUNTESTFLAGS="compat.exp" 4832 4833 A test that fails when the source files are compiled with different 4834 compilers, but passes when the files are compiled with the same 4835 compiler, demonstrates incompatibility of the generated code or runtime 4836 support. A test that fails for the alternate compiler but passes for 4837 the compiler under test probably tests for a bug that was fixed in the 4838 compiler under test but is present in the alternate compiler. 4839 4840 The binary compatibility tests support a small number of test framework 4841 commands that appear within comments in a test file. 4842 4843 `dg-require-*' 4844 These commands can be used in `TESTNAME_main.SUFFIX' to skip the 4845 test if specific support is not available on the target. 4846 4847 `dg-options' 4848 The specified options are used for compiling this particular source 4849 file, appended to the options from `COMPAT_OPTIONS'. When this 4850 command appears in `TESTNAME_main.SUFFIX' the options are also 4851 used to link the test program. 4852 4853 `dg-xfail-if' 4854 This command can be used in a secondary source file to specify that 4855 compilation is expected to fail for particular options on 4856 particular targets. 4857 4858 4859 File: gccint.info, Node: Options, Next: Passes, Prev: Source Tree, Up: Top 4860 4861 7 Option specification files 4862 **************************** 4863 4864 Most GCC command-line options are described by special option 4865 definition files, the names of which conventionally end in `.opt'. 4866 This chapter describes the format of these files. 4867 4868 * Menu: 4869 4870 * Option file format:: The general layout of the files 4871 * Option properties:: Supported option properties 4872 4873 4874 File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 4875 4876 7.1 Option file format 4877 ====================== 4878 4879 Option files are a simple list of records in which each field occupies 4880 its own line and in which the records themselves are separated by blank 4881 lines. Comments may appear on their own line anywhere within the file 4882 and are preceded by semicolons. Whitespace is allowed before the 4883 semicolon. 4884 4885 The files can contain the following types of record: 4886 4887 * A language definition record. These records have two fields: the 4888 string `Language' and the name of the language. Once a language 4889 has been declared in this way, it can be used as an option 4890 property. *Note Option properties::. 4891 4892 * An option definition record. These records have the following 4893 fields: 4894 4895 1. the name of the option, with the leading "-" removed 4896 4897 2. a space-separated list of option properties (*note Option 4898 properties::) 4899 4900 3. the help text to use for `--help' (omitted if the second field 4901 contains the `Undocumented' property). 4902 4903 By default, all options beginning with "f", "W" or "m" are 4904 implicitly assumed to take a "no-" form. This form should not be 4905 listed separately. If an option beginning with one of these 4906 letters does not have a "no-" form, you can use the 4907 `RejectNegative' property to reject it. 4908 4909 The help text is automatically line-wrapped before being displayed. 4910 Normally the name of the option is printed on the left-hand side of 4911 the output and the help text is printed on the right. However, if 4912 the help text contains a tab character, the text to the left of 4913 the tab is used instead of the option's name and the text to the 4914 right of the tab forms the help text. This allows you to 4915 elaborate on what type of argument the option takes. 4916 4917 * A target mask record. These records have one field of the form 4918 `Mask(X)'. The options-processing script will automatically 4919 allocate a bit in `target_flags' (*note Run-time Target::) for 4920 each mask name X and set the macro `MASK_X' to the appropriate 4921 bitmask. It will also declare a `TARGET_X' macro that has the 4922 value 1 when bit `MASK_X' is set and 0 otherwise. 4923 4924 They are primarily intended to declare target masks that are not 4925 associated with user options, either because these masks represent 4926 internal switches or because the options are not available on all 4927 configurations and yet the masks always need to be defined. 4928 4929 4930 File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 4931 4932 7.2 Option properties 4933 ===================== 4934 4935 The second field of an option record can specify the following 4936 properties: 4937 4938 `Common' 4939 The option is available for all languages and targets. 4940 4941 `Target' 4942 The option is available for all languages but is target-specific. 4943 4944 `LANGUAGE' 4945 The option is available when compiling for the given language. 4946 4947 It is possible to specify several different languages for the same 4948 option. Each LANGUAGE must have been declared by an earlier 4949 `Language' record. *Note Option file format::. 4950 4951 `RejectNegative' 4952 The option does not have a "no-" form. All options beginning with 4953 "f", "W" or "m" are assumed to have a "no-" form unless this 4954 property is used. 4955 4956 `Negative(OTHERNAME)' 4957 The option will turn off another option OTHERNAME, which is the 4958 the option name with the leading "-" removed. This chain action 4959 will propagate through the `Negative' property of the option to be 4960 turned off. 4961 4962 `Joined' 4963 `Separate' 4964 The option takes a mandatory argument. `Joined' indicates that 4965 the option and argument can be included in the same `argv' entry 4966 (as with `-mflush-func=NAME', for example). `Separate' indicates 4967 that the option and argument can be separate `argv' entries (as 4968 with `-o'). An option is allowed to have both of these properties. 4969 4970 `JoinedOrMissing' 4971 The option takes an optional argument. If the argument is given, 4972 it will be part of the same `argv' entry as the option itself. 4973 4974 This property cannot be used alongside `Joined' or `Separate'. 4975 4976 `UInteger' 4977 The option's argument is a non-negative integer. The option parser 4978 will check and convert the argument before passing it to the 4979 relevant option handler. 4980 4981 `Var(VAR)' 4982 The state of this option should be stored in variable VAR. The 4983 way that the state is stored depends on the type of option: 4984 4985 * If the option uses the `Mask' or `InverseMask' properties, 4986 VAR is the integer variable that contains the mask. 4987 4988 * If the option is a normal on/off switch, VAR is an integer 4989 variable that is nonzero when the option is enabled. The 4990 options parser will set the variable to 1 when the positive 4991 form of the option is used and 0 when the "no-" form is used. 4992 4993 * If the option takes an argument and has the `UInteger' 4994 property, VAR is an integer variable that stores the value of 4995 the argument. 4996 4997 * Otherwise, if the option takes an argument, VAR is a pointer 4998 to the argument string. The pointer will be null if the 4999 argument is optional and wasn't given. 5000 5001 The option-processing script will usually declare VAR in 5002 `options.c' and leave it to be zero-initialized at start-up time. 5003 You can modify this behavior using `VarExists' and `Init'. 5004 5005 `Var(VAR, SET)' 5006 The option controls an integer variable VAR and is active when VAR 5007 equals SET. The option parser will set VAR to SET when the 5008 positive form of the option is used and `!SET' when the "no-" form 5009 is used. 5010 5011 VAR is declared in the same way as for the single-argument form 5012 described above. 5013 5014 `VarExists' 5015 The variable specified by the `Var' property already exists. No 5016 definition should be added to `options.c' in response to this 5017 option record. 5018 5019 You should use this property only if the variable is declared 5020 outside `options.c'. 5021 5022 `Init(VALUE)' 5023 The variable specified by the `Var' property should be statically 5024 initialized to VALUE. 5025 5026 `Mask(NAME)' 5027 The option is associated with a bit in the `target_flags' variable 5028 (*note Run-time Target::) and is active when that bit is set. You 5029 may also specify `Var' to select a variable other than 5030 `target_flags'. 5031 5032 The options-processing script will automatically allocate a unique 5033 bit for the option. If the option is attached to `target_flags', 5034 the script will set the macro `MASK_NAME' to the appropriate 5035 bitmask. It will also declare a `TARGET_NAME' macro that has the 5036 value 1 when the option is active and 0 otherwise. If you use 5037 `Var' to attach the option to a different variable, the associated 5038 macros are called `OPTION_MASK_NAME' and `OPTION_NAME' 5039 respectively. 5040 5041 You can disable automatic bit allocation using `MaskExists'. 5042 5043 `InverseMask(OTHERNAME)' 5044 `InverseMask(OTHERNAME, THISNAME)' 5045 The option is the inverse of another option that has the 5046 `Mask(OTHERNAME)' property. If THISNAME is given, the 5047 options-processing script will declare a `TARGET_THISNAME' macro 5048 that is 1 when the option is active and 0 otherwise. 5049 5050 `MaskExists' 5051 The mask specified by the `Mask' property already exists. No 5052 `MASK' or `TARGET' definitions should be added to `options.h' in 5053 response to this option record. 5054 5055 The main purpose of this property is to support synonymous options. 5056 The first option should use `Mask(NAME)' and the others should use 5057 `Mask(NAME) MaskExists'. 5058 5059 `Report' 5060 The state of the option should be printed by `-fverbose-asm'. 5061 5062 `Undocumented' 5063 The option is deliberately missing documentation and should not be 5064 included in the `--help' output. 5065 5066 `Condition(COND)' 5067 The option should only be accepted if preprocessor condition COND 5068 is true. Note that any C declarations associated with the option 5069 will be present even if COND is false; COND simply controls 5070 whether the option is accepted and whether it is printed in the 5071 `--help' output. 5072 5073 5074 File: gccint.info, Node: Passes, Next: Trees, Prev: Options, Up: Top 5075 5076 8 Passes and Files of the Compiler 5077 ********************************** 5078 5079 This chapter is dedicated to giving an overview of the optimization and 5080 code generation passes of the compiler. In the process, it describes 5081 some of the language front end interface, though this description is no 5082 where near complete. 5083 5084 * Menu: 5085 5086 * Parsing pass:: The language front end turns text into bits. 5087 * Gimplification pass:: The bits are turned into something we can optimize. 5088 * Pass manager:: Sequencing the optimization passes. 5089 * Tree-SSA passes:: Optimizations on a high-level representation. 5090 * RTL passes:: Optimizations on a low-level representation. 5091 5092 5093 File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes 5094 5095 8.1 Parsing pass 5096 ================ 5097 5098 The language front end is invoked only once, via 5099 `lang_hooks.parse_file', to parse the entire input. The language front 5100 end may use any intermediate language representation deemed 5101 appropriate. The C front end uses GENERIC trees (CROSSREF), plus a 5102 double handful of language specific tree codes defined in 5103 `c-common.def'. The Fortran front end uses a completely different 5104 private representation. 5105 5106 At some point the front end must translate the representation used in 5107 the front end to a representation understood by the language-independent 5108 portions of the compiler. Current practice takes one of two forms. 5109 The C front end manually invokes the gimplifier (CROSSREF) on each 5110 function, and uses the gimplifier callbacks to convert the 5111 language-specific tree nodes directly to GIMPLE (CROSSREF) before 5112 passing the function off to be compiled. The Fortran front end 5113 converts from a private representation to GENERIC, which is later 5114 lowered to GIMPLE when the function is compiled. Which route to choose 5115 probably depends on how well GENERIC (plus extensions) can be made to 5116 match up with the source language and necessary parsing data structures. 5117 5118 BUG: Gimplification must occur before nested function lowering, and 5119 nested function lowering must be done by the front end before passing 5120 the data off to cgraph. 5121 5122 TODO: Cgraph should control nested function lowering. It would only 5123 be invoked when it is certain that the outer-most function is used. 5124 5125 TODO: Cgraph needs a gimplify_function callback. It should be invoked 5126 when (1) it is certain that the function is used, (2) warning flags 5127 specified by the user require some amount of compilation in order to 5128 honor, (3) the language indicates that semantic analysis is not 5129 complete until gimplification occurs. Hum... this sounds overly 5130 complicated. Perhaps we should just have the front end gimplify 5131 always; in most cases it's only one function call. 5132 5133 The front end needs to pass all function definitions and top level 5134 declarations off to the middle-end so that they can be compiled and 5135 emitted to the object file. For a simple procedural language, it is 5136 usually most convenient to do this as each top level declaration or 5137 definition is seen. There is also a distinction to be made between 5138 generating functional code and generating complete debug information. 5139 The only thing that is absolutely required for functional code is that 5140 function and data _definitions_ be passed to the middle-end. For 5141 complete debug information, function, data and type declarations should 5142 all be passed as well. 5143 5144 In any case, the front end needs each complete top-level function or 5145 data declaration, and each data definition should be passed to 5146 `rest_of_decl_compilation'. Each complete type definition should be 5147 passed to `rest_of_type_compilation'. Each function definition should 5148 be passed to `cgraph_finalize_function'. 5149 5150 TODO: I know rest_of_compilation currently has all sorts of 5151 rtl-generation semantics. I plan to move all code generation bits 5152 (both tree and rtl) to compile_function. Should we hide cgraph from 5153 the front ends and move back to rest_of_compilation as the official 5154 interface? Possibly we should rename all three interfaces such that 5155 the names match in some meaningful way and that is more descriptive 5156 than "rest_of". 5157 5158 The middle-end will, at its option, emit the function and data 5159 definitions immediately or queue them for later processing. 5160 5161 5162 File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes 5163 5164 8.2 Gimplification pass 5165 ======================= 5166 5167 "Gimplification" is a whimsical term for the process of converting the 5168 intermediate representation of a function into the GIMPLE language 5169 (CROSSREF). The term stuck, and so words like "gimplification", 5170 "gimplify", "gimplifier" and the like are sprinkled throughout this 5171 section of code. 5172 5173 While a front end may certainly choose to generate GIMPLE directly if 5174 it chooses, this can be a moderately complex process unless the 5175 intermediate language used by the front end is already fairly simple. 5176 Usually it is easier to generate GENERIC trees plus extensions and let 5177 the language-independent gimplifier do most of the work. 5178 5179 The main entry point to this pass is `gimplify_function_tree' located 5180 in `gimplify.c'. From here we process the entire function gimplifying 5181 each statement in turn. The main workhorse for this pass is 5182 `gimplify_expr'. Approximately everything passes through here at least 5183 once, and it is from here that we invoke the `lang_hooks.gimplify_expr' 5184 callback. 5185 5186 The callback should examine the expression in question and return 5187 `GS_UNHANDLED' if the expression is not a language specific construct 5188 that requires attention. Otherwise it should alter the expression in 5189 some way to such that forward progress is made toward producing valid 5190 GIMPLE. If the callback is certain that the transformation is complete 5191 and the expression is valid GIMPLE, it should return `GS_ALL_DONE'. 5192 Otherwise it should return `GS_OK', which will cause the expression to 5193 be processed again. If the callback encounters an error during the 5194 transformation (because the front end is relying on the gimplification 5195 process to finish semantic checks), it should return `GS_ERROR'. 5196 5197 5198 File: gccint.info, Node: Pass manager, Next: Tree-SSA passes, Prev: Gimplification pass, Up: Passes 5199 5200 8.3 Pass manager 5201 ================ 5202 5203 The pass manager is located in `passes.c', `tree-optimize.c' and 5204 `tree-pass.h'. Its job is to run all of the individual passes in the 5205 correct order, and take care of standard bookkeeping that applies to 5206 every pass. 5207 5208 The theory of operation is that each pass defines a structure that 5209 represents everything we need to know about that pass--when it should 5210 be run, how it should be run, what intermediate language form or 5211 on-the-side data structures it needs. We register the pass to be run 5212 in some particular order, and the pass manager arranges for everything 5213 to happen in the correct order. 5214 5215 The actuality doesn't completely live up to the theory at present. 5216 Command-line switches and `timevar_id_t' enumerations must still be 5217 defined elsewhere. The pass manager validates constraints but does not 5218 attempt to (re-)generate data structures or lower intermediate language 5219 form based on the requirements of the next pass. Nevertheless, what is 5220 present is useful, and a far sight better than nothing at all. 5221 5222 TODO: describe the global variables set up by the pass manager, and a 5223 brief description of how a new pass should use it. I need to look at 5224 what info rtl passes use first.... 5225 5226 5227 File: gccint.info, Node: Tree-SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 5228 5229 8.4 Tree-SSA passes 5230 =================== 5231 5232 The following briefly describes the tree optimization passes that are 5233 run after gimplification and what source files they are located in. 5234 5235 * Remove useless statements 5236 5237 This pass is an extremely simple sweep across the gimple code in 5238 which we identify obviously dead code and remove it. Here we do 5239 things like simplify `if' statements with constant conditions, 5240 remove exception handling constructs surrounding code that 5241 obviously cannot throw, remove lexical bindings that contain no 5242 variables, and other assorted simplistic cleanups. The idea is to 5243 get rid of the obvious stuff quickly rather than wait until later 5244 when it's more work to get rid of it. This pass is located in 5245 `tree-cfg.c' and described by `pass_remove_useless_stmts'. 5246 5247 * Mudflap declaration registration 5248 5249 If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize 5250 Options.) is enabled, we generate code to register some variable 5251 declarations with the mudflap runtime. Specifically, the runtime 5252 tracks the lifetimes of those variable declarations that have 5253 their addresses taken, or whose bounds are unknown at compile time 5254 (`extern'). This pass generates new exception handling constructs 5255 (`try'/`finally'), and so must run before those are lowered. In 5256 addition, the pass enqueues declarations of static variables whose 5257 lifetimes extend to the entire program. The pass is located in 5258 `tree-mudflap.c' and is described by `pass_mudflap_1'. 5259 5260 * OpenMP lowering 5261 5262 If OpenMP generation (`-fopenmp') is enabled, this pass lowers 5263 OpenMP constructs into GIMPLE. 5264 5265 Lowering of OpenMP constructs involves creating replacement 5266 expressions for local variables that have been mapped using data 5267 sharing clauses, exposing the control flow of most synchronization 5268 directives and adding region markers to facilitate the creation of 5269 the control flow graph. The pass is located in `omp-low.c' and is 5270 described by `pass_lower_omp'. 5271 5272 * OpenMP expansion 5273 5274 If OpenMP generation (`-fopenmp') is enabled, this pass expands 5275 parallel regions into their own functions to be invoked by the 5276 thread library. The pass is located in `omp-low.c' and is 5277 described by `pass_expand_omp'. 5278 5279 * Lower control flow 5280 5281 This pass flattens `if' statements (`COND_EXPR') and moves lexical 5282 bindings (`BIND_EXPR') out of line. After this pass, all `if' 5283 statements will have exactly two `goto' statements in its `then' 5284 and `else' arms. Lexical binding information for each statement 5285 will be found in `TREE_BLOCK' rather than being inferred from its 5286 position under a `BIND_EXPR'. This pass is found in 5287 `gimple-low.c' and is described by `pass_lower_cf'. 5288 5289 * Lower exception handling control flow 5290 5291 This pass decomposes high-level exception handling constructs 5292 (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that 5293 explicitly represents the control flow involved. After this pass, 5294 `lookup_stmt_eh_region' will return a non-negative number for any 5295 statement that may have EH control flow semantics; examine 5296 `tree_can_throw_internal' or `tree_can_throw_external' for exact 5297 semantics. Exact control flow may be extracted from 5298 `foreach_reachable_handler'. The EH region nesting tree is defined 5299 in `except.h' and built in `except.c'. The lowering pass itself 5300 is in `tree-eh.c' and is described by `pass_lower_eh'. 5301 5302 * Build the control flow graph 5303 5304 This pass decomposes a function into basic blocks and creates all 5305 of the edges that connect them. It is located in `tree-cfg.c' and 5306 is described by `pass_build_cfg'. 5307 5308 * Find all referenced variables 5309 5310 This pass walks the entire function and collects an array of all 5311 variables referenced in the function, `referenced_vars'. The 5312 index at which a variable is found in the array is used as a UID 5313 for the variable within this function. This data is needed by the 5314 SSA rewriting routines. The pass is located in `tree-dfa.c' and 5315 is described by `pass_referenced_vars'. 5316 5317 * Enter static single assignment form 5318 5319 This pass rewrites the function such that it is in SSA form. After 5320 this pass, all `is_gimple_reg' variables will be referenced by 5321 `SSA_NAME', and all occurrences of other variables will be 5322 annotated with `VDEFS' and `VUSES'; PHI nodes will have been 5323 inserted as necessary for each basic block. This pass is located 5324 in `tree-ssa.c' and is described by `pass_build_ssa'. 5325 5326 * Warn for uninitialized variables 5327 5328 This pass scans the function for uses of `SSA_NAME's that are fed 5329 by default definition. For non-parameter variables, such uses are 5330 uninitialized. The pass is run twice, before and after 5331 optimization. In the first pass we only warn for uses that are 5332 positively uninitialized; in the second pass we warn for uses that 5333 are possibly uninitialized. The pass is located in `tree-ssa.c' 5334 and is defined by `pass_early_warn_uninitialized' and 5335 `pass_late_warn_uninitialized'. 5336 5337 * Dead code elimination 5338 5339 This pass scans the function for statements without side effects 5340 whose result is unused. It does not do memory life analysis, so 5341 any value that is stored in memory is considered used. The pass 5342 is run multiple times throughout the optimization process. It is 5343 located in `tree-ssa-dce.c' and is described by `pass_dce'. 5344 5345 * Dominator optimizations 5346 5347 This pass performs trivial dominator-based copy and constant 5348 propagation, expression simplification, and jump threading. It is 5349 run multiple times throughout the optimization process. It it 5350 located in `tree-ssa-dom.c' and is described by `pass_dominator'. 5351 5352 * Forward propagation of single-use variables 5353 5354 This pass attempts to remove redundant computation by substituting 5355 variables that are used once into the expression that uses them and 5356 seeing if the result can be simplified. It is located in 5357 `tree-ssa-forwprop.c' and is described by `pass_forwprop'. 5358 5359 * Copy Renaming 5360 5361 This pass attempts to change the name of compiler temporaries 5362 involved in copy operations such that SSA->normal can coalesce the 5363 copy away. When compiler temporaries are copies of user 5364 variables, it also renames the compiler temporary to the user 5365 variable resulting in better use of user symbols. It is located 5366 in `tree-ssa-copyrename.c' and is described by `pass_copyrename'. 5367 5368 * PHI node optimizations 5369 5370 This pass recognizes forms of PHI inputs that can be represented as 5371 conditional expressions and rewrites them into straight line code. 5372 It is located in `tree-ssa-phiopt.c' and is described by 5373 `pass_phiopt'. 5374 5375 * May-alias optimization 5376 5377 This pass performs a flow sensitive SSA-based points-to analysis. 5378 The resulting may-alias, must-alias, and escape analysis 5379 information is used to promote variables from in-memory 5380 addressable objects to non-aliased variables that can be renamed 5381 into SSA form. We also update the `VDEF'/`VUSE' memory tags for 5382 non-renameable aggregates so that we get fewer false kills. The 5383 pass is located in `tree-ssa-alias.c' and is described by 5384 `pass_may_alias'. 5385 5386 Interprocedural points-to information is located in 5387 `tree-ssa-structalias.c' and described by `pass_ipa_pta'. 5388 5389 * Profiling 5390 5391 This pass rewrites the function in order to collect runtime block 5392 and value profiling data. Such data may be fed back into the 5393 compiler on a subsequent run so as to allow optimization based on 5394 expected execution frequencies. The pass is located in 5395 `predict.c' and is described by `pass_profile'. 5396 5397 * Lower complex arithmetic 5398 5399 This pass rewrites complex arithmetic operations into their 5400 component scalar arithmetic operations. The pass is located in 5401 `tree-complex.c' and is described by `pass_lower_complex'. 5402 5403 * Scalar replacement of aggregates 5404 5405 This pass rewrites suitable non-aliased local aggregate variables 5406 into a set of scalar variables. The resulting scalar variables are 5407 rewritten into SSA form, which allows subsequent optimization 5408 passes to do a significantly better job with them. The pass is 5409 located in `tree-sra.c' and is described by `pass_sra'. 5410 5411 * Dead store elimination 5412 5413 This pass eliminates stores to memory that are subsequently 5414 overwritten by another store, without any intervening loads. The 5415 pass is located in `tree-ssa-dse.c' and is described by `pass_dse'. 5416 5417 * Tail recursion elimination 5418 5419 This pass transforms tail recursion into a loop. It is located in 5420 `tree-tailcall.c' and is described by `pass_tail_recursion'. 5421 5422 * Forward store motion 5423 5424 This pass sinks stores and assignments down the flowgraph closer 5425 to their use point. The pass is located in `tree-ssa-sink.c' and 5426 is described by `pass_sink_code'. 5427 5428 * Partial redundancy elimination 5429 5430 This pass eliminates partially redundant computations, as well as 5431 performing load motion. The pass is located in `tree-ssa-pre.c' 5432 and is described by `pass_pre'. 5433 5434 Just before partial redundancy elimination, if 5435 `-funsafe-math-optimizations' is on, GCC tries to convert 5436 divisions to multiplications by the reciprocal. The pass is 5437 located in `tree-ssa-math-opts.c' and is described by 5438 `pass_cse_reciprocal'. 5439 5440 * Full redundancy elimination 5441 5442 This is a simpler form of PRE that only eliminates redundancies 5443 that occur an all paths. It is located in `tree-ssa-pre.c' and 5444 described by `pass_fre'. 5445 5446 * Loop optimization 5447 5448 The main driver of the pass is placed in `tree-ssa-loop.c' and 5449 described by `pass_loop'. 5450 5451 The optimizations performed by this pass are: 5452 5453 Loop invariant motion. This pass moves only invariants that would 5454 be hard to handle on rtl level (function calls, operations that 5455 expand to nontrivial sequences of insns). With `-funswitch-loops' 5456 it also moves operands of conditions that are invariant out of the 5457 loop, so that we can use just trivial invariantness analysis in 5458 loop unswitching. The pass also includes store motion. The pass 5459 is implemented in `tree-ssa-loop-im.c'. 5460 5461 Canonical induction variable creation. This pass creates a simple 5462 counter for number of iterations of the loop and replaces the exit 5463 condition of the loop using it, in case when a complicated 5464 analysis is necessary to determine the number of iterations. 5465 Later optimizations then may determine the number easily. The 5466 pass is implemented in `tree-ssa-loop-ivcanon.c'. 5467 5468 Induction variable optimizations. This pass performs standard 5469 induction variable optimizations, including strength reduction, 5470 induction variable merging and induction variable elimination. 5471 The pass is implemented in `tree-ssa-loop-ivopts.c'. 5472 5473 Loop unswitching. This pass moves the conditional jumps that are 5474 invariant out of the loops. To achieve this, a duplicate of the 5475 loop is created for each possible outcome of conditional jump(s). 5476 The pass is implemented in `tree-ssa-loop-unswitch.c'. This pass 5477 should eventually replace the rtl-level loop unswitching in 5478 `loop-unswitch.c', but currently the rtl-level pass is not 5479 completely redundant yet due to deficiencies in tree level alias 5480 analysis. 5481 5482 The optimizations also use various utility functions contained in 5483 `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and 5484 `cfgloopmanip.c'. 5485 5486 Vectorization. This pass transforms loops to operate on vector 5487 types instead of scalar types. Data parallelism across loop 5488 iterations is exploited to group data elements from consecutive 5489 iterations into a vector and operate on them in parallel. 5490 Depending on available target support the loop is conceptually 5491 unrolled by a factor `VF' (vectorization factor), which is the 5492 number of elements operated upon in parallel in each iteration, 5493 and the `VF' copies of each scalar operation are fused to form a 5494 vector operation. Additional loop transformations such as peeling 5495 and versioning may take place to align the number of iterations, 5496 and to align the memory accesses in the loop. The pass is 5497 implemented in `tree-vectorizer.c' (the main driver and general 5498 utilities), `tree-vect-analyze.c' and `tree-vect-transform.c'. 5499 Analysis of data references is in `tree-data-ref.c'. 5500 5501 Autoparallelization. This pass splits the loop iteration space to 5502 run into several threads. The pass is implemented in 5503 `tree-parloops.c'. 5504 5505 * Tree level if-conversion for vectorizer 5506 5507 This pass applies if-conversion to simple loops to help vectorizer. 5508 We identify if convertible loops, if-convert statements and merge 5509 basic blocks in one big block. The idea is to present loop in such 5510 form so that vectorizer can have one to one mapping between 5511 statements and available vector operations. This patch 5512 re-introduces COND_EXPR at GIMPLE level. This pass is located in 5513 `tree-if-conv.c' and is described by `pass_if_conversion'. 5514 5515 * Conditional constant propagation 5516 5517 This pass relaxes a lattice of values in order to identify those 5518 that must be constant even in the presence of conditional branches. 5519 The pass is located in `tree-ssa-ccp.c' and is described by 5520 `pass_ccp'. 5521 5522 A related pass that works on memory loads and stores, and not just 5523 register values, is located in `tree-ssa-ccp.c' and described by 5524 `pass_store_ccp'. 5525 5526 * Conditional copy propagation 5527 5528 This is similar to constant propagation but the lattice of values 5529 is the "copy-of" relation. It eliminates redundant copies from the 5530 code. The pass is located in `tree-ssa-copy.c' and described by 5531 `pass_copy_prop'. 5532 5533 A related pass that works on memory copies, and not just register 5534 copies, is located in `tree-ssa-copy.c' and described by 5535 `pass_store_copy_prop'. 5536 5537 * Value range propagation 5538 5539 This transformation is similar to constant propagation but instead 5540 of propagating single constant values, it propagates known value 5541 ranges. The implementation is based on Patterson's range 5542 propagation algorithm (Accurate Static Branch Prediction by Value 5543 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 5544 Patterson's algorithm, this implementation does not propagate 5545 branch probabilities nor it uses more than a single range per SSA 5546 name. This means that the current implementation cannot be used 5547 for branch prediction (though adapting it would not be difficult). 5548 The pass is located in `tree-vrp.c' and is described by 5549 `pass_vrp'. 5550 5551 * Folding built-in functions 5552 5553 This pass simplifies built-in functions, as applicable, with 5554 constant arguments or with inferable string lengths. It is 5555 located in `tree-ssa-ccp.c' and is described by 5556 `pass_fold_builtins'. 5557 5558 * Split critical edges 5559 5560 This pass identifies critical edges and inserts empty basic blocks 5561 such that the edge is no longer critical. The pass is located in 5562 `tree-cfg.c' and is described by `pass_split_crit_edges'. 5563 5564 * Control dependence dead code elimination 5565 5566 This pass is a stronger form of dead code elimination that can 5567 eliminate unnecessary control flow statements. It is located in 5568 `tree-ssa-dce.c' and is described by `pass_cd_dce'. 5569 5570 * Tail call elimination 5571 5572 This pass identifies function calls that may be rewritten into 5573 jumps. No code transformation is actually applied here, but the 5574 data and control flow problem is solved. The code transformation 5575 requires target support, and so is delayed until RTL. In the 5576 meantime `CALL_EXPR_TAILCALL' is set indicating the possibility. 5577 The pass is located in `tree-tailcall.c' and is described by 5578 `pass_tail_calls'. The RTL transformation is handled by 5579 `fixup_tail_calls' in `calls.c'. 5580 5581 * Warn for function return without value 5582 5583 For non-void functions, this pass locates return statements that do 5584 not specify a value and issues a warning. Such a statement may 5585 have been injected by falling off the end of the function. This 5586 pass is run last so that we have as much time as possible to prove 5587 that the statement is not reachable. It is located in 5588 `tree-cfg.c' and is described by `pass_warn_function_return'. 5589 5590 * Mudflap statement annotation 5591 5592 If mudflap is enabled, we rewrite some memory accesses with code to 5593 validate that the memory access is correct. In particular, 5594 expressions involving pointer dereferences (`INDIRECT_REF', 5595 `ARRAY_REF', etc.) are replaced by code that checks the selected 5596 address range against the mudflap runtime's database of valid 5597 regions. This check includes an inline lookup into a 5598 direct-mapped cache, based on shift/mask operations of the pointer 5599 value, with a fallback function call into the runtime. The pass 5600 is located in `tree-mudflap.c' and is described by 5601 `pass_mudflap_2'. 5602 5603 * Leave static single assignment form 5604 5605 This pass rewrites the function such that it is in normal form. At 5606 the same time, we eliminate as many single-use temporaries as 5607 possible, so the intermediate language is no longer GIMPLE, but 5608 GENERIC. The pass is located in `tree-outof-ssa.c' and is 5609 described by `pass_del_ssa'. 5610 5611 * Merge PHI nodes that feed into one another 5612 5613 This is part of the CFG cleanup passes. It attempts to join PHI 5614 nodes from a forwarder CFG block into another block with PHI 5615 nodes. The pass is located in `tree-cfgcleanup.c' and is 5616 described by `pass_merge_phi'. 5617 5618 * Return value optimization 5619 5620 If a function always returns the same local variable, and that 5621 local variable is an aggregate type, then the variable is replaced 5622 with the return value for the function (i.e., the function's 5623 DECL_RESULT). This is equivalent to the C++ named return value 5624 optimization applied to GIMPLE. The pass is located in 5625 `tree-nrv.c' and is described by `pass_nrv'. 5626 5627 * Return slot optimization 5628 5629 If a function returns a memory object and is called as `var = 5630 foo()', this pass tries to change the call so that the address of 5631 `var' is sent to the caller to avoid an extra memory copy. This 5632 pass is located in `tree-nrv.c' and is described by 5633 `pass_return_slot'. 5634 5635 * Optimize calls to `__builtin_object_size' 5636 5637 This is a propagation pass similar to CCP that tries to remove 5638 calls to `__builtin_object_size' when the size of the object can be 5639 computed at compile-time. This pass is located in 5640 `tree-object-size.c' and is described by `pass_object_sizes'. 5641 5642 * Loop invariant motion 5643 5644 This pass removes expensive loop-invariant computations out of 5645 loops. The pass is located in `tree-ssa-loop.c' and described by 5646 `pass_lim'. 5647 5648 * Loop nest optimizations 5649 5650 This is a family of loop transformations that works on loop nests. 5651 It includes loop interchange, scaling, skewing and reversal and 5652 they are all geared to the optimization of data locality in array 5653 traversals and the removal of dependencies that hamper 5654 optimizations such as loop parallelization and vectorization. The 5655 pass is located in `tree-loop-linear.c' and described by 5656 `pass_linear_transform'. 5657 5658 * Removal of empty loops 5659 5660 This pass removes loops with no code in them. The pass is located 5661 in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'. 5662 5663 * Unrolling of small loops 5664 5665 This pass completely unrolls loops with few iterations. The pass 5666 is located in `tree-ssa-loop-ivcanon.c' and described by 5667 `pass_complete_unroll'. 5668 5669 * Predictive commoning 5670 5671 This pass makes the code reuse the computations from the previous 5672 iterations of the loops, especially loads and stores to memory. 5673 It does so by storing the values of these computations to a bank 5674 of temporary variables that are rotated at the end of loop. To 5675 avoid the need for this rotation, the loop is then unrolled and 5676 the copies of the loop body are rewritten to use the appropriate 5677 version of the temporary variable. This pass is located in 5678 `tree-predcom.c' and described by `pass_predcom'. 5679 5680 * Array prefetching 5681 5682 This pass issues prefetch instructions for array references inside 5683 loops. The pass is located in `tree-ssa-loop-prefetch.c' and 5684 described by `pass_loop_prefetch'. 5685 5686 * Reassociation 5687 5688 This pass rewrites arithmetic expressions to enable optimizations 5689 that operate on them, like redundancy elimination and 5690 vectorization. The pass is located in `tree-ssa-reassoc.c' and 5691 described by `pass_reassoc'. 5692 5693 * Optimization of `stdarg' functions 5694 5695 This pass tries to avoid the saving of register arguments into the 5696 stack on entry to `stdarg' functions. If the function doesn't use 5697 any `va_start' macros, no registers need to be saved. If 5698 `va_start' macros are used, the `va_list' variables don't escape 5699 the function, it is only necessary to save registers that will be 5700 used in `va_arg' macros. For instance, if `va_arg' is only used 5701 with integral types in the function, floating point registers 5702 don't need to be saved. This pass is located in `tree-stdarg.c' 5703 and described by `pass_stdarg'. 5704 5705 5706 5707 File: gccint.info, Node: RTL passes, Prev: Tree-SSA passes, Up: Passes 5708 5709 8.5 RTL passes 5710 ============== 5711 5712 The following briefly describes the rtl generation and optimization 5713 passes that are run after tree optimization. 5714 5715 * RTL generation 5716 5717 The source files for RTL generation include `stmt.c', `calls.c', 5718 `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and 5719 `emit-rtl.c'. Also, the file `insn-emit.c', generated from the 5720 machine description by the program `genemit', is used in this 5721 pass. The header file `expr.h' is used for communication within 5722 this pass. 5723 5724 The header files `insn-flags.h' and `insn-codes.h', generated from 5725 the machine description by the programs `genflags' and `gencodes', 5726 tell this pass which standard names are available for use and 5727 which patterns correspond to them. 5728 5729 * Generate exception handling landing pads 5730 5731 This pass generates the glue that handles communication between the 5732 exception handling library routines and the exception handlers 5733 within the function. Entry points in the function that are 5734 invoked by the exception handling library are called "landing 5735 pads". The code for this pass is located within `except.c'. 5736 5737 * Cleanup control flow graph 5738 5739 This pass removes unreachable code, simplifies jumps to next, 5740 jumps to jump, jumps across jumps, etc. The pass is run multiple 5741 times. For historical reasons, it is occasionally referred to as 5742 the "jump optimization pass". The bulk of the code for this pass 5743 is in `cfgcleanup.c', and there are support routines in `cfgrtl.c' 5744 and `jump.c'. 5745 5746 * Forward propagation of single-def values 5747 5748 This pass attempts to remove redundant computation by substituting 5749 variables that come from a single definition, and seeing if the 5750 result can be simplified. It performs copy propagation and 5751 addressing mode selection. The pass is run twice, with values 5752 being propagated into loops only on the second run. It is located 5753 in `fwprop.c'. 5754 5755 * Common subexpression elimination 5756 5757 This pass removes redundant computation within basic blocks, and 5758 optimizes addressing modes based on cost. The pass is run twice. 5759 The source is located in `cse.c'. 5760 5761 * Global common subexpression elimination. 5762 5763 This pass performs two different types of GCSE depending on 5764 whether you are optimizing for size or not (LCM based GCSE tends 5765 to increase code size for a gain in speed, while Morel-Renvoise 5766 based GCSE does not). When optimizing for size, GCSE is done 5767 using Morel-Renvoise Partial Redundancy Elimination, with the 5768 exception that it does not try to move invariants out of 5769 loops--that is left to the loop optimization pass. If MR PRE 5770 GCSE is done, code hoisting (aka unification) is also done, as 5771 well as load motion. If you are optimizing for speed, LCM (lazy 5772 code motion) based GCSE is done. LCM is based on the work of 5773 Knoop, Ruthing, and Steffen. LCM based GCSE also does loop 5774 invariant code motion. We also perform load and store motion when 5775 optimizing for speed. Regardless of which type of GCSE is used, 5776 the GCSE pass also performs global constant and copy propagation. 5777 The source file for this pass is `gcse.c', and the LCM routines 5778 are in `lcm.c'. 5779 5780 * Loop optimization 5781 5782 This pass performs several loop related optimizations. The source 5783 files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop 5784 analysis and manipulation code. Initialization and finalization 5785 of loop structures is handled by `loop-init.c'. A loop invariant 5786 motion pass is implemented in `loop-invariant.c'. Basic block 5787 level optimizations--unrolling, peeling and unswitching loops-- 5788 are implemented in `loop-unswitch.c' and `loop-unroll.c'. 5789 Replacing of the exit condition of loops by special 5790 machine-dependent instructions is handled by `loop-doloop.c'. 5791 5792 * Jump bypassing 5793 5794 This pass is an aggressive form of GCSE that transforms the control 5795 flow graph of a function by propagating constants into conditional 5796 branch instructions. The source file for this pass is `gcse.c'. 5797 5798 * If conversion 5799 5800 This pass attempts to replace conditional branches and surrounding 5801 assignments with arithmetic, boolean value producing comparison 5802 instructions, and conditional move instructions. In the very last 5803 invocation after reload, it will generate predicated instructions 5804 when supported by the target. The pass is located in `ifcvt.c'. 5805 5806 * Web construction 5807 5808 This pass splits independent uses of each pseudo-register. This 5809 can improve effect of the other transformation, such as CSE or 5810 register allocation. Its source files are `web.c'. 5811 5812 * Life analysis 5813 5814 This pass computes which pseudo-registers are live at each point in 5815 the program, and makes the first instruction that uses a value 5816 point at the instruction that computed the value. It then deletes 5817 computations whose results are never used, and combines memory 5818 references with add or subtract instructions to make autoincrement 5819 or autodecrement addressing. The pass is located in `flow.c'. 5820 5821 * Instruction combination 5822 5823 This pass attempts to combine groups of two or three instructions 5824 that are related by data flow into single instructions. It 5825 combines the RTL expressions for the instructions by substitution, 5826 simplifies the result using algebra, and then attempts to match 5827 the result against the machine description. The pass is located 5828 in `combine.c'. 5829 5830 * Register movement 5831 5832 This pass looks for cases where matching constraints would force an 5833 instruction to need a reload, and this reload would be a 5834 register-to-register move. It then attempts to change the 5835 registers used by the instruction to avoid the move instruction. 5836 The pass is located in `regmove.c'. 5837 5838 * Optimize mode switching 5839 5840 This pass looks for instructions that require the processor to be 5841 in a specific "mode" and minimizes the number of mode changes 5842 required to satisfy all users. What these modes are, and what 5843 they apply to are completely target-specific. The source is 5844 located in `mode-switching.c'. 5845 5846 * Modulo scheduling 5847 5848 This pass looks at innermost loops and reorders their instructions 5849 by overlapping different iterations. Modulo scheduling is 5850 performed immediately before instruction scheduling. The pass is 5851 located in (`modulo-sched.c'). 5852 5853 * Instruction scheduling 5854 5855 This pass looks for instructions whose output will not be 5856 available by the time that it is used in subsequent instructions. 5857 Memory loads and floating point instructions often have this 5858 behavior on RISC machines. It re-orders instructions within a 5859 basic block to try to separate the definition and use of items 5860 that otherwise would cause pipeline stalls. This pass is 5861 performed twice, before and after register allocation. The pass 5862 is located in `haifa-sched.c', `sched-deps.c', `sched-ebb.c', 5863 `sched-rgn.c' and `sched-vis.c'. 5864 5865 * Register allocation 5866 5867 These passes make sure that all occurrences of pseudo registers are 5868 eliminated, either by allocating them to a hard register, replacing 5869 them by an equivalent expression (e.g. a constant) or by placing 5870 them on the stack. This is done in several subpasses: 5871 5872 * Register class preferencing. The RTL code is scanned to find 5873 out which register class is best for each pseudo register. 5874 The source file is `regclass.c'. 5875 5876 * Local register allocation. This pass allocates hard 5877 registers to pseudo registers that are used only within one 5878 basic block. Because the basic block is linear, it can use 5879 fast and powerful techniques to do a decent job. The source 5880 is located in `local-alloc.c'. 5881 5882 * Global register allocation. This pass allocates hard 5883 registers for the remaining pseudo registers (those whose 5884 life spans are not contained in one basic block). The pass 5885 is located in `global.c'. 5886 5887 * Reloading. This pass renumbers pseudo registers with the 5888 hardware registers numbers they were allocated. Pseudo 5889 registers that did not get hard registers are replaced with 5890 stack slots. Then it finds instructions that are invalid 5891 because a value has failed to end up in a register, or has 5892 ended up in a register of the wrong kind. It fixes up these 5893 instructions by reloading the problematical values 5894 temporarily into registers. Additional instructions are 5895 generated to do the copying. 5896 5897 The reload pass also optionally eliminates the frame pointer 5898 and inserts instructions to save and restore call-clobbered 5899 registers around calls. 5900 5901 Source files are `reload.c' and `reload1.c', plus the header 5902 `reload.h' used for communication between them. 5903 5904 * Basic block reordering 5905 5906 This pass implements profile guided code positioning. If profile 5907 information is not available, various types of static analysis are 5908 performed to make the predictions normally coming from the profile 5909 feedback (IE execution frequency, branch probability, etc). It is 5910 implemented in the file `bb-reorder.c', and the various prediction 5911 routines are in `predict.c'. 5912 5913 * Variable tracking 5914 5915 This pass computes where the variables are stored at each position 5916 in code and generates notes describing the variable locations to 5917 RTL code. The location lists are then generated according to these 5918 notes to debug information if the debugging information format 5919 supports location lists. 5920 5921 * Delayed branch scheduling 5922 5923 This optional pass attempts to find instructions that can go into 5924 the delay slots of other instructions, usually jumps and calls. 5925 The source file name is `reorg.c'. 5926 5927 * Branch shortening 5928 5929 On many RISC machines, branch instructions have a limited range. 5930 Thus, longer sequences of instructions must be used for long 5931 branches. In this pass, the compiler figures out what how far 5932 each instruction will be from each other instruction, and 5933 therefore whether the usual instructions, or the longer sequences, 5934 must be used for each branch. 5935 5936 * Register-to-stack conversion 5937 5938 Conversion from usage of some hard registers to usage of a register 5939 stack may be done at this point. Currently, this is supported only 5940 for the floating-point registers of the Intel 80387 coprocessor. 5941 The source file name is `reg-stack.c'. 5942 5943 * Final 5944 5945 This pass outputs the assembler code for the function. The source 5946 files are `final.c' plus `insn-output.c'; the latter is generated 5947 automatically from the machine description by the tool `genoutput'. 5948 The header file `conditions.h' is used for communication between 5949 these files. If mudflap is enabled, the queue of deferred 5950 declarations and any addressed constants (e.g., string literals) 5951 is processed by `mudflap_finish_file' into a synthetic constructor 5952 function containing calls into the mudflap runtime. 5953 5954 * Debugging information output 5955 5956 This is run after final because it must output the stack slot 5957 offsets for pseudo registers that did not get hard registers. 5958 Source files are `dbxout.c' for DBX symbol table format, 5959 `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF 5960 symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for 5961 DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol 5962 table format. 5963 5964 5965 5966 File: gccint.info, Node: Trees, Next: RTL, Prev: Passes, Up: Top 5967 5968 9 Trees: The intermediate representation used by the C and C++ front ends 5969 ************************************************************************* 5970 5971 This chapter documents the internal representation used by GCC to 5972 represent C and C++ source programs. When presented with a C or C++ 5973 source program, GCC parses the program, performs semantic analysis 5974 (including the generation of error messages), and then produces the 5975 internal representation described here. This representation contains a 5976 complete representation for the entire translation unit provided as 5977 input to the front end. This representation is then typically processed 5978 by a code-generator in order to produce machine code, but could also be 5979 used in the creation of source browsers, intelligent editors, automatic 5980 documentation generators, interpreters, and any other programs needing 5981 the ability to process C or C++ code. 5982 5983 This chapter explains the internal representation. In particular, it 5984 documents the internal representation for C and C++ source constructs, 5985 and the macros, functions, and variables that can be used to access 5986 these constructs. The C++ representation is largely a superset of the 5987 representation used in the C front end. There is only one construct 5988 used in C that does not appear in the C++ front end and that is the GNU 5989 "nested function" extension. Many of the macros documented here do not 5990 apply in C because the corresponding language constructs do not appear 5991 in C. 5992 5993 If you are developing a "back end", be it is a code-generator or some 5994 other tool, that uses this representation, you may occasionally find 5995 that you need to ask questions not easily answered by the functions and 5996 macros available here. If that situation occurs, it is quite likely 5997 that GCC already supports the functionality you desire, but that the 5998 interface is simply not documented here. In that case, you should ask 5999 the GCC maintainers (via mail to <gcc (a] gcc.gnu.org>) about documenting 6000 the functionality you require. Similarly, if you find yourself writing 6001 functions that do not deal directly with your back end, but instead 6002 might be useful to other people using the GCC front end, you should 6003 submit your patches for inclusion in GCC. 6004 6005 * Menu: 6006 6007 * Deficiencies:: Topics net yet covered in this document. 6008 * Tree overview:: All about `tree's. 6009 * Types:: Fundamental and aggregate types. 6010 * Scopes:: Namespaces and classes. 6011 * Functions:: Overloading, function bodies, and linkage. 6012 * Declarations:: Type declarations and variables. 6013 * Attributes:: Declaration and type attributes. 6014 * Expression trees:: From `typeid' to `throw'. 6015 6016 6017 File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: Trees 6018 6019 9.1 Deficiencies 6020 ================ 6021 6022 There are many places in which this document is incomplet and incorrekt. 6023 It is, as of yet, only _preliminary_ documentation. 6024 6025 6026 File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: Trees 6027 6028 9.2 Overview 6029 ============ 6030 6031 The central data structure used by the internal representation is the 6032 `tree'. These nodes, while all of the C type `tree', are of many 6033 varieties. A `tree' is a pointer type, but the object to which it 6034 points may be of a variety of types. From this point forward, we will 6035 refer to trees in ordinary type, rather than in `this font', except 6036 when talking about the actual C type `tree'. 6037 6038 You can tell what kind of node a particular tree is by using the 6039 `TREE_CODE' macro. Many, many macros take trees as input and return 6040 trees as output. However, most macros require a certain kind of tree 6041 node as input. In other words, there is a type-system for trees, but 6042 it is not reflected in the C type-system. 6043 6044 For safety, it is useful to configure GCC with `--enable-checking'. 6045 Although this results in a significant performance penalty (since all 6046 tree types are checked at run-time), and is therefore inappropriate in a 6047 release version, it is extremely helpful during the development process. 6048 6049 Many macros behave as predicates. Many, although not all, of these 6050 predicates end in `_P'. Do not rely on the result type of these macros 6051 being of any particular type. You may, however, rely on the fact that 6052 the type can be compared to `0', so that statements like 6053 if (TEST_P (t) && !TEST_P (y)) 6054 x = 1; 6055 and 6056 int i = (TEST_P (t) != 0); 6057 are legal. Macros that return `int' values now may be changed to 6058 return `tree' values, or other pointers in the future. Even those that 6059 continue to return `int' may return multiple nonzero codes where 6060 previously they returned only zero and one. Therefore, you should not 6061 write code like 6062 if (TEST_P (t) == 1) 6063 as this code is not guaranteed to work correctly in the future. 6064 6065 You should not take the address of values returned by the macros or 6066 functions described here. In particular, no guarantee is given that the 6067 values are lvalues. 6068 6069 In general, the names of macros are all in uppercase, while the names 6070 of functions are entirely in lowercase. There are rare exceptions to 6071 this rule. You should assume that any macro or function whose name is 6072 made up entirely of uppercase letters may evaluate its arguments more 6073 than once. You may assume that a macro or function whose name is made 6074 up entirely of lowercase letters will evaluate its arguments only once. 6075 6076 The `error_mark_node' is a special tree. Its tree code is 6077 `ERROR_MARK', but since there is only ever one node with that code, the 6078 usual practice is to compare the tree against `error_mark_node'. (This 6079 test is just a test for pointer equality.) If an error has occurred 6080 during front-end processing the flag `errorcount' will be set. If the 6081 front end has encountered code it cannot handle, it will issue a 6082 message to the user and set `sorrycount'. When these flags are set, 6083 any macro or function which normally returns a tree of a particular 6084 kind may instead return the `error_mark_node'. Thus, if you intend to 6085 do any processing of erroneous code, you must be prepared to deal with 6086 the `error_mark_node'. 6087 6088 Occasionally, a particular tree slot (like an operand to an expression, 6089 or a particular field in a declaration) will be referred to as 6090 "reserved for the back end". These slots are used to store RTL when 6091 the tree is converted to RTL for use by the GCC back end. However, if 6092 that process is not taking place (e.g., if the front end is being hooked 6093 up to an intelligent editor), then those slots may be used by the back 6094 end presently in use. 6095 6096 If you encounter situations that do not match this documentation, such 6097 as tree nodes of types not mentioned here, or macros documented to 6098 return entities of a particular kind that instead return entities of 6099 some different kind, you have found a bug, either in the front end or in 6100 the documentation. Please report these bugs as you would any other bug. 6101 6102 * Menu: 6103 6104 * Macros and Functions::Macros and functions that can be used with all trees. 6105 * Identifiers:: The names of things. 6106 * Containers:: Lists and vectors. 6107 6108 6109 File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 6110 6111 9.2.1 Trees 6112 ----------- 6113 6114 This section is not here yet. 6115 6116 6117 File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 6118 6119 9.2.2 Identifiers 6120 ----------------- 6121 6122 An `IDENTIFIER_NODE' represents a slightly more general concept that 6123 the standard C or C++ concept of identifier. In particular, an 6124 `IDENTIFIER_NODE' may contain a `$', or other extraordinary characters. 6125 6126 There are never two distinct `IDENTIFIER_NODE's representing the same 6127 identifier. Therefore, you may use pointer equality to compare 6128 `IDENTIFIER_NODE's, rather than using a routine like `strcmp'. 6129 6130 You can use the following macros to access identifiers: 6131 `IDENTIFIER_POINTER' 6132 The string represented by the identifier, represented as a 6133 `char*'. This string is always `NUL'-terminated, and contains no 6134 embedded `NUL' characters. 6135 6136 `IDENTIFIER_LENGTH' 6137 The length of the string returned by `IDENTIFIER_POINTER', not 6138 including the trailing `NUL'. This value of `IDENTIFIER_LENGTH 6139 (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'. 6140 6141 `IDENTIFIER_OPNAME_P' 6142 This predicate holds if the identifier represents the name of an 6143 overloaded operator. In this case, you should not depend on the 6144 contents of either the `IDENTIFIER_POINTER' or the 6145 `IDENTIFIER_LENGTH'. 6146 6147 `IDENTIFIER_TYPENAME_P' 6148 This predicate holds if the identifier represents the name of a 6149 user-defined conversion operator. In this case, the `TREE_TYPE' of 6150 the `IDENTIFIER_NODE' holds the type to which the conversion 6151 operator converts. 6152 6153 6154 6155 File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 6156 6157 9.2.3 Containers 6158 ---------------- 6159 6160 Two common container data structures can be represented directly with 6161 tree nodes. A `TREE_LIST' is a singly linked list containing two trees 6162 per node. These are the `TREE_PURPOSE' and `TREE_VALUE' of each node. 6163 (Often, the `TREE_PURPOSE' contains some kind of tag, or additional 6164 information, while the `TREE_VALUE' contains the majority of the 6165 payload. In other cases, the `TREE_PURPOSE' is simply `NULL_TREE', 6166 while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of 6167 equal stature.) Given one `TREE_LIST' node, the next node is found by 6168 following the `TREE_CHAIN'. If the `TREE_CHAIN' is `NULL_TREE', then 6169 you have reached the end of the list. 6170 6171 A `TREE_VEC' is a simple vector. The `TREE_VEC_LENGTH' is an integer 6172 (not a tree) giving the number of nodes in the vector. The nodes 6173 themselves are accessed using the `TREE_VEC_ELT' macro, which takes two 6174 arguments. The first is the `TREE_VEC' in question; the second is an 6175 integer indicating which element in the vector is desired. The 6176 elements are indexed from zero. 6177 6178 6179 File: gccint.info, Node: Types, Next: Scopes, Prev: Tree overview, Up: Trees 6180 6181 9.3 Types 6182 ========= 6183 6184 All types have corresponding tree nodes. However, you should not assume 6185 that there is exactly one tree node corresponding to each type. There 6186 are often multiple nodes corresponding to the same type. 6187 6188 For the most part, different kinds of types have different tree codes. 6189 (For example, pointer types use a `POINTER_TYPE' code while arrays use 6190 an `ARRAY_TYPE' code.) However, pointers to member functions use the 6191 `RECORD_TYPE' code. Therefore, when writing a `switch' statement that 6192 depends on the code associated with a particular type, you should take 6193 care to handle pointers to member functions under the `RECORD_TYPE' 6194 case label. 6195 6196 In C++, an array type is not qualified; rather the type of the array 6197 elements is qualified. This situation is reflected in the intermediate 6198 representation. The macros described here will always examine the 6199 qualification of the underlying element type when applied to an array 6200 type. (If the element type is itself an array, then the recursion 6201 continues until a non-array type is found, and the qualification of this 6202 type is examined.) So, for example, `CP_TYPE_CONST_P' will hold of the 6203 type `const int ()[7]', denoting an array of seven `int's. 6204 6205 The following functions and macros deal with cv-qualification of types: 6206 `CP_TYPE_QUALS' 6207 This macro returns the set of type qualifiers applied to this type. 6208 This value is `TYPE_UNQUALIFIED' if no qualifiers have been 6209 applied. The `TYPE_QUAL_CONST' bit is set if the type is 6210 `const'-qualified. The `TYPE_QUAL_VOLATILE' bit is set if the 6211 type is `volatile'-qualified. The `TYPE_QUAL_RESTRICT' bit is set 6212 if the type is `restrict'-qualified. 6213 6214 `CP_TYPE_CONST_P' 6215 This macro holds if the type is `const'-qualified. 6216 6217 `CP_TYPE_VOLATILE_P' 6218 This macro holds if the type is `volatile'-qualified. 6219 6220 `CP_TYPE_RESTRICT_P' 6221 This macro holds if the type is `restrict'-qualified. 6222 6223 `CP_TYPE_CONST_NON_VOLATILE_P' 6224 This predicate holds for a type that is `const'-qualified, but 6225 _not_ `volatile'-qualified; other cv-qualifiers are ignored as 6226 well: only the `const'-ness is tested. 6227 6228 `TYPE_MAIN_VARIANT' 6229 This macro returns the unqualified version of a type. It may be 6230 applied to an unqualified type, but it is not always the identity 6231 function in that case. 6232 6233 A few other macros and functions are usable with all types: 6234 `TYPE_SIZE' 6235 The number of bits required to represent the type, represented as 6236 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be 6237 `NULL_TREE'. 6238 6239 `TYPE_ALIGN' 6240 The alignment of the type, in bits, represented as an `int'. 6241 6242 `TYPE_NAME' 6243 This macro returns a declaration (in the form of a `TYPE_DECL') for 6244 the type. (Note this macro does _not_ return a `IDENTIFIER_NODE', 6245 as you might expect, given its name!) You can look at the 6246 `DECL_NAME' of the `TYPE_DECL' to obtain the actual name of the 6247 type. The `TYPE_NAME' will be `NULL_TREE' for a type that is not 6248 a built-in type, the result of a typedef, or a named class type. 6249 6250 `CP_INTEGRAL_TYPE' 6251 This predicate holds if the type is an integral type. Notice that 6252 in C++, enumerations are _not_ integral types. 6253 6254 `ARITHMETIC_TYPE_P' 6255 This predicate holds if the type is an integral type (in the C++ 6256 sense) or a floating point type. 6257 6258 `CLASS_TYPE_P' 6259 This predicate holds for a class-type. 6260 6261 `TYPE_BUILT_IN' 6262 This predicate holds for a built-in type. 6263 6264 `TYPE_PTRMEM_P' 6265 This predicate holds if the type is a pointer to data member. 6266 6267 `TYPE_PTR_P' 6268 This predicate holds if the type is a pointer type, and the 6269 pointee is not a data member. 6270 6271 `TYPE_PTRFN_P' 6272 This predicate holds for a pointer to function type. 6273 6274 `TYPE_PTROB_P' 6275 This predicate holds for a pointer to object type. Note however 6276 that it does not hold for the generic pointer to object type `void 6277 *'. You may use `TYPE_PTROBV_P' to test for a pointer to object 6278 type as well as `void *'. 6279 6280 `TYPE_CANONICAL' 6281 This macro returns the "canonical" type for the given type node. 6282 Canonical types are used to improve performance in the C++ and 6283 Objective-C++ front ends by allowing efficient comparison between 6284 two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of 6285 the types are equal, the types are equivalent; otherwise, the types 6286 are not equivalent. The notion of equivalence for canonical types 6287 is the same as the notion of type equivalence in the language 6288 itself. For instance, 6289 6290 When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type 6291 for the given type node. In this case, comparison between this 6292 type and any other type requires the compiler to perform a deep, 6293 "structural" comparison to see if the two type nodes have the same 6294 form and properties. 6295 6296 The canonical type for a node is always the most fundamental type 6297 in the equivalence class of types. For instance, `int' is its own 6298 canonical type. A typedef `I' of `int' will have `int' as its 6299 canonical type. Similarly, `I*' and a typedef `IP' (defined to 6300 `I*') will has `int*' as their canonical type. When building a new 6301 type node, be sure to set `TYPE_CANONICAL' to the appropriate 6302 canonical type. If the new type is a compound type (built from 6303 other types), and any of those other types require structural 6304 equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the 6305 new type also requires structural equality. Finally, if for some 6306 reason you cannot guarantee that `TYPE_CANONICAL' will point to 6307 the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make 6308 sure that the new type-and any type constructed based on 6309 it-requires structural equality. If you suspect that the canonical 6310 type system is miscomparing types, pass `--param 6311 verify-canonical-types=1' to the compiler or configure with 6312 `--enable-checking' to force the compiler to verify its 6313 canonical-type comparisons against the structural comparisons; the 6314 compiler will then print any warnings if the canonical types 6315 miscompare. 6316 6317 `TYPE_STRUCTURAL_EQUALITY_P' 6318 This predicate holds when the node requires structural equality 6319 checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'. 6320 6321 `SET_TYPE_STRUCTURAL_EQUALITY' 6322 This macro states that the type node it is given requires 6323 structural equality checks, e.g., it sets `TYPE_CANONICAL' to 6324 `NULL_TREE'. 6325 6326 `same_type_p' 6327 This predicate takes two types as input, and holds if they are the 6328 same type. For example, if one type is a `typedef' for the other, 6329 or both are `typedef's for the same type. This predicate also 6330 holds if the two trees given as input are simply copies of one 6331 another; i.e., there is no difference between them at the source 6332 level, but, for whatever reason, a duplicate has been made in the 6333 representation. You should never use `==' (pointer equality) to 6334 compare types; always use `same_type_p' instead. 6335 6336 Detailed below are the various kinds of types, and the macros that can 6337 be used to access them. Although other kinds of types are used 6338 elsewhere in G++, the types described here are the only ones that you 6339 will encounter while examining the intermediate representation. 6340 6341 `VOID_TYPE' 6342 Used to represent the `void' type. 6343 6344 `INTEGER_TYPE' 6345 Used to represent the various integral types, including `char', 6346 `short', `int', `long', and `long long'. This code is not used 6347 for enumeration types, nor for the `bool' type. The 6348 `TYPE_PRECISION' is the number of bits used in the representation, 6349 represented as an `unsigned int'. (Note that in the general case 6350 this is not the same value as `TYPE_SIZE'; suppose that there were 6351 a 24-bit integer type, but that alignment requirements for the ABI 6352 required 32-bit alignment. Then, `TYPE_SIZE' would be an 6353 `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.) The 6354 integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it 6355 is signed. 6356 6357 The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer 6358 that may be represented by this type. Similarly, the 6359 `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that 6360 may be represented by this type. 6361 6362 `REAL_TYPE' 6363 Used to represent the `float', `double', and `long double' types. 6364 The number of bits in the floating-point representation is given 6365 by `TYPE_PRECISION', as in the `INTEGER_TYPE' case. 6366 6367 `FIXED_POINT_TYPE' 6368 Used to represent the `short _Fract', `_Fract', `long _Fract', 6369 `long long _Fract', `short _Accum', `_Accum', `long _Accum', and 6370 `long long _Accum' types. The number of bits in the fixed-point 6371 representation is given by `TYPE_PRECISION', as in the 6372 `INTEGER_TYPE' case. There may be padding bits, fractional bits 6373 and integral bits. The number of fractional bits is given by 6374 `TYPE_FBIT', and the number of integral bits is given by 6375 `TYPE_IBIT'. The fixed-point type is unsigned if `TYPE_UNSIGNED' 6376 holds; otherwise, it is signed. The fixed-point type is 6377 saturating if `TYPE_SATURATING' holds; otherwise, it is not 6378 saturating. 6379 6380 `COMPLEX_TYPE' 6381 Used to represent GCC built-in `__complex__' data types. The 6382 `TREE_TYPE' is the type of the real and imaginary parts. 6383 6384 `ENUMERAL_TYPE' 6385 Used to represent an enumeration type. The `TYPE_PRECISION' gives 6386 (as an `int'), the number of bits used to represent the type. If 6387 there are no negative enumeration constants, `TYPE_UNSIGNED' will 6388 hold. The minimum and maximum enumeration constants may be 6389 obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively; 6390 each of these macros returns an `INTEGER_CST'. 6391 6392 The actual enumeration constants themselves may be obtained by 6393 looking at the `TYPE_VALUES'. This macro will return a 6394 `TREE_LIST', containing the constants. The `TREE_PURPOSE' of each 6395 node will be an `IDENTIFIER_NODE' giving the name of the constant; 6396 the `TREE_VALUE' will be an `INTEGER_CST' giving the value 6397 assigned to that constant. These constants will appear in the 6398 order in which they were declared. The `TREE_TYPE' of each of 6399 these constants will be the type of enumeration type itself. 6400 6401 `BOOLEAN_TYPE' 6402 Used to represent the `bool' type. 6403 6404 `POINTER_TYPE' 6405 Used to represent pointer types, and pointer to data member types. 6406 The `TREE_TYPE' gives the type to which this type points. If the 6407 type is a pointer to data member type, then `TYPE_PTRMEM_P' will 6408 hold. For a pointer to data member type of the form `T X::*', 6409 `TYPE_PTRMEM_CLASS_TYPE' will be the type `X', while 6410 `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'. 6411 6412 `REFERENCE_TYPE' 6413 Used to represent reference types. The `TREE_TYPE' gives the type 6414 to which this type refers. 6415 6416 `FUNCTION_TYPE' 6417 Used to represent the type of non-member functions and of static 6418 member functions. The `TREE_TYPE' gives the return type of the 6419 function. The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument 6420 types. The `TREE_VALUE' of each node in this list is the type of 6421 the corresponding argument; the `TREE_PURPOSE' is an expression 6422 for the default argument value, if any. If the last node in the 6423 list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is 6424 the `void_type_node'), then functions of this type do not take 6425 variable arguments. Otherwise, they do take a variable number of 6426 arguments. 6427 6428 Note that in C (but not in C++) a function declared like `void f()' 6429 is an unprototyped function taking a variable number of arguments; 6430 the `TYPE_ARG_TYPES' of such a function will be `NULL'. 6431 6432 `METHOD_TYPE' 6433 Used to represent the type of a non-static member function. Like a 6434 `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'. The 6435 type of `*this', i.e., the class of which functions of this type 6436 are a member, is given by the `TYPE_METHOD_BASETYPE'. The 6437 `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE', 6438 and includes the `this' argument. 6439 6440 `ARRAY_TYPE' 6441 Used to represent array types. The `TREE_TYPE' gives the type of 6442 the elements in the array. If the array-bound is present in the 6443 type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose 6444 `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper 6445 bounds of the array, respectively. The `TYPE_MIN_VALUE' will 6446 always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE' 6447 will be one less than the number of elements in the array, i.e., 6448 the highest value which may be used to index an element in the 6449 array. 6450 6451 `RECORD_TYPE' 6452 Used to represent `struct' and `class' types, as well as pointers 6453 to member functions and similar constructs in other languages. 6454 `TYPE_FIELDS' contains the items contained in this type, each of 6455 which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or 6456 `TYPE_DECL'. You may not make any assumptions about the ordering 6457 of the fields in the type or whether one or more of them overlap. 6458 If `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 6459 type. In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a 6460 `POINTER_TYPE' pointing to a `METHOD_TYPE'. The `METHOD_TYPE' is 6461 the type of a function pointed to by the pointer-to-member 6462 function. If `TYPE_PTRMEMFUNC_P' does not hold, this type is a 6463 class type. For more information, see *note Classes::. 6464 6465 `UNION_TYPE' 6466 Used to represent `union' types. Similar to `RECORD_TYPE' except 6467 that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position 6468 zero. 6469 6470 `QUAL_UNION_TYPE' 6471 Used to represent part of a variant record in Ada. Similar to 6472 `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER' 6473 field, which contains a boolean expression that indicates whether 6474 the field is present in the object. The type will only have one 6475 field, so each field's `DECL_QUALIFIER' is only evaluated if none 6476 of the expressions in the previous fields in `TYPE_FIELDS' are 6477 nonzero. Normally these expressions will reference a field in the 6478 outer object using a `PLACEHOLDER_EXPR'. 6479 6480 `UNKNOWN_TYPE' 6481 This node is used to represent a type the knowledge of which is 6482 insufficient for a sound processing. 6483 6484 `OFFSET_TYPE' 6485 This node is used to represent a pointer-to-data member. For a 6486 data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the 6487 `TREE_TYPE' is the type of `m'. 6488 6489 `TYPENAME_TYPE' 6490 Used to represent a construct of the form `typename T::A'. The 6491 `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for 6492 `A'. If the type is specified via a template-id, then 6493 `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'. The 6494 `TREE_TYPE' is non-`NULL' if the node is implicitly generated in 6495 support for the implicit typename extension; in which case the 6496 `TREE_TYPE' is a type node for the base-class. 6497 6498 `TYPEOF_TYPE' 6499 Used to represent the `__typeof__' extension. The `TYPE_FIELDS' 6500 is the expression the type of which is being represented. 6501 6502 There are variables whose values represent some of the basic types. 6503 These include: 6504 `void_type_node' 6505 A node for `void'. 6506 6507 `integer_type_node' 6508 A node for `int'. 6509 6510 `unsigned_type_node.' 6511 A node for `unsigned int'. 6512 6513 `char_type_node.' 6514 A node for `char'. 6515 It may sometimes be useful to compare one of these variables with a 6516 type in hand, using `same_type_p'. 6517 6518 6519 File: gccint.info, Node: Scopes, Next: Functions, Prev: Types, Up: Trees 6520 6521 9.4 Scopes 6522 ========== 6523 6524 The root of the entire intermediate representation is the variable 6525 `global_namespace'. This is the namespace specified with `::' in C++ 6526 source code. All other namespaces, types, variables, functions, and so 6527 forth can be found starting with this namespace. 6528 6529 Besides namespaces, the other high-level scoping construct in C++ is 6530 the class. (Throughout this manual the term "class" is used to mean the 6531 types referred to in the ANSI/ISO C++ Standard as classes; these include 6532 types defined with the `class', `struct', and `union' keywords.) 6533 6534 * Menu: 6535 6536 * Namespaces:: Member functions, types, etc. 6537 * Classes:: Members, bases, friends, etc. 6538 6539 6540 File: gccint.info, Node: Namespaces, Next: Classes, Up: Scopes 6541 6542 9.4.1 Namespaces 6543 ---------------- 6544 6545 A namespace is represented by a `NAMESPACE_DECL' node. 6546 6547 However, except for the fact that it is distinguished as the root of 6548 the representation, the global namespace is no different from any other 6549 namespace. Thus, in what follows, we describe namespaces generally, 6550 rather than the global namespace in particular. 6551 6552 The following macros and functions can be used on a `NAMESPACE_DECL': 6553 6554 `DECL_NAME' 6555 This macro is used to obtain the `IDENTIFIER_NODE' corresponding to 6556 the unqualified name of the name of the namespace (*note 6557 Identifiers::). The name of the global namespace is `::', even 6558 though in C++ the global namespace is unnamed. However, you 6559 should use comparison with `global_namespace', rather than 6560 `DECL_NAME' to determine whether or not a namespace is the global 6561 one. An unnamed namespace will have a `DECL_NAME' equal to 6562 `anonymous_namespace_name'. Within a single translation unit, all 6563 unnamed namespaces will have the same name. 6564 6565 `DECL_CONTEXT' 6566 This macro returns the enclosing namespace. The `DECL_CONTEXT' for 6567 the `global_namespace' is `NULL_TREE'. 6568 6569 `DECL_NAMESPACE_ALIAS' 6570 If this declaration is for a namespace alias, then 6571 `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 6572 alias. 6573 6574 Do not attempt to use `cp_namespace_decls' for a namespace which is 6575 an alias. Instead, follow `DECL_NAMESPACE_ALIAS' links until you 6576 reach an ordinary, non-alias, namespace, and call 6577 `cp_namespace_decls' there. 6578 6579 `DECL_NAMESPACE_STD_P' 6580 This predicate holds if the namespace is the special `::std' 6581 namespace. 6582 6583 `cp_namespace_decls' 6584 This function will return the declarations contained in the 6585 namespace, including types, overloaded functions, other 6586 namespaces, and so forth. If there are no declarations, this 6587 function will return `NULL_TREE'. The declarations are connected 6588 through their `TREE_CHAIN' fields. 6589 6590 Although most entries on this list will be declarations, 6591 `TREE_LIST' nodes may also appear. In this case, the `TREE_VALUE' 6592 will be an `OVERLOAD'. The value of the `TREE_PURPOSE' is 6593 unspecified; back ends should ignore this value. As with the 6594 other kinds of declarations returned by `cp_namespace_decls', the 6595 `TREE_CHAIN' will point to the next declaration in this list. 6596 6597 For more information on the kinds of declarations that can occur 6598 on this list, *Note Declarations::. Some declarations will not 6599 appear on this list. In particular, no `FIELD_DECL', 6600 `LABEL_DECL', or `PARM_DECL' nodes will appear here. 6601 6602 This function cannot be used with namespaces that have 6603 `DECL_NAMESPACE_ALIAS' set. 6604 6605 6606 6607 File: gccint.info, Node: Classes, Prev: Namespaces, Up: Scopes 6608 6609 9.4.2 Classes 6610 ------------- 6611 6612 A class type is represented by either a `RECORD_TYPE' or a 6613 `UNION_TYPE'. A class declared with the `union' tag is represented by 6614 a `UNION_TYPE', while classes declared with either the `struct' or the 6615 `class' tag are represented by `RECORD_TYPE's. You can use the 6616 `CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 6617 type is a `class' as opposed to a `struct'. This macro will be true 6618 only for classes declared with the `class' tag. 6619 6620 Almost all non-function members are available on the `TYPE_FIELDS' 6621 list. Given one member, the next can be found by following the 6622 `TREE_CHAIN'. You should not depend in any way on the order in which 6623 fields appear on this list. All nodes on this list will be `DECL' 6624 nodes. A `FIELD_DECL' is used to represent a non-static data member, a 6625 `VAR_DECL' is used to represent a static data member, and a `TYPE_DECL' 6626 is used to represent a type. Note that the `CONST_DECL' for an 6627 enumeration constant will appear on this list, if the enumeration type 6628 was declared in the class. (Of course, the `TYPE_DECL' for the 6629 enumeration type will appear here as well.) There are no entries for 6630 base classes on this list. In particular, there is no `FIELD_DECL' for 6631 the "base-class portion" of an object. 6632 6633 The `TYPE_VFIELD' is a compiler-generated field used to point to 6634 virtual function tables. It may or may not appear on the `TYPE_FIELDS' 6635 list. However, back ends should handle the `TYPE_VFIELD' just like all 6636 the entries on the `TYPE_FIELDS' list. 6637 6638 The function members are available on the `TYPE_METHODS' list. Again, 6639 subsequent members are found by following the `TREE_CHAIN' field. If a 6640 function is overloaded, each of the overloaded functions appears; no 6641 `OVERLOAD' nodes appear on the `TYPE_METHODS' list. Implicitly 6642 declared functions (including default constructors, copy constructors, 6643 assignment operators, and destructors) will appear on this list as well. 6644 6645 Every class has an associated "binfo", which can be obtained with 6646 `TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 6647 given by `TYPE_BINFO' is the degenerate case, whereby every class is 6648 considered to be its own base-class. The base binfos for a particular 6649 binfo are held in a vector, whose length is obtained with 6650 `BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 6651 `BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'. To add a new binfo, use 6652 `BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 6653 `BINFO_BASE_BINFOS', but normally you do not need to use that. The 6654 class type associated with a binfo is given by `BINFO_TYPE'. It is not 6655 always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 6656 and qualified types. Neither is it the case that `TYPE_BINFO 6657 (BINFO_TYPE (y))' is the same binfo as `y'. The reason is that if `y' 6658 is a binfo representing a base-class `B' of a derived class `D', then 6659 `BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be 6660 `B' as its own base-class, rather than as a base-class of `D'. 6661 6662 The access to a base type can be found with `BINFO_BASE_ACCESS'. This 6663 will produce `access_public_node', `access_private_node' or 6664 `access_protected_node'. If bases are always public, 6665 `BINFO_BASE_ACCESSES' may be `NULL'. 6666 6667 `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 6668 virtually or not. The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1' 6669 to `BINFO_FLAG_6' can be used for language specific use. 6670 6671 The following macros can be used on a tree node representing a 6672 class-type. 6673 6674 `LOCAL_CLASS_P' 6675 This predicate holds if the class is local class _i.e._ declared 6676 inside a function body. 6677 6678 `TYPE_POLYMORPHIC_P' 6679 This predicate holds if the class has at least one virtual function 6680 (declared or inherited). 6681 6682 `TYPE_HAS_DEFAULT_CONSTRUCTOR' 6683 This predicate holds whenever its argument represents a class-type 6684 with default constructor. 6685 6686 `CLASSTYPE_HAS_MUTABLE' 6687 `TYPE_HAS_MUTABLE_P' 6688 These predicates hold for a class-type having a mutable data 6689 member. 6690 6691 `CLASSTYPE_NON_POD_P' 6692 This predicate holds only for class-types that are not PODs. 6693 6694 `TYPE_HAS_NEW_OPERATOR' 6695 This predicate holds for a class-type that defines `operator new'. 6696 6697 `TYPE_HAS_ARRAY_NEW_OPERATOR' 6698 This predicate holds for a class-type for which `operator new[]' 6699 is defined. 6700 6701 `TYPE_OVERLOADS_CALL_EXPR' 6702 This predicate holds for class-type for which the function call 6703 `operator()' is overloaded. 6704 6705 `TYPE_OVERLOADS_ARRAY_REF' 6706 This predicate holds for a class-type that overloads `operator[]' 6707 6708 `TYPE_OVERLOADS_ARROW' 6709 This predicate holds for a class-type for which `operator->' is 6710 overloaded. 6711 6712 6713 6714 File: gccint.info, Node: Declarations, Next: Attributes, Prev: Functions, Up: Trees 6715 6716 9.5 Declarations 6717 ================ 6718 6719 This section covers the various kinds of declarations that appear in the 6720 internal representation, except for declarations of functions 6721 (represented by `FUNCTION_DECL' nodes), which are described in *Note 6722 Functions::. 6723 6724 * Menu: 6725 6726 * Working with declarations:: Macros and functions that work on 6727 declarations. 6728 * Internal structure:: How declaration nodes are represented. 6729 6730 6731 File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 6732 6733 9.5.1 Working with declarations 6734 ------------------------------- 6735 6736 Some macros can be used with any kind of declaration. These include: 6737 `DECL_NAME' 6738 This macro returns an `IDENTIFIER_NODE' giving the name of the 6739 entity. 6740 6741 `TREE_TYPE' 6742 This macro returns the type of the entity declared. 6743 6744 `TREE_FILENAME' 6745 This macro returns the name of the file in which the entity was 6746 declared, as a `char*'. For an entity declared implicitly by the 6747 compiler (like `__builtin_memcpy'), this will be the string 6748 `"<internal>"'. 6749 6750 `TREE_LINENO' 6751 This macro returns the line number at which the entity was 6752 declared, as an `int'. 6753 6754 `DECL_ARTIFICIAL' 6755 This predicate holds if the declaration was implicitly generated 6756 by the compiler. For example, this predicate will hold of an 6757 implicitly declared member function, or of the `TYPE_DECL' 6758 implicitly generated for a class type. Recall that in C++ code 6759 like: 6760 struct S {}; 6761 is roughly equivalent to C code like: 6762 struct S {}; 6763 typedef struct S S; 6764 The implicitly generated `typedef' declaration is represented by a 6765 `TYPE_DECL' for which `DECL_ARTIFICIAL' holds. 6766 6767 `DECL_NAMESPACE_SCOPE_P' 6768 This predicate holds if the entity was declared at a namespace 6769 scope. 6770 6771 `DECL_CLASS_SCOPE_P' 6772 This predicate holds if the entity was declared at a class scope. 6773 6774 `DECL_FUNCTION_SCOPE_P' 6775 This predicate holds if the entity was declared inside a function 6776 body. 6777 6778 6779 The various kinds of declarations include: 6780 `LABEL_DECL' 6781 These nodes are used to represent labels in function bodies. For 6782 more information, see *Note Functions::. These nodes only appear 6783 in block scopes. 6784 6785 `CONST_DECL' 6786 These nodes are used to represent enumeration constants. The 6787 value of the constant is given by `DECL_INITIAL' which will be an 6788 `INTEGER_CST' with the same type as the `TREE_TYPE' of the 6789 `CONST_DECL', i.e., an `ENUMERAL_TYPE'. 6790 6791 `RESULT_DECL' 6792 These nodes represent the value returned by a function. When a 6793 value is assigned to a `RESULT_DECL', that indicates that the 6794 value should be returned, via bitwise copy, by the function. You 6795 can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as 6796 with a `VAR_DECL'. 6797 6798 `TYPE_DECL' 6799 These nodes represent `typedef' declarations. The `TREE_TYPE' is 6800 the type declared to have the name given by `DECL_NAME'. In some 6801 cases, there is no associated name. 6802 6803 `VAR_DECL' 6804 These nodes represent variables with namespace or block scope, as 6805 well as static data members. The `DECL_SIZE' and `DECL_ALIGN' are 6806 analogous to `TYPE_SIZE' and `TYPE_ALIGN'. For a declaration, you 6807 should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the 6808 `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since 6809 special attributes may have been applied to the variable to give 6810 it a particular size and alignment. You may use the predicates 6811 `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the 6812 storage class specifiers `static' or `extern' were used to declare 6813 a variable. 6814 6815 If this variable is initialized (but does not require a 6816 constructor), the `DECL_INITIAL' will be an expression for the 6817 initializer. The initializer should be evaluated, and a bitwise 6818 copy into the variable performed. If the `DECL_INITIAL' is the 6819 `error_mark_node', there is an initializer, but it is given by an 6820 explicit statement later in the code; no bitwise copy is required. 6821 6822 GCC provides an extension that allows either automatic variables, 6823 or global variables, to be placed in particular registers. This 6824 extension is being used for a particular `VAR_DECL' if 6825 `DECL_REGISTER' holds for the `VAR_DECL', and if 6826 `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'. In that case, 6827 `DECL_ASSEMBLER_NAME' is the name of the register into which the 6828 variable will be placed. 6829 6830 `PARM_DECL' 6831 Used to represent a parameter to a function. Treat these nodes 6832 similarly to `VAR_DECL' nodes. These nodes only appear in the 6833 `DECL_ARGUMENTS' for a `FUNCTION_DECL'. 6834 6835 The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will 6836 actually be used when a value is passed to this function. It may 6837 be a wider type than the `TREE_TYPE' of the parameter; for 6838 example, the ordinary type might be `short' while the 6839 `DECL_ARG_TYPE' is `int'. 6840 6841 `FIELD_DECL' 6842 These nodes represent non-static data members. The `DECL_SIZE' and 6843 `DECL_ALIGN' behave as for `VAR_DECL' nodes. The position of the 6844 field within the parent record is specified by a combination of 6845 three attributes. `DECL_FIELD_OFFSET' is the position, counting 6846 in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the 6847 bit of the field closest to the beginning of the structure. 6848 `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 6849 field within this word; this may be nonzero even for fields that 6850 are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than 6851 the natural alignment of the field's type. 6852 6853 If `DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 6854 bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was 6855 originally specified for it, while DECL_TYPE may be a modified 6856 type with lesser precision, according to the size of the bit field. 6857 6858 `NAMESPACE_DECL' 6859 *Note Namespaces::. 6860 6861 `TEMPLATE_DECL' 6862 These nodes are used to represent class, function, and variable 6863 (static data member) templates. The 6864 `DECL_TEMPLATE_SPECIALIZATIONS' are a `TREE_LIST'. The 6865 `TREE_VALUE' of each node in the list is a `TEMPLATE_DECL's or 6866 `FUNCTION_DECL's representing specializations (including 6867 instantiations) of this template. Back ends can safely ignore 6868 `TEMPLATE_DECL's, but should examine `FUNCTION_DECL' nodes on the 6869 specializations list just as they would ordinary `FUNCTION_DECL' 6870 nodes. 6871 6872 For a class template, the `DECL_TEMPLATE_INSTANTIATIONS' list 6873 contains the instantiations. The `TREE_VALUE' of each node is an 6874 instantiation of the class. The `DECL_TEMPLATE_SPECIALIZATIONS' 6875 contains partial specializations of the class. 6876 6877 `USING_DECL' 6878 Back ends can safely ignore these nodes. 6879 6880 6881 6882 File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 6883 6884 9.5.2 Internal structure 6885 ------------------------ 6886 6887 `DECL' nodes are represented internally as a hierarchy of structures. 6888 6889 * Menu: 6890 6891 * Current structure hierarchy:: The current DECL node structure 6892 hierarchy. 6893 * Adding new DECL node types:: How to add a new DECL node to a 6894 frontend. 6895 6896 6897 File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 6898 6899 9.5.2.1 Current structure hierarchy 6900 ................................... 6901 6902 `struct tree_decl_minimal' 6903 This is the minimal structure to inherit from in order for common 6904 `DECL' macros to work. The fields it contains are a unique ID, 6905 source location, context, and name. 6906 6907 `struct tree_decl_common' 6908 This structure inherits from `struct tree_decl_minimal'. It 6909 contains fields that most `DECL' nodes need, such as a field to 6910 store alignment, machine mode, size, and attributes. 6911 6912 `struct tree_field_decl' 6913 This structure inherits from `struct tree_decl_common'. It is 6914 used to represent `FIELD_DECL'. 6915 6916 `struct tree_label_decl' 6917 This structure inherits from `struct tree_decl_common'. It is 6918 used to represent `LABEL_DECL'. 6919 6920 `struct tree_translation_unit_decl' 6921 This structure inherits from `struct tree_decl_common'. It is 6922 used to represent `TRANSLATION_UNIT_DECL'. 6923 6924 `struct tree_decl_with_rtl' 6925 This structure inherits from `struct tree_decl_common'. It 6926 contains a field to store the low-level RTL associated with a 6927 `DECL' node. 6928 6929 `struct tree_result_decl' 6930 This structure inherits from `struct tree_decl_with_rtl'. It is 6931 used to represent `RESULT_DECL'. 6932 6933 `struct tree_const_decl' 6934 This structure inherits from `struct tree_decl_with_rtl'. It is 6935 used to represent `CONST_DECL'. 6936 6937 `struct tree_parm_decl' 6938 This structure inherits from `struct tree_decl_with_rtl'. It is 6939 used to represent `PARM_DECL'. 6940 6941 `struct tree_decl_with_vis' 6942 This structure inherits from `struct tree_decl_with_rtl'. It 6943 contains fields necessary to store visibility information, as well 6944 as a section name and assembler name. 6945 6946 `struct tree_var_decl' 6947 This structure inherits from `struct tree_decl_with_vis'. It is 6948 used to represent `VAR_DECL'. 6949 6950 `struct tree_function_decl' 6951 This structure inherits from `struct tree_decl_with_vis'. It is 6952 used to represent `FUNCTION_DECL'. 6953 6954 6955 6956 File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 6957 6958 9.5.2.2 Adding new DECL node types 6959 .................................. 6960 6961 Adding a new `DECL' tree consists of the following steps 6962 6963 Add a new tree code for the `DECL' node 6964 For language specific `DECL' nodes, there is a `.def' file in each 6965 frontend directory where the tree code should be added. For 6966 `DECL' nodes that are part of the middle-end, the code should be 6967 added to `tree.def'. 6968 6969 Create a new structure type for the `DECL' node 6970 These structures should inherit from one of the existing 6971 structures in the language hierarchy by using that structure as 6972 the first member. 6973 6974 struct tree_foo_decl 6975 { 6976 struct tree_decl_with_vis common; 6977 } 6978 6979 Would create a structure name `tree_foo_decl' that inherits from 6980 `struct tree_decl_with_vis'. 6981 6982 For language specific `DECL' nodes, this new structure type should 6983 go in the appropriate `.h' file. For `DECL' nodes that are part 6984 of the middle-end, the structure type should go in `tree.h'. 6985 6986 Add a member to the tree structure enumerator for the node 6987 For garbage collection and dynamic checking purposes, each `DECL' 6988 node structure type is required to have a unique enumerator value 6989 specified with it. For language specific `DECL' nodes, this new 6990 enumerator value should go in the appropriate `.def' file. For 6991 `DECL' nodes that are part of the middle-end, the enumerator 6992 values are specified in `treestruct.def'. 6993 6994 Update `union tree_node' 6995 In order to make your new structure type usable, it must be added 6996 to `union tree_node'. For language specific `DECL' nodes, a new 6997 entry should be added to the appropriate `.h' file of the form 6998 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 6999 For `DECL' nodes that are part of the middle-end, the additional 7000 member goes directly into `union tree_node' in `tree.h'. 7001 7002 Update dynamic checking info 7003 In order to be able to check whether accessing a named portion of 7004 `union tree_node' is legal, and whether a certain `DECL' node 7005 contains one of the enumerated `DECL' node structures in the 7006 hierarchy, a simple lookup table is used. This lookup table needs 7007 to be kept up to date with the tree structure hierarchy, or else 7008 checking and containment macros will fail inappropriately. 7009 7010 For language specific `DECL' nodes, their is an `init_ts' function 7011 in an appropriate `.c' file, which initializes the lookup table. 7012 Code setting up the table for new `DECL' nodes should be added 7013 there. For each `DECL' tree code and enumerator value 7014 representing a member of the inheritance hierarchy, the table 7015 should contain 1 if that tree code inherits (directly or 7016 indirectly) from that member. Thus, a `FOO_DECL' node derived 7017 from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL', 7018 would be set up as follows 7019 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 7020 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 7021 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 7022 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 7023 7024 For `DECL' nodes that are part of the middle-end, the setup code 7025 goes into `tree.c'. 7026 7027 Add macros to access any new fields and flags 7028 Each added field or flag should have a macro that is used to access 7029 it, that performs appropriate checking to ensure only the right 7030 type of `DECL' nodes access the field. 7031 7032 These macros generally take the following form 7033 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 7034 However, if the structure is simply a base class for further 7035 structures, something like the following should be used 7036 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 7037 #define BASE_STRUCT_FIELDNAME(NODE) \ 7038 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 7039 7040 7041 7042 File: gccint.info, Node: Functions, Next: Declarations, Prev: Scopes, Up: Trees 7043 7044 9.6 Functions 7045 ============= 7046 7047 A function is represented by a `FUNCTION_DECL' node. A set of 7048 overloaded functions is sometimes represented by a `OVERLOAD' node. 7049 7050 An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros 7051 should be used on an `OVERLOAD'. An `OVERLOAD' node is similar to a 7052 `TREE_LIST'. Use `OVL_CURRENT' to get the function associated with an 7053 `OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the 7054 list of overloaded functions. The macros `OVL_CURRENT' and `OVL_NEXT' 7055 are actually polymorphic; you can use them to work with `FUNCTION_DECL' 7056 nodes as well as with overloads. In the case of a `FUNCTION_DECL', 7057 `OVL_CURRENT' will always return the function itself, and `OVL_NEXT' 7058 will always be `NULL_TREE'. 7059 7060 To determine the scope of a function, you can use the `DECL_CONTEXT' 7061 macro. This macro will return the class (either a `RECORD_TYPE' or a 7062 `UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function 7063 is a member. For a virtual function, this macro returns the class in 7064 which the function was actually defined, not the base class in which 7065 the virtual declaration occurred. 7066 7067 If a friend function is defined in a class scope, the 7068 `DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 7069 it was defined. For example, in 7070 class C { friend void f() {} }; 7071 the `DECL_CONTEXT' for `f' will be the `global_namespace', but the 7072 `DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'. 7073 7074 In C, the `DECL_CONTEXT' for a function maybe another function. This 7075 representation indicates that the GNU nested function extension is in 7076 use. For details on the semantics of nested functions, see the GCC 7077 Manual. The nested function can refer to local variables in its 7078 containing function. Such references are not explicitly marked in the 7079 tree structure; back ends must look at the `DECL_CONTEXT' for the 7080 referenced `VAR_DECL'. If the `DECL_CONTEXT' for the referenced 7081 `VAR_DECL' is not the same as the function currently being processed, 7082 and neither `DECL_EXTERNAL' nor `DECL_STATIC' hold, then the reference 7083 is to a local variable in a containing function, and the back end must 7084 take appropriate action. 7085 7086 * Menu: 7087 7088 * Function Basics:: Function names, linkage, and so forth. 7089 * Function Bodies:: The statements that make up a function body. 7090 7091 7092 File: gccint.info, Node: Function Basics, Next: Function Bodies, Up: Functions 7093 7094 9.6.1 Function Basics 7095 --------------------- 7096 7097 The following macros and functions can be used on a `FUNCTION_DECL': 7098 `DECL_MAIN_P' 7099 This predicate holds for a function that is the program entry point 7100 `::code'. 7101 7102 `DECL_NAME' 7103 This macro returns the unqualified name of the function, as an 7104 `IDENTIFIER_NODE'. For an instantiation of a function template, 7105 the `DECL_NAME' is the unqualified name of the template, not 7106 something like `f<int>'. The value of `DECL_NAME' is undefined 7107 when used on a constructor, destructor, overloaded operator, or 7108 type-conversion operator, or any function that is implicitly 7109 generated by the compiler. See below for macros that can be used 7110 to distinguish these cases. 7111 7112 `DECL_ASSEMBLER_NAME' 7113 This macro returns the mangled name of the function, also an 7114 `IDENTIFIER_NODE'. This name does not contain leading underscores 7115 on systems that prefix all identifiers with underscores. The 7116 mangled name is computed in the same way on all platforms; if 7117 special processing is required to deal with the object file format 7118 used on a particular platform, it is the responsibility of the 7119 back end to perform those modifications. (Of course, the back end 7120 should not modify `DECL_ASSEMBLER_NAME' itself.) 7121 7122 Using `DECL_ASSEMBLER_NAME' will cause additional memory to be 7123 allocated (for the mangled name of the entity) so it should be used 7124 only when emitting assembly code. It should not be used within the 7125 optimizers to determine whether or not two declarations are the 7126 same, even though some of the existing optimizers do use it in 7127 that way. These uses will be removed over time. 7128 7129 `DECL_EXTERNAL' 7130 This predicate holds if the function is undefined. 7131 7132 `TREE_PUBLIC' 7133 This predicate holds if the function has external linkage. 7134 7135 `DECL_LOCAL_FUNCTION_P' 7136 This predicate holds if the function was declared at block scope, 7137 even though it has a global scope. 7138 7139 `DECL_ANTICIPATED' 7140 This predicate holds if the function is a built-in function but its 7141 prototype is not yet explicitly declared. 7142 7143 `DECL_EXTERN_C_FUNCTION_P' 7144 This predicate holds if the function is declared as an ``extern 7145 "C"'' function. 7146 7147 `DECL_LINKONCE_P' 7148 This macro holds if multiple copies of this function may be 7149 emitted in various translation units. It is the responsibility of 7150 the linker to merge the various copies. Template instantiations 7151 are the most common example of functions for which 7152 `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all 7153 translation units which require them, and then relies on the 7154 linker to remove duplicate instantiations. 7155 7156 FIXME: This macro is not yet implemented. 7157 7158 `DECL_FUNCTION_MEMBER_P' 7159 This macro holds if the function is a member of a class, rather 7160 than a member of a namespace. 7161 7162 `DECL_STATIC_FUNCTION_P' 7163 This predicate holds if the function a static member function. 7164 7165 `DECL_NONSTATIC_MEMBER_FUNCTION_P' 7166 This macro holds for a non-static member function. 7167 7168 `DECL_CONST_MEMFUNC_P' 7169 This predicate holds for a `const'-member function. 7170 7171 `DECL_VOLATILE_MEMFUNC_P' 7172 This predicate holds for a `volatile'-member function. 7173 7174 `DECL_CONSTRUCTOR_P' 7175 This macro holds if the function is a constructor. 7176 7177 `DECL_NONCONVERTING_P' 7178 This predicate holds if the constructor is a non-converting 7179 constructor. 7180 7181 `DECL_COMPLETE_CONSTRUCTOR_P' 7182 This predicate holds for a function which is a constructor for an 7183 object of a complete type. 7184 7185 `DECL_BASE_CONSTRUCTOR_P' 7186 This predicate holds for a function which is a constructor for a 7187 base class sub-object. 7188 7189 `DECL_COPY_CONSTRUCTOR_P' 7190 This predicate holds for a function which is a copy-constructor. 7191 7192 `DECL_DESTRUCTOR_P' 7193 This macro holds if the function is a destructor. 7194 7195 `DECL_COMPLETE_DESTRUCTOR_P' 7196 This predicate holds if the function is the destructor for an 7197 object a complete type. 7198 7199 `DECL_OVERLOADED_OPERATOR_P' 7200 This macro holds if the function is an overloaded operator. 7201 7202 `DECL_CONV_FN_P' 7203 This macro holds if the function is a type-conversion operator. 7204 7205 `DECL_GLOBAL_CTOR_P' 7206 This predicate holds if the function is a file-scope initialization 7207 function. 7208 7209 `DECL_GLOBAL_DTOR_P' 7210 This predicate holds if the function is a file-scope finalization 7211 function. 7212 7213 `DECL_THUNK_P' 7214 This predicate holds if the function is a thunk. 7215 7216 These functions represent stub code that adjusts the `this' pointer 7217 and then jumps to another function. When the jumped-to function 7218 returns, control is transferred directly to the caller, without 7219 returning to the thunk. The first parameter to the thunk is 7220 always the `this' pointer; the thunk should add `THUNK_DELTA' to 7221 this value. (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.) 7222 7223 Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the 7224 adjusted `this' pointer must be adjusted again. The complete 7225 calculation is given by the following pseudo-code: 7226 7227 this += THUNK_DELTA 7228 if (THUNK_VCALL_OFFSET) 7229 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 7230 7231 Finally, the thunk should jump to the location given by 7232 `DECL_INITIAL'; this will always be an expression for the address 7233 of a function. 7234 7235 `DECL_NON_THUNK_FUNCTION_P' 7236 This predicate holds if the function is _not_ a thunk function. 7237 7238 `GLOBAL_INIT_PRIORITY' 7239 If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then 7240 this gives the initialization priority for the function. The 7241 linker will arrange that all functions for which 7242 `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 7243 before `main' is called. When the program exits, all functions for 7244 which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 7245 7246 `DECL_ARTIFICIAL' 7247 This macro holds if the function was implicitly generated by the 7248 compiler, rather than explicitly declared. In addition to 7249 implicitly generated class member functions, this macro holds for 7250 the special functions created to implement static initialization 7251 and destruction, to compute run-time type information, and so 7252 forth. 7253 7254 `DECL_ARGUMENTS' 7255 This macro returns the `PARM_DECL' for the first argument to the 7256 function. Subsequent `PARM_DECL' nodes can be obtained by 7257 following the `TREE_CHAIN' links. 7258 7259 `DECL_RESULT' 7260 This macro returns the `RESULT_DECL' for the function. 7261 7262 `TREE_TYPE' 7263 This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the 7264 function. 7265 7266 `TYPE_RAISES_EXCEPTIONS' 7267 This macro returns the list of exceptions that a (member-)function 7268 can raise. The returned list, if non `NULL', is comprised of nodes 7269 whose `TREE_VALUE' represents a type. 7270 7271 `TYPE_NOTHROW_P' 7272 This predicate holds when the exception-specification of its 7273 arguments if of the form ``()''. 7274 7275 `DECL_ARRAY_DELETE_OPERATOR_P' 7276 This predicate holds if the function an overloaded `operator 7277 delete[]'. 7278 7279 7280 7281 File: gccint.info, Node: Function Bodies, Prev: Function Basics, Up: Functions 7282 7283 9.6.2 Function Bodies 7284 --------------------- 7285 7286 A function that has a definition in the current translation unit will 7287 have a non-`NULL' `DECL_INITIAL'. However, back ends should not make 7288 use of the particular value given by `DECL_INITIAL'. 7289 7290 The `DECL_SAVED_TREE' macro will give the complete body of the 7291 function. 7292 7293 9.6.2.1 Statements 7294 .................. 7295 7296 There are tree nodes corresponding to all of the source-level statement 7297 constructs, used within the C and C++ frontends. These are enumerated 7298 here, together with a list of the various macros that can be used to 7299 obtain information about them. There are a few macros that can be used 7300 with all statements: 7301 7302 `STMT_IS_FULL_EXPR_P' 7303 In C++, statements normally constitute "full expressions"; 7304 temporaries created during a statement are destroyed when the 7305 statement is complete. However, G++ sometimes represents 7306 expressions by statements; these statements will not have 7307 `STMT_IS_FULL_EXPR_P' set. Temporaries created during such 7308 statements should be destroyed when the innermost enclosing 7309 statement with `STMT_IS_FULL_EXPR_P' set is exited. 7310 7311 7312 Here is the list of the various statement nodes, and the macros used to 7313 access them. This documentation describes the use of these nodes in 7314 non-template functions (including instantiations of template functions). 7315 In template functions, the same nodes are used, but sometimes in 7316 slightly different ways. 7317 7318 Many of the statements have substatements. For example, a `while' 7319 loop will have a body, which is itself a statement. If the substatement 7320 is `NULL_TREE', it is considered equivalent to a statement consisting 7321 of a single `;', i.e., an expression statement in which the expression 7322 has been omitted. A substatement may in fact be a list of statements, 7323 connected via their `TREE_CHAIN's. So, you should always process the 7324 statement tree by looping over substatements, like this: 7325 void process_stmt (stmt) 7326 tree stmt; 7327 { 7328 while (stmt) 7329 { 7330 switch (TREE_CODE (stmt)) 7331 { 7332 case IF_STMT: 7333 process_stmt (THEN_CLAUSE (stmt)); 7334 /* More processing here. */ 7335 break; 7336 7337 ... 7338 } 7339 7340 stmt = TREE_CHAIN (stmt); 7341 } 7342 } 7343 In other words, while the `then' clause of an `if' statement in C++ 7344 can be only one statement (although that one statement may be a 7345 compound statement), the intermediate representation will sometimes use 7346 several statements chained together. 7347 7348 `ASM_EXPR' 7349 Used to represent an inline assembly statement. For an inline 7350 assembly statement like: 7351 asm ("mov x, y"); 7352 The `ASM_STRING' macro will return a `STRING_CST' node for `"mov 7353 x, y"'. If the original statement made use of the 7354 extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and 7355 `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the 7356 statement, represented as `STRING_CST' nodes. The 7357 extended-assembly syntax looks like: 7358 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 7359 The first string is the `ASM_STRING', containing the instruction 7360 template. The next two strings are the output and inputs, 7361 respectively; this statement has no clobbers. As this example 7362 indicates, "plain" assembly statements are merely a special case 7363 of extended assembly statements; they have no cv-qualifiers, 7364 outputs, inputs, or clobbers. All of the strings will be 7365 `NUL'-terminated, and will contain no embedded `NUL'-characters. 7366 7367 If the assembly statement is declared `volatile', or if the 7368 statement was not an extended assembly statement, and is therefore 7369 implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold 7370 of the `ASM_EXPR'. 7371 7372 `BREAK_STMT' 7373 Used to represent a `break' statement. There are no additional 7374 fields. 7375 7376 `CASE_LABEL_EXPR' 7377 Use to represent a `case' label, range of `case' labels, or a 7378 `default' label. If `CASE_LOW' is `NULL_TREE', then this is a 7379 `default' label. Otherwise, if `CASE_HIGH' is `NULL_TREE', then 7380 this is an ordinary `case' label. In this case, `CASE_LOW' is an 7381 expression giving the value of the label. Both `CASE_LOW' and 7382 `CASE_HIGH' are `INTEGER_CST' nodes. These values will have the 7383 same type as the condition expression in the switch statement. 7384 7385 Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the 7386 statement is a range of case labels. Such statements originate 7387 with the extension that allows users to write things of the form: 7388 case 2 ... 5: 7389 The first value will be `CASE_LOW', while the second will be 7390 `CASE_HIGH'. 7391 7392 `CLEANUP_STMT' 7393 Used to represent an action that should take place upon exit from 7394 the enclosing scope. Typically, these actions are calls to 7395 destructors for local objects, but back ends cannot rely on this 7396 fact. If these nodes are in fact representing such destructors, 7397 `CLEANUP_DECL' will be the `VAR_DECL' destroyed. Otherwise, 7398 `CLEANUP_DECL' will be `NULL_TREE'. In any case, the 7399 `CLEANUP_EXPR' is the expression to execute. The cleanups 7400 executed on exit from a scope should be run in the reverse order 7401 of the order in which the associated `CLEANUP_STMT's were 7402 encountered. 7403 7404 `CONTINUE_STMT' 7405 Used to represent a `continue' statement. There are no additional 7406 fields. 7407 7408 `CTOR_STMT' 7409 Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if 7410 `CTOR_END_P' holds of the main body of a constructor. See also 7411 `SUBOBJECT' for more information on how to use these nodes. 7412 7413 `DECL_STMT' 7414 Used to represent a local declaration. The `DECL_STMT_DECL' macro 7415 can be used to obtain the entity declared. This declaration may 7416 be a `LABEL_DECL', indicating that the label declared is a local 7417 label. (As an extension, GCC allows the declaration of labels 7418 with scope.) In C, this declaration may be a `FUNCTION_DECL', 7419 indicating the use of the GCC nested function extension. For more 7420 information, *note Functions::. 7421 7422 `DO_STMT' 7423 Used to represent a `do' loop. The body of the loop is given by 7424 `DO_BODY' while the termination condition for the loop is given by 7425 `DO_COND'. The condition for a `do'-statement is always an 7426 expression. 7427 7428 `EMPTY_CLASS_EXPR' 7429 Used to represent a temporary object of a class with no data whose 7430 address is never taken. (All such objects are interchangeable.) 7431 The `TREE_TYPE' represents the type of the object. 7432 7433 `EXPR_STMT' 7434 Used to represent an expression statement. Use `EXPR_STMT_EXPR' to 7435 obtain the expression. 7436 7437 `FOR_STMT' 7438 Used to represent a `for' statement. The `FOR_INIT_STMT' is the 7439 initialization statement for the loop. The `FOR_COND' is the 7440 termination condition. The `FOR_EXPR' is the expression executed 7441 right before the `FOR_COND' on each loop iteration; often, this 7442 expression increments a counter. The body of the loop is given by 7443 `FOR_BODY'. Note that `FOR_INIT_STMT' and `FOR_BODY' return 7444 statements, while `FOR_COND' and `FOR_EXPR' return expressions. 7445 7446 `GOTO_EXPR' 7447 Used to represent a `goto' statement. The `GOTO_DESTINATION' will 7448 usually be a `LABEL_DECL'. However, if the "computed goto" 7449 extension has been used, the `GOTO_DESTINATION' will be an 7450 arbitrary expression indicating the destination. This expression 7451 will always have pointer type. 7452 7453 `HANDLER' 7454 Used to represent a C++ `catch' block. The `HANDLER_TYPE' is the 7455 type of exception that will be caught by this handler; it is equal 7456 (by pointer equality) to `NULL' if this handler is for all types. 7457 `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and 7458 `HANDLER_BODY' is the code for the block itself. 7459 7460 `IF_STMT' 7461 Used to represent an `if' statement. The `IF_COND' is the 7462 expression. 7463 7464 If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a 7465 statement (usually a `DECL_STMT'). Each time the condition is 7466 evaluated, the statement should be executed. Then, the 7467 `TREE_VALUE' should be used as the conditional expression itself. 7468 This representation is used to handle C++ code like this: 7469 7470 if (int i = 7) ... 7471 7472 where there is a new local variable (or variables) declared within 7473 the condition. 7474 7475 The `THEN_CLAUSE' represents the statement given by the `then' 7476 condition, while the `ELSE_CLAUSE' represents the statement given 7477 by the `else' condition. 7478 7479 `LABEL_EXPR' 7480 Used to represent a label. The `LABEL_DECL' declared by this 7481 statement can be obtained with the `LABEL_EXPR_LABEL' macro. The 7482 `IDENTIFIER_NODE' giving the name of the label can be obtained from 7483 the `LABEL_DECL' with `DECL_NAME'. 7484 7485 `RETURN_STMT' 7486 Used to represent a `return' statement. The `RETURN_EXPR' is the 7487 expression returned; it will be `NULL_TREE' if the statement was 7488 just 7489 return; 7490 7491 `SUBOBJECT' 7492 In a constructor, these nodes are used to mark the point at which a 7493 subobject of `this' is fully constructed. If, after this point, an 7494 exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is 7495 encountered, the `SUBOBJECT_CLEANUP' must be executed. The 7496 cleanups must be executed in the reverse order in which they 7497 appear. 7498 7499 `SWITCH_STMT' 7500 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is 7501 the expression on which the switch is occurring. See the 7502 documentation for an `IF_STMT' for more information on the 7503 representation used for the condition. The `SWITCH_STMT_BODY' is 7504 the body of the switch statement. The `SWITCH_STMT_TYPE' is the 7505 original type of switch expression as given in the source, before 7506 any compiler conversions. 7507 7508 `TRY_BLOCK' 7509 Used to represent a `try' block. The body of the try block is 7510 given by `TRY_STMTS'. Each of the catch blocks is a `HANDLER' 7511 node. The first handler is given by `TRY_HANDLERS'. Subsequent 7512 handlers are obtained by following the `TREE_CHAIN' link from one 7513 handler to the next. The body of the handler is given by 7514 `HANDLER_BODY'. 7515 7516 If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS' 7517 will not be a `HANDLER' node. Instead, it will be an expression 7518 that should be executed if an exception is thrown in the try 7519 block. It must rethrow the exception after executing that code. 7520 And, if an exception is thrown while the expression is executing, 7521 `terminate' must be called. 7522 7523 `USING_STMT' 7524 Used to represent a `using' directive. The namespace is given by 7525 `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 7526 is needed inside template functions, to implement using directives 7527 during instantiation. 7528 7529 `WHILE_STMT' 7530 Used to represent a `while' loop. The `WHILE_COND' is the 7531 termination condition for the loop. See the documentation for an 7532 `IF_STMT' for more information on the representation used for the 7533 condition. 7534 7535 The `WHILE_BODY' is the body of the loop. 7536 7537 7538 7539 File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: Trees 7540 7541 9.7 Attributes in trees 7542 ======================= 7543 7544 Attributes, as specified using the `__attribute__' keyword, are 7545 represented internally as a `TREE_LIST'. The `TREE_PURPOSE' is the 7546 name of the attribute, as an `IDENTIFIER_NODE'. The `TREE_VALUE' is a 7547 `TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE' 7548 if there are no arguments; the arguments are stored as the `TREE_VALUE' 7549 of successive entries in the list, and may be identifiers or 7550 expressions. The `TREE_CHAIN' of the attribute is the next attribute 7551 in a list of attributes applying to the same declaration or type, or 7552 `NULL_TREE' if there are no further attributes in the list. 7553 7554 Attributes may be attached to declarations and to types; these 7555 attributes may be accessed with the following macros. All attributes 7556 are stored in this way, and many also cause other changes to the 7557 declaration or type or to other internal compiler data structures. 7558 7559 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 7560 This macro returns the attributes on the declaration DECL. 7561 7562 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 7563 This macro returns the attributes on the type TYPE. 7564 7565 7566 File: gccint.info, Node: Expression trees, Prev: Attributes, Up: Trees 7567 7568 9.8 Expressions 7569 =============== 7570 7571 The internal representation for expressions is for the most part quite 7572 straightforward. However, there are a few facts that one must bear in 7573 mind. In particular, the expression "tree" is actually a directed 7574 acyclic graph. (For example there may be many references to the integer 7575 constant zero throughout the source program; many of these will be 7576 represented by the same expression node.) You should not rely on 7577 certain kinds of node being shared, nor should you rely on certain 7578 kinds of nodes being unshared. 7579 7580 The following macros can be used with all expression nodes: 7581 7582 `TREE_TYPE' 7583 Returns the type of the expression. This value may not be 7584 precisely the same type that would be given the expression in the 7585 original program. 7586 7587 In what follows, some nodes that one might expect to always have type 7588 `bool' are documented to have either integral or boolean type. At some 7589 point in the future, the C front end may also make use of this same 7590 intermediate representation, and at this point these nodes will 7591 certainly have integral type. The previous sentence is not meant to 7592 imply that the C++ front end does not or will not give these nodes 7593 integral type. 7594 7595 Below, we list the various kinds of expression nodes. Except where 7596 noted otherwise, the operands to an expression are accessed using the 7597 `TREE_OPERAND' macro. For example, to access the first operand to a 7598 binary plus expression `expr', use: 7599 7600 TREE_OPERAND (expr, 0) 7601 As this example indicates, the operands are zero-indexed. 7602 7603 All the expressions starting with `OMP_' represent directives and 7604 clauses used by the OpenMP API `http://www.openmp.org/'. 7605 7606 The table below begins with constants, moves on to unary expressions, 7607 then proceeds to binary expressions, and concludes with various other 7608 kinds of expressions: 7609 7610 `INTEGER_CST' 7611 These nodes represent integer constants. Note that the type of 7612 these constants is obtained with `TREE_TYPE'; they are not always 7613 of type `int'. In particular, `char' constants are represented 7614 with `INTEGER_CST' nodes. The value of the integer constant `e' is 7615 given by 7616 ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT) 7617 + TREE_INST_CST_LOW (e)) 7618 HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms. 7619 Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a 7620 `HOST_WIDE_INT'. The value of an `INTEGER_CST' is interpreted as 7621 a signed or unsigned quantity depending on the type of the 7622 constant. In general, the expression given above will overflow, 7623 so it should not be used to calculate the value of the constant. 7624 7625 The variable `integer_zero_node' is an integer constant with value 7626 zero. Similarly, `integer_one_node' is an integer constant with 7627 value one. The `size_zero_node' and `size_one_node' variables are 7628 analogous, but have type `size_t' rather than `int'. 7629 7630 The function `tree_int_cst_lt' is a predicate which holds if its 7631 first argument is less than its second. Both constants are 7632 assumed to have the same signedness (i.e., either both should be 7633 signed or both should be unsigned.) The full width of the 7634 constant is used when doing the comparison; the usual rules about 7635 promotions and conversions are ignored. Similarly, 7636 `tree_int_cst_equal' holds if the two constants are equal. The 7637 `tree_int_cst_sgn' function returns the sign of a constant. The 7638 value is `1', `0', or `-1' according on whether the constant is 7639 greater than, equal to, or less than zero. Again, the signedness 7640 of the constant's type is taken into account; an unsigned constant 7641 is never less than zero, no matter what its bit-pattern. 7642 7643 `REAL_CST' 7644 FIXME: Talk about how to obtain representations of this constant, 7645 do comparisons, and so forth. 7646 7647 `FIXED_CST' 7648 These nodes represent fixed-point constants. The type of these 7649 constants is obtained with `TREE_TYPE'. `TREE_FIXED_CST_PTR' 7650 points to to struct fixed_value; `TREE_FIXED_CST' returns the 7651 structure itself. Struct fixed_value contains `data' with the 7652 size of two HOST_BITS_PER_WIDE_INT and `mode' as the associated 7653 fixed-point machine mode for `data'. 7654 7655 `COMPLEX_CST' 7656 These nodes are used to represent complex number constants, that 7657 is a `__complex__' whose parts are constant nodes. The 7658 `TREE_REALPART' and `TREE_IMAGPART' return the real and the 7659 imaginary parts respectively. 7660 7661 `VECTOR_CST' 7662 These nodes are used to represent vector constants, whose parts are 7663 constant nodes. Each individual constant node is either an 7664 integer or a double constant node. The first operand is a 7665 `TREE_LIST' of the constant nodes and is accessed through 7666 `TREE_VECTOR_CST_ELTS'. 7667 7668 `STRING_CST' 7669 These nodes represent string-constants. The `TREE_STRING_LENGTH' 7670 returns the length of the string, as an `int'. The 7671 `TREE_STRING_POINTER' is a `char*' containing the string itself. 7672 The string may not be `NUL'-terminated, and it may contain 7673 embedded `NUL' characters. Therefore, the `TREE_STRING_LENGTH' 7674 includes the trailing `NUL' if it is present. 7675 7676 For wide string constants, the `TREE_STRING_LENGTH' is the number 7677 of bytes in the string, and the `TREE_STRING_POINTER' points to an 7678 array of the bytes of the string, as represented on the target 7679 system (that is, as integers in the target endianness). Wide and 7680 non-wide string constants are distinguished only by the `TREE_TYPE' 7681 of the `STRING_CST'. 7682 7683 FIXME: The formats of string constants are not well-defined when 7684 the target system bytes are not the same width as host system 7685 bytes. 7686 7687 `PTRMEM_CST' 7688 These nodes are used to represent pointer-to-member constants. The 7689 `PTRMEM_CST_CLASS' is the class type (either a `RECORD_TYPE' or 7690 `UNION_TYPE' within which the pointer points), and the 7691 `PTRMEM_CST_MEMBER' is the declaration for the pointed to object. 7692 Note that the `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is in 7693 general different from the `PTRMEM_CST_CLASS'. For example, given: 7694 struct B { int i; }; 7695 struct D : public B {}; 7696 int D::*dp = &D::i; 7697 The `PTRMEM_CST_CLASS' for `&D::i' is `D', even though the 7698 `DECL_CONTEXT' for the `PTRMEM_CST_MEMBER' is `B', since `B::i' is 7699 a member of `B', not `D'. 7700 7701 `VAR_DECL' 7702 These nodes represent variables, including static data members. 7703 For more information, *note Declarations::. 7704 7705 `NEGATE_EXPR' 7706 These nodes represent unary negation of the single operand, for 7707 both integer and floating-point types. The type of negation can be 7708 determined by looking at the type of the expression. 7709 7710 The behavior of this operation on signed arithmetic overflow is 7711 controlled by the `flag_wrapv' and `flag_trapv' variables. 7712 7713 `ABS_EXPR' 7714 These nodes represent the absolute value of the single operand, for 7715 both integer and floating-point types. This is typically used to 7716 implement the `abs', `labs' and `llabs' builtins for integer 7717 types, and the `fabs', `fabsf' and `fabsl' builtins for floating 7718 point types. The type of abs operation can be determined by 7719 looking at the type of the expression. 7720 7721 This node is not used for complex types. To represent the modulus 7722 or complex abs of a complex value, use the `BUILT_IN_CABS', 7723 `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to 7724 implement the C99 `cabs', `cabsf' and `cabsl' built-in functions. 7725 7726 `BIT_NOT_EXPR' 7727 These nodes represent bitwise complement, and will always have 7728 integral type. The only operand is the value to be complemented. 7729 7730 `TRUTH_NOT_EXPR' 7731 These nodes represent logical negation, and will always have 7732 integral (or boolean) type. The operand is the value being 7733 negated. The type of the operand and that of the result are 7734 always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 7735 7736 `PREDECREMENT_EXPR' 7737 `PREINCREMENT_EXPR' 7738 `POSTDECREMENT_EXPR' 7739 `POSTINCREMENT_EXPR' 7740 These nodes represent increment and decrement expressions. The 7741 value of the single operand is computed, and the operand 7742 incremented or decremented. In the case of `PREDECREMENT_EXPR' and 7743 `PREINCREMENT_EXPR', the value of the expression is the value 7744 resulting after the increment or decrement; in the case of 7745 `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before 7746 the increment or decrement occurs. The type of the operand, like 7747 that of the result, will be either integral, boolean, or 7748 floating-point. 7749 7750 `ADDR_EXPR' 7751 These nodes are used to represent the address of an object. (These 7752 expressions will always have pointer or reference type.) The 7753 operand may be another expression, or it may be a declaration. 7754 7755 As an extension, GCC allows users to take the address of a label. 7756 In this case, the operand of the `ADDR_EXPR' will be a 7757 `LABEL_DECL'. The type of such an expression is `void*'. 7758 7759 If the object addressed is not an lvalue, a temporary is created, 7760 and the address of the temporary is used. 7761 7762 `INDIRECT_REF' 7763 These nodes are used to represent the object pointed to by a 7764 pointer. The operand is the pointer being dereferenced; it will 7765 always have pointer or reference type. 7766 7767 `FIX_TRUNC_EXPR' 7768 These nodes represent conversion of a floating-point value to an 7769 integer. The single operand will have a floating-point type, while 7770 the complete expression will have an integral (or boolean) type. 7771 The operand is rounded towards zero. 7772 7773 `FLOAT_EXPR' 7774 These nodes represent conversion of an integral (or boolean) value 7775 to a floating-point value. The single operand will have integral 7776 type, while the complete expression will have a floating-point 7777 type. 7778 7779 FIXME: How is the operand supposed to be rounded? Is this 7780 dependent on `-mieee'? 7781 7782 `COMPLEX_EXPR' 7783 These nodes are used to represent complex numbers constructed from 7784 two expressions of the same (integer or real) type. The first 7785 operand is the real part and the second operand is the imaginary 7786 part. 7787 7788 `CONJ_EXPR' 7789 These nodes represent the conjugate of their operand. 7790 7791 `REALPART_EXPR' 7792 `IMAGPART_EXPR' 7793 These nodes represent respectively the real and the imaginary parts 7794 of complex numbers (their sole argument). 7795 7796 `NON_LVALUE_EXPR' 7797 These nodes indicate that their one and only operand is not an 7798 lvalue. A back end can treat these identically to the single 7799 operand. 7800 7801 `NOP_EXPR' 7802 These nodes are used to represent conversions that do not require 7803 any code-generation. For example, conversion of a `char*' to an 7804 `int*' does not require any code be generated; such a conversion is 7805 represented by a `NOP_EXPR'. The single operand is the expression 7806 to be converted. The conversion from a pointer to a reference is 7807 also represented with a `NOP_EXPR'. 7808 7809 `CONVERT_EXPR' 7810 These nodes are similar to `NOP_EXPR's, but are used in those 7811 situations where code may need to be generated. For example, if an 7812 `int*' is converted to an `int' code may need to be generated on 7813 some platforms. These nodes are never used for C++-specific 7814 conversions, like conversions between pointers to different 7815 classes in an inheritance hierarchy. Any adjustments that need to 7816 be made in such cases are always indicated explicitly. Similarly, 7817 a user-defined conversion is never represented by a 7818 `CONVERT_EXPR'; instead, the function calls are made explicit. 7819 7820 `FIXED_CONVERT_EXPR' 7821 These nodes are used to represent conversions that involve 7822 fixed-point values. For example, from a fixed-point value to 7823 another fixed-point value, from an integer to a fixed-point value, 7824 from a fixed-point value to an integer, from a floating-point 7825 value to a fixed-point value, or from a fixed-point value to a 7826 floating-point value. 7827 7828 `THROW_EXPR' 7829 These nodes represent `throw' expressions. The single operand is 7830 an expression for the code that should be executed to throw the 7831 exception. However, there is one implicit action not represented 7832 in that expression; namely the call to `__throw'. This function 7833 takes no arguments. If `setjmp'/`longjmp' exceptions are used, the 7834 function `__sjthrow' is called instead. The normal GCC back end 7835 uses the function `emit_throw' to generate this code; you can 7836 examine this function to see what needs to be done. 7837 7838 `LSHIFT_EXPR' 7839 `RSHIFT_EXPR' 7840 These nodes represent left and right shifts, respectively. The 7841 first operand is the value to shift; it will always be of integral 7842 type. The second operand is an expression for the number of bits 7843 by which to shift. Right shift should be treated as arithmetic, 7844 i.e., the high-order bits should be zero-filled when the 7845 expression has unsigned type and filled with the sign bit when the 7846 expression has signed type. Note that the result is undefined if 7847 the second operand is larger than or equal to the first operand's 7848 type size. 7849 7850 `BIT_IOR_EXPR' 7851 `BIT_XOR_EXPR' 7852 `BIT_AND_EXPR' 7853 These nodes represent bitwise inclusive or, bitwise exclusive or, 7854 and bitwise and, respectively. Both operands will always have 7855 integral type. 7856 7857 `TRUTH_ANDIF_EXPR' 7858 `TRUTH_ORIF_EXPR' 7859 These nodes represent logical "and" and logical "or", respectively. 7860 These operators are not strict; i.e., the second operand is 7861 evaluated only if the value of the expression is not determined by 7862 evaluation of the first operand. The type of the operands and 7863 that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 7864 7865 `TRUTH_AND_EXPR' 7866 `TRUTH_OR_EXPR' 7867 `TRUTH_XOR_EXPR' 7868 These nodes represent logical and, logical or, and logical 7869 exclusive or. They are strict; both arguments are always 7870 evaluated. There are no corresponding operators in C or C++, but 7871 the front end will sometimes generate these expressions anyhow, if 7872 it can tell that strictness does not matter. The type of the 7873 operands and that of the result are always of `BOOLEAN_TYPE' or 7874 `INTEGER_TYPE'. 7875 7876 `POINTER_PLUS_EXPR' 7877 This node represents pointer arithmetic. The first operand is 7878 always a pointer/reference type. The second operand is always an 7879 unsigned integer type compatible with sizetype. This is the only 7880 binary arithmetic operand that can operate on pointer types. 7881 7882 `PLUS_EXPR' 7883 `MINUS_EXPR' 7884 `MULT_EXPR' 7885 These nodes represent various binary arithmetic operations. 7886 Respectively, these operations are addition, subtraction (of the 7887 second operand from the first) and multiplication. Their operands 7888 may have either integral or floating type, but there will never be 7889 case in which one operand is of floating type and the other is of 7890 integral type. 7891 7892 The behavior of these operations on signed arithmetic overflow is 7893 controlled by the `flag_wrapv' and `flag_trapv' variables. 7894 7895 `RDIV_EXPR' 7896 This node represents a floating point division operation. 7897 7898 `TRUNC_DIV_EXPR' 7899 `FLOOR_DIV_EXPR' 7900 `CEIL_DIV_EXPR' 7901 `ROUND_DIV_EXPR' 7902 These nodes represent integer division operations that return an 7903 integer result. `TRUNC_DIV_EXPR' rounds towards zero, 7904 `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR' 7905 rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to 7906 the closest integer. Integer division in C and C++ is truncating, 7907 i.e. `TRUNC_DIV_EXPR'. 7908 7909 The behavior of these operations on signed arithmetic overflow, 7910 when dividing the minimum signed integer by minus one, is 7911 controlled by the `flag_wrapv' and `flag_trapv' variables. 7912 7913 `TRUNC_MOD_EXPR' 7914 `FLOOR_MOD_EXPR' 7915 `CEIL_MOD_EXPR' 7916 `ROUND_MOD_EXPR' 7917 These nodes represent the integer remainder or modulus operation. 7918 The integer modulus of two operands `a' and `b' is defined as `a - 7919 (a/b)*b' where the division calculated using the corresponding 7920 division operator. Hence for `TRUNC_MOD_EXPR' this definition 7921 assumes division using truncation towards zero, i.e. 7922 `TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 7923 division, i.e. `TRUNC_MOD_EXPR'. 7924 7925 `EXACT_DIV_EXPR' 7926 The `EXACT_DIV_EXPR' code is used to represent integer divisions 7927 where the numerator is known to be an exact multiple of the 7928 denominator. This allows the backend to choose between the faster 7929 of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the 7930 current target. 7931 7932 `ARRAY_REF' 7933 These nodes represent array accesses. The first operand is the 7934 array; the second is the index. To calculate the address of the 7935 memory accessed, you must scale the index by the size of the type 7936 of the array elements. The type of these expressions must be the 7937 type of a component of the array. The third and fourth operands 7938 are used after gimplification to represent the lower bound and 7939 component size but should not be used directly; call 7940 `array_ref_low_bound' and `array_ref_element_size' instead. 7941 7942 `ARRAY_RANGE_REF' 7943 These nodes represent access to a range (or "slice") of an array. 7944 The operands are the same as that for `ARRAY_REF' and have the same 7945 meanings. The type of these expressions must be an array whose 7946 component type is the same as that of the first operand. The 7947 range of that array type determines the amount of data these 7948 expressions access. 7949 7950 `TARGET_MEM_REF' 7951 These nodes represent memory accesses whose address directly map to 7952 an addressing mode of the target architecture. The first argument 7953 is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed 7954 address. The second argument is `TMR_BASE' and the third one is 7955 `TMR_INDEX'. The fourth argument is `TMR_STEP' and must be an 7956 `INTEGER_CST'. The fifth argument is `TMR_OFFSET' and must be an 7957 `INTEGER_CST'. Any of the arguments may be NULL if the 7958 appropriate component does not appear in the address. Address of 7959 the `TARGET_MEM_REF' is determined in the following way. 7960 7961 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 7962 7963 The sixth argument is the reference to the original memory access, 7964 which is preserved for the purposes of the RTL alias analysis. 7965 The seventh argument is a tag representing the results of tree 7966 level alias analysis. 7967 7968 `LT_EXPR' 7969 `LE_EXPR' 7970 `GT_EXPR' 7971 `GE_EXPR' 7972 `EQ_EXPR' 7973 `NE_EXPR' 7974 These nodes represent the less than, less than or equal to, greater 7975 than, greater than or equal to, equal, and not equal comparison 7976 operators. The first and second operand with either be both of 7977 integral type or both of floating type. The result type of these 7978 expressions will always be of integral or boolean type. These 7979 operations return the result type's zero value for false, and the 7980 result type's one value for true. 7981 7982 For floating point comparisons, if we honor IEEE NaNs and either 7983 operand is NaN, then `NE_EXPR' always returns true and the 7984 remaining operators always return false. On some targets, 7985 comparisons against an IEEE NaN, other than equality and 7986 inequality, may generate a floating point exception. 7987 7988 `ORDERED_EXPR' 7989 `UNORDERED_EXPR' 7990 These nodes represent non-trapping ordered and unordered comparison 7991 operators. These operations take two floating point operands and 7992 determine whether they are ordered or unordered relative to each 7993 other. If either operand is an IEEE NaN, their comparison is 7994 defined to be unordered, otherwise the comparison is defined to be 7995 ordered. The result type of these expressions will always be of 7996 integral or boolean type. These operations return the result 7997 type's zero value for false, and the result type's one value for 7998 true. 7999 8000 `UNLT_EXPR' 8001 `UNLE_EXPR' 8002 `UNGT_EXPR' 8003 `UNGE_EXPR' 8004 `UNEQ_EXPR' 8005 `LTGT_EXPR' 8006 These nodes represent the unordered comparison operators. These 8007 operations take two floating point operands and determine whether 8008 the operands are unordered or are less than, less than or equal to, 8009 greater than, greater than or equal to, or equal respectively. For 8010 example, `UNLT_EXPR' returns true if either operand is an IEEE NaN 8011 or the first operand is less than the second. With the possible 8012 exception of `LTGT_EXPR', all of these operations are guaranteed 8013 not to generate a floating point exception. The result type of 8014 these expressions will always be of integral or boolean type. 8015 These operations return the result type's zero value for false, 8016 and the result type's one value for true. 8017 8018 `MODIFY_EXPR' 8019 These nodes represent assignment. The left-hand side is the first 8020 operand; the right-hand side is the second operand. The left-hand 8021 side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or 8022 other lvalue. 8023 8024 These nodes are used to represent not only assignment with `=' but 8025 also compound assignments (like `+='), by reduction to `=' 8026 assignment. In other words, the representation for `i += 3' looks 8027 just like that for `i = i + 3'. 8028 8029 `INIT_EXPR' 8030 These nodes are just like `MODIFY_EXPR', but are used only when a 8031 variable is initialized, rather than assigned to subsequently. 8032 This means that we can assume that the target of the 8033 initialization is not used in computing its own value; any 8034 reference to the lhs in computing the rhs is undefined. 8035 8036 `COMPONENT_REF' 8037 These nodes represent non-static data member accesses. The first 8038 operand is the object (rather than a pointer to it); the second 8039 operand is the `FIELD_DECL' for the data member. The third 8040 operand represents the byte offset of the field, but should not be 8041 used directly; call `component_ref_field_offset' instead. 8042 8043 `COMPOUND_EXPR' 8044 These nodes represent comma-expressions. The first operand is an 8045 expression whose value is computed and thrown away prior to the 8046 evaluation of the second operand. The value of the entire 8047 expression is the value of the second operand. 8048 8049 `COND_EXPR' 8050 These nodes represent `?:' expressions. The first operand is of 8051 boolean or integral type. If it evaluates to a nonzero value, the 8052 second operand should be evaluated, and returned as the value of 8053 the expression. Otherwise, the third operand is evaluated, and 8054 returned as the value of the expression. 8055 8056 The second operand must have the same type as the entire 8057 expression, unless it unconditionally throws an exception or calls 8058 a noreturn function, in which case it should have void type. The 8059 same constraints apply to the third operand. This allows array 8060 bounds checks to be represented conveniently as `(i >= 0 && i < 8061 10) ? i : abort()'. 8062 8063 As a GNU extension, the C language front-ends allow the second 8064 operand of the `?:' operator may be omitted in the source. For 8065 example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x' 8066 is an expression without side-effects. In the tree 8067 representation, however, the second operand is always present, 8068 possibly protected by `SAVE_EXPR' if the first argument does cause 8069 side-effects. 8070 8071 `CALL_EXPR' 8072 These nodes are used to represent calls to functions, including 8073 non-static member functions. `CALL_EXPR's are implemented as 8074 expression nodes with a variable number of operands. Rather than 8075 using `TREE_OPERAND' to extract them, it is preferable to use the 8076 specialized accessor macros and functions that operate 8077 specifically on `CALL_EXPR' nodes. 8078 8079 `CALL_EXPR_FN' returns a pointer to the function to call; it is 8080 always an expression whose type is a `POINTER_TYPE'. 8081 8082 The number of arguments to the call is returned by 8083 `call_expr_nargs', while the arguments themselves can be accessed 8084 with the `CALL_EXPR_ARG' macro. The arguments are zero-indexed 8085 and numbered left-to-right. You can iterate over the arguments 8086 using `FOR_EACH_CALL_EXPR_ARG', as in: 8087 8088 tree call, arg; 8089 call_expr_arg_iterator iter; 8090 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 8091 /* arg is bound to successive arguments of call. */ 8092 ...; 8093 8094 For non-static member functions, there will be an operand 8095 corresponding to the `this' pointer. There will always be 8096 expressions corresponding to all of the arguments, even if the 8097 function is declared with default arguments and some arguments are 8098 not explicitly provided at the call sites. 8099 8100 `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is 8101 used to implement nested functions. This operand is otherwise 8102 null. 8103 8104 `STMT_EXPR' 8105 These nodes are used to represent GCC's statement-expression 8106 extension. The statement-expression extension allows code like 8107 this: 8108 int f() { return ({ int j; j = 3; j + 7; }); } 8109 In other words, an sequence of statements may occur where a single 8110 expression would normally appear. The `STMT_EXPR' node represents 8111 such an expression. The `STMT_EXPR_STMT' gives the statement 8112 contained in the expression. The value of the expression is the 8113 value of the last sub-statement in the body. More precisely, the 8114 value is the value computed by the last statement nested inside 8115 `BIND_EXPR', `TRY_FINALLY_EXPR', or `TRY_CATCH_EXPR'. For 8116 example, in: 8117 ({ 3; }) 8118 the value is `3' while in: 8119 ({ if (x) { 3; } }) 8120 there is no value. If the `STMT_EXPR' does not yield a value, 8121 it's type will be `void'. 8122 8123 `BIND_EXPR' 8124 These nodes represent local blocks. The first operand is a list of 8125 variables, connected via their `TREE_CHAIN' field. These will 8126 never require cleanups. The scope of these variables is just the 8127 body of the `BIND_EXPR'. The body of the `BIND_EXPR' is the 8128 second operand. 8129 8130 `LOOP_EXPR' 8131 These nodes represent "infinite" loops. The `LOOP_EXPR_BODY' 8132 represents the body of the loop. It should be executed forever, 8133 unless an `EXIT_EXPR' is encountered. 8134 8135 `EXIT_EXPR' 8136 These nodes represent conditional exits from the nearest enclosing 8137 `LOOP_EXPR'. The single operand is the condition; if it is 8138 nonzero, then the loop should be exited. An `EXIT_EXPR' will only 8139 appear within a `LOOP_EXPR'. 8140 8141 `CLEANUP_POINT_EXPR' 8142 These nodes represent full-expressions. The single operand is an 8143 expression to evaluate. Any destructor calls engendered by the 8144 creation of temporaries during the evaluation of that expression 8145 should be performed immediately after the expression is evaluated. 8146 8147 `CONSTRUCTOR' 8148 These nodes represent the brace-enclosed initializers for a 8149 structure or array. The first operand is reserved for use by the 8150 back end. The second operand is a `TREE_LIST'. If the 8151 `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or 8152 `UNION_TYPE', then the `TREE_PURPOSE' of each node in the 8153 `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each 8154 node will be the expression used to initialize that field. 8155 8156 If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then 8157 the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an 8158 `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's. A single 8159 `INTEGER_CST' indicates which element of the array (indexed from 8160 zero) is being assigned to. A `RANGE_EXPR' indicates an inclusive 8161 range of elements to initialize. In both cases the `TREE_VALUE' 8162 is the corresponding initializer. It is re-evaluated for each 8163 element of a `RANGE_EXPR'. If the `TREE_PURPOSE' is `NULL_TREE', 8164 then the initializer is for the next available array element. 8165 8166 In the front end, you should not depend on the fields appearing in 8167 any particular order. However, in the middle end, fields must 8168 appear in declaration order. You should not assume that all 8169 fields will be represented. Unrepresented fields will be set to 8170 zero. 8171 8172 `COMPOUND_LITERAL_EXPR' 8173 These nodes represent ISO C99 compound literals. The 8174 `COMPOUND_LITERAL_EXPR_DECL_STMT' is a `DECL_STMT' containing an 8175 anonymous `VAR_DECL' for the unnamed object represented by the 8176 compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a 8177 `CONSTRUCTOR' representing the brace-enclosed list of initializers 8178 in the compound literal. That anonymous `VAR_DECL' can also be 8179 accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro. 8180 8181 `SAVE_EXPR' 8182 A `SAVE_EXPR' represents an expression (possibly involving 8183 side-effects) that is used more than once. The side-effects should 8184 occur only the first time the expression is evaluated. Subsequent 8185 uses should just reuse the computed value. The first operand to 8186 the `SAVE_EXPR' is the expression to evaluate. The side-effects 8187 should be executed where the `SAVE_EXPR' is first encountered in a 8188 depth-first preorder traversal of the expression tree. 8189 8190 `TARGET_EXPR' 8191 A `TARGET_EXPR' represents a temporary object. The first operand 8192 is a `VAR_DECL' for the temporary variable. The second operand is 8193 the initializer for the temporary. The initializer is evaluated 8194 and, if non-void, copied (bitwise) into the temporary. If the 8195 initializer is void, that means that it will perform the 8196 initialization itself. 8197 8198 Often, a `TARGET_EXPR' occurs on the right-hand side of an 8199 assignment, or as the second operand to a comma-expression which is 8200 itself the right-hand side of an assignment, etc. In this case, 8201 we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is 8202 "orphaned". For a normal `TARGET_EXPR' the temporary variable 8203 should be treated as an alias for the left-hand side of the 8204 assignment, rather than as a new temporary variable. 8205 8206 The third operand to the `TARGET_EXPR', if present, is a 8207 cleanup-expression (i.e., destructor call) for the temporary. If 8208 this expression is orphaned, then this expression must be executed 8209 when the statement containing this expression is complete. These 8210 cleanups must always be executed in the order opposite to that in 8211 which they were encountered. Note that if a temporary is created 8212 on one branch of a conditional operator (i.e., in the second or 8213 third operand to a `COND_EXPR'), the cleanup must be run only if 8214 that branch is actually executed. 8215 8216 See `STMT_IS_FULL_EXPR_P' for more information about running these 8217 cleanups. 8218 8219 `AGGR_INIT_EXPR' 8220 An `AGGR_INIT_EXPR' represents the initialization as the return 8221 value of a function call, or as the result of a constructor. An 8222 `AGGR_INIT_EXPR' will only appear as a full-expression, or as the 8223 second operand of a `TARGET_EXPR'. `AGGR_INIT_EXPR's have a 8224 representation similar to that of `CALL_EXPR's. You can use the 8225 `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the 8226 function to call and the arguments to pass. 8227 8228 If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the 8229 initialization is via a constructor call. The address of the 8230 `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is 8231 taken, and this value replaces the first argument in the argument 8232 list. 8233 8234 In either case, the expression is void. 8235 8236 `VA_ARG_EXPR' 8237 This node is used to implement support for the C/C++ variable 8238 argument-list mechanism. It represents expressions like `va_arg 8239 (ap, type)'. Its `TREE_TYPE' yields the tree representation for 8240 `type' and its sole argument yields the representation for `ap'. 8241 8242 `CHANGE_DYNAMIC_TYPE_EXPR' 8243 Indicates the special aliasing required by C++ placement new. It 8244 has two operands: a type and a location. It means that the 8245 dynamic type of the location is changing to be the specified type. 8246 The alias analysis code takes this into account when doing type 8247 based alias analysis. 8248 8249 `OMP_PARALLEL' 8250 Represents `#pragma omp parallel [clause1 ... clauseN]'. It has 8251 four operands: 8252 8253 Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High 8254 GIMPLE forms. It contains the body of code to be executed by all 8255 the threads. During GIMPLE lowering, this operand becomes `NULL' 8256 and the body is emitted linearly after `OMP_PARALLEL'. 8257 8258 Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated 8259 with the directive. 8260 8261 Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it 8262 contains the `FUNCTION_DECL' for the function that will contain 8263 the body of the parallel region. 8264 8265 Operand `OMP_PARALLEL_DATA_ARG' is also created by 8266 `pass_lower_omp'. If there are shared variables to be communicated 8267 to the children threads, this operand will contain the `VAR_DECL' 8268 that contains all the shared values and variables. 8269 8270 `OMP_FOR' 8271 Represents `#pragma omp for [clause1 ... clauseN]'. It has 5 8272 operands: 8273 8274 Operand `OMP_FOR_BODY' contains the loop body. 8275 8276 Operand `OMP_FOR_CLAUSES' is the list of clauses associated with 8277 the directive. 8278 8279 Operand `OMP_FOR_INIT' is the loop initialization code of the form 8280 `VAR = N1'. 8281 8282 Operand `OMP_FOR_COND' is the loop conditional expression of the 8283 form `VAR {<,>,<=,>=} N2'. 8284 8285 Operand `OMP_FOR_INCR' is the loop index increment of the form 8286 `VAR {+=,-=} INCR'. 8287 8288 Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands 8289 `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'. These 8290 side-effects are part of the `OMP_FOR' block but must be evaluated 8291 before the start of loop body. 8292 8293 The loop index variable `VAR' must be a signed integer variable, 8294 which is implicitly private to each thread. Bounds `N1' and `N2' 8295 and the increment expression `INCR' are required to be loop 8296 invariant integer expressions that are evaluated without any 8297 synchronization. The evaluation order, frequency of evaluation and 8298 side-effects are unspecified by the standard. 8299 8300 `OMP_SECTIONS' 8301 Represents `#pragma omp sections [clause1 ... clauseN]'. 8302 8303 Operand `OMP_SECTIONS_BODY' contains the sections body, which in 8304 turn contains a set of `OMP_SECTION' nodes for each of the 8305 concurrent sections delimited by `#pragma omp section'. 8306 8307 Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated 8308 with the directive. 8309 8310 `OMP_SECTION' 8311 Section delimiter for `OMP_SECTIONS'. 8312 8313 `OMP_SINGLE' 8314 Represents `#pragma omp single'. 8315 8316 Operand `OMP_SINGLE_BODY' contains the body of code to be executed 8317 by a single thread. 8318 8319 Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated 8320 with the directive. 8321 8322 `OMP_MASTER' 8323 Represents `#pragma omp master'. 8324 8325 Operand `OMP_MASTER_BODY' contains the body of code to be executed 8326 by the master thread. 8327 8328 `OMP_ORDERED' 8329 Represents `#pragma omp ordered'. 8330 8331 Operand `OMP_ORDERED_BODY' contains the body of code to be 8332 executed in the sequential order dictated by the loop index 8333 variable. 8334 8335 `OMP_CRITICAL' 8336 Represents `#pragma omp critical [name]'. 8337 8338 Operand `OMP_CRITICAL_BODY' is the critical section. 8339 8340 Operand `OMP_CRITICAL_NAME' is an optional identifier to label the 8341 critical section. 8342 8343 `OMP_RETURN' 8344 This does not represent any OpenMP directive, it is an artificial 8345 marker to indicate the end of the body of an OpenMP. It is used by 8346 the flow graph (`tree-cfg.c') and OpenMP region building code 8347 (`omp-low.c'). 8348 8349 `OMP_CONTINUE' 8350 Similarly, this instruction does not represent an OpenMP 8351 directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the 8352 place where the code needs to loop to the next iteration (in the 8353 case of `OMP_FOR') or the next section (in the case of 8354 `OMP_SECTIONS'). 8355 8356 In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'. 8357 But if there are cleanups that need to occur right after the 8358 looping body, it will be emitted between `OMP_CONTINUE' and 8359 `OMP_RETURN'. 8360 8361 `OMP_ATOMIC' 8362 Represents `#pragma omp atomic'. 8363 8364 Operand 0 is the address at which the atomic operation is to be 8365 performed. 8366 8367 Operand 1 is the expression to evaluate. The gimplifier tries 8368 three alternative code generation strategies. Whenever possible, 8369 an atomic update built-in is used. If that fails, a 8370 compare-and-swap loop is attempted. If that also fails, a regular 8371 critical section around the expression is used. 8372 8373 `OMP_CLAUSE' 8374 Represents clauses associated with one of the `OMP_' directives. 8375 Clauses are represented by separate sub-codes defined in `tree.h'. 8376 Clauses codes can be one of: `OMP_CLAUSE_PRIVATE', 8377 `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE', 8378 `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN', 8379 `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF', 8380 `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE', 8381 `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT', 8382 and `OMP_CLAUSE_REDUCTION'. Each code represents the 8383 corresponding OpenMP clause. 8384 8385 Clauses associated with the same directive are chained together 8386 via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of 8387 variables are restricted to exactly one, accessed with 8388 `OMP_CLAUSE_VAR'. Therefore, multiple variables under the same 8389 clause `C' need to be represented as multiple `C' clauses chained 8390 together. This facilitates adding new clauses during compilation. 8391 8392 `VEC_LSHIFT_EXPR' 8393 8394 `VEC_RSHIFT_EXPR' 8395 These nodes represent whole vector left and right shifts, 8396 respectively. The first operand is the vector to shift; it will 8397 always be of vector type. The second operand is an expression for 8398 the number of bits by which to shift. Note that the result is 8399 undefined if the second operand is larger than or equal to the 8400 first operand's type size. 8401 8402 `VEC_WIDEN_MULT_HI_EXPR' 8403 8404 `VEC_WIDEN_MULT_LO_EXPR' 8405 These nodes represent widening vector multiplication of the high 8406 and low parts of the two input vectors, respectively. Their 8407 operands are vectors that contain the same number of elements 8408 (`N') of the same integral type. The result is a vector that 8409 contains half as many elements, of an integral type whose size is 8410 twice as wide. In the case of `VEC_WIDEN_MULT_HI_EXPR' the high 8411 `N/2' elements of the two vector are multiplied to produce the 8412 vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR' 8413 the low `N/2' elements of the two vector are multiplied to produce 8414 the vector of `N/2' products. 8415 8416 `VEC_UNPACK_HI_EXPR' 8417 8418 `VEC_UNPACK_LO_EXPR' 8419 These nodes represent unpacking of the high and low parts of the 8420 input vector, respectively. The single operand is a vector that 8421 contains `N' elements of the same integral or floating point type. 8422 The result is a vector that contains half as many elements, of an 8423 integral or floating point type whose size is twice as wide. In 8424 the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the 8425 vector are extracted and widened (promoted). In the case of 8426 `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are 8427 extracted and widened (promoted). 8428 8429 `VEC_UNPACK_FLOAT_HI_EXPR' 8430 8431 `VEC_UNPACK_FLOAT_LO_EXPR' 8432 These nodes represent unpacking of the high and low parts of the 8433 input vector, where the values are converted from fixed point to 8434 floating point. The single operand is a vector that contains `N' 8435 elements of the same integral type. The result is a vector that 8436 contains half as many elements of a floating point type whose size 8437 is twice as wide. In the case of `VEC_UNPACK_HI_EXPR' the high 8438 `N/2' elements of the vector are extracted, converted and widened. 8439 In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the 8440 vector are extracted, converted and widened. 8441 8442 `VEC_PACK_TRUNC_EXPR' 8443 This node represents packing of truncated elements of the two 8444 input vectors into the output vector. Input operands are vectors 8445 that contain the same number of elements of the same integral or 8446 floating point type. The result is a vector that contains twice 8447 as many elements of an integral or floating point type whose size 8448 is half as wide. The elements of the two vectors are demoted and 8449 merged (concatenated) to form the output vector. 8450 8451 `VEC_PACK_SAT_EXPR' 8452 This node represents packing of elements of the two input vectors 8453 into the output vector using saturation. Input operands are 8454 vectors that contain the same number of elements of the same 8455 integral type. The result is a vector that contains twice as many 8456 elements of an integral type whose size is half as wide. The 8457 elements of the two vectors are demoted and merged (concatenated) 8458 to form the output vector. 8459 8460 `VEC_PACK_FIX_TRUNC_EXPR' 8461 This node represents packing of elements of the two input vectors 8462 into the output vector, where the values are converted from 8463 floating point to fixed point. Input operands are vectors that 8464 contain the same number of elements of a floating point type. The 8465 result is a vector that contains twice as many elements of an 8466 integral type whose size is half as wide. The elements of the two 8467 vectors are merged (concatenated) to form the output vector. 8468 8469 `VEC_EXTRACT_EVEN_EXPR' 8470 8471 `VEC_EXTRACT_ODD_EXPR' 8472 These nodes represent extracting of the even/odd elements of the 8473 two input vectors, respectively. Their operands and result are 8474 vectors that contain the same number of elements of the same type. 8475 8476 `VEC_INTERLEAVE_HIGH_EXPR' 8477 8478 `VEC_INTERLEAVE_LOW_EXPR' 8479 These nodes represent merging and interleaving of the high/low 8480 elements of the two input vectors, respectively. The operands and 8481 the result are vectors that contain the same number of elements 8482 (`N') of the same type. In the case of 8483 `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first 8484 input vector are interleaved with the high `N/2' elements of the 8485 second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the 8486 low `N/2' elements of the first input vector are interleaved with 8487 the low `N/2' elements of the second input vector. 8488 8489 8490 8491 File: gccint.info, Node: Tree SSA, Next: Loop Analysis and Representation, Prev: Control Flow, Up: Top 8492 8493 10 Analysis and Optimization of GIMPLE Trees 8494 ******************************************** 8495 8496 GCC uses three main intermediate languages to represent the program 8497 during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 8498 language-independent representation generated by each front end. It is 8499 used to serve as an interface between the parser and optimizer. 8500 GENERIC is a common representation that is able to represent programs 8501 written in all the languages supported by GCC. 8502 8503 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 8504 target and language independent optimizations (e.g., inlining, constant 8505 propagation, tail call elimination, redundancy elimination, etc). Much 8506 like GENERIC, GIMPLE is a language independent, tree based 8507 representation. However, it differs from GENERIC in that the GIMPLE 8508 grammar is more restrictive: expressions contain no more than 3 8509 operands (except function calls), it has no control flow structures and 8510 expressions with side-effects are only allowed on the right hand side 8511 of assignments. See the chapter describing GENERIC and GIMPLE for more 8512 details. 8513 8514 This chapter describes the data structures and functions used in the 8515 GIMPLE optimizers (also known as "tree optimizers" or "middle end"). 8516 In particular, it focuses on all the macros, data structures, functions 8517 and programming constructs needed to implement optimization passes for 8518 GIMPLE. 8519 8520 * Menu: 8521 8522 * GENERIC:: A high-level language-independent representation. 8523 * GIMPLE:: A lower-level factored tree representation. 8524 * Annotations:: Attributes for statements and variables. 8525 * Statement Operands:: Variables referenced by GIMPLE statements. 8526 * SSA:: Static Single Assignment representation. 8527 * Alias analysis:: Representing aliased loads and stores. 8528 8529 8530 File: gccint.info, Node: GENERIC, Next: GIMPLE, Up: Tree SSA 8531 8532 10.1 GENERIC 8533 ============ 8534 8535 The purpose of GENERIC is simply to provide a language-independent way 8536 of representing an entire function in trees. To this end, it was 8537 necessary to add a few new tree codes to the back end, but most 8538 everything was already there. If you can express it with the codes in 8539 `gcc/tree.def', it's GENERIC. 8540 8541 Early on, there was a great deal of debate about how to think about 8542 statements in a tree IL. In GENERIC, a statement is defined as any 8543 expression whose value, if any, is ignored. A statement will always 8544 have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a 8545 non-statement expression may also have side effects. A `CALL_EXPR', 8546 for instance. 8547 8548 It would be possible for some local optimizations to work on the 8549 GENERIC form of a function; indeed, the adapted tree inliner works fine 8550 on GENERIC, but the current compiler performs inlining after lowering 8551 to GIMPLE (a restricted form described in the next section). Indeed, 8552 currently the frontends perform this lowering before handing off to 8553 `tree_rest_of_compilation', but this seems inelegant. 8554 8555 If necessary, a front end can use some language-dependent tree codes 8556 in its GENERIC representation, so long as it provides a hook for 8557 converting them to GIMPLE and doesn't expect them to work with any 8558 (hypothetical) optimizers that run before the conversion to GIMPLE. 8559 The intermediate representation used while parsing C and C++ looks very 8560 little like GENERIC, but the C and C++ gimplifier hooks are perfectly 8561 happy to take it as input and spit out GIMPLE. 8562 8563 8564 File: gccint.info, Node: GIMPLE, Next: Annotations, Prev: GENERIC, Up: Tree SSA 8565 8566 10.2 GIMPLE 8567 =========== 8568 8569 GIMPLE is a simplified subset of GENERIC for use in optimization. The 8570 particular subset chosen (and the name) was heavily influenced by the 8571 SIMPLE IL used by the McCAT compiler project at McGill University, 8572 though we have made some different choices. For one thing, SIMPLE 8573 doesn't support `goto'; a production compiler can't afford that kind of 8574 restriction. 8575 8576 GIMPLE retains much of the structure of the parse trees: lexical 8577 scopes are represented as containers, rather than markers. However, 8578 expressions are broken down into a 3-address form, using temporary 8579 variables to hold intermediate values. Also, control structures are 8580 lowered to gotos. 8581 8582 In GIMPLE no container node is ever used for its value; if a 8583 `COND_EXPR' or `BIND_EXPR' has a value, it is stored into a temporary 8584 within the controlled blocks, and that temporary is used in place of 8585 the container. 8586 8587 The compiler pass which lowers GENERIC to GIMPLE is referred to as the 8588 `gimplifier'. The gimplifier works recursively, replacing complex 8589 statements with sequences of simple statements. 8590 8591 * Menu: 8592 8593 * Interfaces:: 8594 * Temporaries:: 8595 * GIMPLE Expressions:: 8596 * Statements:: 8597 * GIMPLE Example:: 8598 * Rough GIMPLE Grammar:: 8599 8600 8601 File: gccint.info, Node: Interfaces, Next: Temporaries, Up: GIMPLE 8602 8603 10.2.1 Interfaces 8604 ----------------- 8605 8606 The tree representation of a function is stored in `DECL_SAVED_TREE'. 8607 It is lowered to GIMPLE by a call to `gimplify_function_tree'. 8608 8609 If a front end wants to include language-specific tree codes in the 8610 tree representation which it provides to the back end, it must provide a 8611 definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 8612 front end trees to GIMPLE. Usually such a hook will involve much of 8613 the same code for expanding front end trees to RTL. This function can 8614 return fully lowered GIMPLE, or it can return GENERIC trees and let the 8615 main gimplifier lower them the rest of the way; this is often simpler. 8616 GIMPLE that is not fully lowered is known as "high GIMPLE" and consists 8617 of the IL before the pass `pass_lower_cf'. High GIMPLE still contains 8618 lexical scopes and nested expressions, while low GIMPLE exposes all of 8619 the implicit jumps for control expressions like `COND_EXPR'. 8620 8621 The C and C++ front ends currently convert directly from front end 8622 trees to GIMPLE, and hand that off to the back end rather than first 8623 converting to GENERIC. Their gimplifier hooks know about all the 8624 `_STMT' nodes and how to convert them to GENERIC forms. There was some 8625 work done on a genericization pass which would run first, but the 8626 existence of `STMT_EXPR' meant that in order to convert all of the C 8627 statements into GENERIC equivalents would involve walking the entire 8628 tree anyway, so it was simpler to lower all the way. This might change 8629 in the future if someone writes an optimization pass which would work 8630 better with higher-level trees, but currently the optimizers all expect 8631 GIMPLE. 8632 8633 A front end which wants to use the tree optimizers (and already has 8634 some sort of whole-function tree representation) only needs to provide 8635 a definition of `LANG_HOOKS_GIMPLIFY_EXPR', call 8636 `gimplify_function_tree' to lower to GIMPLE, and then hand off to 8637 `tree_rest_of_compilation' to compile and output the function. 8638 8639 You can tell the compiler to dump a C-like representation of the GIMPLE 8640 form with the flag `-fdump-tree-gimple'. 8641 8642 8643 File: gccint.info, Node: Temporaries, Next: GIMPLE Expressions, Prev: Interfaces, Up: GIMPLE 8644 8645 10.2.2 Temporaries 8646 ------------------ 8647 8648 When gimplification encounters a subexpression which is too complex, it 8649 creates a new temporary variable to hold the value of the subexpression, 8650 and adds a new statement to initialize it before the current statement. 8651 These special temporaries are known as `expression temporaries', and are 8652 allocated using `get_formal_tmp_var'. The compiler tries to always 8653 evaluate identical expressions into the same temporary, to simplify 8654 elimination of redundant calculations. 8655 8656 We can only use expression temporaries when we know that it will not be 8657 reevaluated before its value is used, and that it will not be otherwise 8658 modified(1). Other temporaries can be allocated using 8659 `get_initialized_tmp_var' or `create_tmp_var'. 8660 8661 Currently, an expression like `a = b + 5' is not reduced any further. 8662 We tried converting it to something like 8663 T1 = b + 5; 8664 a = T1; 8665 but this bloated the representation for minimal benefit. However, a 8666 variable which must live in memory cannot appear in an expression; its 8667 value is explicitly loaded into a temporary first. Similarly, storing 8668 the value of an expression to a memory variable goes through a 8669 temporary. 8670 8671 ---------- Footnotes ---------- 8672 8673 (1) These restrictions are derived from those in Morgan 4.8. 8674 8675 8676 File: gccint.info, Node: GIMPLE Expressions, Next: Statements, Prev: Temporaries, Up: GIMPLE 8677 8678 10.2.3 Expressions 8679 ------------------ 8680 8681 In general, expressions in GIMPLE consist of an operation and the 8682 appropriate number of simple operands; these operands must either be a 8683 GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register 8684 variable. More complex operands are factored out into temporaries, so 8685 that 8686 a = b + c + d 8687 becomes 8688 T1 = b + c; 8689 a = T1 + d; 8690 8691 The same rule holds for arguments to a `CALL_EXPR'. 8692 8693 The target of an assignment is usually a variable, but can also be an 8694 `INDIRECT_REF' or a compound lvalue as described below. 8695 8696 * Menu: 8697 8698 * Compound Expressions:: 8699 * Compound Lvalues:: 8700 * Conditional Expressions:: 8701 * Logical Operators:: 8702 8703 8704 File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: GIMPLE Expressions 8705 8706 10.2.3.1 Compound Expressions 8707 ............................. 8708 8709 The left-hand side of a C comma expression is simply moved into a 8710 separate statement. 8711 8712 8713 File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: GIMPLE Expressions 8714 8715 10.2.3.2 Compound Lvalues 8716 ......................... 8717 8718 Currently compound lvalues involving array and structure field 8719 references are not broken down; an expression like `a.b[2] = 42' is not 8720 reduced any further (though complex array subscripts are). This 8721 restriction is a workaround for limitations in later optimizers; if we 8722 were to convert this to 8723 8724 T1 = &a.b; 8725 T1[2] = 42; 8726 8727 alias analysis would not remember that the reference to `T1[2]' came 8728 by way of `a.b', so it would think that the assignment could alias 8729 another member of `a'; this broke `struct-alias-1.c'. Future optimizer 8730 improvements may make this limitation unnecessary. 8731 8732 8733 File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: GIMPLE Expressions 8734 8735 10.2.3.3 Conditional Expressions 8736 ................................ 8737 8738 A C `?:' expression is converted into an `if' statement with each 8739 branch assigning to the same temporary. So, 8740 8741 a = b ? c : d; 8742 becomes 8743 if (b) 8744 T1 = c; 8745 else 8746 T1 = d; 8747 a = T1; 8748 8749 Tree level if-conversion pass re-introduces `?:' expression, if 8750 appropriate. It is used to vectorize loops with conditions using 8751 vector conditional operations. 8752 8753 Note that in GIMPLE, `if' statements are also represented using 8754 `COND_EXPR', as described below. 8755 8756 8757 File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: GIMPLE Expressions 8758 8759 10.2.3.4 Logical Operators 8760 .......................... 8761 8762 Except when they appear in the condition operand of a `COND_EXPR', 8763 logical `and' and `or' operators are simplified as follows: `a = b && 8764 c' becomes 8765 8766 T1 = (bool)b; 8767 if (T1) 8768 T1 = (bool)c; 8769 a = T1; 8770 8771 Note that `T1' in this example cannot be an expression temporary, 8772 because it has two different assignments. 8773 8774 8775 File: gccint.info, Node: Statements, Next: GIMPLE Example, Prev: GIMPLE Expressions, Up: GIMPLE 8776 8777 10.2.4 Statements 8778 ----------------- 8779 8780 Most statements will be assignment statements, represented by 8781 `MODIFY_EXPR'. A `CALL_EXPR' whose value is ignored can also be a 8782 statement. No other C expressions can appear at statement level; a 8783 reference to a volatile object is converted into a `MODIFY_EXPR'. In 8784 GIMPLE form, type of `MODIFY_EXPR' is not meaningful. Instead, use type 8785 of LHS or RHS. 8786 8787 There are also several varieties of complex statements. 8788 8789 * Menu: 8790 8791 * Blocks:: 8792 * Statement Sequences:: 8793 * Empty Statements:: 8794 * Loops:: 8795 * Selection Statements:: 8796 * Jumps:: 8797 * Cleanups:: 8798 * GIMPLE Exception Handling:: 8799 8800 8801 File: gccint.info, Node: Blocks, Next: Statement Sequences, Up: Statements 8802 8803 10.2.4.1 Blocks 8804 ............... 8805 8806 Block scopes and the variables they declare in GENERIC and GIMPLE are 8807 expressed using the `BIND_EXPR' code, which in previous versions of GCC 8808 was primarily used for the C statement-expression extension. 8809 8810 Variables in a block are collected into `BIND_EXPR_VARS' in 8811 declaration order. Any runtime initialization is moved out of 8812 `DECL_INITIAL' and into a statement in the controlled block. When 8813 gimplifying from C or C++, this initialization replaces the `DECL_STMT'. 8814 8815 Variable-length arrays (VLAs) complicate this process, as their size 8816 often refers to variables initialized earlier in the block. To handle 8817 this, we currently split the block at that point, and move the VLA into 8818 a new, inner `BIND_EXPR'. This strategy may change in the future. 8819 8820 `DECL_SAVED_TREE' for a GIMPLE function will always be a `BIND_EXPR' 8821 which contains declarations for the temporary variables used in the 8822 function. 8823 8824 A C++ program will usually contain more `BIND_EXPR's than there are 8825 syntactic blocks in the source code, since several C++ constructs have 8826 implicit scopes associated with them. On the other hand, although the 8827 C++ front end uses pseudo-scopes to handle cleanups for objects with 8828 destructors, these don't translate into the GIMPLE form; multiple 8829 declarations at the same level use the same `BIND_EXPR'. 8830 8831 8832 File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 8833 8834 10.2.4.2 Statement Sequences 8835 ............................ 8836 8837 Multiple statements at the same nesting level are collected into a 8838 `STATEMENT_LIST'. Statement lists are modified and traversed using the 8839 interface in `tree-iterator.h'. 8840 8841 8842 File: gccint.info, Node: Empty Statements, Next: Loops, Prev: Statement Sequences, Up: Statements 8843 8844 10.2.4.3 Empty Statements 8845 ......................... 8846 8847 Whenever possible, statements with no effect are discarded. But if they 8848 are nested within another construct which cannot be discarded for some 8849 reason, they are instead replaced with an empty statement, generated by 8850 `build_empty_stmt'. Initially, all empty statements were shared, after 8851 the pattern of the Java front end, but this caused a lot of trouble in 8852 practice. 8853 8854 An empty statement is represented as `(void)0'. 8855 8856 8857 File: gccint.info, Node: Loops, Next: Selection Statements, Prev: Empty Statements, Up: Statements 8858 8859 10.2.4.4 Loops 8860 .............. 8861 8862 At one time loops were expressed in GIMPLE using `LOOP_EXPR', but now 8863 they are lowered to explicit gotos. 8864 8865 8866 File: gccint.info, Node: Selection Statements, Next: Jumps, Prev: Loops, Up: Statements 8867 8868 10.2.4.5 Selection Statements 8869 ............................. 8870 8871 A simple selection statement, such as the C `if' statement, is 8872 expressed in GIMPLE using a void `COND_EXPR'. If only one branch is 8873 used, the other is filled with an empty statement. 8874 8875 Normally, the condition expression is reduced to a simple comparison. 8876 If it is a shortcut (`&&' or `||') expression, however, we try to break 8877 up the `if' into multiple `if's so that the implied shortcut is taken 8878 directly, much like the transformation done by `do_jump' in the RTL 8879 expander. 8880 8881 A `SWITCH_EXPR' in GIMPLE contains the condition and a `TREE_VEC' of 8882 `CASE_LABEL_EXPR's describing the case values and corresponding 8883 `LABEL_DECL's to jump to. The body of the `switch' is moved after the 8884 `SWITCH_EXPR'. 8885 8886 8887 File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Selection Statements, Up: Statements 8888 8889 10.2.4.6 Jumps 8890 .............. 8891 8892 Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'. 8893 8894 The operand of a `GOTO_EXPR' must be either a label or a variable 8895 containing the address to jump to. 8896 8897 The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL', 8898 or a `MODIFY_EXPR' which sets the return value. It would be nice to 8899 move the `MODIFY_EXPR' into a separate statement, but the special 8900 return semantics in `expand_return' make that difficult. It may still 8901 happen in the future, perhaps by moving most of that logic into 8902 `expand_assignment'. 8903 8904 8905 File: gccint.info, Node: Cleanups, Next: GIMPLE Exception Handling, Prev: Jumps, Up: Statements 8906 8907 10.2.4.7 Cleanups 8908 ................. 8909 8910 Destructors for local C++ objects and similar dynamic cleanups are 8911 represented in GIMPLE by a `TRY_FINALLY_EXPR'. `TRY_FINALLY_EXPR' has 8912 two operands, both of which are a sequence of statements to execute. 8913 The first sequence is executed. When it completes the second sequence 8914 is executed. 8915 8916 The first sequence may complete in the following ways: 8917 8918 1. Execute the last statement in the sequence and fall off the end. 8919 8920 2. Execute a goto statement (`GOTO_EXPR') to an ordinary label 8921 outside the sequence. 8922 8923 3. Execute a return statement (`RETURN_EXPR'). 8924 8925 4. Throw an exception. This is currently not explicitly represented 8926 in GIMPLE. 8927 8928 8929 The second sequence is not executed if the first sequence completes by 8930 calling `setjmp' or `exit' or any other function that does not return. 8931 The second sequence is also not executed if the first sequence 8932 completes via a non-local goto or a computed goto (in general the 8933 compiler does not know whether such a goto statement exits the first 8934 sequence or not, so we assume that it doesn't). 8935 8936 After the second sequence is executed, if it completes normally by 8937 falling off the end, execution continues wherever the first sequence 8938 would have continued, by falling off the end, or doing a goto, etc. 8939 8940 `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 8941 to appear on every edge out of the controlled block; this reduces the 8942 freedom to move code across these edges. Therefore, the EH lowering 8943 pass which runs before most of the optimization passes eliminates these 8944 expressions by explicitly adding the cleanup to each edge. Rethrowing 8945 the exception is represented using `RESX_EXPR'. 8946 8947 8948 File: gccint.info, Node: GIMPLE Exception Handling, Prev: Cleanups, Up: Statements 8949 8950 10.2.4.8 Exception Handling 8951 ........................... 8952 8953 Other exception handling constructs are represented using 8954 `TRY_CATCH_EXPR'. `TRY_CATCH_EXPR' has two operands. The first 8955 operand is a sequence of statements to execute. If executing these 8956 statements does not throw an exception, then the second operand is 8957 ignored. Otherwise, if an exception is thrown, then the second operand 8958 of the `TRY_CATCH_EXPR' is checked. The second operand may have the 8959 following forms: 8960 8961 1. A sequence of statements to execute. When an exception occurs, 8962 these statements are executed, and then the exception is rethrown. 8963 8964 2. A sequence of `CATCH_EXPR' expressions. Each `CATCH_EXPR' has a 8965 list of applicable exception types and handler code. If the 8966 thrown exception matches one of the caught types, the associated 8967 handler code is executed. If the handler code falls off the 8968 bottom, execution continues after the original `TRY_CATCH_EXPR'. 8969 8970 3. An `EH_FILTER_EXPR' expression. This has a list of permitted 8971 exception types, and code to handle a match failure. If the 8972 thrown exception does not match one of the allowed types, the 8973 associated match failure code is executed. If the thrown exception 8974 does match, it continues unwinding the stack looking for the next 8975 handler. 8976 8977 8978 Currently throwing an exception is not directly represented in GIMPLE, 8979 since it is implemented by calling a function. At some point in the 8980 future we will want to add some way to express that the call will throw 8981 an exception of a known type. 8982 8983 Just before running the optimizers, the compiler lowers the high-level 8984 EH constructs above into a set of `goto's, magic labels, and EH 8985 regions. Continuing to unwind at the end of a cleanup is represented 8986 with a `RESX_EXPR'. 8987 8988 8989 File: gccint.info, Node: GIMPLE Example, Next: Rough GIMPLE Grammar, Prev: Statements, Up: GIMPLE 8990 8991 10.2.5 GIMPLE Example 8992 --------------------- 8993 8994 struct A { A(); ~A(); }; 8995 8996 int i; 8997 int g(); 8998 void f() 8999 { 9000 A a; 9001 int j = (--i, i ? 0 : 1); 9002 9003 for (int x = 42; x > 0; --x) 9004 { 9005 i += g()*4 + 32; 9006 } 9007 } 9008 9009 becomes 9010 9011 void f() 9012 { 9013 int i.0; 9014 int T.1; 9015 int iftmp.2; 9016 int T.3; 9017 int T.4; 9018 int T.5; 9019 int T.6; 9020 9021 { 9022 struct A a; 9023 int j; 9024 9025 __comp_ctor (&a); 9026 try 9027 { 9028 i.0 = i; 9029 T.1 = i.0 - 1; 9030 i = T.1; 9031 i.0 = i; 9032 if (i.0 == 0) 9033 iftmp.2 = 1; 9034 else 9035 iftmp.2 = 0; 9036 j = iftmp.2; 9037 { 9038 int x; 9039 9040 x = 42; 9041 goto test; 9042 loop:; 9043 9044 T.3 = g (); 9045 T.4 = T.3 * 4; 9046 i.0 = i; 9047 T.5 = T.4 + i.0; 9048 T.6 = T.5 + 32; 9049 i = T.6; 9050 x = x - 1; 9051 9052 test:; 9053 if (x > 0) 9054 goto loop; 9055 else 9056 goto break_; 9057 break_:; 9058 } 9059 } 9060 finally 9061 { 9062 __comp_dtor (&a); 9063 } 9064 } 9065 } 9066 9067 9068 File: gccint.info, Node: Rough GIMPLE Grammar, Prev: GIMPLE Example, Up: GIMPLE 9069 9070 10.2.6 Rough GIMPLE Grammar 9071 --------------------------- 9072 9073 function : FUNCTION_DECL 9074 DECL_SAVED_TREE -> compound-stmt 9075 9076 compound-stmt: STATEMENT_LIST 9077 members -> stmt 9078 9079 stmt : block 9080 | if-stmt 9081 | switch-stmt 9082 | goto-stmt 9083 | return-stmt 9084 | resx-stmt 9085 | label-stmt 9086 | try-stmt 9087 | modify-stmt 9088 | call-stmt 9089 9090 block : BIND_EXPR 9091 BIND_EXPR_VARS -> chain of DECLs 9092 BIND_EXPR_BLOCK -> BLOCK 9093 BIND_EXPR_BODY -> compound-stmt 9094 9095 if-stmt : COND_EXPR 9096 op0 -> condition 9097 op1 -> compound-stmt 9098 op2 -> compound-stmt 9099 9100 switch-stmt : SWITCH_EXPR 9101 op0 -> val 9102 op1 -> NULL 9103 op2 -> TREE_VEC of CASE_LABEL_EXPRs 9104 The CASE_LABEL_EXPRs are sorted by CASE_LOW, 9105 and default is last. 9106 9107 goto-stmt : GOTO_EXPR 9108 op0 -> LABEL_DECL | val 9109 9110 return-stmt : RETURN_EXPR 9111 op0 -> return-value 9112 9113 return-value : NULL 9114 | RESULT_DECL 9115 | MODIFY_EXPR 9116 op0 -> RESULT_DECL 9117 op1 -> lhs 9118 9119 resx-stmt : RESX_EXPR 9120 9121 label-stmt : LABEL_EXPR 9122 op0 -> LABEL_DECL 9123 9124 try-stmt : TRY_CATCH_EXPR 9125 op0 -> compound-stmt 9126 op1 -> handler 9127 | TRY_FINALLY_EXPR 9128 op0 -> compound-stmt 9129 op1 -> compound-stmt 9130 9131 handler : catch-seq 9132 | EH_FILTER_EXPR 9133 | compound-stmt 9134 9135 catch-seq : STATEMENT_LIST 9136 members -> CATCH_EXPR 9137 9138 modify-stmt : MODIFY_EXPR 9139 op0 -> lhs 9140 op1 -> rhs 9141 9142 call-stmt : CALL_EXPR 9143 op0 -> val | OBJ_TYPE_REF 9144 op1 -> call-arg-list 9145 9146 call-arg-list: TREE_LIST 9147 members -> lhs | CONST 9148 9149 addr-expr-arg: ID 9150 | compref 9151 9152 addressable : addr-expr-arg 9153 | indirectref 9154 9155 with-size-arg: addressable 9156 | call-stmt 9157 9158 indirectref : INDIRECT_REF 9159 op0 -> val 9160 9161 lhs : addressable 9162 | bitfieldref 9163 | WITH_SIZE_EXPR 9164 op0 -> with-size-arg 9165 op1 -> val 9166 9167 min-lval : ID 9168 | indirectref 9169 9170 bitfieldref : BIT_FIELD_REF 9171 op0 -> inner-compref 9172 op1 -> CONST 9173 op2 -> val 9174 9175 compref : inner-compref 9176 | TARGET_MEM_REF 9177 op0 -> ID 9178 op1 -> val 9179 op2 -> val 9180 op3 -> CONST 9181 op4 -> CONST 9182 | REALPART_EXPR 9183 op0 -> inner-compref 9184 | IMAGPART_EXPR 9185 op0 -> inner-compref 9186 9187 inner-compref: min-lval 9188 | COMPONENT_REF 9189 op0 -> inner-compref 9190 op1 -> FIELD_DECL 9191 op2 -> val 9192 | ARRAY_REF 9193 op0 -> inner-compref 9194 op1 -> val 9195 op2 -> val 9196 op3 -> val 9197 | ARRAY_RANGE_REF 9198 op0 -> inner-compref 9199 op1 -> val 9200 op2 -> val 9201 op3 -> val 9202 | VIEW_CONVERT_EXPR 9203 op0 -> inner-compref 9204 9205 condition : val 9206 | RELOP 9207 op0 -> val 9208 op1 -> val 9209 9210 val : ID 9211 | invariant ADDR_EXPR 9212 op0 -> addr-expr-arg 9213 | CONST 9214 9215 rhs : lhs 9216 | CONST 9217 | call-stmt 9218 | ADDR_EXPR 9219 op0 -> addr-expr-arg 9220 | UNOP 9221 op0 -> val 9222 | BINOP 9223 op0 -> val 9224 op1 -> val 9225 | RELOP 9226 op0 -> val 9227 op1 -> val 9228 | COND_EXPR 9229 op0 -> condition 9230 op1 -> val 9231 op2 -> val 9232 9233 9234 File: gccint.info, Node: Annotations, Next: Statement Operands, Prev: GIMPLE, Up: Tree SSA 9235 9236 10.3 Annotations 9237 ================ 9238 9239 The optimizers need to associate attributes with statements and 9240 variables during the optimization process. For instance, we need to 9241 know what basic block a statement belongs to or whether a variable has 9242 aliases. All these attributes are stored in data structures called 9243 annotations which are then linked to the field `ann' in `struct 9244 tree_common'. 9245 9246 Presently, we define annotations for statements (`stmt_ann_t'), 9247 variables (`var_ann_t') and SSA names (`ssa_name_ann_t'). Annotations 9248 are defined and documented in `tree-flow.h'. 9249 9250 9251 File: gccint.info, Node: Statement Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 9252 9253 10.4 Statement Operands 9254 ======================= 9255 9256 Almost every GIMPLE statement will contain a reference to a variable or 9257 memory location. Since statements come in different shapes and sizes, 9258 their operands are going to be located at various spots inside the 9259 statement's tree. To facilitate access to the statement's operands, 9260 they are organized into lists associated inside each statement's 9261 annotation. Each element in an operand list is a pointer to a 9262 `VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node. This provides a very 9263 convenient way of examining and replacing operands. 9264 9265 Data flow analysis and optimization is done on all tree nodes 9266 representing variables. Any node for which `SSA_VAR_P' returns nonzero 9267 is considered when scanning statement operands. However, not all 9268 `SSA_VAR_P' variables are processed in the same way. For the purposes 9269 of optimization, we need to distinguish between references to local 9270 scalar variables and references to globals, statics, structures, 9271 arrays, aliased variables, etc. The reason is simple, the compiler can 9272 gather complete data flow information for a local scalar. On the other 9273 hand, a global variable may be modified by a function call, it may not 9274 be possible to keep track of all the elements of an array or the fields 9275 of a structure, etc. 9276 9277 The operand scanner gathers two kinds of operands: "real" and 9278 "virtual". An operand for which `is_gimple_reg' returns true is 9279 considered real, otherwise it is a virtual operand. We also 9280 distinguish between uses and definitions. An operand is used if its 9281 value is loaded by the statement (e.g., the operand at the RHS of an 9282 assignment). If the statement assigns a new value to the operand, the 9283 operand is considered a definition (e.g., the operand at the LHS of an 9284 assignment). 9285 9286 Virtual and real operands also have very different data flow 9287 properties. Real operands are unambiguous references to the full 9288 object that they represent. For instance, given 9289 9290 { 9291 int a, b; 9292 a = b 9293 } 9294 9295 Since `a' and `b' are non-aliased locals, the statement `a = b' will 9296 have one real definition and one real use because variable `b' is 9297 completely modified with the contents of variable `a'. Real definition 9298 are also known as "killing definitions". Similarly, the use of `a' 9299 reads all its bits. 9300 9301 In contrast, virtual operands are used with variables that can have a 9302 partial or ambiguous reference. This includes structures, arrays, 9303 globals, and aliased variables. In these cases, we have two types of 9304 definitions. For globals, structures, and arrays, we can determine from 9305 a statement whether a variable of these types has a killing definition. 9306 If the variable does, then the statement is marked as having a "must 9307 definition" of that variable. However, if a statement is only defining 9308 a part of the variable (i.e. a field in a structure), or if we know 9309 that a statement might define the variable but we cannot say for sure, 9310 then we mark that statement as having a "may definition". For 9311 instance, given 9312 9313 { 9314 int a, b, *p; 9315 9316 if (...) 9317 p = &a; 9318 else 9319 p = &b; 9320 *p = 5; 9321 return *p; 9322 } 9323 9324 The assignment `*p = 5' may be a definition of `a' or `b'. If we 9325 cannot determine statically where `p' is pointing to at the time of the 9326 store operation, we create virtual definitions to mark that statement 9327 as a potential definition site for `a' and `b'. Memory loads are 9328 similarly marked with virtual use operands. Virtual operands are shown 9329 in tree dumps right before the statement that contains them. To 9330 request a tree dump with virtual operands, use the `-vops' option to 9331 `-fdump-tree': 9332 9333 { 9334 int a, b, *p; 9335 9336 if (...) 9337 p = &a; 9338 else 9339 p = &b; 9340 # a = VDEF <a> 9341 # b = VDEF <b> 9342 *p = 5; 9343 9344 # VUSE <a> 9345 # VUSE <b> 9346 return *p; 9347 } 9348 9349 Notice that `VDEF' operands have two copies of the referenced 9350 variable. This indicates that this is not a killing definition of that 9351 variable. In this case we refer to it as a "may definition" or 9352 "aliased store". The presence of the second copy of the variable in 9353 the `VDEF' operand will become important when the function is converted 9354 into SSA form. This will be used to link all the non-killing 9355 definitions to prevent optimizations from making incorrect assumptions 9356 about them. 9357 9358 Operands are updated as soon as the statement is finished via a call 9359 to `update_stmt'. If statement elements are changed via `SET_USE' or 9360 `SET_DEF', then no further action is required (i.e., those macros take 9361 care of updating the statement). If changes are made by manipulating 9362 the statement's tree directly, then a call must be made to 9363 `update_stmt' when complete. Calling one of the `bsi_insert' routines 9364 or `bsi_replace' performs an implicit call to `update_stmt'. 9365 9366 10.4.1 Operand Iterators And Access Routines 9367 -------------------------------------------- 9368 9369 Operands are collected by `tree-ssa-operands.c'. They are stored 9370 inside each statement's annotation and can be accessed through either 9371 the operand iterators or an access routine. 9372 9373 The following access routines are available for examining operands: 9374 9375 1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 9376 NULL unless there is exactly one operand matching the specified 9377 flags. If there is exactly one operand, the operand is returned 9378 as either a `tree', `def_operand_p', or `use_operand_p'. 9379 9380 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 9381 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 9382 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 9383 9384 2. `ZERO_SSA_OPERANDS': This macro returns true if there are no 9385 operands matching the specified flags. 9386 9387 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 9388 return; 9389 9390 3. `NUM_SSA_OPERANDS': This macro Returns the number of operands 9391 matching 'flags'. This actually executes a loop to perform the 9392 count, so only use this if it is really needed. 9393 9394 int count = NUM_SSA_OPERANDS (stmt, flags) 9395 9396 If you wish to iterate over some or all operands, use the 9397 `FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 9398 all the operands for a statement: 9399 9400 void 9401 print_ops (tree stmt) 9402 { 9403 ssa_op_iter; 9404 tree var; 9405 9406 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 9407 print_generic_expr (stderr, var, TDF_SLIM); 9408 } 9409 9410 How to choose the appropriate iterator: 9411 9412 1. Determine whether you are need to see the operand pointers, or 9413 just the trees, and choose the appropriate macro: 9414 9415 Need Macro: 9416 ---- ------- 9417 use_operand_p FOR_EACH_SSA_USE_OPERAND 9418 def_operand_p FOR_EACH_SSA_DEF_OPERAND 9419 tree FOR_EACH_SSA_TREE_OPERAND 9420 9421 2. You need to declare a variable of the type you are interested 9422 in, and an ssa_op_iter structure which serves as the loop 9423 controlling variable. 9424 9425 3. Determine which operands you wish to use, and specify the flags of 9426 those you are interested in. They are documented in 9427 `tree-ssa-operands.h': 9428 9429 #define SSA_OP_USE 0x01 /* Real USE operands. */ 9430 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 9431 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 9432 #define SSA_OP_VMAYUSE 0x08 /* USE portion of VDEFS. */ 9433 #define SSA_OP_VDEF 0x10 /* DEF portion of VDEFS. */ 9434 9435 /* These are commonly grouped operand flags. */ 9436 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) 9437 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 9438 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 9439 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 9440 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 9441 9442 So if you want to look at the use pointers for all the `USE' and 9443 `VUSE' operands, you would do something like: 9444 9445 use_operand_p use_p; 9446 ssa_op_iter iter; 9447 9448 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 9449 { 9450 process_use_ptr (use_p); 9451 } 9452 9453 The `TREE' macro is basically the same as the `USE' and `DEF' macros, 9454 only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and 9455 `DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use 9456 and defs flags can be mixed. 9457 9458 tree var; 9459 ssa_op_iter iter; 9460 9461 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 9462 { 9463 print_generic_expr (stderr, var, TDF_SLIM); 9464 } 9465 9466 `VDEF's are broken into two flags, one for the `DEF' portion 9467 (`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE'). If all 9468 you want to look at are the `VDEF's together, there is a fourth 9469 iterator macro for this, which returns both a def_operand_p and a 9470 use_operand_p for each `VDEF' in the statement. Note that you don't 9471 need any flags for this one. 9472 9473 use_operand_p use_p; 9474 def_operand_p def_p; 9475 ssa_op_iter iter; 9476 9477 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) 9478 { 9479 my_code; 9480 } 9481 9482 There are many examples in the code as well, as well as the 9483 documentation in `tree-ssa-operands.h'. 9484 9485 There are also a couple of variants on the stmt iterators regarding PHI 9486 nodes. 9487 9488 `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND', 9489 except it works over `PHI' arguments instead of statement operands. 9490 9491 /* Look at every virtual PHI use. */ 9492 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 9493 { 9494 my_code; 9495 } 9496 9497 /* Look at every real PHI use. */ 9498 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 9499 my_code; 9500 9501 /* Look at every every PHI use. */ 9502 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 9503 my_code; 9504 9505 `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 9506 `FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 9507 statement or a `PHI' node. These should be used when it is appropriate 9508 but they are not quite as efficient as the individual `FOR_EACH_PHI' 9509 and `FOR_EACH_SSA' routines. 9510 9511 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 9512 { 9513 my_code; 9514 } 9515 9516 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 9517 { 9518 my_code; 9519 } 9520 9521 10.4.2 Immediate Uses 9522 --------------------- 9523 9524 Immediate use information is now always available. Using the immediate 9525 use iterators, you may examine every use of any `SSA_NAME'. For 9526 instance, to change each use of `ssa_var' to `ssa_var2' and call 9527 fold_stmt on each stmt after that is done: 9528 9529 use_operand_p imm_use_p; 9530 imm_use_iterator iterator; 9531 tree ssa_var, stmt; 9532 9533 9534 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 9535 { 9536 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 9537 SET_USE (imm_use_p, ssa_var_2); 9538 fold_stmt (stmt); 9539 } 9540 9541 There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is 9542 used when the immediate uses are not changed, i.e., you are looking at 9543 the uses, but not setting them. 9544 9545 If they do get changed, then care must be taken that things are not 9546 changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and 9547 `FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 9548 sanity of the use list by moving all the uses for a statement into a 9549 controlled position, and then iterating over those uses. Then the 9550 optimization can manipulate the stmt when all the uses have been 9551 processed. This is a little slower than the FAST version since it adds 9552 a placeholder element and must sort through the list a bit for each 9553 statement. This placeholder element must be also be removed if the 9554 loop is terminated early. The macro `BREAK_FROM_IMM_USE_SAFE' is 9555 provided to do this : 9556 9557 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 9558 { 9559 if (stmt == last_stmt) 9560 BREAK_FROM_SAFE_IMM_USE (iter); 9561 9562 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 9563 SET_USE (imm_use_p, ssa_var_2); 9564 fold_stmt (stmt); 9565 } 9566 9567 There are checks in `verify_ssa' which verify that the immediate use 9568 list is up to date, as well as checking that an optimization didn't 9569 break from the loop without using this macro. It is safe to simply 9570 'break'; from a `FOR_EACH_IMM_USE_FAST' traverse. 9571 9572 Some useful functions and macros: 9573 1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of 9574 `ssa_var'. 9575 9576 2. `has_single_use (ssa_var)' : Returns true if there is only a 9577 single use of `ssa_var'. 9578 9579 3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 9580 Returns true if there is only a single use of `ssa_var', and also 9581 returns the use pointer and statement it occurs in in the second 9582 and third parameters. 9583 9584 4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of 9585 `ssa_var'. It is better not to use this if possible since it simply 9586 utilizes a loop to count the uses. 9587 9588 5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI' 9589 node, return the index number for the use. An assert is triggered 9590 if the use isn't located in a `PHI' node. 9591 9592 6. `USE_STMT (use_p)' : Return the statement a use occurs in. 9593 9594 Note that uses are not put into an immediate use list until their 9595 statement is actually inserted into the instruction stream via a 9596 `bsi_*' routine. 9597 9598 It is also still possible to utilize lazy updating of statements, but 9599 this should be used only when absolutely required. Both alias analysis 9600 and the dominator optimizations currently do this. 9601 9602 When lazy updating is being used, the immediate use information is out 9603 of date and cannot be used reliably. Lazy updating is achieved by 9604 simply marking statements modified via calls to `mark_stmt_modified' 9605 instead of `update_stmt'. When lazy updating is no longer required, 9606 all the modified statements must have `update_stmt' called in order to 9607 bring them up to date. This must be done before the optimization is 9608 finished, or `verify_ssa' will trigger an abort. 9609 9610 This is done with a simple loop over the instruction stream: 9611 block_stmt_iterator bsi; 9612 basic_block bb; 9613 FOR_EACH_BB (bb) 9614 { 9615 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 9616 update_stmt_if_modified (bsi_stmt (bsi)); 9617 } 9618 9619 9620 File: gccint.info, Node: SSA, Next: Alias analysis, Prev: Statement Operands, Up: Tree SSA 9621 9622 10.5 Static Single Assignment 9623 ============================= 9624 9625 Most of the tree optimizers rely on the data flow information provided 9626 by the Static Single Assignment (SSA) form. We implement the SSA form 9627 as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 9628 Zadeck. Efficiently Computing Static Single Assignment Form and the 9629 Control Dependence Graph. ACM Transactions on Programming Languages 9630 and Systems, 13(4):451-490, October 1991'. 9631 9632 The SSA form is based on the premise that program variables are 9633 assigned in exactly one location in the program. Multiple assignments 9634 to the same variable create new versions of that variable. Naturally, 9635 actual programs are seldom in SSA form initially because variables tend 9636 to be assigned multiple times. The compiler modifies the program 9637 representation so that every time a variable is assigned in the code, a 9638 new version of the variable is created. Different versions of the same 9639 variable are distinguished by subscripting the variable name with its 9640 version number. Variables used in the right-hand side of expressions 9641 are renamed so that their version number matches that of the most 9642 recent assignment. 9643 9644 We represent variable versions using `SSA_NAME' nodes. The renaming 9645 process in `tree-ssa.c' wraps every real and virtual operand with an 9646 `SSA_NAME' node which contains the version number and the statement 9647 that created the `SSA_NAME'. Only definitions and virtual definitions 9648 may create new `SSA_NAME' nodes. 9649 9650 Sometimes, flow of control makes it impossible to determine the most 9651 recent version of a variable. In these cases, the compiler inserts an 9652 artificial definition for that variable called "PHI function" or "PHI 9653 node". This new definition merges all the incoming versions of the 9654 variable to create a new name for it. For instance, 9655 9656 if (...) 9657 a_1 = 5; 9658 else if (...) 9659 a_2 = 2; 9660 else 9661 a_3 = 13; 9662 9663 # a_4 = PHI <a_1, a_2, a_3> 9664 return a_4; 9665 9666 Since it is not possible to determine which of the three branches will 9667 be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to 9668 use at the return statement. So, the SSA renamer creates a new version 9669 `a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'. 9670 Hence, PHI nodes mean "one of these operands. I don't know which". 9671 9672 The following macros can be used to examine PHI nodes 9673 9674 -- Macro: PHI_RESULT (PHI) 9675 Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 9676 9677 -- Macro: PHI_NUM_ARGS (PHI) 9678 Returns the number of arguments in PHI. This number is exactly 9679 the number of incoming edges to the basic block holding PHI. 9680 9681 -- Macro: PHI_ARG_ELT (PHI, I) 9682 Returns a tuple representing the Ith argument of PHI. Each 9683 element of this tuple contains an `SSA_NAME' VAR and the incoming 9684 edge through which VAR flows. 9685 9686 -- Macro: PHI_ARG_EDGE (PHI, I) 9687 Returns the incoming edge for the Ith argument of PHI. 9688 9689 -- Macro: PHI_ARG_DEF (PHI, I) 9690 Returns the `SSA_NAME' for the Ith argument of PHI. 9691 9692 10.5.1 Preserving the SSA form 9693 ------------------------------ 9694 9695 Some optimization passes make changes to the function that invalidate 9696 the SSA property. This can happen when a pass has added new symbols or 9697 changed the program so that variables that were previously aliased 9698 aren't anymore. Whenever something like this happens, the affected 9699 symbols must be renamed into SSA form again. Transformations that emit 9700 new code or replicate existing statements will also need to update the 9701 SSA form. 9702 9703 Since GCC implements two different SSA forms for register and virtual 9704 variables, keeping the SSA form up to date depends on whether you are 9705 updating register or virtual names. In both cases, the general idea 9706 behind incremental SSA updates is similar: when new SSA names are 9707 created, they typically are meant to replace other existing names in 9708 the program. 9709 9710 For instance, given the following code: 9711 9712 1 L0: 9713 2 x_1 = PHI (0, x_5) 9714 3 if (x_1 < 10) 9715 4 if (x_1 > 7) 9716 5 y_2 = 0 9717 6 else 9718 7 y_3 = x_1 + x_7 9719 8 endif 9720 9 x_5 = x_1 + 1 9721 10 goto L0; 9722 11 endif 9723 9724 Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8'). 9725 9726 1 L0: 9727 2 x_1 = PHI (0, x_5) 9728 3 if (x_1 < 10) 9729 4 x_10 = ... 9730 5 if (x_1 > 7) 9731 6 y_2 = 0 9732 7 else 9733 8 x_11 = ... 9734 9 y_3 = x_1 + x_7 9735 10 endif 9736 11 x_5 = x_1 + 1 9737 12 goto L0; 9738 13 endif 9739 9740 We want to replace all the uses of `x_1' with the new definitions of 9741 `x_10' and `x_11'. Note that the only uses that should be replaced are 9742 those at lines `5', `9' and `11'. Also, the use of `x_7' at line `9' 9743 should _not_ be replaced (this is why we cannot just mark symbol `x' for 9744 renaming). 9745 9746 Additionally, we may need to insert a PHI node at line `11' because 9747 that is a merge point for `x_10' and `x_11'. So the use of `x_1' at 9748 line `11' will be replaced with the new PHI node. The insertion of PHI 9749 nodes is optional. They are not strictly necessary to preserve the SSA 9750 form, and depending on what the caller inserted, they may not even be 9751 useful for the optimizers. 9752 9753 Updating the SSA form is a two step process. First, the pass has to 9754 identify which names need to be updated and/or which symbols need to be 9755 renamed into SSA form for the first time. When new names are 9756 introduced to replace existing names in the program, the mapping 9757 between the old and the new names are registered by calling 9758 `register_new_name_mapping' (note that if your pass creates new code by 9759 duplicating basic blocks, the call to `tree_duplicate_bb' will set up 9760 the necessary mappings automatically). On the other hand, if your pass 9761 exposes a new symbol that should be put in SSA form for the first time, 9762 the new symbol should be registered with `mark_sym_for_renaming'. 9763 9764 After the replacement mappings have been registered and new symbols 9765 marked for renaming, a call to `update_ssa' makes the registered 9766 changes. This can be done with an explicit call or by creating `TODO' 9767 flags in the `tree_opt_pass' structure for your pass. There are 9768 several `TODO' flags that control the behavior of `update_ssa': 9769 9770 * `TODO_update_ssa'. Update the SSA form inserting PHI nodes 9771 for newly exposed symbols and virtual names marked for updating. 9772 When updating real names, only insert PHI nodes for a real 9773 name `O_j' in blocks reached by all the new and old 9774 definitions for `O_j'. If the iterated dominance frontier 9775 for `O_j' is not pruned, we may end up inserting PHI nodes 9776 in blocks that have one or more edges with no incoming 9777 definition for `O_j'. This would lead to uninitialized 9778 warnings for `O_j''s symbol. 9779 9780 * `TODO_update_ssa_no_phi'. Update the SSA form without 9781 inserting any new PHI nodes at all. This is used by passes that 9782 have either inserted all the PHI nodes themselves or passes 9783 that need only to patch use-def and def-def chains for 9784 virtuals (e.g., DCE). 9785 9786 * `TODO_update_ssa_full_phi'. Insert PHI nodes everywhere 9787 they are needed. No pruning of the IDF is done. This is used 9788 by passes that need the PHI nodes for `O_j' even if it 9789 means that some arguments will come from the default definition 9790 of `O_j''s symbol (e.g., `pass_linear_transform'). 9791 9792 WARNING: If you need to use this flag, chances are that your 9793 pass may be doing something wrong. Inserting PHI nodes for an 9794 old name where not all edges carry a new replacement may lead to 9795 silent codegen errors or spurious uninitialized warnings. 9796 9797 * `TODO_update_ssa_only_virtuals'. Passes that update the SSA 9798 form on their own may want to delegate the updating of 9799 virtual names to the generic updater. Since FUD chains are 9800 easier to maintain, this simplifies the work they need to do. 9801 NOTE: If this flag is used, any OLD->NEW mappings for real names 9802 are explicitly destroyed and only the symbols marked for 9803 renaming are processed. 9804 9805 10.5.2 Preserving the virtual SSA form 9806 -------------------------------------- 9807 9808 The virtual SSA form is harder to preserve than the non-virtual SSA form 9809 mainly because the set of virtual operands for a statement may change at 9810 what some would consider unexpected times. In general, statement 9811 modifications should be bracketed between calls to `push_stmt_changes' 9812 and `pop_stmt_changes'. For example, 9813 9814 munge_stmt (tree stmt) 9815 { 9816 push_stmt_changes (&stmt); 9817 ... rewrite STMT ... 9818 pop_stmt_changes (&stmt); 9819 } 9820 9821 The call to `push_stmt_changes' saves the current state of the 9822 statement operands and the call to `pop_stmt_changes' compares the 9823 saved state with the current one and does the appropriate symbol 9824 marking for the SSA renamer. 9825 9826 It is possible to modify several statements at a time, provided that 9827 `push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as 9828 when processing a stack of statements. 9829 9830 Additionally, if the pass discovers that it did not need to make 9831 changes to the statement after calling `push_stmt_changes', it can 9832 simply discard the topmost change buffer by calling 9833 `discard_stmt_changes'. This will avoid the expensive operand re-scan 9834 operation and the buffer comparison that determines if symbols need to 9835 be marked for renaming. 9836 9837 10.5.3 Examining `SSA_NAME' nodes 9838 --------------------------------- 9839 9840 The following macros can be used to examine `SSA_NAME' nodes 9841 9842 -- Macro: SSA_NAME_DEF_STMT (VAR) 9843 Returns the statement S that creates the `SSA_NAME' VAR. If S is 9844 an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it 9845 means that the first reference to this variable is a USE or a VUSE. 9846 9847 -- Macro: SSA_NAME_VERSION (VAR) 9848 Returns the version number of the `SSA_NAME' object VAR. 9849 9850 10.5.4 Walking use-def chains 9851 ----------------------------- 9852 9853 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA) 9854 Walks use-def chains starting at the `SSA_NAME' node VAR. Calls 9855 function FN at each reaching definition found. Function FN takes 9856 three arguments: VAR, its defining statement (DEF_STMT) and a 9857 generic pointer to whatever state information that FN may want to 9858 maintain (DATA). Function FN is able to stop the walk by 9859 returning `true', otherwise in order to continue the walk, FN 9860 should return `false'. 9861 9862 Note, that if DEF_STMT is a `PHI' node, the semantics are slightly 9863 different. For each argument ARG of the PHI node, this function 9864 will: 9865 9866 1. Walk the use-def chains for ARG. 9867 9868 2. Call `FN (ARG, PHI, DATA)'. 9869 9870 Note how the first argument to FN is no longer the original 9871 variable VAR, but the PHI argument currently being examined. If 9872 FN wants to get at VAR, it should call `PHI_RESULT' (PHI). 9873 9874 10.5.5 Walking the dominator tree 9875 --------------------------------- 9876 9877 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 9878 This function walks the dominator tree for the current CFG calling 9879 a set of callback functions defined in STRUCT DOM_WALK_DATA in 9880 `domwalk.h'. The call back functions you need to define give you 9881 hooks to execute custom code at various points during traversal: 9882 9883 1. Once to initialize any local data needed while processing 9884 BB and its children. This local data is pushed into an 9885 internal stack which is automatically pushed and popped as 9886 the walker traverses the dominator tree. 9887 9888 2. Once before traversing all the statements in the BB. 9889 9890 3. Once for every statement inside BB. 9891 9892 4. Once after traversing all the statements and before recursing 9893 into BB's dominator children. 9894 9895 5. It then recurses into all the dominator children of BB. 9896 9897 6. After recursing into all the dominator children of BB it 9898 can, optionally, traverse every statement in BB again 9899 (i.e., repeating steps 2 and 3). 9900 9901 7. Once after walking the statements in BB and BB's 9902 dominator children. At this stage, the block local data stack 9903 is popped. 9904 9905 9906 File: gccint.info, Node: Alias analysis, Prev: SSA, Up: Tree SSA 9907 9908 10.6 Alias analysis 9909 =================== 9910 9911 Alias analysis proceeds in 4 main phases: 9912 9913 1. Structural alias analysis. 9914 9915 This phase walks the types for structure variables, and determines 9916 which of the fields can overlap using offset and size of each 9917 field. For each field, a "subvariable" called a "Structure field 9918 tag" (SFT) is created, which represents that field as a separate 9919 variable. All accesses that could possibly overlap with a given 9920 field will have virtual operands for the SFT of that field. 9921 9922 struct foo 9923 { 9924 int a; 9925 int b; 9926 } 9927 struct foo temp; 9928 int bar (void) 9929 { 9930 int tmp1, tmp2, tmp3; 9931 SFT.0_2 = VDEF <SFT.0_1> 9932 temp.a = 5; 9933 SFT.1_4 = VDEF <SFT.1_3> 9934 temp.b = 6; 9935 9936 VUSE <SFT.1_4> 9937 tmp1_5 = temp.b; 9938 VUSE <SFT.0_2> 9939 tmp2_6 = temp.a; 9940 9941 tmp3_7 = tmp1_5 + tmp2_6; 9942 return tmp3_7; 9943 } 9944 9945 If you copy the symbol tag for a variable for some reason, you 9946 probably also want to copy the subvariables for that variable. 9947 9948 2. Points-to and escape analysis. 9949 9950 This phase walks the use-def chains in the SSA web looking for 9951 three things: 9952 9953 9954 9955 9956 * Assignments of the form `P_i = &VAR' 9957 9958 * Assignments of the form P_i = malloc() 9959 9960 * Pointers and ADDR_EXPR that escape the current function. 9961 9962 The concept of `escaping' is the same one used in the Java world. 9963 When a pointer or an ADDR_EXPR escapes, it means that it has been 9964 exposed outside of the current function. So, assignment to global 9965 variables, function arguments and returning a pointer are all 9966 escape sites. 9967 9968 This is where we are currently limited. Since not everything is 9969 renamed into SSA, we lose track of escape properties when a 9970 pointer is stashed inside a field in a structure, for instance. 9971 In those cases, we are assuming that the pointer does escape. 9972 9973 We use escape analysis to determine whether a variable is 9974 call-clobbered. Simply put, if an ADDR_EXPR escapes, then the 9975 variable is call-clobbered. If a pointer P_i escapes, then all 9976 the variables pointed-to by P_i (and its memory tag) also escape. 9977 9978 3. Compute flow-sensitive aliases 9979 9980 We have two classes of memory tags. Memory tags associated with 9981 the pointed-to data type of the pointers in the program. These 9982 tags are called "symbol memory tag" (SMT). The other class are 9983 those associated with SSA_NAMEs, called "name memory tag" (NMT). 9984 The basic idea is that when adding operands for an INDIRECT_REF 9985 *P_i, we will first check whether P_i has a name tag, if it does 9986 we use it, because that will have more precise aliasing 9987 information. Otherwise, we use the standard symbol tag. 9988 9989 In this phase, we go through all the pointers we found in 9990 points-to analysis and create alias sets for the name memory tags 9991 associated with each pointer P_i. If P_i escapes, we mark 9992 call-clobbered the variables it points to and its tag. 9993 9994 4. Compute flow-insensitive aliases 9995 9996 This pass will compare the alias set of every symbol memory tag and 9997 every addressable variable found in the program. Given a symbol 9998 memory tag SMT and an addressable variable V. If the alias sets 9999 of SMT and V conflict (as computed by may_alias_p), then V is 10000 marked as an alias tag and added to the alias set of SMT. 10001 10002 Every language that wishes to perform language-specific alias 10003 analysis should define a function that computes, given a `tree' 10004 node, an alias set for the node. Nodes in different alias sets 10005 are not allowed to alias. For an example, see the C front-end 10006 function `c_get_alias_set'. 10007 10008 For instance, consider the following function: 10009 10010 foo (int i) 10011 { 10012 int *p, *q, a, b; 10013 10014 if (i > 10) 10015 p = &a; 10016 else 10017 q = &b; 10018 10019 *p = 3; 10020 *q = 5; 10021 a = b + 2; 10022 return *p; 10023 } 10024 10025 After aliasing analysis has finished, the symbol memory tag for 10026 pointer `p' will have two aliases, namely variables `a' and `b'. Every 10027 time pointer `p' is dereferenced, we want to mark the operation as a 10028 potential reference to `a' and `b'. 10029 10030 foo (int i) 10031 { 10032 int *p, a, b; 10033 10034 if (i_2 > 10) 10035 p_4 = &a; 10036 else 10037 p_6 = &b; 10038 # p_1 = PHI <p_4(1), p_6(2)>; 10039 10040 # a_7 = VDEF <a_3>; 10041 # b_8 = VDEF <b_5>; 10042 *p_1 = 3; 10043 10044 # a_9 = VDEF <a_7> 10045 # VUSE <b_8> 10046 a_9 = b_8 + 2; 10047 10048 # VUSE <a_9>; 10049 # VUSE <b_8>; 10050 return *p_1; 10051 } 10052 10053 In certain cases, the list of may aliases for a pointer may grow too 10054 large. This may cause an explosion in the number of virtual operands 10055 inserted in the code. Resulting in increased memory consumption and 10056 compilation time. 10057 10058 When the number of virtual operands needed to represent aliased loads 10059 and stores grows too large (configurable with `--param 10060 max-aliased-vops'), alias sets are grouped to avoid severe compile-time 10061 slow downs and memory consumption. The alias grouping heuristic 10062 proceeds as follows: 10063 10064 1. Sort the list of pointers in decreasing number of contributed 10065 virtual operands. 10066 10067 2. Take the first pointer from the list and reverse the role of the 10068 memory tag and its aliases. Usually, whenever an aliased variable 10069 Vi is found to alias with a memory tag T, we add Vi to the 10070 may-aliases set for T. Meaning that after alias analysis, we will 10071 have: 10072 10073 may-aliases(T) = { V1, V2, V3, ..., Vn } 10074 10075 This means that every statement that references T, will get `n' 10076 virtual operands for each of the Vi tags. But, when alias 10077 grouping is enabled, we make T an alias tag and add it to the 10078 alias set of all the Vi variables: 10079 10080 may-aliases(V1) = { T } 10081 may-aliases(V2) = { T } 10082 ... 10083 may-aliases(Vn) = { T } 10084 10085 This has two effects: (a) statements referencing T will only get a 10086 single virtual operand, and, (b) all the variables Vi will now 10087 appear to alias each other. So, we lose alias precision to 10088 improve compile time. But, in theory, a program with such a high 10089 level of aliasing should not be very optimizable in the first 10090 place. 10091 10092 3. Since variables may be in the alias set of more than one memory 10093 tag, the grouping done in step (2) needs to be extended to all the 10094 memory tags that have a non-empty intersection with the 10095 may-aliases set of tag T. For instance, if we originally had 10096 these may-aliases sets: 10097 10098 may-aliases(T) = { V1, V2, V3 } 10099 may-aliases(R) = { V2, V4 } 10100 10101 In step (2) we would have reverted the aliases for T as: 10102 10103 may-aliases(V1) = { T } 10104 may-aliases(V2) = { T } 10105 may-aliases(V3) = { T } 10106 10107 But note that now V2 is no longer aliased with R. We could add R 10108 to may-aliases(V2), but we are in the process of grouping aliases 10109 to reduce virtual operands so what we do is add V4 to the grouping 10110 to obtain: 10111 10112 may-aliases(V1) = { T } 10113 may-aliases(V2) = { T } 10114 may-aliases(V3) = { T } 10115 may-aliases(V4) = { T } 10116 10117 4. If the total number of virtual operands due to aliasing is still 10118 above the threshold set by max-alias-vops, go back to (2). 10119 10120 10121 File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Tree SSA, Up: Top 10122 10123 11 Analysis and Representation of Loops 10124 *************************************** 10125 10126 GCC provides extensive infrastructure for work with natural loops, i.e., 10127 strongly connected components of CFG with only one entry block. This 10128 chapter describes representation of loops in GCC, both on GIMPLE and in 10129 RTL, as well as the interfaces to loop-related analyses (induction 10130 variable analysis and number of iterations analysis). 10131 10132 * Menu: 10133 10134 * Loop representation:: Representation and analysis of loops. 10135 * Loop querying:: Getting information about loops. 10136 * Loop manipulation:: Loop manipulation functions. 10137 * LCSSA:: Loop-closed SSA form. 10138 * Scalar evolutions:: Induction variables on GIMPLE. 10139 * loop-iv:: Induction variables on RTL. 10140 * Number of iterations:: Number of iterations analysis. 10141 * Dependency analysis:: Data dependency analysis. 10142 * Lambda:: Linear loop transformations framework. 10143 * Omega:: A solver for linear programming problems. 10144 10145 10146 File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 10147 10148 11.1 Loop representation 10149 ======================== 10150 10151 This chapter describes the representation of loops in GCC, and functions 10152 that can be used to build, modify and analyze this representation. Most 10153 of the interfaces and data structures are declared in `cfgloop.h'. At 10154 the moment, loop structures are analyzed and this information is 10155 updated only by the optimization passes that deal with loops, but some 10156 efforts are being made to make it available throughout most of the 10157 optimization passes. 10158 10159 In general, a natural loop has one entry block (header) and possibly 10160 several back edges (latches) leading to the header from the inside of 10161 the loop. Loops with several latches may appear if several loops share 10162 a single header, or if there is a branching in the middle of the loop. 10163 The representation of loops in GCC however allows only loops with a 10164 single latch. During loop analysis, headers of such loops are split and 10165 forwarder blocks are created in order to disambiguate their structures. 10166 Heuristic based on profile information and structure of the induction 10167 variables in the loops is used to determine whether the latches 10168 correspond to sub-loops or to control flow in a single loop. This means 10169 that the analysis sometimes changes the CFG, and if you run it in the 10170 middle of an optimization pass, you must be able to deal with the new 10171 blocks. You may avoid CFG changes by passing 10172 `LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 10173 however that most other loop manipulation functions will not work 10174 correctly for loops with multiple latch edges (the functions that only 10175 query membership of blocks to loops and subloop relationships, or 10176 enumerate and test loop exits, can be expected to work). 10177 10178 Body of the loop is the set of blocks that are dominated by its header, 10179 and reachable from its latch against the direction of edges in CFG. The 10180 loops are organized in a containment hierarchy (tree) such that all the 10181 loops immediately contained inside loop L are the children of L in the 10182 tree. This tree is represented by the `struct loops' structure. The 10183 root of this tree is a fake loop that contains all blocks in the 10184 function. Each of the loops is represented in a `struct loop' 10185 structure. Each loop is assigned an index (`num' field of the `struct 10186 loop' structure), and the pointer to the loop is stored in the 10187 corresponding field of the `larray' vector in the loops structure. The 10188 indices do not have to be continuous, there may be empty (`NULL') 10189 entries in the `larray' created by deleting loops. Also, there is no 10190 guarantee on the relative order of a loop and its subloops in the 10191 numbering. The index of a loop never changes. 10192 10193 The entries of the `larray' field should not be accessed directly. 10194 The function `get_loop' returns the loop description for a loop with 10195 the given index. `number_of_loops' function returns number of loops in 10196 the function. To traverse all loops, use `FOR_EACH_LOOP' macro. The 10197 `flags' argument of the macro is used to determine the direction of 10198 traversal and the set of loops visited. Each loop is guaranteed to be 10199 visited exactly once, regardless of the changes to the loop tree, and 10200 the loops may be removed during the traversal. The newly created loops 10201 are never traversed, if they need to be visited, this must be done 10202 separately after their creation. The `FOR_EACH_LOOP' macro allocates 10203 temporary variables. If the `FOR_EACH_LOOP' loop were ended using 10204 break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro 10205 must be used instead. 10206 10207 Each basic block contains the reference to the innermost loop it 10208 belongs to (`loop_father'). For this reason, it is only possible to 10209 have one `struct loops' structure initialized at the same time for each 10210 CFG. The global variable `current_loops' contains the `struct loops' 10211 structure. Many of the loop manipulation functions assume that 10212 dominance information is up-to-date. 10213 10214 The loops are analyzed through `loop_optimizer_init' function. The 10215 argument of this function is a set of flags represented in an integer 10216 bitmask. These flags specify what other properties of the loop 10217 structures should be calculated/enforced and preserved later: 10218 10219 * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 10220 to CFG will be performed in the loop analysis, in particular, 10221 loops with multiple latch edges will not be disambiguated. If a 10222 loop has multiple latches, its latch block is set to NULL. Most of 10223 the loop manipulation functions will not work for loops in this 10224 shape. No other flags that require CFG changes can be passed to 10225 loop_optimizer_init. 10226 10227 * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a 10228 way that each loop has only one entry edge, and additionally, the 10229 source block of this entry edge has only one successor. This 10230 creates a natural place where the code can be moved out of the 10231 loop, and ensures that the entry edge of the loop leads from its 10232 immediate super-loop. 10233 10234 * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 10235 the latch block of each loop to have only one successor. This 10236 ensures that the latch of the loop does not belong to any of its 10237 sub-loops, and makes manipulation with the loops significantly 10238 easier. Most of the loop manipulation functions assume that the 10239 loops are in this shape. Note that with this flag, the "normal" 10240 loop without any control flow inside and with one exit consists of 10241 two basic blocks. 10242 10243 * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 10244 the strongly connected components that are not natural loops (have 10245 more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP' 10246 and `EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 10247 and edges that belong to natural loops that are in such an 10248 irreducible region (but it is set for the entry and exit edges of 10249 such a loop, if they lead to/from this region). 10250 10251 * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 10252 updated for each loop. This makes some functions (e.g., 10253 `get_loop_exit_edges') more efficient. Some functions (e.g., 10254 `single_exit') can be used only if the lists of exits are recorded. 10255 10256 These properties may also be computed/enforced later, using functions 10257 `create_preheaders', `force_single_succ_latches', 10258 `mark_irreducible_loops' and `record_loop_exits'. 10259 10260 The memory occupied by the loops structures should be freed with 10261 `loop_optimizer_finalize' function. 10262 10263 The CFG manipulation functions in general do not update loop 10264 structures. Specialized versions that additionally do so are provided 10265 for the most common tasks. On GIMPLE, `cleanup_tree_cfg_loop' function 10266 can be used to cleanup CFG while updating the loops structures if 10267 `current_loops' is set. 10268 10269 10270 File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 10271 10272 11.2 Loop querying 10273 ================== 10274 10275 The functions to query the information about loops are declared in 10276 `cfgloop.h'. Some of the information can be taken directly from the 10277 structures. `loop_father' field of each basic block contains the 10278 innermost loop to that the block belongs. The most useful fields of 10279 loop structure (that are kept up-to-date at all times) are: 10280 10281 * `header', `latch': Header and latch basic blocks of the loop. 10282 10283 * `num_nodes': Number of basic blocks in the loop (including the 10284 basic blocks of the sub-loops). 10285 10286 * `depth': The depth of the loop in the loops tree, i.e., the number 10287 of super-loops of the loop. 10288 10289 * `outer', `inner', `next': The super-loop, the first sub-loop, and 10290 the sibling of the loop in the loops tree. 10291 10292 There are other fields in the loop structures, many of them used only 10293 by some of the passes, or not updated during CFG changes; in general, 10294 they should not be accessed directly. 10295 10296 The most important functions to query loop structures are: 10297 10298 * `flow_loops_dump': Dumps the information about loops to a file. 10299 10300 * `verify_loop_structure': Checks consistency of the loop structures. 10301 10302 * `loop_latch_edge': Returns the latch edge of a loop. 10303 10304 * `loop_preheader_edge': If loops have preheaders, returns the 10305 preheader edge of a loop. 10306 10307 * `flow_loop_nested_p': Tests whether loop is a sub-loop of another 10308 loop. 10309 10310 * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a 10311 loop (including its sub-loops). 10312 10313 * `find_common_loop': Finds the common super-loop of two loops. 10314 10315 * `superloop_at_depth': Returns the super-loop of a loop with the 10316 given depth. 10317 10318 * `tree_num_loop_insns', `num_loop_insns': Estimates the number of 10319 insns in the loop, on GIMPLE and on RTL. 10320 10321 * `loop_exit_edge_p': Tests whether edge is an exit from a loop. 10322 10323 * `mark_loop_exit_edges': Marks all exit edges of all loops with 10324 `EDGE_LOOP_EXIT' flag. 10325 10326 * `get_loop_body', `get_loop_body_in_dom_order', 10327 `get_loop_body_in_bfs_order': Enumerates the basic blocks in the 10328 loop in depth-first search order in reversed CFG, ordered by 10329 dominance relation, and breath-first search order, respectively. 10330 10331 * `single_exit': Returns the single exit edge of the loop, or `NULL' 10332 if the loop has more than one exit. You can only use this 10333 function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 10334 10335 * `get_loop_exit_edges': Enumerates the exit edges of a loop. 10336 10337 * `just_once_each_iteration_p': Returns true if the basic block is 10338 executed exactly once during each iteration of a loop (that is, it 10339 does not belong to a sub-loop, and it dominates the latch of the 10340 loop). 10341 10342 10343 File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 10344 10345 11.3 Loop manipulation 10346 ====================== 10347 10348 The loops tree can be manipulated using the following functions: 10349 10350 * `flow_loop_tree_node_add': Adds a node to the tree. 10351 10352 * `flow_loop_tree_node_remove': Removes a node from the tree. 10353 10354 * `add_bb_to_loop': Adds a basic block to a loop. 10355 10356 * `remove_bb_from_loops': Removes a basic block from loops. 10357 10358 Most low-level CFG functions update loops automatically. The following 10359 functions handle some more complicated cases of CFG manipulations: 10360 10361 * `remove_path': Removes an edge and all blocks it dominates. 10362 10363 * `split_loop_exit_edge': Splits exit edge of the loop, ensuring 10364 that PHI node arguments remain in the loop (this ensures that 10365 loop-closed SSA form is preserved). Only useful on GIMPLE. 10366 10367 Finally, there are some higher-level loop transformations implemented. 10368 While some of them are written so that they should work on non-innermost 10369 loops, they are mostly untested in that case, and at the moment, they 10370 are only reliable for the innermost loops: 10371 10372 * `create_iv': Creates a new induction variable. Only works on 10373 GIMPLE. `standard_iv_increment_position' can be used to find a 10374 suitable place for the iv increment. 10375 10376 * `duplicate_loop_to_header_edge', 10377 `tree_duplicate_loop_to_header_edge': These functions (on RTL and 10378 on GIMPLE) duplicate the body of the loop prescribed number of 10379 times on one of the edges entering loop header, thus performing 10380 either loop unrolling or loop peeling. `can_duplicate_loop_p' 10381 (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated 10382 loop. 10383 10384 * `loop_version', `tree_ssa_loop_version': These function create a 10385 copy of a loop, and a branch before them that selects one of them 10386 depending on the prescribed condition. This is useful for 10387 optimizations that need to verify some assumptions in runtime (one 10388 of the copies of the loop is usually left unchanged, while the 10389 other one is transformed in some way). 10390 10391 * `tree_unroll_loop': Unrolls the loop, including peeling the extra 10392 iterations to make the number of iterations divisible by unroll 10393 factor, updating the exit condition, and removing the exits that 10394 now cannot be taken. Works only on GIMPLE. 10395 10396 10397 File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 10398 10399 11.4 Loop-closed SSA form 10400 ========================= 10401 10402 Throughout the loop optimizations on tree level, one extra condition is 10403 enforced on the SSA form: No SSA name is used outside of the loop in 10404 that it is defined. The SSA form satisfying this condition is called 10405 "loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 10406 created at the exits of the loops for the SSA names that are used 10407 outside of them. Only the real operands (not virtual SSA names) are 10408 held in LCSSA, in order to save memory. 10409 10410 There are various benefits of LCSSA: 10411 10412 * Many optimizations (value range analysis, final value replacement) 10413 are interested in the values that are defined in the loop and used 10414 outside of it, i.e., exactly those for that we create new PHI 10415 nodes. 10416 10417 * In induction variable analysis, it is not necessary to specify the 10418 loop in that the analysis should be performed - the scalar 10419 evolution analysis always returns the results with respect to the 10420 loop in that the SSA name is defined. 10421 10422 * It makes updating of SSA form during loop transformations simpler. 10423 Without LCSSA, operations like loop unrolling may force creation 10424 of PHI nodes arbitrarily far from the loop, while in LCSSA, the 10425 SSA form can be updated locally. However, since we only keep real 10426 operands in LCSSA, we cannot use this advantage (we could have 10427 local updating of real operands, but it is not much more efficient 10428 than to use generic SSA form updating for it as well; the amount 10429 of changes to SSA is the same). 10430 10431 However, it also means LCSSA must be updated. This is usually 10432 straightforward, unless you create a new value in loop and use it 10433 outside, or unless you manipulate loop exit edges (functions are 10434 provided to make these manipulations simple). 10435 `rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, 10436 and `verify_loop_closed_ssa' to check that the invariant of LCSSA is 10437 preserved. 10438 10439 10440 File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 10441 10442 11.5 Scalar evolutions 10443 ====================== 10444 10445 Scalar evolutions (SCEV) are used to represent results of induction 10446 variable analysis on GIMPLE. They enable us to represent variables with 10447 complicated behavior in a simple and consistent way (we only use it to 10448 express values of polynomial induction variables, but it is possible to 10449 extend it). The interfaces to SCEV analysis are declared in 10450 `tree-scalar-evolution.h'. To use scalar evolutions analysis, 10451 `scev_initialize' must be used. To stop using SCEV, `scev_finalize' 10452 should be used. SCEV analysis caches results in order to save time and 10453 memory. This cache however is made invalid by most of the loop 10454 transformations, including removal of code. If such a transformation 10455 is performed, `scev_reset' must be called to clean the caches. 10456 10457 Given an SSA name, its behavior in loops can be analyzed using the 10458 `analyze_scalar_evolution' function. The returned SCEV however does 10459 not have to be fully analyzed and it may contain references to other 10460 SSA names defined in the loop. To resolve these (potentially 10461 recursive) references, `instantiate_parameters' or `resolve_mixers' 10462 functions must be used. `instantiate_parameters' is useful when you 10463 use the results of SCEV only for some analysis, and when you work with 10464 whole nest of loops at once. It will try replacing all SSA names by 10465 their SCEV in all loops, including the super-loops of the current loop, 10466 thus providing a complete information about the behavior of the 10467 variable in the loop nest. `resolve_mixers' is useful if you work with 10468 only one loop at a time, and if you possibly need to create code based 10469 on the value of the induction variable. It will only resolve the SSA 10470 names defined in the current loop, leaving the SSA names defined 10471 outside unchanged, even if their evolution in the outer loops is known. 10472 10473 The SCEV is a normal tree expression, except for the fact that it may 10474 contain several special tree nodes. One of them is `SCEV_NOT_KNOWN', 10475 used for SSA names whose value cannot be expressed. The other one is 10476 `POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 10477 and loop (both base and step may contain further polynomial chrecs). 10478 Type of the expression and of base and step must be the same. A 10479 variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is 10480 (in the specified loop) equivalent to `x_1' in the following example 10481 10482 while (...) 10483 { 10484 x_1 = phi (base, x_2); 10485 x_2 = x_1 + step; 10486 } 10487 10488 Note that this includes the language restrictions on the operations. 10489 For example, if we compile C code and `x' has signed type, then the 10490 overflow in addition would cause undefined behavior, and we may assume 10491 that this does not happen. Hence, the value with this SCEV cannot 10492 overflow (which restricts the number of iterations of such a loop). 10493 10494 In many cases, one wants to restrict the attention just to affine 10495 induction variables. In this case, the extra expressive power of SCEV 10496 is not useful, and may complicate the optimizations. In this case, 10497 `simple_iv' function may be used to analyze a value - the result is a 10498 loop-invariant base and step. 10499 10500 10501 File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 10502 10503 11.6 IV analysis on RTL 10504 ======================= 10505 10506 The induction variable on RTL is simple and only allows analysis of 10507 affine induction variables, and only in one loop at once. The interface 10508 is declared in `cfgloop.h'. Before analyzing induction variables in a 10509 loop L, `iv_analysis_loop_init' function must be called on L. After 10510 the analysis (possibly calling `iv_analysis_loop_init' for several 10511 loops) is finished, `iv_analysis_done' should be called. The following 10512 functions can be used to access the results of the analysis: 10513 10514 * `iv_analyze': Analyzes a single register used in the given insn. 10515 If no use of the register in this insn is found, the following 10516 insns are scanned, so that this function can be called on the insn 10517 returned by get_condition. 10518 10519 * `iv_analyze_result': Analyzes result of the assignment in the 10520 given insn. 10521 10522 * `iv_analyze_expr': Analyzes a more complicated expression. All 10523 its operands are analyzed by `iv_analyze', and hence they must be 10524 used in the specified insn or one of the following insns. 10525 10526 The description of the induction variable is provided in `struct 10527 rtx_iv'. In order to handle subregs, the representation is a bit 10528 complicated; if the value of the `extend' field is not `UNKNOWN', the 10529 value of the induction variable in the i-th iteration is 10530 10531 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 10532 10533 with the following exception: if `first_special' is true, then the 10534 value in the first iteration (when `i' is zero) is `delta + mult * 10535 base'. However, if `extend' is equal to `UNKNOWN', then 10536 `first_special' must be false, `delta' 0, `mult' 1 and the value in the 10537 i-th iteration is 10538 10539 subreg_{mode} (base + i * step) 10540 10541 The function `get_iv_value' can be used to perform these calculations. 10542 10543 10544 File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 10545 10546 11.7 Number of iterations analysis 10547 ================================== 10548 10549 Both on GIMPLE and on RTL, there are functions available to determine 10550 the number of iterations of a loop, with a similar interface. The 10551 number of iterations of a loop in GCC is defined as the number of 10552 executions of the loop latch. In many cases, it is not possible to 10553 determine the number of iterations unconditionally - the determined 10554 number is correct only if some assumptions are satisfied. The analysis 10555 tries to verify these conditions using the information contained in the 10556 program; if it fails, the conditions are returned together with the 10557 result. The following information and conditions are provided by the 10558 analysis: 10559 10560 * `assumptions': If this condition is false, the rest of the 10561 information is invalid. 10562 10563 * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this 10564 condition is true, the loop exits in the first iteration. 10565 10566 * `infinite': If this condition is true, the loop is infinite. This 10567 condition is only available on RTL. On GIMPLE, conditions for 10568 finiteness of the loop are included in `assumptions'. 10569 10570 * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives 10571 number of iterations. The number of iterations is defined as the 10572 number of executions of the loop latch. 10573 10574 Both on GIMPLE and on RTL, it necessary for the induction variable 10575 analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 10576 On GIMPLE, the results are stored to `struct tree_niter_desc' 10577 structure. Number of iterations before the loop is exited through a 10578 given exit can be determined using `number_of_iterations_exit' 10579 function. On RTL, the results are returned in `struct niter_desc' 10580 structure. The corresponding function is named `check_simple_exit'. 10581 There are also functions that pass through all the exits of a loop and 10582 try to find one with easy to determine number of iterations - 10583 `find_loop_niter' on GIMPLE and `find_simple_exit' on RTL. Finally, 10584 there are functions that provide the same information, but additionally 10585 cache it, so that repeated calls to number of iterations are not so 10586 costly - `number_of_latch_executions' on GIMPLE and 10587 `get_simple_loop_desc' on RTL. 10588 10589 Note that some of these functions may behave slightly differently than 10590 others - some of them return only the expression for the number of 10591 iterations, and fail if there are some assumptions. The function 10592 `number_of_latch_executions' works only for single-exit loops. The 10593 function `number_of_cond_exit_executions' can be used to determine 10594 number of executions of the exit condition of a single-exit loop (i.e., 10595 the `number_of_latch_executions' increased by one). 10596 10597 10598 File: gccint.info, Node: Dependency analysis, Next: Lambda, Prev: Number of iterations, Up: Loop Analysis and Representation 10599 10600 11.8 Data Dependency Analysis 10601 ============================= 10602 10603 The code for the data dependence analysis can be found in 10604 `tree-data-ref.c' and its interface and data structures are described 10605 in `tree-data-ref.h'. The function that computes the data dependences 10606 for all the array and pointer references for a given loop is 10607 `compute_data_dependences_for_loop'. This function is currently used 10608 by the linear loop transform and the vectorization passes. Before 10609 calling this function, one has to allocate two vectors: a first vector 10610 will contain the set of data references that are contained in the 10611 analyzed loop body, and the second vector will contain the dependence 10612 relations between the data references. Thus if the vector of data 10613 references is of size `n', the vector containing the dependence 10614 relations will contain `n*n' elements. However if the analyzed loop 10615 contains side effects, such as calls that potentially can interfere 10616 with the data references in the current analyzed loop, the analysis 10617 stops while scanning the loop body for data references, and inserts a 10618 single `chrec_dont_know' in the dependence relation array. 10619 10620 The data references are discovered in a particular order during the 10621 scanning of the loop body: the loop body is analyzed in execution order, 10622 and the data references of each statement are pushed at the end of the 10623 data reference array. Two data references syntactically occur in the 10624 program in the same order as in the array of data references. This 10625 syntactic order is important in some classical data dependence tests, 10626 and mapping this order to the elements of this array avoids costly 10627 queries to the loop body representation. 10628 10629 Three types of data references are currently handled: ARRAY_REF, 10630 INDIRECT_REF and COMPONENT_REF. The data structure for the data 10631 reference is `data_reference', where `data_reference_p' is a name of a 10632 pointer to the data reference structure. The structure contains the 10633 following elements: 10634 10635 * `base_object_info': Provides information about the base object of 10636 the data reference and its access functions. These access functions 10637 represent the evolution of the data reference in the loop relative 10638 to its base, in keeping with the classical meaning of the data 10639 reference access function for the support of arrays. For example, 10640 for a reference `a.b[i][j]', the base object is `a.b' and the 10641 access functions, one for each array subscript, are: `{i_init, + 10642 i_step}_1, {j_init, +, j_step}_2'. 10643 10644 * `first_location_in_loop': Provides information about the first 10645 location accessed by the data reference in the loop and about the 10646 access function used to represent evolution relative to this 10647 location. This data is used to support pointers, and is not used 10648 for arrays (for which we have base objects). Pointer accesses are 10649 represented as a one-dimensional access that starts from the first 10650 location accessed in the loop. For example: 10651 10652 for1 i 10653 for2 j 10654 *((int *)p + i + j) = a[i][j]; 10655 10656 The access function of the pointer access is `{0, + 4B}_for2' 10657 relative to `p + i'. The access functions of the array are 10658 `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative 10659 to `a'. 10660 10661 Usually, the object the pointer refers to is either unknown, or we 10662 can't prove that the access is confined to the boundaries of a 10663 certain object. 10664 10665 Two data references can be compared only if at least one of these 10666 two representations has all its fields filled for both data 10667 references. 10668 10669 The current strategy for data dependence tests is as follows: If 10670 both `a' and `b' are represented as arrays, compare 10671 `a.base_object' and `b.base_object'; if they are equal, apply 10672 dependence tests (use access functions based on base_objects). 10673 Else if both `a' and `b' are represented as pointers, compare 10674 `a.first_location' and `b.first_location'; if they are equal, 10675 apply dependence tests (use access functions based on first 10676 location). However, if `a' and `b' are represented differently, 10677 only try to prove that the bases are definitely different. 10678 10679 * Aliasing information. 10680 10681 * Alignment information. 10682 10683 The structure describing the relation between two data references is 10684 `data_dependence_relation' and the shorter name for a pointer to such a 10685 structure is `ddr_p'. This structure contains: 10686 10687 * a pointer to each data reference, 10688 10689 * a tree node `are_dependent' that is set to `chrec_known' if the 10690 analysis has proved that there is no dependence between these two 10691 data references, `chrec_dont_know' if the analysis was not able to 10692 determine any useful result and potentially there could exist a 10693 dependence between these data references, and `are_dependent' is 10694 set to `NULL_TREE' if there exist a dependence relation between the 10695 data references, and the description of this dependence relation is 10696 given in the `subscripts', `dir_vects', and `dist_vects' arrays, 10697 10698 * a boolean that determines whether the dependence relation can be 10699 represented by a classical distance vector, 10700 10701 * an array `subscripts' that contains a description of each 10702 subscript of the data references. Given two array accesses a 10703 subscript is the tuple composed of the access functions for a given 10704 dimension. For example, given `A[f1][f2][f3]' and 10705 `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2), 10706 (f3, g3)'. 10707 10708 * two arrays `dir_vects' and `dist_vects' that contain classical 10709 representations of the data dependences under the form of 10710 direction and distance dependence vectors, 10711 10712 * an array of loops `loop_nest' that contains the loops to which the 10713 distance and direction vectors refer to. 10714 10715 Several functions for pretty printing the information extracted by the 10716 data dependence analysis are available: `dump_ddrs' prints with a 10717 maximum verbosity the details of a data dependence relations array, 10718 `dump_dist_dir_vectors' prints only the classical distance and 10719 direction vectors for a data dependence relations array, and 10720 `dump_data_references' prints the details of the data references 10721 contained in a data reference array. 10722 10723 10724 File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation 10725 10726 11.9 Linear loop transformations framework 10727 ========================================== 10728 10729 Lambda is a framework that allows transformations of loops using 10730 non-singular matrix based transformations of the iteration space and 10731 loop bounds. This allows compositions of skewing, scaling, interchange, 10732 and reversal transformations. These transformations are often used to 10733 improve cache behavior or remove inner loop dependencies to allow 10734 parallelization and vectorization to take place. 10735 10736 To perform these transformations, Lambda requires that the loopnest be 10737 converted into a internal form that can be matrix transformed easily. 10738 To do this conversion, the function `gcc_loopnest_to_lambda_loopnest' 10739 is provided. If the loop cannot be transformed using lambda, this 10740 function will return NULL. 10741 10742 Once a `lambda_loopnest' is obtained from the conversion function, it 10743 can be transformed by using `lambda_loopnest_transform', which takes a 10744 transformation matrix to apply. Note that it is up to the caller to 10745 verify that the transformation matrix is legal to apply to the loop 10746 (dependence respecting, etc). Lambda simply applies whatever matrix it 10747 is told to provide. It can be extended to make legal matrices out of 10748 any non-singular matrix, but this is not currently implemented. 10749 Legality of a matrix for a given loopnest can be verified using 10750 `lambda_transform_legal_p'. 10751 10752 Given a transformed loopnest, conversion back into gcc IR is done by 10753 `lambda_loopnest_to_gcc_loopnest'. This function will modify the loops 10754 so that they match the transformed loopnest. 10755 10756 10757 File: gccint.info, Node: Omega, Prev: Lambda, Up: Loop Analysis and Representation 10758 10759 11.10 Omega a solver for linear programming problems 10760 ==================================================== 10761 10762 The data dependence analysis contains several solvers triggered 10763 sequentially from the less complex ones to the more sophisticated. For 10764 ensuring the consistency of the results of these solvers, a data 10765 dependence check pass has been implemented based on two different 10766 solvers. The second method that has been integrated to GCC is based on 10767 the Omega dependence solver, written in the 1990's by William Pugh and 10768 David Wonnacott. Data dependence tests can be formulated using a 10769 subset of the Presburger arithmetics that can be translated to linear 10770 constraint systems. These linear constraint systems can then be solved 10771 using the Omega solver. 10772 10773 The Omega solver is using Fourier-Motzkin's algorithm for variable 10774 elimination: a linear constraint system containing `n' variables is 10775 reduced to a linear constraint system with `n-1' variables. The Omega 10776 solver can also be used for solving other problems that can be 10777 expressed under the form of a system of linear equalities and 10778 inequalities. The Omega solver is known to have an exponential worst 10779 case, also known under the name of "omega nightmare" in the literature, 10780 but in practice, the omega test is known to be efficient for the common 10781 data dependence tests. 10782 10783 The interface used by the Omega solver for describing the linear 10784 programming problems is described in `omega.h', and the solver is 10785 `omega_solve_problem'. 10786 10787 10788 File: gccint.info, Node: RTL, Next: Control Flow, Prev: Trees, Up: Top 10789 10790 12 RTL Representation 10791 ********************* 10792 10793 Most of the work of the compiler is done on an intermediate 10794 representation called register transfer language. In this language, 10795 the instructions to be output are described, pretty much one by one, in 10796 an algebraic form that describes what the instruction does. 10797 10798 RTL is inspired by Lisp lists. It has both an internal form, made up 10799 of structures that point at other structures, and a textual form that 10800 is used in the machine description and in printed debugging dumps. The 10801 textual form uses nested parentheses to indicate the pointers in the 10802 internal form. 10803 10804 * Menu: 10805 10806 * RTL Objects:: Expressions vs vectors vs strings vs integers. 10807 * RTL Classes:: Categories of RTL expression objects, and their structure. 10808 * Accessors:: Macros to access expression operands or vector elts. 10809 * Special Accessors:: Macros to access specific annotations on RTL. 10810 * Flags:: Other flags in an RTL expression. 10811 * Machine Modes:: Describing the size and format of a datum. 10812 * Constants:: Expressions with constant values. 10813 * Regs and Memory:: Expressions representing register contents or memory. 10814 * Arithmetic:: Expressions representing arithmetic on other expressions. 10815 * Comparisons:: Expressions representing comparison of expressions. 10816 * Bit-Fields:: Expressions representing bit-fields in memory or reg. 10817 * Vector Operations:: Expressions involving vector datatypes. 10818 * Conversions:: Extending, truncating, floating or fixing. 10819 * RTL Declarations:: Declaring volatility, constancy, etc. 10820 * Side Effects:: Expressions for storing in registers, etc. 10821 * Incdec:: Embedded side-effects for autoincrement addressing. 10822 * Assembler:: Representing `asm' with operands. 10823 * Insns:: Expression types for entire insns. 10824 * Calls:: RTL representation of function call insns. 10825 * Sharing:: Some expressions are unique; others *must* be copied. 10826 * Reading RTL:: Reading textual RTL from a file. 10827 10828 10829 File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 10830 10831 12.1 RTL Object Types 10832 ===================== 10833 10834 RTL uses five kinds of objects: expressions, integers, wide integers, 10835 strings and vectors. Expressions are the most important ones. An RTL 10836 expression ("RTX", for short) is a C structure, but it is usually 10837 referred to with a pointer; a type that is given the typedef name `rtx'. 10838 10839 An integer is simply an `int'; their written form uses decimal digits. 10840 A wide integer is an integral object whose type is `HOST_WIDE_INT'; 10841 their written form uses decimal digits. 10842 10843 A string is a sequence of characters. In core it is represented as a 10844 `char *' in usual C fashion, and it is written in C syntax as well. 10845 However, strings in RTL may never be null. If you write an empty 10846 string in a machine description, it is represented in core as a null 10847 pointer rather than as a pointer to a null character. In certain 10848 contexts, these null pointers instead of strings are valid. Within RTL 10849 code, strings are most commonly found inside `symbol_ref' expressions, 10850 but they appear in other contexts in the RTL expressions that make up 10851 machine descriptions. 10852 10853 In a machine description, strings are normally written with double 10854 quotes, as you would in C. However, strings in machine descriptions may 10855 extend over many lines, which is invalid C, and adjacent string 10856 constants are not concatenated as they are in C. Any string constant 10857 may be surrounded with a single set of parentheses. Sometimes this 10858 makes the machine description easier to read. 10859 10860 There is also a special syntax for strings, which can be useful when C 10861 code is embedded in a machine description. Wherever a string can 10862 appear, it is also valid to write a C-style brace block. The entire 10863 brace block, including the outermost pair of braces, is considered to be 10864 the string constant. Double quote characters inside the braces are not 10865 special. Therefore, if you write string constants in the C code, you 10866 need not escape each quote character with a backslash. 10867 10868 A vector contains an arbitrary number of pointers to expressions. The 10869 number of elements in the vector is explicitly present in the vector. 10870 The written form of a vector consists of square brackets (`[...]') 10871 surrounding the elements, in sequence and with whitespace separating 10872 them. Vectors of length zero are not created; null pointers are used 10873 instead. 10874 10875 Expressions are classified by "expression codes" (also called RTX 10876 codes). The expression code is a name defined in `rtl.def', which is 10877 also (in uppercase) a C enumeration constant. The possible expression 10878 codes and their meanings are machine-independent. The code of an RTX 10879 can be extracted with the macro `GET_CODE (X)' and altered with 10880 `PUT_CODE (X, NEWCODE)'. 10881 10882 The expression code determines how many operands the expression 10883 contains, and what kinds of objects they are. In RTL, unlike Lisp, you 10884 cannot tell by looking at an operand what kind of object it is. 10885 Instead, you must know from its context--from the expression code of 10886 the containing expression. For example, in an expression of code 10887 `subreg', the first operand is to be regarded as an expression and the 10888 second operand as an integer. In an expression of code `plus', there 10889 are two operands, both of which are to be regarded as expressions. In 10890 a `symbol_ref' expression, there is one operand, which is to be 10891 regarded as a string. 10892 10893 Expressions are written as parentheses containing the name of the 10894 expression type, its flags and machine mode if any, and then the 10895 operands of the expression (separated by spaces). 10896 10897 Expression code names in the `md' file are written in lowercase, but 10898 when they appear in C code they are written in uppercase. In this 10899 manual, they are shown as follows: `const_int'. 10900 10901 In a few contexts a null pointer is valid where an expression is 10902 normally wanted. The written form of this is `(nil)'. 10903 10904 10905 File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 10906 10907 12.2 RTL Classes and Formats 10908 ============================ 10909 10910 The various expression codes are divided into several "classes", which 10911 are represented by single characters. You can determine the class of 10912 an RTX code with the macro `GET_RTX_CLASS (CODE)'. Currently, 10913 `rtl.def' defines these classes: 10914 10915 `RTX_OBJ' 10916 An RTX code that represents an actual object, such as a register 10917 (`REG') or a memory location (`MEM', `SYMBOL_REF'). `LO_SUM') is 10918 also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in 10919 this class, but in class `x'. 10920 10921 `RTX_CONST_OBJ' 10922 An RTX code that represents a constant object. `HIGH' is also 10923 included in this class. 10924 10925 `RTX_COMPARE' 10926 An RTX code for a non-symmetric comparison, such as `GEU' or `LT'. 10927 10928 `RTX_COMM_COMPARE' 10929 An RTX code for a symmetric (commutative) comparison, such as `EQ' 10930 or `ORDERED'. 10931 10932 `RTX_UNARY' 10933 An RTX code for a unary arithmetic operation, such as `NEG', 10934 `NOT', or `ABS'. This category also includes value extension 10935 (sign or zero) and conversions between integer and floating point. 10936 10937 `RTX_COMM_ARITH' 10938 An RTX code for a commutative binary operation, such as `PLUS' or 10939 `AND'. `NE' and `EQ' are comparisons, so they have class `<'. 10940 10941 `RTX_BIN_ARITH' 10942 An RTX code for a non-commutative binary operation, such as 10943 `MINUS', `DIV', or `ASHIFTRT'. 10944 10945 `RTX_BITFIELD_OPS' 10946 An RTX code for a bit-field operation. Currently only 10947 `ZERO_EXTRACT' and `SIGN_EXTRACT'. These have three inputs and 10948 are lvalues (so they can be used for insertion as well). *Note 10949 Bit-Fields::. 10950 10951 `RTX_TERNARY' 10952 An RTX code for other three input operations. Currently only 10953 `IF_THEN_ELSE' and `VEC_MERGE'. 10954 10955 `RTX_INSN' 10956 An RTX code for an entire instruction: `INSN', `JUMP_INSN', and 10957 `CALL_INSN'. *Note Insns::. 10958 10959 `RTX_MATCH' 10960 An RTX code for something that matches in insns, such as 10961 `MATCH_DUP'. These only occur in machine descriptions. 10962 10963 `RTX_AUTOINC' 10964 An RTX code for an auto-increment addressing mode, such as 10965 `POST_INC'. 10966 10967 `RTX_EXTRA' 10968 All other RTX codes. This category includes the remaining codes 10969 used only in machine descriptions (`DEFINE_*', etc.). It also 10970 includes all the codes describing side effects (`SET', `USE', 10971 `CLOBBER', etc.) and the non-insns that may appear on an insn 10972 chain, such as `NOTE', `BARRIER', and `CODE_LABEL'. `SUBREG' is 10973 also part of this class. 10974 10975 For each expression code, `rtl.def' specifies the number of contained 10976 objects and their kinds using a sequence of characters called the 10977 "format" of the expression code. For example, the format of `subreg' 10978 is `ei'. 10979 10980 These are the most commonly used format characters: 10981 10982 `e' 10983 An expression (actually a pointer to an expression). 10984 10985 `i' 10986 An integer. 10987 10988 `w' 10989 A wide integer. 10990 10991 `s' 10992 A string. 10993 10994 `E' 10995 A vector of expressions. 10996 10997 A few other format characters are used occasionally: 10998 10999 `u' 11000 `u' is equivalent to `e' except that it is printed differently in 11001 debugging dumps. It is used for pointers to insns. 11002 11003 `n' 11004 `n' is equivalent to `i' except that it is printed differently in 11005 debugging dumps. It is used for the line number or code number of 11006 a `note' insn. 11007 11008 `S' 11009 `S' indicates a string which is optional. In the RTL objects in 11010 core, `S' is equivalent to `s', but when the object is read, from 11011 an `md' file, the string value of this operand may be omitted. An 11012 omitted string is taken to be the null string. 11013 11014 `V' 11015 `V' indicates a vector which is optional. In the RTL objects in 11016 core, `V' is equivalent to `E', but when the object is read from 11017 an `md' file, the vector value of this operand may be omitted. An 11018 omitted vector is effectively the same as a vector of no elements. 11019 11020 `B' 11021 `B' indicates a pointer to basic block structure. 11022 11023 `0' 11024 `0' means a slot whose contents do not fit any normal category. 11025 `0' slots are not printed at all in dumps, and are often used in 11026 special ways by small parts of the compiler. 11027 11028 There are macros to get the number of operands and the format of an 11029 expression code: 11030 11031 `GET_RTX_LENGTH (CODE)' 11032 Number of operands of an RTX of code CODE. 11033 11034 `GET_RTX_FORMAT (CODE)' 11035 The format of an RTX of code CODE, as a C string. 11036 11037 Some classes of RTX codes always have the same format. For example, it 11038 is safe to assume that all comparison operations have format `ee'. 11039 11040 `1' 11041 All codes of this class have format `e'. 11042 11043 `<' 11044 `c' 11045 `2' 11046 All codes of these classes have format `ee'. 11047 11048 `b' 11049 `3' 11050 All codes of these classes have format `eee'. 11051 11052 `i' 11053 All codes of this class have formats that begin with `iuueiee'. 11054 *Note Insns::. Note that not all RTL objects linked onto an insn 11055 chain are of class `i'. 11056 11057 `o' 11058 `m' 11059 `x' 11060 You can make no assumptions about the format of these codes. 11061 11062 11063 File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 11064 11065 12.3 Access to Operands 11066 ======================= 11067 11068 Operands of expressions are accessed using the macros `XEXP', `XINT', 11069 `XWINT' and `XSTR'. Each of these macros takes two arguments: an 11070 expression-pointer (RTX) and an operand number (counting from zero). 11071 Thus, 11072 11073 XEXP (X, 2) 11074 11075 accesses operand 2 of expression X, as an expression. 11076 11077 XINT (X, 2) 11078 11079 accesses the same operand as an integer. `XSTR', used in the same 11080 fashion, would access it as a string. 11081 11082 Any operand can be accessed as an integer, as an expression or as a 11083 string. You must choose the correct method of access for the kind of 11084 value actually stored in the operand. You would do this based on the 11085 expression code of the containing expression. That is also how you 11086 would know how many operands there are. 11087 11088 For example, if X is a `subreg' expression, you know that it has two 11089 operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X, 11090 1)'. If you did `XINT (X, 0)', you would get the address of the 11091 expression operand but cast as an integer; that might occasionally be 11092 useful, but it would be cleaner to write `(int) XEXP (X, 0)'. `XEXP 11093 (X, 1)' would also compile without error, and would return the second, 11094 integer operand cast as an expression pointer, which would probably 11095 result in a crash when accessed. Nothing stops you from writing `XEXP 11096 (X, 28)' either, but this will access memory past the end of the 11097 expression with unpredictable results. 11098 11099 Access to operands which are vectors is more complicated. You can use 11100 the macro `XVEC' to get the vector-pointer itself, or the macros 11101 `XVECEXP' and `XVECLEN' to access the elements and length of a vector. 11102 11103 `XVEC (EXP, IDX)' 11104 Access the vector-pointer which is operand number IDX in EXP. 11105 11106 `XVECLEN (EXP, IDX)' 11107 Access the length (number of elements) in the vector which is in 11108 operand number IDX in EXP. This value is an `int'. 11109 11110 `XVECEXP (EXP, IDX, ELTNUM)' 11111 Access element number ELTNUM in the vector which is in operand 11112 number IDX in EXP. This value is an RTX. 11113 11114 It is up to you to make sure that ELTNUM is not negative and is 11115 less than `XVECLEN (EXP, IDX)'. 11116 11117 All the macros defined in this section expand into lvalues and 11118 therefore can be used to assign the operands, lengths and vector 11119 elements as well as to access them. 11120 11121 11122 File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 11123 11124 12.4 Access to Special Operands 11125 =============================== 11126 11127 Some RTL nodes have special annotations associated with them. 11128 11129 `MEM' 11130 11131 `MEM_ALIAS_SET (X)' 11132 If 0, X is not in any alias set, and may alias anything. 11133 Otherwise, X can only alias `MEM's in a conflicting alias 11134 set. This value is set in a language-dependent manner in the 11135 front-end, and should not be altered in the back-end. In 11136 some front-ends, these numbers may correspond in some way to 11137 types, or other language-level entities, but they need not, 11138 and the back-end makes no such assumptions. These set 11139 numbers are tested with `alias_sets_conflict_p'. 11140 11141 `MEM_EXPR (X)' 11142 If this register is known to hold the value of some user-level 11143 declaration, this is that tree node. It may also be a 11144 `COMPONENT_REF', in which case this is some field reference, 11145 and `TREE_OPERAND (X, 0)' contains the declaration, or 11146 another `COMPONENT_REF', or null if there is no compile-time 11147 object associated with the reference. 11148 11149 `MEM_OFFSET (X)' 11150 The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx. 11151 11152 `MEM_SIZE (X)' 11153 The size in bytes of the memory reference as a `CONST_INT' 11154 rtx. This is mostly relevant for `BLKmode' references as 11155 otherwise the size is implied by the mode. 11156 11157 `MEM_ALIGN (X)' 11158 The known alignment in bits of the memory reference. 11159 11160 `REG' 11161 11162 `ORIGINAL_REGNO (X)' 11163 This field holds the number the register "originally" had; 11164 for a pseudo register turned into a hard reg this will hold 11165 the old pseudo register number. 11166 11167 `REG_EXPR (X)' 11168 If this register is known to hold the value of some user-level 11169 declaration, this is that tree node. 11170 11171 `REG_OFFSET (X)' 11172 If this register is known to hold the value of some user-level 11173 declaration, this is the offset into that logical storage. 11174 11175 `SYMBOL_REF' 11176 11177 `SYMBOL_REF_DECL (X)' 11178 If the `symbol_ref' X was created for a `VAR_DECL' or a 11179 `FUNCTION_DECL', that tree is recorded here. If this value is 11180 null, then X was created by back end code generation routines, 11181 and there is no associated front end symbol table entry. 11182 11183 `SYMBOL_REF_DECL' may also point to a tree of class `'c'', 11184 that is, some sort of constant. In this case, the 11185 `symbol_ref' is an entry in the per-file constant pool; 11186 again, there is no associated front end symbol table entry. 11187 11188 `SYMBOL_REF_CONSTANT (X)' 11189 If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 11190 pool entry for X. It is null otherwise. 11191 11192 `SYMBOL_REF_DATA (X)' 11193 A field of opaque type used to store `SYMBOL_REF_DECL' or 11194 `SYMBOL_REF_CONSTANT'. 11195 11196 `SYMBOL_REF_FLAGS (X)' 11197 In a `symbol_ref', this is used to communicate various 11198 predicates about the symbol. Some of these are common enough 11199 to be computed by common code, some are specific to the 11200 target. The common bits are: 11201 11202 `SYMBOL_FLAG_FUNCTION' 11203 Set if the symbol refers to a function. 11204 11205 `SYMBOL_FLAG_LOCAL' 11206 Set if the symbol is local to this "module". See 11207 `TARGET_BINDS_LOCAL_P'. 11208 11209 `SYMBOL_FLAG_EXTERNAL' 11210 Set if this symbol is not defined in this translation 11211 unit. Note that this is not the inverse of 11212 `SYMBOL_FLAG_LOCAL'. 11213 11214 `SYMBOL_FLAG_SMALL' 11215 Set if the symbol is located in the small data section. 11216 See `TARGET_IN_SMALL_DATA_P'. 11217 11218 `SYMBOL_REF_TLS_MODEL (X)' 11219 This is a multi-bit field accessor that returns the 11220 `tls_model' to be used for a thread-local storage 11221 symbol. It returns zero for non-thread-local symbols. 11222 11223 `SYMBOL_FLAG_HAS_BLOCK_INFO' 11224 Set if the symbol has `SYMBOL_REF_BLOCK' and 11225 `SYMBOL_REF_BLOCK_OFFSET' fields. 11226 11227 `SYMBOL_FLAG_ANCHOR' 11228 Set if the symbol is used as a section anchor. "Section 11229 anchors" are symbols that have a known position within 11230 an `object_block' and that can be used to access nearby 11231 members of that block. They are used to implement 11232 `-fsection-anchors'. 11233 11234 If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO' 11235 will be too. 11236 11237 Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for 11238 the target's use. 11239 11240 `SYMBOL_REF_BLOCK (X)' 11241 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block' 11242 structure to which the symbol belongs, or `NULL' if it has not 11243 been assigned a block. 11244 11245 `SYMBOL_REF_BLOCK_OFFSET (X)' 11246 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 11247 the first object in `SYMBOL_REF_BLOCK (X)'. The value is negative 11248 if X has not yet been assigned to a block, or it has not been 11249 given an offset within that block. 11250 11251 11252 File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 11253 11254 12.5 Flags in an RTL Expression 11255 =============================== 11256 11257 RTL expressions contain several flags (one-bit bit-fields) that are 11258 used in certain types of expression. Most often they are accessed with 11259 the following macros, which expand into lvalues. 11260 11261 `CONSTANT_POOL_ADDRESS_P (X)' 11262 Nonzero in a `symbol_ref' if it refers to part of the current 11263 function's constant pool. For most targets these addresses are in 11264 a `.rodata' section entirely separate from the function, but for 11265 some targets the addresses are close to the beginning of the 11266 function. In either case GCC assumes these addresses can be 11267 addressed directly, perhaps with the help of base registers. 11268 Stored in the `unchanging' field and printed as `/u'. 11269 11270 `CONST_OR_PURE_CALL_P (X)' 11271 In a `call_insn', `note', or an `expr_list' for notes, indicates 11272 that the insn represents a call to a const or pure function. 11273 Stored in the `unchanging' field and printed as `/u'. 11274 11275 `INSN_ANNULLED_BRANCH_P (X)' 11276 In a `jump_insn', `call_insn', or `insn' indicates that the branch 11277 is an annulling one. See the discussion under `sequence' below. 11278 Stored in the `unchanging' field and printed as `/u'. 11279 11280 `INSN_DELETED_P (X)' 11281 In an `insn', `call_insn', `jump_insn', `code_label', `barrier', 11282 or `note', nonzero if the insn has been deleted. Stored in the 11283 `volatil' field and printed as `/v'. 11284 11285 `INSN_FROM_TARGET_P (X)' 11286 In an `insn' or `jump_insn' or `call_insn' in a delay slot of a 11287 branch, indicates that the insn is from the target of the branch. 11288 If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn 11289 will only be executed if the branch is taken. For annulled 11290 branches with `INSN_FROM_TARGET_P' clear, the insn will be 11291 executed only if the branch is not taken. When 11292 `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be 11293 executed. Stored in the `in_struct' field and printed as `/s'. 11294 11295 `LABEL_PRESERVE_P (X)' 11296 In a `code_label' or `note', indicates that the label is 11297 referenced by code or data not visible to the RTL of a given 11298 function. Labels referenced by a non-local goto will have this 11299 bit set. Stored in the `in_struct' field and printed as `/s'. 11300 11301 `LABEL_REF_NONLOCAL_P (X)' 11302 In `label_ref' and `reg_label' expressions, nonzero if this is a 11303 reference to a non-local label. Stored in the `volatil' field and 11304 printed as `/v'. 11305 11306 `MEM_IN_STRUCT_P (X)' 11307 In `mem' expressions, nonzero for reference to an entire structure, 11308 union or array, or to a component of one. Zero for references to a 11309 scalar variable or through a pointer to a scalar. If both this 11310 flag and `MEM_SCALAR_P' are clear, then we don't know whether this 11311 `mem' is in a structure or not. Both flags should never be 11312 simultaneously set. Stored in the `in_struct' field and printed 11313 as `/s'. 11314 11315 `MEM_KEEP_ALIAS_SET_P (X)' 11316 In `mem' expressions, 1 if we should keep the alias set for this 11317 mem unchanged when we access a component. Set to 1, for example, 11318 when we are already in a non-addressable component of an aggregate. 11319 Stored in the `jump' field and printed as `/j'. 11320 11321 `MEM_SCALAR_P (X)' 11322 In `mem' expressions, nonzero for reference to a scalar known not 11323 to be a member of a structure, union, or array. Zero for such 11324 references and for indirections through pointers, even pointers 11325 pointing to scalar types. If both this flag and `MEM_IN_STRUCT_P' 11326 are clear, then we don't know whether this `mem' is in a structure 11327 or not. Both flags should never be simultaneously set. Stored in 11328 the `return_val' field and printed as `/i'. 11329 11330 `MEM_VOLATILE_P (X)' 11331 In `mem', `asm_operands', and `asm_input' expressions, nonzero for 11332 volatile memory references. Stored in the `volatil' field and 11333 printed as `/v'. 11334 11335 `MEM_NOTRAP_P (X)' 11336 In `mem', nonzero for memory references that will not trap. 11337 Stored in the `call' field and printed as `/c'. 11338 11339 `MEM_POINTER (X)' 11340 Nonzero in a `mem' if the memory reference holds a pointer. 11341 Stored in the `frame_related' field and printed as `/f'. 11342 11343 `REG_FUNCTION_VALUE_P (X)' 11344 Nonzero in a `reg' if it is the place in which this function's 11345 value is going to be returned. (This happens only in a hard 11346 register.) Stored in the `return_val' field and printed as `/i'. 11347 11348 `REG_POINTER (X)' 11349 Nonzero in a `reg' if the register holds a pointer. Stored in the 11350 `frame_related' field and printed as `/f'. 11351 11352 `REG_USERVAR_P (X)' 11353 In a `reg', nonzero if it corresponds to a variable present in the 11354 user's source code. Zero for temporaries generated internally by 11355 the compiler. Stored in the `volatil' field and printed as `/v'. 11356 11357 The same hard register may be used also for collecting the values 11358 of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero 11359 in this kind of use. 11360 11361 `RTX_FRAME_RELATED_P (X)' 11362 Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or 11363 `set' which is part of a function prologue and sets the stack 11364 pointer, sets the frame pointer, or saves a register. This flag 11365 should also be set on an instruction that sets up a temporary 11366 register to use in place of the frame pointer. Stored in the 11367 `frame_related' field and printed as `/f'. 11368 11369 In particular, on RISC targets where there are limits on the sizes 11370 of immediate constants, it is sometimes impossible to reach the 11371 register save area directly from the stack pointer. In that case, 11372 a temporary register is used that is near enough to the register 11373 save area, and the Canonical Frame Address, i.e., DWARF2's logical 11374 frame pointer, register must (temporarily) be changed to be this 11375 temporary register. So, the instruction that sets this temporary 11376 register must be marked as `RTX_FRAME_RELATED_P'. 11377 11378 If the marked instruction is overly complex (defined in terms of 11379 what `dwarf2out_frame_debug_expr' can handle), you will also have 11380 to create a `REG_FRAME_RELATED_EXPR' note and attach it to the 11381 instruction. This note should contain a simple expression of the 11382 computation performed by this instruction, i.e., one that 11383 `dwarf2out_frame_debug_expr' can handle. 11384 11385 This flag is required for exception handling support on targets 11386 with RTL prologues. 11387 11388 `MEM_READONLY_P (X)' 11389 Nonzero in a `mem', if the memory is statically allocated and 11390 read-only. 11391 11392 Read-only in this context means never modified during the lifetime 11393 of the program, not necessarily in ROM or in write-disabled pages. 11394 A common example of the later is a shared library's global offset 11395 table. This table is initialized by the runtime loader, so the 11396 memory is technically writable, but after control is transfered 11397 from the runtime loader to the application, this memory will never 11398 be subsequently modified. 11399 11400 Stored in the `unchanging' field and printed as `/u'. 11401 11402 `SCHED_GROUP_P (X)' 11403 During instruction scheduling, in an `insn', `call_insn' or 11404 `jump_insn', indicates that the previous insn must be scheduled 11405 together with this insn. This is used to ensure that certain 11406 groups of instructions will not be split up by the instruction 11407 scheduling pass, for example, `use' insns before a `call_insn' may 11408 not be separated from the `call_insn'. Stored in the `in_struct' 11409 field and printed as `/s'. 11410 11411 `SET_IS_RETURN_P (X)' 11412 For a `set', nonzero if it is for a return. Stored in the `jump' 11413 field and printed as `/j'. 11414 11415 `SIBLING_CALL_P (X)' 11416 For a `call_insn', nonzero if the insn is a sibling call. Stored 11417 in the `jump' field and printed as `/j'. 11418 11419 `STRING_POOL_ADDRESS_P (X)' 11420 For a `symbol_ref' expression, nonzero if it addresses this 11421 function's string constant pool. Stored in the `frame_related' 11422 field and printed as `/f'. 11423 11424 `SUBREG_PROMOTED_UNSIGNED_P (X)' 11425 Returns a value greater then zero for a `subreg' that has 11426 `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 11427 kept zero-extended, zero if it is kept sign-extended, and less 11428 then zero if it is extended some other way via the `ptr_extend' 11429 instruction. Stored in the `unchanging' field and `volatil' 11430 field, printed as `/u' and `/v'. This macro may only be used to 11431 get the value it may not be used to change the value. Use 11432 `SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 11433 11434 `SUBREG_PROMOTED_UNSIGNED_SET (X)' 11435 Set the `unchanging' and `volatil' fields in a `subreg' to reflect 11436 zero, sign, or other extension. If `volatil' is zero, then 11437 `unchanging' as nonzero means zero extension and as zero means 11438 sign extension. If `volatil' is nonzero then some other type of 11439 extension was done via the `ptr_extend' instruction. 11440 11441 `SUBREG_PROMOTED_VAR_P (X)' 11442 Nonzero in a `subreg' if it was made when accessing an object that 11443 was promoted to a wider mode in accord with the `PROMOTED_MODE' 11444 machine description macro (*note Storage Layout::). In this case, 11445 the mode of the `subreg' is the declared mode of the object and 11446 the mode of `SUBREG_REG' is the mode of the register that holds 11447 the object. Promoted variables are always either sign- or 11448 zero-extended to the wider mode on every assignment. Stored in 11449 the `in_struct' field and printed as `/s'. 11450 11451 `SYMBOL_REF_USED (X)' 11452 In a `symbol_ref', indicates that X has been used. This is 11453 normally only used to ensure that X is only declared external 11454 once. Stored in the `used' field. 11455 11456 `SYMBOL_REF_WEAK (X)' 11457 In a `symbol_ref', indicates that X has been declared weak. 11458 Stored in the `return_val' field and printed as `/i'. 11459 11460 `SYMBOL_REF_FLAG (X)' 11461 In a `symbol_ref', this is used as a flag for machine-specific 11462 purposes. Stored in the `volatil' field and printed as `/v'. 11463 11464 Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by 11465 `SYMBOL_REF_FLAGS'. Certainly use of `SYMBOL_REF_FLAGS' is 11466 mandatory if the target requires more than one bit of storage. 11467 11468 These are the fields to which the above macros refer: 11469 11470 `call' 11471 In a `mem', 1 means that the memory reference will not trap. 11472 11473 In an RTL dump, this flag is represented as `/c'. 11474 11475 `frame_related' 11476 In an `insn' or `set' expression, 1 means that it is part of a 11477 function prologue and sets the stack pointer, sets the frame 11478 pointer, saves a register, or sets up a temporary register to use 11479 in place of the frame pointer. 11480 11481 In `reg' expressions, 1 means that the register holds a pointer. 11482 11483 In `mem' expressions, 1 means that the memory reference holds a 11484 pointer. 11485 11486 In `symbol_ref' expressions, 1 means that the reference addresses 11487 this function's string constant pool. 11488 11489 In an RTL dump, this flag is represented as `/f'. 11490 11491 `in_struct' 11492 In `mem' expressions, it is 1 if the memory datum referred to is 11493 all or part of a structure or array; 0 if it is (or might be) a 11494 scalar variable. A reference through a C pointer has 0 because 11495 the pointer might point to a scalar variable. This information 11496 allows the compiler to determine something about possible cases of 11497 aliasing. 11498 11499 In `reg' expressions, it is 1 if the register has its entire life 11500 contained within the test expression of some loop. 11501 11502 In `subreg' expressions, 1 means that the `subreg' is accessing an 11503 object that has had its mode promoted from a wider mode. 11504 11505 In `label_ref' expressions, 1 means that the referenced label is 11506 outside the innermost loop containing the insn in which the 11507 `label_ref' was found. 11508 11509 In `code_label' expressions, it is 1 if the label may never be 11510 deleted. This is used for labels which are the target of 11511 non-local gotos. Such a label that would have been deleted is 11512 replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'. 11513 11514 In an `insn' during dead-code elimination, 1 means that the insn is 11515 dead code. 11516 11517 In an `insn' or `jump_insn' during reorg for an insn in the delay 11518 slot of a branch, 1 means that this insn is from the target of the 11519 branch. 11520 11521 In an `insn' during instruction scheduling, 1 means that this insn 11522 must be scheduled as part of a group together with the previous 11523 insn. 11524 11525 In an RTL dump, this flag is represented as `/s'. 11526 11527 `return_val' 11528 In `reg' expressions, 1 means the register contains the value to 11529 be returned by the current function. On machines that pass 11530 parameters in registers, the same register number may be used for 11531 parameters as well, but this flag is not set on such uses. 11532 11533 In `mem' expressions, 1 means the memory reference is to a scalar 11534 known not to be a member of a structure, union, or array. 11535 11536 In `symbol_ref' expressions, 1 means the referenced symbol is weak. 11537 11538 In an RTL dump, this flag is represented as `/i'. 11539 11540 `jump' 11541 In a `mem' expression, 1 means we should keep the alias set for 11542 this mem unchanged when we access a component. 11543 11544 In a `set', 1 means it is for a return. 11545 11546 In a `call_insn', 1 means it is a sibling call. 11547 11548 In an RTL dump, this flag is represented as `/j'. 11549 11550 `unchanging' 11551 In `reg' and `mem' expressions, 1 means that the value of the 11552 expression never changes. 11553 11554 In `subreg' expressions, it is 1 if the `subreg' references an 11555 unsigned object whose mode has been promoted to a wider mode. 11556 11557 In an `insn' or `jump_insn' in the delay slot of a branch 11558 instruction, 1 means an annulling branch should be used. 11559 11560 In a `symbol_ref' expression, 1 means that this symbol addresses 11561 something in the per-function constant pool. 11562 11563 In a `call_insn', `note', or an `expr_list' of notes, 1 means that 11564 this instruction is a call to a const or pure function. 11565 11566 In an RTL dump, this flag is represented as `/u'. 11567 11568 `used' 11569 This flag is used directly (without an access macro) at the end of 11570 RTL generation for a function, to count the number of times an 11571 expression appears in insns. Expressions that appear more than 11572 once are copied, according to the rules for shared structure 11573 (*note Sharing::). 11574 11575 For a `reg', it is used directly (without an access macro) by the 11576 leaf register renumbering code to ensure that each register is only 11577 renumbered once. 11578 11579 In a `symbol_ref', it indicates that an external declaration for 11580 the symbol has already been written. 11581 11582 `volatil' 11583 In a `mem', `asm_operands', or `asm_input' expression, it is 1 if 11584 the memory reference is volatile. Volatile memory references may 11585 not be deleted, reordered or combined. 11586 11587 In a `symbol_ref' expression, it is used for machine-specific 11588 purposes. 11589 11590 In a `reg' expression, it is 1 if the value is a user-level 11591 variable. 0 indicates an internal compiler temporary. 11592 11593 In an `insn', 1 means the insn has been deleted. 11594 11595 In `label_ref' and `reg_label' expressions, 1 means a reference to 11596 a non-local label. 11597 11598 In an RTL dump, this flag is represented as `/v'. 11599 11600 11601 File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 11602 11603 12.6 Machine Modes 11604 ================== 11605 11606 A machine mode describes a size of data object and the representation 11607 used for it. In the C code, machine modes are represented by an 11608 enumeration type, `enum machine_mode', defined in `machmode.def'. Each 11609 RTL expression has room for a machine mode and so do certain kinds of 11610 tree expressions (declarations and types, to be precise). 11611 11612 In debugging dumps and machine descriptions, the machine mode of an RTL 11613 expression is written after the expression code with a colon to separate 11614 them. The letters `mode' which appear at the end of each machine mode 11615 name are omitted. For example, `(reg:SI 38)' is a `reg' expression 11616 with machine mode `SImode'. If the mode is `VOIDmode', it is not 11617 written at all. 11618 11619 Here is a table of machine modes. The term "byte" below refers to an 11620 object of `BITS_PER_UNIT' bits (*note Storage Layout::). 11621 11622 `BImode' 11623 "Bit" mode represents a single bit, for predicate registers. 11624 11625 `QImode' 11626 "Quarter-Integer" mode represents a single byte treated as an 11627 integer. 11628 11629 `HImode' 11630 "Half-Integer" mode represents a two-byte integer. 11631 11632 `PSImode' 11633 "Partial Single Integer" mode represents an integer which occupies 11634 four bytes but which doesn't really use all four. On some 11635 machines, this is the right mode to use for pointers. 11636 11637 `SImode' 11638 "Single Integer" mode represents a four-byte integer. 11639 11640 `PDImode' 11641 "Partial Double Integer" mode represents an integer which occupies 11642 eight bytes but which doesn't really use all eight. On some 11643 machines, this is the right mode to use for certain pointers. 11644 11645 `DImode' 11646 "Double Integer" mode represents an eight-byte integer. 11647 11648 `TImode' 11649 "Tetra Integer" (?) mode represents a sixteen-byte integer. 11650 11651 `OImode' 11652 "Octa Integer" (?) mode represents a thirty-two-byte integer. 11653 11654 `QFmode' 11655 "Quarter-Floating" mode represents a quarter-precision (single 11656 byte) floating point number. 11657 11658 `HFmode' 11659 "Half-Floating" mode represents a half-precision (two byte) 11660 floating point number. 11661 11662 `TQFmode' 11663 "Three-Quarter-Floating" (?) mode represents a 11664 three-quarter-precision (three byte) floating point number. 11665 11666 `SFmode' 11667 "Single Floating" mode represents a four byte floating point 11668 number. In the common case, of a processor with IEEE arithmetic 11669 and 8-bit bytes, this is a single-precision IEEE floating point 11670 number; it can also be used for double-precision (on processors 11671 with 16-bit bytes) and single-precision VAX and IBM types. 11672 11673 `DFmode' 11674 "Double Floating" mode represents an eight byte floating point 11675 number. In the common case, of a processor with IEEE arithmetic 11676 and 8-bit bytes, this is a double-precision IEEE floating point 11677 number. 11678 11679 `XFmode' 11680 "Extended Floating" mode represents an IEEE extended floating point 11681 number. This mode only has 80 meaningful bits (ten bytes). Some 11682 processors require such numbers to be padded to twelve bytes, 11683 others to sixteen; this mode is used for either. 11684 11685 `SDmode' 11686 "Single Decimal Floating" mode represents a four byte decimal 11687 floating point number (as distinct from conventional binary 11688 floating point). 11689 11690 `DDmode' 11691 "Double Decimal Floating" mode represents an eight byte decimal 11692 floating point number. 11693 11694 `TDmode' 11695 "Tetra Decimal Floating" mode represents a sixteen byte decimal 11696 floating point number all 128 of whose bits are meaningful. 11697 11698 `TFmode' 11699 "Tetra Floating" mode represents a sixteen byte floating point 11700 number all 128 of whose bits are meaningful. One common use is the 11701 IEEE quad-precision format. 11702 11703 `QQmode' 11704 "Quarter-Fractional" mode represents a single byte treated as a 11705 signed fractional number. The default format is "s.7". 11706 11707 `HQmode' 11708 "Half-Fractional" mode represents a two-byte signed fractional 11709 number. The default format is "s.15". 11710 11711 `SQmode' 11712 "Single Fractional" mode represents a four-byte signed fractional 11713 number. The default format is "s.31". 11714 11715 `DQmode' 11716 "Double Fractional" mode represents an eight-byte signed 11717 fractional number. The default format is "s.63". 11718 11719 `TQmode' 11720 "Tetra Fractional" mode represents a sixteen-byte signed 11721 fractional number. The default format is "s.127". 11722 11723 `UQQmode' 11724 "Unsigned Quarter-Fractional" mode represents a single byte 11725 treated as an unsigned fractional number. The default format is 11726 ".8". 11727 11728 `UHQmode' 11729 "Unsigned Half-Fractional" mode represents a two-byte unsigned 11730 fractional number. The default format is ".16". 11731 11732 `USQmode' 11733 "Unsigned Single Fractional" mode represents a four-byte unsigned 11734 fractional number. The default format is ".32". 11735 11736 `UDQmode' 11737 "Unsigned Double Fractional" mode represents an eight-byte unsigned 11738 fractional number. The default format is ".64". 11739 11740 `UTQmode' 11741 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 11742 fractional number. The default format is ".128". 11743 11744 `HAmode' 11745 "Half-Accumulator" mode represents a two-byte signed accumulator. 11746 The default format is "s8.7". 11747 11748 `SAmode' 11749 "Single Accumulator" mode represents a four-byte signed 11750 accumulator. The default format is "s16.15". 11751 11752 `DAmode' 11753 "Double Accumulator" mode represents an eight-byte signed 11754 accumulator. The default format is "s32.31". 11755 11756 `TAmode' 11757 "Tetra Accumulator" mode represents a sixteen-byte signed 11758 accumulator. The default format is "s64.63". 11759 11760 `UHAmode' 11761 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 11762 accumulator. The default format is "8.8". 11763 11764 `USAmode' 11765 "Unsigned Single Accumulator" mode represents a four-byte unsigned 11766 accumulator. The default format is "16.16". 11767 11768 `UDAmode' 11769 "Unsigned Double Accumulator" mode represents an eight-byte 11770 unsigned accumulator. The default format is "32.32". 11771 11772 `UTAmode' 11773 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 11774 unsigned accumulator. The default format is "64.64". 11775 11776 `CCmode' 11777 "Condition Code" mode represents the value of a condition code, 11778 which is a machine-specific set of bits used to represent the 11779 result of a comparison operation. Other machine-specific modes 11780 may also be used for the condition code. These modes are not used 11781 on machines that use `cc0' (see *note Condition Code::). 11782 11783 `BLKmode' 11784 "Block" mode represents values that are aggregates to which none of 11785 the other modes apply. In RTL, only memory references can have 11786 this mode, and only if they appear in string-move or vector 11787 instructions. On machines which have no such instructions, 11788 `BLKmode' will not appear in RTL. 11789 11790 `VOIDmode' 11791 Void mode means the absence of a mode or an unspecified mode. For 11792 example, RTL expressions of code `const_int' have mode `VOIDmode' 11793 because they can be taken to have whatever mode the context 11794 requires. In debugging dumps of RTL, `VOIDmode' is expressed by 11795 the absence of any mode. 11796 11797 `QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 11798 These modes stand for a complex number represented as a pair of 11799 floating point values. The floating point values are in `QFmode', 11800 `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively. 11801 11802 `CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 11803 These modes stand for a complex number represented as a pair of 11804 integer values. The integer values are in `QImode', `HImode', 11805 `SImode', `DImode', `TImode', and `OImode', respectively. 11806 11807 The machine description defines `Pmode' as a C macro which expands 11808 into the machine mode used for addresses. Normally this is the mode 11809 whose size is `BITS_PER_WORD', `SImode' on 32-bit machines. 11810 11811 The only modes which a machine description must support are `QImode', 11812 and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and 11813 `DOUBLE_TYPE_SIZE'. The compiler will attempt to use `DImode' for 11814 8-byte structures and unions, but this can be prevented by overriding 11815 the definition of `MAX_FIXED_MODE_SIZE'. Alternatively, you can have 11816 the compiler use `TImode' for 16-byte structures and unions. Likewise, 11817 you can arrange for the C type `short int' to avoid using `HImode'. 11818 11819 Very few explicit references to machine modes remain in the compiler 11820 and these few references will soon be removed. Instead, the machine 11821 modes are divided into mode classes. These are represented by the 11822 enumeration type `enum mode_class' defined in `machmode.h'. The 11823 possible mode classes are: 11824 11825 `MODE_INT' 11826 Integer modes. By default these are `BImode', `QImode', `HImode', 11827 `SImode', `DImode', `TImode', and `OImode'. 11828 11829 `MODE_PARTIAL_INT' 11830 The "partial integer" modes, `PQImode', `PHImode', `PSImode' and 11831 `PDImode'. 11832 11833 `MODE_FLOAT' 11834 Floating point modes. By default these are `QFmode', `HFmode', 11835 `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'. 11836 11837 `MODE_DECIMAL_FLOAT' 11838 Decimal floating point modes. By default these are `SDmode', 11839 `DDmode' and `TDmode'. 11840 11841 `MODE_FRACT' 11842 Signed fractional modes. By default these are `QQmode', `HQmode', 11843 `SQmode', `DQmode' and `TQmode'. 11844 11845 `MODE_UFRACT' 11846 Unsigned fractional modes. By default these are `UQQmode', 11847 `UHQmode', `USQmode', `UDQmode' and `UTQmode'. 11848 11849 `MODE_ACCUM' 11850 Signed accumulator modes. By default these are `HAmode', 11851 `SAmode', `DAmode' and `TAmode'. 11852 11853 `MODE_UACCUM' 11854 Unsigned accumulator modes. By default these are `UHAmode', 11855 `USAmode', `UDAmode' and `UTAmode'. 11856 11857 `MODE_COMPLEX_INT' 11858 Complex integer modes. (These are not currently implemented). 11859 11860 `MODE_COMPLEX_FLOAT' 11861 Complex floating point modes. By default these are `QCmode', 11862 `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'. 11863 11864 `MODE_FUNCTION' 11865 Algol or Pascal function variables including a static chain. 11866 (These are not currently implemented). 11867 11868 `MODE_CC' 11869 Modes representing condition code values. These are `CCmode' plus 11870 any `CC_MODE' modes listed in the `MACHINE-modes.def'. *Note Jump 11871 Patterns::, also see *Note Condition Code::. 11872 11873 `MODE_RANDOM' 11874 This is a catchall mode class for modes which don't fit into the 11875 above classes. Currently `VOIDmode' and `BLKmode' are in 11876 `MODE_RANDOM'. 11877 11878 Here are some C macros that relate to machine modes: 11879 11880 `GET_MODE (X)' 11881 Returns the machine mode of the RTX X. 11882 11883 `PUT_MODE (X, NEWMODE)' 11884 Alters the machine mode of the RTX X to be NEWMODE. 11885 11886 `NUM_MACHINE_MODES' 11887 Stands for the number of machine modes available on the target 11888 machine. This is one greater than the largest numeric value of any 11889 machine mode. 11890 11891 `GET_MODE_NAME (M)' 11892 Returns the name of mode M as a string. 11893 11894 `GET_MODE_CLASS (M)' 11895 Returns the mode class of mode M. 11896 11897 `GET_MODE_WIDER_MODE (M)' 11898 Returns the next wider natural mode. For example, the expression 11899 `GET_MODE_WIDER_MODE (QImode)' returns `HImode'. 11900 11901 `GET_MODE_SIZE (M)' 11902 Returns the size in bytes of a datum of mode M. 11903 11904 `GET_MODE_BITSIZE (M)' 11905 Returns the size in bits of a datum of mode M. 11906 11907 `GET_MODE_IBIT (M)' 11908 Returns the number of integral bits of a datum of fixed-point mode 11909 M. 11910 11911 `GET_MODE_FBIT (M)' 11912 Returns the number of fractional bits of a datum of fixed-point 11913 mode M. 11914 11915 `GET_MODE_MASK (M)' 11916 Returns a bitmask containing 1 for all bits in a word that fit 11917 within mode M. This macro can only be used for modes whose 11918 bitsize is less than or equal to `HOST_BITS_PER_INT'. 11919 11920 `GET_MODE_ALIGNMENT (M)' 11921 Return the required alignment, in bits, for an object of mode M. 11922 11923 `GET_MODE_UNIT_SIZE (M)' 11924 Returns the size in bytes of the subunits of a datum of mode M. 11925 This is the same as `GET_MODE_SIZE' except in the case of complex 11926 modes. For them, the unit size is the size of the real or 11927 imaginary part. 11928 11929 `GET_MODE_NUNITS (M)' 11930 Returns the number of units contained in a mode, i.e., 11931 `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'. 11932 11933 `GET_CLASS_NARROWEST_MODE (C)' 11934 Returns the narrowest mode in mode class C. 11935 11936 The global variables `byte_mode' and `word_mode' contain modes whose 11937 classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or 11938 `BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode' 11939 and `SImode', respectively. 11940 11941 11942 File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 11943 11944 12.7 Constant Expression Types 11945 ============================== 11946 11947 The simplest RTL expressions are those that represent constant values. 11948 11949 `(const_int I)' 11950 This type of expression represents the integer value I. I is 11951 customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)', 11952 which is equivalent to `XWINT (EXP, 0)'. 11953 11954 Constants generated for modes with fewer bits than `HOST_WIDE_INT' 11955 must be sign extended to full width (e.g., with `gen_int_mode'). 11956 11957 There is only one expression object for the integer value zero; it 11958 is the value of the variable `const0_rtx'. Likewise, the only 11959 expression for integer value one is found in `const1_rtx', the only 11960 expression for integer value two is found in `const2_rtx', and the 11961 only expression for integer value negative one is found in 11962 `constm1_rtx'. Any attempt to create an expression of code 11963 `const_int' and value zero, one, two or negative one will return 11964 `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as 11965 appropriate. 11966 11967 Similarly, there is only one object for the integer whose value is 11968 `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If 11969 `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will 11970 point to the same object. If `STORE_FLAG_VALUE' is -1, 11971 `const_true_rtx' and `constm1_rtx' will point to the same object. 11972 11973 `(const_double:M ADDR I0 I1 ...)' 11974 Represents either a floating-point constant of mode M or an 11975 integer constant too large to fit into `HOST_BITS_PER_WIDE_INT' 11976 bits but small enough to fit within twice that number of bits (GCC 11977 does not provide a mechanism to represent even larger constants). 11978 In the latter case, M will be `VOIDmode'. 11979 11980 `(const_fixed:M ADDR)' 11981 Represents a fixed-point constant of mode M. The data structure, 11982 which contains data with the size of two `HOST_BITS_PER_WIDE_INT' 11983 and the associated fixed-point mode, is access with the macro 11984 `CONST_FIXED_VALUE'. The high part of data is accessed with 11985 `CONST_FIXED_VALUE_HIGH'; the low part is accessed with 11986 `CONST_FIXED_VALUE_LOW'. 11987 11988 `(const_vector:M [X0 X1 ...])' 11989 Represents a vector constant. The square brackets stand for the 11990 vector containing the constant elements. X0, X1 and so on are the 11991 `const_int' or `const_double' elements. 11992 11993 The number of units in a `const_vector' is obtained with the macro 11994 `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'. 11995 11996 Individual elements in a vector constant are accessed with the 11997 macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V 11998 is the vector constant and N is the element desired. 11999 12000 ADDR is used to contain the `mem' expression that corresponds to 12001 the location in memory that at which the constant can be found. If 12002 it has not been allocated a memory location, but is on the chain 12003 of all `const_double' expressions in this compilation (maintained 12004 using an undisplayed field), ADDR contains `const0_rtx'. If it is 12005 not on the chain, ADDR contains `cc0_rtx'. ADDR is customarily 12006 accessed with the macro `CONST_DOUBLE_MEM' and the chain field via 12007 `CONST_DOUBLE_CHAIN'. 12008 12009 If M is `VOIDmode', the bits of the value are stored in I0 and I1. 12010 I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and 12011 I1 with `CONST_DOUBLE_HIGH'. 12012 12013 If the constant is floating point (regardless of its precision), 12014 then the number of integers used to store the value depends on the 12015 size of `REAL_VALUE_TYPE' (*note Floating Point::). The integers 12016 represent a floating point number, but not precisely in the target 12017 machine's or host machine's floating point format. To convert 12018 them to the precise bit pattern used by the target machine, use 12019 the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 12020 Output::). 12021 12022 The macro `CONST0_RTX (MODE)' refers to an expression with value 0 12023 in mode MODE. If mode MODE is of mode class `MODE_INT', it 12024 returns `const0_rtx'. If mode MODE is of mode class `MODE_FLOAT', 12025 it returns a `CONST_DOUBLE' expression in mode MODE. Otherwise, 12026 it returns a `CONST_VECTOR' expression in mode MODE. Similarly, 12027 the macro `CONST1_RTX (MODE)' refers to an expression with value 1 12028 in mode MODE and similarly for `CONST2_RTX'. The `CONST1_RTX' and 12029 `CONST2_RTX' macros are undefined for vector modes. 12030 12031 `(const_string STR)' 12032 Represents a constant string with value STR. Currently this is 12033 used only for insn attributes (*note Insn Attributes::) since 12034 constant strings in C are placed in memory. 12035 12036 `(symbol_ref:MODE SYMBOL)' 12037 Represents the value of an assembler label for data. SYMBOL is a 12038 string that describes the name of the assembler label. If it 12039 starts with a `*', the label is the rest of SYMBOL not including 12040 the `*'. Otherwise, the label is SYMBOL, usually prefixed with 12041 `_'. 12042 12043 The `symbol_ref' contains a mode, which is usually `Pmode'. 12044 Usually that is the only mode for which a symbol is directly valid. 12045 12046 `(label_ref:MODE LABEL)' 12047 Represents the value of an assembler label for code. It contains 12048 one operand, an expression, which must be a `code_label' or a 12049 `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the 12050 instruction sequence to identify the place where the label should 12051 go. 12052 12053 The reason for using a distinct expression type for code label 12054 references is so that jump optimization can distinguish them. 12055 12056 The `label_ref' contains a mode, which is usually `Pmode'. 12057 Usually that is the only mode for which a label is directly valid. 12058 12059 `(const:M EXP)' 12060 Represents a constant that is the result of an assembly-time 12061 arithmetic computation. The operand, EXP, is an expression that 12062 contains only constants (`const_int', `symbol_ref' and `label_ref' 12063 expressions) combined with `plus' and `minus'. However, not all 12064 combinations are valid, since the assembler cannot do arbitrary 12065 arithmetic on relocatable symbols. 12066 12067 M should be `Pmode'. 12068 12069 `(high:M EXP)' 12070 Represents the high-order bits of EXP, usually a `symbol_ref'. 12071 The number of bits is machine-dependent and is normally the number 12072 of bits specified in an instruction that initializes the high 12073 order bits of a register. It is used with `lo_sum' to represent 12074 the typical two-instruction sequence used in RISC machines to 12075 reference a global memory location. 12076 12077 M should be `Pmode'. 12078 12079 12080 File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 12081 12082 12.8 Registers and Memory 12083 ========================= 12084 12085 Here are the RTL expression types for describing access to machine 12086 registers and to main memory. 12087 12088 `(reg:M N)' 12089 For small values of the integer N (those that are less than 12090 `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 12091 register number N: a "hard register". For larger values of N, it 12092 stands for a temporary value or "pseudo register". The compiler's 12093 strategy is to generate code assuming an unlimited number of such 12094 pseudo registers, and later convert them into hard registers or 12095 into memory references. 12096 12097 M is the machine mode of the reference. It is necessary because 12098 machines can generally refer to each register in more than one 12099 mode. For example, a register may contain a full word but there 12100 may be instructions to refer to it as a half word or as a single 12101 byte, as well as instructions to refer to it as a floating point 12102 number of various precisions. 12103 12104 Even for a register that the machine can access in only one mode, 12105 the mode must always be specified. 12106 12107 The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine 12108 description, since the number of hard registers on the machine is 12109 an invariant characteristic of the machine. Note, however, that 12110 not all of the machine registers must be general registers. All 12111 the machine registers that can be used for storage of data are 12112 given hard register numbers, even those that can be used only in 12113 certain instructions or can hold only certain types of data. 12114 12115 A hard register may be accessed in various modes throughout one 12116 function, but each pseudo register is given a natural mode and is 12117 accessed only in that mode. When it is necessary to describe an 12118 access to a pseudo register using a nonnatural mode, a `subreg' 12119 expression is used. 12120 12121 A `reg' expression with a machine mode that specifies more than 12122 one word of data may actually stand for several consecutive 12123 registers. If in addition the register number specifies a 12124 hardware register, then it actually represents several consecutive 12125 hardware registers starting with the specified one. 12126 12127 Each pseudo register number used in a function's RTL code is 12128 represented by a unique `reg' expression. 12129 12130 Some pseudo register numbers, those within the range of 12131 `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear 12132 during the RTL generation phase and are eliminated before the 12133 optimization phases. These represent locations in the stack frame 12134 that cannot be determined until RTL generation for the function 12135 has been completed. The following virtual register numbers are 12136 defined: 12137 12138 `VIRTUAL_INCOMING_ARGS_REGNUM' 12139 This points to the first word of the incoming arguments 12140 passed on the stack. Normally these arguments are placed 12141 there by the caller, but the callee may have pushed some 12142 arguments that were previously passed in registers. 12143 12144 When RTL generation is complete, this virtual register is 12145 replaced by the sum of the register given by 12146 `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'. 12147 12148 `VIRTUAL_STACK_VARS_REGNUM' 12149 If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 12150 points to immediately above the first variable on the stack. 12151 Otherwise, it points to the first variable on the stack. 12152 12153 `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 12154 register given by `FRAME_POINTER_REGNUM' and the value 12155 `STARTING_FRAME_OFFSET'. 12156 12157 `VIRTUAL_STACK_DYNAMIC_REGNUM' 12158 This points to the location of dynamically allocated memory 12159 on the stack immediately after the stack pointer has been 12160 adjusted by the amount of memory desired. 12161 12162 This virtual register is replaced by the sum of the register 12163 given by `STACK_POINTER_REGNUM' and the value 12164 `STACK_DYNAMIC_OFFSET'. 12165 12166 `VIRTUAL_OUTGOING_ARGS_REGNUM' 12167 This points to the location in the stack at which outgoing 12168 arguments should be written when the stack is pre-pushed 12169 (arguments pushed using push insns should always use 12170 `STACK_POINTER_REGNUM'). 12171 12172 This virtual register is replaced by the sum of the register 12173 given by `STACK_POINTER_REGNUM' and the value 12174 `STACK_POINTER_OFFSET'. 12175 12176 `(subreg:M REG BYTENUM)' 12177 `subreg' expressions are used to refer to a register in a machine 12178 mode other than its natural one, or to refer to one register of a 12179 multi-part `reg' that actually refers to several registers. 12180 12181 Each pseudo-register has a natural mode. If it is necessary to 12182 operate on it in a different mode--for example, to perform a 12183 fullword move instruction on a pseudo-register that contains a 12184 single byte--the pseudo-register must be enclosed in a `subreg'. 12185 In such a case, BYTENUM is zero. 12186 12187 Usually M is at least as narrow as the mode of REG, in which case 12188 it is restricting consideration to only the bits of REG that are 12189 in M. 12190 12191 Sometimes M is wider than the mode of REG. These `subreg' 12192 expressions are often called "paradoxical". They are used in 12193 cases where we want to refer to an object in a wider mode but do 12194 not care what value the additional bits have. The reload pass 12195 ensures that paradoxical references are only made to hard 12196 registers. 12197 12198 The other use of `subreg' is to extract the individual registers of 12199 a multi-register value. Machine modes such as `DImode' and 12200 `TImode' can indicate values longer than a word, values which 12201 usually require two or more consecutive registers. To access one 12202 of the registers, use a `subreg' with mode `SImode' and a BYTENUM 12203 offset that says which register. 12204 12205 Storing in a non-paradoxical `subreg' has undefined results for 12206 bits belonging to the same word as the `subreg'. This laxity makes 12207 it easier to generate efficient code for such instructions. To 12208 represent an instruction that preserves all the bits outside of 12209 those in the `subreg', use `strict_low_part' around the `subreg'. 12210 12211 The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says 12212 that byte number zero is part of the most significant word; 12213 otherwise, it is part of the least significant word. 12214 12215 The compilation parameter `BYTES_BIG_ENDIAN', if set to 1, says 12216 that byte number zero is the most significant byte within a word; 12217 otherwise, it is the least significant byte within a word. 12218 12219 On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with 12220 `WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 12221 floating point values as if they had the same endianness as 12222 integer values. This works because they handle them solely as a 12223 collection of integer values, with no particular numerical value. 12224 Only real.c and the runtime libraries care about 12225 `FLOAT_WORDS_BIG_ENDIAN'. 12226 12227 Between the combiner pass and the reload pass, it is possible to 12228 have a paradoxical `subreg' which contains a `mem' instead of a 12229 `reg' as its first operand. After the reload pass, it is also 12230 possible to have a non-paradoxical `subreg' which contains a 12231 `mem'; this usually occurs when the `mem' is a stack slot which 12232 replaced a pseudo register. 12233 12234 Note that it is not valid to access a `DFmode' value in `SFmode' 12235 using a `subreg'. On some machines the most significant part of a 12236 `DFmode' value does not have the same format as a single-precision 12237 floating value. 12238 12239 It is also not valid to access a single word of a multi-word value 12240 in a hard register when less registers can hold the value than 12241 would be expected from its size. For example, some 32-bit 12242 machines have floating-point registers that can hold an entire 12243 `DFmode' value. If register 10 were such a register `(subreg:SI 12244 (reg:DF 10) 4)' would be invalid because there is no way to 12245 convert that reference to a single machine register. The reload 12246 pass prevents `subreg' expressions such as these from being formed. 12247 12248 The first operand of a `subreg' expression is customarily accessed 12249 with the `SUBREG_REG' macro and the second operand is customarily 12250 accessed with the `SUBREG_BYTE' macro. 12251 12252 `(scratch:M)' 12253 This represents a scratch register that will be required for the 12254 execution of a single instruction and not used subsequently. It is 12255 converted into a `reg' by either the local register allocator or 12256 the reload pass. 12257 12258 `scratch' is usually present inside a `clobber' operation (*note 12259 Side Effects::). 12260 12261 `(cc0)' 12262 This refers to the machine's condition code register. It has no 12263 operands and may not have a machine mode. There are two ways to 12264 use it: 12265 12266 * To stand for a complete set of condition code flags. This is 12267 best on most machines, where each comparison sets the entire 12268 series of flags. 12269 12270 With this technique, `(cc0)' may be validly used in only two 12271 contexts: as the destination of an assignment (in test and 12272 compare instructions) and in comparison operators comparing 12273 against zero (`const_int' with value zero; that is to say, 12274 `const0_rtx'). 12275 12276 * To stand for a single flag that is the result of a single 12277 condition. This is useful on machines that have only a 12278 single flag bit, and in which comparison instructions must 12279 specify the condition to test. 12280 12281 With this technique, `(cc0)' may be validly used in only two 12282 contexts: as the destination of an assignment (in test and 12283 compare instructions) where the source is a comparison 12284 operator, and as the first operand of `if_then_else' (in a 12285 conditional branch). 12286 12287 There is only one expression object of code `cc0'; it is the value 12288 of the variable `cc0_rtx'. Any attempt to create an expression of 12289 code `cc0' will return `cc0_rtx'. 12290 12291 Instructions can set the condition code implicitly. On many 12292 machines, nearly all instructions set the condition code based on 12293 the value that they compute or store. It is not necessary to 12294 record these actions explicitly in the RTL because the machine 12295 description includes a prescription for recognizing the 12296 instructions that do so (by means of the macro 12297 `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions 12298 whose sole purpose is to set the condition code, and instructions 12299 that use the condition code, need mention `(cc0)'. 12300 12301 On some machines, the condition code register is given a register 12302 number and a `reg' is used instead of `(cc0)'. This is usually the 12303 preferable approach if only a small subset of instructions modify 12304 the condition code. Other machines store condition codes in 12305 general registers; in such cases a pseudo register should be used. 12306 12307 Some machines, such as the SPARC and RS/6000, have two sets of 12308 arithmetic instructions, one that sets and one that does not set 12309 the condition code. This is best handled by normally generating 12310 the instruction that does not set the condition code, and making a 12311 pattern that both performs the arithmetic and sets the condition 12312 code register (which would not be `(cc0)' in this case). For 12313 examples, search for `addcc' and `andcc' in `sparc.md'. 12314 12315 `(pc)' 12316 This represents the machine's program counter. It has no operands 12317 and may not have a machine mode. `(pc)' may be validly used only 12318 in certain specific contexts in jump instructions. 12319 12320 There is only one expression object of code `pc'; it is the value 12321 of the variable `pc_rtx'. Any attempt to create an expression of 12322 code `pc' will return `pc_rtx'. 12323 12324 All instructions that do not jump alter the program counter 12325 implicitly by incrementing it, but there is no need to mention 12326 this in the RTL. 12327 12328 `(mem:M ADDR ALIAS)' 12329 This RTX represents a reference to main memory at an address 12330 represented by the expression ADDR. M specifies how large a unit 12331 of memory is accessed. ALIAS specifies an alias set for the 12332 reference. In general two items are in different alias sets if 12333 they cannot reference the same memory address. 12334 12335 The construct `(mem:BLK (scratch))' is considered to alias all 12336 other memories. Thus it may be used as a memory barrier in 12337 epilogue stack deallocation patterns. 12338 12339 `(addressof:M REG)' 12340 This RTX represents a request for the address of register REG. 12341 Its mode is always `Pmode'. If there are any `addressof' 12342 expressions left in the function after CSE, REG is forced into the 12343 stack and the `addressof' expression is replaced with a `plus' 12344 expression for the address of its stack slot. 12345 12346 `(concatM RTX RTX)' 12347 This RTX represents the concatenation of two other RTXs. This is 12348 used for complex values. It should only appear in the RTL 12349 attached to declarations and during RTL generation. It should not 12350 appear in the ordinary insn chain. 12351 12352 `(concatnM [RTX ...])' 12353 This RTX represents the concatenation of all the RTX to make a 12354 single value. Like `concat', this should only appear in 12355 declarations, and not in the insn chain. 12356 12357 12358 File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 12359 12360 12.9 RTL Expressions for Arithmetic 12361 =================================== 12362 12363 Unless otherwise specified, all the operands of arithmetic expressions 12364 must be valid for mode M. An operand is valid for mode M if it has 12365 mode M, or if it is a `const_int' or `const_double' and M is a mode of 12366 class `MODE_INT'. 12367 12368 For commutative binary operations, constants should be placed in the 12369 second operand. 12370 12371 `(plus:M X Y)' 12372 `(ss_plus:M X Y)' 12373 `(us_plus:M X Y)' 12374 These three expressions all represent the sum of the values 12375 represented by X and Y carried out in machine mode M. They differ 12376 in their behavior on overflow of integer modes. `plus' wraps 12377 round modulo the width of M; `ss_plus' saturates at the maximum 12378 signed value representable in M; `us_plus' saturates at the 12379 maximum unsigned value. 12380 12381 `(lo_sum:M X Y)' 12382 This expression represents the sum of X and the low-order bits of 12383 Y. It is used with `high' (*note Constants::) to represent the 12384 typical two-instruction sequence used in RISC machines to 12385 reference a global memory location. 12386 12387 The number of low order bits is machine-dependent but is normally 12388 the number of bits in a `Pmode' item minus the number of bits set 12389 by `high'. 12390 12391 M should be `Pmode'. 12392 12393 `(minus:M X Y)' 12394 `(ss_minus:M X Y)' 12395 `(us_minus:M X Y)' 12396 These three expressions represent the result of subtracting Y from 12397 X, carried out in mode M. Behavior on overflow is the same as for 12398 the three variants of `plus' (see above). 12399 12400 `(compare:M X Y)' 12401 Represents the result of subtracting Y from X for purposes of 12402 comparison. The result is computed without overflow, as if with 12403 infinite precision. 12404 12405 Of course, machines can't really subtract with infinite precision. 12406 However, they can pretend to do so when only the sign of the 12407 result will be used, which is the case when the result is stored 12408 in the condition code. And that is the _only_ way this kind of 12409 expression may validly be used: as a value to be stored in the 12410 condition codes, either `(cc0)' or a register. *Note 12411 Comparisons::. 12412 12413 The mode M is not related to the modes of X and Y, but instead is 12414 the mode of the condition code value. If `(cc0)' is used, it is 12415 `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often 12416 `CCmode'. *Note Condition Code::. If M is `VOIDmode' or 12417 `CCmode', the operation returns sufficient information (in an 12418 unspecified format) so that any comparison operator can be applied 12419 to the result of the `COMPARE' operation. For other modes in 12420 class `MODE_CC', the operation only returns a subset of this 12421 information. 12422 12423 Normally, X and Y must have the same mode. Otherwise, `compare' 12424 is valid only if the mode of X is in class `MODE_INT' and Y is a 12425 `const_int' or `const_double' with mode `VOIDmode'. The mode of X 12426 determines what mode the comparison is to be done in; thus it must 12427 not be `VOIDmode'. 12428 12429 If one of the operands is a constant, it should be placed in the 12430 second operand and the comparison code adjusted as appropriate. 12431 12432 A `compare' specifying two `VOIDmode' constants is not valid since 12433 there is no way to know in what mode the comparison is to be 12434 performed; the comparison must either be folded during the 12435 compilation or the first operand must be loaded into a register 12436 while its mode is still known. 12437 12438 `(neg:M X)' 12439 `(ss_neg:M X)' 12440 `(us_neg:M X)' 12441 These two expressions represent the negation (subtraction from 12442 zero) of the value represented by X, carried out in mode M. They 12443 differ in the behavior on overflow of integer modes. In the case 12444 of `neg', the negation of the operand may be a number not 12445 representable in mode M, in which case it is truncated to M. 12446 `ss_neg' and `us_neg' ensure that an out-of-bounds result 12447 saturates to the maximum or minimum signed or unsigned value. 12448 12449 `(mult:M X Y)' 12450 `(ss_mult:M X Y)' 12451 `(us_mult:M X Y)' 12452 Represents the signed product of the values represented by X and Y 12453 carried out in machine mode M. `ss_mult' and `us_mult' ensure 12454 that an out-of-bounds result saturates to the maximum or minimum 12455 signed or unsigned value. 12456 12457 Some machines support a multiplication that generates a product 12458 wider than the operands. Write the pattern for this as 12459 12460 (mult:M (sign_extend:M X) (sign_extend:M Y)) 12461 12462 where M is wider than the modes of X and Y, which need not be the 12463 same. 12464 12465 For unsigned widening multiplication, use the same idiom, but with 12466 `zero_extend' instead of `sign_extend'. 12467 12468 `(div:M X Y)' 12469 `(ss_div:M X Y)' 12470 Represents the quotient in signed division of X by Y, carried out 12471 in machine mode M. If M is a floating point mode, it represents 12472 the exact quotient; otherwise, the integerized quotient. `ss_div' 12473 ensures that an out-of-bounds result saturates to the maximum or 12474 minimum signed value. 12475 12476 Some machines have division instructions in which the operands and 12477 quotient widths are not all the same; you should represent such 12478 instructions using `truncate' and `sign_extend' as in, 12479 12480 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 12481 12482 `(udiv:M X Y)' 12483 `(us_div:M X Y)' 12484 Like `div' but represents unsigned division. `us_div' ensures 12485 that an out-of-bounds result saturates to the maximum or minimum 12486 unsigned value. 12487 12488 `(mod:M X Y)' 12489 `(umod:M X Y)' 12490 Like `div' and `udiv' but represent the remainder instead of the 12491 quotient. 12492 12493 `(smin:M X Y)' 12494 `(smax:M X Y)' 12495 Represents the smaller (for `smin') or larger (for `smax') of X 12496 and Y, interpreted as signed values in mode M. When used with 12497 floating point, if both operands are zeros, or if either operand 12498 is `NaN', then it is unspecified which of the two operands is 12499 returned as the result. 12500 12501 `(umin:M X Y)' 12502 `(umax:M X Y)' 12503 Like `smin' and `smax', but the values are interpreted as unsigned 12504 integers. 12505 12506 `(not:M X)' 12507 Represents the bitwise complement of the value represented by X, 12508 carried out in mode M, which must be a fixed-point machine mode. 12509 12510 `(and:M X Y)' 12511 Represents the bitwise logical-and of the values represented by X 12512 and Y, carried out in machine mode M, which must be a fixed-point 12513 machine mode. 12514 12515 `(ior:M X Y)' 12516 Represents the bitwise inclusive-or of the values represented by X 12517 and Y, carried out in machine mode M, which must be a fixed-point 12518 mode. 12519 12520 `(xor:M X Y)' 12521 Represents the bitwise exclusive-or of the values represented by X 12522 and Y, carried out in machine mode M, which must be a fixed-point 12523 mode. 12524 12525 `(ashift:M X C)' 12526 `(ss_ashift:M X C)' 12527 `(us_ashift:M X C)' 12528 These three expressions represent the result of arithmetically 12529 shifting X left by C places. They differ in their behavior on 12530 overflow of integer modes. An `ashift' operation is a plain shift 12531 with no special behavior in case of a change in the sign bit; 12532 `ss_ashift' and `us_ashift' saturates to the minimum or maximum 12533 representable value if any of the bits shifted out differs from 12534 the final sign bit. 12535 12536 X have mode M, a fixed-point machine mode. C be a fixed-point 12537 mode or be a constant with mode `VOIDmode'; which mode is 12538 determined by the mode called for in the machine description entry 12539 for the left-shift instruction. For example, on the VAX, the mode 12540 of C is `QImode' regardless of M. 12541 12542 `(lshiftrt:M X C)' 12543 `(ashiftrt:M X C)' 12544 Like `ashift' but for right shift. Unlike the case for left shift, 12545 these two operations are distinct. 12546 12547 `(rotate:M X C)' 12548 `(rotatert:M X C)' 12549 Similar but represent left and right rotate. If C is a constant, 12550 use `rotate'. 12551 12552 `(abs:M X)' 12553 Represents the absolute value of X, computed in mode M. 12554 12555 `(sqrt:M X)' 12556 Represents the square root of X, computed in mode M. Most often M 12557 will be a floating point mode. 12558 12559 `(ffs:M X)' 12560 Represents one plus the index of the least significant 1-bit in X, 12561 represented as an integer of mode M. (The value is zero if X is 12562 zero.) The mode of X need not be M; depending on the target 12563 machine, various mode combinations may be valid. 12564 12565 `(clz:M X)' 12566 Represents the number of leading 0-bits in X, represented as an 12567 integer of mode M, starting at the most significant bit position. 12568 If X is zero, the value is determined by 12569 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 12570 of the few expressions that is not invariant under widening. The 12571 mode of X will usually be an integer mode. 12572 12573 `(ctz:M X)' 12574 Represents the number of trailing 0-bits in X, represented as an 12575 integer of mode M, starting at the least significant bit position. 12576 If X is zero, the value is determined by 12577 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 12578 `ctz(x)' is equivalent to `ffs(X) - 1'. The mode of X will 12579 usually be an integer mode. 12580 12581 `(popcount:M X)' 12582 Represents the number of 1-bits in X, represented as an integer of 12583 mode M. The mode of X will usually be an integer mode. 12584 12585 `(parity:M X)' 12586 Represents the number of 1-bits modulo 2 in X, represented as an 12587 integer of mode M. The mode of X will usually be an integer mode. 12588 12589 `(bswap:M X)' 12590 Represents the value X with the order of bytes reversed, carried 12591 out in mode M, which must be a fixed-point machine mode. 12592 12593 12594 File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 12595 12596 12.10 Comparison Operations 12597 =========================== 12598 12599 Comparison operators test a relation on two operands and are considered 12600 to represent a machine-dependent nonzero value described by, but not 12601 necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation 12602 holds, or zero if it does not, for comparison operators whose results 12603 have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 12604 relation holds, or zero if it does not, for comparison operators that 12605 return floating-point values, and a vector of either 12606 `VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 12607 zeros if it does not, for comparison operators that return vector 12608 results. The mode of the comparison operation is independent of the 12609 mode of the data being compared. If the comparison operation is being 12610 tested (e.g., the first operand of an `if_then_else'), the mode must be 12611 `VOIDmode'. 12612 12613 There are two ways that comparison operations may be used. The 12614 comparison operators may be used to compare the condition codes `(cc0)' 12615 against zero, as in `(eq (cc0) (const_int 0))'. Such a construct 12616 actually refers to the result of the preceding instruction in which the 12617 condition codes were set. The instruction setting the condition code 12618 must be adjacent to the instruction using the condition code; only 12619 `note' insns may separate them. 12620 12621 Alternatively, a comparison operation may directly compare two data 12622 objects. The mode of the comparison is determined by the operands; they 12623 must both be valid for a common machine mode. A comparison with both 12624 operands constant would be invalid as the machine mode could not be 12625 deduced from it, but such a comparison should never exist in RTL due to 12626 constant folding. 12627 12628 In the example above, if `(cc0)' were last set to `(compare X Y)', the 12629 comparison operation is identical to `(eq X Y)'. Usually only one style 12630 of comparisons is supported on a particular machine, but the combine 12631 pass will try to merge the operations to produce the `eq' shown in case 12632 it exists in the context of the particular insn involved. 12633 12634 Inequality comparisons come in two flavors, signed and unsigned. Thus, 12635 there are distinct expression codes `gt' and `gtu' for signed and 12636 unsigned greater-than. These can produce different results for the same 12637 pair of integer values: for example, 1 is signed greater-than -1 but not 12638 unsigned greater-than, because -1 when regarded as unsigned is actually 12639 `0xffffffff' which is greater than 1. 12640 12641 The signed comparisons are also used for floating point values. 12642 Floating point comparisons are distinguished by the machine modes of 12643 the operands. 12644 12645 `(eq:M X Y)' 12646 `STORE_FLAG_VALUE' if the values represented by X and Y are equal, 12647 otherwise 0. 12648 12649 `(ne:M X Y)' 12650 `STORE_FLAG_VALUE' if the values represented by X and Y are not 12651 equal, otherwise 0. 12652 12653 `(gt:M X Y)' 12654 `STORE_FLAG_VALUE' if the X is greater than Y. If they are 12655 fixed-point, the comparison is done in a signed sense. 12656 12657 `(gtu:M X Y)' 12658 Like `gt' but does unsigned comparison, on fixed-point numbers 12659 only. 12660 12661 `(lt:M X Y)' 12662 `(ltu:M X Y)' 12663 Like `gt' and `gtu' but test for "less than". 12664 12665 `(ge:M X Y)' 12666 `(geu:M X Y)' 12667 Like `gt' and `gtu' but test for "greater than or equal". 12668 12669 `(le:M X Y)' 12670 `(leu:M X Y)' 12671 Like `gt' and `gtu' but test for "less than or equal". 12672 12673 `(if_then_else COND THEN ELSE)' 12674 This is not a comparison operation but is listed here because it is 12675 always used in conjunction with a comparison operation. To be 12676 precise, COND is a comparison expression. This expression 12677 represents a choice, according to COND, between the value 12678 represented by THEN and the one represented by ELSE. 12679 12680 On most machines, `if_then_else' expressions are valid only to 12681 express conditional jumps. 12682 12683 `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 12684 Similar to `if_then_else', but more general. Each of TEST1, 12685 TEST2, ... is performed in turn. The result of this expression is 12686 the VALUE corresponding to the first nonzero test, or DEFAULT if 12687 none of the tests are nonzero expressions. 12688 12689 This is currently not valid for instruction patterns and is 12690 supported only for insn attributes. *Note Insn Attributes::. 12691 12692 12693 File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 12694 12695 12.11 Bit-Fields 12696 ================ 12697 12698 Special expression codes exist to represent bit-field instructions. 12699 12700 `(sign_extract:M LOC SIZE POS)' 12701 This represents a reference to a sign-extended bit-field contained 12702 or starting in LOC (a memory or register reference). The bit-field 12703 is SIZE bits wide and starts at bit POS. The compilation option 12704 `BITS_BIG_ENDIAN' says which end of the memory unit POS counts 12705 from. 12706 12707 If LOC is in memory, its mode must be a single-byte integer mode. 12708 If LOC is in a register, the mode to use is specified by the 12709 operand of the `insv' or `extv' pattern (*note Standard Names::) 12710 and is usually a full-word integer mode, which is the default if 12711 none is specified. 12712 12713 The mode of POS is machine-specific and is also specified in the 12714 `insv' or `extv' pattern. 12715 12716 The mode M is the same as the mode that would be used for LOC if 12717 it were a register. 12718 12719 A `sign_extract' can not appear as an lvalue, or part thereof, in 12720 RTL. 12721 12722 `(zero_extract:M LOC SIZE POS)' 12723 Like `sign_extract' but refers to an unsigned or zero-extended 12724 bit-field. The same sequence of bits are extracted, but they are 12725 filled to an entire word with zeros instead of by sign-extension. 12726 12727 Unlike `sign_extract', this type of expressions can be lvalues in 12728 RTL; they may appear on the left side of an assignment, indicating 12729 insertion of a value into the specified bit-field. 12730 12731 12732 File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 12733 12734 12.12 Vector Operations 12735 ======================= 12736 12737 All normal RTL expressions can be used with vector modes; they are 12738 interpreted as operating on each part of the vector independently. 12739 Additionally, there are a few new expressions to describe specific 12740 vector operations. 12741 12742 `(vec_merge:M VEC1 VEC2 ITEMS)' 12743 This describes a merge operation between two vectors. The result 12744 is a vector of mode M; its elements are selected from either VEC1 12745 or VEC2. Which elements are selected is described by ITEMS, which 12746 is a bit mask represented by a `const_int'; a zero bit indicates 12747 the corresponding element in the result vector is taken from VEC2 12748 while a set bit indicates it is taken from VEC1. 12749 12750 `(vec_select:M VEC1 SELECTION)' 12751 This describes an operation that selects parts of a vector. VEC1 12752 is the source vector, SELECTION is a `parallel' that contains a 12753 `const_int' for each of the subparts of the result vector, giving 12754 the number of the source subpart that should be stored into it. 12755 12756 `(vec_concat:M VEC1 VEC2)' 12757 Describes a vector concat operation. The result is a 12758 concatenation of the vectors VEC1 and VEC2; its length is the sum 12759 of the lengths of the two inputs. 12760 12761 `(vec_duplicate:M VEC)' 12762 This operation converts a small vector into a larger one by 12763 duplicating the input values. The output vector mode must have 12764 the same submodes as the input vector mode, and the number of 12765 output parts must be an integer multiple of the number of input 12766 parts. 12767 12768 12769 12770 File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 12771 12772 12.13 Conversions 12773 ================= 12774 12775 All conversions between machine modes must be represented by explicit 12776 conversion operations. For example, an expression which is the sum of 12777 a byte and a full word cannot be written as `(plus:SI (reg:QI 34) 12778 (reg:SI 80))' because the `plus' operation requires two operands of the 12779 same machine mode. Therefore, the byte-sized operand is enclosed in a 12780 conversion operation, as in 12781 12782 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 12783 12784 The conversion operation is not a mere placeholder, because there may 12785 be more than one way of converting from a given starting mode to the 12786 desired final mode. The conversion operation code says how to do it. 12787 12788 For all conversion operations, X must not be `VOIDmode' because the 12789 mode in which to do the conversion would not be known. The conversion 12790 must either be done at compile-time or X must be placed into a register. 12791 12792 `(sign_extend:M X)' 12793 Represents the result of sign-extending the value X to machine 12794 mode M. M must be a fixed-point mode and X a fixed-point value of 12795 a mode narrower than M. 12796 12797 `(zero_extend:M X)' 12798 Represents the result of zero-extending the value X to machine 12799 mode M. M must be a fixed-point mode and X a fixed-point value of 12800 a mode narrower than M. 12801 12802 `(float_extend:M X)' 12803 Represents the result of extending the value X to machine mode M. 12804 M must be a floating point mode and X a floating point value of a 12805 mode narrower than M. 12806 12807 `(truncate:M X)' 12808 Represents the result of truncating the value X to machine mode M. 12809 M must be a fixed-point mode and X a fixed-point value of a mode 12810 wider than M. 12811 12812 `(ss_truncate:M X)' 12813 Represents the result of truncating the value X to machine mode M, 12814 using signed saturation in the case of overflow. Both M and the 12815 mode of X must be fixed-point modes. 12816 12817 `(us_truncate:M X)' 12818 Represents the result of truncating the value X to machine mode M, 12819 using unsigned saturation in the case of overflow. Both M and the 12820 mode of X must be fixed-point modes. 12821 12822 `(float_truncate:M X)' 12823 Represents the result of truncating the value X to machine mode M. 12824 M must be a floating point mode and X a floating point value of a 12825 mode wider than M. 12826 12827 `(float:M X)' 12828 Represents the result of converting fixed point value X, regarded 12829 as signed, to floating point mode M. 12830 12831 `(unsigned_float:M X)' 12832 Represents the result of converting fixed point value X, regarded 12833 as unsigned, to floating point mode M. 12834 12835 `(fix:M X)' 12836 When M is a fixed point mode, represents the result of converting 12837 floating point value X to mode M, regarded as signed. How 12838 rounding is done is not specified, so this operation may be used 12839 validly in compiling C code only for integer-valued operands. 12840 12841 `(unsigned_fix:M X)' 12842 Represents the result of converting floating point value X to 12843 fixed point mode M, regarded as unsigned. How rounding is done is 12844 not specified. 12845 12846 `(fix:M X)' 12847 When M is a floating point mode, represents the result of 12848 converting floating point value X (valid for mode M) to an 12849 integer, still represented in floating point mode M, by rounding 12850 towards zero. 12851 12852 `(fract_convert:M X)' 12853 Represents the result of converting fixed-point value X to 12854 fixed-point mode M, signed integer value X to fixed-point mode M, 12855 floating-point value X to fixed-point mode M, fixed-point value X 12856 to integer mode M regarded as signed, or fixed-point value X to 12857 floating-point mode M. When overflows or underflows happen, the 12858 results are undefined. 12859 12860 `(sat_fract:M X)' 12861 Represents the result of converting fixed-point value X to 12862 fixed-point mode M, signed integer value X to fixed-point mode M, 12863 or floating-point value X to fixed-point mode M. When overflows 12864 or underflows happen, the results are saturated to the maximum or 12865 the minimum. 12866 12867 `(unsigned_fract_convert:M X)' 12868 Represents the result of converting fixed-point value X to integer 12869 mode M regarded as unsigned, or unsigned integer value X to 12870 fixed-point mode M. When overflows or underflows happen, the 12871 results are undefined. 12872 12873 `(unsigned_sat_fract:M X)' 12874 Represents the result of converting unsigned integer value X to 12875 fixed-point mode M. When overflows or underflows happen, the 12876 results are saturated to the maximum or the minimum. 12877 12878 12879 File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 12880 12881 12.14 Declarations 12882 ================== 12883 12884 Declaration expression codes do not represent arithmetic operations but 12885 rather state assertions about their operands. 12886 12887 `(strict_low_part (subreg:M (reg:N R) 0))' 12888 This expression code is used in only one context: as the 12889 destination operand of a `set' expression. In addition, the 12890 operand of this expression must be a non-paradoxical `subreg' 12891 expression. 12892 12893 The presence of `strict_low_part' says that the part of the 12894 register which is meaningful in mode N, but is not part of mode M, 12895 is not to be altered. Normally, an assignment to such a subreg is 12896 allowed to have undefined effects on the rest of the register when 12897 M is less than a word. 12898 12899 12900 File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 12901 12902 12.15 Side Effect Expressions 12903 ============================= 12904 12905 The expression codes described so far represent values, not actions. 12906 But machine instructions never produce values; they are meaningful only 12907 for their side effects on the state of the machine. Special expression 12908 codes are used to represent side effects. 12909 12910 The body of an instruction is always one of these side effect codes; 12911 the codes described above, which represent values, appear only as the 12912 operands of these. 12913 12914 `(set LVAL X)' 12915 Represents the action of storing the value of X into the place 12916 represented by LVAL. LVAL must be an expression representing a 12917 place that can be stored in: `reg' (or `subreg', `strict_low_part' 12918 or `zero_extract'), `mem', `pc', `parallel', or `cc0'. 12919 12920 If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then 12921 X must be valid for that mode. 12922 12923 If LVAL is a `reg' whose machine mode is less than the full width 12924 of the register, then it means that the part of the register 12925 specified by the machine mode is given the specified value and the 12926 rest of the register receives an undefined value. Likewise, if 12927 LVAL is a `subreg' whose machine mode is narrower than the mode of 12928 the register, the rest of the register can be changed in an 12929 undefined way. 12930 12931 If LVAL is a `strict_low_part' of a subreg, then the part of the 12932 register specified by the machine mode of the `subreg' is given 12933 the value X and the rest of the register is not changed. 12934 12935 If LVAL is a `zero_extract', then the referenced part of the 12936 bit-field (a memory or register reference) specified by the 12937 `zero_extract' is given the value X and the rest of the bit-field 12938 is not changed. Note that `sign_extract' can not appear in LVAL. 12939 12940 If LVAL is `(cc0)', it has no machine mode, and X may be either a 12941 `compare' expression or a value that may have any mode. The 12942 latter case represents a "test" instruction. The expression `(set 12943 (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N) 12944 (const_int 0)))'. Use the former expression to save space during 12945 the compilation. 12946 12947 If LVAL is a `parallel', it is used to represent the case of a 12948 function returning a structure in multiple registers. Each element 12949 of the `parallel' is an `expr_list' whose first operand is a `reg' 12950 and whose second operand is a `const_int' representing the offset 12951 (in bytes) into the structure at which the data in that register 12952 corresponds. The first element may be null to indicate that the 12953 structure is also passed partly in memory. 12954 12955 If LVAL is `(pc)', we have a jump instruction, and the 12956 possibilities for X are very limited. It may be a `label_ref' 12957 expression (unconditional jump). It may be an `if_then_else' 12958 (conditional jump), in which case either the second or the third 12959 operand must be `(pc)' (for the case which does not jump) and the 12960 other of the two must be a `label_ref' (for the case which does 12961 jump). X may also be a `mem' or `(plus:SI (pc) Y)', where Y may 12962 be a `reg' or a `mem'; these unusual patterns are used to 12963 represent jumps through branch tables. 12964 12965 If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not 12966 be `VOIDmode' and the mode of X must be valid for the mode of LVAL. 12967 12968 LVAL is customarily accessed with the `SET_DEST' macro and X with 12969 the `SET_SRC' macro. 12970 12971 `(return)' 12972 As the sole expression in a pattern, represents a return from the 12973 current function, on machines where this can be done with one 12974 instruction, such as VAXen. On machines where a multi-instruction 12975 "epilogue" must be executed in order to return from the function, 12976 returning is done by jumping to a label which precedes the 12977 epilogue, and the `return' expression code is never used. 12978 12979 Inside an `if_then_else' expression, represents the value to be 12980 placed in `pc' to return to the caller. 12981 12982 Note that an insn pattern of `(return)' is logically equivalent to 12983 `(set (pc) (return))', but the latter form is never used. 12984 12985 `(call FUNCTION NARGS)' 12986 Represents a function call. FUNCTION is a `mem' expression whose 12987 address is the address of the function to be called. NARGS is an 12988 expression which can be used for two purposes: on some machines it 12989 represents the number of bytes of stack argument; on others, it 12990 represents the number of argument registers. 12991 12992 Each machine has a standard machine mode which FUNCTION must have. 12993 The machine description defines macro `FUNCTION_MODE' to expand 12994 into the requisite mode name. The purpose of this mode is to 12995 specify what kind of addressing is allowed, on machines where the 12996 allowed kinds of addressing depend on the machine mode being 12997 addressed. 12998 12999 `(clobber X)' 13000 Represents the storing or possible storing of an unpredictable, 13001 undescribed value into X, which must be a `reg', `scratch', 13002 `parallel' or `mem' expression. 13003 13004 One place this is used is in string instructions that store 13005 standard values into particular hard registers. It may not be 13006 worth the trouble to describe the values that are stored, but it 13007 is essential to inform the compiler that the registers will be 13008 altered, lest it attempt to keep data in them across the string 13009 instruction. 13010 13011 If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it 13012 means that all memory locations must be presumed clobbered. If X 13013 is a `parallel', it has the same meaning as a `parallel' in a 13014 `set' expression. 13015 13016 Note that the machine description classifies certain hard 13017 registers as "call-clobbered". All function call instructions are 13018 assumed by default to clobber these registers, so there is no need 13019 to use `clobber' expressions to indicate this fact. Also, each 13020 function call is assumed to have the potential to alter any memory 13021 location, unless the function is declared `const'. 13022 13023 If the last group of expressions in a `parallel' are each a 13024 `clobber' expression whose arguments are `reg' or `match_scratch' 13025 (*note RTL Template::) expressions, the combiner phase can add the 13026 appropriate `clobber' expressions to an insn it has constructed 13027 when doing so will cause a pattern to be matched. 13028 13029 This feature can be used, for example, on a machine that whose 13030 multiply and add instructions don't use an MQ register but which 13031 has an add-accumulate instruction that does clobber the MQ 13032 register. Similarly, a combined instruction might require a 13033 temporary register while the constituent instructions might not. 13034 13035 When a `clobber' expression for a register appears inside a 13036 `parallel' with other side effects, the register allocator 13037 guarantees that the register is unoccupied both before and after 13038 that insn. However, the reload phase may allocate a register used 13039 for one of the inputs unless the `&' constraint is specified for 13040 the selected alternative (*note Modifiers::). You can clobber 13041 either a specific hard register, a pseudo register, or a `scratch' 13042 expression; in the latter two cases, GCC will allocate a hard 13043 register that is available there for use as a temporary. 13044 13045 For instructions that require a temporary register, you should use 13046 `scratch' instead of a pseudo-register because this will allow the 13047 combiner phase to add the `clobber' when required. You do this by 13048 coding (`clobber' (`match_scratch' ...)). If you do clobber a 13049 pseudo register, use one which appears nowhere else--generate a 13050 new one each time. Otherwise, you may confuse CSE. 13051 13052 There is one other known use for clobbering a pseudo register in a 13053 `parallel': when one of the input operands of the insn is also 13054 clobbered by the insn. In this case, using the same pseudo 13055 register in the clobber and elsewhere in the insn produces the 13056 expected results. 13057 13058 `(use X)' 13059 Represents the use of the value of X. It indicates that the value 13060 in X at this point in the program is needed, even though it may 13061 not be apparent why this is so. Therefore, the compiler will not 13062 attempt to delete previous instructions whose only effect is to 13063 store a value in X. X must be a `reg' expression. 13064 13065 In some situations, it may be tempting to add a `use' of a 13066 register in a `parallel' to describe a situation where the value 13067 of a special register will modify the behavior of the instruction. 13068 An hypothetical example might be a pattern for an addition that can 13069 either wrap around or use saturating addition depending on the 13070 value of a special control register: 13071 13072 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 13073 (reg:SI 4)] 0)) 13074 (use (reg:SI 1))]) 13075 13076 This will not work, several of the optimizers only look at 13077 expressions locally; it is very likely that if you have multiple 13078 insns with identical inputs to the `unspec', they will be 13079 optimized away even if register 1 changes in between. 13080 13081 This means that `use' can _only_ be used to describe that the 13082 register is live. You should think twice before adding `use' 13083 statements, more often you will want to use `unspec' instead. The 13084 `use' RTX is most commonly useful to describe that a fixed 13085 register is implicitly used in an insn. It is also safe to use in 13086 patterns where the compiler knows for other reasons that the result 13087 of the whole pattern is variable, such as `movmemM' or `call' 13088 patterns. 13089 13090 During the reload phase, an insn that has a `use' as pattern can 13091 carry a reg_equal note. These `use' insns will be deleted before 13092 the reload phase exits. 13093 13094 During the delayed branch scheduling phase, X may be an insn. 13095 This indicates that X previously was located at this place in the 13096 code and its data dependencies need to be taken into account. 13097 These `use' insns will be deleted before the delayed branch 13098 scheduling phase exits. 13099 13100 `(parallel [X0 X1 ...])' 13101 Represents several side effects performed in parallel. The square 13102 brackets stand for a vector; the operand of `parallel' is a vector 13103 of expressions. X0, X1 and so on are individual side effect 13104 expressions--expressions of code `set', `call', `return', 13105 `clobber' or `use'. 13106 13107 "In parallel" means that first all the values used in the 13108 individual side-effects are computed, and second all the actual 13109 side-effects are performed. For example, 13110 13111 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 13112 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 13113 13114 says unambiguously that the values of hard register 1 and the 13115 memory location addressed by it are interchanged. In both places 13116 where `(reg:SI 1)' appears as a memory address it refers to the 13117 value in register 1 _before_ the execution of the insn. 13118 13119 It follows that it is _incorrect_ to use `parallel' and expect the 13120 result of one `set' to be available for the next one. For 13121 example, people sometimes attempt to represent a jump-if-zero 13122 instruction this way: 13123 13124 (parallel [(set (cc0) (reg:SI 34)) 13125 (set (pc) (if_then_else 13126 (eq (cc0) (const_int 0)) 13127 (label_ref ...) 13128 (pc)))]) 13129 13130 But this is incorrect, because it says that the jump condition 13131 depends on the condition code value _before_ this instruction, not 13132 on the new value that is set by this instruction. 13133 13134 Peephole optimization, which takes place together with final 13135 assembly code output, can produce insns whose patterns consist of 13136 a `parallel' whose elements are the operands needed to output the 13137 resulting assembler code--often `reg', `mem' or constant 13138 expressions. This would not be well-formed RTL at any other stage 13139 in compilation, but it is ok then because no further optimization 13140 remains to be done. However, the definition of the macro 13141 `NOTICE_UPDATE_CC', if any, must deal with such insns if you 13142 define any peephole optimizations. 13143 13144 `(cond_exec [COND EXPR])' 13145 Represents a conditionally executed expression. The EXPR is 13146 executed only if the COND is nonzero. The COND expression must 13147 not have side-effects, but the EXPR may very well have 13148 side-effects. 13149 13150 `(sequence [INSNS ...])' 13151 Represents a sequence of insns. Each of the INSNS that appears in 13152 the vector is suitable for appearing in the chain of insns, so it 13153 must be an `insn', `jump_insn', `call_insn', `code_label', 13154 `barrier' or `note'. 13155 13156 A `sequence' RTX is never placed in an actual insn during RTL 13157 generation. It represents the sequence of insns that result from a 13158 `define_expand' _before_ those insns are passed to `emit_insn' to 13159 insert them in the chain of insns. When actually inserted, the 13160 individual sub-insns are separated out and the `sequence' is 13161 forgotten. 13162 13163 After delay-slot scheduling is completed, an insn and all the 13164 insns that reside in its delay slots are grouped together into a 13165 `sequence'. The insn requiring the delay slot is the first insn 13166 in the vector; subsequent insns are to be placed in the delay slot. 13167 13168 `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 13169 indicate that a branch insn should be used that will conditionally 13170 annul the effect of the insns in the delay slots. In such a case, 13171 `INSN_FROM_TARGET_P' indicates that the insn is from the target of 13172 the branch and should be executed only if the branch is taken; 13173 otherwise the insn should be executed only if the branch is not 13174 taken. *Note Delay Slots::. 13175 13176 These expression codes appear in place of a side effect, as the body of 13177 an insn, though strictly speaking they do not always describe side 13178 effects as such: 13179 13180 `(asm_input S)' 13181 Represents literal assembler code as described by the string S. 13182 13183 `(unspec [OPERANDS ...] INDEX)' 13184 `(unspec_volatile [OPERANDS ...] INDEX)' 13185 Represents a machine-specific operation on OPERANDS. INDEX 13186 selects between multiple machine-specific operations. 13187 `unspec_volatile' is used for volatile operations and operations 13188 that may trap; `unspec' is used for other operations. 13189 13190 These codes may appear inside a `pattern' of an insn, inside a 13191 `parallel', or inside an expression. 13192 13193 `(addr_vec:M [LR0 LR1 ...])' 13194 Represents a table of jump addresses. The vector elements LR0, 13195 etc., are `label_ref' expressions. The mode M specifies how much 13196 space is given to each address; normally M would be `Pmode'. 13197 13198 `(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 13199 Represents a table of jump addresses expressed as offsets from 13200 BASE. The vector elements LR0, etc., are `label_ref' expressions 13201 and so is BASE. The mode M specifies how much space is given to 13202 each address-difference. MIN and MAX are set up by branch 13203 shortening and hold a label with a minimum and a maximum address, 13204 respectively. FLAGS indicates the relative position of BASE, MIN 13205 and MAX to the containing insn and of MIN and MAX to BASE. See 13206 rtl.def for details. 13207 13208 `(prefetch:M ADDR RW LOCALITY)' 13209 Represents prefetch of memory at address ADDR. Operand RW is 1 if 13210 the prefetch is for data to be written, 0 otherwise; targets that 13211 do not support write prefetches should treat this as a normal 13212 prefetch. Operand LOCALITY specifies the amount of temporal 13213 locality; 0 if there is none or 1, 2, or 3 for increasing levels 13214 of temporal locality; targets that do not support locality hints 13215 should ignore this. 13216 13217 This insn is used to minimize cache-miss latency by moving data 13218 into a cache before it is accessed. It should use only 13219 non-faulting data prefetch instructions. 13220 13221 13222 File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 13223 13224 12.16 Embedded Side-Effects on Addresses 13225 ======================================== 13226 13227 Six special side-effect expression codes appear as memory addresses. 13228 13229 `(pre_dec:M X)' 13230 Represents the side effect of decrementing X by a standard amount 13231 and represents also the value that X has after being decremented. 13232 X must be a `reg' or `mem', but most machines allow only a `reg'. 13233 M must be the machine mode for pointers on the machine in use. 13234 The amount X is decremented by is the length in bytes of the 13235 machine mode of the containing memory reference of which this 13236 expression serves as the address. Here is an example of its use: 13237 13238 (mem:DF (pre_dec:SI (reg:SI 39))) 13239 13240 This says to decrement pseudo register 39 by the length of a 13241 `DFmode' value and use the result to address a `DFmode' value. 13242 13243 `(pre_inc:M X)' 13244 Similar, but specifies incrementing X instead of decrementing it. 13245 13246 `(post_dec:M X)' 13247 Represents the same side effect as `pre_dec' but a different 13248 value. The value represented here is the value X has before being 13249 decremented. 13250 13251 `(post_inc:M X)' 13252 Similar, but specifies incrementing X instead of decrementing it. 13253 13254 `(post_modify:M X Y)' 13255 Represents the side effect of setting X to Y and represents X 13256 before X is modified. X must be a `reg' or `mem', but most 13257 machines allow only a `reg'. M must be the machine mode for 13258 pointers on the machine in use. 13259 13260 The expression Y must be one of three forms: 13261 `(plus:M X Z)', `(minus:M X Z)', or `(plus:M X I)', 13262 where Z is an index register and I is a constant. 13263 13264 Here is an example of its use: 13265 13266 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 13267 (reg:SI 48)))) 13268 13269 This says to modify pseudo register 42 by adding the contents of 13270 pseudo register 48 to it, after the use of what ever 42 points to. 13271 13272 `(pre_modify:M X EXPR)' 13273 Similar except side effects happen before the use. 13274 13275 These embedded side effect expressions must be used with care. 13276 Instruction patterns may not use them. Until the `flow' pass of the 13277 compiler, they may occur only to represent pushes onto the stack. The 13278 `flow' pass finds cases where registers are incremented or decremented 13279 in one instruction and used as an address shortly before or after; 13280 these cases are then transformed to use pre- or post-increment or 13281 -decrement. 13282 13283 If a register used as the operand of these expressions is used in 13284 another address in an insn, the original value of the register is used. 13285 Uses of the register outside of an address are not permitted within the 13286 same insn as a use in an embedded side effect expression because such 13287 insns behave differently on different machines and hence must be treated 13288 as ambiguous and disallowed. 13289 13290 An instruction that can be represented with an embedded side effect 13291 could also be represented using `parallel' containing an additional 13292 `set' to describe how the address register is altered. This is not 13293 done because machines that allow these operations at all typically 13294 allow them wherever a memory address is called for. Describing them as 13295 additional parallel stores would require doubling the number of entries 13296 in the machine description. 13297 13298 13299 File: gccint.info, Node: Assembler, Next: Insns, Prev: Incdec, Up: RTL 13300 13301 12.17 Assembler Instructions as Expressions 13302 =========================================== 13303 13304 The RTX code `asm_operands' represents a value produced by a 13305 user-specified assembler instruction. It is used to represent an `asm' 13306 statement with arguments. An `asm' statement with a single output 13307 operand, like this: 13308 13309 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 13310 13311 is represented using a single `asm_operands' RTX which represents the 13312 value that is stored in `outputvar': 13313 13314 (set RTX-FOR-OUTPUTVAR 13315 (asm_operands "foo %1,%2,%0" "a" 0 13316 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 13317 [(asm_input:M1 "g") 13318 (asm_input:M2 "di")])) 13319 13320 Here the operands of the `asm_operands' RTX are the assembler template 13321 string, the output-operand's constraint, the index-number of the output 13322 operand among the output operands specified, a vector of input operand 13323 RTX's, and a vector of input-operand modes and constraints. The mode 13324 M1 is the mode of the sum `x+y'; M2 is that of `*z'. 13325 13326 When an `asm' statement has multiple output values, its insn has 13327 several such `set' RTX's inside of a `parallel'. Each `set' contains a 13328 `asm_operands'; all of these share the same assembler template and 13329 vectors, but each contains the constraint for the respective output 13330 operand. They are also distinguished by the output-operand index 13331 number, which is 0, 1, ... for successive output operands. 13332 13333 13334 File: gccint.info, Node: Insns, Next: Calls, Prev: Assembler, Up: RTL 13335 13336 12.18 Insns 13337 =========== 13338 13339 The RTL representation of the code for a function is a doubly-linked 13340 chain of objects called "insns". Insns are expressions with special 13341 codes that are used for no other purpose. Some insns are actual 13342 instructions; others represent dispatch tables for `switch' statements; 13343 others represent labels to jump to or various sorts of declarative 13344 information. 13345 13346 In addition to its own specific data, each insn must have a unique 13347 id-number that distinguishes it from all other insns in the current 13348 function (after delayed branch scheduling, copies of an insn with the 13349 same id-number may be present in multiple places in a function, but 13350 these copies will always be identical and will only appear inside a 13351 `sequence'), and chain pointers to the preceding and following insns. 13352 These three fields occupy the same position in every insn, independent 13353 of the expression code of the insn. They could be accessed with `XEXP' 13354 and `XINT', but instead three special macros are always used: 13355 13356 `INSN_UID (I)' 13357 Accesses the unique id of insn I. 13358 13359 `PREV_INSN (I)' 13360 Accesses the chain pointer to the insn preceding I. If I is the 13361 first insn, this is a null pointer. 13362 13363 `NEXT_INSN (I)' 13364 Accesses the chain pointer to the insn following I. If I is the 13365 last insn, this is a null pointer. 13366 13367 The first insn in the chain is obtained by calling `get_insns'; the 13368 last insn is the result of calling `get_last_insn'. Within the chain 13369 delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must 13370 always correspond: if INSN is not the first insn, 13371 13372 NEXT_INSN (PREV_INSN (INSN)) == INSN 13373 13374 is always true and if INSN is not the last insn, 13375 13376 PREV_INSN (NEXT_INSN (INSN)) == INSN 13377 13378 is always true. 13379 13380 After delay slot scheduling, some of the insns in the chain might be 13381 `sequence' expressions, which contain a vector of insns. The value of 13382 `NEXT_INSN' in all but the last of these insns is the next insn in the 13383 vector; the value of `NEXT_INSN' of the last insn in the vector is the 13384 same as the value of `NEXT_INSN' for the `sequence' in which it is 13385 contained. Similar rules apply for `PREV_INSN'. 13386 13387 This means that the above invariants are not necessarily true for insns 13388 inside `sequence' expressions. Specifically, if INSN is the first insn 13389 in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing 13390 the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN 13391 (INSN))' if INSN is the last insn in the `sequence' expression. You 13392 can use these expressions to find the containing `sequence' expression. 13393 13394 Every insn has one of the following six expression codes: 13395 13396 `insn' 13397 The expression code `insn' is used for instructions that do not 13398 jump and do not do function calls. `sequence' expressions are 13399 always contained in insns with code `insn' even if one of those 13400 insns should jump or do function calls. 13401 13402 Insns with code `insn' have four additional fields beyond the three 13403 mandatory ones listed above. These four are described in a table 13404 below. 13405 13406 `jump_insn' 13407 The expression code `jump_insn' is used for instructions that may 13408 jump (or, more generally, may contain `label_ref' expressions to 13409 which `pc' can be set in that instruction). If there is an 13410 instruction to return from the current function, it is recorded as 13411 a `jump_insn'. 13412 13413 `jump_insn' insns have the same extra fields as `insn' insns, 13414 accessed in the same way and in addition contain a field 13415 `JUMP_LABEL' which is defined once jump optimization has completed. 13416 13417 For simple conditional and unconditional jumps, this field contains 13418 the `code_label' to which this insn will (possibly conditionally) 13419 branch. In a more complex jump, `JUMP_LABEL' records one of the 13420 labels that the insn refers to; other jump target labels are 13421 recorded as `REG_LABEL_TARGET' notes. The exception is `addr_vec' 13422 and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only 13423 way to find the labels is to scan the entire body of the insn. 13424 13425 Return insns count as jumps, but since they do not refer to any 13426 labels, their `JUMP_LABEL' is `NULL_RTX'. 13427 13428 `call_insn' 13429 The expression code `call_insn' is used for instructions that may 13430 do function calls. It is important to distinguish these 13431 instructions because they imply that certain registers and memory 13432 locations may be altered unpredictably. 13433 13434 `call_insn' insns have the same extra fields as `insn' insns, 13435 accessed in the same way and in addition contain a field 13436 `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 13437 `expr_list' expressions) containing `use' and `clobber' 13438 expressions that denote hard registers and `MEM's used or 13439 clobbered by the called function. 13440 13441 A `MEM' generally points to a stack slots in which arguments passed 13442 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 13443 Register Arguments.) are stored. If the argument is caller-copied 13444 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 13445 will be mentioned in `CLOBBER' and `USE' entries; if it's 13446 callee-copied, only a `USE' will appear, and the `MEM' may point 13447 to addresses that are not stack slots. 13448 13449 `CLOBBER'ed registers in this list augment registers specified in 13450 `CALL_USED_REGISTERS' (*note Register Basics::). 13451 13452 `code_label' 13453 A `code_label' insn represents a label that a jump insn can jump 13454 to. It contains two special fields of data in addition to the 13455 three standard ones. `CODE_LABEL_NUMBER' is used to hold the 13456 "label number", a number that identifies this label uniquely among 13457 all the labels in the compilation (not just in the current 13458 function). Ultimately, the label is represented in the assembler 13459 output as an assembler label, usually of the form `LN' where N is 13460 the label number. 13461 13462 When a `code_label' appears in an RTL expression, it normally 13463 appears within a `label_ref' which represents the address of the 13464 label, as a number. 13465 13466 Besides as a `code_label', a label can also be represented as a 13467 `note' of type `NOTE_INSN_DELETED_LABEL'. 13468 13469 The field `LABEL_NUSES' is only defined once the jump optimization 13470 phase is completed. It contains the number of times this label is 13471 referenced in the current function. 13472 13473 The field `LABEL_KIND' differentiates four different types of 13474 labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY', 13475 `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'. The only labels 13476 that do not have type `LABEL_NORMAL' are "alternate entry points" 13477 to the current function. These may be static (visible only in the 13478 containing translation unit), global (exposed to all translation 13479 units), or weak (global, but can be overridden by another symbol 13480 with the same name). 13481 13482 Much of the compiler treats all four kinds of label identically. 13483 Some of it needs to know whether or not a label is an alternate 13484 entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is 13485 provided. It is equivalent to testing whether `LABEL_KIND (label) 13486 == LABEL_NORMAL'. The only place that cares about the distinction 13487 between static, global, and weak alternate entry points, besides 13488 the front-end code that creates them, is the function 13489 `output_alternate_entry_point', in `final.c'. 13490 13491 To set the kind of a label, use the `SET_LABEL_KIND' macro. 13492 13493 `barrier' 13494 Barriers are placed in the instruction stream when control cannot 13495 flow past them. They are placed after unconditional jump 13496 instructions to indicate that the jumps are unconditional and 13497 after calls to `volatile' functions, which do not return (e.g., 13498 `exit'). They contain no information beyond the three standard 13499 fields. 13500 13501 `note' 13502 `note' insns are used to represent additional debugging and 13503 declarative information. They contain two nonstandard fields, an 13504 integer which is accessed with the macro `NOTE_LINE_NUMBER' and a 13505 string accessed with `NOTE_SOURCE_FILE'. 13506 13507 If `NOTE_LINE_NUMBER' is positive, the note represents the 13508 position of a source line and `NOTE_SOURCE_FILE' is the source 13509 file name that the line came from. These notes control generation 13510 of line number data in the assembler output. 13511 13512 Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a 13513 code with one of the following values (and `NOTE_SOURCE_FILE' must 13514 contain a null pointer): 13515 13516 `NOTE_INSN_DELETED' 13517 Such a note is completely ignorable. Some passes of the 13518 compiler delete insns by altering them into notes of this 13519 kind. 13520 13521 `NOTE_INSN_DELETED_LABEL' 13522 This marks what used to be a `code_label', but was not used 13523 for other purposes than taking its address and was 13524 transformed to mark that no code jumps to it. 13525 13526 `NOTE_INSN_BLOCK_BEG' 13527 `NOTE_INSN_BLOCK_END' 13528 These types of notes indicate the position of the beginning 13529 and end of a level of scoping of variable names. They 13530 control the output of debugging information. 13531 13532 `NOTE_INSN_EH_REGION_BEG' 13533 `NOTE_INSN_EH_REGION_END' 13534 These types of notes indicate the position of the beginning 13535 and end of a level of scoping for exception handling. 13536 `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note' 13537 of type `NOTE_INSN_DELETED_LABEL' is associated with the 13538 given region. 13539 13540 `NOTE_INSN_LOOP_BEG' 13541 `NOTE_INSN_LOOP_END' 13542 These types of notes indicate the position of the beginning 13543 and end of a `while' or `for' loop. They enable the loop 13544 optimizer to find loops quickly. 13545 13546 `NOTE_INSN_LOOP_CONT' 13547 Appears at the place in a loop that `continue' statements 13548 jump to. 13549 13550 `NOTE_INSN_LOOP_VTOP' 13551 This note indicates the place in a loop where the exit test 13552 begins for those loops in which the exit test has been 13553 duplicated. This position becomes another virtual start of 13554 the loop when considering loop invariants. 13555 13556 `NOTE_INSN_FUNCTION_BEG' 13557 Appears at the start of the function body, after the function 13558 prologue. 13559 13560 13561 These codes are printed symbolically when they appear in debugging 13562 dumps. 13563 13564 The machine mode of an insn is normally `VOIDmode', but some phases 13565 use the mode for various purposes. 13566 13567 The common subexpression elimination pass sets the mode of an insn to 13568 `QImode' when it is the first insn in a block that has already been 13569 processed. 13570 13571 The second Haifa scheduling pass, for targets that can multiple issue, 13572 sets the mode of an insn to `TImode' when it is believed that the 13573 instruction begins an issue group. That is, when the instruction 13574 cannot issue simultaneously with the previous. This may be relied on 13575 by later passes, in particular machine-dependent reorg. 13576 13577 Here is a table of the extra fields of `insn', `jump_insn' and 13578 `call_insn' insns: 13579 13580 `PATTERN (I)' 13581 An expression for the side effect performed by this insn. This 13582 must be one of the following codes: `set', `call', `use', 13583 `clobber', `return', `asm_input', `asm_output', `addr_vec', 13584 `addr_diff_vec', `trap_if', `unspec', `unspec_volatile', 13585 `parallel', `cond_exec', or `sequence'. If it is a `parallel', 13586 each element of the `parallel' must be one these codes, except that 13587 `parallel' expressions cannot be nested and `addr_vec' and 13588 `addr_diff_vec' are not permitted inside a `parallel' expression. 13589 13590 `INSN_CODE (I)' 13591 An integer that says which pattern in the machine description 13592 matches this insn, or -1 if the matching has not yet been 13593 attempted. 13594 13595 Such matching is never attempted and this field remains -1 on an 13596 insn whose pattern consists of a single `use', `clobber', 13597 `asm_input', `addr_vec' or `addr_diff_vec' expression. 13598 13599 Matching is also never attempted on insns that result from an `asm' 13600 statement. These contain at least one `asm_operands' expression. 13601 The function `asm_noperands' returns a non-negative value for such 13602 insns. 13603 13604 In the debugging output, this field is printed as a number 13605 followed by a symbolic representation that locates the pattern in 13606 the `md' file as some small positive or negative offset from a 13607 named pattern. 13608 13609 `LOG_LINKS (I)' 13610 A list (chain of `insn_list' expressions) giving information about 13611 dependencies between instructions within a basic block. Neither a 13612 jump nor a label may come between the related insns. These are 13613 only used by the schedulers and by combine. This is a deprecated 13614 data structure. Def-use and use-def chains are now preferred. 13615 13616 `REG_NOTES (I)' 13617 A list (chain of `expr_list' and `insn_list' expressions) giving 13618 miscellaneous information about the insn. It is often information 13619 pertaining to the registers used in this insn. 13620 13621 The `LOG_LINKS' field of an insn is a chain of `insn_list' 13622 expressions. Each of these has two operands: the first is an insn, and 13623 the second is another `insn_list' expression (the next one in the 13624 chain). The last `insn_list' in the chain has a null pointer as second 13625 operand. The significant thing about the chain is which insns appear 13626 in it (as first operands of `insn_list' expressions). Their order is 13627 not significant. 13628 13629 This list is originally set up by the flow analysis pass; it is a null 13630 pointer until then. Flow only adds links for those data dependencies 13631 which can be used for instruction combination. For each insn, the flow 13632 analysis pass adds a link to insns which store into registers values 13633 that are used for the first time in this insn. 13634 13635 The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS' 13636 field but it includes `expr_list' expressions in addition to 13637 `insn_list' expressions. There are several kinds of register notes, 13638 which are distinguished by the machine mode, which in a register note 13639 is really understood as being an `enum reg_note'. The first operand OP 13640 of the note is data whose meaning depends on the kind of note. 13641 13642 The macro `REG_NOTE_KIND (X)' returns the kind of register note. Its 13643 counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 13644 register note type of X to be NEWKIND. 13645 13646 Register notes are of three classes: They may say something about an 13647 input to an insn, they may say something about an output of an insn, or 13648 they may create a linkage between two insns. There are also a set of 13649 values that are only used in `LOG_LINKS'. 13650 13651 These register notes annotate inputs to an insn: 13652 13653 `REG_DEAD' 13654 The value in OP dies in this insn; that is to say, altering the 13655 value immediately after this insn would not affect the future 13656 behavior of the program. 13657 13658 It does not follow that the register OP has no useful value after 13659 this insn since OP is not necessarily modified by this insn. 13660 Rather, no subsequent instruction uses the contents of OP. 13661 13662 `REG_UNUSED' 13663 The register OP being set by this insn will not be used in a 13664 subsequent insn. This differs from a `REG_DEAD' note, which 13665 indicates that the value in an input will not be used subsequently. 13666 These two notes are independent; both may be present for the same 13667 register. 13668 13669 `REG_INC' 13670 The register OP is incremented (or decremented; at this level 13671 there is no distinction) by an embedded side effect inside this 13672 insn. This means it appears in a `post_inc', `pre_inc', 13673 `post_dec' or `pre_dec' expression. 13674 13675 `REG_NONNEG' 13676 The register OP is known to have a nonnegative value when this 13677 insn is reached. This is used so that decrement and branch until 13678 zero instructions, such as the m68k dbra, can be matched. 13679 13680 The `REG_NONNEG' note is added to insns only if the machine 13681 description has a `decrement_and_branch_until_zero' pattern. 13682 13683 `REG_NO_CONFLICT' 13684 This insn does not cause a conflict between OP and the item being 13685 set by this insn even though it might appear that it does. In 13686 other words, if the destination register and OP could otherwise be 13687 assigned the same register, this insn does not prevent that 13688 assignment. 13689 13690 Insns with this note are usually part of a block that begins with a 13691 `clobber' insn specifying a multi-word pseudo register (which will 13692 be the output of the block), a group of insns that each set one 13693 word of the value and have the `REG_NO_CONFLICT' note attached, 13694 and a final insn that copies the output to itself with an attached 13695 `REG_EQUAL' note giving the expression being computed. This block 13696 is encapsulated with `REG_LIBCALL' and `REG_RETVAL' notes on the 13697 first and last insns, respectively. 13698 13699 `REG_LABEL_OPERAND' 13700 This insn uses OP, a `code_label' or a `note' of type 13701 `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a 13702 `jump_insn' that refers to the operand as an ordinary operand. 13703 The label may still eventually be a jump target, but if so in an 13704 indirect jump in a subsequent insn. The presence of this note 13705 allows jump optimization to be aware that OP is, in fact, being 13706 used, and flow optimization to build an accurate flow graph. 13707 13708 `REG_LABEL_TARGET' 13709 This insn is a `jump_insn' but not a `addr_vec' or 13710 `addr_diff_vec'. It uses OP, a `code_label' as a direct or 13711 indirect jump target. Its purpose is similar to that of 13712 `REG_LABEL_OPERAND'. This note is only present if the insn has 13713 multiple targets; the last label in the insn (in the highest 13714 numbered insn-field) goes into the `JUMP_LABEL' field and does not 13715 have a `REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 13716 13717 `REG_CROSSING_JUMP' 13718 This insn is an branching instruction (either an unconditional 13719 jump or an indirect jump) which crosses between hot and cold 13720 sections, which could potentially be very far apart in the 13721 executable. The presence of this note indicates to other 13722 optimizations that this this branching instruction should not be 13723 "collapsed" into a simpler branching construct. It is used when 13724 the optimization to partition basic blocks into hot and cold 13725 sections is turned on. 13726 13727 `REG_SETJMP' 13728 Appears attached to each `CALL_INSN' to `setjmp' or a related 13729 function. 13730 13731 The following notes describe attributes of outputs of an insn: 13732 13733 `REG_EQUIV' 13734 `REG_EQUAL' 13735 This note is only valid on an insn that sets only one register and 13736 indicates that that register will be equal to OP at run time; the 13737 scope of this equivalence differs between the two types of notes. 13738 The value which the insn explicitly copies into the register may 13739 look different from OP, but they will be equal at run time. If the 13740 output of the single `set' is a `strict_low_part' expression, the 13741 note refers to the register that is contained in `SUBREG_REG' of 13742 the `subreg' expression. 13743 13744 For `REG_EQUIV', the register is equivalent to OP throughout the 13745 entire function, and could validly be replaced in all its 13746 occurrences by OP. ("Validly" here refers to the data flow of the 13747 program; simple replacement may make some insns invalid.) For 13748 example, when a constant is loaded into a register that is never 13749 assigned any other value, this kind of note is used. 13750 13751 When a parameter is copied into a pseudo-register at entry to a 13752 function, a note of this kind records that the register is 13753 equivalent to the stack slot where the parameter was passed. 13754 Although in this case the register may be set by other insns, it 13755 is still valid to replace the register by the stack slot 13756 throughout the function. 13757 13758 A `REG_EQUIV' note is also used on an instruction which copies a 13759 register parameter into a pseudo-register at entry to a function, 13760 if there is a stack slot where that parameter could be stored. 13761 Although other insns may set the pseudo-register, it is valid for 13762 the compiler to replace the pseudo-register by stack slot 13763 throughout the function, provided the compiler ensures that the 13764 stack slot is properly initialized by making the replacement in 13765 the initial copy instruction as well. This is used on machines 13766 for which the calling convention allocates stack space for 13767 register parameters. See `REG_PARM_STACK_SPACE' in *Note Stack 13768 Arguments::. 13769 13770 In the case of `REG_EQUAL', the register that is set by this insn 13771 will be equal to OP at run time at the end of this insn but not 13772 necessarily elsewhere in the function. In this case, OP is 13773 typically an arithmetic expression. For example, when a sequence 13774 of insns such as a library call is used to perform an arithmetic 13775 operation, this kind of note is attached to the insn that produces 13776 or copies the final value. 13777 13778 These two notes are used in different ways by the compiler passes. 13779 `REG_EQUAL' is used by passes prior to register allocation (such as 13780 common subexpression elimination and loop optimization) to tell 13781 them how to think of that value. `REG_EQUIV' notes are used by 13782 register allocation to indicate that there is an available 13783 substitute expression (either a constant or a `mem' expression for 13784 the location of a parameter on the stack) that may be used in 13785 place of a register if insufficient registers are available. 13786 13787 Except for stack homes for parameters, which are indicated by a 13788 `REG_EQUIV' note and are not useful to the early optimization 13789 passes and pseudo registers that are equivalent to a memory 13790 location throughout their entire life, which is not detected until 13791 later in the compilation, all equivalences are initially indicated 13792 by an attached `REG_EQUAL' note. In the early stages of register 13793 allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note 13794 if OP is a constant and the insn represents the only set of its 13795 destination register. 13796 13797 Thus, compiler passes prior to register allocation need only check 13798 for `REG_EQUAL' notes and passes subsequent to register allocation 13799 need only check for `REG_EQUIV' notes. 13800 13801 These notes describe linkages between insns. They occur in pairs: one 13802 insn has one of a pair of notes that points to a second insn, which has 13803 the inverse note pointing back to the first insn. 13804 13805 `REG_RETVAL' 13806 This insn copies the value of a multi-insn sequence (for example, a 13807 library call), and OP is the first insn of the sequence (for a 13808 library call, the first insn that was generated to set up the 13809 arguments for the library call). 13810 13811 Loop optimization uses this note to treat such a sequence as a 13812 single operation for code motion purposes and flow analysis uses 13813 this note to delete such sequences whose results are dead. 13814 13815 A `REG_EQUAL' note will also usually be attached to this insn to 13816 provide the expression being computed by the sequence. 13817 13818 These notes will be deleted after reload, since they are no longer 13819 accurate or useful. 13820 13821 `REG_LIBCALL' 13822 This is the inverse of `REG_RETVAL': it is placed on the first 13823 insn of a multi-insn sequence, and it points to the last one. 13824 13825 These notes are deleted after reload, since they are no longer 13826 useful or accurate. 13827 13828 `REG_CC_SETTER' 13829 `REG_CC_USER' 13830 On machines that use `cc0', the insns which set and use `cc0' set 13831 and use `cc0' are adjacent. However, when branch delay slot 13832 filling is done, this may no longer be true. In this case a 13833 `REG_CC_USER' note will be placed on the insn setting `cc0' to 13834 point to the insn using `cc0' and a `REG_CC_SETTER' note will be 13835 placed on the insn using `cc0' to point to the insn setting `cc0'. 13836 13837 These values are only used in the `LOG_LINKS' field, and indicate the 13838 type of dependency that each link represents. Links which indicate a 13839 data dependence (a read after write dependence) do not use any code, 13840 they simply have mode `VOIDmode', and are printed without any 13841 descriptive text. 13842 13843 `REG_DEP_TRUE' 13844 This indicates a true dependence (a read after write dependence). 13845 13846 `REG_DEP_OUTPUT' 13847 This indicates an output dependence (a write after write 13848 dependence). 13849 13850 `REG_DEP_ANTI' 13851 This indicates an anti dependence (a write after read dependence). 13852 13853 13854 These notes describe information gathered from gcov profile data. They 13855 are stored in the `REG_NOTES' field of an insn as an `expr_list'. 13856 13857 `REG_BR_PROB' 13858 This is used to specify the ratio of branches to non-branches of a 13859 branch insn according to the profile data. The value is stored as 13860 a value between 0 and REG_BR_PROB_BASE; larger values indicate a 13861 higher probability that the branch will be taken. 13862 13863 `REG_BR_PRED' 13864 These notes are found in JUMP insns after delayed branch scheduling 13865 has taken place. They indicate both the direction and the 13866 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 13867 values. 13868 13869 `REG_FRAME_RELATED_EXPR' 13870 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 13871 expression is used in place of the actual insn pattern. This is 13872 done in cases where the pattern is either complex or misleading. 13873 13874 `REG_LIBCALL_ID' 13875 This is used to specify that an insn is part of a libcall. Each 13876 libcall in a function has a unique id, and all the insns that are 13877 part of that libcall will have a REG_LIBCALL_ID note attached with 13878 the same ID. 13879 13880 For convenience, the machine mode in an `insn_list' or `expr_list' is 13881 printed using these symbolic codes in debugging dumps. 13882 13883 The only difference between the expression codes `insn_list' and 13884 `expr_list' is that the first operand of an `insn_list' is assumed to 13885 be an insn and is printed in debugging dumps as the insn's unique id; 13886 the first operand of an `expr_list' is printed in the ordinary way as 13887 an expression. 13888 13889 13890 File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 13891 13892 12.19 RTL Representation of Function-Call Insns 13893 =============================================== 13894 13895 Insns that call subroutines have the RTL expression code `call_insn'. 13896 These insns must satisfy special rules, and their bodies must use a 13897 special RTL expression code, `call'. 13898 13899 A `call' expression has two operands, as follows: 13900 13901 (call (mem:FM ADDR) NBYTES) 13902 13903 Here NBYTES is an operand that represents the number of bytes of 13904 argument data being passed to the subroutine, FM is a machine mode 13905 (which must equal as the definition of the `FUNCTION_MODE' macro in the 13906 machine description) and ADDR represents the address of the subroutine. 13907 13908 For a subroutine that returns no value, the `call' expression as shown 13909 above is the entire body of the insn, except that the insn might also 13910 contain `use' or `clobber' expressions. 13911 13912 For a subroutine that returns a value whose mode is not `BLKmode', the 13913 value is returned in a hard register. If this register's number is R, 13914 then the body of the call insn looks like this: 13915 13916 (set (reg:M R) 13917 (call (mem:FM ADDR) NBYTES)) 13918 13919 This RTL expression makes it clear (to the optimizer passes) that the 13920 appropriate register receives a useful value in this insn. 13921 13922 When a subroutine returns a `BLKmode' value, it is handled by passing 13923 to the subroutine the address of a place to store the value. So the 13924 call insn itself does not "return" any value, and it has the same RTL 13925 form as a call that returns nothing. 13926 13927 On some machines, the call instruction itself clobbers some register, 13928 for example to contain the return address. `call_insn' insns on these 13929 machines should have a body which is a `parallel' that contains both 13930 the `call' expression and `clobber' expressions that indicate which 13931 registers are destroyed. Similarly, if the call instruction requires 13932 some register other than the stack pointer that is not explicitly 13933 mentioned in its RTL, a `use' subexpression should mention that 13934 register. 13935 13936 Functions that are called are assumed to modify all registers listed in 13937 the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::) 13938 and, with the exception of `const' functions and library calls, to 13939 modify all of memory. 13940 13941 Insns containing just `use' expressions directly precede the 13942 `call_insn' insn to indicate which registers contain inputs to the 13943 function. Similarly, if registers other than those in 13944 `CALL_USED_REGISTERS' are clobbered by the called function, insns 13945 containing a single `clobber' follow immediately after the call to 13946 indicate which registers. 13947 13948 13949 File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 13950 13951 12.20 Structure Sharing Assumptions 13952 =================================== 13953 13954 The compiler assumes that certain kinds of RTL expressions are unique; 13955 there do not exist two distinct objects representing the same value. 13956 In other cases, it makes an opposite assumption: that no RTL expression 13957 object of a certain kind appears in more than one place in the 13958 containing structure. 13959 13960 These assumptions refer to a single function; except for the RTL 13961 objects that describe global variables and external functions, and a 13962 few standard objects such as small integer constants, no RTL objects 13963 are common to two functions. 13964 13965 * Each pseudo-register has only a single `reg' object to represent 13966 it, and therefore only a single machine mode. 13967 13968 * For any symbolic label, there is only one `symbol_ref' object 13969 referring to it. 13970 13971 * All `const_int' expressions with equal values are shared. 13972 13973 * There is only one `pc' expression. 13974 13975 * There is only one `cc0' expression. 13976 13977 * There is only one `const_double' expression with value 0 for each 13978 floating point mode. Likewise for values 1 and 2. 13979 13980 * There is only one `const_vector' expression with value 0 for each 13981 vector mode, be it an integer or a double constant vector. 13982 13983 * No `label_ref' or `scratch' appears in more than one place in the 13984 RTL structure; in other words, it is safe to do a tree-walk of all 13985 the insns in the function and assume that each time a `label_ref' 13986 or `scratch' is seen it is distinct from all others that are seen. 13987 13988 * Only one `mem' object is normally created for each static variable 13989 or stack slot, so these objects are frequently shared in all the 13990 places they appear. However, separate but equal objects for these 13991 variables are occasionally made. 13992 13993 * When a single `asm' statement has multiple output operands, a 13994 distinct `asm_operands' expression is made for each output operand. 13995 However, these all share the vector which contains the sequence of 13996 input operands. This sharing is used later on to test whether two 13997 `asm_operands' expressions come from the same statement, so all 13998 optimizations must carefully preserve the sharing if they copy the 13999 vector at all. 14000 14001 * No RTL object appears in more than one place in the RTL structure 14002 except as described above. Many passes of the compiler rely on 14003 this by assuming that they can modify RTL objects in place without 14004 unwanted side-effects on other insns. 14005 14006 * During initial RTL generation, shared structure is freely 14007 introduced. After all the RTL for a function has been generated, 14008 all shared structure is copied by `unshare_all_rtl' in 14009 `emit-rtl.c', after which the above rules are guaranteed to be 14010 followed. 14011 14012 * During the combiner pass, shared structure within an insn can exist 14013 temporarily. However, the shared structure is copied before the 14014 combiner is finished with the insn. This is done by calling 14015 `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'. 14016 14017 14018 File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 14019 14020 12.21 Reading RTL 14021 ================= 14022 14023 To read an RTL object from a file, call `read_rtx'. It takes one 14024 argument, a stdio stream, and returns a single RTL object. This routine 14025 is defined in `read-rtl.c'. It is not available in the compiler 14026 itself, only the various programs that generate the compiler back end 14027 from the machine description. 14028 14029 People frequently have the idea of using RTL stored as text in a file 14030 as an interface between a language front end and the bulk of GCC. This 14031 idea is not feasible. 14032 14033 GCC was designed to use RTL internally only. Correct RTL for a given 14034 program is very dependent on the particular target machine. And the RTL 14035 does not contain all the information about the program. 14036 14037 The proper way to interface GCC to a new language front end is with 14038 the "tree" data structure, described in the files `tree.h' and 14039 `tree.def'. The documentation for this structure (*note Trees::) is 14040 incomplete. 14041 14042 14043 File: gccint.info, Node: Control Flow, Next: Tree SSA, Prev: RTL, Up: Top 14044 14045 13 Control Flow Graph 14046 ********************* 14047 14048 A control flow graph (CFG) is a data structure built on top of the 14049 intermediate code representation (the RTL or `tree' instruction stream) 14050 abstracting the control flow behavior of a function that is being 14051 compiled. The CFG is a directed graph where the vertices represent 14052 basic blocks and edges represent possible transfer of control flow from 14053 one basic block to another. The data structures used to represent the 14054 control flow graph are defined in `basic-block.h'. 14055 14056 * Menu: 14057 14058 * Basic Blocks:: The definition and representation of basic blocks. 14059 * Edges:: Types of edges and their representation. 14060 * Profile information:: Representation of frequencies and probabilities. 14061 * Maintaining the CFG:: Keeping the control flow graph and up to date. 14062 * Liveness information:: Using and maintaining liveness information. 14063 14064 14065 File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 14066 14067 13.1 Basic Blocks 14068 ================= 14069 14070 A basic block is a straight-line sequence of code with only one entry 14071 point and only one exit. In GCC, basic blocks are represented using 14072 the `basic_block' data type. 14073 14074 Two pointer members of the `basic_block' structure are the pointers 14075 `next_bb' and `prev_bb'. These are used to keep doubly linked chain of 14076 basic blocks in the same order as the underlying instruction stream. 14077 The chain of basic blocks is updated transparently by the provided API 14078 for manipulating the CFG. The macro `FOR_EACH_BB' can be used to visit 14079 all the basic blocks in lexicographical order. Dominator traversals 14080 are also possible using `walk_dominator_tree'. Given two basic blocks 14081 A and B, block A dominates block B if A is _always_ executed before B. 14082 14083 The `BASIC_BLOCK' array contains all basic blocks in an unspecified 14084 order. Each `basic_block' structure has a field that holds a unique 14085 integer identifier `index' that is the index of the block in the 14086 `BASIC_BLOCK' array. The total number of basic blocks in the function 14087 is `n_basic_blocks'. Both the basic block indices and the total number 14088 of basic blocks may vary during the compilation process, as passes 14089 reorder, create, duplicate, and destroy basic blocks. The index for 14090 any block should never be greater than `last_basic_block'. 14091 14092 Special basic blocks represent possible entry and exit points of a 14093 function. These blocks are called `ENTRY_BLOCK_PTR' and 14094 `EXIT_BLOCK_PTR'. These blocks do not contain any code, and are not 14095 elements of the `BASIC_BLOCK' array. Therefore they have been assigned 14096 unique, negative index numbers. 14097 14098 Each `basic_block' also contains pointers to the first instruction 14099 (the "head") and the last instruction (the "tail") or "end" of the 14100 instruction stream contained in a basic block. In fact, since the 14101 `basic_block' data type is used to represent blocks in both major 14102 intermediate representations of GCC (`tree' and RTL), there are 14103 pointers to the head and end of a basic block for both representations. 14104 14105 For RTL, these pointers are `rtx head, end'. In the RTL function 14106 representation, the head pointer always points either to a 14107 `NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present. In the RTL 14108 representation of a function, the instruction stream contains not only 14109 the "real" instructions, but also "notes". Any function that moves or 14110 duplicates the basic blocks needs to take care of updating of these 14111 notes. Many of these notes expect that the instruction stream consists 14112 of linear regions, making such updates difficult. The 14113 `NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear 14114 in the instruction stream contained in a basic block. The instruction 14115 stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK', but 14116 zero or more `CODE_LABEL' nodes can precede the block note. A basic 14117 block ends by control flow instruction or last instruction before 14118 following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'. A `CODE_LABEL' 14119 cannot appear in the instruction stream of a basic block. 14120 14121 In addition to notes, the jump table vectors are also represented as 14122 "pseudo-instructions" inside the insn stream. These vectors never 14123 appear in the basic block and should always be placed just after the 14124 table jump instructions referencing them. After removing the 14125 table-jump it is often difficult to eliminate the code computing the 14126 address and referencing the vector, so cleaning up these vectors is 14127 postponed until after liveness analysis. Thus the jump table vectors 14128 may appear in the insn stream unreferenced and without any purpose. 14129 Before any edge is made "fall-thru", the existence of such construct in 14130 the way needs to be checked by calling `can_fallthru' function. 14131 14132 For the `tree' representation, the head and end of the basic block are 14133 being pointed to by the `stmt_list' field, but this special `tree' 14134 should never be referenced directly. Instead, at the tree level 14135 abstract containers and iterators are used to access statements and 14136 expressions in basic blocks. These iterators are called "block 14137 statement iterators" (BSIs). Grep for `^bsi' in the various `tree-*' 14138 files. The following snippet will pretty-print all the statements of 14139 the program in the GIMPLE representation. 14140 14141 FOR_EACH_BB (bb) 14142 { 14143 block_stmt_iterator si; 14144 14145 for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si)) 14146 { 14147 tree stmt = bsi_stmt (si); 14148 print_generic_stmt (stderr, stmt, 0); 14149 } 14150 } 14151 14152 14153 File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 14154 14155 13.2 Edges 14156 ========== 14157 14158 Edges represent possible control flow transfers from the end of some 14159 basic block A to the head of another basic block B. We say that A is a 14160 predecessor of B, and B is a successor of A. Edges are represented in 14161 GCC with the `edge' data type. Each `edge' acts as a link between two 14162 basic blocks: the `src' member of an edge points to the predecessor 14163 basic block of the `dest' basic block. The members `preds' and `succs' 14164 of the `basic_block' data type point to type-safe vectors of edges to 14165 the predecessors and successors of the block. 14166 14167 When walking the edges in an edge vector, "edge iterators" should be 14168 used. Edge iterators are constructed using the `edge_iterator' data 14169 structure and several methods are available to operate on them: 14170 14171 `ei_start' 14172 This function initializes an `edge_iterator' that points to the 14173 first edge in a vector of edges. 14174 14175 `ei_last' 14176 This function initializes an `edge_iterator' that points to the 14177 last edge in a vector of edges. 14178 14179 `ei_end_p' 14180 This predicate is `true' if an `edge_iterator' represents the last 14181 edge in an edge vector. 14182 14183 `ei_one_before_end_p' 14184 This predicate is `true' if an `edge_iterator' represents the 14185 second last edge in an edge vector. 14186 14187 `ei_next' 14188 This function takes a pointer to an `edge_iterator' and makes it 14189 point to the next edge in the sequence. 14190 14191 `ei_prev' 14192 This function takes a pointer to an `edge_iterator' and makes it 14193 point to the previous edge in the sequence. 14194 14195 `ei_edge' 14196 This function returns the `edge' currently pointed to by an 14197 `edge_iterator'. 14198 14199 `ei_safe_safe' 14200 This function returns the `edge' currently pointed to by an 14201 `edge_iterator', but returns `NULL' if the iterator is pointing at 14202 the end of the sequence. This function has been provided for 14203 existing code makes the assumption that a `NULL' edge indicates 14204 the end of the sequence. 14205 14206 14207 The convenience macro `FOR_EACH_EDGE' can be used to visit all of the 14208 edges in a sequence of predecessor or successor edges. It must not be 14209 used when an element might be removed during the traversal, otherwise 14210 elements will be missed. Here is an example of how to use the macro: 14211 14212 edge e; 14213 edge_iterator ei; 14214 14215 FOR_EACH_EDGE (e, ei, bb->succs) 14216 { 14217 if (e->flags & EDGE_FALLTHRU) 14218 break; 14219 } 14220 14221 There are various reasons why control flow may transfer from one block 14222 to another. One possibility is that some instruction, for example a 14223 `CODE_LABEL', in a linearized instruction stream just always starts a 14224 new basic block. In this case a "fall-thru" edge links the basic block 14225 to the first following basic block. But there are several other 14226 reasons why edges may be created. The `flags' field of the `edge' data 14227 type is used to store information about the type of edge we are dealing 14228 with. Each edge is of one of the following types: 14229 14230 _jump_ 14231 No type flags are set for edges corresponding to jump instructions. 14232 These edges are used for unconditional or conditional jumps and in 14233 RTL also for table jumps. They are the easiest to manipulate as 14234 they may be freely redirected when the flow graph is not in SSA 14235 form. 14236 14237 _fall-thru_ 14238 Fall-thru edges are present in case where the basic block may 14239 continue execution to the following one without branching. These 14240 edges have the `EDGE_FALLTHRU' flag set. Unlike other types of 14241 edges, these edges must come into the basic block immediately 14242 following in the instruction stream. The function 14243 `force_nonfallthru' is available to insert an unconditional jump 14244 in the case that redirection is needed. Note that this may 14245 require creation of a new basic block. 14246 14247 _exception handling_ 14248 Exception handling edges represent possible control transfers from 14249 a trapping instruction to an exception handler. The definition of 14250 "trapping" varies. In C++, only function calls can throw, but for 14251 Java, exceptions like division by zero or segmentation fault are 14252 defined and thus each instruction possibly throwing this kind of 14253 exception needs to be handled as control flow instruction. 14254 Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set. 14255 14256 When updating the instruction stream it is easy to change possibly 14257 trapping instruction to non-trapping, by simply removing the 14258 exception edge. The opposite conversion is difficult, but should 14259 not happen anyway. The edges can be eliminated via 14260 `purge_dead_edges' call. 14261 14262 In the RTL representation, the destination of an exception edge is 14263 specified by `REG_EH_REGION' note attached to the insn. In case 14264 of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too. In 14265 the `tree' representation, this extra flag is not set. 14266 14267 In the RTL representation, the predicate `may_trap_p' may be used 14268 to check whether instruction still may trap or not. For the tree 14269 representation, the `tree_could_trap_p' predicate is available, 14270 but this predicate only checks for possible memory traps, as in 14271 dereferencing an invalid pointer location. 14272 14273 _sibling calls_ 14274 Sibling calls or tail calls terminate the function in a 14275 non-standard way and thus an edge to the exit must be present. 14276 `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case. These 14277 edges only exist in the RTL representation. 14278 14279 _computed jumps_ 14280 Computed jumps contain edges to all labels in the function 14281 referenced from the code. All those edges have `EDGE_ABNORMAL' 14282 flag set. The edges used to represent computed jumps often cause 14283 compile time performance problems, since functions consisting of 14284 many taken labels and many computed jumps may have _very_ dense 14285 flow graphs, so these edges need to be handled with special care. 14286 During the earlier stages of the compilation process, GCC tries to 14287 avoid such dense flow graphs by factoring computed jumps. For 14288 example, given the following series of jumps, 14289 14290 goto *x; 14291 [ ... ] 14292 14293 goto *x; 14294 [ ... ] 14295 14296 goto *x; 14297 [ ... ] 14298 14299 factoring the computed jumps results in the following code sequence 14300 which has a much simpler flow graph: 14301 14302 goto y; 14303 [ ... ] 14304 14305 goto y; 14306 [ ... ] 14307 14308 goto y; 14309 [ ... ] 14310 14311 y: 14312 goto *x; 14313 14314 However, the classic problem with this transformation is that it 14315 has a runtime cost in there resulting code: An extra jump. 14316 Therefore, the computed jumps are un-factored in the later passes 14317 of the compiler. Be aware of that when you work on passes in that 14318 area. There have been numerous examples already where the compile 14319 time for code with unfactored computed jumps caused some serious 14320 headaches. 14321 14322 _nonlocal goto handlers_ 14323 GCC allows nested functions to return into caller using a `goto' 14324 to a label passed to as an argument to the callee. The labels 14325 passed to nested functions contain special code to cleanup after 14326 function call. Such sections of code are referred to as "nonlocal 14327 goto receivers". If a function contains such nonlocal goto 14328 receivers, an edge from the call to the label is created with the 14329 `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set. 14330 14331 _function entry points_ 14332 By definition, execution of function starts at basic block 0, so 14333 there is always an edge from the `ENTRY_BLOCK_PTR' to basic block 14334 0. There is no `tree' representation for alternate entry points at 14335 this moment. In RTL, alternate entry points are specified by 14336 `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined. This feature is 14337 currently used for multiple entry point prologues and is limited 14338 to post-reload passes only. This can be used by back-ends to emit 14339 alternate prologues for functions called from different contexts. 14340 In future full support for multiple entry functions defined by 14341 Fortran 90 needs to be implemented. 14342 14343 _function exits_ 14344 In the pre-reload representation a function terminates after the 14345 last instruction in the insn chain and no explicit return 14346 instructions are used. This corresponds to the fall-thru edge 14347 into exit block. After reload, optimal RTL epilogues are used 14348 that use explicit (conditional) return instructions that are 14349 represented by edges with no flags set. 14350 14351 14352 14353 File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 14354 14355 13.3 Profile information 14356 ======================== 14357 14358 In many cases a compiler must make a choice whether to trade speed in 14359 one part of code for speed in another, or to trade code size for code 14360 speed. In such cases it is useful to know information about how often 14361 some given block will be executed. That is the purpose for maintaining 14362 profile within the flow graph. GCC can handle profile information 14363 obtained through "profile feedback", but it can also estimate branch 14364 probabilities based on statics and heuristics. 14365 14366 The feedback based profile is produced by compiling the program with 14367 instrumentation, executing it on a train run and reading the numbers of 14368 executions of basic blocks and edges back to the compiler while 14369 re-compiling the program to produce the final executable. This method 14370 provides very accurate information about where a program spends most of 14371 its time on the train run. Whether it matches the average run of 14372 course depends on the choice of train data set, but several studies 14373 have shown that the behavior of a program usually changes just 14374 marginally over different data sets. 14375 14376 When profile feedback is not available, the compiler may be asked to 14377 attempt to predict the behavior of each branch in the program using a 14378 set of heuristics (see `predict.def' for details) and compute estimated 14379 frequencies of each basic block by propagating the probabilities over 14380 the graph. 14381 14382 Each `basic_block' contains two integer fields to represent profile 14383 information: `frequency' and `count'. The `frequency' is an estimation 14384 how often is basic block executed within a function. It is represented 14385 as an integer scaled in the range from 0 to `BB_FREQ_BASE'. The most 14386 frequently executed basic block in function is initially set to 14387 `BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 14388 During optimization, the frequency of the most frequent basic block can 14389 both decrease (for instance by loop unrolling) or grow (for instance by 14390 cross-jumping optimization), so scaling sometimes has to be performed 14391 multiple times. 14392 14393 The `count' contains hard-counted numbers of execution measured during 14394 training runs and is nonzero only when profile feedback is available. 14395 This value is represented as the host's widest integer (typically a 64 14396 bit integer) of the special type `gcov_type'. 14397 14398 Most optimization passes can use only the frequency information of a 14399 basic block, but a few passes may want to know hard execution counts. 14400 The frequencies should always match the counts after scaling, however 14401 during updating of the profile information numerical error may 14402 accumulate into quite large errors. 14403 14404 Each edge also contains a branch probability field: an integer in the 14405 range from 0 to `REG_BR_PROB_BASE'. It represents probability of 14406 passing control from the end of the `src' basic block to the `dest' 14407 basic block, i.e. the probability that control will flow along this 14408 edge. The `EDGE_FREQUENCY' macro is available to compute how 14409 frequently a given edge is taken. There is a `count' field for each 14410 edge as well, representing same information as for a basic block. 14411 14412 The basic block frequencies are not represented in the instruction 14413 stream, but in the RTL representation the edge frequencies are 14414 represented for conditional jumps (via the `REG_BR_PROB' macro) since 14415 they are used when instructions are output to the assembly file and the 14416 flow graph is no longer maintained. 14417 14418 The probability that control flow arrives via a given edge to its 14419 destination basic block is called "reverse probability" and is not 14420 directly represented, but it may be easily computed from frequencies of 14421 basic blocks. 14422 14423 Updating profile information is a delicate task that can unfortunately 14424 not be easily integrated with the CFG manipulation API. Many of the 14425 functions and hooks to modify the CFG, such as 14426 `redirect_edge_and_branch', do not have enough information to easily 14427 update the profile, so updating it is in the majority of cases left up 14428 to the caller. It is difficult to uncover bugs in the profile updating 14429 code, because they manifest themselves only by producing worse code, 14430 and checking profile consistency is not possible because of numeric 14431 error accumulation. Hence special attention needs to be given to this 14432 issue in each pass that modifies the CFG. 14433 14434 It is important to point out that `REG_BR_PROB_BASE' and 14435 `BB_FREQ_BASE' are both set low enough to be possible to compute second 14436 power of any frequency or probability in the flow graph, it is not 14437 possible to even square the `count' field, as modern CPUs are fast 14438 enough to execute $2^32$ operations quickly. 14439 14440 14441 File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 14442 14443 13.4 Maintaining the CFG 14444 ======================== 14445 14446 An important task of each compiler pass is to keep both the control 14447 flow graph and all profile information up-to-date. Reconstruction of 14448 the control flow graph after each pass is not an option, since it may be 14449 very expensive and lost profile information cannot be reconstructed at 14450 all. 14451 14452 GCC has two major intermediate representations, and both use the 14453 `basic_block' and `edge' data types to represent control flow. Both 14454 representations share as much of the CFG maintenance code as possible. 14455 For each representation, a set of "hooks" is defined so that each 14456 representation can provide its own implementation of CFG manipulation 14457 routines when necessary. These hooks are defined in `cfghooks.h'. 14458 There are hooks for almost all common CFG manipulations, including 14459 block splitting and merging, edge redirection and creating and deleting 14460 basic blocks. These hooks should provide everything you need to 14461 maintain and manipulate the CFG in both the RTL and `tree' 14462 representation. 14463 14464 At the moment, the basic block boundaries are maintained transparently 14465 when modifying instructions, so there rarely is a need to move them 14466 manually (such as in case someone wants to output instruction outside 14467 basic block explicitly). Often the CFG may be better viewed as 14468 integral part of instruction chain, than structure built on the top of 14469 it. However, in principle the control flow graph for the `tree' 14470 representation is _not_ an integral part of the representation, in that 14471 a function tree may be expanded without first building a flow graph 14472 for the `tree' representation at all. This happens when compiling 14473 without any `tree' optimization enabled. When the `tree' optimizations 14474 are enabled and the instruction stream is rewritten in SSA form, the 14475 CFG is very tightly coupled with the instruction stream. In 14476 particular, statement insertion and removal has to be done with care. 14477 In fact, the whole `tree' representation can not be easily used or 14478 maintained without proper maintenance of the CFG simultaneously. 14479 14480 In the RTL representation, each instruction has a `BLOCK_FOR_INSN' 14481 value that represents pointer to the basic block that contains the 14482 instruction. In the `tree' representation, the function `bb_for_stmt' 14483 returns a pointer to the basic block containing the queried statement. 14484 14485 When changes need to be applied to a function in its `tree' 14486 representation, "block statement iterators" should be used. These 14487 iterators provide an integrated abstraction of the flow graph and the 14488 instruction stream. Block statement iterators iterators are 14489 constructed using the `block_stmt_iterator' data structure and several 14490 modifier are available, including the following: 14491 14492 `bsi_start' 14493 This function initializes a `block_stmt_iterator' that points to 14494 the first non-empty statement in a basic block. 14495 14496 `bsi_last' 14497 This function initializes a `block_stmt_iterator' that points to 14498 the last statement in a basic block. 14499 14500 `bsi_end_p' 14501 This predicate is `true' if a `block_stmt_iterator' represents the 14502 end of a basic block. 14503 14504 `bsi_next' 14505 This function takes a `block_stmt_iterator' and makes it point to 14506 its successor. 14507 14508 `bsi_prev' 14509 This function takes a `block_stmt_iterator' and makes it point to 14510 its predecessor. 14511 14512 `bsi_insert_after' 14513 This function inserts a statement after the `block_stmt_iterator' 14514 passed in. The final parameter determines whether the statement 14515 iterator is updated to point to the newly inserted statement, or 14516 left pointing to the original statement. 14517 14518 `bsi_insert_before' 14519 This function inserts a statement before the `block_stmt_iterator' 14520 passed in. The final parameter determines whether the statement 14521 iterator is updated to point to the newly inserted statement, or 14522 left pointing to the original statement. 14523 14524 `bsi_remove' 14525 This function removes the `block_stmt_iterator' passed in and 14526 rechains the remaining statements in a basic block, if any. 14527 14528 In the RTL representation, the macros `BB_HEAD' and `BB_END' may be 14529 used to get the head and end `rtx' of a basic block. No abstract 14530 iterators are defined for traversing the insn chain, but you can just 14531 use `NEXT_INSN' and `PREV_INSN' instead. See *Note Insns::. 14532 14533 Usually a code manipulating pass simplifies the instruction stream and 14534 the flow of control, possibly eliminating some edges. This may for 14535 example happen when a conditional jump is replaced with an 14536 unconditional jump, but also when simplifying possibly trapping 14537 instruction to non-trapping while compiling Java. Updating of edges is 14538 not transparent and each optimization pass is required to do so 14539 manually. However only few cases occur in practice. The pass may call 14540 `purge_dead_edges' on a given basic block to remove superfluous edges, 14541 if any. 14542 14543 Another common scenario is redirection of branch instructions, but 14544 this is best modeled as redirection of edges in the control flow graph 14545 and thus use of `redirect_edge_and_branch' is preferred over more low 14546 level functions, such as `redirect_jump' that operate on RTL chain 14547 only. The CFG hooks defined in `cfghooks.h' should provide the 14548 complete API required for manipulating and maintaining the CFG. 14549 14550 It is also possible that a pass has to insert control flow instruction 14551 into the middle of a basic block, thus creating an entry point in the 14552 middle of the basic block, which is impossible by definition: The block 14553 must be split to make sure it only has one entry point, i.e. the head 14554 of the basic block. The CFG hook `split_block' may be used when an 14555 instruction in the middle of a basic block has to become the target of 14556 a jump or branch instruction. 14557 14558 For a global optimizer, a common operation is to split edges in the 14559 flow graph and insert instructions on them. In the RTL representation, 14560 this can be easily done using the `insert_insn_on_edge' function that 14561 emits an instruction "on the edge", caching it for a later 14562 `commit_edge_insertions' call that will take care of moving the 14563 inserted instructions off the edge into the instruction stream 14564 contained in a basic block. This includes the creation of new basic 14565 blocks where needed. In the `tree' representation, the equivalent 14566 functions are `bsi_insert_on_edge' which inserts a block statement 14567 iterator on an edge, and `bsi_commit_edge_inserts' which flushes the 14568 instruction to actual instruction stream. 14569 14570 While debugging the optimization pass, an `verify_flow_info' function 14571 may be useful to find bugs in the control flow graph updating code. 14572 14573 Note that at present, the representation of control flow in the `tree' 14574 representation is discarded before expanding to RTL. Long term the CFG 14575 should be maintained and "expanded" to the RTL representation along 14576 with the function `tree' itself. 14577 14578 14579 File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 14580 14581 13.5 Liveness information 14582 ========================= 14583 14584 Liveness information is useful to determine whether some register is 14585 "live" at given point of program, i.e. that it contains a value that 14586 may be used at a later point in the program. This information is used, 14587 for instance, during register allocation, as the pseudo registers only 14588 need to be assigned to a unique hard register or to a stack slot if 14589 they are live. The hard registers and stack slots may be freely reused 14590 for other values when a register is dead. 14591 14592 Liveness information is available in the back end starting with 14593 `pass_df_initialize' and ending with `pass_df_finish'. Three flavors 14594 of live analysis are available: With `LR', it is possible to determine 14595 at any point `P' in the function if the register may be used on some 14596 path from `P' to the end of the function. With `UR', it is possible to 14597 determine if there is a path from the beginning of the function to `P' 14598 that defines the variable. `LIVE' is the intersection of the `LR' and 14599 `UR' and a variable is live at `P' if there is both an assignment that 14600 reaches it from the beginning of the function and a uses that can be 14601 reached on some path from `P' to the end of the function. 14602 14603 In general `LIVE' is the most useful of the three. The macros 14604 `DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 14605 macros take a basic block number and return a bitmap that is indexed by 14606 the register number. This information is only guaranteed to be up to 14607 date after calls are made to `df_analyze'. See the file `df-core.c' 14608 for details on using the dataflow. 14609 14610 The liveness information is stored partly in the RTL instruction stream 14611 and partly in the flow graph. Local information is stored in the 14612 instruction stream: Each instruction may contain `REG_DEAD' notes 14613 representing that the value of a given register is no longer needed, or 14614 `REG_UNUSED' notes representing that the value computed by the 14615 instruction is never used. The second is useful for instructions 14616 computing multiple values at once. 14617 14618 14619 File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 14620 14621 14 Machine Descriptions 14622 *********************** 14623 14624 A machine description has two parts: a file of instruction patterns 14625 (`.md' file) and a C header file of macro definitions. 14626 14627 The `.md' file for a target machine contains a pattern for each 14628 instruction that the target machine supports (or at least each 14629 instruction that is worth telling the compiler about). It may also 14630 contain comments. A semicolon causes the rest of the line to be a 14631 comment, unless the semicolon is inside a quoted string. 14632 14633 See the next chapter for information on the C header file. 14634 14635 * Menu: 14636 14637 * Overview:: How the machine description is used. 14638 * Patterns:: How to write instruction patterns. 14639 * Example:: An explained example of a `define_insn' pattern. 14640 * RTL Template:: The RTL template defines what insns match a pattern. 14641 * Output Template:: The output template says how to make assembler code 14642 from such an insn. 14643 * Output Statement:: For more generality, write C code to output 14644 the assembler code. 14645 * Predicates:: Controlling what kinds of operands can be used 14646 for an insn. 14647 * Constraints:: Fine-tuning operand selection. 14648 * Standard Names:: Names mark patterns to use for code generation. 14649 * Pattern Ordering:: When the order of patterns makes a difference. 14650 * Dependent Patterns:: Having one pattern may make you need another. 14651 * Jump Patterns:: Special considerations for patterns for jump insns. 14652 * Looping Patterns:: How to define patterns for special looping insns. 14653 * Insn Canonicalizations::Canonicalization of Instructions 14654 * Expander Definitions::Generating a sequence of several RTL insns 14655 for a standard operation. 14656 * Insn Splitting:: Splitting Instructions into Multiple Instructions. 14657 * Including Patterns:: Including Patterns in Machine Descriptions. 14658 * Peephole Definitions::Defining machine-specific peephole optimizations. 14659 * Insn Attributes:: Specifying the value of attributes for generated insns. 14660 * Conditional Execution::Generating `define_insn' patterns for 14661 predication. 14662 * Constant Definitions::Defining symbolic constants that can be used in the 14663 md file. 14664 * Iterators:: Using iterators to generate patterns from a template. 14665 14666 14667 File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 14668 14669 14.1 Overview of How the Machine Description is Used 14670 ==================================================== 14671 14672 There are three main conversions that happen in the compiler: 14673 14674 1. The front end reads the source code and builds a parse tree. 14675 14676 2. The parse tree is used to generate an RTL insn list based on named 14677 instruction patterns. 14678 14679 3. The insn list is matched against the RTL templates to produce 14680 assembler code. 14681 14682 14683 For the generate pass, only the names of the insns matter, from either 14684 a named `define_insn' or a `define_expand'. The compiler will choose 14685 the pattern with the right name and apply the operands according to the 14686 documentation later in this chapter, without regard for the RTL 14687 template or operand constraints. Note that the names the compiler looks 14688 for are hard-coded in the compiler--it will ignore unnamed patterns and 14689 patterns with names it doesn't know about, but if you don't provide a 14690 named pattern it needs, it will abort. 14691 14692 If a `define_insn' is used, the template given is inserted into the 14693 insn list. If a `define_expand' is used, one of three things happens, 14694 based on the condition logic. The condition logic may manually create 14695 new insns for the insn list, say via `emit_insn()', and invoke `DONE'. 14696 For certain named patterns, it may invoke `FAIL' to tell the compiler 14697 to use an alternate way of performing that task. If it invokes neither 14698 `DONE' nor `FAIL', the template given in the pattern is inserted, as if 14699 the `define_expand' were a `define_insn'. 14700 14701 Once the insn list is generated, various optimization passes convert, 14702 replace, and rearrange the insns in the insn list. This is where the 14703 `define_split' and `define_peephole' patterns get used, for example. 14704 14705 Finally, the insn list's RTL is matched up with the RTL templates in 14706 the `define_insn' patterns, and those patterns are used to emit the 14707 final assembly code. For this purpose, each named `define_insn' acts 14708 like it's unnamed, since the names are ignored. 14709 14710 14711 File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 14712 14713 14.2 Everything about Instruction Patterns 14714 ========================================== 14715 14716 Each instruction pattern contains an incomplete RTL expression, with 14717 pieces to be filled in later, operand constraints that restrict how the 14718 pieces can be filled in, and an output pattern or C code to generate 14719 the assembler output, all wrapped up in a `define_insn' expression. 14720 14721 A `define_insn' is an RTL expression containing four or five operands: 14722 14723 1. An optional name. The presence of a name indicate that this 14724 instruction pattern can perform a certain standard job for the 14725 RTL-generation pass of the compiler. This pass knows certain 14726 names and will use the instruction patterns with those names, if 14727 the names are defined in the machine description. 14728 14729 The absence of a name is indicated by writing an empty string 14730 where the name should go. Nameless instruction patterns are never 14731 used for generating RTL code, but they may permit several simpler 14732 insns to be combined later on. 14733 14734 Names that are not thus known and used in RTL-generation have no 14735 effect; they are equivalent to no name at all. 14736 14737 For the purpose of debugging the compiler, you may also specify a 14738 name beginning with the `*' character. Such a name is used only 14739 for identifying the instruction in RTL dumps; it is entirely 14740 equivalent to having a nameless pattern for all other purposes. 14741 14742 2. The "RTL template" (*note RTL Template::) is a vector of incomplete 14743 RTL expressions which show what the instruction should look like. 14744 It is incomplete because it may contain `match_operand', 14745 `match_operator', and `match_dup' expressions that stand for 14746 operands of the instruction. 14747 14748 If the vector has only one element, that element is the template 14749 for the instruction pattern. If the vector has multiple elements, 14750 then the instruction pattern is a `parallel' expression containing 14751 the elements described. 14752 14753 3. A condition. This is a string which contains a C expression that 14754 is the final test to decide whether an insn body matches this 14755 pattern. 14756 14757 For a named pattern, the condition (if present) may not depend on 14758 the data in the insn being matched, but only the 14759 target-machine-type flags. The compiler needs to test these 14760 conditions during initialization in order to learn exactly which 14761 named instructions are available in a particular run. 14762 14763 For nameless patterns, the condition is applied only when matching 14764 an individual insn, and only after the insn has matched the 14765 pattern's recognition template. The insn's operands may be found 14766 in the vector `operands'. For an insn where the condition has 14767 once matched, it can't be used to control register allocation, for 14768 example by excluding certain hard registers or hard register 14769 combinations. 14770 14771 4. The "output template": a string that says how to output matching 14772 insns as assembler code. `%' in this string specifies where to 14773 substitute the value of an operand. *Note Output Template::. 14774 14775 When simple substitution isn't general enough, you can specify a 14776 piece of C code to compute the output. *Note Output Statement::. 14777 14778 5. Optionally, a vector containing the values of attributes for insns 14779 matching this pattern. *Note Insn Attributes::. 14780 14781 14782 File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 14783 14784 14.3 Example of `define_insn' 14785 ============================= 14786 14787 Here is an actual example of an instruction pattern, for the 14788 68000/68020. 14789 14790 (define_insn "tstsi" 14791 [(set (cc0) 14792 (match_operand:SI 0 "general_operand" "rm"))] 14793 "" 14794 "* 14795 { 14796 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 14797 return \"tstl %0\"; 14798 return \"cmpl #0,%0\"; 14799 }") 14800 14801 This can also be written using braced strings: 14802 14803 (define_insn "tstsi" 14804 [(set (cc0) 14805 (match_operand:SI 0 "general_operand" "rm"))] 14806 "" 14807 { 14808 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 14809 return "tstl %0"; 14810 return "cmpl #0,%0"; 14811 }) 14812 14813 This is an instruction that sets the condition codes based on the 14814 value of a general operand. It has no condition, so any insn whose RTL 14815 description has the form shown may be handled according to this 14816 pattern. The name `tstsi' means "test a `SImode' value" and tells the 14817 RTL generation pass that, when it is necessary to test such a value, an 14818 insn to do so can be constructed using this pattern. 14819 14820 The output control string is a piece of C code which chooses which 14821 output template to return based on the kind of operand and the specific 14822 type of CPU for which code is being generated. 14823 14824 `"rm"' is an operand constraint. Its meaning is explained below. 14825 14826 14827 File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 14828 14829 14.4 RTL Template 14830 ================= 14831 14832 The RTL template is used to define which insns match the particular 14833 pattern and how to find their operands. For named patterns, the RTL 14834 template also says how to construct an insn from specified operands. 14835 14836 Construction involves substituting specified operands into a copy of 14837 the template. Matching involves determining the values that serve as 14838 the operands in the insn being matched. Both of these activities are 14839 controlled by special expression types that direct matching and 14840 substitution of the operands. 14841 14842 `(match_operand:M N PREDICATE CONSTRAINT)' 14843 This expression is a placeholder for operand number N of the insn. 14844 When constructing an insn, operand number N will be substituted 14845 at this point. When matching an insn, whatever appears at this 14846 position in the insn will be taken as operand number N; but it 14847 must satisfy PREDICATE or this instruction pattern will not match 14848 at all. 14849 14850 Operand numbers must be chosen consecutively counting from zero in 14851 each instruction pattern. There may be only one `match_operand' 14852 expression in the pattern for each operand number. Usually 14853 operands are numbered in the order of appearance in `match_operand' 14854 expressions. In the case of a `define_expand', any operand numbers 14855 used only in `match_dup' expressions have higher values than all 14856 other operand numbers. 14857 14858 PREDICATE is a string that is the name of a function that accepts 14859 two arguments, an expression and a machine mode. *Note 14860 Predicates::. During matching, the function will be called with 14861 the putative operand as the expression and M as the mode argument 14862 (if M is not specified, `VOIDmode' will be used, which normally 14863 causes PREDICATE to accept any mode). If it returns zero, this 14864 instruction pattern fails to match. PREDICATE may be an empty 14865 string; then it means no test is to be done on the operand, so 14866 anything which occurs in this position is valid. 14867 14868 Most of the time, PREDICATE will reject modes other than M--but 14869 not always. For example, the predicate `address_operand' uses M 14870 as the mode of memory ref that the address should be valid for. 14871 Many predicates accept `const_int' nodes even though their mode is 14872 `VOIDmode'. 14873 14874 CONSTRAINT controls reloading and the choice of the best register 14875 class to use for a value, as explained later (*note Constraints::). 14876 If the constraint would be an empty string, it can be omitted. 14877 14878 People are often unclear on the difference between the constraint 14879 and the predicate. The predicate helps decide whether a given 14880 insn matches the pattern. The constraint plays no role in this 14881 decision; instead, it controls various decisions in the case of an 14882 insn which does match. 14883 14884 `(match_scratch:M N CONSTRAINT)' 14885 This expression is also a placeholder for operand number N and 14886 indicates that operand must be a `scratch' or `reg' expression. 14887 14888 When matching patterns, this is equivalent to 14889 14890 (match_operand:M N "scratch_operand" PRED) 14891 14892 but, when generating RTL, it produces a (`scratch':M) expression. 14893 14894 If the last few expressions in a `parallel' are `clobber' 14895 expressions whose operands are either a hard register or 14896 `match_scratch', the combiner can add or delete them when 14897 necessary. *Note Side Effects::. 14898 14899 `(match_dup N)' 14900 This expression is also a placeholder for operand number N. It is 14901 used when the operand needs to appear more than once in the insn. 14902 14903 In construction, `match_dup' acts just like `match_operand': the 14904 operand is substituted into the insn being constructed. But in 14905 matching, `match_dup' behaves differently. It assumes that operand 14906 number N has already been determined by a `match_operand' 14907 appearing earlier in the recognition template, and it matches only 14908 an identical-looking expression. 14909 14910 Note that `match_dup' should not be used to tell the compiler that 14911 a particular register is being used for two operands (example: 14912 `add' that adds one register to another; the second register is 14913 both an input operand and the output operand). Use a matching 14914 constraint (*note Simple Constraints::) for those. `match_dup' is 14915 for the cases where one operand is used in two places in the 14916 template, such as an instruction that computes both a quotient and 14917 a remainder, where the opcode takes two input operands but the RTL 14918 template has to refer to each of those twice; once for the 14919 quotient pattern and once for the remainder pattern. 14920 14921 `(match_operator:M N PREDICATE [OPERANDS...])' 14922 This pattern is a kind of placeholder for a variable RTL expression 14923 code. 14924 14925 When constructing an insn, it stands for an RTL expression whose 14926 expression code is taken from that of operand N, and whose 14927 operands are constructed from the patterns OPERANDS. 14928 14929 When matching an expression, it matches an expression if the 14930 function PREDICATE returns nonzero on that expression _and_ the 14931 patterns OPERANDS match the operands of the expression. 14932 14933 Suppose that the function `commutative_operator' is defined as 14934 follows, to match any expression whose operator is one of the 14935 commutative arithmetic operators of RTL and whose mode is MODE: 14936 14937 int 14938 commutative_integer_operator (x, mode) 14939 rtx x; 14940 enum machine_mode mode; 14941 { 14942 enum rtx_code code = GET_CODE (x); 14943 if (GET_MODE (x) != mode) 14944 return 0; 14945 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 14946 || code == EQ || code == NE); 14947 } 14948 14949 Then the following pattern will match any RTL expression consisting 14950 of a commutative operator applied to two general operands: 14951 14952 (match_operator:SI 3 "commutative_operator" 14953 [(match_operand:SI 1 "general_operand" "g") 14954 (match_operand:SI 2 "general_operand" "g")]) 14955 14956 Here the vector `[OPERANDS...]' contains two patterns because the 14957 expressions to be matched all contain two operands. 14958 14959 When this pattern does match, the two operands of the commutative 14960 operator are recorded as operands 1 and 2 of the insn. (This is 14961 done by the two instances of `match_operand'.) Operand 3 of the 14962 insn will be the entire commutative expression: use `GET_CODE 14963 (operands[3])' to see which commutative operator was used. 14964 14965 The machine mode M of `match_operator' works like that of 14966 `match_operand': it is passed as the second argument to the 14967 predicate function, and that function is solely responsible for 14968 deciding whether the expression to be matched "has" that mode. 14969 14970 When constructing an insn, argument 3 of the gen-function will 14971 specify the operation (i.e. the expression code) for the 14972 expression to be made. It should be an RTL expression, whose 14973 expression code is copied into a new expression whose operands are 14974 arguments 1 and 2 of the gen-function. The subexpressions of 14975 argument 3 are not used; only its expression code matters. 14976 14977 When `match_operator' is used in a pattern for matching an insn, 14978 it usually best if the operand number of the `match_operator' is 14979 higher than that of the actual operands of the insn. This improves 14980 register allocation because the register allocator often looks at 14981 operands 1 and 2 of insns to see if it can do register tying. 14982 14983 There is no way to specify constraints in `match_operator'. The 14984 operand of the insn which corresponds to the `match_operator' 14985 never has any constraints because it is never reloaded as a whole. 14986 However, if parts of its OPERANDS are matched by `match_operand' 14987 patterns, those parts may have constraints of their own. 14988 14989 `(match_op_dup:M N[OPERANDS...])' 14990 Like `match_dup', except that it applies to operators instead of 14991 operands. When constructing an insn, operand number N will be 14992 substituted at this point. But in matching, `match_op_dup' behaves 14993 differently. It assumes that operand number N has already been 14994 determined by a `match_operator' appearing earlier in the 14995 recognition template, and it matches only an identical-looking 14996 expression. 14997 14998 `(match_parallel N PREDICATE [SUBPAT...])' 14999 This pattern is a placeholder for an insn that consists of a 15000 `parallel' expression with a variable number of elements. This 15001 expression should only appear at the top level of an insn pattern. 15002 15003 When constructing an insn, operand number N will be substituted at 15004 this point. When matching an insn, it matches if the body of the 15005 insn is a `parallel' expression with at least as many elements as 15006 the vector of SUBPAT expressions in the `match_parallel', if each 15007 SUBPAT matches the corresponding element of the `parallel', _and_ 15008 the function PREDICATE returns nonzero on the `parallel' that is 15009 the body of the insn. It is the responsibility of the predicate 15010 to validate elements of the `parallel' beyond those listed in the 15011 `match_parallel'. 15012 15013 A typical use of `match_parallel' is to match load and store 15014 multiple expressions, which can contain a variable number of 15015 elements in a `parallel'. For example, 15016 15017 (define_insn "" 15018 [(match_parallel 0 "load_multiple_operation" 15019 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 15020 (match_operand:SI 2 "memory_operand" "m")) 15021 (use (reg:SI 179)) 15022 (clobber (reg:SI 179))])] 15023 "" 15024 "loadm 0,0,%1,%2") 15025 15026 This example comes from `a29k.md'. The function 15027 `load_multiple_operation' is defined in `a29k.c' and checks that 15028 subsequent elements in the `parallel' are the same as the `set' in 15029 the pattern, except that they are referencing subsequent registers 15030 and memory locations. 15031 15032 An insn that matches this pattern might look like: 15033 15034 (parallel 15035 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 15036 (use (reg:SI 179)) 15037 (clobber (reg:SI 179)) 15038 (set (reg:SI 21) 15039 (mem:SI (plus:SI (reg:SI 100) 15040 (const_int 4)))) 15041 (set (reg:SI 22) 15042 (mem:SI (plus:SI (reg:SI 100) 15043 (const_int 8))))]) 15044 15045 `(match_par_dup N [SUBPAT...])' 15046 Like `match_op_dup', but for `match_parallel' instead of 15047 `match_operator'. 15048 15049 15050 15051 File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 15052 15053 14.5 Output Templates and Operand Substitution 15054 ============================================== 15055 15056 The "output template" is a string which specifies how to output the 15057 assembler code for an instruction pattern. Most of the template is a 15058 fixed string which is output literally. The character `%' is used to 15059 specify where to substitute an operand; it can also be used to identify 15060 places where different variants of the assembler require different 15061 syntax. 15062 15063 In the simplest case, a `%' followed by a digit N says to output 15064 operand N at that point in the string. 15065 15066 `%' followed by a letter and a digit says to output an operand in an 15067 alternate fashion. Four letters have standard, built-in meanings 15068 described below. The machine description macro `PRINT_OPERAND' can 15069 define additional letters with nonstandard meanings. 15070 15071 `%cDIGIT' can be used to substitute an operand that is a constant 15072 value without the syntax that normally indicates an immediate operand. 15073 15074 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is 15075 negated before printing. 15076 15077 `%aDIGIT' can be used to substitute an operand as if it were a memory 15078 reference, with the actual operand treated as the address. This may be 15079 useful when outputting a "load address" instruction, because often the 15080 assembler syntax for such an instruction requires you to write the 15081 operand as if it were a memory reference. 15082 15083 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction. 15084 15085 `%=' outputs a number which is unique to each instruction in the 15086 entire compilation. This is useful for making local labels to be 15087 referred to more than once in a single template that generates multiple 15088 assembler instructions. 15089 15090 `%' followed by a punctuation character specifies a substitution that 15091 does not use an operand. Only one case is standard: `%%' outputs a `%' 15092 into the assembler code. Other nonstandard cases can be defined in the 15093 `PRINT_OPERAND' macro. You must also define which punctuation 15094 characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro. 15095 15096 The template may generate multiple assembler instructions. Write the 15097 text for the instructions, with `\;' between them. 15098 15099 When the RTL contains two operands which are required by constraint to 15100 match each other, the output template must refer only to the 15101 lower-numbered operand. Matching operands are not always identical, 15102 and the rest of the compiler arranges to put the proper RTL expression 15103 for printing into the lower-numbered operand. 15104 15105 One use of nonstandard letters or punctuation following `%' is to 15106 distinguish between different assembler languages for the same machine; 15107 for example, Motorola syntax versus MIT syntax for the 68000. Motorola 15108 syntax requires periods in most opcode names, while MIT syntax does 15109 not. For example, the opcode `movel' in MIT syntax is `move.l' in 15110 Motorola syntax. The same file of patterns is used for both kinds of 15111 output syntax, but the character sequence `%.' is used in each place 15112 where Motorola syntax wants a period. The `PRINT_OPERAND' macro for 15113 Motorola syntax defines the sequence to output a period; the macro for 15114 MIT syntax defines it to do nothing. 15115 15116 As a special case, a template consisting of the single character `#' 15117 instructs the compiler to first split the insn, and then output the 15118 resulting instructions separately. This helps eliminate redundancy in 15119 the output templates. If you have a `define_insn' that needs to emit 15120 multiple assembler instructions, and there is an matching `define_split' 15121 already defined, then you can simply use `#' as the output template 15122 instead of writing an output template that emits the multiple assembler 15123 instructions. 15124 15125 If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of 15126 the form `{option0|option1|option2}' in the templates. These describe 15127 multiple variants of assembler language syntax. *Note Instruction 15128 Output::. 15129 15130 15131 File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 15132 15133 14.6 C Statements for Assembler Output 15134 ====================================== 15135 15136 Often a single fixed template string cannot produce correct and 15137 efficient assembler code for all the cases that are recognized by a 15138 single instruction pattern. For example, the opcodes may depend on the 15139 kinds of operands; or some unfortunate combinations of operands may 15140 require extra machine instructions. 15141 15142 If the output control string starts with a `@', then it is actually a 15143 series of templates, each on a separate line. (Blank lines and leading 15144 spaces and tabs are ignored.) The templates correspond to the 15145 pattern's constraint alternatives (*note Multi-Alternative::). For 15146 example, if a target machine has a two-address add instruction `addr' 15147 to add into a register and another `addm' to add a register to memory, 15148 you might write this pattern: 15149 15150 (define_insn "addsi3" 15151 [(set (match_operand:SI 0 "general_operand" "=r,m") 15152 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 15153 (match_operand:SI 2 "general_operand" "g,r")))] 15154 "" 15155 "@ 15156 addr %2,%0 15157 addm %2,%0") 15158 15159 If the output control string starts with a `*', then it is not an 15160 output template but rather a piece of C program that should compute a 15161 template. It should execute a `return' statement to return the 15162 template-string you want. Most such templates use C string literals, 15163 which require doublequote characters to delimit them. To include these 15164 doublequote characters in the string, prefix each one with `\'. 15165 15166 If the output control string is written as a brace block instead of a 15167 double-quoted string, it is automatically assumed to be C code. In that 15168 case, it is not necessary to put in a leading asterisk, or to escape the 15169 doublequotes surrounding C string literals. 15170 15171 The operands may be found in the array `operands', whose C data type 15172 is `rtx []'. 15173 15174 It is very common to select different ways of generating assembler code 15175 based on whether an immediate operand is within a certain range. Be 15176 careful when doing this, because the result of `INTVAL' is an integer 15177 on the host machine. If the host machine has more bits in an `int' 15178 than the target machine has in the mode in which the constant will be 15179 used, then some of the bits you get from `INTVAL' will be superfluous. 15180 For proper results, you must carefully disregard the values of those 15181 bits. 15182 15183 It is possible to output an assembler instruction and then go on to 15184 output or compute more of them, using the subroutine `output_asm_insn'. 15185 This receives two arguments: a template-string and a vector of 15186 operands. The vector may be `operands', or it may be another array of 15187 `rtx' that you declare locally and initialize yourself. 15188 15189 When an insn pattern has multiple alternatives in its constraints, 15190 often the appearance of the assembler code is determined mostly by 15191 which alternative was matched. When this is so, the C code can test 15192 the variable `which_alternative', which is the ordinal number of the 15193 alternative that was actually satisfied (0 for the first, 1 for the 15194 second alternative, etc.). 15195 15196 For example, suppose there are two opcodes for storing zero, `clrreg' 15197 for registers and `clrmem' for memory locations. Here is how a pattern 15198 could use `which_alternative' to choose between them: 15199 15200 (define_insn "" 15201 [(set (match_operand:SI 0 "general_operand" "=r,m") 15202 (const_int 0))] 15203 "" 15204 { 15205 return (which_alternative == 0 15206 ? "clrreg %0" : "clrmem %0"); 15207 }) 15208 15209 The example above, where the assembler code to generate was _solely_ 15210 determined by the alternative, could also have been specified as 15211 follows, having the output control string start with a `@': 15212 15213 (define_insn "" 15214 [(set (match_operand:SI 0 "general_operand" "=r,m") 15215 (const_int 0))] 15216 "" 15217 "@ 15218 clrreg %0 15219 clrmem %0") 15220 15221 15222 File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 15223 15224 14.7 Predicates 15225 =============== 15226 15227 A predicate determines whether a `match_operand' or `match_operator' 15228 expression matches, and therefore whether the surrounding instruction 15229 pattern will be used for that combination of operands. GCC has a 15230 number of machine-independent predicates, and you can define 15231 machine-specific predicates as needed. By convention, predicates used 15232 with `match_operand' have names that end in `_operand', and those used 15233 with `match_operator' have names that end in `_operator'. 15234 15235 All predicates are Boolean functions (in the mathematical sense) of 15236 two arguments: the RTL expression that is being considered at that 15237 position in the instruction pattern, and the machine mode that the 15238 `match_operand' or `match_operator' specifies. In this section, the 15239 first argument is called OP and the second argument MODE. Predicates 15240 can be called from C as ordinary two-argument functions; this can be 15241 useful in output templates or other machine-specific code. 15242 15243 Operand predicates can allow operands that are not actually acceptable 15244 to the hardware, as long as the constraints give reload the ability to 15245 fix them up (*note Constraints::). However, GCC will usually generate 15246 better code if the predicates specify the requirements of the machine 15247 instructions as closely as possible. Reload cannot fix up operands 15248 that must be constants ("immediate operands"); you must use a predicate 15249 that allows only constants, or else enforce the requirement in the 15250 extra condition. 15251 15252 Most predicates handle their MODE argument in a uniform manner. If 15253 MODE is `VOIDmode' (unspecified), then OP can have any mode. If MODE 15254 is anything else, then OP must have the same mode, unless OP is a 15255 `CONST_INT' or integer `CONST_DOUBLE'. These RTL expressions always 15256 have `VOIDmode', so it would be counterproductive to check that their 15257 mode matches. Instead, predicates that accept `CONST_INT' and/or 15258 integer `CONST_DOUBLE' check that the value stored in the constant will 15259 fit in the requested mode. 15260 15261 Predicates with this behavior are called "normal". `genrecog' can 15262 optimize the instruction recognizer based on knowledge of how normal 15263 predicates treat modes. It can also diagnose certain kinds of common 15264 errors in the use of normal predicates; for instance, it is almost 15265 always an error to use a normal predicate without specifying a mode. 15266 15267 Predicates that do something different with their MODE argument are 15268 called "special". The generic predicates `address_operand' and 15269 `pmode_register_operand' are special predicates. `genrecog' does not 15270 do any optimizations or diagnosis when special predicates are used. 15271 15272 * Menu: 15273 15274 * Machine-Independent Predicates:: Predicates available to all back ends. 15275 * Defining Predicates:: How to write machine-specific predicate 15276 functions. 15277 15278 15279 File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 15280 15281 14.7.1 Machine-Independent Predicates 15282 ------------------------------------- 15283 15284 These are the generic predicates available to all back ends. They are 15285 defined in `recog.c'. The first category of predicates allow only 15286 constant, or "immediate", operands. 15287 15288 -- Function: immediate_operand 15289 This predicate allows any sort of constant that fits in MODE. It 15290 is an appropriate choice for instructions that take operands that 15291 must be constant. 15292 15293 -- Function: const_int_operand 15294 This predicate allows any `CONST_INT' expression that fits in 15295 MODE. It is an appropriate choice for an immediate operand that 15296 does not allow a symbol or label. 15297 15298 -- Function: const_double_operand 15299 This predicate accepts any `CONST_DOUBLE' expression that has 15300 exactly MODE. If MODE is `VOIDmode', it will also accept 15301 `CONST_INT'. It is intended for immediate floating point 15302 constants. 15303 15304 The second category of predicates allow only some kind of machine 15305 register. 15306 15307 -- Function: register_operand 15308 This predicate allows any `REG' or `SUBREG' expression that is 15309 valid for MODE. It is often suitable for arithmetic instruction 15310 operands on a RISC machine. 15311 15312 -- Function: pmode_register_operand 15313 This is a slight variant on `register_operand' which works around 15314 a limitation in the machine-description reader. 15315 15316 (match_operand N "pmode_register_operand" CONSTRAINT) 15317 15318 means exactly what 15319 15320 (match_operand:P N "register_operand" CONSTRAINT) 15321 15322 would mean, if the machine-description reader accepted `:P' mode 15323 suffixes. Unfortunately, it cannot, because `Pmode' is an alias 15324 for some other mode, and might vary with machine-specific options. 15325 *Note Misc::. 15326 15327 -- Function: scratch_operand 15328 This predicate allows hard registers and `SCRATCH' expressions, 15329 but not pseudo-registers. It is used internally by 15330 `match_scratch'; it should not be used directly. 15331 15332 The third category of predicates allow only some kind of memory 15333 reference. 15334 15335 -- Function: memory_operand 15336 This predicate allows any valid reference to a quantity of mode 15337 MODE in memory, as determined by the weak form of 15338 `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 15339 15340 -- Function: address_operand 15341 This predicate is a little unusual; it allows any operand that is a 15342 valid expression for the _address_ of a quantity of mode MODE, 15343 again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'. 15344 To first order, if `(mem:MODE (EXP))' is acceptable to 15345 `memory_operand', then EXP is acceptable to `address_operand'. 15346 Note that EXP does not necessarily have the mode MODE. 15347 15348 -- Function: indirect_operand 15349 This is a stricter form of `memory_operand' which allows only 15350 memory references with a `general_operand' as the address 15351 expression. New uses of this predicate are discouraged, because 15352 `general_operand' is very permissive, so it's hard to tell what an 15353 `indirect_operand' does or does not allow. If a target has 15354 different requirements for memory operands for different 15355 instructions, it is better to define target-specific predicates 15356 which enforce the hardware's requirements explicitly. 15357 15358 -- Function: push_operand 15359 This predicate allows a memory reference suitable for pushing a 15360 value onto the stack. This will be a `MEM' which refers to 15361 `stack_pointer_rtx', with a side-effect in its address expression 15362 (*note Incdec::); which one is determined by the `STACK_PUSH_CODE' 15363 macro (*note Frame Layout::). 15364 15365 -- Function: pop_operand 15366 This predicate allows a memory reference suitable for popping a 15367 value off the stack. Again, this will be a `MEM' referring to 15368 `stack_pointer_rtx', with a side-effect in its address expression. 15369 However, this time `STACK_POP_CODE' is expected. 15370 15371 The fourth category of predicates allow some combination of the above 15372 operands. 15373 15374 -- Function: nonmemory_operand 15375 This predicate allows any immediate or register operand valid for 15376 MODE. 15377 15378 -- Function: nonimmediate_operand 15379 This predicate allows any register or memory operand valid for 15380 MODE. 15381 15382 -- Function: general_operand 15383 This predicate allows any immediate, register, or memory operand 15384 valid for MODE. 15385 15386 Finally, there is one generic operator predicate. 15387 15388 -- Function: comparison_operator 15389 This predicate matches any expression which performs an arithmetic 15390 comparison in MODE; that is, `COMPARISON_P' is true for the 15391 expression code. 15392 15393 15394 File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 15395 15396 14.7.2 Defining Machine-Specific Predicates 15397 ------------------------------------------- 15398 15399 Many machines have requirements for their operands that cannot be 15400 expressed precisely using the generic predicates. You can define 15401 additional predicates using `define_predicate' and 15402 `define_special_predicate' expressions. These expressions have three 15403 operands: 15404 15405 * The name of the predicate, as it will be referred to in 15406 `match_operand' or `match_operator' expressions. 15407 15408 * An RTL expression which evaluates to true if the predicate allows 15409 the operand OP, false if it does not. This expression can only use 15410 the following RTL codes: 15411 15412 `MATCH_OPERAND' 15413 When written inside a predicate expression, a `MATCH_OPERAND' 15414 expression evaluates to true if the predicate it names would 15415 allow OP. The operand number and constraint are ignored. 15416 Due to limitations in `genrecog', you can only refer to 15417 generic predicates and predicates that have already been 15418 defined. 15419 15420 `MATCH_CODE' 15421 This expression evaluates to true if OP or a specified 15422 subexpression of OP has one of a given list of RTX codes. 15423 15424 The first operand of this expression is a string constant 15425 containing a comma-separated list of RTX code names (in lower 15426 case). These are the codes for which the `MATCH_CODE' will 15427 be true. 15428 15429 The second operand is a string constant which indicates what 15430 subexpression of OP to examine. If it is absent or the empty 15431 string, OP itself is examined. Otherwise, the string constant 15432 must be a sequence of digits and/or lowercase letters. Each 15433 character indicates a subexpression to extract from the 15434 current expression; for the first character this is OP, for 15435 the second and subsequent characters it is the result of the 15436 previous character. A digit N extracts `XEXP (E, N)'; a 15437 letter L extracts `XVECEXP (E, 0, N)' where N is the 15438 alphabetic ordinal of L (0 for `a', 1 for 'b', and so on). 15439 The `MATCH_CODE' then examines the RTX code of the 15440 subexpression extracted by the complete string. It is not 15441 possible to extract components of an `rtvec' that is not at 15442 position 0 within its RTX object. 15443 15444 `MATCH_TEST' 15445 This expression has one operand, a string constant containing 15446 a C expression. The predicate's arguments, OP and MODE, are 15447 available with those names in the C expression. The 15448 `MATCH_TEST' evaluates to true if the C expression evaluates 15449 to a nonzero value. `MATCH_TEST' expressions must not have 15450 side effects. 15451 15452 `AND' 15453 `IOR' 15454 `NOT' 15455 `IF_THEN_ELSE' 15456 The basic `MATCH_' expressions can be combined using these 15457 logical operators, which have the semantics of the C operators 15458 `&&', `||', `!', and `? :' respectively. As in Common Lisp, 15459 you may give an `AND' or `IOR' expression an arbitrary number 15460 of arguments; this has exactly the same effect as writing a 15461 chain of two-argument `AND' or `IOR' expressions. 15462 15463 * An optional block of C code, which should execute `return true' if 15464 the predicate is found to match and `return false' if it does not. 15465 It must not have any side effects. The predicate arguments, OP 15466 and MODE, are available with those names. 15467 15468 If a code block is present in a predicate definition, then the RTL 15469 expression must evaluate to true _and_ the code block must execute 15470 `return true' for the predicate to allow the operand. The RTL 15471 expression is evaluated first; do not re-check anything in the 15472 code block that was checked in the RTL expression. 15473 15474 The program `genrecog' scans `define_predicate' and 15475 `define_special_predicate' expressions to determine which RTX codes are 15476 possibly allowed. You should always make this explicit in the RTL 15477 predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'. 15478 15479 Here is an example of a simple predicate definition, from the IA64 15480 machine description: 15481 15482 ;; True if OP is a `SYMBOL_REF' which refers to the sdata section. 15483 (define_predicate "small_addr_symbolic_operand" 15484 (and (match_code "symbol_ref") 15485 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 15486 15487 And here is another, showing the use of the C block. 15488 15489 ;; True if OP is a register operand that is (or could be) a GR reg. 15490 (define_predicate "gr_register_operand" 15491 (match_operand 0 "register_operand") 15492 { 15493 unsigned int regno; 15494 if (GET_CODE (op) == SUBREG) 15495 op = SUBREG_REG (op); 15496 15497 regno = REGNO (op); 15498 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 15499 }) 15500 15501 Predicates written with `define_predicate' automatically include a 15502 test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is 15503 a `CONST_INT' or `CONST_DOUBLE'. They do _not_ check specifically for 15504 integer `CONST_DOUBLE', nor do they test that the value of either kind 15505 of constant fits in the requested mode. This is because 15506 target-specific predicates that take constants usually have to do more 15507 stringent value checks anyway. If you need the exact same treatment of 15508 `CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use 15509 a `MATCH_OPERAND' subexpression to call `const_int_operand', 15510 `const_double_operand', or `immediate_operand'. 15511 15512 Predicates written with `define_special_predicate' do not get any 15513 automatic mode checks, and are treated as having special mode handling 15514 by `genrecog'. 15515 15516 The program `genpreds' is responsible for generating code to test 15517 predicates. It also writes a header file containing function 15518 declarations for all machine-specific predicates. It is not necessary 15519 to declare these predicates in `CPU-protos.h'. 15520 15521 15522 File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 15523 15524 14.8 Operand Constraints 15525 ======================== 15526 15527 Each `match_operand' in an instruction pattern can specify constraints 15528 for the operands allowed. The constraints allow you to fine-tune 15529 matching within the set of operands allowed by the predicate. 15530 15531 Constraints can say whether an operand may be in a register, and which 15532 kinds of register; whether the operand can be a memory reference, and 15533 which kinds of address; whether the operand may be an immediate 15534 constant, and which possible values it may have. Constraints can also 15535 require two operands to match. 15536 15537 * Menu: 15538 15539 * Simple Constraints:: Basic use of constraints. 15540 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 15541 * Class Preferences:: Constraints guide which hard register to put things in. 15542 * Modifiers:: More precise control over effects of constraints. 15543 * Machine Constraints:: Existing constraints for some particular machines. 15544 * Define Constraints:: How to define machine-specific constraints. 15545 * C Constraint Interface:: How to test constraints from C code. 15546 15547 15548 File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 15549 15550 14.8.1 Simple Constraints 15551 ------------------------- 15552 15553 The simplest kind of constraint is a string full of letters, each of 15554 which describes one kind of operand that is permitted. Here are the 15555 letters that are allowed: 15556 15557 whitespace 15558 Whitespace characters are ignored and can be inserted at any 15559 position except the first. This enables each alternative for 15560 different operands to be visually aligned in the machine 15561 description even if they have different number of constraints and 15562 modifiers. 15563 15564 `m' 15565 A memory operand is allowed, with any kind of address that the 15566 machine supports in general. 15567 15568 `o' 15569 A memory operand is allowed, but only if the address is 15570 "offsettable". This means that adding a small integer (actually, 15571 the width in bytes of the operand, as determined by its machine 15572 mode) may be added to the address and the result is also a valid 15573 memory address. 15574 15575 For example, an address which is constant is offsettable; so is an 15576 address that is the sum of a register and a constant (as long as a 15577 slightly larger constant is also within the range of 15578 address-offsets supported by the machine); but an autoincrement or 15579 autodecrement address is not offsettable. More complicated 15580 indirect/indexed addresses may or may not be offsettable depending 15581 on the other addressing modes that the machine supports. 15582 15583 Note that in an output operand which can be matched by another 15584 operand, the constraint letter `o' is valid only when accompanied 15585 by both `<' (if the target machine has predecrement addressing) 15586 and `>' (if the target machine has preincrement addressing). 15587 15588 `V' 15589 A memory operand that is not offsettable. In other words, 15590 anything that would fit the `m' constraint but not the `o' 15591 constraint. 15592 15593 `<' 15594 A memory operand with autodecrement addressing (either 15595 predecrement or postdecrement) is allowed. 15596 15597 `>' 15598 A memory operand with autoincrement addressing (either 15599 preincrement or postincrement) is allowed. 15600 15601 `r' 15602 A register operand is allowed provided that it is in a general 15603 register. 15604 15605 `i' 15606 An immediate integer operand (one with constant value) is allowed. 15607 This includes symbolic constants whose values will be known only at 15608 assembly time or later. 15609 15610 `n' 15611 An immediate integer operand with a known numeric value is allowed. 15612 Many systems cannot support assembly-time constants for operands 15613 less than a word wide. Constraints for these operands should use 15614 `n' rather than `i'. 15615 15616 `I', `J', `K', ... `P' 15617 Other letters in the range `I' through `P' may be defined in a 15618 machine-dependent fashion to permit immediate integer operands with 15619 explicit integer values in specified ranges. For example, on the 15620 68000, `I' is defined to stand for the range of values 1 to 8. 15621 This is the range permitted as a shift count in the shift 15622 instructions. 15623 15624 `E' 15625 An immediate floating operand (expression code `const_double') is 15626 allowed, but only if the target floating point format is the same 15627 as that of the host machine (on which the compiler is running). 15628 15629 `F' 15630 An immediate floating operand (expression code `const_double' or 15631 `const_vector') is allowed. 15632 15633 `G', `H' 15634 `G' and `H' may be defined in a machine-dependent fashion to 15635 permit immediate floating operands in particular ranges of values. 15636 15637 `s' 15638 An immediate integer operand whose value is not an explicit 15639 integer is allowed. 15640 15641 This might appear strange; if an insn allows a constant operand 15642 with a value not known at compile time, it certainly must allow 15643 any known value. So why use `s' instead of `i'? Sometimes it 15644 allows better code to be generated. 15645 15646 For example, on the 68000 in a fullword instruction it is possible 15647 to use an immediate operand; but if the immediate value is between 15648 -128 and 127, better code results from loading the value into a 15649 register and using the register. This is because the load into 15650 the register can be done with a `moveq' instruction. We arrange 15651 for this to happen by defining the letter `K' to mean "any integer 15652 outside the range -128 to 127", and then specifying `Ks' in the 15653 operand constraints. 15654 15655 `g' 15656 Any register, memory or immediate integer operand is allowed, 15657 except for registers that are not general registers. 15658 15659 `X' 15660 Any operand whatsoever is allowed, even if it does not satisfy 15661 `general_operand'. This is normally used in the constraint of a 15662 `match_scratch' when certain alternatives will not actually 15663 require a scratch register. 15664 15665 `0', `1', `2', ... `9' 15666 An operand that matches the specified operand number is allowed. 15667 If a digit is used together with letters within the same 15668 alternative, the digit should come last. 15669 15670 This number is allowed to be more than a single digit. If multiple 15671 digits are encountered consecutively, they are interpreted as a 15672 single decimal integer. There is scant chance for ambiguity, 15673 since to-date it has never been desirable that `10' be interpreted 15674 as matching either operand 1 _or_ operand 0. Should this be 15675 desired, one can use multiple alternatives instead. 15676 15677 This is called a "matching constraint" and what it really means is 15678 that the assembler has only a single operand that fills two roles 15679 considered separate in the RTL insn. For example, an add insn has 15680 two input operands and one output operand in the RTL, but on most 15681 CISC machines an add instruction really has only two operands, one 15682 of them an input-output operand: 15683 15684 addl #35,r12 15685 15686 Matching constraints are used in these circumstances. More 15687 precisely, the two operands that match must include one input-only 15688 operand and one output-only operand. Moreover, the digit must be a 15689 smaller number than the number of the operand that uses it in the 15690 constraint. 15691 15692 For operands to match in a particular case usually means that they 15693 are identical-looking RTL expressions. But in a few special cases 15694 specific kinds of dissimilarity are allowed. For example, `*x' as 15695 an input operand will match `*x++' as an output operand. For 15696 proper results in such cases, the output template should always 15697 use the output-operand's number when printing the operand. 15698 15699 `p' 15700 An operand that is a valid memory address is allowed. This is for 15701 "load address" and "push address" instructions. 15702 15703 `p' in the constraint must be accompanied by `address_operand' as 15704 the predicate in the `match_operand'. This predicate interprets 15705 the mode specified in the `match_operand' as the mode of the memory 15706 reference for which the address would be valid. 15707 15708 OTHER-LETTERS 15709 Other letters can be defined in machine-dependent fashion to stand 15710 for particular classes of registers or other arbitrary operand 15711 types. `d', `a' and `f' are defined on the 68000/68020 to stand 15712 for data, address and floating point registers. 15713 15714 In order to have valid assembler code, each operand must satisfy its 15715 constraint. But a failure to do so does not prevent the pattern from 15716 applying to an insn. Instead, it directs the compiler to modify the 15717 code so that the constraint will be satisfied. Usually this is done by 15718 copying an operand into a register. 15719 15720 Contrast, therefore, the two instruction patterns that follow: 15721 15722 (define_insn "" 15723 [(set (match_operand:SI 0 "general_operand" "=r") 15724 (plus:SI (match_dup 0) 15725 (match_operand:SI 1 "general_operand" "r")))] 15726 "" 15727 "...") 15728 15729 which has two operands, one of which must appear in two places, and 15730 15731 (define_insn "" 15732 [(set (match_operand:SI 0 "general_operand" "=r") 15733 (plus:SI (match_operand:SI 1 "general_operand" "0") 15734 (match_operand:SI 2 "general_operand" "r")))] 15735 "" 15736 "...") 15737 15738 which has three operands, two of which are required by a constraint to 15739 be identical. If we are considering an insn of the form 15740 15741 (insn N PREV NEXT 15742 (set (reg:SI 3) 15743 (plus:SI (reg:SI 6) (reg:SI 109))) 15744 ...) 15745 15746 the first pattern would not apply at all, because this insn does not 15747 contain two identical subexpressions in the right place. The pattern 15748 would say, "That does not look like an add instruction; try other 15749 patterns". The second pattern would say, "Yes, that's an add 15750 instruction, but there is something wrong with it". It would direct 15751 the reload pass of the compiler to generate additional insns to make 15752 the constraint true. The results might look like this: 15753 15754 (insn N2 PREV N 15755 (set (reg:SI 3) (reg:SI 6)) 15756 ...) 15757 15758 (insn N N2 NEXT 15759 (set (reg:SI 3) 15760 (plus:SI (reg:SI 3) (reg:SI 109))) 15761 ...) 15762 15763 It is up to you to make sure that each operand, in each pattern, has 15764 constraints that can handle any RTL expression that could be present for 15765 that operand. (When multiple alternatives are in use, each pattern 15766 must, for each possible combination of operand expressions, have at 15767 least one alternative which can handle that combination of operands.) 15768 The constraints don't need to _allow_ any possible operand--when this is 15769 the case, they do not constrain--but they must at least point the way to 15770 reloading any possible operand so that it will fit. 15771 15772 * If the constraint accepts whatever operands the predicate permits, 15773 there is no problem: reloading is never necessary for this operand. 15774 15775 For example, an operand whose constraints permit everything except 15776 registers is safe provided its predicate rejects registers. 15777 15778 An operand whose predicate accepts only constant values is safe 15779 provided its constraints include the letter `i'. If any possible 15780 constant value is accepted, then nothing less than `i' will do; if 15781 the predicate is more selective, then the constraints may also be 15782 more selective. 15783 15784 * Any operand expression can be reloaded by copying it into a 15785 register. So if an operand's constraints allow some kind of 15786 register, it is certain to be safe. It need not permit all 15787 classes of registers; the compiler knows how to copy a register 15788 into another register of the proper class in order to make an 15789 instruction valid. 15790 15791 * A nonoffsettable memory reference can be reloaded by copying the 15792 address into a register. So if the constraint uses the letter 15793 `o', all memory references are taken care of. 15794 15795 * A constant operand can be reloaded by allocating space in memory to 15796 hold it as preinitialized data. Then the memory reference can be 15797 used in place of the constant. So if the constraint uses the 15798 letters `o' or `m', constant operands are not a problem. 15799 15800 * If the constraint permits a constant and a pseudo register used in 15801 an insn was not allocated to a hard register and is equivalent to 15802 a constant, the register will be replaced with the constant. If 15803 the predicate does not permit a constant and the insn is 15804 re-recognized for some reason, the compiler will crash. Thus the 15805 predicate must always recognize any objects allowed by the 15806 constraint. 15807 15808 If the operand's predicate can recognize registers, but the constraint 15809 does not permit them, it can make the compiler crash. When this 15810 operand happens to be a register, the reload pass will be stymied, 15811 because it does not know how to copy a register temporarily into memory. 15812 15813 If the predicate accepts a unary operator, the constraint applies to 15814 the operand. For example, the MIPS processor at ISA level 3 supports an 15815 instruction which adds two registers in `SImode' to produce a `DImode' 15816 result, but only if the registers are correctly sign extended. This 15817 predicate for the input operands accepts a `sign_extend' of an `SImode' 15818 register. Write the constraint to indicate the type of register that 15819 is required for the operand of the `sign_extend'. 15820 15821 15822 File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 15823 15824 14.8.2 Multiple Alternative Constraints 15825 --------------------------------------- 15826 15827 Sometimes a single instruction has multiple alternative sets of possible 15828 operands. For example, on the 68000, a logical-or instruction can 15829 combine register or an immediate value into memory, or it can combine 15830 any kind of operand into a register; but it cannot combine one memory 15831 location into another. 15832 15833 These constraints are represented as multiple alternatives. An 15834 alternative can be described by a series of letters for each operand. 15835 The overall constraint for an operand is made from the letters for this 15836 operand from the first alternative, a comma, the letters for this 15837 operand from the second alternative, a comma, and so on until the last 15838 alternative. Here is how it is done for fullword logical-or on the 15839 68000: 15840 15841 (define_insn "iorsi3" 15842 [(set (match_operand:SI 0 "general_operand" "=m,d") 15843 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 15844 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 15845 ...) 15846 15847 The first alternative has `m' (memory) for operand 0, `0' for operand 15848 1 (meaning it must match operand 0), and `dKs' for operand 2. The 15849 second alternative has `d' (data register) for operand 0, `0' for 15850 operand 1, and `dmKs' for operand 2. The `=' and `%' in the 15851 constraints apply to all the alternatives; their meaning is explained 15852 in the next section (*note Class Preferences::). 15853 15854 If all the operands fit any one alternative, the instruction is valid. 15855 Otherwise, for each alternative, the compiler counts how many 15856 instructions must be added to copy the operands so that that 15857 alternative applies. The alternative requiring the least copying is 15858 chosen. If two alternatives need the same amount of copying, the one 15859 that comes first is chosen. These choices can be altered with the `?' 15860 and `!' characters: 15861 15862 `?' 15863 Disparage slightly the alternative that the `?' appears in, as a 15864 choice when no alternative applies exactly. The compiler regards 15865 this alternative as one unit more costly for each `?' that appears 15866 in it. 15867 15868 `!' 15869 Disparage severely the alternative that the `!' appears in. This 15870 alternative can still be used if it fits without reloading, but if 15871 reloading is needed, some other alternative will be used. 15872 15873 When an insn pattern has multiple alternatives in its constraints, 15874 often the appearance of the assembler code is determined mostly by which 15875 alternative was matched. When this is so, the C code for writing the 15876 assembler code can use the variable `which_alternative', which is the 15877 ordinal number of the alternative that was actually satisfied (0 for 15878 the first, 1 for the second alternative, etc.). *Note Output 15879 Statement::. 15880 15881 15882 File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 15883 15884 14.8.3 Register Class Preferences 15885 --------------------------------- 15886 15887 The operand constraints have another function: they enable the compiler 15888 to decide which kind of hardware register a pseudo register is best 15889 allocated to. The compiler examines the constraints that apply to the 15890 insns that use the pseudo register, looking for the machine-dependent 15891 letters such as `d' and `a' that specify classes of registers. The 15892 pseudo register is put in whichever class gets the most "votes". The 15893 constraint letters `g' and `r' also vote: they vote in favor of a 15894 general register. The machine description says which registers are 15895 considered general. 15896 15897 Of course, on some machines all registers are equivalent, and no 15898 register classes are defined. Then none of this complexity is relevant. 15899 15900 15901 File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 15902 15903 14.8.4 Constraint Modifier Characters 15904 ------------------------------------- 15905 15906 Here are constraint modifier characters. 15907 15908 `=' 15909 Means that this operand is write-only for this instruction: the 15910 previous value is discarded and replaced by output data. 15911 15912 `+' 15913 Means that this operand is both read and written by the 15914 instruction. 15915 15916 When the compiler fixes up the operands to satisfy the constraints, 15917 it needs to know which operands are inputs to the instruction and 15918 which are outputs from it. `=' identifies an output; `+' 15919 identifies an operand that is both input and output; all other 15920 operands are assumed to be input only. 15921 15922 If you specify `=' or `+' in a constraint, you put it in the first 15923 character of the constraint string. 15924 15925 `&' 15926 Means (in a particular alternative) that this operand is an 15927 "earlyclobber" operand, which is modified before the instruction is 15928 finished using the input operands. Therefore, this operand may 15929 not lie in a register that is used as an input operand or as part 15930 of any memory address. 15931 15932 `&' applies only to the alternative in which it is written. In 15933 constraints with multiple alternatives, sometimes one alternative 15934 requires `&' while others do not. See, for example, the `movdf' 15935 insn of the 68000. 15936 15937 An input operand can be tied to an earlyclobber operand if its only 15938 use as an input occurs before the early result is written. Adding 15939 alternatives of this form often allows GCC to produce better code 15940 when only some of the inputs can be affected by the earlyclobber. 15941 See, for example, the `mulsi3' insn of the ARM. 15942 15943 `&' does not obviate the need to write `='. 15944 15945 `%' 15946 Declares the instruction to be commutative for this operand and the 15947 following operand. This means that the compiler may interchange 15948 the two operands if that is the cheapest way to make all operands 15949 fit the constraints. This is often used in patterns for addition 15950 instructions that really have only two operands: the result must 15951 go in one of the arguments. Here for example, is how the 68000 15952 halfword-add instruction is defined: 15953 15954 (define_insn "addhi3" 15955 [(set (match_operand:HI 0 "general_operand" "=m,r") 15956 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 15957 (match_operand:HI 2 "general_operand" "di,g")))] 15958 ...) 15959 GCC can only handle one commutative pair in an asm; if you use 15960 more, the compiler may fail. Note that you need not use the 15961 modifier if the two alternatives are strictly identical; this 15962 would only waste time in the reload pass. The modifier is not 15963 operational after register allocation, so the result of 15964 `define_peephole2' and `define_split's performed after reload 15965 cannot rely on `%' to make the intended insn match. 15966 15967 `#' 15968 Says that all following characters, up to the next comma, are to be 15969 ignored as a constraint. They are significant only for choosing 15970 register preferences. 15971 15972 `*' 15973 Says that the following character should be ignored when choosing 15974 register preferences. `*' has no effect on the meaning of the 15975 constraint as a constraint, and no effect on reloading. 15976 15977 Here is an example: the 68000 has an instruction to sign-extend a 15978 halfword in a data register, and can also sign-extend a value by 15979 copying it into an address register. While either kind of 15980 register is acceptable, the constraints on an address-register 15981 destination are less strict, so it is best if register allocation 15982 makes an address register its goal. Therefore, `*' is used so 15983 that the `d' constraint letter (for data register) is ignored when 15984 computing register preferences. 15985 15986 (define_insn "extendhisi2" 15987 [(set (match_operand:SI 0 "general_operand" "=*d,a") 15988 (sign_extend:SI 15989 (match_operand:HI 1 "general_operand" "0,g")))] 15990 ...) 15991 15992 15993 File: gccint.info, Node: Machine Constraints, Next: Define Constraints, Prev: Modifiers, Up: Constraints 15994 15995 14.8.5 Constraints for Particular Machines 15996 ------------------------------------------ 15997 15998 Whenever possible, you should use the general-purpose constraint letters 15999 in `asm' arguments, since they will convey meaning more readily to 16000 people reading your code. Failing that, use the constraint letters 16001 that usually have very similar meanings across architectures. The most 16002 commonly used constraints are `m' and `r' (for memory and 16003 general-purpose registers respectively; *note Simple Constraints::), and 16004 `I', usually the letter indicating the most common immediate-constant 16005 format. 16006 16007 Each architecture defines additional constraints. These constraints 16008 are used by the compiler itself for instruction generation, as well as 16009 for `asm' statements; therefore, some of the constraints are not 16010 particularly useful for `asm'. Here is a summary of some of the 16011 machine-dependent constraints available on some particular machines; it 16012 includes both constraints that are useful for `asm' and constraints 16013 that aren't. The compiler source file mentioned in the table heading 16014 for each architecture is the definitive reference for the meanings of 16015 that architecture's constraints. 16016 16017 _ARM family--`config/arm/arm.h'_ 16018 16019 `f' 16020 Floating-point register 16021 16022 `w' 16023 VFP floating-point register 16024 16025 `F' 16026 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 16027 4.0, 5.0 or 10.0 16028 16029 `G' 16030 Floating-point constant that would satisfy the constraint `F' 16031 if it were negated 16032 16033 `I' 16034 Integer that is valid as an immediate operand in a data 16035 processing instruction. That is, an integer in the range 0 16036 to 255 rotated by a multiple of 2 16037 16038 `J' 16039 Integer in the range -4095 to 4095 16040 16041 `K' 16042 Integer that satisfies constraint `I' when inverted (ones 16043 complement) 16044 16045 `L' 16046 Integer that satisfies constraint `I' when negated (twos 16047 complement) 16048 16049 `M' 16050 Integer in the range 0 to 32 16051 16052 `Q' 16053 A memory reference where the exact address is in a single 16054 register (``m'' is preferable for `asm' statements) 16055 16056 `R' 16057 An item in the constant pool 16058 16059 `S' 16060 A symbol in the text segment of the current file 16061 16062 `Uv' 16063 A memory reference suitable for VFP load/store insns 16064 (reg+constant offset) 16065 16066 `Uy' 16067 A memory reference suitable for iWMMXt load/store 16068 instructions. 16069 16070 `Uq' 16071 A memory reference suitable for the ARMv4 ldrsb instruction. 16072 16073 _AVR family--`config/avr/constraints.md'_ 16074 16075 `l' 16076 Registers from r0 to r15 16077 16078 `a' 16079 Registers from r16 to r23 16080 16081 `d' 16082 Registers from r16 to r31 16083 16084 `w' 16085 Registers from r24 to r31. These registers can be used in 16086 `adiw' command 16087 16088 `e' 16089 Pointer register (r26-r31) 16090 16091 `b' 16092 Base pointer register (r28-r31) 16093 16094 `q' 16095 Stack pointer register (SPH:SPL) 16096 16097 `t' 16098 Temporary register r0 16099 16100 `x' 16101 Register pair X (r27:r26) 16102 16103 `y' 16104 Register pair Y (r29:r28) 16105 16106 `z' 16107 Register pair Z (r31:r30) 16108 16109 `I' 16110 Constant greater than -1, less than 64 16111 16112 `J' 16113 Constant greater than -64, less than 1 16114 16115 `K' 16116 Constant integer 2 16117 16118 `L' 16119 Constant integer 0 16120 16121 `M' 16122 Constant that fits in 8 bits 16123 16124 `N' 16125 Constant integer -1 16126 16127 `O' 16128 Constant integer 8, 16, or 24 16129 16130 `P' 16131 Constant integer 1 16132 16133 `G' 16134 A floating point constant 0.0 16135 16136 `R' 16137 Integer constant in the range -6 ... 5. 16138 16139 `Q' 16140 A memory address based on Y or Z pointer with displacement. 16141 16142 _CRX Architecture--`config/crx/crx.h'_ 16143 16144 `b' 16145 Registers from r0 to r14 (registers without stack pointer) 16146 16147 `l' 16148 Register r16 (64-bit accumulator lo register) 16149 16150 `h' 16151 Register r17 (64-bit accumulator hi register) 16152 16153 `k' 16154 Register pair r16-r17. (64-bit accumulator lo-hi pair) 16155 16156 `I' 16157 Constant that fits in 3 bits 16158 16159 `J' 16160 Constant that fits in 4 bits 16161 16162 `K' 16163 Constant that fits in 5 bits 16164 16165 `L' 16166 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 16167 16168 `G' 16169 Floating point constant that is legal for store immediate 16170 16171 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 16172 16173 `a' 16174 General register 1 16175 16176 `f' 16177 Floating point register 16178 16179 `q' 16180 Shift amount register 16181 16182 `x' 16183 Floating point register (deprecated) 16184 16185 `y' 16186 Upper floating point register (32-bit), floating point 16187 register (64-bit) 16188 16189 `Z' 16190 Any register 16191 16192 `I' 16193 Signed 11-bit integer constant 16194 16195 `J' 16196 Signed 14-bit integer constant 16197 16198 `K' 16199 Integer constant that can be deposited with a `zdepi' 16200 instruction 16201 16202 `L' 16203 Signed 5-bit integer constant 16204 16205 `M' 16206 Integer constant 0 16207 16208 `N' 16209 Integer constant that can be loaded with a `ldil' instruction 16210 16211 `O' 16212 Integer constant whose value plus one is a power of 2 16213 16214 `P' 16215 Integer constant that can be used for `and' operations in 16216 `depi' and `extru' instructions 16217 16218 `S' 16219 Integer constant 31 16220 16221 `U' 16222 Integer constant 63 16223 16224 `G' 16225 Floating-point constant 0.0 16226 16227 `A' 16228 A `lo_sum' data-linkage-table memory operand 16229 16230 `Q' 16231 A memory operand that can be used as the destination operand 16232 of an integer store instruction 16233 16234 `R' 16235 A scaled or unscaled indexed memory operand 16236 16237 `T' 16238 A memory operand for floating-point loads and stores 16239 16240 `W' 16241 A register indirect memory operand 16242 16243 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 16244 16245 `b' 16246 Address base register 16247 16248 `f' 16249 Floating point register 16250 16251 `v' 16252 Vector register 16253 16254 `h' 16255 `MQ', `CTR', or `LINK' register 16256 16257 `q' 16258 `MQ' register 16259 16260 `c' 16261 `CTR' register 16262 16263 `l' 16264 `LINK' register 16265 16266 `x' 16267 `CR' register (condition register) number 0 16268 16269 `y' 16270 `CR' register (condition register) 16271 16272 `z' 16273 `FPMEM' stack memory for FPR-GPR transfers 16274 16275 `I' 16276 Signed 16-bit constant 16277 16278 `J' 16279 Unsigned 16-bit constant shifted left 16 bits (use `L' 16280 instead for `SImode' constants) 16281 16282 `K' 16283 Unsigned 16-bit constant 16284 16285 `L' 16286 Signed 16-bit constant shifted left 16 bits 16287 16288 `M' 16289 Constant larger than 31 16290 16291 `N' 16292 Exact power of 2 16293 16294 `O' 16295 Zero 16296 16297 `P' 16298 Constant whose negation is a signed 16-bit constant 16299 16300 `G' 16301 Floating point constant that can be loaded into a register 16302 with one instruction per word 16303 16304 `H' 16305 Integer/Floating point constant that can be loaded into a 16306 register using three instructions 16307 16308 `Q' 16309 Memory operand that is an offset from a register (`m' is 16310 preferable for `asm' statements) 16311 16312 `Z' 16313 Memory operand that is an indexed or indirect from a register 16314 (`m' is preferable for `asm' statements) 16315 16316 `R' 16317 AIX TOC entry 16318 16319 `a' 16320 Address operand that is an indexed or indirect from a 16321 register (`p' is preferable for `asm' statements) 16322 16323 `S' 16324 Constant suitable as a 64-bit mask operand 16325 16326 `T' 16327 Constant suitable as a 32-bit mask operand 16328 16329 `U' 16330 System V Release 4 small data area reference 16331 16332 `t' 16333 AND masks that can be performed by two rldic{l, r} 16334 instructions 16335 16336 `W' 16337 Vector constant that does not require memory 16338 16339 16340 _MorphoTech family--`config/mt/mt.h'_ 16341 16342 `I' 16343 Constant for an arithmetic insn (16-bit signed integer). 16344 16345 `J' 16346 The constant 0. 16347 16348 `K' 16349 Constant for a logical insn (16-bit zero-extended integer). 16350 16351 `L' 16352 A constant that can be loaded with `lui' (i.e. the bottom 16 16353 bits are zero). 16354 16355 `M' 16356 A constant that takes two words to load (i.e. not matched by 16357 `I', `K', or `L'). 16358 16359 `N' 16360 Negative 16-bit constants other than -65536. 16361 16362 `O' 16363 A 15-bit signed integer constant. 16364 16365 `P' 16366 A positive 16-bit constant. 16367 16368 _Intel 386--`config/i386/constraints.md'_ 16369 16370 `R' 16371 Legacy register--the eight integer registers available on all 16372 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 16373 16374 `q' 16375 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 16376 `c', and `d'; in 64-bit mode, any integer register. 16377 16378 `Q' 16379 Any register accessible as `Rh': `a', `b', `c', and `d'. 16380 16381 `l' 16382 Any register that can be used as the index in a base+index 16383 memory access: that is, any general register except the stack 16384 pointer. 16385 16386 `a' 16387 The `a' register. 16388 16389 `b' 16390 The `b' register. 16391 16392 `c' 16393 The `c' register. 16394 16395 `d' 16396 The `d' register. 16397 16398 `S' 16399 The `si' register. 16400 16401 `D' 16402 The `di' register. 16403 16404 `A' 16405 The `a' and `d' registers, as a pair (for instructions that 16406 return half the result in one and half in the other). 16407 16408 `f' 16409 Any 80387 floating-point (stack) register. 16410 16411 `t' 16412 Top of 80387 floating-point stack (`%st(0)'). 16413 16414 `u' 16415 Second from top of 80387 floating-point stack (`%st(1)'). 16416 16417 `y' 16418 Any MMX register. 16419 16420 `x' 16421 Any SSE register. 16422 16423 `Y' 16424 Any SSE2 register. 16425 16426 `I' 16427 Integer constant in the range 0 ... 31, for 32-bit shifts. 16428 16429 `J' 16430 Integer constant in the range 0 ... 63, for 64-bit shifts. 16431 16432 `K' 16433 Signed 8-bit integer constant. 16434 16435 `L' 16436 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 16437 16438 `M' 16439 0, 1, 2, or 3 (shifts for the `lea' instruction). 16440 16441 `N' 16442 Unsigned 8-bit integer constant (for `in' and `out' 16443 instructions). 16444 16445 `O' 16446 Integer constant in the range 0 ... 127, for 128-bit shifts. 16447 16448 `G' 16449 Standard 80387 floating point constant. 16450 16451 `C' 16452 Standard SSE floating point constant. 16453 16454 `e' 16455 32-bit signed integer constant, or a symbolic reference known 16456 to fit that range (for immediate operands in sign-extending 16457 x86-64 instructions). 16458 16459 `Z' 16460 32-bit unsigned integer constant, or a symbolic reference 16461 known to fit that range (for immediate operands in 16462 zero-extending x86-64 instructions). 16463 16464 16465 _Intel IA-64--`config/ia64/ia64.h'_ 16466 16467 `a' 16468 General register `r0' to `r3' for `addl' instruction 16469 16470 `b' 16471 Branch register 16472 16473 `c' 16474 Predicate register (`c' as in "conditional") 16475 16476 `d' 16477 Application register residing in M-unit 16478 16479 `e' 16480 Application register residing in I-unit 16481 16482 `f' 16483 Floating-point register 16484 16485 `m' 16486 Memory operand. Remember that `m' allows postincrement and 16487 postdecrement which require printing with `%Pn' on IA-64. 16488 Use `S' to disallow postincrement and postdecrement. 16489 16490 `G' 16491 Floating-point constant 0.0 or 1.0 16492 16493 `I' 16494 14-bit signed integer constant 16495 16496 `J' 16497 22-bit signed integer constant 16498 16499 `K' 16500 8-bit signed integer constant for logical instructions 16501 16502 `L' 16503 8-bit adjusted signed integer constant for compare pseudo-ops 16504 16505 `M' 16506 6-bit unsigned integer constant for shift counts 16507 16508 `N' 16509 9-bit signed integer constant for load and store 16510 postincrements 16511 16512 `O' 16513 The constant zero 16514 16515 `P' 16516 0 or -1 for `dep' instruction 16517 16518 `Q' 16519 Non-volatile memory for floating-point loads and stores 16520 16521 `R' 16522 Integer constant in the range 1 to 4 for `shladd' instruction 16523 16524 `S' 16525 Memory operand except postincrement and postdecrement 16526 16527 _FRV--`config/frv/frv.h'_ 16528 16529 `a' 16530 Register in the class `ACC_REGS' (`acc0' to `acc7'). 16531 16532 `b' 16533 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 16534 16535 `c' 16536 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 16537 to `icc3'). 16538 16539 `d' 16540 Register in the class `GPR_REGS' (`gr0' to `gr63'). 16541 16542 `e' 16543 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 16544 registers are excluded not in the class but through the use 16545 of a machine mode larger than 4 bytes. 16546 16547 `f' 16548 Register in the class `FPR_REGS' (`fr0' to `fr63'). 16549 16550 `h' 16551 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 16552 registers are excluded not in the class but through the use 16553 of a machine mode larger than 4 bytes. 16554 16555 `l' 16556 Register in the class `LR_REG' (the `lr' register). 16557 16558 `q' 16559 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 16560 Register numbers not divisible by 4 are excluded not in the 16561 class but through the use of a machine mode larger than 8 16562 bytes. 16563 16564 `t' 16565 Register in the class `ICC_REGS' (`icc0' to `icc3'). 16566 16567 `u' 16568 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 16569 16570 `v' 16571 Register in the class `ICR_REGS' (`cc4' to `cc7'). 16572 16573 `w' 16574 Register in the class `FCR_REGS' (`cc0' to `cc3'). 16575 16576 `x' 16577 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 16578 Register numbers not divisible by 4 are excluded not in the 16579 class but through the use of a machine mode larger than 8 16580 bytes. 16581 16582 `z' 16583 Register in the class `SPR_REGS' (`lcr' and `lr'). 16584 16585 `A' 16586 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 16587 16588 `B' 16589 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 16590 16591 `C' 16592 Register in the class `CR_REGS' (`cc0' to `cc7'). 16593 16594 `G' 16595 Floating point constant zero 16596 16597 `I' 16598 6-bit signed integer constant 16599 16600 `J' 16601 10-bit signed integer constant 16602 16603 `L' 16604 16-bit signed integer constant 16605 16606 `M' 16607 16-bit unsigned integer constant 16608 16609 `N' 16610 12-bit signed integer constant that is negative--i.e. in the 16611 range of -2048 to -1 16612 16613 `O' 16614 Constant zero 16615 16616 `P' 16617 12-bit signed integer constant that is greater than 16618 zero--i.e. in the range of 1 to 2047. 16619 16620 16621 _Blackfin family--`config/bfin/bfin.h'_ 16622 16623 `a' 16624 P register 16625 16626 `d' 16627 D register 16628 16629 `z' 16630 A call clobbered P register. 16631 16632 `qN' 16633 A single register. If N is in the range 0 to 7, the 16634 corresponding D register. If it is `A', then the register P0. 16635 16636 `D' 16637 Even-numbered D register 16638 16639 `W' 16640 Odd-numbered D register 16641 16642 `e' 16643 Accumulator register. 16644 16645 `A' 16646 Even-numbered accumulator register. 16647 16648 `B' 16649 Odd-numbered accumulator register. 16650 16651 `b' 16652 I register 16653 16654 `v' 16655 B register 16656 16657 `f' 16658 M register 16659 16660 `c' 16661 Registers used for circular buffering, i.e. I, B, or L 16662 registers. 16663 16664 `C' 16665 The CC register. 16666 16667 `t' 16668 LT0 or LT1. 16669 16670 `k' 16671 LC0 or LC1. 16672 16673 `u' 16674 LB0 or LB1. 16675 16676 `x' 16677 Any D, P, B, M, I or L register. 16678 16679 `y' 16680 Additional registers typically used only in prologues and 16681 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 16682 USP. 16683 16684 `w' 16685 Any register except accumulators or CC. 16686 16687 `Ksh' 16688 Signed 16 bit integer (in the range -32768 to 32767) 16689 16690 `Kuh' 16691 Unsigned 16 bit integer (in the range 0 to 65535) 16692 16693 `Ks7' 16694 Signed 7 bit integer (in the range -64 to 63) 16695 16696 `Ku7' 16697 Unsigned 7 bit integer (in the range 0 to 127) 16698 16699 `Ku5' 16700 Unsigned 5 bit integer (in the range 0 to 31) 16701 16702 `Ks4' 16703 Signed 4 bit integer (in the range -8 to 7) 16704 16705 `Ks3' 16706 Signed 3 bit integer (in the range -3 to 4) 16707 16708 `Ku3' 16709 Unsigned 3 bit integer (in the range 0 to 7) 16710 16711 `PN' 16712 Constant N, where N is a single-digit constant in the range 0 16713 to 4. 16714 16715 `PA' 16716 An integer equal to one of the MACFLAG_XXX constants that is 16717 suitable for use with either accumulator. 16718 16719 `PB' 16720 An integer equal to one of the MACFLAG_XXX constants that is 16721 suitable for use only with accumulator A1. 16722 16723 `M1' 16724 Constant 255. 16725 16726 `M2' 16727 Constant 65535. 16728 16729 `J' 16730 An integer constant with exactly a single bit set. 16731 16732 `L' 16733 An integer constant with all bits set except exactly one. 16734 16735 `H' 16736 16737 `Q' 16738 Any SYMBOL_REF. 16739 16740 _M32C--`config/m32c/m32c.c'_ 16741 16742 `Rsp' 16743 `Rfb' 16744 `Rsb' 16745 `$sp', `$fb', `$sb'. 16746 16747 `Rcr' 16748 Any control register, when they're 16 bits wide (nothing if 16749 control registers are 24 bits wide) 16750 16751 `Rcl' 16752 Any control register, when they're 24 bits wide. 16753 16754 `R0w' 16755 `R1w' 16756 `R2w' 16757 `R3w' 16758 $r0, $r1, $r2, $r3. 16759 16760 `R02' 16761 $r0 or $r2, or $r2r0 for 32 bit values. 16762 16763 `R13' 16764 $r1 or $r3, or $r3r1 for 32 bit values. 16765 16766 `Rdi' 16767 A register that can hold a 64 bit value. 16768 16769 `Rhl' 16770 $r0 or $r1 (registers with addressable high/low bytes) 16771 16772 `R23' 16773 $r2 or $r3 16774 16775 `Raa' 16776 Address registers 16777 16778 `Raw' 16779 Address registers when they're 16 bits wide. 16780 16781 `Ral' 16782 Address registers when they're 24 bits wide. 16783 16784 `Rqi' 16785 Registers that can hold QI values. 16786 16787 `Rad' 16788 Registers that can be used with displacements ($a0, $a1, $sb). 16789 16790 `Rsi' 16791 Registers that can hold 32 bit values. 16792 16793 `Rhi' 16794 Registers that can hold 16 bit values. 16795 16796 `Rhc' 16797 Registers chat can hold 16 bit values, including all control 16798 registers. 16799 16800 `Rra' 16801 $r0 through R1, plus $a0 and $a1. 16802 16803 `Rfl' 16804 The flags register. 16805 16806 `Rmm' 16807 The memory-based pseudo-registers $mem0 through $mem15. 16808 16809 `Rpi' 16810 Registers that can hold pointers (16 bit registers for r8c, 16811 m16c; 24 bit registers for m32cm, m32c). 16812 16813 `Rpa' 16814 Matches multiple registers in a PARALLEL to form a larger 16815 register. Used to match function return values. 16816 16817 `Is3' 16818 -8 ... 7 16819 16820 `IS1' 16821 -128 ... 127 16822 16823 `IS2' 16824 -32768 ... 32767 16825 16826 `IU2' 16827 0 ... 65535 16828 16829 `In4' 16830 -8 ... -1 or 1 ... 8 16831 16832 `In5' 16833 -16 ... -1 or 1 ... 16 16834 16835 `In6' 16836 -32 ... -1 or 1 ... 32 16837 16838 `IM2' 16839 -65536 ... -1 16840 16841 `Ilb' 16842 An 8 bit value with exactly one bit set. 16843 16844 `Ilw' 16845 A 16 bit value with exactly one bit set. 16846 16847 `Sd' 16848 The common src/dest memory addressing modes. 16849 16850 `Sa' 16851 Memory addressed using $a0 or $a1. 16852 16853 `Si' 16854 Memory addressed with immediate addresses. 16855 16856 `Ss' 16857 Memory addressed using the stack pointer ($sp). 16858 16859 `Sf' 16860 Memory addressed using the frame base register ($fb). 16861 16862 `Ss' 16863 Memory addressed using the small base register ($sb). 16864 16865 `S1' 16866 $r1h 16867 16868 _MIPS--`config/mips/constraints.md'_ 16869 16870 `d' 16871 An address register. This is equivalent to `r' unless 16872 generating MIPS16 code. 16873 16874 `f' 16875 A floating-point register (if available). 16876 16877 `h' 16878 The `hi' register. 16879 16880 `l' 16881 The `lo' register. 16882 16883 `x' 16884 The `hi' and `lo' registers. 16885 16886 `c' 16887 A register suitable for use in an indirect jump. This will 16888 always be `$25' for `-mabicalls'. 16889 16890 `y' 16891 Equivalent to `r'; retained for backwards compatibility. 16892 16893 `z' 16894 A floating-point condition code register. 16895 16896 `I' 16897 A signed 16-bit constant (for arithmetic instructions). 16898 16899 `J' 16900 Integer zero. 16901 16902 `K' 16903 An unsigned 16-bit constant (for logic instructions). 16904 16905 `L' 16906 A signed 32-bit constant in which the lower 16 bits are zero. 16907 Such constants can be loaded using `lui'. 16908 16909 `M' 16910 A constant that cannot be loaded using `lui', `addiu' or 16911 `ori'. 16912 16913 `N' 16914 A constant in the range -65535 to -1 (inclusive). 16915 16916 `O' 16917 A signed 15-bit constant. 16918 16919 `P' 16920 A constant in the range 1 to 65535 (inclusive). 16921 16922 `G' 16923 Floating-point zero. 16924 16925 `R' 16926 An address that can be used in a non-macro load or store. 16927 16928 _Motorola 680x0--`config/m68k/constraints.md'_ 16929 16930 `a' 16931 Address register 16932 16933 `d' 16934 Data register 16935 16936 `f' 16937 68881 floating-point register, if available 16938 16939 `I' 16940 Integer in the range 1 to 8 16941 16942 `J' 16943 16-bit signed number 16944 16945 `K' 16946 Signed number whose magnitude is greater than 0x80 16947 16948 `L' 16949 Integer in the range -8 to -1 16950 16951 `M' 16952 Signed number whose magnitude is greater than 0x100 16953 16954 `N' 16955 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 16956 16957 `O' 16958 16 (for rotate using swap) 16959 16960 `P' 16961 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 16962 16963 `R' 16964 Numbers that mov3q can handle 16965 16966 `G' 16967 Floating point constant that is not a 68881 constant 16968 16969 `S' 16970 Operands that satisfy 'm' when -mpcrel is in effect 16971 16972 `T' 16973 Operands that satisfy 's' when -mpcrel is not in effect 16974 16975 `Q' 16976 Address register indirect addressing mode 16977 16978 `U' 16979 Register offset addressing 16980 16981 `W' 16982 const_call_operand 16983 16984 `Cs' 16985 symbol_ref or const 16986 16987 `Ci' 16988 const_int 16989 16990 `C0' 16991 const_int 0 16992 16993 `Cj' 16994 Range of signed numbers that don't fit in 16 bits 16995 16996 `Cmvq' 16997 Integers valid for mvq 16998 16999 `Capsw' 17000 Integers valid for a moveq followed by a swap 17001 17002 `Cmvz' 17003 Integers valid for mvz 17004 17005 `Cmvs' 17006 Integers valid for mvs 17007 17008 `Ap' 17009 push_operand 17010 17011 `Ac' 17012 Non-register operands allowed in clr 17013 17014 17015 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 17016 17017 `a' 17018 Register `a' 17019 17020 `b' 17021 Register `b' 17022 17023 `d' 17024 Register `d' 17025 17026 `q' 17027 An 8-bit register 17028 17029 `t' 17030 Temporary soft register _.tmp 17031 17032 `u' 17033 A soft register _.d1 to _.d31 17034 17035 `w' 17036 Stack pointer register 17037 17038 `x' 17039 Register `x' 17040 17041 `y' 17042 Register `y' 17043 17044 `z' 17045 Pseudo register `z' (replaced by `x' or `y' at the end) 17046 17047 `A' 17048 An address register: x, y or z 17049 17050 `B' 17051 An address register: x or y 17052 17053 `D' 17054 Register pair (x:d) to form a 32-bit value 17055 17056 `L' 17057 Constants in the range -65536 to 65535 17058 17059 `M' 17060 Constants whose 16-bit low part is zero 17061 17062 `N' 17063 Constant integer 1 or -1 17064 17065 `O' 17066 Constant integer 16 17067 17068 `P' 17069 Constants in the range -8 to 2 17070 17071 17072 _SPARC--`config/sparc/sparc.h'_ 17073 17074 `f' 17075 Floating-point register on the SPARC-V8 architecture and 17076 lower floating-point register on the SPARC-V9 architecture. 17077 17078 `e' 17079 Floating-point register. It is equivalent to `f' on the 17080 SPARC-V8 architecture and contains both lower and upper 17081 floating-point registers on the SPARC-V9 architecture. 17082 17083 `c' 17084 Floating-point condition code register. 17085 17086 `d' 17087 Lower floating-point register. It is only valid on the 17088 SPARC-V9 architecture when the Visual Instruction Set is 17089 available. 17090 17091 `b' 17092 Floating-point register. It is only valid on the SPARC-V9 17093 architecture when the Visual Instruction Set is available. 17094 17095 `h' 17096 64-bit global or out register for the SPARC-V8+ architecture. 17097 17098 `I' 17099 Signed 13-bit constant 17100 17101 `J' 17102 Zero 17103 17104 `K' 17105 32-bit constant with the low 12 bits clear (a constant that 17106 can be loaded with the `sethi' instruction) 17107 17108 `L' 17109 A constant in the range supported by `movcc' instructions 17110 17111 `M' 17112 A constant in the range supported by `movrcc' instructions 17113 17114 `N' 17115 Same as `K', except that it verifies that bits that are not 17116 in the lower 32-bit range are all zero. Must be used instead 17117 of `K' for modes wider than `SImode' 17118 17119 `O' 17120 The constant 4096 17121 17122 `G' 17123 Floating-point zero 17124 17125 `H' 17126 Signed 13-bit constant, sign-extended to 32 or 64 bits 17127 17128 `Q' 17129 Floating-point constant whose integral representation can be 17130 moved into an integer register using a single sethi 17131 instruction 17132 17133 `R' 17134 Floating-point constant whose integral representation can be 17135 moved into an integer register using a single mov instruction 17136 17137 `S' 17138 Floating-point constant whose integral representation can be 17139 moved into an integer register using a high/lo_sum 17140 instruction sequence 17141 17142 `T' 17143 Memory address aligned to an 8-byte boundary 17144 17145 `U' 17146 Even register 17147 17148 `W' 17149 Memory address for `e' constraint registers 17150 17151 `Y' 17152 Vector zero 17153 17154 17155 _SPU--`config/spu/spu.h'_ 17156 17157 `a' 17158 An immediate which can be loaded with the il/ila/ilh/ilhu 17159 instructions. const_int is treated as a 64 bit value. 17160 17161 `c' 17162 An immediate for and/xor/or instructions. const_int is 17163 treated as a 64 bit value. 17164 17165 `d' 17166 An immediate for the `iohl' instruction. const_int is 17167 treated as a 64 bit value. 17168 17169 `f' 17170 An immediate which can be loaded with `fsmbi'. 17171 17172 `A' 17173 An immediate which can be loaded with the il/ila/ilh/ilhu 17174 instructions. const_int is treated as a 32 bit value. 17175 17176 `B' 17177 An immediate for most arithmetic instructions. const_int is 17178 treated as a 32 bit value. 17179 17180 `C' 17181 An immediate for and/xor/or instructions. const_int is 17182 treated as a 32 bit value. 17183 17184 `D' 17185 An immediate for the `iohl' instruction. const_int is 17186 treated as a 32 bit value. 17187 17188 `I' 17189 A constant in the range [-64, 63] for shift/rotate 17190 instructions. 17191 17192 `J' 17193 An unsigned 7-bit constant for conversion/nop/channel 17194 instructions. 17195 17196 `K' 17197 A signed 10-bit constant for most arithmetic instructions. 17198 17199 `M' 17200 A signed 16 bit immediate for `stop'. 17201 17202 `N' 17203 An unsigned 16-bit constant for `iohl' and `fsmbi'. 17204 17205 `O' 17206 An unsigned 7-bit constant whose 3 least significant bits are 17207 0. 17208 17209 `P' 17210 An unsigned 3-bit constant for 16-byte rotates and shifts 17211 17212 `R' 17213 Call operand, reg, for indirect calls 17214 17215 `S' 17216 Call operand, symbol, for relative calls. 17217 17218 `T' 17219 Call operand, const_int, for absolute calls. 17220 17221 `U' 17222 An immediate which can be loaded with the il/ila/ilh/ilhu 17223 instructions. const_int is sign extended to 128 bit. 17224 17225 `W' 17226 An immediate for shift and rotate instructions. const_int is 17227 treated as a 32 bit value. 17228 17229 `Y' 17230 An immediate for and/xor/or instructions. const_int is sign 17231 extended as a 128 bit. 17232 17233 `Z' 17234 An immediate for the `iohl' instruction. const_int is sign 17235 extended to 128 bit. 17236 17237 17238 _S/390 and zSeries--`config/s390/s390.h'_ 17239 17240 `a' 17241 Address register (general purpose register except r0) 17242 17243 `c' 17244 Condition code register 17245 17246 `d' 17247 Data register (arbitrary general purpose register) 17248 17249 `f' 17250 Floating-point register 17251 17252 `I' 17253 Unsigned 8-bit constant (0-255) 17254 17255 `J' 17256 Unsigned 12-bit constant (0-4095) 17257 17258 `K' 17259 Signed 16-bit constant (-32768-32767) 17260 17261 `L' 17262 Value appropriate as displacement. 17263 `(0..4095)' 17264 for short displacement 17265 17266 `(-524288..524287)' 17267 for long displacement 17268 17269 `M' 17270 Constant integer with a value of 0x7fffffff. 17271 17272 `N' 17273 Multiple letter constraint followed by 4 parameter letters. 17274 `0..9:' 17275 number of the part counting from most to least 17276 significant 17277 17278 `H,Q:' 17279 mode of the part 17280 17281 `D,S,H:' 17282 mode of the containing operand 17283 17284 `0,F:' 17285 value of the other parts (F--all bits set) 17286 The constraint matches if the specified part of a constant 17287 has a value different from its other parts. 17288 17289 `Q' 17290 Memory reference without index register and with short 17291 displacement. 17292 17293 `R' 17294 Memory reference with index register and short displacement. 17295 17296 `S' 17297 Memory reference without index register but with long 17298 displacement. 17299 17300 `T' 17301 Memory reference with index register and long displacement. 17302 17303 `U' 17304 Pointer with short displacement. 17305 17306 `W' 17307 Pointer with long displacement. 17308 17309 `Y' 17310 Shift count operand. 17311 17312 17313 _Score family--`config/score/score.h'_ 17314 17315 `d' 17316 Registers from r0 to r32. 17317 17318 `e' 17319 Registers from r0 to r16. 17320 17321 `t' 17322 r8--r11 or r22--r27 registers. 17323 17324 `h' 17325 hi register. 17326 17327 `l' 17328 lo register. 17329 17330 `x' 17331 hi + lo register. 17332 17333 `q' 17334 cnt register. 17335 17336 `y' 17337 lcb register. 17338 17339 `z' 17340 scb register. 17341 17342 `a' 17343 cnt + lcb + scb register. 17344 17345 `c' 17346 cr0--cr15 register. 17347 17348 `b' 17349 cp1 registers. 17350 17351 `f' 17352 cp2 registers. 17353 17354 `i' 17355 cp3 registers. 17356 17357 `j' 17358 cp1 + cp2 + cp3 registers. 17359 17360 `I' 17361 High 16-bit constant (32-bit constant with 16 LSBs zero). 17362 17363 `J' 17364 Unsigned 5 bit integer (in the range 0 to 31). 17365 17366 `K' 17367 Unsigned 16 bit integer (in the range 0 to 65535). 17368 17369 `L' 17370 Signed 16 bit integer (in the range -32768 to 32767). 17371 17372 `M' 17373 Unsigned 14 bit integer (in the range 0 to 16383). 17374 17375 `N' 17376 Signed 14 bit integer (in the range -8192 to 8191). 17377 17378 `Z' 17379 Any SYMBOL_REF. 17380 17381 _Xstormy16--`config/stormy16/stormy16.h'_ 17382 17383 `a' 17384 Register r0. 17385 17386 `b' 17387 Register r1. 17388 17389 `c' 17390 Register r2. 17391 17392 `d' 17393 Register r8. 17394 17395 `e' 17396 Registers r0 through r7. 17397 17398 `t' 17399 Registers r0 and r1. 17400 17401 `y' 17402 The carry register. 17403 17404 `z' 17405 Registers r8 and r9. 17406 17407 `I' 17408 A constant between 0 and 3 inclusive. 17409 17410 `J' 17411 A constant that has exactly one bit set. 17412 17413 `K' 17414 A constant that has exactly one bit clear. 17415 17416 `L' 17417 A constant between 0 and 255 inclusive. 17418 17419 `M' 17420 A constant between -255 and 0 inclusive. 17421 17422 `N' 17423 A constant between -3 and 0 inclusive. 17424 17425 `O' 17426 A constant between 1 and 4 inclusive. 17427 17428 `P' 17429 A constant between -4 and -1 inclusive. 17430 17431 `Q' 17432 A memory reference that is a stack push. 17433 17434 `R' 17435 A memory reference that is a stack pop. 17436 17437 `S' 17438 A memory reference that refers to a constant address of known 17439 value. 17440 17441 `T' 17442 The register indicated by Rx (not implemented yet). 17443 17444 `U' 17445 A constant that is not between 2 and 15 inclusive. 17446 17447 `Z' 17448 The constant 0. 17449 17450 17451 _Xtensa--`config/xtensa/constraints.md'_ 17452 17453 `a' 17454 General-purpose 32-bit register 17455 17456 `b' 17457 One-bit boolean register 17458 17459 `A' 17460 MAC16 40-bit accumulator register 17461 17462 `I' 17463 Signed 12-bit integer constant, for use in MOVI instructions 17464 17465 `J' 17466 Signed 8-bit integer constant, for use in ADDI instructions 17467 17468 `K' 17469 Integer constant valid for BccI instructions 17470 17471 `L' 17472 Unsigned constant valid for BccUI instructions 17473 17474 17475 17476 17477 File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Machine Constraints, Up: Constraints 17478 17479 14.8.6 Defining Machine-Specific Constraints 17480 -------------------------------------------- 17481 17482 Machine-specific constraints fall into two categories: register and 17483 non-register constraints. Within the latter category, constraints 17484 which allow subsets of all possible memory or address operands should 17485 be specially marked, to give `reload' more information. 17486 17487 Machine-specific constraints can be given names of arbitrary length, 17488 but they must be entirely composed of letters, digits, underscores 17489 (`_'), and angle brackets (`< >'). Like C identifiers, they must begin 17490 with a letter or underscore. 17491 17492 In order to avoid ambiguity in operand constraint strings, no 17493 constraint can have a name that begins with any other constraint's 17494 name. For example, if `x' is defined as a constraint name, `xy' may 17495 not be, and vice versa. As a consequence of this rule, no constraint 17496 may begin with one of the generic constraint letters: `E F V X g i m n 17497 o p r s'. 17498 17499 Register constraints correspond directly to register classes. *Note 17500 Register Classes::. There is thus not much flexibility in their 17501 definitions. 17502 17503 -- MD Expression: define_register_constraint name regclass docstring 17504 All three arguments are string constants. NAME is the name of the 17505 constraint, as it will appear in `match_operand' expressions. If 17506 NAME is a multi-letter constraint its length shall be the same for 17507 all constraints starting with the same letter. REGCLASS can be 17508 either the name of the corresponding register class (*note 17509 Register Classes::), or a C expression which evaluates to the 17510 appropriate register class. If it is an expression, it must have 17511 no side effects, and it cannot look at the operand. The usual use 17512 of expressions is to map some register constraints to `NO_REGS' 17513 when the register class is not available on a given 17514 subarchitecture. 17515 17516 DOCSTRING is a sentence documenting the meaning of the constraint. 17517 Docstrings are explained further below. 17518 17519 Non-register constraints are more like predicates: the constraint 17520 definition gives a Boolean expression which indicates whether the 17521 constraint matches. 17522 17523 -- MD Expression: define_constraint name docstring exp 17524 The NAME and DOCSTRING arguments are the same as for 17525 `define_register_constraint', but note that the docstring comes 17526 immediately after the name for these expressions. EXP is an RTL 17527 expression, obeying the same rules as the RTL expressions in 17528 predicate definitions. *Note Defining Predicates::, for details. 17529 If it evaluates true, the constraint matches; if it evaluates 17530 false, it doesn't. Constraint expressions should indicate which 17531 RTL codes they might match, just like predicate expressions. 17532 17533 `match_test' C expressions have access to the following variables: 17534 17535 OP 17536 The RTL object defining the operand. 17537 17538 MODE 17539 The machine mode of OP. 17540 17541 IVAL 17542 `INTVAL (OP)', if OP is a `const_int'. 17543 17544 HVAL 17545 `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'. 17546 17547 LVAL 17548 `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'. 17549 17550 RVAL 17551 `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 17552 `const_double'. 17553 17554 The *VAL variables should only be used once another piece of the 17555 expression has verified that OP is the appropriate kind of RTL 17556 object. 17557 17558 Most non-register constraints should be defined with 17559 `define_constraint'. The remaining two definition expressions are only 17560 appropriate for constraints that should be handled specially by 17561 `reload' if they fail to match. 17562 17563 -- MD Expression: define_memory_constraint name docstring exp 17564 Use this expression for constraints that match a subset of all 17565 memory operands: that is, `reload' can make them match by 17566 converting the operand to the form `(mem (reg X))', where X is a 17567 base register (from the register class specified by 17568 `BASE_REG_CLASS', *note Register Classes::). 17569 17570 For example, on the S/390, some instructions do not accept 17571 arbitrary memory references, but only those that do not make use 17572 of an index register. The constraint letter `Q' is defined to 17573 represent a memory address of this type. If `Q' is defined with 17574 `define_memory_constraint', a `Q' constraint can handle any memory 17575 operand, because `reload' knows it can simply copy the memory 17576 address into a base register if required. This is analogous to 17577 the way a `o' constraint can handle any memory operand. 17578 17579 The syntax and semantics are otherwise identical to 17580 `define_constraint'. 17581 17582 -- MD Expression: define_address_constraint name docstring exp 17583 Use this expression for constraints that match a subset of all 17584 address operands: that is, `reload' can make the constraint match 17585 by converting the operand to the form `(reg X)', again with X a 17586 base register. 17587 17588 Constraints defined with `define_address_constraint' can only be 17589 used with the `address_operand' predicate, or machine-specific 17590 predicates that work the same way. They are treated analogously to 17591 the generic `p' constraint. 17592 17593 The syntax and semantics are otherwise identical to 17594 `define_constraint'. 17595 17596 For historical reasons, names beginning with the letters `G H' are 17597 reserved for constraints that match only `const_double's, and names 17598 beginning with the letters `I J K L M N O P' are reserved for 17599 constraints that match only `const_int's. This may change in the 17600 future. For the time being, constraints with these names must be 17601 written in a stylized form, so that `genpreds' can tell you did it 17602 correctly: 17603 17604 (define_constraint "[GHIJKLMNOP]..." 17605 "DOC..." 17606 (and (match_code "const_int") ; `const_double' for G/H 17607 CONDITION...)) ; usually a `match_test' 17608 17609 It is fine to use names beginning with other letters for constraints 17610 that match `const_double's or `const_int's. 17611 17612 Each docstring in a constraint definition should be one or more 17613 complete sentences, marked up in Texinfo format. _They are currently 17614 unused._ In the future they will be copied into the GCC manual, in 17615 *Note Machine Constraints::, replacing the hand-maintained tables 17616 currently found in that section. Also, in the future the compiler may 17617 use this to give more helpful diagnostics when poor choice of `asm' 17618 constraints causes a reload failure. 17619 17620 If you put the pseudo-Texinfo directive `@internal' at the beginning 17621 of a docstring, then (in the future) it will appear only in the 17622 internals manual's version of the machine-specific constraint tables. 17623 Use this for constraints that should not appear in `asm' statements. 17624 17625 17626 File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 17627 17628 14.8.7 Testing constraints from C 17629 --------------------------------- 17630 17631 It is occasionally useful to test a constraint from C code rather than 17632 implicitly via the constraint string in a `match_operand'. The 17633 generated file `tm_p.h' declares a few interfaces for working with 17634 machine-specific constraints. None of these interfaces work with the 17635 generic constraints described in *Note Simple Constraints::. This may 17636 change in the future. 17637 17638 *Warning:* `tm_p.h' may declare other functions that operate on 17639 constraints, besides the ones documented here. Do not use those 17640 functions from machine-dependent code. They exist to implement the old 17641 constraint interface that machine-independent components of the 17642 compiler still expect. They will change or disappear in the future. 17643 17644 Some valid constraint names are not valid C identifiers, so there is a 17645 mangling scheme for referring to them from C. Constraint names that do 17646 not contain angle brackets or underscores are left unchanged. 17647 Underscores are doubled, each `<' is replaced with `_l', and each `>' 17648 with `_g'. Here are some examples: 17649 17650 *Original* *Mangled* 17651 `x' `x' 17652 `P42x' `P42x' 17653 `P4_x' `P4__x' 17654 `P4>x' `P4_gx' 17655 `P4>>' `P4_g_g' 17656 `P4_g>' `P4__g_g' 17657 17658 Throughout this section, the variable C is either a constraint in the 17659 abstract sense, or a constant from `enum constraint_num'; the variable 17660 M is a mangled constraint name (usually as part of a larger identifier). 17661 17662 -- Enum: constraint_num 17663 For each machine-specific constraint, there is a corresponding 17664 enumeration constant: `CONSTRAINT_' plus the mangled name of the 17665 constraint. Functions that take an `enum constraint_num' as an 17666 argument expect one of these constants. 17667 17668 Machine-independent constraints do not have associated constants. 17669 This may change in the future. 17670 17671 -- Function: inline bool satisfies_constraint_M (rtx EXP) 17672 For each machine-specific, non-register constraint M, there is one 17673 of these functions; it returns `true' if EXP satisfies the 17674 constraint. These functions are only visible if `rtl.h' was 17675 included before `tm_p.h'. 17676 17677 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 17678 C) 17679 Like the `satisfies_constraint_M' functions, but the constraint to 17680 test is given as an argument, C. If C specifies a register 17681 constraint, this function will always return `false'. 17682 17683 -- Function: enum reg_class regclass_for_constraint (enum 17684 constraint_num C) 17685 Returns the register class associated with C. If C is not a 17686 register constraint, or those registers are not available for the 17687 currently selected subtarget, returns `NO_REGS'. 17688 17689 Here is an example use of `satisfies_constraint_M'. In peephole 17690 optimizations (*note Peephole Definitions::), operand constraint 17691 strings are ignored, so if there are relevant constraints, they must be 17692 tested in the C condition. In the example, the optimization is applied 17693 if operand 2 does _not_ satisfy the `K' constraint. (This is a 17694 simplified version of a peephole definition from the i386 machine 17695 description.) 17696 17697 (define_peephole2 17698 [(match_scratch:SI 3 "r") 17699 (set (match_operand:SI 0 "register_operand" "") 17700 (mult:SI (match_operand:SI 1 "memory_operand" "") 17701 (match_operand:SI 2 "immediate_operand" "")))] 17702 17703 "!satisfies_constraint_K (operands[2])" 17704 17705 [(set (match_dup 3) (match_dup 1)) 17706 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 17707 17708 "") 17709 17710 17711 File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 17712 17713 14.9 Standard Pattern Names For Generation 17714 ========================================== 17715 17716 Here is a table of the instruction names that are meaningful in the RTL 17717 generation pass of the compiler. Giving one of these names to an 17718 instruction pattern tells the RTL generation pass that it can use the 17719 pattern to accomplish a certain task. 17720 17721 `movM' 17722 Here M stands for a two-letter machine mode name, in lowercase. 17723 This instruction pattern moves data with that machine mode from 17724 operand 1 to operand 0. For example, `movsi' moves full-word data. 17725 17726 If operand 0 is a `subreg' with mode M of a register whose own 17727 mode is wider than M, the effect of this instruction is to store 17728 the specified value in the part of the register that corresponds 17729 to mode M. Bits outside of M, but which are within the same 17730 target word as the `subreg' are undefined. Bits which are outside 17731 the target word are left unchanged. 17732 17733 This class of patterns is special in several ways. First of all, 17734 each of these names up to and including full word size _must_ be 17735 defined, because there is no other way to copy a datum from one 17736 place to another. If there are patterns accepting operands in 17737 larger modes, `movM' must be defined for integer modes of those 17738 sizes. 17739 17740 Second, these patterns are not used solely in the RTL generation 17741 pass. Even the reload pass can generate move insns to copy values 17742 from stack slots into temporary registers. When it does so, one 17743 of the operands is a hard register and the other is an operand 17744 that can need to be reloaded into a register. 17745 17746 Therefore, when given such a pair of operands, the pattern must 17747 generate RTL which needs no reloading and needs no temporary 17748 registers--no registers other than the operands. For example, if 17749 you support the pattern with a `define_expand', then in such a 17750 case the `define_expand' mustn't call `force_reg' or any other such 17751 function which might generate new pseudo registers. 17752 17753 This requirement exists even for subword modes on a RISC machine 17754 where fetching those modes from memory normally requires several 17755 insns and some temporary registers. 17756 17757 During reload a memory reference with an invalid address may be 17758 passed as an operand. Such an address will be replaced with a 17759 valid address later in the reload pass. In this case, nothing may 17760 be done with the address except to use it as it stands. If it is 17761 copied, it will not be replaced with a valid address. No attempt 17762 should be made to make such an address into a valid address and no 17763 routine (such as `change_address') that will do so may be called. 17764 Note that `general_operand' will fail when applied to such an 17765 address. 17766 17767 The global variable `reload_in_progress' (which must be explicitly 17768 declared if required) can be used to determine whether such special 17769 handling is required. 17770 17771 The variety of operands that have reloads depends on the rest of 17772 the machine description, but typically on a RISC machine these can 17773 only be pseudo registers that did not get hard registers, while on 17774 other machines explicit memory references will get optional 17775 reloads. 17776 17777 If a scratch register is required to move an object to or from 17778 memory, it can be allocated using `gen_reg_rtx' prior to life 17779 analysis. 17780 17781 If there are cases which need scratch registers during or after 17782 reload, you must provide an appropriate secondary_reload target 17783 hook. 17784 17785 The macro `can_create_pseudo_p' can be used to determine if it is 17786 unsafe to create new pseudo registers. If this variable is 17787 nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new 17788 pseudo. 17789 17790 The constraints on a `movM' must permit moving any hard register 17791 to any other hard register provided that `HARD_REGNO_MODE_OK' 17792 permits mode M in both registers and `REGISTER_MOVE_COST' applied 17793 to their classes returns a value of 2. 17794 17795 It is obligatory to support floating point `movM' instructions 17796 into and out of any registers that can hold fixed point values, 17797 because unions and structures (which have modes `SImode' or 17798 `DImode') can be in those registers and they may have floating 17799 point members. 17800 17801 There may also be a need to support fixed point `movM' 17802 instructions in and out of floating point registers. 17803 Unfortunately, I have forgotten why this was so, and I don't know 17804 whether it is still true. If `HARD_REGNO_MODE_OK' rejects fixed 17805 point values in floating point registers, then the constraints of 17806 the fixed point `movM' instructions must be designed to avoid ever 17807 trying to reload into a floating point register. 17808 17809 `reload_inM' 17810 `reload_outM' 17811 These named patterns have been obsoleted by the target hook 17812 `secondary_reload'. 17813 17814 Like `movM', but used when a scratch register is required to move 17815 between operand 0 and operand 1. Operand 2 describes the scratch 17816 register. See the discussion of the `SECONDARY_RELOAD_CLASS' 17817 macro in *note Register Classes::. 17818 17819 There are special restrictions on the form of the `match_operand's 17820 used in these patterns. First, only the predicate for the reload 17821 operand is examined, i.e., `reload_in' examines operand 1, but not 17822 the predicates for operand 0 or 2. Second, there may be only one 17823 alternative in the constraints. Third, only a single register 17824 class letter may be used for the constraint; subsequent constraint 17825 letters are ignored. As a special exception, an empty constraint 17826 string matches the `ALL_REGS' register class. This may relieve 17827 ports of the burden of defining an `ALL_REGS' constraint letter 17828 just for these patterns. 17829 17830 `movstrictM' 17831 Like `movM' except that if operand 0 is a `subreg' with mode M of 17832 a register whose natural mode is wider, the `movstrictM' 17833 instruction is guaranteed not to alter any of the register except 17834 the part which belongs to mode M. 17835 17836 `movmisalignM' 17837 This variant of a move pattern is designed to load or store a value 17838 from a memory address that is not naturally aligned for its mode. 17839 For a store, the memory will be in operand 0; for a load, the 17840 memory will be in operand 1. The other operand is guaranteed not 17841 to be a memory, so that it's easy to tell whether this is a load 17842 or store. 17843 17844 This pattern is used by the autovectorizer, and when expanding a 17845 `MISALIGNED_INDIRECT_REF' expression. 17846 17847 `load_multiple' 17848 Load several consecutive memory locations into consecutive 17849 registers. Operand 0 is the first of the consecutive registers, 17850 operand 1 is the first memory location, and operand 2 is a 17851 constant: the number of consecutive registers. 17852 17853 Define this only if the target machine really has such an 17854 instruction; do not define this if the most efficient way of 17855 loading consecutive registers from memory is to do them one at a 17856 time. 17857 17858 On some machines, there are restrictions as to which consecutive 17859 registers can be stored into memory, such as particular starting or 17860 ending register numbers or only a range of valid counts. For those 17861 machines, use a `define_expand' (*note Expander Definitions::) and 17862 make the pattern fail if the restrictions are not met. 17863 17864 Write the generated insn as a `parallel' with elements being a 17865 `set' of one register from the appropriate memory location (you may 17866 also need `use' or `clobber' elements). Use a `match_parallel' 17867 (*note RTL Template::) to recognize the insn. See `rs6000.md' for 17868 examples of the use of this insn pattern. 17869 17870 `store_multiple' 17871 Similar to `load_multiple', but store several consecutive registers 17872 into consecutive memory locations. Operand 0 is the first of the 17873 consecutive memory locations, operand 1 is the first register, and 17874 operand 2 is a constant: the number of consecutive registers. 17875 17876 `vec_setM' 17877 Set given field in the vector value. Operand 0 is the vector to 17878 modify, operand 1 is new value of field and operand 2 specify the 17879 field index. 17880 17881 `vec_extractM' 17882 Extract given field from the vector value. Operand 1 is the 17883 vector, operand 2 specify field index and operand 0 place to store 17884 value into. 17885 17886 `vec_extract_evenM' 17887 Extract even elements from the input vectors (operand 1 and 17888 operand 2). The even elements of operand 2 are concatenated to 17889 the even elements of operand 1 in their original order. The result 17890 is stored in operand 0. The output and input vectors should have 17891 the same modes. 17892 17893 `vec_extract_oddM' 17894 Extract odd elements from the input vectors (operand 1 and operand 17895 2). The odd elements of operand 2 are concatenated to the odd 17896 elements of operand 1 in their original order. The result is 17897 stored in operand 0. The output and input vectors should have the 17898 same modes. 17899 17900 `vec_interleave_highM' 17901 Merge high elements of the two input vectors into the output 17902 vector. The output and input vectors should have the same modes 17903 (`N' elements). The high `N/2' elements of the first input vector 17904 are interleaved with the high `N/2' elements of the second input 17905 vector. 17906 17907 `vec_interleave_lowM' 17908 Merge low elements of the two input vectors into the output 17909 vector. The output and input vectors should have the same modes 17910 (`N' elements). The low `N/2' elements of the first input vector 17911 are interleaved with the low `N/2' elements of the second input 17912 vector. 17913 17914 `vec_initM' 17915 Initialize the vector to given values. Operand 0 is the vector to 17916 initialize and operand 1 is parallel containing values for 17917 individual fields. 17918 17919 `pushM1' 17920 Output a push instruction. Operand 0 is value to push. Used only 17921 when `PUSH_ROUNDING' is defined. For historical reason, this 17922 pattern may be missing and in such case an `mov' expander is used 17923 instead, with a `MEM' expression forming the push operation. The 17924 `mov' expander method is deprecated. 17925 17926 `addM3' 17927 Add operand 2 and operand 1, storing the result in operand 0. All 17928 operands must have mode M. This can be used even on two-address 17929 machines, by means of constraints requiring operands 1 and 0 to be 17930 the same location. 17931 17932 `ssaddM3', `usaddM3' 17933 17934 `subM3', `sssubM3', `ussubM3' 17935 17936 `mulM3', `ssmulM3', `usmulM3' 17937 `divM3', `ssdivM3' 17938 `udivM3', `usdivM3' 17939 `modM3', `umodM3' 17940 `uminM3', `umaxM3' 17941 `andM3', `iorM3', `xorM3' 17942 Similar, for other arithmetic operations. 17943 17944 `sminM3', `smaxM3' 17945 Signed minimum and maximum operations. When used with floating 17946 point, if both operands are zeros, or if either operand is `NaN', 17947 then it is unspecified which of the two operands is returned as 17948 the result. 17949 17950 `reduc_smin_M', `reduc_smax_M' 17951 Find the signed minimum/maximum of the elements of a vector. The 17952 vector is operand 1, and the scalar result is stored in the least 17953 significant bits of operand 0 (also a vector). The output and 17954 input vector should have the same modes. 17955 17956 `reduc_umin_M', `reduc_umax_M' 17957 Find the unsigned minimum/maximum of the elements of a vector. The 17958 vector is operand 1, and the scalar result is stored in the least 17959 significant bits of operand 0 (also a vector). The output and 17960 input vector should have the same modes. 17961 17962 `reduc_splus_M' 17963 Compute the sum of the signed elements of a vector. The vector is 17964 operand 1, and the scalar result is stored in the least 17965 significant bits of operand 0 (also a vector). The output and 17966 input vector should have the same modes. 17967 17968 `reduc_uplus_M' 17969 Compute the sum of the unsigned elements of a vector. The vector 17970 is operand 1, and the scalar result is stored in the least 17971 significant bits of operand 0 (also a vector). The output and 17972 input vector should have the same modes. 17973 17974 `sdot_prodM' 17975 17976 `udot_prodM' 17977 Compute the sum of the products of two signed/unsigned elements. 17978 Operand 1 and operand 2 are of the same mode. Their product, which 17979 is of a wider mode, is computed and added to operand 3. Operand 3 17980 is of a mode equal or wider than the mode of the product. The 17981 result is placed in operand 0, which is of the same mode as 17982 operand 3. 17983 17984 `ssum_widenM3' 17985 17986 `usum_widenM3' 17987 Operands 0 and 2 are of the same mode, which is wider than the 17988 mode of operand 1. Add operand 1 to operand 2 and place the 17989 widened result in operand 0. (This is used express accumulation of 17990 elements into an accumulator of a wider mode.) 17991 17992 `vec_shl_M', `vec_shr_M' 17993 Whole vector left/right shift in bits. Operand 1 is a vector to 17994 be shifted. Operand 2 is an integer shift amount in bits. 17995 Operand 0 is where the resulting shifted vector is stored. The 17996 output and input vectors should have the same modes. 17997 17998 `vec_pack_trunc_M' 17999 Narrow (demote) and merge the elements of two vectors. Operands 1 18000 and 2 are vectors of the same mode having N integral or floating 18001 point elements of size S. Operand 0 is the resulting vector in 18002 which 2*N elements of size N/2 are concatenated after narrowing 18003 them down using truncation. 18004 18005 `vec_pack_ssat_M', `vec_pack_usat_M' 18006 Narrow (demote) and merge the elements of two vectors. Operands 1 18007 and 2 are vectors of the same mode having N integral elements of 18008 size S. Operand 0 is the resulting vector in which the elements 18009 of the two input vectors are concatenated after narrowing them 18010 down using signed/unsigned saturating arithmetic. 18011 18012 `vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M' 18013 Narrow, convert to signed/unsigned integral type and merge the 18014 elements of two vectors. Operands 1 and 2 are vectors of the same 18015 mode having N floating point elements of size S. Operand 0 is the 18016 resulting vector in which 2*N elements of size N/2 are 18017 concatenated. 18018 18019 `vec_unpacks_hi_M', `vec_unpacks_lo_M' 18020 Extract and widen (promote) the high/low part of a vector of signed 18021 integral or floating point elements. The input vector (operand 1) 18022 has N elements of size S. Widen (promote) the high/low elements 18023 of the vector using signed or floating point extension and place 18024 the resulting N/2 values of size 2*S in the output vector (operand 18025 0). 18026 18027 `vec_unpacku_hi_M', `vec_unpacku_lo_M' 18028 Extract and widen (promote) the high/low part of a vector of 18029 unsigned integral elements. The input vector (operand 1) has N 18030 elements of size S. Widen (promote) the high/low elements of the 18031 vector using zero extension and place the resulting N/2 values of 18032 size 2*S in the output vector (operand 0). 18033 18034 `vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M' 18035 `vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M' 18036 Extract, convert to floating point type and widen the high/low 18037 part of a vector of signed/unsigned integral elements. The input 18038 vector (operand 1) has N elements of size S. Convert the high/low 18039 elements of the vector using floating point conversion and place 18040 the resulting N/2 values of size 2*S in the output vector (operand 18041 0). 18042 18043 `vec_widen_umult_hi_M', `vec_widen_umult_lo_M' 18044 `vec_widen_smult_hi_M', `vec_widen_smult_lo_M' 18045 Signed/Unsigned widening multiplication. The two inputs (operands 18046 1 and 2) are vectors with N signed/unsigned elements of size S. 18047 Multiply the high/low elements of the two vectors, and put the N/2 18048 products of size 2*S in the output vector (operand 0). 18049 18050 `mulhisi3' 18051 Multiply operands 1 and 2, which have mode `HImode', and store a 18052 `SImode' product in operand 0. 18053 18054 `mulqihi3', `mulsidi3' 18055 Similar widening-multiplication instructions of other widths. 18056 18057 `umulqihi3', `umulhisi3', `umulsidi3' 18058 Similar widening-multiplication instructions that do unsigned 18059 multiplication. 18060 18061 `usmulqihi3', `usmulhisi3', `usmulsidi3' 18062 Similar widening-multiplication instructions that interpret the 18063 first operand as unsigned and the second operand as signed, then 18064 do a signed multiplication. 18065 18066 `smulM3_highpart' 18067 Perform a signed multiplication of operands 1 and 2, which have 18068 mode M, and store the most significant half of the product in 18069 operand 0. The least significant half of the product is discarded. 18070 18071 `umulM3_highpart' 18072 Similar, but the multiplication is unsigned. 18073 18074 `maddMN4' 18075 Multiply operands 1 and 2, sign-extend them to mode N, add operand 18076 3, and store the result in operand 0. Operands 1 and 2 have mode 18077 M and operands 0 and 3 have mode N. Both modes must be integer or 18078 fixed-point modes and N must be twice the size of M. 18079 18080 In other words, `maddMN4' is like `mulMN3' except that it also 18081 adds operand 3. 18082 18083 These instructions are not allowed to `FAIL'. 18084 18085 `umaddMN4' 18086 Like `maddMN4', but zero-extend the multiplication operands 18087 instead of sign-extending them. 18088 18089 `ssmaddMN4' 18090 Like `maddMN4', but all involved operations must be 18091 signed-saturating. 18092 18093 `usmaddMN4' 18094 Like `umaddMN4', but all involved operations must be 18095 unsigned-saturating. 18096 18097 `msubMN4' 18098 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 18099 result from operand 3, and store the result in operand 0. 18100 Operands 1 and 2 have mode M and operands 0 and 3 have mode N. 18101 Both modes must be integer or fixed-point modes and N must be twice 18102 the size of M. 18103 18104 In other words, `msubMN4' is like `mulMN3' except that it also 18105 subtracts the result from operand 3. 18106 18107 These instructions are not allowed to `FAIL'. 18108 18109 `umsubMN4' 18110 Like `msubMN4', but zero-extend the multiplication operands 18111 instead of sign-extending them. 18112 18113 `ssmsubMN4' 18114 Like `msubMN4', but all involved operations must be 18115 signed-saturating. 18116 18117 `usmsubMN4' 18118 Like `umsubMN4', but all involved operations must be 18119 unsigned-saturating. 18120 18121 `divmodM4' 18122 Signed division that produces both a quotient and a remainder. 18123 Operand 1 is divided by operand 2 to produce a quotient stored in 18124 operand 0 and a remainder stored in operand 3. 18125 18126 For machines with an instruction that produces both a quotient and 18127 a remainder, provide a pattern for `divmodM4' but do not provide 18128 patterns for `divM3' and `modM3'. This allows optimization in the 18129 relatively common case when both the quotient and remainder are 18130 computed. 18131 18132 If an instruction that just produces a quotient or just a remainder 18133 exists and is more efficient than the instruction that produces 18134 both, write the output routine of `divmodM4' to call 18135 `find_reg_note' and look for a `REG_UNUSED' note on the quotient 18136 or remainder and generate the appropriate instruction. 18137 18138 `udivmodM4' 18139 Similar, but does unsigned division. 18140 18141 `ashlM3', `ssashlM3', `usashlM3' 18142 Arithmetic-shift operand 1 left by a number of bits specified by 18143 operand 2, and store the result in operand 0. Here M is the mode 18144 of operand 0 and operand 1; operand 2's mode is specified by the 18145 instruction pattern, and the compiler will convert the operand to 18146 that mode before generating the instruction. The meaning of 18147 out-of-range shift counts can optionally be specified by 18148 `TARGET_SHIFT_TRUNCATION_MASK'. *Note 18149 TARGET_SHIFT_TRUNCATION_MASK::. 18150 18151 `ashrM3', `lshrM3', `rotlM3', `rotrM3' 18152 Other shift and rotate instructions, analogous to the `ashlM3' 18153 instructions. 18154 18155 `negM2', `ssnegM2', `usnegM2' 18156 Negate operand 1 and store the result in operand 0. 18157 18158 `absM2' 18159 Store the absolute value of operand 1 into operand 0. 18160 18161 `sqrtM2' 18162 Store the square root of operand 1 into operand 0. 18163 18164 The `sqrt' built-in function of C always uses the mode which 18165 corresponds to the C data type `double' and the `sqrtf' built-in 18166 function uses the mode which corresponds to the C data type 18167 `float'. 18168 18169 `fmodM3' 18170 Store the remainder of dividing operand 1 by operand 2 into 18171 operand 0, rounded towards zero to an integer. 18172 18173 The `fmod' built-in function of C always uses the mode which 18174 corresponds to the C data type `double' and the `fmodf' built-in 18175 function uses the mode which corresponds to the C data type 18176 `float'. 18177 18178 `remainderM3' 18179 Store the remainder of dividing operand 1 by operand 2 into 18180 operand 0, rounded to the nearest integer. 18181 18182 The `remainder' built-in function of C always uses the mode which 18183 corresponds to the C data type `double' and the `remainderf' 18184 built-in function uses the mode which corresponds to the C data 18185 type `float'. 18186 18187 `cosM2' 18188 Store the cosine of operand 1 into operand 0. 18189 18190 The `cos' built-in function of C always uses the mode which 18191 corresponds to the C data type `double' and the `cosf' built-in 18192 function uses the mode which corresponds to the C data type 18193 `float'. 18194 18195 `sinM2' 18196 Store the sine of operand 1 into operand 0. 18197 18198 The `sin' built-in function of C always uses the mode which 18199 corresponds to the C data type `double' and the `sinf' built-in 18200 function uses the mode which corresponds to the C data type 18201 `float'. 18202 18203 `expM2' 18204 Store the exponential of operand 1 into operand 0. 18205 18206 The `exp' built-in function of C always uses the mode which 18207 corresponds to the C data type `double' and the `expf' built-in 18208 function uses the mode which corresponds to the C data type 18209 `float'. 18210 18211 `logM2' 18212 Store the natural logarithm of operand 1 into operand 0. 18213 18214 The `log' built-in function of C always uses the mode which 18215 corresponds to the C data type `double' and the `logf' built-in 18216 function uses the mode which corresponds to the C data type 18217 `float'. 18218 18219 `powM3' 18220 Store the value of operand 1 raised to the exponent operand 2 into 18221 operand 0. 18222 18223 The `pow' built-in function of C always uses the mode which 18224 corresponds to the C data type `double' and the `powf' built-in 18225 function uses the mode which corresponds to the C data type 18226 `float'. 18227 18228 `atan2M3' 18229 Store the arc tangent (inverse tangent) of operand 1 divided by 18230 operand 2 into operand 0, using the signs of both arguments to 18231 determine the quadrant of the result. 18232 18233 The `atan2' built-in function of C always uses the mode which 18234 corresponds to the C data type `double' and the `atan2f' built-in 18235 function uses the mode which corresponds to the C data type 18236 `float'. 18237 18238 `floorM2' 18239 Store the largest integral value not greater than argument. 18240 18241 The `floor' built-in function of C always uses the mode which 18242 corresponds to the C data type `double' and the `floorf' built-in 18243 function uses the mode which corresponds to the C data type 18244 `float'. 18245 18246 `btruncM2' 18247 Store the argument rounded to integer towards zero. 18248 18249 The `trunc' built-in function of C always uses the mode which 18250 corresponds to the C data type `double' and the `truncf' built-in 18251 function uses the mode which corresponds to the C data type 18252 `float'. 18253 18254 `roundM2' 18255 Store the argument rounded to integer away from zero. 18256 18257 The `round' built-in function of C always uses the mode which 18258 corresponds to the C data type `double' and the `roundf' built-in 18259 function uses the mode which corresponds to the C data type 18260 `float'. 18261 18262 `ceilM2' 18263 Store the argument rounded to integer away from zero. 18264 18265 The `ceil' built-in function of C always uses the mode which 18266 corresponds to the C data type `double' and the `ceilf' built-in 18267 function uses the mode which corresponds to the C data type 18268 `float'. 18269 18270 `nearbyintM2' 18271 Store the argument rounded according to the default rounding mode 18272 18273 The `nearbyint' built-in function of C always uses the mode which 18274 corresponds to the C data type `double' and the `nearbyintf' 18275 built-in function uses the mode which corresponds to the C data 18276 type `float'. 18277 18278 `rintM2' 18279 Store the argument rounded according to the default rounding mode 18280 and raise the inexact exception when the result differs in value 18281 from the argument 18282 18283 The `rint' built-in function of C always uses the mode which 18284 corresponds to the C data type `double' and the `rintf' built-in 18285 function uses the mode which corresponds to the C data type 18286 `float'. 18287 18288 `lrintMN2' 18289 Convert operand 1 (valid for floating point mode M) to fixed point 18290 mode N as a signed number according to the current rounding mode 18291 and store in operand 0 (which has mode N). 18292 18293 `lroundM2' 18294 Convert operand 1 (valid for floating point mode M) to fixed point 18295 mode N as a signed number rounding to nearest and away from zero 18296 and store in operand 0 (which has mode N). 18297 18298 `lfloorM2' 18299 Convert operand 1 (valid for floating point mode M) to fixed point 18300 mode N as a signed number rounding down and store in operand 0 18301 (which has mode N). 18302 18303 `lceilM2' 18304 Convert operand 1 (valid for floating point mode M) to fixed point 18305 mode N as a signed number rounding up and store in operand 0 18306 (which has mode N). 18307 18308 `copysignM3' 18309 Store a value with the magnitude of operand 1 and the sign of 18310 operand 2 into operand 0. 18311 18312 The `copysign' built-in function of C always uses the mode which 18313 corresponds to the C data type `double' and the `copysignf' 18314 built-in function uses the mode which corresponds to the C data 18315 type `float'. 18316 18317 `ffsM2' 18318 Store into operand 0 one plus the index of the least significant 18319 1-bit of operand 1. If operand 1 is zero, store zero. M is the 18320 mode of operand 0; operand 1's mode is specified by the instruction 18321 pattern, and the compiler will convert the operand to that mode 18322 before generating the instruction. 18323 18324 The `ffs' built-in function of C always uses the mode which 18325 corresponds to the C data type `int'. 18326 18327 `clzM2' 18328 Store into operand 0 the number of leading 0-bits in X, starting 18329 at the most significant bit position. If X is 0, the 18330 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 18331 result is undefined or has a useful value. M is the mode of 18332 operand 0; operand 1's mode is specified by the instruction 18333 pattern, and the compiler will convert the operand to that mode 18334 before generating the instruction. 18335 18336 `ctzM2' 18337 Store into operand 0 the number of trailing 0-bits in X, starting 18338 at the least significant bit position. If X is 0, the 18339 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 18340 result is undefined or has a useful value. M is the mode of 18341 operand 0; operand 1's mode is specified by the instruction 18342 pattern, and the compiler will convert the operand to that mode 18343 before generating the instruction. 18344 18345 `popcountM2' 18346 Store into operand 0 the number of 1-bits in X. M is the mode of 18347 operand 0; operand 1's mode is specified by the instruction 18348 pattern, and the compiler will convert the operand to that mode 18349 before generating the instruction. 18350 18351 `parityM2' 18352 Store into operand 0 the parity of X, i.e. the number of 1-bits in 18353 X modulo 2. M is the mode of operand 0; operand 1's mode is 18354 specified by the instruction pattern, and the compiler will convert 18355 the operand to that mode before generating the instruction. 18356 18357 `one_cmplM2' 18358 Store the bitwise-complement of operand 1 into operand 0. 18359 18360 `cmpM' 18361 Compare operand 0 and operand 1, and set the condition codes. The 18362 RTL pattern should look like this: 18363 18364 (set (cc0) (compare (match_operand:M 0 ...) 18365 (match_operand:M 1 ...))) 18366 18367 `tstM' 18368 Compare operand 0 against zero, and set the condition codes. The 18369 RTL pattern should look like this: 18370 18371 (set (cc0) (match_operand:M 0 ...)) 18372 18373 `tstM' patterns should not be defined for machines that do not use 18374 `(cc0)'. Doing so would confuse the optimizer since it would no 18375 longer be clear which `set' operations were comparisons. The 18376 `cmpM' patterns should be used instead. 18377 18378 `movmemM' 18379 Block move instruction. The destination and source blocks of 18380 memory are the first two operands, and both are `mem:BLK's with an 18381 address in mode `Pmode'. 18382 18383 The number of bytes to move is the third operand, in mode M. 18384 Usually, you specify `word_mode' for M. However, if you can 18385 generate better code knowing the range of valid lengths is smaller 18386 than those representable in a full word, you should provide a 18387 pattern with a mode corresponding to the range of values you can 18388 handle efficiently (e.g., `QImode' for values in the range 0-127; 18389 note we avoid numbers that appear negative) and also a pattern 18390 with `word_mode'. 18391 18392 The fourth operand is the known shared alignment of the source and 18393 destination, in the form of a `const_int' rtx. Thus, if the 18394 compiler knows that both source and destination are word-aligned, 18395 it may provide the value 4 for this operand. 18396 18397 Optional operands 5 and 6 specify expected alignment and size of 18398 block respectively. The expected alignment differs from alignment 18399 in operand 4 in a way that the blocks are not required to be 18400 aligned according to it in all cases. Expected size, when unknown, 18401 is set to `(const_int -1)'. 18402 18403 Descriptions of multiple `movmemM' patterns can only be beneficial 18404 if the patterns for smaller modes have fewer restrictions on their 18405 first, second and fourth operands. Note that the mode M in 18406 `movmemM' does not impose any restriction on the mode of 18407 individually moved data units in the block. 18408 18409 These patterns need not give special consideration to the 18410 possibility that the source and destination strings might overlap. 18411 18412 `movstr' 18413 String copy instruction, with `stpcpy' semantics. Operand 0 is an 18414 output operand in mode `Pmode'. The addresses of the destination 18415 and source strings are operands 1 and 2, and both are `mem:BLK's 18416 with addresses in mode `Pmode'. The execution of the expansion of 18417 this pattern should store in operand 0 the address in which the 18418 `NUL' terminator was stored in the destination string. 18419 18420 `setmemM' 18421 Block set instruction. The destination string is the first 18422 operand, given as a `mem:BLK' whose address is in mode `Pmode'. 18423 The number of bytes to set is the second operand, in mode M. The 18424 value to initialize the memory with is the third operand. Targets 18425 that only support the clearing of memory should reject any value 18426 that is not the constant 0. See `movmemM' for a discussion of the 18427 choice of mode. 18428 18429 The fourth operand is the known alignment of the destination, in 18430 the form of a `const_int' rtx. Thus, if the compiler knows that 18431 the destination is word-aligned, it may provide the value 4 for 18432 this operand. 18433 18434 Optional operands 5 and 6 specify expected alignment and size of 18435 block respectively. The expected alignment differs from alignment 18436 in operand 4 in a way that the blocks are not required to be 18437 aligned according to it in all cases. Expected size, when unknown, 18438 is set to `(const_int -1)'. 18439 18440 The use for multiple `setmemM' is as for `movmemM'. 18441 18442 `cmpstrnM' 18443 String compare instruction, with five operands. Operand 0 is the 18444 output; it has mode M. The remaining four operands are like the 18445 operands of `movmemM'. The two memory blocks specified are 18446 compared byte by byte in lexicographic order starting at the 18447 beginning of each string. The instruction is not allowed to 18448 prefetch more than one byte at a time since either string may end 18449 in the first byte and reading past that may access an invalid page 18450 or segment and cause a fault. The effect of the instruction is to 18451 store a value in operand 0 whose sign indicates the result of the 18452 comparison. 18453 18454 `cmpstrM' 18455 String compare instruction, without known maximum length. Operand 18456 0 is the output; it has mode M. The second and third operand are 18457 the blocks of memory to be compared; both are `mem:BLK' with an 18458 address in mode `Pmode'. 18459 18460 The fourth operand is the known shared alignment of the source and 18461 destination, in the form of a `const_int' rtx. Thus, if the 18462 compiler knows that both source and destination are word-aligned, 18463 it may provide the value 4 for this operand. 18464 18465 The two memory blocks specified are compared byte by byte in 18466 lexicographic order starting at the beginning of each string. The 18467 instruction is not allowed to prefetch more than one byte at a 18468 time since either string may end in the first byte and reading 18469 past that may access an invalid page or segment and cause a fault. 18470 The effect of the instruction is to store a value in operand 0 18471 whose sign indicates the result of the comparison. 18472 18473 `cmpmemM' 18474 Block compare instruction, with five operands like the operands of 18475 `cmpstrM'. The two memory blocks specified are compared byte by 18476 byte in lexicographic order starting at the beginning of each 18477 block. Unlike `cmpstrM' the instruction can prefetch any bytes in 18478 the two memory blocks. The effect of the instruction is to store 18479 a value in operand 0 whose sign indicates the result of the 18480 comparison. 18481 18482 `strlenM' 18483 Compute the length of a string, with three operands. Operand 0 is 18484 the result (of mode M), operand 1 is a `mem' referring to the 18485 first character of the string, operand 2 is the character to 18486 search for (normally zero), and operand 3 is a constant describing 18487 the known alignment of the beginning of the string. 18488 18489 `floatMN2' 18490 Convert signed integer operand 1 (valid for fixed point mode M) to 18491 floating point mode N and store in operand 0 (which has mode N). 18492 18493 `floatunsMN2' 18494 Convert unsigned integer operand 1 (valid for fixed point mode M) 18495 to floating point mode N and store in operand 0 (which has mode N). 18496 18497 `fixMN2' 18498 Convert operand 1 (valid for floating point mode M) to fixed point 18499 mode N as a signed number and store in operand 0 (which has mode 18500 N). This instruction's result is defined only when the value of 18501 operand 1 is an integer. 18502 18503 If the machine description defines this pattern, it also needs to 18504 define the `ftrunc' pattern. 18505 18506 `fixunsMN2' 18507 Convert operand 1 (valid for floating point mode M) to fixed point 18508 mode N as an unsigned number and store in operand 0 (which has 18509 mode N). This instruction's result is defined only when the value 18510 of operand 1 is an integer. 18511 18512 `ftruncM2' 18513 Convert operand 1 (valid for floating point mode M) to an integer 18514 value, still represented in floating point mode M, and store it in 18515 operand 0 (valid for floating point mode M). 18516 18517 `fix_truncMN2' 18518 Like `fixMN2' but works for any floating point value of mode M by 18519 converting the value to an integer. 18520 18521 `fixuns_truncMN2' 18522 Like `fixunsMN2' but works for any floating point value of mode M 18523 by converting the value to an integer. 18524 18525 `truncMN2' 18526 Truncate operand 1 (valid for mode M) to mode N and store in 18527 operand 0 (which has mode N). Both modes must be fixed point or 18528 both floating point. 18529 18530 `extendMN2' 18531 Sign-extend operand 1 (valid for mode M) to mode N and store in 18532 operand 0 (which has mode N). Both modes must be fixed point or 18533 both floating point. 18534 18535 `zero_extendMN2' 18536 Zero-extend operand 1 (valid for mode M) to mode N and store in 18537 operand 0 (which has mode N). Both modes must be fixed point. 18538 18539 `fractMN2' 18540 Convert operand 1 of mode M to mode N and store in operand 0 18541 (which has mode N). Mode M and mode N could be fixed-point to 18542 fixed-point, signed integer to fixed-point, fixed-point to signed 18543 integer, floating-point to fixed-point, or fixed-point to 18544 floating-point. When overflows or underflows happen, the results 18545 are undefined. 18546 18547 `satfractMN2' 18548 Convert operand 1 of mode M to mode N and store in operand 0 18549 (which has mode N). Mode M and mode N could be fixed-point to 18550 fixed-point, signed integer to fixed-point, or floating-point to 18551 fixed-point. When overflows or underflows happen, the instruction 18552 saturates the results to the maximum or the minimum. 18553 18554 `fractunsMN2' 18555 Convert operand 1 of mode M to mode N and store in operand 0 18556 (which has mode N). Mode M and mode N could be unsigned integer 18557 to fixed-point, or fixed-point to unsigned integer. When 18558 overflows or underflows happen, the results are undefined. 18559 18560 `satfractunsMN2' 18561 Convert unsigned integer operand 1 of mode M to fixed-point mode N 18562 and store in operand 0 (which has mode N). When overflows or 18563 underflows happen, the instruction saturates the results to the 18564 maximum or the minimum. 18565 18566 `extv' 18567 Extract a bit-field from operand 1 (a register or memory operand), 18568 where operand 2 specifies the width in bits and operand 3 the 18569 starting bit, and store it in operand 0. Operand 0 must have mode 18570 `word_mode'. Operand 1 may have mode `byte_mode' or `word_mode'; 18571 often `word_mode' is allowed only for registers. Operands 2 and 3 18572 must be valid for `word_mode'. 18573 18574 The RTL generation pass generates this instruction only with 18575 constants for operands 2 and 3 and the constant is never zero for 18576 operand 2. 18577 18578 The bit-field value is sign-extended to a full word integer before 18579 it is stored in operand 0. 18580 18581 `extzv' 18582 Like `extv' except that the bit-field value is zero-extended. 18583 18584 `insv' 18585 Store operand 3 (which must be valid for `word_mode') into a 18586 bit-field in operand 0, where operand 1 specifies the width in 18587 bits and operand 2 the starting bit. Operand 0 may have mode 18588 `byte_mode' or `word_mode'; often `word_mode' is allowed only for 18589 registers. Operands 1 and 2 must be valid for `word_mode'. 18590 18591 The RTL generation pass generates this instruction only with 18592 constants for operands 1 and 2 and the constant is never zero for 18593 operand 1. 18594 18595 `movMODEcc' 18596 Conditionally move operand 2 or operand 3 into operand 0 according 18597 to the comparison in operand 1. If the comparison is true, 18598 operand 2 is moved into operand 0, otherwise operand 3 is moved. 18599 18600 The mode of the operands being compared need not be the same as 18601 the operands being moved. Some machines, sparc64 for example, 18602 have instructions that conditionally move an integer value based 18603 on the floating point condition codes and vice versa. 18604 18605 If the machine does not have conditional move instructions, do not 18606 define these patterns. 18607 18608 `addMODEcc' 18609 Similar to `movMODEcc' but for conditional addition. Conditionally 18610 move operand 2 or (operands 2 + operand 3) into operand 0 18611 according to the comparison in operand 1. If the comparison is 18612 true, operand 2 is moved into operand 0, otherwise (operand 2 + 18613 operand 3) is moved. 18614 18615 `sCOND' 18616 Store zero or nonzero in the operand according to the condition 18617 codes. Value stored is nonzero iff the condition COND is true. 18618 COND is the name of a comparison operation expression code, such 18619 as `eq', `lt' or `leu'. 18620 18621 You specify the mode that the operand must have when you write the 18622 `match_operand' expression. The compiler automatically sees which 18623 mode you have used and supplies an operand of that mode. 18624 18625 The value stored for a true condition must have 1 as its low bit, 18626 or else must be negative. Otherwise the instruction is not 18627 suitable and you should omit it from the machine description. You 18628 describe to the compiler exactly which value is stored by defining 18629 the macro `STORE_FLAG_VALUE' (*note Misc::). If a description 18630 cannot be found that can be used for all the `sCOND' patterns, you 18631 should omit those operations from the machine description. 18632 18633 These operations may fail, but should do so only in relatively 18634 uncommon cases; if they would fail for common cases involving 18635 integer comparisons, it is best to omit these patterns. 18636 18637 If these operations are omitted, the compiler will usually 18638 generate code that copies the constant one to the target and 18639 branches around an assignment of zero to the target. If this code 18640 is more efficient than the potential instructions used for the 18641 `sCOND' pattern followed by those required to convert the result 18642 into a 1 or a zero in `SImode', you should omit the `sCOND' 18643 operations from the machine description. 18644 18645 `bCOND' 18646 Conditional branch instruction. Operand 0 is a `label_ref' that 18647 refers to the label to jump to. Jump if the condition codes meet 18648 condition COND. 18649 18650 Some machines do not follow the model assumed here where a 18651 comparison instruction is followed by a conditional branch 18652 instruction. In that case, the `cmpM' (and `tstM') patterns should 18653 simply store the operands away and generate all the required insns 18654 in a `define_expand' (*note Expander Definitions::) for the 18655 conditional branch operations. All calls to expand `bCOND' 18656 patterns are immediately preceded by calls to expand either a 18657 `cmpM' pattern or a `tstM' pattern. 18658 18659 Machines that use a pseudo register for the condition code value, 18660 or where the mode used for the comparison depends on the condition 18661 being tested, should also use the above mechanism. *Note Jump 18662 Patterns::. 18663 18664 The above discussion also applies to the `movMODEcc' and `sCOND' 18665 patterns. 18666 18667 `cbranchMODE4' 18668 Conditional branch instruction combined with a compare instruction. 18669 Operand 0 is a comparison operator. Operand 1 and operand 2 are 18670 the first and second operands of the comparison, respectively. 18671 Operand 3 is a `label_ref' that refers to the label to jump to. 18672 18673 `jump' 18674 A jump inside a function; an unconditional branch. Operand 0 is 18675 the `label_ref' of the label to jump to. This pattern name is 18676 mandatory on all machines. 18677 18678 `call' 18679 Subroutine call instruction returning no value. Operand 0 is the 18680 function to call; operand 1 is the number of bytes of arguments 18681 pushed as a `const_int'; operand 2 is the number of registers used 18682 as operands. 18683 18684 On most machines, operand 2 is not actually stored into the RTL 18685 pattern. It is supplied for the sake of some RISC machines which 18686 need to put this information into the assembler code; they can put 18687 it in the RTL instead of operand 1. 18688 18689 Operand 0 should be a `mem' RTX whose address is the address of the 18690 function. Note, however, that this address can be a `symbol_ref' 18691 expression even if it would not be a legitimate memory address on 18692 the target machine. If it is also not a valid argument for a call 18693 instruction, the pattern for this operation should be a 18694 `define_expand' (*note Expander Definitions::) that places the 18695 address into a register and uses that register in the call 18696 instruction. 18697 18698 `call_value' 18699 Subroutine call instruction returning a value. Operand 0 is the 18700 hard register in which the value is returned. There are three more 18701 operands, the same as the three operands of the `call' instruction 18702 (but with numbers increased by one). 18703 18704 Subroutines that return `BLKmode' objects use the `call' insn. 18705 18706 `call_pop', `call_value_pop' 18707 Similar to `call' and `call_value', except used if defined and if 18708 `RETURN_POPS_ARGS' is nonzero. They should emit a `parallel' that 18709 contains both the function call and a `set' to indicate the 18710 adjustment made to the frame pointer. 18711 18712 For machines where `RETURN_POPS_ARGS' can be nonzero, the use of 18713 these patterns increases the number of functions for which the 18714 frame pointer can be eliminated, if desired. 18715 18716 `untyped_call' 18717 Subroutine call instruction returning a value of any type. 18718 Operand 0 is the function to call; operand 1 is a memory location 18719 where the result of calling the function is to be stored; operand 18720 2 is a `parallel' expression where each element is a `set' 18721 expression that indicates the saving of a function return value 18722 into the result block. 18723 18724 This instruction pattern should be defined to support 18725 `__builtin_apply' on machines where special instructions are needed 18726 to call a subroutine with arbitrary arguments or to save the value 18727 returned. This instruction pattern is required on machines that 18728 have multiple registers that can hold a return value (i.e. 18729 `FUNCTION_VALUE_REGNO_P' is true for more than one register). 18730 18731 `return' 18732 Subroutine return instruction. This instruction pattern name 18733 should be defined only if a single instruction can do all the work 18734 of returning from a function. 18735 18736 Like the `movM' patterns, this pattern is also used after the RTL 18737 generation phase. In this case it is to support machines where 18738 multiple instructions are usually needed to return from a 18739 function, but some class of functions only requires one 18740 instruction to implement a return. Normally, the applicable 18741 functions are those which do not need to save any registers or 18742 allocate stack space. 18743 18744 For such machines, the condition specified in this pattern should 18745 only be true when `reload_completed' is nonzero and the function's 18746 epilogue would only be a single instruction. For machines with 18747 register windows, the routine `leaf_function_p' may be used to 18748 determine if a register window push is required. 18749 18750 Machines that have conditional return instructions should define 18751 patterns such as 18752 18753 (define_insn "" 18754 [(set (pc) 18755 (if_then_else (match_operator 18756 0 "comparison_operator" 18757 [(cc0) (const_int 0)]) 18758 (return) 18759 (pc)))] 18760 "CONDITION" 18761 "...") 18762 18763 where CONDITION would normally be the same condition specified on 18764 the named `return' pattern. 18765 18766 `untyped_return' 18767 Untyped subroutine return instruction. This instruction pattern 18768 should be defined to support `__builtin_return' on machines where 18769 special instructions are needed to return a value of any type. 18770 18771 Operand 0 is a memory location where the result of calling a 18772 function with `__builtin_apply' is stored; operand 1 is a 18773 `parallel' expression where each element is a `set' expression 18774 that indicates the restoring of a function return value from the 18775 result block. 18776 18777 `nop' 18778 No-op instruction. This instruction pattern name should always be 18779 defined to output a no-op in assembler code. `(const_int 0)' will 18780 do as an RTL pattern. 18781 18782 `indirect_jump' 18783 An instruction to jump to an address which is operand zero. This 18784 pattern name is mandatory on all machines. 18785 18786 `casesi' 18787 Instruction to jump through a dispatch table, including bounds 18788 checking. This instruction takes five operands: 18789 18790 1. The index to dispatch on, which has mode `SImode'. 18791 18792 2. The lower bound for indices in the table, an integer constant. 18793 18794 3. The total range of indices in the table--the largest index 18795 minus the smallest one (both inclusive). 18796 18797 4. A label that precedes the table itself. 18798 18799 5. A label to jump to if the index has a value outside the 18800 bounds. 18801 18802 The table is a `addr_vec' or `addr_diff_vec' inside of a 18803 `jump_insn'. The number of elements in the table is one plus the 18804 difference between the upper bound and the lower bound. 18805 18806 `tablejump' 18807 Instruction to jump to a variable address. This is a low-level 18808 capability which can be used to implement a dispatch table when 18809 there is no `casesi' pattern. 18810 18811 This pattern requires two operands: the address or offset, and a 18812 label which should immediately precede the jump table. If the 18813 macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 18814 the first operand is an offset which counts from the address of 18815 the table; otherwise, it is an absolute address to jump to. In 18816 either case, the first operand has mode `Pmode'. 18817 18818 The `tablejump' insn is always the last insn before the jump table 18819 it uses. Its assembler code normally has no need to use the 18820 second operand, but you should incorporate it in the RTL pattern so 18821 that the jump optimizer will not delete the table as unreachable 18822 code. 18823 18824 `decrement_and_branch_until_zero' 18825 Conditional branch instruction that decrements a register and 18826 jumps if the register is nonzero. Operand 0 is the register to 18827 decrement and test; operand 1 is the label to jump to if the 18828 register is nonzero. *Note Looping Patterns::. 18829 18830 This optional instruction pattern is only used by the combiner, 18831 typically for loops reversed by the loop optimizer when strength 18832 reduction is enabled. 18833 18834 `doloop_end' 18835 Conditional branch instruction that decrements a register and 18836 jumps if the register is nonzero. This instruction takes five 18837 operands: Operand 0 is the register to decrement and test; operand 18838 1 is the number of loop iterations as a `const_int' or 18839 `const0_rtx' if this cannot be determined until run-time; operand 18840 2 is the actual or estimated maximum number of iterations as a 18841 `const_int'; operand 3 is the number of enclosed loops as a 18842 `const_int' (an innermost loop has a value of 1); operand 4 is the 18843 label to jump to if the register is nonzero. *Note Looping 18844 Patterns::. 18845 18846 This optional instruction pattern should be defined for machines 18847 with low-overhead looping instructions as the loop optimizer will 18848 try to modify suitable loops to utilize it. If nested 18849 low-overhead looping is not supported, use a `define_expand' 18850 (*note Expander Definitions::) and make the pattern fail if 18851 operand 3 is not `const1_rtx'. Similarly, if the actual or 18852 estimated maximum number of iterations is too large for this 18853 instruction, make it fail. 18854 18855 `doloop_begin' 18856 Companion instruction to `doloop_end' required for machines that 18857 need to perform some initialization, such as loading special 18858 registers used by a low-overhead looping instruction. If 18859 initialization insns do not always need to be emitted, use a 18860 `define_expand' (*note Expander Definitions::) and make it fail. 18861 18862 `canonicalize_funcptr_for_compare' 18863 Canonicalize the function pointer in operand 1 and store the result 18864 into operand 0. 18865 18866 Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be 18867 a `reg', `mem', `symbol_ref', `const_int', etc and also has mode 18868 `Pmode'. 18869 18870 Canonicalization of a function pointer usually involves computing 18871 the address of the function which would be called if the function 18872 pointer were used in an indirect call. 18873 18874 Only define this pattern if function pointers on the target machine 18875 can have different values but still call the same function when 18876 used in an indirect call. 18877 18878 `save_stack_block' 18879 `save_stack_function' 18880 `save_stack_nonlocal' 18881 `restore_stack_block' 18882 `restore_stack_function' 18883 `restore_stack_nonlocal' 18884 Most machines save and restore the stack pointer by copying it to 18885 or from an object of mode `Pmode'. Do not define these patterns on 18886 such machines. 18887 18888 Some machines require special handling for stack pointer saves and 18889 restores. On those machines, define the patterns corresponding to 18890 the non-standard cases by using a `define_expand' (*note Expander 18891 Definitions::) that produces the required insns. The three types 18892 of saves and restores are: 18893 18894 1. `save_stack_block' saves the stack pointer at the start of a 18895 block that allocates a variable-sized object, and 18896 `restore_stack_block' restores the stack pointer when the 18897 block is exited. 18898 18899 2. `save_stack_function' and `restore_stack_function' do a 18900 similar job for the outermost block of a function and are 18901 used when the function allocates variable-sized objects or 18902 calls `alloca'. Only the epilogue uses the restored stack 18903 pointer, allowing a simpler save or restore sequence on some 18904 machines. 18905 18906 3. `save_stack_nonlocal' is used in functions that contain labels 18907 branched to by nested functions. It saves the stack pointer 18908 in such a way that the inner function can use 18909 `restore_stack_nonlocal' to restore the stack pointer. The 18910 compiler generates code to restore the frame and argument 18911 pointer registers, but some machines require saving and 18912 restoring additional data such as register window information 18913 or stack backchains. Place insns in these patterns to save 18914 and restore any such required data. 18915 18916 When saving the stack pointer, operand 0 is the save area and 18917 operand 1 is the stack pointer. The mode used to allocate the 18918 save area defaults to `Pmode' but you can override that choice by 18919 defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 18920 You must specify an integral mode, or `VOIDmode' if no save area 18921 is needed for a particular type of save (either because no save is 18922 needed or because a machine-specific save area can be used). 18923 Operand 0 is the stack pointer and operand 1 is the save area for 18924 restore operations. If `save_stack_block' is defined, operand 0 18925 must not be `VOIDmode' since these saves can be arbitrarily nested. 18926 18927 A save area is a `mem' that is at a constant offset from 18928 `virtual_stack_vars_rtx' when the stack pointer is saved for use by 18929 nonlocal gotos and a `reg' in the other two cases. 18930 18931 `allocate_stack' 18932 Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1 18933 from the stack pointer to create space for dynamically allocated 18934 data. 18935 18936 Store the resultant pointer to this space into operand 0. If you 18937 are allocating space from the main stack, do this by emitting a 18938 move insn to copy `virtual_stack_dynamic_rtx' to operand 0. If 18939 you are allocating the space elsewhere, generate code to copy the 18940 location of the space to operand 0. In the latter case, you must 18941 ensure this space gets freed when the corresponding space on the 18942 main stack is free. 18943 18944 Do not define this pattern if all that must be done is the 18945 subtraction. Some machines require other operations such as stack 18946 probes or maintaining the back chain. Define this pattern to emit 18947 those operations in addition to updating the stack pointer. 18948 18949 `check_stack' 18950 If stack checking cannot be done on your system by probing the 18951 stack with a load or store instruction (*note Stack Checking::), 18952 define this pattern to perform the needed check and signaling an 18953 error if the stack has overflowed. The single operand is the 18954 location in the stack furthest from the current stack pointer that 18955 you need to validate. Normally, on machines where this pattern is 18956 needed, you would obtain the stack limit from a global or 18957 thread-specific variable or register. 18958 18959 `nonlocal_goto' 18960 Emit code to generate a non-local goto, e.g., a jump from one 18961 function to a label in an outer function. This pattern has four 18962 arguments, each representing a value to be used in the jump. The 18963 first argument is to be loaded into the frame pointer, the second 18964 is the address to branch to (code to dispatch to the actual label), 18965 the third is the address of a location where the stack is saved, 18966 and the last is the address of the label, to be placed in the 18967 location for the incoming static chain. 18968 18969 On most machines you need not define this pattern, since GCC will 18970 already generate the correct code, which is to load the frame 18971 pointer and static chain, restore the stack (using the 18972 `restore_stack_nonlocal' pattern, if defined), and jump indirectly 18973 to the dispatcher. You need only define this pattern if this code 18974 will not work on your machine. 18975 18976 `nonlocal_goto_receiver' 18977 This pattern, if defined, contains code needed at the target of a 18978 nonlocal goto after the code already generated by GCC. You will 18979 not normally need to define this pattern. A typical reason why 18980 you might need this pattern is if some value, such as a pointer to 18981 a global table, must be restored when the frame pointer is 18982 restored. Note that a nonlocal goto only occurs within a 18983 unit-of-translation, so a global table pointer that is shared by 18984 all functions of a given module need not be restored. There are 18985 no arguments. 18986 18987 `exception_receiver' 18988 This pattern, if defined, contains code needed at the site of an 18989 exception handler that isn't needed at the site of a nonlocal 18990 goto. You will not normally need to define this pattern. A 18991 typical reason why you might need this pattern is if some value, 18992 such as a pointer to a global table, must be restored after 18993 control flow is branched to the handler of an exception. There 18994 are no arguments. 18995 18996 `builtin_setjmp_setup' 18997 This pattern, if defined, contains additional code needed to 18998 initialize the `jmp_buf'. You will not normally need to define 18999 this pattern. A typical reason why you might need this pattern is 19000 if some value, such as a pointer to a global table, must be 19001 restored. Though it is preferred that the pointer value be 19002 recalculated if possible (given the address of a label for 19003 instance). The single argument is a pointer to the `jmp_buf'. 19004 Note that the buffer is five words long and that the first three 19005 are normally used by the generic mechanism. 19006 19007 `builtin_setjmp_receiver' 19008 This pattern, if defined, contains code needed at the site of an 19009 built-in setjmp that isn't needed at the site of a nonlocal goto. 19010 You will not normally need to define this pattern. A typical 19011 reason why you might need this pattern is if some value, such as a 19012 pointer to a global table, must be restored. It takes one 19013 argument, which is the label to which builtin_longjmp transfered 19014 control; this pattern may be emitted at a small offset from that 19015 label. 19016 19017 `builtin_longjmp' 19018 This pattern, if defined, performs the entire action of the 19019 longjmp. You will not normally need to define this pattern unless 19020 you also define `builtin_setjmp_setup'. The single argument is a 19021 pointer to the `jmp_buf'. 19022 19023 `eh_return' 19024 This pattern, if defined, affects the way `__builtin_eh_return', 19025 and thence the call frame exception handling library routines, are 19026 built. It is intended to handle non-trivial actions needed along 19027 the abnormal return path. 19028 19029 The address of the exception handler to which the function should 19030 return is passed as operand to this pattern. It will normally 19031 need to copied by the pattern to some special register or memory 19032 location. If the pattern needs to determine the location of the 19033 target call frame in order to do so, it may use 19034 `EH_RETURN_STACKADJ_RTX', if defined; it will have already been 19035 assigned. 19036 19037 If this pattern is not defined, the default action will be to 19038 simply copy the return address to `EH_RETURN_HANDLER_RTX'. Either 19039 that macro or this pattern needs to be defined if call frame 19040 exception handling is to be used. 19041 19042 `prologue' 19043 This pattern, if defined, emits RTL for entry to a function. The 19044 function entry is responsible for setting up the stack frame, 19045 initializing the frame pointer register, saving callee saved 19046 registers, etc. 19047 19048 Using a prologue pattern is generally preferred over defining 19049 `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 19050 prologue. 19051 19052 The `prologue' pattern is particularly useful for targets which 19053 perform instruction scheduling. 19054 19055 `epilogue' 19056 This pattern emits RTL for exit from a function. The function 19057 exit is responsible for deallocating the stack frame, restoring 19058 callee saved registers and emitting the return instruction. 19059 19060 Using an epilogue pattern is generally preferred over defining 19061 `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 19062 epilogue. 19063 19064 The `epilogue' pattern is particularly useful for targets which 19065 perform instruction scheduling or which have delay slots for their 19066 return instruction. 19067 19068 `sibcall_epilogue' 19069 This pattern, if defined, emits RTL for exit from a function 19070 without the final branch back to the calling function. This 19071 pattern will be emitted before any sibling call (aka tail call) 19072 sites. 19073 19074 The `sibcall_epilogue' pattern must not clobber any arguments used 19075 for parameter passing or any stack slots for arguments passed to 19076 the current function. 19077 19078 `trap' 19079 This pattern, if defined, signals an error, typically by causing 19080 some kind of signal to be raised. Among other places, it is used 19081 by the Java front end to signal `invalid array index' exceptions. 19082 19083 `conditional_trap' 19084 Conditional trap instruction. Operand 0 is a piece of RTL which 19085 performs a comparison. Operand 1 is the trap code, an integer. 19086 19087 A typical `conditional_trap' pattern looks like 19088 19089 (define_insn "conditional_trap" 19090 [(trap_if (match_operator 0 "trap_operator" 19091 [(cc0) (const_int 0)]) 19092 (match_operand 1 "const_int_operand" "i"))] 19093 "" 19094 "...") 19095 19096 `prefetch' 19097 This pattern, if defined, emits code for a non-faulting data 19098 prefetch instruction. Operand 0 is the address of the memory to 19099 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 19100 for a write to the memory address, or a constant 0 otherwise. 19101 Operand 2 is the expected degree of temporal locality of the data 19102 and is a value between 0 and 3, inclusive; 0 means that the data 19103 has no temporal locality, so it need not be left in the cache 19104 after the access; 3 means that the data has a high degree of 19105 temporal locality and should be left in all levels of cache 19106 possible; 1 and 2 mean, respectively, a low or moderate degree of 19107 temporal locality. 19108 19109 Targets that do not support write prefetches or locality hints can 19110 ignore the values of operands 1 and 2. 19111 19112 `blockage' 19113 This pattern defines a pseudo insn that prevents the instruction 19114 scheduler from moving instructions across the boundary defined by 19115 the blockage insn. Normally an UNSPEC_VOLATILE pattern. 19116 19117 `memory_barrier' 19118 If the target memory model is not fully synchronous, then this 19119 pattern should be defined to an instruction that orders both loads 19120 and stores before the instruction with respect to loads and stores 19121 after the instruction. This pattern has no operands. 19122 19123 `sync_compare_and_swapMODE' 19124 This pattern, if defined, emits code for an atomic compare-and-swap 19125 operation. Operand 1 is the memory on which the atomic operation 19126 is performed. Operand 2 is the "old" value to be compared against 19127 the current contents of the memory location. Operand 3 is the 19128 "new" value to store in the memory if the compare succeeds. 19129 Operand 0 is the result of the operation; it should contain the 19130 contents of the memory before the operation. If the compare 19131 succeeds, this should obviously be a copy of operand 2. 19132 19133 This pattern must show that both operand 0 and operand 1 are 19134 modified. 19135 19136 This pattern must issue any memory barrier instructions such that 19137 all memory operations before the atomic operation occur before the 19138 atomic operation and all memory operations after the atomic 19139 operation occur after the atomic operation. 19140 19141 `sync_compare_and_swap_ccMODE' 19142 This pattern is just like `sync_compare_and_swapMODE', except it 19143 should act as if compare part of the compare-and-swap were issued 19144 via `cmpM'. This comparison will only be used with `EQ' and `NE' 19145 branches and `setcc' operations. 19146 19147 Some targets do expose the success or failure of the 19148 compare-and-swap operation via the status flags. Ideally we 19149 wouldn't need a separate named pattern in order to take advantage 19150 of this, but the combine pass does not handle patterns with 19151 multiple sets, which is required by definition for 19152 `sync_compare_and_swapMODE'. 19153 19154 `sync_addMODE', `sync_subMODE' 19155 `sync_iorMODE', `sync_andMODE' 19156 `sync_xorMODE', `sync_nandMODE' 19157 These patterns emit code for an atomic operation on memory. 19158 Operand 0 is the memory on which the atomic operation is performed. 19159 Operand 1 is the second operand to the binary operator. 19160 19161 The "nand" operation is `~op0 & op1'. 19162 19163 This pattern must issue any memory barrier instructions such that 19164 all memory operations before the atomic operation occur before the 19165 atomic operation and all memory operations after the atomic 19166 operation occur after the atomic operation. 19167 19168 If these patterns are not defined, the operation will be 19169 constructed from a compare-and-swap operation, if defined. 19170 19171 `sync_old_addMODE', `sync_old_subMODE' 19172 `sync_old_iorMODE', `sync_old_andMODE' 19173 `sync_old_xorMODE', `sync_old_nandMODE' 19174 These patterns are emit code for an atomic operation on memory, 19175 and return the value that the memory contained before the 19176 operation. Operand 0 is the result value, operand 1 is the memory 19177 on which the atomic operation is performed, and operand 2 is the 19178 second operand to the binary operator. 19179 19180 This pattern must issue any memory barrier instructions such that 19181 all memory operations before the atomic operation occur before the 19182 atomic operation and all memory operations after the atomic 19183 operation occur after the atomic operation. 19184 19185 If these patterns are not defined, the operation will be 19186 constructed from a compare-and-swap operation, if defined. 19187 19188 `sync_new_addMODE', `sync_new_subMODE' 19189 `sync_new_iorMODE', `sync_new_andMODE' 19190 `sync_new_xorMODE', `sync_new_nandMODE' 19191 These patterns are like their `sync_old_OP' counterparts, except 19192 that they return the value that exists in the memory location 19193 after the operation, rather than before the operation. 19194 19195 `sync_lock_test_and_setMODE' 19196 This pattern takes two forms, based on the capabilities of the 19197 target. In either case, operand 0 is the result of the operand, 19198 operand 1 is the memory on which the atomic operation is 19199 performed, and operand 2 is the value to set in the lock. 19200 19201 In the ideal case, this operation is an atomic exchange operation, 19202 in which the previous value in memory operand is copied into the 19203 result operand, and the value operand is stored in the memory 19204 operand. 19205 19206 For less capable targets, any value operand that is not the 19207 constant 1 should be rejected with `FAIL'. In this case the 19208 target may use an atomic test-and-set bit operation. The result 19209 operand should contain 1 if the bit was previously set and 0 if 19210 the bit was previously clear. The true contents of the memory 19211 operand are implementation defined. 19212 19213 This pattern must issue any memory barrier instructions such that 19214 the pattern as a whole acts as an acquire barrier, that is all 19215 memory operations after the pattern do not occur until the lock is 19216 acquired. 19217 19218 If this pattern is not defined, the operation will be constructed 19219 from a compare-and-swap operation, if defined. 19220 19221 `sync_lock_releaseMODE' 19222 This pattern, if defined, releases a lock set by 19223 `sync_lock_test_and_setMODE'. Operand 0 is the memory that 19224 contains the lock; operand 1 is the value to store in the lock. 19225 19226 If the target doesn't implement full semantics for 19227 `sync_lock_test_and_setMODE', any value operand which is not the 19228 constant 0 should be rejected with `FAIL', and the true contents 19229 of the memory operand are implementation defined. 19230 19231 This pattern must issue any memory barrier instructions such that 19232 the pattern as a whole acts as a release barrier, that is the lock 19233 is released only after all previous memory operations have 19234 completed. 19235 19236 If this pattern is not defined, then a `memory_barrier' pattern 19237 will be emitted, followed by a store of the value to the memory 19238 operand. 19239 19240 `stack_protect_set' 19241 This pattern, if defined, moves a `Pmode' value from the memory in 19242 operand 1 to the memory in operand 0 without leaving the value in 19243 a register afterward. This is to avoid leaking the value some 19244 place that an attacker might use to rewrite the stack guard slot 19245 after having clobbered it. 19246 19247 If this pattern is not defined, then a plain move pattern is 19248 generated. 19249 19250 `stack_protect_test' 19251 This pattern, if defined, compares a `Pmode' value from the memory 19252 in operand 1 with the memory in operand 0 without leaving the 19253 value in a register afterward and branches to operand 2 if the 19254 values weren't equal. 19255 19256 If this pattern is not defined, then a plain compare pattern and 19257 conditional branch pattern is used. 19258 19259 `clear_cache' 19260 This pattern, if defined, flushes the instruction cache for a 19261 region of memory. The region is bounded to by the Pmode pointers 19262 in operand 0 inclusive and operand 1 exclusive. 19263 19264 If this pattern is not defined, a call to the library function 19265 `__clear_cache' is used. 19266 19267 19268 19269 File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 19270 19271 14.10 When the Order of Patterns Matters 19272 ======================================== 19273 19274 Sometimes an insn can match more than one instruction pattern. Then the 19275 pattern that appears first in the machine description is the one used. 19276 Therefore, more specific patterns (patterns that will match fewer 19277 things) and faster instructions (those that will produce better code 19278 when they do match) should usually go first in the description. 19279 19280 In some cases the effect of ordering the patterns can be used to hide 19281 a pattern when it is not valid. For example, the 68000 has an 19282 instruction for converting a fullword to floating point and another for 19283 converting a byte to floating point. An instruction converting an 19284 integer to floating point could match either one. We put the pattern 19285 to convert the fullword first to make sure that one will be used rather 19286 than the other. (Otherwise a large integer might be generated as a 19287 single-byte immediate quantity, which would not work.) Instead of 19288 using this pattern ordering it would be possible to make the pattern 19289 for convert-a-byte smart enough to deal properly with any constant 19290 value. 19291 19292 19293 File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 19294 19295 14.11 Interdependence of Patterns 19296 ================================= 19297 19298 Every machine description must have a named pattern for each of the 19299 conditional branch names `bCOND'. The recognition template must always 19300 have the form 19301 19302 (set (pc) 19303 (if_then_else (COND (cc0) (const_int 0)) 19304 (label_ref (match_operand 0 "" "")) 19305 (pc))) 19306 19307 In addition, every machine description must have an anonymous pattern 19308 for each of the possible reverse-conditional branches. Their templates 19309 look like 19310 19311 (set (pc) 19312 (if_then_else (COND (cc0) (const_int 0)) 19313 (pc) 19314 (label_ref (match_operand 0 "" "")))) 19315 19316 They are necessary because jump optimization can turn direct-conditional 19317 branches into reverse-conditional branches. 19318 19319 It is often convenient to use the `match_operator' construct to reduce 19320 the number of patterns that must be specified for branches. For 19321 example, 19322 19323 (define_insn "" 19324 [(set (pc) 19325 (if_then_else (match_operator 0 "comparison_operator" 19326 [(cc0) (const_int 0)]) 19327 (pc) 19328 (label_ref (match_operand 1 "" ""))))] 19329 "CONDITION" 19330 "...") 19331 19332 In some cases machines support instructions identical except for the 19333 machine mode of one or more operands. For example, there may be 19334 "sign-extend halfword" and "sign-extend byte" instructions whose 19335 patterns are 19336 19337 (set (match_operand:SI 0 ...) 19338 (extend:SI (match_operand:HI 1 ...))) 19339 19340 (set (match_operand:SI 0 ...) 19341 (extend:SI (match_operand:QI 1 ...))) 19342 19343 Constant integers do not specify a machine mode, so an instruction to 19344 extend a constant value could match either pattern. The pattern it 19345 actually will match is the one that appears first in the file. For 19346 correct results, this must be the one for the widest possible mode 19347 (`HImode', here). If the pattern matches the `QImode' instruction, the 19348 results will be incorrect if the constant value does not actually fit 19349 that mode. 19350 19351 Such instructions to extend constants are rarely generated because 19352 they are optimized away, but they do occasionally happen in nonoptimized 19353 compilations. 19354 19355 If a constraint in a pattern allows a constant, the reload pass may 19356 replace a register with a constant permitted by the constraint in some 19357 cases. Similarly for memory references. Because of this substitution, 19358 you should not provide separate patterns for increment and decrement 19359 instructions. Instead, they should be generated from the same pattern 19360 that supports register-register add insns by examining the operands and 19361 generating the appropriate machine instruction. 19362 19363 19364 File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 19365 19366 14.12 Defining Jump Instruction Patterns 19367 ======================================== 19368 19369 For most machines, GCC assumes that the machine has a condition code. 19370 A comparison insn sets the condition code, recording the results of both 19371 signed and unsigned comparison of the given operands. A separate branch 19372 insn tests the condition code and branches or not according its value. 19373 The branch insns come in distinct signed and unsigned flavors. Many 19374 common machines, such as the VAX, the 68000 and the 32000, work this 19375 way. 19376 19377 Some machines have distinct signed and unsigned compare instructions, 19378 and only one set of conditional branch instructions. The easiest way 19379 to handle these machines is to treat them just like the others until 19380 the final stage where assembly code is written. At this time, when 19381 outputting code for the compare instruction, peek ahead at the 19382 following branch using `next_cc0_user (insn)'. (The variable `insn' 19383 refers to the insn being output, in the output-writing code in an 19384 instruction pattern.) If the RTL says that is an unsigned branch, 19385 output an unsigned compare; otherwise output a signed compare. When 19386 the branch itself is output, you can treat signed and unsigned branches 19387 identically. 19388 19389 The reason you can do this is that GCC always generates a pair of 19390 consecutive RTL insns, possibly separated by `note' insns, one to set 19391 the condition code and one to test it, and keeps the pair inviolate 19392 until the end. 19393 19394 To go with this technique, you must define the machine-description 19395 macro `NOTICE_UPDATE_CC' to do `CC_STATUS_INIT'; in other words, no 19396 compare instruction is superfluous. 19397 19398 Some machines have compare-and-branch instructions and no condition 19399 code. A similar technique works for them. When it is time to "output" 19400 a compare instruction, record its operands in two static variables. 19401 When outputting the branch-on-condition-code instruction that follows, 19402 actually output a compare-and-branch instruction that uses the 19403 remembered operands. 19404 19405 It also works to define patterns for compare-and-branch instructions. 19406 In optimizing compilation, the pair of compare and branch instructions 19407 will be combined according to these patterns. But this does not happen 19408 if optimization is not requested. So you must use one of the solutions 19409 above in addition to any special patterns you define. 19410 19411 In many RISC machines, most instructions do not affect the condition 19412 code and there may not even be a separate condition code register. On 19413 these machines, the restriction that the definition and use of the 19414 condition code be adjacent insns is not necessary and can prevent 19415 important optimizations. For example, on the IBM RS/6000, there is a 19416 delay for taken branches unless the condition code register is set three 19417 instructions earlier than the conditional branch. The instruction 19418 scheduler cannot perform this optimization if it is not permitted to 19419 separate the definition and use of the condition code register. 19420 19421 On these machines, do not use `(cc0)', but instead use a register to 19422 represent the condition code. If there is a specific condition code 19423 register in the machine, use a hard register. If the condition code or 19424 comparison result can be placed in any general register, or if there are 19425 multiple condition registers, use a pseudo register. 19426 19427 On some machines, the type of branch instruction generated may depend 19428 on the way the condition code was produced; for example, on the 68k and 19429 SPARC, setting the condition code directly from an add or subtract 19430 instruction does not clear the overflow bit the way that a test 19431 instruction does, so a different branch instruction must be used for 19432 some conditional branches. For machines that use `(cc0)', the set and 19433 use of the condition code must be adjacent (separated only by `note' 19434 insns) allowing flags in `cc_status' to be used. (*Note Condition 19435 Code::.) Also, the comparison and branch insns can be located from 19436 each other by using the functions `prev_cc0_setter' and `next_cc0_user'. 19437 19438 However, this is not true on machines that do not use `(cc0)'. On 19439 those machines, no assumptions can be made about the adjacency of the 19440 compare and branch insns and the above methods cannot be used. Instead, 19441 we use the machine mode of the condition code register to record 19442 different formats of the condition code register. 19443 19444 Registers used to store the condition code value should have a mode 19445 that is in class `MODE_CC'. Normally, it will be `CCmode'. If 19446 additional modes are required (as for the add example mentioned above in 19447 the SPARC), define them in `MACHINE-modes.def' (*note Condition 19448 Code::). Also define `SELECT_CC_MODE' to choose a mode given an 19449 operand of a compare. 19450 19451 If it is known during RTL generation that a different mode will be 19452 required (for example, if the machine has separate compare instructions 19453 for signed and unsigned quantities, like most IBM processors), they can 19454 be specified at that time. 19455 19456 If the cases that require different modes would be made by instruction 19457 combination, the macro `SELECT_CC_MODE' determines which machine mode 19458 should be used for the comparison result. The patterns should be 19459 written using that mode. To support the case of the add on the SPARC 19460 discussed above, we have the pattern 19461 19462 (define_insn "" 19463 [(set (reg:CC_NOOV 0) 19464 (compare:CC_NOOV 19465 (plus:SI (match_operand:SI 0 "register_operand" "%r") 19466 (match_operand:SI 1 "arith_operand" "rI")) 19467 (const_int 0)))] 19468 "" 19469 "...") 19470 19471 The `SELECT_CC_MODE' macro on the SPARC returns `CC_NOOVmode' for 19472 comparisons whose argument is a `plus'. 19473 19474 19475 File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 19476 19477 14.13 Defining Looping Instruction Patterns 19478 =========================================== 19479 19480 Some machines have special jump instructions that can be utilized to 19481 make loops more efficient. A common example is the 68000 `dbra' 19482 instruction which performs a decrement of a register and a branch if the 19483 result was greater than zero. Other machines, in particular digital 19484 signal processors (DSPs), have special block repeat instructions to 19485 provide low-overhead loop support. For example, the TI TMS320C3x/C4x 19486 DSPs have a block repeat instruction that loads special registers to 19487 mark the top and end of a loop and to count the number of loop 19488 iterations. This avoids the need for fetching and executing a 19489 `dbra'-like instruction and avoids pipeline stalls associated with the 19490 jump. 19491 19492 GCC has three special named patterns to support low overhead looping. 19493 They are `decrement_and_branch_until_zero', `doloop_begin', and 19494 `doloop_end'. The first pattern, `decrement_and_branch_until_zero', is 19495 not emitted during RTL generation but may be emitted during the 19496 instruction combination phase. This requires the assistance of the 19497 loop optimizer, using information collected during strength reduction, 19498 to reverse a loop to count down to zero. Some targets also require the 19499 loop optimizer to add a `REG_NONNEG' note to indicate that the 19500 iteration count is always positive. This is needed if the target 19501 performs a signed loop termination test. For example, the 68000 uses a 19502 pattern similar to the following for its `dbra' instruction: 19503 19504 (define_insn "decrement_and_branch_until_zero" 19505 [(set (pc) 19506 (if_then_else 19507 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 19508 (const_int -1)) 19509 (const_int 0)) 19510 (label_ref (match_operand 1 "" "")) 19511 (pc))) 19512 (set (match_dup 0) 19513 (plus:SI (match_dup 0) 19514 (const_int -1)))] 19515 "find_reg_note (insn, REG_NONNEG, 0)" 19516 "...") 19517 19518 Note that since the insn is both a jump insn and has an output, it must 19519 deal with its own reloads, hence the `m' constraints. Also note that 19520 since this insn is generated by the instruction combination phase 19521 combining two sequential insns together into an implicit parallel insn, 19522 the iteration counter needs to be biased by the same amount as the 19523 decrement operation, in this case -1. Note that the following similar 19524 pattern will not be matched by the combiner. 19525 19526 (define_insn "decrement_and_branch_until_zero" 19527 [(set (pc) 19528 (if_then_else 19529 (ge (match_operand:SI 0 "general_operand" "+d*am") 19530 (const_int 1)) 19531 (label_ref (match_operand 1 "" "")) 19532 (pc))) 19533 (set (match_dup 0) 19534 (plus:SI (match_dup 0) 19535 (const_int -1)))] 19536 "find_reg_note (insn, REG_NONNEG, 0)" 19537 "...") 19538 19539 The other two special looping patterns, `doloop_begin' and 19540 `doloop_end', are emitted by the loop optimizer for certain 19541 well-behaved loops with a finite number of loop iterations using 19542 information collected during strength reduction. 19543 19544 The `doloop_end' pattern describes the actual looping instruction (or 19545 the implicit looping operation) and the `doloop_begin' pattern is an 19546 optional companion pattern that can be used for initialization needed 19547 for some low-overhead looping instructions. 19548 19549 Note that some machines require the actual looping instruction to be 19550 emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 19551 the true RTL for a looping instruction at the top of the loop can cause 19552 problems with flow analysis. So instead, a dummy `doloop' insn is 19553 emitted at the end of the loop. The machine dependent reorg pass checks 19554 for the presence of this `doloop' insn and then searches back to the 19555 top of the loop, where it inserts the true looping insn (provided there 19556 are no instructions in the loop which would cause problems). Any 19557 additional labels can be emitted at this point. In addition, if the 19558 desired special iteration counter register was not allocated, this 19559 machine dependent reorg pass could emit a traditional compare and jump 19560 instruction pair. 19561 19562 The essential difference between the `decrement_and_branch_until_zero' 19563 and the `doloop_end' patterns is that the loop optimizer allocates an 19564 additional pseudo register for the latter as an iteration counter. 19565 This pseudo register cannot be used within the loop (i.e., general 19566 induction variables cannot be derived from it), however, in many cases 19567 the loop induction variable may become redundant and removed by the 19568 flow pass. 19569 19570 19571 File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 19572 19573 14.14 Canonicalization of Instructions 19574 ====================================== 19575 19576 There are often cases where multiple RTL expressions could represent an 19577 operation performed by a single machine instruction. This situation is 19578 most commonly encountered with logical, branch, and multiply-accumulate 19579 instructions. In such cases, the compiler attempts to convert these 19580 multiple RTL expressions into a single canonical form to reduce the 19581 number of insn patterns required. 19582 19583 In addition to algebraic simplifications, following canonicalizations 19584 are performed: 19585 19586 * For commutative and comparison operators, a constant is always 19587 made the second operand. If a machine only supports a constant as 19588 the second operand, only patterns that match a constant in the 19589 second operand need be supplied. 19590 19591 * For associative operators, a sequence of operators will always 19592 chain to the left; for instance, only the left operand of an 19593 integer `plus' can itself be a `plus'. `and', `ior', `xor', 19594 `plus', `mult', `smin', `smax', `umin', and `umax' are associative 19595 when applied to integers, and sometimes to floating-point. 19596 19597 * For these operators, if only one operand is a `neg', `not', 19598 `mult', `plus', or `minus' expression, it will be the first 19599 operand. 19600 19601 * In combinations of `neg', `mult', `plus', and `minus', the `neg' 19602 operations (if any) will be moved inside the operations as far as 19603 possible. For instance, `(neg (mult A B))' is canonicalized as 19604 `(mult (neg A) B)', but `(plus (mult (neg A) B) C)' is 19605 canonicalized as `(minus A (mult B C))'. 19606 19607 * For the `compare' operator, a constant is always the second operand 19608 on machines where `cc0' is used (*note Jump Patterns::). On other 19609 machines, there are rare cases where the compiler might want to 19610 construct a `compare' with a constant as the first operand. 19611 However, these cases are not common enough for it to be worthwhile 19612 to provide a pattern matching a constant as the first operand 19613 unless the machine actually has such an instruction. 19614 19615 An operand of `neg', `not', `mult', `plus', or `minus' is made the 19616 first operand under the same conditions as above. 19617 19618 * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'. 19619 Likewise with `geu' instead of `ltu'. 19620 19621 * `(minus X (const_int N))' is converted to `(plus X (const_int 19622 -N))'. 19623 19624 * Within address computations (i.e., inside `mem'), a left shift is 19625 converted into the appropriate multiplication by a power of two. 19626 19627 * De Morgan's Law is used to move bitwise negation inside a bitwise 19628 logical-and or logical-or operation. If this results in only one 19629 operand being a `not' expression, it will be the first one. 19630 19631 A machine that has an instruction that performs a bitwise 19632 logical-and of one operand with the bitwise negation of the other 19633 should specify the pattern for that instruction as 19634 19635 (define_insn "" 19636 [(set (match_operand:M 0 ...) 19637 (and:M (not:M (match_operand:M 1 ...)) 19638 (match_operand:M 2 ...)))] 19639 "..." 19640 "...") 19641 19642 Similarly, a pattern for a "NAND" instruction should be written 19643 19644 (define_insn "" 19645 [(set (match_operand:M 0 ...) 19646 (ior:M (not:M (match_operand:M 1 ...)) 19647 (not:M (match_operand:M 2 ...))))] 19648 "..." 19649 "...") 19650 19651 In both cases, it is not necessary to include patterns for the many 19652 logically equivalent RTL expressions. 19653 19654 * The only possible RTL expressions involving both bitwise 19655 exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M 19656 (xor:M X Y))'. 19657 19658 * The sum of three items, one of which is a constant, will only 19659 appear in the form 19660 19661 (plus:M (plus:M X Y) CONSTANT) 19662 19663 * On machines that do not use `cc0', `(compare X (const_int 0))' 19664 will be converted to X. 19665 19666 * Equality comparisons of a group of bits (usually a single bit) 19667 with zero will be written using `zero_extract' rather than the 19668 equivalent `and' or `sign_extract' operations. 19669 19670 19671 Further canonicalization rules are defined in the function 19672 `commutative_operand_precedence' in `gcc/rtlanal.c'. 19673 19674 19675 File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 19676 19677 14.15 Defining RTL Sequences for Code Generation 19678 ================================================ 19679 19680 On some target machines, some standard pattern names for RTL generation 19681 cannot be handled with single insn, but a sequence of RTL insns can 19682 represent them. For these target machines, you can write a 19683 `define_expand' to specify how to generate the sequence of RTL. 19684 19685 A `define_expand' is an RTL expression that looks almost like a 19686 `define_insn'; but, unlike the latter, a `define_expand' is used only 19687 for RTL generation and it can produce more than one RTL insn. 19688 19689 A `define_expand' RTX has four operands: 19690 19691 * The name. Each `define_expand' must have a name, since the only 19692 use for it is to refer to it by name. 19693 19694 * The RTL template. This is a vector of RTL expressions representing 19695 a sequence of separate instructions. Unlike `define_insn', there 19696 is no implicit surrounding `PARALLEL'. 19697 19698 * The condition, a string containing a C expression. This 19699 expression is used to express how the availability of this pattern 19700 depends on subclasses of target machine, selected by command-line 19701 options when GCC is run. This is just like the condition of a 19702 `define_insn' that has a standard name. Therefore, the condition 19703 (if present) may not depend on the data in the insn being matched, 19704 but only the target-machine-type flags. The compiler needs to 19705 test these conditions during initialization in order to learn 19706 exactly which named instructions are available in a particular run. 19707 19708 * The preparation statements, a string containing zero or more C 19709 statements which are to be executed before RTL code is generated 19710 from the RTL template. 19711 19712 Usually these statements prepare temporary registers for use as 19713 internal operands in the RTL template, but they can also generate 19714 RTL insns directly by calling routines such as `emit_insn', etc. 19715 Any such insns precede the ones that come from the RTL template. 19716 19717 Every RTL insn emitted by a `define_expand' must match some 19718 `define_insn' in the machine description. Otherwise, the compiler will 19719 crash when trying to generate code for the insn or trying to optimize 19720 it. 19721 19722 The RTL template, in addition to controlling generation of RTL insns, 19723 also describes the operands that need to be specified when this pattern 19724 is used. In particular, it gives a predicate for each operand. 19725 19726 A true operand, which needs to be specified in order to generate RTL 19727 from the pattern, should be described with a `match_operand' in its 19728 first occurrence in the RTL template. This enters information on the 19729 operand's predicate into the tables that record such things. GCC uses 19730 the information to preload the operand into a register if that is 19731 required for valid RTL code. If the operand is referred to more than 19732 once, subsequent references should use `match_dup'. 19733 19734 The RTL template may also refer to internal "operands" which are 19735 temporary registers or labels used only within the sequence made by the 19736 `define_expand'. Internal operands are substituted into the RTL 19737 template with `match_dup', never with `match_operand'. The values of 19738 the internal operands are not passed in as arguments by the compiler 19739 when it requests use of this pattern. Instead, they are computed 19740 within the pattern, in the preparation statements. These statements 19741 compute the values and store them into the appropriate elements of 19742 `operands' so that `match_dup' can find them. 19743 19744 There are two special macros defined for use in the preparation 19745 statements: `DONE' and `FAIL'. Use them with a following semicolon, as 19746 a statement. 19747 19748 `DONE' 19749 Use the `DONE' macro to end RTL generation for the pattern. The 19750 only RTL insns resulting from the pattern on this occasion will be 19751 those already emitted by explicit calls to `emit_insn' within the 19752 preparation statements; the RTL template will not be generated. 19753 19754 `FAIL' 19755 Make the pattern fail on this occasion. When a pattern fails, it 19756 means that the pattern was not truly available. The calling 19757 routines in the compiler will try other strategies for code 19758 generation using other patterns. 19759 19760 Failure is currently supported only for binary (addition, 19761 multiplication, shifting, etc.) and bit-field (`extv', `extzv', 19762 and `insv') operations. 19763 19764 If the preparation falls through (invokes neither `DONE' nor `FAIL'), 19765 then the `define_expand' acts like a `define_insn' in that the RTL 19766 template is used to generate the insn. 19767 19768 The RTL template is not used for matching, only for generating the 19769 initial insn list. If the preparation statement always invokes `DONE' 19770 or `FAIL', the RTL template may be reduced to a simple list of 19771 operands, such as this example: 19772 19773 (define_expand "addsi3" 19774 [(match_operand:SI 0 "register_operand" "") 19775 (match_operand:SI 1 "register_operand" "") 19776 (match_operand:SI 2 "register_operand" "")] 19777 "" 19778 " 19779 { 19780 handle_add (operands[0], operands[1], operands[2]); 19781 DONE; 19782 }") 19783 19784 Here is an example, the definition of left-shift for the SPUR chip: 19785 19786 (define_expand "ashlsi3" 19787 [(set (match_operand:SI 0 "register_operand" "") 19788 (ashift:SI 19789 (match_operand:SI 1 "register_operand" "") 19790 (match_operand:SI 2 "nonmemory_operand" "")))] 19791 "" 19792 " 19793 19794 { 19795 if (GET_CODE (operands[2]) != CONST_INT 19796 || (unsigned) INTVAL (operands[2]) > 3) 19797 FAIL; 19798 }") 19799 19800 This example uses `define_expand' so that it can generate an RTL insn 19801 for shifting when the shift-count is in the supported range of 0 to 3 19802 but fail in other cases where machine insns aren't available. When it 19803 fails, the compiler tries another strategy using different patterns 19804 (such as, a library call). 19805 19806 If the compiler were able to handle nontrivial condition-strings in 19807 patterns with names, then it would be possible to use a `define_insn' 19808 in that case. Here is another case (zero-extension on the 68000) which 19809 makes more use of the power of `define_expand': 19810 19811 (define_expand "zero_extendhisi2" 19812 [(set (match_operand:SI 0 "general_operand" "") 19813 (const_int 0)) 19814 (set (strict_low_part 19815 (subreg:HI 19816 (match_dup 0) 19817 0)) 19818 (match_operand:HI 1 "general_operand" ""))] 19819 "" 19820 "operands[1] = make_safe_from (operands[1], operands[0]);") 19821 19822 Here two RTL insns are generated, one to clear the entire output operand 19823 and the other to copy the input operand into its low half. This 19824 sequence is incorrect if the input operand refers to [the old value of] 19825 the output operand, so the preparation statement makes sure this isn't 19826 so. The function `make_safe_from' copies the `operands[1]' into a 19827 temporary register if it refers to `operands[0]'. It does this by 19828 emitting another RTL insn. 19829 19830 Finally, a third example shows the use of an internal operand. 19831 Zero-extension on the SPUR chip is done by `and'-ing the result against 19832 a halfword mask. But this mask cannot be represented by a `const_int' 19833 because the constant value is too large to be legitimate on this 19834 machine. So it must be copied into a register with `force_reg' and 19835 then the register used in the `and'. 19836 19837 (define_expand "zero_extendhisi2" 19838 [(set (match_operand:SI 0 "register_operand" "") 19839 (and:SI (subreg:SI 19840 (match_operand:HI 1 "register_operand" "") 19841 0) 19842 (match_dup 2)))] 19843 "" 19844 "operands[2] 19845 = force_reg (SImode, GEN_INT (65535)); ") 19846 19847 _Note:_ If the `define_expand' is used to serve a standard binary or 19848 unary arithmetic operation or a bit-field operation, then the last insn 19849 it generates must not be a `code_label', `barrier' or `note'. It must 19850 be an `insn', `jump_insn' or `call_insn'. If you don't need a real insn 19851 at the end, emit an insn to copy the result of the operation into 19852 itself. Such an insn will generate no code, but it can avoid problems 19853 in the compiler. 19854 19855 19856 File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 19857 19858 14.16 Defining How to Split Instructions 19859 ======================================== 19860 19861 There are two cases where you should specify how to split a pattern 19862 into multiple insns. On machines that have instructions requiring 19863 delay slots (*note Delay Slots::) or that have instructions whose 19864 output is not available for multiple cycles (*note Processor pipeline 19865 description::), the compiler phases that optimize these cases need to 19866 be able to move insns into one-instruction delay slots. However, some 19867 insns may generate more than one machine instruction. These insns 19868 cannot be placed into a delay slot. 19869 19870 Often you can rewrite the single insn as a list of individual insns, 19871 each corresponding to one machine instruction. The disadvantage of 19872 doing so is that it will cause the compilation to be slower and require 19873 more space. If the resulting insns are too complex, it may also 19874 suppress some optimizations. The compiler splits the insn if there is a 19875 reason to believe that it might improve instruction or delay slot 19876 scheduling. 19877 19878 The insn combiner phase also splits putative insns. If three insns are 19879 merged into one insn with a complex expression that cannot be matched by 19880 some `define_insn' pattern, the combiner phase attempts to split the 19881 complex pattern into two insns that are recognized. Usually it can 19882 break the complex pattern into two patterns by splitting out some 19883 subexpression. However, in some other cases, such as performing an 19884 addition of a large constant in two insns on a RISC machine, the way to 19885 split the addition into two insns is machine-dependent. 19886 19887 The `define_split' definition tells the compiler how to split a 19888 complex insn into several simpler insns. It looks like this: 19889 19890 (define_split 19891 [INSN-PATTERN] 19892 "CONDITION" 19893 [NEW-INSN-PATTERN-1 19894 NEW-INSN-PATTERN-2 19895 ...] 19896 "PREPARATION-STATEMENTS") 19897 19898 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 19899 final condition to be tested, as in a `define_insn'. When an insn 19900 matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 19901 in the insn list with the insns given by NEW-INSN-PATTERN-1, 19902 NEW-INSN-PATTERN-2, etc. 19903 19904 The PREPARATION-STATEMENTS are similar to those statements that are 19905 specified for `define_expand' (*note Expander Definitions::) and are 19906 executed before the new RTL is generated to prepare for the generated 19907 code or emit some insns whose pattern is not fixed. Unlike those in 19908 `define_expand', however, these statements must not generate any new 19909 pseudo-registers. Once reload has completed, they also must not 19910 allocate any space in the stack frame. 19911 19912 Patterns are matched against INSN-PATTERN in two different 19913 circumstances. If an insn needs to be split for delay slot scheduling 19914 or insn scheduling, the insn is already known to be valid, which means 19915 that it must have been matched by some `define_insn' and, if 19916 `reload_completed' is nonzero, is known to satisfy the constraints of 19917 that `define_insn'. In that case, the new insn patterns must also be 19918 insns that are matched by some `define_insn' and, if `reload_completed' 19919 is nonzero, must also satisfy the constraints of those definitions. 19920 19921 As an example of this usage of `define_split', consider the following 19922 example from `a29k.md', which splits a `sign_extend' from `HImode' to 19923 `SImode' into a pair of shift insns: 19924 19925 (define_split 19926 [(set (match_operand:SI 0 "gen_reg_operand" "") 19927 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 19928 "" 19929 [(set (match_dup 0) 19930 (ashift:SI (match_dup 1) 19931 (const_int 16))) 19932 (set (match_dup 0) 19933 (ashiftrt:SI (match_dup 0) 19934 (const_int 16)))] 19935 " 19936 { operands[1] = gen_lowpart (SImode, operands[1]); }") 19937 19938 When the combiner phase tries to split an insn pattern, it is always 19939 the case that the pattern is _not_ matched by any `define_insn'. The 19940 combiner pass first tries to split a single `set' expression and then 19941 the same `set' expression inside a `parallel', but followed by a 19942 `clobber' of a pseudo-reg to use as a scratch register. In these 19943 cases, the combiner expects exactly two new insn patterns to be 19944 generated. It will verify that these patterns match some `define_insn' 19945 definitions, so you need not do this test in the `define_split' (of 19946 course, there is no point in writing a `define_split' that will never 19947 produce insns that match). 19948 19949 Here is an example of this use of `define_split', taken from 19950 `rs6000.md': 19951 19952 (define_split 19953 [(set (match_operand:SI 0 "gen_reg_operand" "") 19954 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 19955 (match_operand:SI 2 "non_add_cint_operand" "")))] 19956 "" 19957 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 19958 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 19959 " 19960 { 19961 int low = INTVAL (operands[2]) & 0xffff; 19962 int high = (unsigned) INTVAL (operands[2]) >> 16; 19963 19964 if (low & 0x8000) 19965 high++, low |= 0xffff0000; 19966 19967 operands[3] = GEN_INT (high << 16); 19968 operands[4] = GEN_INT (low); 19969 }") 19970 19971 Here the predicate `non_add_cint_operand' matches any `const_int' that 19972 is _not_ a valid operand of a single add insn. The add with the 19973 smaller displacement is written so that it can be substituted into the 19974 address of a subsequent operation. 19975 19976 An example that uses a scratch register, from the same file, generates 19977 an equality comparison of a register and a large constant: 19978 19979 (define_split 19980 [(set (match_operand:CC 0 "cc_reg_operand" "") 19981 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 19982 (match_operand:SI 2 "non_short_cint_operand" ""))) 19983 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 19984 "find_single_use (operands[0], insn, 0) 19985 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 19986 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 19987 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 19988 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 19989 " 19990 { 19991 /* Get the constant we are comparing against, C, and see what it 19992 looks like sign-extended to 16 bits. Then see what constant 19993 could be XOR'ed with C to get the sign-extended value. */ 19994 19995 int c = INTVAL (operands[2]); 19996 int sextc = (c << 16) >> 16; 19997 int xorv = c ^ sextc; 19998 19999 operands[4] = GEN_INT (xorv); 20000 operands[5] = GEN_INT (sextc); 20001 }") 20002 20003 To avoid confusion, don't write a single `define_split' that accepts 20004 some insns that match some `define_insn' as well as some insns that 20005 don't. Instead, write two separate `define_split' definitions, one for 20006 the insns that are valid and one for the insns that are not valid. 20007 20008 The splitter is allowed to split jump instructions into sequence of 20009 jumps or create new jumps in while splitting non-jump instructions. As 20010 the central flowgraph and branch prediction information needs to be 20011 updated, several restriction apply. 20012 20013 Splitting of jump instruction into sequence that over by another jump 20014 instruction is always valid, as compiler expect identical behavior of 20015 new jump. When new sequence contains multiple jump instructions or new 20016 labels, more assistance is needed. Splitter is required to create only 20017 unconditional jumps, or simple conditional jump instructions. 20018 Additionally it must attach a `REG_BR_PROB' note to each conditional 20019 jump. A global variable `split_branch_probability' holds the 20020 probability of the original branch in case it was an simple conditional 20021 jump, -1 otherwise. To simplify recomputing of edge frequencies, the 20022 new sequence is required to have only forward jumps to the newly 20023 created labels. 20024 20025 For the common case where the pattern of a define_split exactly 20026 matches the pattern of a define_insn, use `define_insn_and_split'. It 20027 looks like this: 20028 20029 (define_insn_and_split 20030 [INSN-PATTERN] 20031 "CONDITION" 20032 "OUTPUT-TEMPLATE" 20033 "SPLIT-CONDITION" 20034 [NEW-INSN-PATTERN-1 20035 NEW-INSN-PATTERN-2 20036 ...] 20037 "PREPARATION-STATEMENTS" 20038 [INSN-ATTRIBUTES]) 20039 20040 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 20041 as in `define_insn'. The NEW-INSN-PATTERN vector and the 20042 PREPARATION-STATEMENTS are used as in a `define_split'. The 20043 SPLIT-CONDITION is also used as in `define_split', with the additional 20044 behavior that if the condition starts with `&&', the condition used for 20045 the split will be the constructed as a logical "and" of the split 20046 condition with the insn condition. For example, from i386.md: 20047 20048 (define_insn_and_split "zero_extendhisi2_and" 20049 [(set (match_operand:SI 0 "register_operand" "=r") 20050 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 20051 (clobber (reg:CC 17))] 20052 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 20053 "#" 20054 "&& reload_completed" 20055 [(parallel [(set (match_dup 0) 20056 (and:SI (match_dup 0) (const_int 65535))) 20057 (clobber (reg:CC 17))])] 20058 "" 20059 [(set_attr "type" "alu1")]) 20060 20061 In this case, the actual split condition will be 20062 `TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 20063 20064 The `define_insn_and_split' construction provides exactly the same 20065 functionality as two separate `define_insn' and `define_split' 20066 patterns. It exists for compactness, and as a maintenance tool to 20067 prevent having to ensure the two patterns' templates match. 20068 20069 20070 File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 20071 20072 14.17 Including Patterns in Machine Descriptions. 20073 ================================================= 20074 20075 The `include' pattern tells the compiler tools where to look for 20076 patterns that are in files other than in the file `.md'. This is used 20077 only at build time and there is no preprocessing allowed. 20078 20079 It looks like: 20080 20081 20082 (include 20083 PATHNAME) 20084 20085 For example: 20086 20087 20088 (include "filestuff") 20089 20090 Where PATHNAME is a string that specifies the location of the file, 20091 specifies the include file to be in `gcc/config/target/filestuff'. The 20092 directory `gcc/config/target' is regarded as the default directory. 20093 20094 Machine descriptions may be split up into smaller more manageable 20095 subsections and placed into subdirectories. 20096 20097 By specifying: 20098 20099 20100 (include "BOGUS/filestuff") 20101 20102 the include file is specified to be in 20103 `gcc/config/TARGET/BOGUS/filestuff'. 20104 20105 Specifying an absolute path for the include file such as; 20106 20107 (include "/u2/BOGUS/filestuff") 20108 is permitted but is not encouraged. 20109 20110 14.17.1 RTL Generation Tool Options for Directory Search 20111 -------------------------------------------------------- 20112 20113 The `-IDIR' option specifies directories to search for machine 20114 descriptions. For example: 20115 20116 20117 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 20118 20119 Add the directory DIR to the head of the list of directories to be 20120 searched for header files. This can be used to override a system 20121 machine definition file, substituting your own version, since these 20122 directories are searched before the default machine description file 20123 directories. If you use more than one `-I' option, the directories are 20124 scanned in left-to-right order; the standard default directory come 20125 after. 20126 20127 20128 File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 20129 20130 14.18 Machine-Specific Peephole Optimizers 20131 ========================================== 20132 20133 In addition to instruction patterns the `md' file may contain 20134 definitions of machine-specific peephole optimizations. 20135 20136 The combiner does not notice certain peephole optimizations when the 20137 data flow in the program does not suggest that it should try them. For 20138 example, sometimes two consecutive insns related in purpose can be 20139 combined even though the second one does not appear to use a register 20140 computed in the first one. A machine-specific peephole optimizer can 20141 detect such opportunities. 20142 20143 There are two forms of peephole definitions that may be used. The 20144 original `define_peephole' is run at assembly output time to match 20145 insns and substitute assembly text. Use of `define_peephole' is 20146 deprecated. 20147 20148 A newer `define_peephole2' matches insns and substitutes new insns. 20149 The `peephole2' pass is run after register allocation but before 20150 scheduling, which may result in much better code for targets that do 20151 scheduling. 20152 20153 * Menu: 20154 20155 * define_peephole:: RTL to Text Peephole Optimizers 20156 * define_peephole2:: RTL to RTL Peephole Optimizers 20157 20158 20159 File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 20160 20161 14.18.1 RTL to Text Peephole Optimizers 20162 --------------------------------------- 20163 20164 A definition looks like this: 20165 20166 (define_peephole 20167 [INSN-PATTERN-1 20168 INSN-PATTERN-2 20169 ...] 20170 "CONDITION" 20171 "TEMPLATE" 20172 "OPTIONAL-INSN-ATTRIBUTES") 20173 20174 The last string operand may be omitted if you are not using any 20175 machine-specific information in this machine description. If present, 20176 it must obey the same rules as in a `define_insn'. 20177 20178 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 20179 consecutive insns. The optimization applies to a sequence of insns when 20180 INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 20181 and so on. 20182 20183 Each of the insns matched by a peephole must also match a 20184 `define_insn'. Peepholes are checked only at the last stage just 20185 before code generation, and only optionally. Therefore, any insn which 20186 would match a peephole but no `define_insn' will cause a crash in code 20187 generation in an unoptimized compilation, or at various optimization 20188 stages. 20189 20190 The operands of the insns are matched with `match_operands', 20191 `match_operator', and `match_dup', as usual. What is not usual is that 20192 the operand numbers apply to all the insn patterns in the definition. 20193 So, you can check for identical operands in two insns by using 20194 `match_operand' in one insn and `match_dup' in the other. 20195 20196 The operand constraints used in `match_operand' patterns do not have 20197 any direct effect on the applicability of the peephole, but they will 20198 be validated afterward, so make sure your constraints are general enough 20199 to apply whenever the peephole matches. If the peephole matches but 20200 the constraints are not satisfied, the compiler will crash. 20201 20202 It is safe to omit constraints in all the operands of the peephole; or 20203 you can write constraints which serve as a double-check on the criteria 20204 previously tested. 20205 20206 Once a sequence of insns matches the patterns, the CONDITION is 20207 checked. This is a C expression which makes the final decision whether 20208 to perform the optimization (we do so if the expression is nonzero). If 20209 CONDITION is omitted (in other words, the string is empty) then the 20210 optimization is applied to every sequence of insns that matches the 20211 patterns. 20212 20213 The defined peephole optimizations are applied after register 20214 allocation is complete. Therefore, the peephole definition can check 20215 which operands have ended up in which kinds of registers, just by 20216 looking at the operands. 20217 20218 The way to refer to the operands in CONDITION is to write 20219 `operands[I]' for operand number I (as matched by `(match_operand I 20220 ...)'). Use the variable `insn' to refer to the last of the insns 20221 being matched; use `prev_active_insn' to find the preceding insns. 20222 20223 When optimizing computations with intermediate results, you can use 20224 CONDITION to match only when the intermediate results are not used 20225 elsewhere. Use the C expression `dead_or_set_p (INSN, OP)', where INSN 20226 is the insn in which you expect the value to be used for the last time 20227 (from the value of `insn', together with use of `prev_nonnote_insn'), 20228 and OP is the intermediate value (from `operands[I]'). 20229 20230 Applying the optimization means replacing the sequence of insns with 20231 one new insn. The TEMPLATE controls ultimate output of assembler code 20232 for this combined insn. It works exactly like the template of a 20233 `define_insn'. Operand numbers in this template are the same ones used 20234 in matching the original sequence of insns. 20235 20236 The result of a defined peephole optimizer does not need to match any 20237 of the insn patterns in the machine description; it does not even have 20238 an opportunity to match them. The peephole optimizer definition itself 20239 serves as the insn pattern to control how the insn is output. 20240 20241 Defined peephole optimizers are run as assembler code is being output, 20242 so the insns they produce are never combined or rearranged in any way. 20243 20244 Here is an example, taken from the 68000 machine description: 20245 20246 (define_peephole 20247 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 20248 (set (match_operand:DF 0 "register_operand" "=f") 20249 (match_operand:DF 1 "register_operand" "ad"))] 20250 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 20251 { 20252 rtx xoperands[2]; 20253 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 20254 #ifdef MOTOROLA 20255 output_asm_insn ("move.l %1,(sp)", xoperands); 20256 output_asm_insn ("move.l %1,-(sp)", operands); 20257 return "fmove.d (sp)+,%0"; 20258 #else 20259 output_asm_insn ("movel %1,sp@", xoperands); 20260 output_asm_insn ("movel %1,sp@-", operands); 20261 return "fmoved sp@+,%0"; 20262 #endif 20263 }) 20264 20265 The effect of this optimization is to change 20266 20267 jbsr _foobar 20268 addql #4,sp 20269 movel d1,sp@- 20270 movel d0,sp@- 20271 fmoved sp@+,fp0 20272 20273 into 20274 20275 jbsr _foobar 20276 movel d1,sp@ 20277 movel d0,sp@- 20278 fmoved sp@+,fp0 20279 20280 INSN-PATTERN-1 and so on look _almost_ like the second operand of 20281 `define_insn'. There is one important difference: the second operand 20282 of `define_insn' consists of one or more RTX's enclosed in square 20283 brackets. Usually, there is only one: then the same action can be 20284 written as an element of a `define_peephole'. But when there are 20285 multiple actions in a `define_insn', they are implicitly enclosed in a 20286 `parallel'. Then you must explicitly write the `parallel', and the 20287 square brackets within it, in the `define_peephole'. Thus, if an insn 20288 pattern looks like this, 20289 20290 (define_insn "divmodsi4" 20291 [(set (match_operand:SI 0 "general_operand" "=d") 20292 (div:SI (match_operand:SI 1 "general_operand" "0") 20293 (match_operand:SI 2 "general_operand" "dmsK"))) 20294 (set (match_operand:SI 3 "general_operand" "=d") 20295 (mod:SI (match_dup 1) (match_dup 2)))] 20296 "TARGET_68020" 20297 "divsl%.l %2,%3:%0") 20298 20299 then the way to mention this insn in a peephole is as follows: 20300 20301 (define_peephole 20302 [... 20303 (parallel 20304 [(set (match_operand:SI 0 "general_operand" "=d") 20305 (div:SI (match_operand:SI 1 "general_operand" "0") 20306 (match_operand:SI 2 "general_operand" "dmsK"))) 20307 (set (match_operand:SI 3 "general_operand" "=d") 20308 (mod:SI (match_dup 1) (match_dup 2)))]) 20309 ...] 20310 ...) 20311 20312 20313 File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 20314 20315 14.18.2 RTL to RTL Peephole Optimizers 20316 -------------------------------------- 20317 20318 The `define_peephole2' definition tells the compiler how to substitute 20319 one sequence of instructions for another sequence, what additional 20320 scratch registers may be needed and what their lifetimes must be. 20321 20322 (define_peephole2 20323 [INSN-PATTERN-1 20324 INSN-PATTERN-2 20325 ...] 20326 "CONDITION" 20327 [NEW-INSN-PATTERN-1 20328 NEW-INSN-PATTERN-2 20329 ...] 20330 "PREPARATION-STATEMENTS") 20331 20332 The definition is almost identical to `define_split' (*note Insn 20333 Splitting::) except that the pattern to match is not a single 20334 instruction, but a sequence of instructions. 20335 20336 It is possible to request additional scratch registers for use in the 20337 output template. If appropriate registers are not free, the pattern 20338 will simply not match. 20339 20340 Scratch registers are requested with a `match_scratch' pattern at the 20341 top level of the input pattern. The allocated register (initially) will 20342 be dead at the point requested within the original sequence. If the 20343 scratch is used at more than a single point, a `match_dup' pattern at 20344 the top level of the input pattern marks the last position in the input 20345 sequence at which the register must be available. 20346 20347 Here is an example from the IA-32 machine description: 20348 20349 (define_peephole2 20350 [(match_scratch:SI 2 "r") 20351 (parallel [(set (match_operand:SI 0 "register_operand" "") 20352 (match_operator:SI 3 "arith_or_logical_operator" 20353 [(match_dup 0) 20354 (match_operand:SI 1 "memory_operand" "")])) 20355 (clobber (reg:CC 17))])] 20356 "! optimize_size && ! TARGET_READ_MODIFY" 20357 [(set (match_dup 2) (match_dup 1)) 20358 (parallel [(set (match_dup 0) 20359 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 20360 (clobber (reg:CC 17))])] 20361 "") 20362 20363 This pattern tries to split a load from its use in the hopes that we'll 20364 be able to schedule around the memory load latency. It allocates a 20365 single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to 20366 be live only at the point just before the arithmetic. 20367 20368 A real example requiring extended scratch lifetimes is harder to come 20369 by, so here's a silly made-up example: 20370 20371 (define_peephole2 20372 [(match_scratch:SI 4 "r") 20373 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 20374 (set (match_operand:SI 2 "" "") (match_dup 1)) 20375 (match_dup 4) 20376 (set (match_operand:SI 3 "" "") (match_dup 1))] 20377 "/* determine 1 does not overlap 0 and 2 */" 20378 [(set (match_dup 4) (match_dup 1)) 20379 (set (match_dup 0) (match_dup 4)) 20380 (set (match_dup 2) (match_dup 4))] 20381 (set (match_dup 3) (match_dup 4))] 20382 "") 20383 20384 If we had not added the `(match_dup 4)' in the middle of the input 20385 sequence, it might have been the case that the register we chose at the 20386 beginning of the sequence is killed by the first or second `set'. 20387 20388 20389 File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 20390 20391 14.19 Instruction Attributes 20392 ============================ 20393 20394 In addition to describing the instruction supported by the target 20395 machine, the `md' file also defines a group of "attributes" and a set of 20396 values for each. Every generated insn is assigned a value for each 20397 attribute. One possible attribute would be the effect that the insn 20398 has on the machine's condition code. This attribute can then be used 20399 by `NOTICE_UPDATE_CC' to track the condition codes. 20400 20401 * Menu: 20402 20403 * Defining Attributes:: Specifying attributes and their values. 20404 * Expressions:: Valid expressions for attribute values. 20405 * Tagging Insns:: Assigning attribute values to insns. 20406 * Attr Example:: An example of assigning attributes. 20407 * Insn Lengths:: Computing the length of insns. 20408 * Constant Attributes:: Defining attributes that are constant. 20409 * Delay Slots:: Defining delay slots required for a machine. 20410 * Processor pipeline description:: Specifying information for insn scheduling. 20411 20412 20413 File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 20414 20415 14.19.1 Defining Attributes and their Values 20416 -------------------------------------------- 20417 20418 The `define_attr' expression is used to define each attribute required 20419 by the target machine. It looks like: 20420 20421 (define_attr NAME LIST-OF-VALUES DEFAULT) 20422 20423 NAME is a string specifying the name of the attribute being defined. 20424 20425 LIST-OF-VALUES is either a string that specifies a comma-separated 20426 list of values that can be assigned to the attribute, or a null string 20427 to indicate that the attribute takes numeric values. 20428 20429 DEFAULT is an attribute expression that gives the value of this 20430 attribute for insns that match patterns whose definition does not 20431 include an explicit value for this attribute. *Note Attr Example::, 20432 for more information on the handling of defaults. *Note Constant 20433 Attributes::, for information on attributes that do not depend on any 20434 particular insn. 20435 20436 For each defined attribute, a number of definitions are written to the 20437 `insn-attr.h' file. For cases where an explicit set of values is 20438 specified for an attribute, the following are defined: 20439 20440 * A `#define' is written for the symbol `HAVE_ATTR_NAME'. 20441 20442 * An enumerated class is defined for `attr_NAME' with elements of 20443 the form `UPPER-NAME_UPPER-VALUE' where the attribute name and 20444 value are first converted to uppercase. 20445 20446 * A function `get_attr_NAME' is defined that is passed an insn and 20447 returns the attribute value for that insn. 20448 20449 For example, if the following is present in the `md' file: 20450 20451 (define_attr "type" "branch,fp,load,store,arith" ...) 20452 20453 the following lines will be written to the file `insn-attr.h'. 20454 20455 #define HAVE_ATTR_type 20456 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 20457 TYPE_STORE, TYPE_ARITH}; 20458 extern enum attr_type get_attr_type (); 20459 20460 If the attribute takes numeric values, no `enum' type will be defined 20461 and the function to obtain the attribute's value will return `int'. 20462 20463 20464 File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 20465 20466 14.19.2 Attribute Expressions 20467 ----------------------------- 20468 20469 RTL expressions used to define attributes use the codes described above 20470 plus a few specific to attribute definitions, to be discussed below. 20471 Attribute value expressions must have one of the following forms: 20472 20473 `(const_int I)' 20474 The integer I specifies the value of a numeric attribute. I must 20475 be non-negative. 20476 20477 The value of a numeric attribute can be specified either with a 20478 `const_int', or as an integer represented as a string in 20479 `const_string', `eq_attr' (see below), `attr', `symbol_ref', 20480 simple arithmetic expressions, and `set_attr' overrides on 20481 specific instructions (*note Tagging Insns::). 20482 20483 `(const_string VALUE)' 20484 The string VALUE specifies a constant attribute value. If VALUE 20485 is specified as `"*"', it means that the default value of the 20486 attribute is to be used for the insn containing this expression. 20487 `"*"' obviously cannot be used in the DEFAULT expression of a 20488 `define_attr'. 20489 20490 If the attribute whose value is being specified is numeric, VALUE 20491 must be a string containing a non-negative integer (normally 20492 `const_int' would be used in this case). Otherwise, it must 20493 contain one of the valid values for the attribute. 20494 20495 `(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 20496 TEST specifies an attribute test, whose format is defined below. 20497 The value of this expression is TRUE-VALUE if TEST is true, 20498 otherwise it is FALSE-VALUE. 20499 20500 `(cond [TEST1 VALUE1 ...] DEFAULT)' 20501 The first operand of this expression is a vector containing an even 20502 number of expressions and consisting of pairs of TEST and VALUE 20503 expressions. The value of the `cond' expression is that of the 20504 VALUE corresponding to the first true TEST expression. If none of 20505 the TEST expressions are true, the value of the `cond' expression 20506 is that of the DEFAULT expression. 20507 20508 TEST expressions can have one of the following forms: 20509 20510 `(const_int I)' 20511 This test is true if I is nonzero and false otherwise. 20512 20513 `(not TEST)' 20514 `(ior TEST1 TEST2)' 20515 `(and TEST1 TEST2)' 20516 These tests are true if the indicated logical function is true. 20517 20518 `(match_operand:M N PRED CONSTRAINTS)' 20519 This test is true if operand N of the insn whose attribute value 20520 is being determined has mode M (this part of the test is ignored 20521 if M is `VOIDmode') and the function specified by the string PRED 20522 returns a nonzero value when passed operand N and mode M (this 20523 part of the test is ignored if PRED is the null string). 20524 20525 The CONSTRAINTS operand is ignored and should be the null string. 20526 20527 `(le ARITH1 ARITH2)' 20528 `(leu ARITH1 ARITH2)' 20529 `(lt ARITH1 ARITH2)' 20530 `(ltu ARITH1 ARITH2)' 20531 `(gt ARITH1 ARITH2)' 20532 `(gtu ARITH1 ARITH2)' 20533 `(ge ARITH1 ARITH2)' 20534 `(geu ARITH1 ARITH2)' 20535 `(ne ARITH1 ARITH2)' 20536 `(eq ARITH1 ARITH2)' 20537 These tests are true if the indicated comparison of the two 20538 arithmetic expressions is true. Arithmetic expressions are formed 20539 with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and', 20540 `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt' 20541 expressions. 20542 20543 `const_int' and `symbol_ref' are always valid terms (*note Insn 20544 Lengths::,for additional forms). `symbol_ref' is a string 20545 denoting a C expression that yields an `int' when evaluated by the 20546 `get_attr_...' routine. It should normally be a global variable. 20547 20548 `(eq_attr NAME VALUE)' 20549 NAME is a string specifying the name of an attribute. 20550 20551 VALUE is a string that is either a valid value for attribute NAME, 20552 a comma-separated list of values, or `!' followed by a value or 20553 list. If VALUE does not begin with a `!', this test is true if 20554 the value of the NAME attribute of the current insn is in the list 20555 specified by VALUE. If VALUE begins with a `!', this test is true 20556 if the attribute's value is _not_ in the specified list. 20557 20558 For example, 20559 20560 (eq_attr "type" "load,store") 20561 20562 is equivalent to 20563 20564 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 20565 20566 If NAME specifies an attribute of `alternative', it refers to the 20567 value of the compiler variable `which_alternative' (*note Output 20568 Statement::) and the values must be small integers. For example, 20569 20570 (eq_attr "alternative" "2,3") 20571 20572 is equivalent to 20573 20574 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 20575 (eq (symbol_ref "which_alternative") (const_int 3))) 20576 20577 Note that, for most attributes, an `eq_attr' test is simplified in 20578 cases where the value of the attribute being tested is known for 20579 all insns matching a particular pattern. This is by far the most 20580 common case. 20581 20582 `(attr_flag NAME)' 20583 The value of an `attr_flag' expression is true if the flag 20584 specified by NAME is true for the `insn' currently being scheduled. 20585 20586 NAME is a string specifying one of a fixed set of flags to test. 20587 Test the flags `forward' and `backward' to determine the direction 20588 of a conditional branch. Test the flags `very_likely', `likely', 20589 `very_unlikely', and `unlikely' to determine if a conditional 20590 branch is expected to be taken. 20591 20592 If the `very_likely' flag is true, then the `likely' flag is also 20593 true. Likewise for the `very_unlikely' and `unlikely' flags. 20594 20595 This example describes a conditional branch delay slot which can 20596 be nullified for forward branches that are taken (annul-true) or 20597 for backward branches which are not taken (annul-false). 20598 20599 (define_delay (eq_attr "type" "cbranch") 20600 [(eq_attr "in_branch_delay" "true") 20601 (and (eq_attr "in_branch_delay" "true") 20602 (attr_flag "forward")) 20603 (and (eq_attr "in_branch_delay" "true") 20604 (attr_flag "backward"))]) 20605 20606 The `forward' and `backward' flags are false if the current `insn' 20607 being scheduled is not a conditional branch. 20608 20609 The `very_likely' and `likely' flags are true if the `insn' being 20610 scheduled is not a conditional branch. The `very_unlikely' and 20611 `unlikely' flags are false if the `insn' being scheduled is not a 20612 conditional branch. 20613 20614 `attr_flag' is only used during delay slot scheduling and has no 20615 meaning to other passes of the compiler. 20616 20617 `(attr NAME)' 20618 The value of another attribute is returned. This is most useful 20619 for numeric attributes, as `eq_attr' and `attr_flag' produce more 20620 efficient code for non-numeric attributes. 20621 20622 20623 File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 20624 20625 14.19.3 Assigning Attribute Values to Insns 20626 ------------------------------------------- 20627 20628 The value assigned to an attribute of an insn is primarily determined by 20629 which pattern is matched by that insn (or which `define_peephole' 20630 generated it). Every `define_insn' and `define_peephole' can have an 20631 optional last argument to specify the values of attributes for matching 20632 insns. The value of any attribute not specified in a particular insn 20633 is set to the default value for that attribute, as specified in its 20634 `define_attr'. Extensive use of default values for attributes permits 20635 the specification of the values for only one or two attributes in the 20636 definition of most insn patterns, as seen in the example in the next 20637 section. 20638 20639 The optional last argument of `define_insn' and `define_peephole' is a 20640 vector of expressions, each of which defines the value for a single 20641 attribute. The most general way of assigning an attribute's value is 20642 to use a `set' expression whose first operand is an `attr' expression 20643 giving the name of the attribute being set. The second operand of the 20644 `set' is an attribute expression (*note Expressions::) giving the value 20645 of the attribute. 20646 20647 When the attribute value depends on the `alternative' attribute (i.e., 20648 which is the applicable alternative in the constraint of the insn), the 20649 `set_attr_alternative' expression can be used. It allows the 20650 specification of a vector of attribute expressions, one for each 20651 alternative. 20652 20653 When the generality of arbitrary attribute expressions is not required, 20654 the simpler `set_attr' expression can be used, which allows specifying 20655 a string giving either a single attribute value or a list of attribute 20656 values, one for each alternative. 20657 20658 The form of each of the above specifications is shown below. In each 20659 case, NAME is a string specifying the attribute to be set. 20660 20661 `(set_attr NAME VALUE-STRING)' 20662 VALUE-STRING is either a string giving the desired attribute value, 20663 or a string containing a comma-separated list giving the values for 20664 succeeding alternatives. The number of elements must match the 20665 number of alternatives in the constraint of the insn pattern. 20666 20667 Note that it may be useful to specify `*' for some alternative, in 20668 which case the attribute will assume its default value for insns 20669 matching that alternative. 20670 20671 `(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 20672 Depending on the alternative of the insn, the value will be one of 20673 the specified values. This is a shorthand for using a `cond' with 20674 tests on the `alternative' attribute. 20675 20676 `(set (attr NAME) VALUE)' 20677 The first operand of this `set' must be the special RTL expression 20678 `attr', whose sole operand is a string giving the name of the 20679 attribute being set. VALUE is the value of the attribute. 20680 20681 The following shows three different ways of representing the same 20682 attribute value specification: 20683 20684 (set_attr "type" "load,store,arith") 20685 20686 (set_attr_alternative "type" 20687 [(const_string "load") (const_string "store") 20688 (const_string "arith")]) 20689 20690 (set (attr "type") 20691 (cond [(eq_attr "alternative" "1") (const_string "load") 20692 (eq_attr "alternative" "2") (const_string "store")] 20693 (const_string "arith"))) 20694 20695 The `define_asm_attributes' expression provides a mechanism to specify 20696 the attributes assigned to insns produced from an `asm' statement. It 20697 has the form: 20698 20699 (define_asm_attributes [ATTR-SETS]) 20700 20701 where ATTR-SETS is specified the same as for both the `define_insn' and 20702 the `define_peephole' expressions. 20703 20704 These values will typically be the "worst case" attribute values. For 20705 example, they might indicate that the condition code will be clobbered. 20706 20707 A specification for a `length' attribute is handled specially. The 20708 way to compute the length of an `asm' insn is to multiply the length 20709 specified in the expression `define_asm_attributes' by the number of 20710 machine instructions specified in the `asm' statement, determined by 20711 counting the number of semicolons and newlines in the string. 20712 Therefore, the value of the `length' attribute specified in a 20713 `define_asm_attributes' should be the maximum possible length of a 20714 single machine instruction. 20715 20716 20717 File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 20718 20719 14.19.4 Example of Attribute Specifications 20720 ------------------------------------------- 20721 20722 The judicious use of defaulting is important in the efficient use of 20723 insn attributes. Typically, insns are divided into "types" and an 20724 attribute, customarily called `type', is used to represent this value. 20725 This attribute is normally used only to define the default value for 20726 other attributes. An example will clarify this usage. 20727 20728 Assume we have a RISC machine with a condition code and in which only 20729 full-word operations are performed in registers. Let us assume that we 20730 can divide all insns into loads, stores, (integer) arithmetic 20731 operations, floating point operations, and branches. 20732 20733 Here we will concern ourselves with determining the effect of an insn 20734 on the condition code and will limit ourselves to the following possible 20735 effects: The condition code can be set unpredictably (clobbered), not 20736 be changed, be set to agree with the results of the operation, or only 20737 changed if the item previously set into the condition code has been 20738 modified. 20739 20740 Here is part of a sample `md' file for such a machine: 20741 20742 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 20743 20744 (define_attr "cc" "clobber,unchanged,set,change0" 20745 (cond [(eq_attr "type" "load") 20746 (const_string "change0") 20747 (eq_attr "type" "store,branch") 20748 (const_string "unchanged") 20749 (eq_attr "type" "arith") 20750 (if_then_else (match_operand:SI 0 "" "") 20751 (const_string "set") 20752 (const_string "clobber"))] 20753 (const_string "clobber"))) 20754 20755 (define_insn "" 20756 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 20757 (match_operand:SI 1 "general_operand" "r,m,r"))] 20758 "" 20759 "@ 20760 move %0,%1 20761 load %0,%1 20762 store %0,%1" 20763 [(set_attr "type" "arith,load,store")]) 20764 20765 Note that we assume in the above example that arithmetic operations 20766 performed on quantities smaller than a machine word clobber the 20767 condition code since they will set the condition code to a value 20768 corresponding to the full-word result. 20769 20770 20771 File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 20772 20773 14.19.5 Computing the Length of an Insn 20774 --------------------------------------- 20775 20776 For many machines, multiple types of branch instructions are provided, 20777 each for different length branch displacements. In most cases, the 20778 assembler will choose the correct instruction to use. However, when 20779 the assembler cannot do so, GCC can when a special attribute, the 20780 `length' attribute, is defined. This attribute must be defined to have 20781 numeric values by specifying a null string in its `define_attr'. 20782 20783 In the case of the `length' attribute, two additional forms of 20784 arithmetic terms are allowed in test expressions: 20785 20786 `(match_dup N)' 20787 This refers to the address of operand N of the current insn, which 20788 must be a `label_ref'. 20789 20790 `(pc)' 20791 This refers to the address of the _current_ insn. It might have 20792 been more consistent with other usage to make this the address of 20793 the _next_ insn but this would be confusing because the length of 20794 the current insn is to be computed. 20795 20796 For normal insns, the length will be determined by value of the 20797 `length' attribute. In the case of `addr_vec' and `addr_diff_vec' insn 20798 patterns, the length is computed as the number of vectors multiplied by 20799 the size of each vector. 20800 20801 Lengths are measured in addressable storage units (bytes). 20802 20803 The following macros can be used to refine the length computation: 20804 20805 `ADJUST_INSN_LENGTH (INSN, LENGTH)' 20806 If defined, modifies the length assigned to instruction INSN as a 20807 function of the context in which it is used. LENGTH is an lvalue 20808 that contains the initially computed length of the insn and should 20809 be updated with the correct length of the insn. 20810 20811 This macro will normally not be required. A case in which it is 20812 required is the ROMP. On this machine, the size of an `addr_vec' 20813 insn must be increased by two to compensate for the fact that 20814 alignment may be required. 20815 20816 The routine that returns `get_attr_length' (the value of the `length' 20817 attribute) can be used by the output routine to determine the form of 20818 the branch instruction to be written, as the example below illustrates. 20819 20820 As an example of the specification of variable-length branches, 20821 consider the IBM 360. If we adopt the convention that a register will 20822 be set to the starting address of a function, we can jump to labels 20823 within 4k of the start using a four-byte instruction. Otherwise, we 20824 need a six-byte sequence to load the address from memory and then 20825 branch to it. 20826 20827 On such a machine, a pattern for a branch instruction might be 20828 specified as follows: 20829 20830 (define_insn "jump" 20831 [(set (pc) 20832 (label_ref (match_operand 0 "" "")))] 20833 "" 20834 { 20835 return (get_attr_length (insn) == 4 20836 ? "b %l0" : "l r15,=a(%l0); br r15"); 20837 } 20838 [(set (attr "length") 20839 (if_then_else (lt (match_dup 0) (const_int 4096)) 20840 (const_int 4) 20841 (const_int 6)))]) 20842 20843 20844 File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes 20845 20846 14.19.6 Constant Attributes 20847 --------------------------- 20848 20849 A special form of `define_attr', where the expression for the default 20850 value is a `const' expression, indicates an attribute that is constant 20851 for a given run of the compiler. Constant attributes may be used to 20852 specify which variety of processor is used. For example, 20853 20854 (define_attr "cpu" "m88100,m88110,m88000" 20855 (const 20856 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 20857 (symbol_ref "TARGET_88110") (const_string "m88110")] 20858 (const_string "m88000")))) 20859 20860 (define_attr "memory" "fast,slow" 20861 (const 20862 (if_then_else (symbol_ref "TARGET_FAST_MEM") 20863 (const_string "fast") 20864 (const_string "slow")))) 20865 20866 The routine generated for constant attributes has no parameters as it 20867 does not depend on any particular insn. RTL expressions used to define 20868 the value of a constant attribute may use the `symbol_ref' form, but 20869 may not use either the `match_operand' form or `eq_attr' forms 20870 involving insn attributes. 20871 20872 20873 File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes 20874 20875 14.19.7 Delay Slot Scheduling 20876 ----------------------------- 20877 20878 The insn attribute mechanism can be used to specify the requirements for 20879 delay slots, if any, on a target machine. An instruction is said to 20880 require a "delay slot" if some instructions that are physically after 20881 the instruction are executed as if they were located before it. 20882 Classic examples are branch and call instructions, which often execute 20883 the following instruction before the branch or call is performed. 20884 20885 On some machines, conditional branch instructions can optionally 20886 "annul" instructions in the delay slot. This means that the 20887 instruction will not be executed for certain branch outcomes. Both 20888 instructions that annul if the branch is true and instructions that 20889 annul if the branch is false are supported. 20890 20891 Delay slot scheduling differs from instruction scheduling in that 20892 determining whether an instruction needs a delay slot is dependent only 20893 on the type of instruction being generated, not on data flow between the 20894 instructions. See the next section for a discussion of data-dependent 20895 instruction scheduling. 20896 20897 The requirement of an insn needing one or more delay slots is indicated 20898 via the `define_delay' expression. It has the following form: 20899 20900 (define_delay TEST 20901 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 20902 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 20903 ...]) 20904 20905 TEST is an attribute test that indicates whether this `define_delay' 20906 applies to a particular insn. If so, the number of required delay 20907 slots is determined by the length of the vector specified as the second 20908 argument. An insn placed in delay slot N must satisfy attribute test 20909 DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 20910 may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 20911 specifies which insns in the delay slot may be annulled if the branch 20912 is false. If annulling is not supported for that delay slot, `(nil)' 20913 should be coded. 20914 20915 For example, in the common case where branch and call insns require a 20916 single delay slot, which may contain any insn other than a branch or 20917 call, the following would be placed in the `md' file: 20918 20919 (define_delay (eq_attr "type" "branch,call") 20920 [(eq_attr "type" "!branch,call") (nil) (nil)]) 20921 20922 Multiple `define_delay' expressions may be specified. In this case, 20923 each such expression specifies different delay slot requirements and 20924 there must be no insn for which tests in two `define_delay' expressions 20925 are both true. 20926 20927 For example, if we have a machine that requires one delay slot for 20928 branches but two for calls, no delay slot can contain a branch or call 20929 insn, and any valid insn in the delay slot for the branch can be 20930 annulled if the branch is true, we might represent this as follows: 20931 20932 (define_delay (eq_attr "type" "branch") 20933 [(eq_attr "type" "!branch,call") 20934 (eq_attr "type" "!branch,call") 20935 (nil)]) 20936 20937 (define_delay (eq_attr "type" "call") 20938 [(eq_attr "type" "!branch,call") (nil) (nil) 20939 (eq_attr "type" "!branch,call") (nil) (nil)]) 20940 20941 20942 File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 20943 20944 14.19.8 Specifying processor pipeline description 20945 ------------------------------------------------- 20946 20947 To achieve better performance, most modern processors (super-pipelined, 20948 superscalar RISC, and VLIW processors) have many "functional units" on 20949 which several instructions can be executed simultaneously. An 20950 instruction starts execution if its issue conditions are satisfied. If 20951 not, the instruction is stalled until its conditions are satisfied. 20952 Such "interlock (pipeline) delay" causes interruption of the fetching 20953 of successor instructions (or demands nop instructions, e.g. for some 20954 MIPS processors). 20955 20956 There are two major kinds of interlock delays in modern processors. 20957 The first one is a data dependence delay determining "instruction 20958 latency time". The instruction execution is not started until all 20959 source data have been evaluated by prior instructions (there are more 20960 complex cases when the instruction execution starts even when the data 20961 are not available but will be ready in given time after the instruction 20962 execution start). Taking the data dependence delays into account is 20963 simple. The data dependence (true, output, and anti-dependence) delay 20964 between two instructions is given by a constant. In most cases this 20965 approach is adequate. The second kind of interlock delays is a 20966 reservation delay. The reservation delay means that two instructions 20967 under execution will be in need of shared processors resources, i.e. 20968 buses, internal registers, and/or functional units, which are reserved 20969 for some time. Taking this kind of delay into account is complex 20970 especially for modern RISC processors. 20971 20972 The task of exploiting more processor parallelism is solved by an 20973 instruction scheduler. For a better solution to this problem, the 20974 instruction scheduler has to have an adequate description of the 20975 processor parallelism (or "pipeline description"). GCC machine 20976 descriptions describe processor parallelism and functional unit 20977 reservations for groups of instructions with the aid of "regular 20978 expressions". 20979 20980 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 20981 figure out the possibility of the instruction issue by the processor on 20982 a given simulated processor cycle. The pipeline hazard recognizer is 20983 automatically generated from the processor pipeline description. The 20984 pipeline hazard recognizer generated from the machine description is 20985 based on a deterministic finite state automaton (DFA): the instruction 20986 issue is possible if there is a transition from one automaton state to 20987 another one. This algorithm is very fast, and furthermore, its speed 20988 is not dependent on processor complexity(1). 20989 20990 The rest of this section describes the directives that constitute an 20991 automaton-based processor pipeline description. The order of these 20992 constructions within the machine description file is not important. 20993 20994 The following optional construction describes names of automata 20995 generated and used for the pipeline hazards recognition. Sometimes the 20996 generated finite state automaton used by the pipeline hazard recognizer 20997 is large. If we use more than one automaton and bind functional units 20998 to the automata, the total size of the automata is usually less than 20999 the size of the single automaton. If there is no one such 21000 construction, only one finite state automaton is generated. 21001 21002 (define_automaton AUTOMATA-NAMES) 21003 21004 AUTOMATA-NAMES is a string giving names of the automata. The names 21005 are separated by commas. All the automata should have unique names. 21006 The automaton name is used in the constructions `define_cpu_unit' and 21007 `define_query_cpu_unit'. 21008 21009 Each processor functional unit used in the description of instruction 21010 reservations should be described by the following construction. 21011 21012 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 21013 21014 UNIT-NAMES is a string giving the names of the functional units 21015 separated by commas. Don't use name `nothing', it is reserved for 21016 other goals. 21017 21018 AUTOMATON-NAME is a string giving the name of the automaton with which 21019 the unit is bound. The automaton should be described in construction 21020 `define_automaton'. You should give "automaton-name", if there is a 21021 defined automaton. 21022 21023 The assignment of units to automata are constrained by the uses of the 21024 units in insn reservations. The most important constraint is: if a 21025 unit reservation is present on a particular cycle of an alternative for 21026 an insn reservation, then some unit from the same automaton must be 21027 present on the same cycle for the other alternatives of the insn 21028 reservation. The rest of the constraints are mentioned in the 21029 description of the subsequent constructions. 21030 21031 The following construction describes CPU functional units analogously 21032 to `define_cpu_unit'. The reservation of such units can be queried for 21033 an automaton state. The instruction scheduler never queries 21034 reservation of functional units for given automaton state. So as a 21035 rule, you don't need this construction. This construction could be 21036 used for future code generation goals (e.g. to generate VLIW insn 21037 templates). 21038 21039 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 21040 21041 UNIT-NAMES is a string giving names of the functional units separated 21042 by commas. 21043 21044 AUTOMATON-NAME is a string giving the name of the automaton with which 21045 the unit is bound. 21046 21047 The following construction is the major one to describe pipeline 21048 characteristics of an instruction. 21049 21050 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 21051 CONDITION REGEXP) 21052 21053 DEFAULT_LATENCY is a number giving latency time of the instruction. 21054 There is an important difference between the old description and the 21055 automaton based pipeline description. The latency time is used for all 21056 dependencies when we use the old description. In the automaton based 21057 pipeline description, the given latency time is only used for true 21058 dependencies. The cost of anti-dependencies is always zero and the 21059 cost of output dependencies is the difference between latency times of 21060 the producing and consuming insns (if the difference is negative, the 21061 cost is considered to be zero). You can always change the default 21062 costs for any description by using the target hook 21063 `TARGET_SCHED_ADJUST_COST' (*note Scheduling::). 21064 21065 INSN-NAME is a string giving the internal name of the insn. The 21066 internal names are used in constructions `define_bypass' and in the 21067 automaton description file generated for debugging. The internal name 21068 has nothing in common with the names in `define_insn'. It is a good 21069 practice to use insn classes described in the processor manual. 21070 21071 CONDITION defines what RTL insns are described by this construction. 21072 You should remember that you will be in trouble if CONDITION for two or 21073 more different `define_insn_reservation' constructions is TRUE for an 21074 insn. In this case what reservation will be used for the insn is not 21075 defined. Such cases are not checked during generation of the pipeline 21076 hazards recognizer because in general recognizing that two conditions 21077 may have the same value is quite difficult (especially if the conditions 21078 contain `symbol_ref'). It is also not checked during the pipeline 21079 hazard recognizer work because it would slow down the recognizer 21080 considerably. 21081 21082 REGEXP is a string describing the reservation of the cpu's functional 21083 units by the instruction. The reservations are described by a regular 21084 expression according to the following syntax: 21085 21086 regexp = regexp "," oneof 21087 | oneof 21088 21089 oneof = oneof "|" allof 21090 | allof 21091 21092 allof = allof "+" repeat 21093 | repeat 21094 21095 repeat = element "*" number 21096 | element 21097 21098 element = cpu_function_unit_name 21099 | reservation_name 21100 | result_name 21101 | "nothing" 21102 | "(" regexp ")" 21103 21104 * `,' is used for describing the start of the next cycle in the 21105 reservation. 21106 21107 * `|' is used for describing a reservation described by the first 21108 regular expression *or* a reservation described by the second 21109 regular expression *or* etc. 21110 21111 * `+' is used for describing a reservation described by the first 21112 regular expression *and* a reservation described by the second 21113 regular expression *and* etc. 21114 21115 * `*' is used for convenience and simply means a sequence in which 21116 the regular expression are repeated NUMBER times with cycle 21117 advancing (see `,'). 21118 21119 * `cpu_function_unit_name' denotes reservation of the named 21120 functional unit. 21121 21122 * `reservation_name' -- see description of construction 21123 `define_reservation'. 21124 21125 * `nothing' denotes no unit reservations. 21126 21127 Sometimes unit reservations for different insns contain common parts. 21128 In such case, you can simplify the pipeline description by describing 21129 the common part by the following construction 21130 21131 (define_reservation RESERVATION-NAME REGEXP) 21132 21133 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 21134 names and reservation names are in the same name space. So the 21135 reservation names should be different from the functional unit names 21136 and can not be the reserved name `nothing'. 21137 21138 The following construction is used to describe exceptions in the 21139 latency time for given instruction pair. This is so called bypasses. 21140 21141 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 21142 [GUARD]) 21143 21144 NUMBER defines when the result generated by the instructions given in 21145 string OUT_INSN_NAMES will be ready for the instructions given in 21146 string IN_INSN_NAMES. The instructions in the string are separated by 21147 commas. 21148 21149 GUARD is an optional string giving the name of a C function which 21150 defines an additional guard for the bypass. The function will get the 21151 two insns as parameters. If the function returns zero the bypass will 21152 be ignored for this case. The additional guard is necessary to 21153 recognize complicated bypasses, e.g. when the consumer is only an 21154 address of insn `store' (not a stored value). 21155 21156 The following five constructions are usually used to describe VLIW 21157 processors, or more precisely, to describe a placement of small 21158 instructions into VLIW instruction slots. They can be used for RISC 21159 processors, too. 21160 21161 (exclusion_set UNIT-NAMES UNIT-NAMES) 21162 (presence_set UNIT-NAMES PATTERNS) 21163 (final_presence_set UNIT-NAMES PATTERNS) 21164 (absence_set UNIT-NAMES PATTERNS) 21165 (final_absence_set UNIT-NAMES PATTERNS) 21166 21167 UNIT-NAMES is a string giving names of functional units separated by 21168 commas. 21169 21170 PATTERNS is a string giving patterns of functional units separated by 21171 comma. Currently pattern is one unit or units separated by 21172 white-spaces. 21173 21174 The first construction (`exclusion_set') means that each functional 21175 unit in the first string can not be reserved simultaneously with a unit 21176 whose name is in the second string and vice versa. For example, the 21177 construction is useful for describing processors (e.g. some SPARC 21178 processors) with a fully pipelined floating point functional unit which 21179 can execute simultaneously only single floating point insns or only 21180 double floating point insns. 21181 21182 The second construction (`presence_set') means that each functional 21183 unit in the first string can not be reserved unless at least one of 21184 pattern of units whose names are in the second string is reserved. 21185 This is an asymmetric relation. For example, it is useful for 21186 description that VLIW `slot1' is reserved after `slot0' reservation. 21187 We could describe it by the following construction 21188 21189 (presence_set "slot1" "slot0") 21190 21191 Or `slot1' is reserved only after `slot0' and unit `b0' reservation. 21192 In this case we could write 21193 21194 (presence_set "slot1" "slot0 b0") 21195 21196 The third construction (`final_presence_set') is analogous to 21197 `presence_set'. The difference between them is when checking is done. 21198 When an instruction is issued in given automaton state reflecting all 21199 current and planned unit reservations, the automaton state is changed. 21200 The first state is a source state, the second one is a result state. 21201 Checking for `presence_set' is done on the source state reservation, 21202 checking for `final_presence_set' is done on the result reservation. 21203 This construction is useful to describe a reservation which is actually 21204 two subsequent reservations. For example, if we use 21205 21206 (presence_set "slot1" "slot0") 21207 21208 the following insn will be never issued (because `slot1' requires 21209 `slot0' which is absent in the source state). 21210 21211 (define_reservation "insn_and_nop" "slot0 + slot1") 21212 21213 but it can be issued if we use analogous `final_presence_set'. 21214 21215 The forth construction (`absence_set') means that each functional unit 21216 in the first string can be reserved only if each pattern of units whose 21217 names are in the second string is not reserved. This is an asymmetric 21218 relation (actually `exclusion_set' is analogous to this one but it is 21219 symmetric). For example it might be useful in a VLIW description to 21220 say that `slot0' cannot be reserved after either `slot1' or `slot2' 21221 have been reserved. This can be described as: 21222 21223 (absence_set "slot0" "slot1, slot2") 21224 21225 Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved 21226 or `slot1' and unit `b1' are reserved. In this case we could write 21227 21228 (absence_set "slot2" "slot0 b0, slot1 b1") 21229 21230 All functional units mentioned in a set should belong to the same 21231 automaton. 21232 21233 The last construction (`final_absence_set') is analogous to 21234 `absence_set' but checking is done on the result (state) reservation. 21235 See comments for `final_presence_set'. 21236 21237 You can control the generator of the pipeline hazard recognizer with 21238 the following construction. 21239 21240 (automata_option OPTIONS) 21241 21242 OPTIONS is a string giving options which affect the generated code. 21243 Currently there are the following options: 21244 21245 * "no-minimization" makes no minimization of the automaton. This is 21246 only worth to do when we are debugging the description and need to 21247 look more accurately at reservations of states. 21248 21249 * "time" means printing time statistics about the generation of 21250 automata. 21251 21252 * "stats" means printing statistics about the generated automata 21253 such as the number of DFA states, NDFA states and arcs. 21254 21255 * "v" means a generation of the file describing the result automata. 21256 The file has suffix `.dfa' and can be used for the description 21257 verification and debugging. 21258 21259 * "w" means a generation of warning instead of error for 21260 non-critical errors. 21261 21262 * "ndfa" makes nondeterministic finite state automata. This affects 21263 the treatment of operator `|' in the regular expressions. The 21264 usual treatment of the operator is to try the first alternative 21265 and, if the reservation is not possible, the second alternative. 21266 The nondeterministic treatment means trying all alternatives, some 21267 of them may be rejected by reservations in the subsequent insns. 21268 21269 * "progress" means output of a progress bar showing how many states 21270 were generated so far for automaton being processed. This is 21271 useful during debugging a DFA description. If you see too many 21272 generated states, you could interrupt the generator of the pipeline 21273 hazard recognizer and try to figure out a reason for generation of 21274 the huge automaton. 21275 21276 As an example, consider a superscalar RISC machine which can issue 21277 three insns (two integer insns and one floating point insn) on the 21278 cycle but can finish only two insns. To describe this, we define the 21279 following functional units. 21280 21281 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 21282 (define_cpu_unit "port0, port1") 21283 21284 All simple integer insns can be executed in any integer pipeline and 21285 their result is ready in two cycles. The simple integer insns are 21286 issued into the first pipeline unless it is reserved, otherwise they 21287 are issued into the second pipeline. Integer division and 21288 multiplication insns can be executed only in the second integer 21289 pipeline and their results are ready correspondingly in 8 and 4 cycles. 21290 The integer division is not pipelined, i.e. the subsequent integer 21291 division insn can not be issued until the current division insn 21292 finished. Floating point insns are fully pipelined and their results 21293 are ready in 3 cycles. Where the result of a floating point insn is 21294 used by an integer insn, an additional delay of one cycle is incurred. 21295 To describe all of this we could specify 21296 21297 (define_cpu_unit "div") 21298 21299 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 21300 "(i0_pipeline | i1_pipeline), (port0 | port1)") 21301 21302 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 21303 "i1_pipeline, nothing*2, (port0 | port1)") 21304 21305 (define_insn_reservation "div" 8 (eq_attr "type" "div") 21306 "i1_pipeline, div*7, div + (port0 | port1)") 21307 21308 (define_insn_reservation "float" 3 (eq_attr "type" "float") 21309 "f_pipeline, nothing, (port0 | port1)) 21310 21311 (define_bypass 4 "float" "simple,mult,div") 21312 21313 To simplify the description we could describe the following reservation 21314 21315 (define_reservation "finish" "port0|port1") 21316 21317 and use it in all `define_insn_reservation' as in the following 21318 construction 21319 21320 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 21321 "(i0_pipeline | i1_pipeline), finish") 21322 21323 ---------- Footnotes ---------- 21324 21325 (1) However, the size of the automaton depends on processor 21326 complexity. To limit this effect, machine descriptions can split 21327 orthogonal parts of the machine description among several automata: 21328 but then, since each of these must be stepped independently, this 21329 does cause a small decrease in the algorithm's performance. 21330 21331 21332 File: gccint.info, Node: Conditional Execution, Next: Constant Definitions, Prev: Insn Attributes, Up: Machine Desc 21333 21334 14.20 Conditional Execution 21335 =========================== 21336 21337 A number of architectures provide for some form of conditional 21338 execution, or predication. The hallmark of this feature is the ability 21339 to nullify most of the instructions in the instruction set. When the 21340 instruction set is large and not entirely symmetric, it can be quite 21341 tedious to describe these forms directly in the `.md' file. An 21342 alternative is the `define_cond_exec' template. 21343 21344 (define_cond_exec 21345 [PREDICATE-PATTERN] 21346 "CONDITION" 21347 "OUTPUT-TEMPLATE") 21348 21349 PREDICATE-PATTERN is the condition that must be true for the insn to 21350 be executed at runtime and should match a relational operator. One can 21351 use `match_operator' to match several relational operators at once. 21352 Any `match_operand' operands must have no more than one alternative. 21353 21354 CONDITION is a C expression that must be true for the generated 21355 pattern to match. 21356 21357 OUTPUT-TEMPLATE is a string similar to the `define_insn' output 21358 template (*note Output Template::), except that the `*' and `@' special 21359 cases do not apply. This is only useful if the assembly text for the 21360 predicate is a simple prefix to the main insn. In order to handle the 21361 general case, there is a global variable `current_insn_predicate' that 21362 will contain the entire predicate if the current insn is predicated, 21363 and will otherwise be `NULL'. 21364 21365 When `define_cond_exec' is used, an implicit reference to the 21366 `predicable' instruction attribute is made. *Note Insn Attributes::. 21367 This attribute must be boolean (i.e. have exactly two elements in its 21368 LIST-OF-VALUES). Further, it must not be used with complex 21369 expressions. That is, the default and all uses in the insns must be a 21370 simple constant, not dependent on the alternative or anything else. 21371 21372 For each `define_insn' for which the `predicable' attribute is true, a 21373 new `define_insn' pattern will be generated that matches a predicated 21374 version of the instruction. For example, 21375 21376 (define_insn "addsi" 21377 [(set (match_operand:SI 0 "register_operand" "r") 21378 (plus:SI (match_operand:SI 1 "register_operand" "r") 21379 (match_operand:SI 2 "register_operand" "r")))] 21380 "TEST1" 21381 "add %2,%1,%0") 21382 21383 (define_cond_exec 21384 [(ne (match_operand:CC 0 "register_operand" "c") 21385 (const_int 0))] 21386 "TEST2" 21387 "(%0)") 21388 21389 generates a new pattern 21390 21391 (define_insn "" 21392 [(cond_exec 21393 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 21394 (set (match_operand:SI 0 "register_operand" "r") 21395 (plus:SI (match_operand:SI 1 "register_operand" "r") 21396 (match_operand:SI 2 "register_operand" "r"))))] 21397 "(TEST2) && (TEST1)" 21398 "(%3) add %2,%1,%0") 21399 21400 21401 File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Conditional Execution, Up: Machine Desc 21402 21403 14.21 Constant Definitions 21404 ========================== 21405 21406 Using literal constants inside instruction patterns reduces legibility 21407 and can be a maintenance problem. 21408 21409 To overcome this problem, you may use the `define_constants' 21410 expression. It contains a vector of name-value pairs. From that point 21411 on, wherever any of the names appears in the MD file, it is as if the 21412 corresponding value had been written instead. You may use 21413 `define_constants' multiple times; each appearance adds more constants 21414 to the table. It is an error to redefine a constant with a different 21415 value. 21416 21417 To come back to the a29k load multiple example, instead of 21418 21419 (define_insn "" 21420 [(match_parallel 0 "load_multiple_operation" 21421 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 21422 (match_operand:SI 2 "memory_operand" "m")) 21423 (use (reg:SI 179)) 21424 (clobber (reg:SI 179))])] 21425 "" 21426 "loadm 0,0,%1,%2") 21427 21428 You could write: 21429 21430 (define_constants [ 21431 (R_BP 177) 21432 (R_FC 178) 21433 (R_CR 179) 21434 (R_Q 180) 21435 ]) 21436 21437 (define_insn "" 21438 [(match_parallel 0 "load_multiple_operation" 21439 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 21440 (match_operand:SI 2 "memory_operand" "m")) 21441 (use (reg:SI R_CR)) 21442 (clobber (reg:SI R_CR))])] 21443 "" 21444 "loadm 0,0,%1,%2") 21445 21446 The constants that are defined with a define_constant are also output 21447 in the insn-codes.h header file as #defines. 21448 21449 21450 File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 21451 21452 14.22 Iterators 21453 =============== 21454 21455 Ports often need to define similar patterns for more than one machine 21456 mode or for more than one rtx code. GCC provides some simple iterator 21457 facilities to make this process easier. 21458 21459 * Menu: 21460 21461 * Mode Iterators:: Generating variations of patterns for different modes. 21462 * Code Iterators:: Doing the same for codes. 21463 21464 21465 File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 21466 21467 14.22.1 Mode Iterators 21468 ---------------------- 21469 21470 Ports often need to define similar patterns for two or more different 21471 modes. For example: 21472 21473 * If a processor has hardware support for both single and double 21474 floating-point arithmetic, the `SFmode' patterns tend to be very 21475 similar to the `DFmode' ones. 21476 21477 * If a port uses `SImode' pointers in one configuration and `DImode' 21478 pointers in another, it will usually have very similar `SImode' 21479 and `DImode' patterns for manipulating pointers. 21480 21481 Mode iterators allow several patterns to be instantiated from one 21482 `.md' file template. They can be used with any type of rtx-based 21483 construct, such as a `define_insn', `define_split', or 21484 `define_peephole2'. 21485 21486 * Menu: 21487 21488 * Defining Mode Iterators:: Defining a new mode iterator. 21489 * Substitutions:: Combining mode iterators with substitutions 21490 * Examples:: Examples 21491 21492 21493 File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 21494 21495 14.22.1.1 Defining Mode Iterators 21496 ................................. 21497 21498 The syntax for defining a mode iterator is: 21499 21500 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 21501 21502 This allows subsequent `.md' file constructs to use the mode suffix 21503 `:NAME'. Every construct that does so will be expanded N times, once 21504 with every use of `:NAME' replaced by `:MODE1', once with every use 21505 replaced by `:MODE2', and so on. In the expansion for a particular 21506 MODEI, every C condition will also require that CONDI be true. 21507 21508 For example: 21509 21510 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 21511 21512 defines a new mode suffix `:P'. Every construct that uses `:P' will 21513 be expanded twice, once with every `:P' replaced by `:SI' and once with 21514 every `:P' replaced by `:DI'. The `:SI' version will only apply if 21515 `Pmode == SImode' and the `:DI' version will only apply if `Pmode == 21516 DImode'. 21517 21518 As with other `.md' conditions, an empty string is treated as "always 21519 true". `(MODE "")' can also be abbreviated to `MODE'. For example: 21520 21521 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 21522 21523 means that the `:DI' expansion only applies if `TARGET_64BIT' but that 21524 the `:SI' expansion has no such constraint. 21525 21526 Iterators are applied in the order they are defined. This can be 21527 significant if two iterators are used in a construct that requires 21528 substitutions. *Note Substitutions::. 21529 21530 21531 File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 21532 21533 14.22.1.2 Substitution in Mode Iterators 21534 ........................................ 21535 21536 If an `.md' file construct uses mode iterators, each version of the 21537 construct will often need slightly different strings or modes. For 21538 example: 21539 21540 * When a `define_expand' defines several `addM3' patterns (*note 21541 Standard Names::), each expander will need to use the appropriate 21542 mode name for M. 21543 21544 * When a `define_insn' defines several instruction patterns, each 21545 instruction will often use a different assembler mnemonic. 21546 21547 * When a `define_insn' requires operands with different modes, using 21548 an iterator for one of the operand modes usually requires a 21549 specific mode for the other operand(s). 21550 21551 GCC supports such variations through a system of "mode attributes". 21552 There are two standard attributes: `mode', which is the name of the 21553 mode in lower case, and `MODE', which is the same thing in upper case. 21554 You can define other attributes using: 21555 21556 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 21557 21558 where NAME is the name of the attribute and VALUEI is the value 21559 associated with MODEI. 21560 21561 When GCC replaces some :ITERATOR with :MODE, it will scan each string 21562 and mode in the pattern for sequences of the form `<ITERATOR:ATTR>', 21563 where ATTR is the name of a mode attribute. If the attribute is 21564 defined for MODE, the whole `<...>' sequence will be replaced by the 21565 appropriate attribute value. 21566 21567 For example, suppose an `.md' file has: 21568 21569 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 21570 (define_mode_attr load [(SI "lw") (DI "ld")]) 21571 21572 If one of the patterns that uses `:P' contains the string 21573 `"<P:load>\t%0,%1"', the `SI' version of that pattern will use 21574 `"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'. 21575 21576 Here is an example of using an attribute for a mode: 21577 21578 (define_mode_iterator LONG [SI DI]) 21579 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 21580 (define_insn ... 21581 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 21582 21583 The `ITERATOR:' prefix may be omitted, in which case the substitution 21584 will be attempted for every iterator expansion. 21585 21586 21587 File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 21588 21589 14.22.1.3 Mode Iterator Examples 21590 ................................ 21591 21592 Here is an example from the MIPS port. It defines the following modes 21593 and attributes (among others): 21594 21595 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 21596 (define_mode_attr d [(SI "") (DI "d")]) 21597 21598 and uses the following template to define both `subsi3' and `subdi3': 21599 21600 (define_insn "sub<mode>3" 21601 [(set (match_operand:GPR 0 "register_operand" "=d") 21602 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 21603 (match_operand:GPR 2 "register_operand" "d")))] 21604 "" 21605 "<d>subu\t%0,%1,%2" 21606 [(set_attr "type" "arith") 21607 (set_attr "mode" "<MODE>")]) 21608 21609 This is exactly equivalent to: 21610 21611 (define_insn "subsi3" 21612 [(set (match_operand:SI 0 "register_operand" "=d") 21613 (minus:SI (match_operand:SI 1 "register_operand" "d") 21614 (match_operand:SI 2 "register_operand" "d")))] 21615 "" 21616 "subu\t%0,%1,%2" 21617 [(set_attr "type" "arith") 21618 (set_attr "mode" "SI")]) 21619 21620 (define_insn "subdi3" 21621 [(set (match_operand:DI 0 "register_operand" "=d") 21622 (minus:DI (match_operand:DI 1 "register_operand" "d") 21623 (match_operand:DI 2 "register_operand" "d")))] 21624 "" 21625 "dsubu\t%0,%1,%2" 21626 [(set_attr "type" "arith") 21627 (set_attr "mode" "DI")]) 21628 21629 21630 File: gccint.info, Node: Code Iterators, Prev: Mode Iterators, Up: Iterators 21631 21632 14.22.2 Code Iterators 21633 ---------------------- 21634 21635 Code iterators operate in a similar way to mode iterators. *Note Mode 21636 Iterators::. 21637 21638 The construct: 21639 21640 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 21641 21642 defines a pseudo rtx code NAME that can be instantiated as CODEI if 21643 condition CONDI is true. Each CODEI must have the same rtx format. 21644 *Note RTL Classes::. 21645 21646 As with mode iterators, each pattern that uses NAME will be expanded N 21647 times, once with all uses of NAME replaced by CODE1, once with all uses 21648 replaced by CODE2, and so on. *Note Defining Mode Iterators::. 21649 21650 It is possible to define attributes for codes as well as for modes. 21651 There are two standard code attributes: `code', the name of the code in 21652 lower case, and `CODE', the name of the code in upper case. Other 21653 attributes are defined using: 21654 21655 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 21656 21657 Here's an example of code iterators in action, taken from the MIPS 21658 port: 21659 21660 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 21661 eq ne gt ge lt le gtu geu ltu leu]) 21662 21663 (define_expand "b<code>" 21664 [(set (pc) 21665 (if_then_else (any_cond:CC (cc0) 21666 (const_int 0)) 21667 (label_ref (match_operand 0 "")) 21668 (pc)))] 21669 "" 21670 { 21671 gen_conditional_branch (operands, <CODE>); 21672 DONE; 21673 }) 21674 21675 This is equivalent to: 21676 21677 (define_expand "bunordered" 21678 [(set (pc) 21679 (if_then_else (unordered:CC (cc0) 21680 (const_int 0)) 21681 (label_ref (match_operand 0 "")) 21682 (pc)))] 21683 "" 21684 { 21685 gen_conditional_branch (operands, UNORDERED); 21686 DONE; 21687 }) 21688 21689 (define_expand "bordered" 21690 [(set (pc) 21691 (if_then_else (ordered:CC (cc0) 21692 (const_int 0)) 21693 (label_ref (match_operand 0 "")) 21694 (pc)))] 21695 "" 21696 { 21697 gen_conditional_branch (operands, ORDERED); 21698 DONE; 21699 }) 21700 21701 ... 21702 21703 21704 File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 21705 21706 15 Target Description Macros and Functions 21707 ****************************************** 21708 21709 In addition to the file `MACHINE.md', a machine description includes a 21710 C header file conventionally given the name `MACHINE.h' and a C source 21711 file named `MACHINE.c'. The header file defines numerous macros that 21712 convey the information about the target machine that does not fit into 21713 the scheme of the `.md' file. The file `tm.h' should be a link to 21714 `MACHINE.h'. The header file `config.h' includes `tm.h' and most 21715 compiler source files include `config.h'. The source file defines a 21716 variable `targetm', which is a structure containing pointers to 21717 functions and data relating to the target machine. `MACHINE.c' should 21718 also contain their definitions, if they are not defined elsewhere in 21719 GCC, and other functions called through the macros defined in the `.h' 21720 file. 21721 21722 * Menu: 21723 21724 * Target Structure:: The `targetm' variable. 21725 * Driver:: Controlling how the driver runs the compilation passes. 21726 * Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'. 21727 * Per-Function Data:: Defining data structures for per-function information. 21728 * Storage Layout:: Defining sizes and alignments of data. 21729 * Type Layout:: Defining sizes and properties of basic user data types. 21730 * Registers:: Naming and describing the hardware registers. 21731 * Register Classes:: Defining the classes of hardware registers. 21732 * Old Constraints:: The old way to define machine-specific constraints. 21733 * Stack and Calling:: Defining which way the stack grows and by how much. 21734 * Varargs:: Defining the varargs macros. 21735 * Trampolines:: Code set up at run time to enter a nested function. 21736 * Library Calls:: Controlling how library routines are implicitly called. 21737 * Addressing Modes:: Defining addressing modes valid for memory operands. 21738 * Anchored Addresses:: Defining how `-fsection-anchors' should work. 21739 * Condition Code:: Defining how insns update the condition code. 21740 * Costs:: Defining relative costs of different operations. 21741 * Scheduling:: Adjusting the behavior of the instruction scheduler. 21742 * Sections:: Dividing storage into text, data, and other sections. 21743 * PIC:: Macros for position independent code. 21744 * Assembler Format:: Defining how to write insns and pseudo-ops to output. 21745 * Debugging Info:: Defining the format of debugging output. 21746 * Floating Point:: Handling floating point for cross-compilers. 21747 * Mode Switching:: Insertion of mode-switching instructions. 21748 * Target Attributes:: Defining target-specific uses of `__attribute__'. 21749 * MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 21750 * PCH Target:: Validity checking for precompiled headers. 21751 * C++ ABI:: Controlling C++ ABI changes. 21752 * Misc:: Everything else. 21753 21754 21755 File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 21756 21757 15.1 The Global `targetm' Variable 21758 ================================== 21759 21760 -- Variable: struct gcc_target targetm 21761 The target `.c' file must define the global `targetm' variable 21762 which contains pointers to functions and data relating to the 21763 target machine. The variable is declared in `target.h'; 21764 `target-def.h' defines the macro `TARGET_INITIALIZER' which is 21765 used to initialize the variable, and macros for the default 21766 initializers for elements of the structure. The `.c' file should 21767 override those macros for which the default definition is 21768 inappropriate. For example: 21769 #include "target.h" 21770 #include "target-def.h" 21771 21772 /* Initialize the GCC target structure. */ 21773 21774 #undef TARGET_COMP_TYPE_ATTRIBUTES 21775 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 21776 21777 struct gcc_target targetm = TARGET_INITIALIZER; 21778 21779 Where a macro should be defined in the `.c' file in this manner to form 21780 part of the `targetm' structure, it is documented below as a "Target 21781 Hook" with a prototype. Many macros will change in future from being 21782 defined in the `.h' file to being part of the `targetm' structure. 21783 21784 21785 File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 21786 21787 15.2 Controlling the Compilation Driver, `gcc' 21788 ============================================== 21789 21790 You can control the compilation driver. 21791 21792 -- Macro: SWITCH_TAKES_ARG (CHAR) 21793 A C expression which determines whether the option `-CHAR' takes 21794 arguments. The value should be the number of arguments that 21795 option takes-zero, for many options. 21796 21797 By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG', 21798 which handles the standard options properly. You need not define 21799 `SWITCH_TAKES_ARG' unless you wish to add additional options which 21800 take arguments. Any redefinition should call 21801 `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options. 21802 21803 -- Macro: WORD_SWITCH_TAKES_ARG (NAME) 21804 A C expression which determines whether the option `-NAME' takes 21805 arguments. The value should be the number of arguments that 21806 option takes-zero, for many options. This macro rather than 21807 `SWITCH_TAKES_ARG' is used for multi-character option names. 21808 21809 By default, this macro is defined as 21810 `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options 21811 properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you 21812 wish to add additional options which take arguments. Any 21813 redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then 21814 check for additional options. 21815 21816 -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR) 21817 A C expression which determines whether the option `-CHAR' stops 21818 compilation before the generation of an executable. The value is 21819 boolean, nonzero if the option does stop an executable from being 21820 generated, zero otherwise. 21821 21822 By default, this macro is defined as 21823 `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard 21824 options properly. You need not define 21825 `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional 21826 options which affect the generation of an executable. Any 21827 redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and 21828 then check for additional options. 21829 21830 -- Macro: SWITCHES_NEED_SPACES 21831 A string-valued C expression which enumerates the options for which 21832 the linker needs a space between the option and its argument. 21833 21834 If this macro is not defined, the default value is `""'. 21835 21836 -- Macro: TARGET_OPTION_TRANSLATE_TABLE 21837 If defined, a list of pairs of strings, the first of which is a 21838 potential command line target to the `gcc' driver program, and the 21839 second of which is a space-separated (tabs and other whitespace 21840 are not supported) list of options with which to replace the first 21841 option. The target defining this list is responsible for assuring 21842 that the results are valid. Replacement options may not be the 21843 `--opt' style, they must be the `-opt' style. It is the intention 21844 of this macro to provide a mechanism for substitution that affects 21845 the multilibs chosen, such as one option that enables many 21846 options, some of which select multilibs. Example nonsensical 21847 definition, where `-malt-abi', `-EB', and `-mspoo' cause different 21848 multilibs to be chosen: 21849 21850 #define TARGET_OPTION_TRANSLATE_TABLE \ 21851 { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \ 21852 { "-compat", "-EB -malign=4 -mspoo" } 21853 21854 -- Macro: DRIVER_SELF_SPECS 21855 A list of specs for the driver itself. It should be a suitable 21856 initializer for an array of strings, with no surrounding braces. 21857 21858 The driver applies these specs to its own command line between 21859 loading default `specs' files (but not command-line specified 21860 ones) and choosing the multilib directory or running any 21861 subcommands. It applies them in the order given, so each spec can 21862 depend on the options added by earlier ones. It is also possible 21863 to remove options using `%<OPTION' in the usual way. 21864 21865 This macro can be useful when a port has several interdependent 21866 target options. It provides a way of standardizing the command 21867 line so that the other specs are easier to write. 21868 21869 Do not define this macro if it does not need to do anything. 21870 21871 -- Macro: OPTION_DEFAULT_SPECS 21872 A list of specs used to support configure-time default options 21873 (i.e. `--with' options) in the driver. It should be a suitable 21874 initializer for an array of structures, each containing two 21875 strings, without the outermost pair of surrounding braces. 21876 21877 The first item in the pair is the name of the default. This must 21878 match the code in `config.gcc' for the target. The second item is 21879 a spec to apply if a default with this name was specified. The 21880 string `%(VALUE)' in the spec will be replaced by the value of the 21881 default everywhere it occurs. 21882 21883 The driver will apply these specs to its own command line between 21884 loading default `specs' files and processing `DRIVER_SELF_SPECS', 21885 using the same mechanism as `DRIVER_SELF_SPECS'. 21886 21887 Do not define this macro if it does not need to do anything. 21888 21889 -- Macro: CPP_SPEC 21890 A C string constant that tells the GCC driver program options to 21891 pass to CPP. It can also specify how to translate options you 21892 give to GCC into options for GCC to pass to the CPP. 21893 21894 Do not define this macro if it does not need to do anything. 21895 21896 -- Macro: CPLUSPLUS_CPP_SPEC 21897 This macro is just like `CPP_SPEC', but is used for C++, rather 21898 than C. If you do not define this macro, then the value of 21899 `CPP_SPEC' (if any) will be used instead. 21900 21901 -- Macro: CC1_SPEC 21902 A C string constant that tells the GCC driver program options to 21903 pass to `cc1', `cc1plus', `f771', and the other language front 21904 ends. It can also specify how to translate options you give to 21905 GCC into options for GCC to pass to front ends. 21906 21907 Do not define this macro if it does not need to do anything. 21908 21909 -- Macro: CC1PLUS_SPEC 21910 A C string constant that tells the GCC driver program options to 21911 pass to `cc1plus'. It can also specify how to translate options 21912 you give to GCC into options for GCC to pass to the `cc1plus'. 21913 21914 Do not define this macro if it does not need to do anything. Note 21915 that everything defined in CC1_SPEC is already passed to `cc1plus' 21916 so there is no need to duplicate the contents of CC1_SPEC in 21917 CC1PLUS_SPEC. 21918 21919 -- Macro: ASM_SPEC 21920 A C string constant that tells the GCC driver program options to 21921 pass to the assembler. It can also specify how to translate 21922 options you give to GCC into options for GCC to pass to the 21923 assembler. See the file `sun3.h' for an example of this. 21924 21925 Do not define this macro if it does not need to do anything. 21926 21927 -- Macro: ASM_FINAL_SPEC 21928 A C string constant that tells the GCC driver program how to run 21929 any programs which cleanup after the normal assembler. Normally, 21930 this is not needed. See the file `mips.h' for an example of this. 21931 21932 Do not define this macro if it does not need to do anything. 21933 21934 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 21935 Define this macro, with no value, if the driver should give the 21936 assembler an argument consisting of a single dash, `-', to 21937 instruct it to read from its standard input (which will be a pipe 21938 connected to the output of the compiler proper). This argument is 21939 given after any `-o' option specifying the name of the output file. 21940 21941 If you do not define this macro, the assembler is assumed to read 21942 its standard input if given no non-option arguments. If your 21943 assembler cannot read standard input at all, use a `%{pipe:%e}' 21944 construct; see `mips.h' for instance. 21945 21946 -- Macro: LINK_SPEC 21947 A C string constant that tells the GCC driver program options to 21948 pass to the linker. It can also specify how to translate options 21949 you give to GCC into options for GCC to pass to the linker. 21950 21951 Do not define this macro if it does not need to do anything. 21952 21953 -- Macro: LIB_SPEC 21954 Another C string constant used much like `LINK_SPEC'. The 21955 difference between the two is that `LIB_SPEC' is used at the end 21956 of the command given to the linker. 21957 21958 If this macro is not defined, a default is provided that loads the 21959 standard C library from the usual place. See `gcc.c'. 21960 21961 -- Macro: LIBGCC_SPEC 21962 Another C string constant that tells the GCC driver program how 21963 and when to place a reference to `libgcc.a' into the linker 21964 command line. This constant is placed both before and after the 21965 value of `LIB_SPEC'. 21966 21967 If this macro is not defined, the GCC driver provides a default 21968 that passes the string `-lgcc' to the linker. 21969 21970 -- Macro: REAL_LIBGCC_SPEC 21971 By default, if `ENABLE_SHARED_LIBGCC' is defined, the 21972 `LIBGCC_SPEC' is not directly used by the driver program but is 21973 instead modified to refer to different versions of `libgcc.a' 21974 depending on the values of the command line flags `-static', 21975 `-shared', `-static-libgcc', and `-shared-libgcc'. On targets 21976 where these modifications are inappropriate, define 21977 `REAL_LIBGCC_SPEC' instead. `REAL_LIBGCC_SPEC' tells the driver 21978 how to place a reference to `libgcc' on the link command line, 21979 but, unlike `LIBGCC_SPEC', it is used unmodified. 21980 21981 -- Macro: USE_LD_AS_NEEDED 21982 A macro that controls the modifications to `LIBGCC_SPEC' mentioned 21983 in `REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 21984 uses -as-needed and the shared libgcc in place of the static 21985 exception handler library, when linking without any of `-static', 21986 `-static-libgcc', or `-shared-libgcc'. 21987 21988 -- Macro: LINK_EH_SPEC 21989 If defined, this C string constant is added to `LINK_SPEC'. When 21990 `USE_LD_AS_NEEDED' is zero or undefined, it also affects the 21991 modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'. 21992 21993 -- Macro: STARTFILE_SPEC 21994 Another C string constant used much like `LINK_SPEC'. The 21995 difference between the two is that `STARTFILE_SPEC' is used at the 21996 very beginning of the command given to the linker. 21997 21998 If this macro is not defined, a default is provided that loads the 21999 standard C startup file from the usual place. See `gcc.c'. 22000 22001 -- Macro: ENDFILE_SPEC 22002 Another C string constant used much like `LINK_SPEC'. The 22003 difference between the two is that `ENDFILE_SPEC' is used at the 22004 very end of the command given to the linker. 22005 22006 Do not define this macro if it does not need to do anything. 22007 22008 -- Macro: THREAD_MODEL_SPEC 22009 GCC `-v' will print the thread model GCC was configured to use. 22010 However, this doesn't work on platforms that are multilibbed on 22011 thread models, such as AIX 4.3. On such platforms, define 22012 `THREAD_MODEL_SPEC' such that it evaluates to a string without 22013 blanks that names one of the recognized thread models. `%*', the 22014 default value of this macro, will expand to the value of 22015 `thread_file' set in `config.gcc'. 22016 22017 -- Macro: SYSROOT_SUFFIX_SPEC 22018 Define this macro to add a suffix to the target sysroot when GCC is 22019 configured with a sysroot. This will cause GCC to search for 22020 usr/lib, et al, within sysroot+suffix. 22021 22022 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 22023 Define this macro to add a headers_suffix to the target sysroot 22024 when GCC is configured with a sysroot. This will cause GCC to 22025 pass the updated sysroot+headers_suffix to CPP, causing it to 22026 search for usr/include, et al, within sysroot+headers_suffix. 22027 22028 -- Macro: EXTRA_SPECS 22029 Define this macro to provide additional specifications to put in 22030 the `specs' file that can be used in various specifications like 22031 `CC1_SPEC'. 22032 22033 The definition should be an initializer for an array of structures, 22034 containing a string constant, that defines the specification name, 22035 and a string constant that provides the specification. 22036 22037 Do not define this macro if it does not need to do anything. 22038 22039 `EXTRA_SPECS' is useful when an architecture contains several 22040 related targets, which have various `..._SPECS' which are similar 22041 to each other, and the maintainer would like one central place to 22042 keep these definitions. 22043 22044 For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to 22045 define either `_CALL_SYSV' when the System V calling sequence is 22046 used or `_CALL_AIX' when the older AIX-based calling sequence is 22047 used. 22048 22049 The `config/rs6000/rs6000.h' target file defines: 22050 22051 #define EXTRA_SPECS \ 22052 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 22053 22054 #define CPP_SYS_DEFAULT "" 22055 22056 The `config/rs6000/sysv.h' target file defines: 22057 #undef CPP_SPEC 22058 #define CPP_SPEC \ 22059 "%{posix: -D_POSIX_SOURCE } \ 22060 %{mcall-sysv: -D_CALL_SYSV } \ 22061 %{!mcall-sysv: %(cpp_sysv_default) } \ 22062 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 22063 22064 #undef CPP_SYSV_DEFAULT 22065 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 22066 22067 while the `config/rs6000/eabiaix.h' target file defines 22068 `CPP_SYSV_DEFAULT' as: 22069 22070 #undef CPP_SYSV_DEFAULT 22071 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 22072 22073 -- Macro: LINK_LIBGCC_SPECIAL_1 22074 Define this macro if the driver program should find the library 22075 `libgcc.a'. If you do not define this macro, the driver program 22076 will pass the argument `-lgcc' to tell the linker to do the search. 22077 22078 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 22079 The sequence in which libgcc and libc are specified to the linker. 22080 By default this is `%G %L %G'. 22081 22082 -- Macro: LINK_COMMAND_SPEC 22083 A C string constant giving the complete command line need to 22084 execute the linker. When you do this, you will need to update 22085 your port each time a change is made to the link command line 22086 within `gcc.c'. Therefore, define this macro only if you need to 22087 completely redefine the command line for invoking the linker and 22088 there is no other way to accomplish the effect you need. 22089 Overriding this macro may be avoidable by overriding 22090 `LINK_GCC_C_SEQUENCE_SPEC' instead. 22091 22092 -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 22093 A nonzero value causes `collect2' to remove duplicate 22094 `-LDIRECTORY' search directories from linking commands. Do not 22095 give it a nonzero value if removing duplicate search directories 22096 changes the linker's semantics. 22097 22098 -- Macro: MULTILIB_DEFAULTS 22099 Define this macro as a C expression for the initializer of an 22100 array of string to tell the driver program which options are 22101 defaults for this target and thus do not need to be handled 22102 specially when using `MULTILIB_OPTIONS'. 22103 22104 Do not define this macro if `MULTILIB_OPTIONS' is not defined in 22105 the target makefile fragment or if none of the options listed in 22106 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 22107 22108 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 22109 Define this macro to tell `gcc' that it should only translate a 22110 `-B' prefix into a `-L' linker option if the prefix indicates an 22111 absolute file name. 22112 22113 -- Macro: MD_EXEC_PREFIX 22114 If defined, this macro is an additional prefix to try after 22115 `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the 22116 `-b' option is used, or the compiler is built as a cross compiler. 22117 If you define `MD_EXEC_PREFIX', then be sure to add it to the 22118 list of directories used to find the assembler in `configure.in'. 22119 22120 -- Macro: STANDARD_STARTFILE_PREFIX 22121 Define this macro as a C string constant if you wish to override 22122 the standard choice of `libdir' as the default prefix to try when 22123 searching for startup files such as `crt0.o'. 22124 `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 22125 built as a cross compiler. 22126 22127 -- Macro: STANDARD_STARTFILE_PREFIX_1 22128 Define this macro as a C string constant if you wish to override 22129 the standard choice of `/lib' as a prefix to try after the default 22130 prefix when searching for startup files such as `crt0.o'. 22131 `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 22132 built as a cross compiler. 22133 22134 -- Macro: STANDARD_STARTFILE_PREFIX_2 22135 Define this macro as a C string constant if you wish to override 22136 the standard choice of `/lib' as yet another prefix to try after 22137 the default prefix when searching for startup files such as 22138 `crt0.o'. `STANDARD_STARTFILE_PREFIX_2' is not searched when the 22139 compiler is built as a cross compiler. 22140 22141 -- Macro: MD_STARTFILE_PREFIX 22142 If defined, this macro supplies an additional prefix to try after 22143 the standard prefixes. `MD_EXEC_PREFIX' is not searched when the 22144 `-b' option is used, or when the compiler is built as a cross 22145 compiler. 22146 22147 -- Macro: MD_STARTFILE_PREFIX_1 22148 If defined, this macro supplies yet another prefix to try after the 22149 standard prefixes. It is not searched when the `-b' option is 22150 used, or when the compiler is built as a cross compiler. 22151 22152 -- Macro: INIT_ENVIRONMENT 22153 Define this macro as a C string constant if you wish to set 22154 environment variables for programs called by the driver, such as 22155 the assembler and loader. The driver passes the value of this 22156 macro to `putenv' to initialize the necessary environment 22157 variables. 22158 22159 -- Macro: LOCAL_INCLUDE_DIR 22160 Define this macro as a C string constant if you wish to override 22161 the standard choice of `/usr/local/include' as the default prefix 22162 to try when searching for local header files. `LOCAL_INCLUDE_DIR' 22163 comes before `SYSTEM_INCLUDE_DIR' in the search order. 22164 22165 Cross compilers do not search either `/usr/local/include' or its 22166 replacement. 22167 22168 -- Macro: MODIFY_TARGET_NAME 22169 Define this macro if you wish to define command-line switches that 22170 modify the default target name. 22171 22172 For each switch, you can include a string to be appended to the 22173 first part of the configuration name or a string to be deleted 22174 from the configuration name, if present. The definition should be 22175 an initializer for an array of structures. Each array element 22176 should have three elements: the switch name (a string constant, 22177 including the initial dash), one of the enumeration codes `ADD' or 22178 `DELETE' to indicate whether the string should be inserted or 22179 deleted, and the string to be inserted or deleted (a string 22180 constant). 22181 22182 For example, on a machine where `64' at the end of the 22183 configuration name denotes a 64-bit target and you want the `-32' 22184 and `-64' switches to select between 32- and 64-bit targets, you 22185 would code 22186 22187 #define MODIFY_TARGET_NAME \ 22188 { { "-32", DELETE, "64"}, \ 22189 {"-64", ADD, "64"}} 22190 22191 -- Macro: SYSTEM_INCLUDE_DIR 22192 Define this macro as a C string constant if you wish to specify a 22193 system-specific directory to search for header files before the 22194 standard directory. `SYSTEM_INCLUDE_DIR' comes before 22195 `STANDARD_INCLUDE_DIR' in the search order. 22196 22197 Cross compilers do not use this macro and do not search the 22198 directory specified. 22199 22200 -- Macro: STANDARD_INCLUDE_DIR 22201 Define this macro as a C string constant if you wish to override 22202 the standard choice of `/usr/include' as the default prefix to try 22203 when searching for header files. 22204 22205 Cross compilers ignore this macro and do not search either 22206 `/usr/include' or its replacement. 22207 22208 -- Macro: STANDARD_INCLUDE_COMPONENT 22209 The "component" corresponding to `STANDARD_INCLUDE_DIR'. See 22210 `INCLUDE_DEFAULTS', below, for the description of components. If 22211 you do not define this macro, no component is used. 22212 22213 -- Macro: INCLUDE_DEFAULTS 22214 Define this macro if you wish to override the entire default 22215 search path for include files. For a native compiler, the default 22216 search path usually consists of `GCC_INCLUDE_DIR', 22217 `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR', 22218 `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition, 22219 `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined 22220 automatically by `Makefile', and specify private search areas for 22221 GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++ 22222 programs. 22223 22224 The definition should be an initializer for an array of structures. 22225 Each array element should have four elements: the directory name (a 22226 string constant), the component name (also a string constant), a 22227 flag for C++-only directories, and a flag showing that the 22228 includes in the directory don't need to be wrapped in `extern `C'' 22229 when compiling C++. Mark the end of the array with a null element. 22230 22231 The component name denotes what GNU package the include file is 22232 part of, if any, in all uppercase letters. For example, it might 22233 be `GCC' or `BINUTILS'. If the package is part of a 22234 vendor-supplied operating system, code the component name as `0'. 22235 22236 For example, here is the definition used for VAX/VMS: 22237 22238 #define INCLUDE_DEFAULTS \ 22239 { \ 22240 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 22241 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 22242 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 22243 { ".", 0, 0, 0}, \ 22244 { 0, 0, 0, 0} \ 22245 } 22246 22247 Here is the order of prefixes tried for exec files: 22248 22249 1. Any prefixes specified by the user with `-B'. 22250 22251 2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX' 22252 is not set and the compiler has not been installed in the 22253 configure-time PREFIX, the location in which the compiler has 22254 actually been installed. 22255 22256 3. The directories specified by the environment variable 22257 `COMPILER_PATH'. 22258 22259 4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been 22260 installed in the configured-time PREFIX. 22261 22262 5. The location `/usr/libexec/gcc/', but only if this is a native 22263 compiler. 22264 22265 6. The location `/usr/lib/gcc/', but only if this is a native 22266 compiler. 22267 22268 7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 22269 native compiler. 22270 22271 Here is the order of prefixes tried for startfiles: 22272 22273 1. Any prefixes specified by the user with `-B'. 22274 22275 2. The environment variable `GCC_EXEC_PREFIX' or its automatically 22276 determined value based on the installed toolchain location. 22277 22278 3. The directories specified by the environment variable 22279 `LIBRARY_PATH' (or port-specific name; native only, cross 22280 compilers do not use this). 22281 22282 4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is 22283 installed in the configured PREFIX or this is a native compiler. 22284 22285 5. The location `/usr/lib/gcc/', but only if this is a native 22286 compiler. 22287 22288 6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 22289 native compiler. 22290 22291 7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a 22292 native compiler, or we have a target system root. 22293 22294 8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is 22295 a native compiler, or we have a target system root. 22296 22297 9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot 22298 modifications. If this path is relative it will be prefixed by 22299 `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX' 22300 and the machine suffix. 22301 22302 10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a 22303 native compiler, or we have a target system root. The default for 22304 this macro is `/lib/'. 22305 22306 11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a 22307 native compiler, or we have a target system root. The default for 22308 this macro is `/usr/lib/'. 22309 22310 22311 File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 22312 22313 15.3 Run-time Target Specification 22314 ================================== 22315 22316 Here are run-time target specifications. 22317 22318 -- Macro: TARGET_CPU_CPP_BUILTINS () 22319 This function-like macro expands to a block of code that defines 22320 built-in preprocessor macros and assertions for the target CPU, 22321 using the functions `builtin_define', `builtin_define_std' and 22322 `builtin_assert'. When the front end calls this macro it provides 22323 a trailing semicolon, and since it has finished command line 22324 option processing your code can use those results freely. 22325 22326 `builtin_assert' takes a string in the form you pass to the 22327 command-line option `-A', such as `cpu=mips', and creates the 22328 assertion. `builtin_define' takes a string in the form accepted 22329 by option `-D' and unconditionally defines the macro. 22330 22331 `builtin_define_std' takes a string representing the name of an 22332 object-like macro. If it doesn't lie in the user's namespace, 22333 `builtin_define_std' defines it unconditionally. Otherwise, it 22334 defines a version with two leading underscores, and another version 22335 with two leading and trailing underscores, and defines the original 22336 only if an ISO standard was not requested on the command line. For 22337 example, passing `unix' defines `__unix', `__unix__' and possibly 22338 `unix'; passing `_mips' defines `__mips', `__mips__' and possibly 22339 `_mips', and passing `_ABI64' defines only `_ABI64'. 22340 22341 You can also test for the C dialect being compiled. The variable 22342 `c_language' is set to one of `clk_c', `clk_cplusplus' or 22343 `clk_objective_c'. Note that if we are preprocessing assembler, 22344 this variable will be `clk_c' but the function-like macro 22345 `preprocessing_asm_p()' will return true, so you might want to 22346 check for that first. If you need to check for strict ANSI, the 22347 variable `flag_iso' can be used. The function-like macro 22348 `preprocessing_trad_p()' can be used to check for traditional 22349 preprocessing. 22350 22351 -- Macro: TARGET_OS_CPP_BUILTINS () 22352 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 22353 and is used for the target operating system instead. 22354 22355 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 22356 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 22357 and is used for the target object format. `elfos.h' uses this 22358 macro to define `__ELF__', so you probably do not need to define 22359 it yourself. 22360 22361 -- Variable: extern int target_flags 22362 This variable is declared in `options.h', which is included before 22363 any target-specific headers. 22364 22365 -- Variable: Target Hook int TARGET_DEFAULT_TARGET_FLAGS 22366 This variable specifies the initial value of `target_flags'. Its 22367 default setting is 0. 22368 22369 -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char 22370 *ARG, int VALUE) 22371 This hook is called whenever the user specifies one of the 22372 target-specific options described by the `.opt' definition files 22373 (*note Options::). It has the opportunity to do some 22374 option-specific processing and should return true if the option is 22375 valid. The default definition does nothing but return true. 22376 22377 CODE specifies the `OPT_NAME' enumeration value associated with 22378 the selected option; NAME is just a rendering of the option name 22379 in which non-alphanumeric characters are replaced by underscores. 22380 ARG specifies the string argument and is null if no argument was 22381 given. If the option is flagged as a `UInteger' (*note Option 22382 properties::), VALUE is the numeric value of the argument. 22383 Otherwise VALUE is 1 if the positive form of the option was used 22384 and 0 if the "no-" form was. 22385 22386 -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 22387 *ARG, int VALUE) 22388 This target hook is called whenever the user specifies one of the 22389 target-specific C language family options described by the `.opt' 22390 definition files(*note Options::). It has the opportunity to do 22391 some option-specific processing and should return true if the 22392 option is valid. The default definition does nothing but return 22393 false. 22394 22395 In general, you should use `TARGET_HANDLE_OPTION' to handle 22396 options. However, if processing an option requires routines that 22397 are only available in the C (and related language) front ends, 22398 then you should use `TARGET_HANDLE_C_OPTION' instead. 22399 22400 -- Macro: TARGET_VERSION 22401 This macro is a C statement to print on `stderr' a string 22402 describing the particular machine description choice. Every 22403 machine description should define `TARGET_VERSION'. For example: 22404 22405 #ifdef MOTOROLA 22406 #define TARGET_VERSION \ 22407 fprintf (stderr, " (68k, Motorola syntax)"); 22408 #else 22409 #define TARGET_VERSION \ 22410 fprintf (stderr, " (68k, MIT syntax)"); 22411 #endif 22412 22413 -- Macro: OVERRIDE_OPTIONS 22414 Sometimes certain combinations of command options do not make 22415 sense on a particular target machine. You can define a macro 22416 `OVERRIDE_OPTIONS' to take account of this. This macro, if 22417 defined, is executed once just after all the command options have 22418 been parsed. 22419 22420 Don't use this macro to turn on various extra optimizations for 22421 `-O'. That is what `OPTIMIZATION_OPTIONS' is for. 22422 22423 -- Macro: C_COMMON_OVERRIDE_OPTIONS 22424 This is similar to `OVERRIDE_OPTIONS' but is only used in the C 22425 language frontends (C, Objective-C, C++, Objective-C++) and so can 22426 be used to alter option flag variables which only exist in those 22427 frontends. 22428 22429 -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE) 22430 Some machines may desire to change what optimizations are 22431 performed for various optimization levels. This macro, if 22432 defined, is executed once just after the optimization level is 22433 determined and before the remainder of the command options have 22434 been parsed. Values set in this macro are used as the default 22435 values for the other command line options. 22436 22437 LEVEL is the optimization level specified; 2 if `-O2' is 22438 specified, 1 if `-O' is specified, and 0 if neither is specified. 22439 22440 SIZE is nonzero if `-Os' is specified and zero otherwise. 22441 22442 You should not use this macro to change options that are not 22443 machine-specific. These should uniformly selected by the same 22444 optimization level on all supported machines. Use this macro to 22445 enable machine-specific optimizations. 22446 22447 *Do not examine `write_symbols' in this macro!* The debugging 22448 options are not supposed to alter the generated code. 22449 22450 -- Target Hook: bool TARGET_HELP (void) 22451 This hook is called in response to the user invoking 22452 `--target-help' on the command line. It gives the target a chance 22453 to display extra information on the target specific command line 22454 options found in its `.opt' file. 22455 22456 -- Macro: CAN_DEBUG_WITHOUT_FP 22457 Define this macro if debugging can be performed even without a 22458 frame pointer. If this macro is defined, GCC will turn on the 22459 `-fomit-frame-pointer' option whenever `-O' is specified. 22460 22461 22462 File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 22463 22464 15.4 Defining data structures for per-function information. 22465 =========================================================== 22466 22467 If the target needs to store information on a per-function basis, GCC 22468 provides a macro and a couple of variables to allow this. Note, just 22469 using statics to store the information is a bad idea, since GCC supports 22470 nested functions, so you can be halfway through encoding one function 22471 when another one comes along. 22472 22473 GCC defines a data structure called `struct function' which contains 22474 all of the data specific to an individual function. This structure 22475 contains a field called `machine' whose type is `struct 22476 machine_function *', which can be used by targets to point to their own 22477 specific data. 22478 22479 If a target needs per-function specific data it should define the type 22480 `struct machine_function' and also the macro `INIT_EXPANDERS'. This 22481 macro should be used to initialize the function pointer 22482 `init_machine_status'. This pointer is explained below. 22483 22484 One typical use of per-function, target specific data is to create an 22485 RTX to hold the register containing the function's return address. This 22486 RTX can then be used to implement the `__builtin_return_address' 22487 function, for level 0. 22488 22489 Note--earlier implementations of GCC used a single data area to hold 22490 all of the per-function information. Thus when processing of a nested 22491 function began the old per-function data had to be pushed onto a stack, 22492 and when the processing was finished, it had to be popped off the 22493 stack. GCC used to provide function pointers called 22494 `save_machine_status' and `restore_machine_status' to handle the saving 22495 and restoring of the target specific information. Since the single 22496 data area approach is no longer used, these pointers are no longer 22497 supported. 22498 22499 -- Macro: INIT_EXPANDERS 22500 Macro called to initialize any target specific information. This 22501 macro is called once per function, before generation of any RTL 22502 has begun. The intention of this macro is to allow the 22503 initialization of the function pointer `init_machine_status'. 22504 22505 -- Variable: void (*)(struct function *) init_machine_status 22506 If this function pointer is non-`NULL' it will be called once per 22507 function, before function compilation starts, in order to allow the 22508 target to perform any target specific initialization of the 22509 `struct function' structure. It is intended that this would be 22510 used to initialize the `machine' of that structure. 22511 22512 `struct machine_function' structures are expected to be freed by 22513 GC. Generally, any memory that they reference must be allocated 22514 by using `ggc_alloc', including the structure itself. 22515 22516 22517 File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 22518 22519 15.5 Storage Layout 22520 =================== 22521 22522 Note that the definitions of the macros in this table which are sizes or 22523 alignments measured in bits do not need to be constant. They can be C 22524 expressions that refer to static variables, such as the `target_flags'. 22525 *Note Run-time Target::. 22526 22527 -- Macro: BITS_BIG_ENDIAN 22528 Define this macro to have the value 1 if the most significant bit 22529 in a byte has the lowest number; otherwise define it to have the 22530 value zero. This means that bit-field instructions count from the 22531 most significant bit. If the machine has no bit-field 22532 instructions, then this must still be defined, but it doesn't 22533 matter which value it is defined to. This macro need not be a 22534 constant. 22535 22536 This macro does not affect the way structure fields are packed into 22537 bytes or words; that is controlled by `BYTES_BIG_ENDIAN'. 22538 22539 -- Macro: BYTES_BIG_ENDIAN 22540 Define this macro to have the value 1 if the most significant byte 22541 in a word has the lowest number. This macro need not be a 22542 constant. 22543 22544 -- Macro: WORDS_BIG_ENDIAN 22545 Define this macro to have the value 1 if, in a multiword object, 22546 the most significant word has the lowest number. This applies to 22547 both memory locations and registers; GCC fundamentally assumes 22548 that the order of words in memory is the same as the order in 22549 registers. This macro need not be a constant. 22550 22551 -- Macro: LIBGCC2_WORDS_BIG_ENDIAN 22552 Define this macro if `WORDS_BIG_ENDIAN' is not constant. This 22553 must be a constant value with the same meaning as 22554 `WORDS_BIG_ENDIAN', which will be used only when compiling 22555 `libgcc2.c'. Typically the value will be set based on 22556 preprocessor defines. 22557 22558 -- Macro: FLOAT_WORDS_BIG_ENDIAN 22559 Define this macro to have the value 1 if `DFmode', `XFmode' or 22560 `TFmode' floating point numbers are stored in memory with the word 22561 containing the sign bit at the lowest address; otherwise define it 22562 to have the value 0. This macro need not be a constant. 22563 22564 You need not define this macro if the ordering is the same as for 22565 multi-word integers. 22566 22567 -- Macro: BITS_PER_UNIT 22568 Define this macro to be the number of bits in an addressable 22569 storage unit (byte). If you do not define this macro the default 22570 is 8. 22571 22572 -- Macro: BITS_PER_WORD 22573 Number of bits in a word. If you do not define this macro, the 22574 default is `BITS_PER_UNIT * UNITS_PER_WORD'. 22575 22576 -- Macro: MAX_BITS_PER_WORD 22577 Maximum number of bits in a word. If this is undefined, the 22578 default is `BITS_PER_WORD'. Otherwise, it is the constant value 22579 that is the largest value that `BITS_PER_WORD' can have at 22580 run-time. 22581 22582 -- Macro: UNITS_PER_WORD 22583 Number of storage units in a word; normally the size of a 22584 general-purpose register, a power of two from 1 or 8. 22585 22586 -- Macro: MIN_UNITS_PER_WORD 22587 Minimum number of units in a word. If this is undefined, the 22588 default is `UNITS_PER_WORD'. Otherwise, it is the constant value 22589 that is the smallest value that `UNITS_PER_WORD' can have at 22590 run-time. 22591 22592 -- Macro: UNITS_PER_SIMD_WORD 22593 Number of units in the vectors that the vectorizer can produce. 22594 The default is equal to `UNITS_PER_WORD', because the vectorizer 22595 can do some transformations even in absence of specialized SIMD 22596 hardware. 22597 22598 -- Macro: POINTER_SIZE 22599 Width of a pointer, in bits. You must specify a value no wider 22600 than the width of `Pmode'. If it is not equal to the width of 22601 `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'. If you do 22602 not specify a value the default is `BITS_PER_WORD'. 22603 22604 -- Macro: POINTERS_EXTEND_UNSIGNED 22605 A C expression that determines how pointers should be extended from 22606 `ptr_mode' to either `Pmode' or `word_mode'. It is greater than 22607 zero if pointers should be zero-extended, zero if they should be 22608 sign-extended, and negative if some other sort of conversion is 22609 needed. In the last case, the extension is done by the target's 22610 `ptr_extend' instruction. 22611 22612 You need not define this macro if the `ptr_mode', `Pmode' and 22613 `word_mode' are all the same width. 22614 22615 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 22616 A macro to update M and UNSIGNEDP when an object whose type is 22617 TYPE and which has the specified mode and signedness is to be 22618 stored in a register. This macro is only called when TYPE is a 22619 scalar type. 22620 22621 On most RISC machines, which only have operations that operate on 22622 a full register, define this macro to set M to `word_mode' if M is 22623 an integer mode narrower than `BITS_PER_WORD'. In most cases, 22624 only integer modes should be widened because wider-precision 22625 floating-point operations are usually more expensive than their 22626 narrower counterparts. 22627 22628 For most machines, the macro definition does not change UNSIGNEDP. 22629 However, some machines, have instructions that preferentially 22630 handle either signed or unsigned quantities of certain modes. For 22631 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 22632 instructions sign-extend the result to 64 bits. On such machines, 22633 set UNSIGNEDP according to which kind of extension is more 22634 efficient. 22635 22636 Do not define this macro if it would never modify M. 22637 22638 -- Macro: PROMOTE_FUNCTION_MODE 22639 Like `PROMOTE_MODE', but is applied to outgoing function arguments 22640 or function return values, as specified by 22641 `TARGET_PROMOTE_FUNCTION_ARGS' and 22642 `TARGET_PROMOTE_FUNCTION_RETURN', respectively. 22643 22644 The default is `PROMOTE_MODE'. 22645 22646 -- Target Hook: bool TARGET_PROMOTE_FUNCTION_ARGS (tree FNTYPE) 22647 This target hook should return `true' if the promotion described by 22648 `PROMOTE_FUNCTION_MODE' should be done for outgoing function 22649 arguments. 22650 22651 -- Target Hook: bool TARGET_PROMOTE_FUNCTION_RETURN (tree FNTYPE) 22652 This target hook should return `true' if the promotion described by 22653 `PROMOTE_FUNCTION_MODE' should be done for the return value of 22654 functions. 22655 22656 If this target hook returns `true', `TARGET_FUNCTION_VALUE' must 22657 perform the same promotions done by `PROMOTE_FUNCTION_MODE'. 22658 22659 -- Macro: PARM_BOUNDARY 22660 Normal alignment required for function parameters on the stack, in 22661 bits. All stack parameters receive at least this much alignment 22662 regardless of data type. On most machines, this is the same as the 22663 size of an integer. 22664 22665 -- Macro: STACK_BOUNDARY 22666 Define this macro to the minimum alignment enforced by hardware 22667 for the stack pointer on this machine. The definition is a C 22668 expression for the desired alignment (measured in bits). This 22669 value is used as a default if `PREFERRED_STACK_BOUNDARY' is not 22670 defined. On most machines, this should be the same as 22671 `PARM_BOUNDARY'. 22672 22673 -- Macro: PREFERRED_STACK_BOUNDARY 22674 Define this macro if you wish to preserve a certain alignment for 22675 the stack pointer, greater than what the hardware enforces. The 22676 definition is a C expression for the desired alignment (measured 22677 in bits). This macro must evaluate to a value equal to or larger 22678 than `STACK_BOUNDARY'. 22679 22680 -- Macro: FUNCTION_BOUNDARY 22681 Alignment required for a function entry point, in bits. 22682 22683 -- Macro: BIGGEST_ALIGNMENT 22684 Biggest alignment that any data type can require on this machine, 22685 in bits. Note that this is not the biggest alignment that is 22686 supported, just the biggest alignment that, when violated, may 22687 cause a fault. 22688 22689 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 22690 If defined, the smallest alignment, in bits, that can be given to 22691 an object that can be referenced in one operation, without 22692 disturbing any nearby object. Normally, this is `BITS_PER_UNIT', 22693 but may be larger on machines that don't have byte or half-word 22694 store operations. 22695 22696 -- Macro: BIGGEST_FIELD_ALIGNMENT 22697 Biggest alignment that any structure or union field can require on 22698 this machine, in bits. If defined, this overrides 22699 `BIGGEST_ALIGNMENT' for structure and union fields only, unless 22700 the field alignment has been set by the `__attribute__ ((aligned 22701 (N)))' construct. 22702 22703 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 22704 An expression for the alignment of a structure field FIELD if the 22705 alignment computed in the usual way (including applying of 22706 `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the 22707 alignment) is COMPUTED. It overrides alignment only if the field 22708 alignment has not been set by the `__attribute__ ((aligned (N)))' 22709 construct. 22710 22711 -- Macro: MAX_OFILE_ALIGNMENT 22712 Biggest alignment supported by the object file format of this 22713 machine. Use this macro to limit the alignment which can be 22714 specified using the `__attribute__ ((aligned (N)))' construct. If 22715 not defined, the default value is `BIGGEST_ALIGNMENT'. 22716 22717 On systems that use ELF, the default (in `config/elfos.h') is the 22718 largest supported 32-bit ELF section alignment representable on a 22719 32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'. On 22720 32-bit ELF the largest supported section alignment in bits is 22721 `(0x80000000 * 8)', but this is not representable on 32-bit hosts. 22722 22723 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 22724 If defined, a C expression to compute the alignment for a variable 22725 in the static store. TYPE is the data type, and BASIC-ALIGN is 22726 the alignment that the object would ordinarily have. The value of 22727 this macro is used instead of that alignment to align the object. 22728 22729 If this macro is not defined, then BASIC-ALIGN is used. 22730 22731 One use of this macro is to increase alignment of medium-size data 22732 to make it all fit in fewer cache lines. Another is to cause 22733 character arrays to be word-aligned so that `strcpy' calls that 22734 copy constants to character arrays can be done inline. 22735 22736 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 22737 If defined, a C expression to compute the alignment given to a 22738 constant that is being placed in memory. CONSTANT is the constant 22739 and BASIC-ALIGN is the alignment that the object would ordinarily 22740 have. The value of this macro is used instead of that alignment to 22741 align the object. 22742 22743 If this macro is not defined, then BASIC-ALIGN is used. 22744 22745 The typical use of this macro is to increase alignment for string 22746 constants to be word aligned so that `strcpy' calls that copy 22747 constants can be done inline. 22748 22749 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 22750 If defined, a C expression to compute the alignment for a variable 22751 in the local store. TYPE is the data type, and BASIC-ALIGN is the 22752 alignment that the object would ordinarily have. The value of this 22753 macro is used instead of that alignment to align the object. 22754 22755 If this macro is not defined, then BASIC-ALIGN is used. 22756 22757 One use of this macro is to increase alignment of medium-size data 22758 to make it all fit in fewer cache lines. 22759 22760 -- Macro: EMPTY_FIELD_BOUNDARY 22761 Alignment in bits to be given to a structure bit-field that 22762 follows an empty field such as `int : 0;'. 22763 22764 If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 22765 22766 -- Macro: STRUCTURE_SIZE_BOUNDARY 22767 Number of bits which any structure or union's size must be a 22768 multiple of. Each structure or union's size is rounded up to a 22769 multiple of this. 22770 22771 If you do not define this macro, the default is the same as 22772 `BITS_PER_UNIT'. 22773 22774 -- Macro: STRICT_ALIGNMENT 22775 Define this macro to be the value 1 if instructions will fail to 22776 work if given data not on the nominal alignment. If instructions 22777 will merely go slower in that case, define this macro as 0. 22778 22779 -- Macro: PCC_BITFIELD_TYPE_MATTERS 22780 Define this if you wish to imitate the way many other C compilers 22781 handle alignment of bit-fields and the structures that contain 22782 them. 22783 22784 The behavior is that the type written for a named bit-field (`int', 22785 `short', or other integer type) imposes an alignment for the entire 22786 structure, as if the structure really did contain an ordinary 22787 field of that type. In addition, the bit-field is placed within 22788 the structure so that it would fit within such a field, not 22789 crossing a boundary for it. 22790 22791 Thus, on most machines, a named bit-field whose type is written as 22792 `int' would not cross a four-byte boundary, and would force 22793 four-byte alignment for the whole structure. (The alignment used 22794 may not be four bytes; it is controlled by the other alignment 22795 parameters.) 22796 22797 An unnamed bit-field will not affect the alignment of the 22798 containing structure. 22799 22800 If the macro is defined, its definition should be a C expression; 22801 a nonzero value for the expression enables this behavior. 22802 22803 Note that if this macro is not defined, or its value is zero, some 22804 bit-fields may cross more than one alignment boundary. The 22805 compiler can support such references if there are `insv', `extv', 22806 and `extzv' insns that can directly reference memory. 22807 22808 The other known way of making bit-fields work is to define 22809 `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then 22810 every structure can be accessed with fullwords. 22811 22812 Unless the machine has bit-field instructions or you define 22813 `STRUCTURE_SIZE_BOUNDARY' that way, you must define 22814 `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 22815 22816 If your aim is to make GCC use the same conventions for laying out 22817 bit-fields as are used by another compiler, here is how to 22818 investigate what the other compiler does. Compile and run this 22819 program: 22820 22821 struct foo1 22822 { 22823 char x; 22824 char :0; 22825 char y; 22826 }; 22827 22828 struct foo2 22829 { 22830 char x; 22831 int :0; 22832 char y; 22833 }; 22834 22835 main () 22836 { 22837 printf ("Size of foo1 is %d\n", 22838 sizeof (struct foo1)); 22839 printf ("Size of foo2 is %d\n", 22840 sizeof (struct foo2)); 22841 exit (0); 22842 } 22843 22844 If this prints 2 and 5, then the compiler's behavior is what you 22845 would get from `PCC_BITFIELD_TYPE_MATTERS'. 22846 22847 -- Macro: BITFIELD_NBYTES_LIMITED 22848 Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 22849 to aligning a bit-field within the structure. 22850 22851 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELDS (void) 22852 When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 22853 whether unnamed bitfields affect the alignment of the containing 22854 structure. The hook should return true if the structure should 22855 inherit the alignment requirements of an unnamed bitfield's type. 22856 22857 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELDS (void) 22858 This target hook should return `true' if accesses to volatile 22859 bitfields should use the narrowest mode possible. It should 22860 return `false' if these accesses should use the bitfield container 22861 type. 22862 22863 The default is `!TARGET_STRICT_ALIGN'. 22864 22865 -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE) 22866 Return 1 if a structure or array containing FIELD should be 22867 accessed using `BLKMODE'. 22868 22869 If FIELD is the only field in the structure, MODE is its mode, 22870 otherwise MODE is VOIDmode. MODE is provided in the case where 22871 structures of one field would require the structure's mode to 22872 retain the field's mode. 22873 22874 Normally, this is not needed. 22875 22876 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 22877 Define this macro as an expression for the alignment of a type 22878 (given by TYPE as a tree node) if the alignment computed in the 22879 usual way is COMPUTED and the alignment explicitly specified was 22880 SPECIFIED. 22881 22882 The default is to use SPECIFIED if it is larger; otherwise, use 22883 the smaller of COMPUTED and `BIGGEST_ALIGNMENT' 22884 22885 -- Macro: MAX_FIXED_MODE_SIZE 22886 An integer expression for the size in bits of the largest integer 22887 machine mode that should actually be used. All integer machine 22888 modes of this size or smaller can be used for structures and 22889 unions with the appropriate sizes. If this macro is undefined, 22890 `GET_MODE_BITSIZE (DImode)' is assumed. 22891 22892 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 22893 If defined, an expression of type `enum machine_mode' that 22894 specifies the mode of the save area operand of a 22895 `save_stack_LEVEL' named pattern (*note Standard Names::). 22896 SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or 22897 `SAVE_NONLOCAL' and selects which of the three named patterns is 22898 having its mode specified. 22899 22900 You need not define this macro if it always returns `Pmode'. You 22901 would most commonly define this macro if the `save_stack_LEVEL' 22902 patterns need to support both a 32- and a 64-bit mode. 22903 22904 -- Macro: STACK_SIZE_MODE 22905 If defined, an expression of type `enum machine_mode' that 22906 specifies the mode of the size increment operand of an 22907 `allocate_stack' named pattern (*note Standard Names::). 22908 22909 You need not define this macro if it always returns `word_mode'. 22910 You would most commonly define this macro if the `allocate_stack' 22911 pattern needs to support both a 32- and a 64-bit mode. 22912 22913 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE () 22914 This target hook should return the mode to be used for the return 22915 value of compare instructions expanded to libgcc calls. If not 22916 defined `word_mode' is returned which is the right choice for a 22917 majority of targets. 22918 22919 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE () 22920 This target hook should return the mode to be used for the shift 22921 count operand of shift instructions expanded to libgcc calls. If 22922 not defined `word_mode' is returned which is the right choice for 22923 a majority of targets. 22924 22925 -- Macro: TARGET_FLOAT_FORMAT 22926 A code distinguishing the floating point format of the target 22927 machine. There are two defined values: 22928 22929 `IEEE_FLOAT_FORMAT' 22930 This code indicates IEEE floating point. It is the default; 22931 there is no need to define `TARGET_FLOAT_FORMAT' when the 22932 format is IEEE. 22933 22934 `VAX_FLOAT_FORMAT' 22935 This code indicates the "F float" (for `float') and "D float" 22936 or "G float" formats (for `double') used on the VAX and 22937 PDP-11. 22938 22939 If your target uses a floating point format other than these, you 22940 must define a new NAME_FLOAT_FORMAT code for it, and add support 22941 for it to `real.c'. 22942 22943 The ordering of the component words of floating point values 22944 stored in memory is controlled by `FLOAT_WORDS_BIG_ENDIAN'. 22945 22946 -- Macro: MODE_HAS_NANS (MODE) 22947 When defined, this macro should be true if MODE has a NaN 22948 representation. The compiler assumes that NaNs are not equal to 22949 anything (including themselves) and that addition, subtraction, 22950 multiplication and division all return NaNs when one operand is 22951 NaN. 22952 22953 By default, this macro is true if MODE is a floating-point mode 22954 and the target floating-point format is IEEE. 22955 22956 -- Macro: MODE_HAS_INFINITIES (MODE) 22957 This macro should be true if MODE can represent infinity. At 22958 present, the compiler uses this macro to decide whether `x - x' is 22959 always defined. By default, the macro is true when MODE is a 22960 floating-point mode and the target format is IEEE. 22961 22962 -- Macro: MODE_HAS_SIGNED_ZEROS (MODE) 22963 True if MODE distinguishes between positive and negative zero. 22964 The rules are expected to follow the IEEE standard: 22965 22966 * `x + x' has the same sign as `x'. 22967 22968 * If the sum of two values with opposite sign is zero, the 22969 result is positive for all rounding modes expect towards 22970 -infinity, for which it is negative. 22971 22972 * The sign of a product or quotient is negative when exactly one 22973 of the operands is negative. 22974 22975 The default definition is true if MODE is a floating-point mode 22976 and the target format is IEEE. 22977 22978 -- Macro: MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) 22979 If defined, this macro should be true for MODE if it has at least 22980 one rounding mode in which `x' and `-x' can be rounded to numbers 22981 of different magnitude. Two such modes are towards -infinity and 22982 towards +infinity. 22983 22984 The default definition of this macro is true if MODE is a 22985 floating-point mode and the target format is IEEE. 22986 22987 -- Macro: ROUND_TOWARDS_ZERO 22988 If defined, this macro should be true if the prevailing rounding 22989 mode is towards zero. A true value has the following effects: 22990 22991 * `MODE_HAS_SIGN_DEPENDENT_ROUNDING' will be false for all 22992 modes. 22993 22994 * `libgcc.a''s floating-point emulator will round towards zero 22995 rather than towards nearest. 22996 22997 * The compiler's floating-point emulator will round towards 22998 zero after doing arithmetic, and when converting from the 22999 internal float format to the target format. 23000 23001 The macro does not affect the parsing of string literals. When the 23002 primary rounding mode is towards zero, library functions like 23003 `strtod' might still round towards nearest, and the compiler's 23004 parser should behave like the target's `strtod' where possible. 23005 23006 Not defining this macro is equivalent to returning zero. 23007 23008 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE) 23009 This macro should return true if floats with SIZE bits do not have 23010 a NaN or infinity representation, but use the largest exponent for 23011 normal numbers instead. 23012 23013 Defining this macro to true for SIZE causes `MODE_HAS_NANS' and 23014 `MODE_HAS_INFINITIES' to be false for SIZE-bit modes. It also 23015 affects the way `libgcc.a' and `real.c' emulate floating-point 23016 arithmetic. 23017 23018 The default definition of this macro returns false for all sizes. 23019 23020 -- Target Hook: bool TARGET_VECTOR_OPAQUE_P (tree TYPE) 23021 This target hook should return `true' a vector is opaque. That 23022 is, if no cast is needed when copying a vector value of type TYPE 23023 into another vector lvalue of the same size. Vector opaque types 23024 cannot be initialized. The default is that there are no such 23025 types. 23026 23027 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (tree RECORD_TYPE) 23028 This target hook returns `true' if bit-fields in the given 23029 RECORD_TYPE are to be laid out following the rules of Microsoft 23030 Visual C/C++, namely: (i) a bit-field won't share the same storage 23031 unit with the previous bit-field if their underlying types have 23032 different sizes, and the bit-field will be aligned to the highest 23033 alignment of the underlying types of itself and of the previous 23034 bit-field; (ii) a zero-sized bit-field will affect the alignment of 23035 the whole enclosing structure, even if it is unnamed; except that 23036 (iii) a zero-sized bit-field will be disregarded unless it follows 23037 another bit-field of nonzero size. If this hook returns `true', 23038 other macros that control bit-field layout are ignored. 23039 23040 When a bit-field is inserted into a packed record, the whole size 23041 of the underlying type is used by one or more same-size adjacent 23042 bit-fields (that is, if its long:3, 32 bits is used in the record, 23043 and any additional adjacent long bit-fields are packed into the 23044 same chunk of 32 bits. However, if the size changes, a new field 23045 of that size is allocated). In an unpacked record, this is the 23046 same as using alignment, but not equivalent when packing. 23047 23048 If both MS bit-fields and `__attribute__((packed))' are used, the 23049 latter will take precedence. If `__attribute__((packed))' is used 23050 on a single field when MS bit-fields are in use, it will take 23051 precedence for that field, but the alignment of the rest of the 23052 structure may affect its placement. 23053 23054 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 23055 Returns true if the target supports decimal floating point. 23056 23057 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 23058 Returns true if the target supports fixed-point arithmetic. 23059 23060 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 23061 This hook is called just before expansion into rtl, allowing the 23062 target to perform additional initializations or analysis before 23063 the expansion. For example, the rs6000 port uses it to allocate a 23064 scratch stack slot for use in copying SDmode values between memory 23065 and floating point registers whenever the function being expanded 23066 has any SDmode usage. 23067 23068 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 23069 This hook allows the backend to perform additional instantiations 23070 on rtl that are not actually in any insns yet, but will be later. 23071 23072 -- Target Hook: const char * TARGET_MANGLE_TYPE (tree TYPE) 23073 If your target defines any fundamental types, or any types your 23074 target uses should be mangled differently from the default, define 23075 this hook to return the appropriate encoding for these types as 23076 part of a C++ mangled name. The TYPE argument is the tree 23077 structure representing the type to be mangled. The hook may be 23078 applied to trees which are not target-specific fundamental types; 23079 it should return `NULL' for all such types, as well as arguments 23080 it does not recognize. If the return value is not `NULL', it must 23081 point to a statically-allocated string constant. 23082 23083 Target-specific fundamental types might be new fundamental types or 23084 qualified versions of ordinary fundamental types. Encode new 23085 fundamental types as `u N NAME', where NAME is the name used for 23086 the type in source code, and N is the length of NAME in decimal. 23087 Encode qualified versions of ordinary types as `U N NAME CODE', 23088 where NAME is the name used for the type qualifier in source code, 23089 N is the length of NAME as above, and CODE is the code used to 23090 represent the unqualified version of this type. (See 23091 `write_builtin_type' in `cp/mangle.c' for the list of codes.) In 23092 both cases the spaces are for clarity; do not include any spaces 23093 in your string. 23094 23095 This hook is applied to types prior to typedef resolution. If the 23096 mangled name for a particular type depends only on that type's 23097 main variant, you can perform typedef resolution yourself using 23098 `TYPE_MAIN_VARIANT' before mangling. 23099 23100 The default version of this hook always returns `NULL', which is 23101 appropriate for a target that does not define any new fundamental 23102 types. 23103 23104 23105 File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 23106 23107 15.6 Layout of Source Language Data Types 23108 ========================================= 23109 23110 These macros define the sizes and other characteristics of the standard 23111 basic data types used in programs being compiled. Unlike the macros in 23112 the previous section, these apply to specific features of C and related 23113 languages, rather than to fundamental aspects of storage layout. 23114 23115 -- Macro: INT_TYPE_SIZE 23116 A C expression for the size in bits of the type `int' on the 23117 target machine. If you don't define this, the default is one word. 23118 23119 -- Macro: SHORT_TYPE_SIZE 23120 A C expression for the size in bits of the type `short' on the 23121 target machine. If you don't define this, the default is half a 23122 word. (If this would be less than one storage unit, it is rounded 23123 up to one unit.) 23124 23125 -- Macro: LONG_TYPE_SIZE 23126 A C expression for the size in bits of the type `long' on the 23127 target machine. If you don't define this, the default is one word. 23128 23129 -- Macro: ADA_LONG_TYPE_SIZE 23130 On some machines, the size used for the Ada equivalent of the type 23131 `long' by a native Ada compiler differs from that used by C. In 23132 that situation, define this macro to be a C expression to be used 23133 for the size of that type. If you don't define this, the default 23134 is the value of `LONG_TYPE_SIZE'. 23135 23136 -- Macro: LONG_LONG_TYPE_SIZE 23137 A C expression for the size in bits of the type `long long' on the 23138 target machine. If you don't define this, the default is two 23139 words. If you want to support GNU Ada on your machine, the value 23140 of this macro must be at least 64. 23141 23142 -- Macro: CHAR_TYPE_SIZE 23143 A C expression for the size in bits of the type `char' on the 23144 target machine. If you don't define this, the default is 23145 `BITS_PER_UNIT'. 23146 23147 -- Macro: BOOL_TYPE_SIZE 23148 A C expression for the size in bits of the C++ type `bool' and C99 23149 type `_Bool' on the target machine. If you don't define this, and 23150 you probably shouldn't, the default is `CHAR_TYPE_SIZE'. 23151 23152 -- Macro: FLOAT_TYPE_SIZE 23153 A C expression for the size in bits of the type `float' on the 23154 target machine. If you don't define this, the default is one word. 23155 23156 -- Macro: DOUBLE_TYPE_SIZE 23157 A C expression for the size in bits of the type `double' on the 23158 target machine. If you don't define this, the default is two 23159 words. 23160 23161 -- Macro: LONG_DOUBLE_TYPE_SIZE 23162 A C expression for the size in bits of the type `long double' on 23163 the target machine. If you don't define this, the default is two 23164 words. 23165 23166 -- Macro: SHORT_FRACT_TYPE_SIZE 23167 A C expression for the size in bits of the type `short _Fract' on 23168 the target machine. If you don't define this, the default is 23169 `BITS_PER_UNIT'. 23170 23171 -- Macro: FRACT_TYPE_SIZE 23172 A C expression for the size in bits of the type `_Fract' on the 23173 target machine. If you don't define this, the default is 23174 `BITS_PER_UNIT * 2'. 23175 23176 -- Macro: LONG_FRACT_TYPE_SIZE 23177 A C expression for the size in bits of the type `long _Fract' on 23178 the target machine. If you don't define this, the default is 23179 `BITS_PER_UNIT * 4'. 23180 23181 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 23182 A C expression for the size in bits of the type `long long _Fract' 23183 on the target machine. If you don't define this, the default is 23184 `BITS_PER_UNIT * 8'. 23185 23186 -- Macro: SHORT_ACCUM_TYPE_SIZE 23187 A C expression for the size in bits of the type `short _Accum' on 23188 the target machine. If you don't define this, the default is 23189 `BITS_PER_UNIT * 2'. 23190 23191 -- Macro: ACCUM_TYPE_SIZE 23192 A C expression for the size in bits of the type `_Accum' on the 23193 target machine. If you don't define this, the default is 23194 `BITS_PER_UNIT * 4'. 23195 23196 -- Macro: LONG_ACCUM_TYPE_SIZE 23197 A C expression for the size in bits of the type `long _Accum' on 23198 the target machine. If you don't define this, the default is 23199 `BITS_PER_UNIT * 8'. 23200 23201 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 23202 A C expression for the size in bits of the type `long long _Accum' 23203 on the target machine. If you don't define this, the default is 23204 `BITS_PER_UNIT * 16'. 23205 23206 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE 23207 Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if 23208 you want routines in `libgcc2.a' for a size other than 23209 `LONG_DOUBLE_TYPE_SIZE'. If you don't define this, the default is 23210 `LONG_DOUBLE_TYPE_SIZE'. 23211 23212 -- Macro: LIBGCC2_HAS_DF_MODE 23213 Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor 23214 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode' 23215 routines in `libgcc2.a' anyway. If you don't define this and 23216 either `LIBGCC2_DOUBLE_TYPE_SIZE' or 23217 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1, 23218 otherwise it is 0. 23219 23220 -- Macro: LIBGCC2_HAS_XF_MODE 23221 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 23222 `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway. If 23223 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80 23224 then the default is 1, otherwise it is 0. 23225 23226 -- Macro: LIBGCC2_HAS_TF_MODE 23227 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 23228 `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway. If 23229 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128 23230 then the default is 1, otherwise it is 0. 23231 23232 -- Macro: SF_SIZE 23233 -- Macro: DF_SIZE 23234 -- Macro: XF_SIZE 23235 -- Macro: TF_SIZE 23236 Define these macros to be the size in bits of the mantissa of 23237 `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults 23238 in `libgcc2.h' are inappropriate. By default, `FLT_MANT_DIG' is 23239 used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE', 23240 and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to 23241 whether `LIBGCC2_DOUBLE_TYPE_SIZE' or 23242 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64. 23243 23244 -- Macro: TARGET_FLT_EVAL_METHOD 23245 A C expression for the value for `FLT_EVAL_METHOD' in `float.h', 23246 assuming, if applicable, that the floating-point control word is 23247 in its default state. If you do not define this macro the value of 23248 `FLT_EVAL_METHOD' will be zero. 23249 23250 -- Macro: WIDEST_HARDWARE_FP_SIZE 23251 A C expression for the size in bits of the widest floating-point 23252 format supported by the hardware. If you define this macro, you 23253 must specify a value less than or equal to the value of 23254 `LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 23255 value of `LONG_DOUBLE_TYPE_SIZE' is the default. 23256 23257 -- Macro: DEFAULT_SIGNED_CHAR 23258 An expression whose value is 1 or 0, according to whether the type 23259 `char' should be signed or unsigned by default. The user can 23260 always override this default with the options `-fsigned-char' and 23261 `-funsigned-char'. 23262 23263 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 23264 This target hook should return true if the compiler should give an 23265 `enum' type only as many bytes as it takes to represent the range 23266 of possible values of that type. It should return false if all 23267 `enum' types should be allocated like `int'. 23268 23269 The default is to return false. 23270 23271 -- Macro: SIZE_TYPE 23272 A C expression for a string describing the name of the data type 23273 to use for size values. The typedef name `size_t' is defined 23274 using the contents of the string. 23275 23276 The string can contain more than one keyword. If so, separate 23277 them with spaces, and write first any length keyword, then 23278 `unsigned' if appropriate, and finally `int'. The string must 23279 exactly match one of the data type names defined in the function 23280 `init_decl_processing' in the file `c-decl.c'. You may not omit 23281 `int' or change the order--that would cause the compiler to crash 23282 on startup. 23283 23284 If you don't define this macro, the default is `"long unsigned 23285 int"'. 23286 23287 -- Macro: PTRDIFF_TYPE 23288 A C expression for a string describing the name of the data type 23289 to use for the result of subtracting two pointers. The typedef 23290 name `ptrdiff_t' is defined using the contents of the string. See 23291 `SIZE_TYPE' above for more information. 23292 23293 If you don't define this macro, the default is `"long int"'. 23294 23295 -- Macro: WCHAR_TYPE 23296 A C expression for a string describing the name of the data type 23297 to use for wide characters. The typedef name `wchar_t' is defined 23298 using the contents of the string. See `SIZE_TYPE' above for more 23299 information. 23300 23301 If you don't define this macro, the default is `"int"'. 23302 23303 -- Macro: WCHAR_TYPE_SIZE 23304 A C expression for the size in bits of the data type for wide 23305 characters. This is used in `cpp', which cannot make use of 23306 `WCHAR_TYPE'. 23307 23308 -- Macro: WINT_TYPE 23309 A C expression for a string describing the name of the data type to 23310 use for wide characters passed to `printf' and returned from 23311 `getwc'. The typedef name `wint_t' is defined using the contents 23312 of the string. See `SIZE_TYPE' above for more information. 23313 23314 If you don't define this macro, the default is `"unsigned int"'. 23315 23316 -- Macro: INTMAX_TYPE 23317 A C expression for a string describing the name of the data type 23318 that can represent any value of any standard or extended signed 23319 integer type. The typedef name `intmax_t' is defined using the 23320 contents of the string. See `SIZE_TYPE' above for more 23321 information. 23322 23323 If you don't define this macro, the default is the first of 23324 `"int"', `"long int"', or `"long long int"' that has as much 23325 precision as `long long int'. 23326 23327 -- Macro: UINTMAX_TYPE 23328 A C expression for a string describing the name of the data type 23329 that can represent any value of any standard or extended unsigned 23330 integer type. The typedef name `uintmax_t' is defined using the 23331 contents of the string. See `SIZE_TYPE' above for more 23332 information. 23333 23334 If you don't define this macro, the default is the first of 23335 `"unsigned int"', `"long unsigned int"', or `"long long unsigned 23336 int"' that has as much precision as `long long unsigned int'. 23337 23338 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 23339 The C++ compiler represents a pointer-to-member-function with a 23340 struct that looks like: 23341 23342 struct { 23343 union { 23344 void (*fn)(); 23345 ptrdiff_t vtable_index; 23346 }; 23347 ptrdiff_t delta; 23348 }; 23349 23350 The C++ compiler must use one bit to indicate whether the function 23351 that will be called through a pointer-to-member-function is 23352 virtual. Normally, we assume that the low-order bit of a function 23353 pointer must always be zero. Then, by ensuring that the 23354 vtable_index is odd, we can distinguish which variant of the union 23355 is in use. But, on some platforms function pointers can be odd, 23356 and so this doesn't work. In that case, we use the low-order bit 23357 of the `delta' field, and shift the remainder of the `delta' field 23358 to the left. 23359 23360 GCC will automatically make the right selection about where to 23361 store this bit using the `FUNCTION_BOUNDARY' setting for your 23362 platform. However, some platforms such as ARM/Thumb have 23363 `FUNCTION_BOUNDARY' set such that functions always start at even 23364 addresses, but the lowest bit of pointers to functions indicate 23365 whether the function at that address is in ARM or Thumb mode. If 23366 this is the case of your architecture, you should define this 23367 macro to `ptrmemfunc_vbit_in_delta'. 23368 23369 In general, you should not have to define this macro. On 23370 architectures in which function addresses are always even, 23371 according to `FUNCTION_BOUNDARY', GCC will automatically define 23372 this macro to `ptrmemfunc_vbit_in_pfn'. 23373 23374 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 23375 Normally, the C++ compiler uses function pointers in vtables. This 23376 macro allows the target to change to use "function descriptors" 23377 instead. Function descriptors are found on targets for whom a 23378 function pointer is actually a small data structure. Normally the 23379 data structure consists of the actual code address plus a data 23380 pointer to which the function's data is relative. 23381 23382 If vtables are used, the value of this macro should be the number 23383 of words that the function descriptor occupies. 23384 23385 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 23386 By default, the vtable entries are void pointers, the so the 23387 alignment is the same as pointer alignment. The value of this 23388 macro specifies the alignment of the vtable entry in bits. It 23389 should be defined only when special alignment is necessary. */ 23390 23391 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 23392 There are a few non-descriptor entries in the vtable at offsets 23393 below zero. If these entries must be padded (say, to preserve the 23394 alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to 23395 the number of words in each data entry. 23396 23397 23398 File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 23399 23400 15.7 Register Usage 23401 =================== 23402 23403 This section explains how to describe what registers the target machine 23404 has, and how (in general) they can be used. 23405 23406 The description of which registers a specific instruction can use is 23407 done with register classes; see *Note Register Classes::. For 23408 information on using registers to access a stack frame, see *Note Frame 23409 Registers::. For passing values in registers, see *Note Register 23410 Arguments::. For returning values in registers, see *Note Scalar 23411 Return::. 23412 23413 * Menu: 23414 23415 * Register Basics:: Number and kinds of registers. 23416 * Allocation Order:: Order in which registers are allocated. 23417 * Values in Registers:: What kinds of values each reg can hold. 23418 * Leaf Functions:: Renumbering registers for leaf functions. 23419 * Stack Registers:: Handling a register stack such as 80387. 23420 23421 23422 File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 23423 23424 15.7.1 Basic Characteristics of Registers 23425 ----------------------------------------- 23426 23427 Registers have various characteristics. 23428 23429 -- Macro: FIRST_PSEUDO_REGISTER 23430 Number of hardware registers known to the compiler. They receive 23431 numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first 23432 pseudo register's number really is assigned the number 23433 `FIRST_PSEUDO_REGISTER'. 23434 23435 -- Macro: FIXED_REGISTERS 23436 An initializer that says which registers are used for fixed 23437 purposes all throughout the compiled code and are therefore not 23438 available for general allocation. These would include the stack 23439 pointer, the frame pointer (except on machines where that can be 23440 used as a general register when no frame pointer is needed), the 23441 program counter on machines where that is considered one of the 23442 addressable registers, and any other numbered register with a 23443 standard use. 23444 23445 This information is expressed as a sequence of numbers, separated 23446 by commas and surrounded by braces. The Nth number is 1 if 23447 register N is fixed, 0 otherwise. 23448 23449 The table initialized from this macro, and the table initialized by 23450 the following one, may be overridden at run time either 23451 automatically, by the actions of the macro 23452 `CONDITIONAL_REGISTER_USAGE', or by the user with the command 23453 options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'. 23454 23455 -- Macro: CALL_USED_REGISTERS 23456 Like `FIXED_REGISTERS' but has 1 for each register that is 23457 clobbered (in general) by function calls as well as for fixed 23458 registers. This macro therefore identifies the registers that are 23459 not available for general allocation of values that must live 23460 across function calls. 23461 23462 If a register has 0 in `CALL_USED_REGISTERS', the compiler 23463 automatically saves it on function entry and restores it on 23464 function exit, if the register is used within the function. 23465 23466 -- Macro: CALL_REALLY_USED_REGISTERS 23467 Like `CALL_USED_REGISTERS' except this macro doesn't require that 23468 the entire set of `FIXED_REGISTERS' be included. 23469 (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS'). 23470 This macro is optional. If not specified, it defaults to the value 23471 of `CALL_USED_REGISTERS'. 23472 23473 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 23474 A C expression that is nonzero if it is not permissible to store a 23475 value of mode MODE in hard register number REGNO across a call 23476 without some part of it being clobbered. For most machines this 23477 macro need not be defined. It is only required for machines that 23478 do not preserve the entire contents of a register across a call. 23479 23480 -- Macro: CONDITIONAL_REGISTER_USAGE 23481 Zero or more C statements that may conditionally modify five 23482 variables `fixed_regs', `call_used_regs', `global_regs', 23483 `reg_names', and `reg_class_contents', to take into account any 23484 dependence of these register sets on target flags. The first three 23485 of these are of type `char []' (interpreted as Boolean vectors). 23486 `global_regs' is a `const char *[]', and `reg_class_contents' is a 23487 `HARD_REG_SET'. Before the macro is called, `fixed_regs', 23488 `call_used_regs', `reg_class_contents', and `reg_names' have been 23489 initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS', 23490 `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively. 23491 `global_regs' has been cleared, and any `-ffixed-REG', 23492 `-fcall-used-REG' and `-fcall-saved-REG' command options have been 23493 applied. 23494 23495 You need not define this macro if it has no work to do. 23496 23497 If the usage of an entire class of registers depends on the target 23498 flags, you may indicate this to GCC by using this macro to modify 23499 `fixed_regs' and `call_used_regs' to 1 for each of the registers 23500 in the classes which should not be used by GCC. Also define the 23501 macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to 23502 return `NO_REGS' if it is called with a letter for a class that 23503 shouldn't be used. 23504 23505 (However, if this class is not included in `GENERAL_REGS' and all 23506 of the insn patterns whose constraints permit this class are 23507 controlled by target switches, then GCC will automatically avoid 23508 using these registers when the target switches are opposed to 23509 them.) 23510 23511 -- Macro: INCOMING_REGNO (OUT) 23512 Define this macro if the target machine has register windows. 23513 This C expression returns the register number as seen by the 23514 called function corresponding to the register number OUT as seen 23515 by the calling function. Return OUT if register number OUT is not 23516 an outbound register. 23517 23518 -- Macro: OUTGOING_REGNO (IN) 23519 Define this macro if the target machine has register windows. 23520 This C expression returns the register number as seen by the 23521 calling function corresponding to the register number IN as seen 23522 by the called function. Return IN if register number IN is not an 23523 inbound register. 23524 23525 -- Macro: LOCAL_REGNO (REGNO) 23526 Define this macro if the target machine has register windows. 23527 This C expression returns true if the register is call-saved but 23528 is in the register window. Unlike most call-saved registers, such 23529 registers need not be explicitly restored on function exit or 23530 during non-local gotos. 23531 23532 -- Macro: PC_REGNUM 23533 If the program counter has a register number, define this as that 23534 register number. Otherwise, do not define it. 23535 23536 23537 File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 23538 23539 15.7.2 Order of Allocation of Registers 23540 --------------------------------------- 23541 23542 Registers are allocated in order. 23543 23544 -- Macro: REG_ALLOC_ORDER 23545 If defined, an initializer for a vector of integers, containing the 23546 numbers of hard registers in the order in which GCC should prefer 23547 to use them (from most preferred to least). 23548 23549 If this macro is not defined, registers are used lowest numbered 23550 first (all else being equal). 23551 23552 One use of this macro is on machines where the highest numbered 23553 registers must always be saved and the save-multiple-registers 23554 instruction supports only sequences of consecutive registers. On 23555 such machines, define `REG_ALLOC_ORDER' to be an initializer that 23556 lists the highest numbered allocable register first. 23557 23558 -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC 23559 A C statement (sans semicolon) to choose the order in which to 23560 allocate hard registers for pseudo-registers local to a basic 23561 block. 23562 23563 Store the desired register order in the array `reg_alloc_order'. 23564 Element 0 should be the register to allocate first; element 1, the 23565 next register; and so on. 23566 23567 The macro body should not assume anything about the contents of 23568 `reg_alloc_order' before execution of the macro. 23569 23570 On most machines, it is not necessary to define this macro. 23571 23572 23573 File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 23574 23575 15.7.3 How Values Fit in Registers 23576 ---------------------------------- 23577 23578 This section discusses the macros that describe which kinds of values 23579 (specifically, which machine modes) each register can hold, and how many 23580 consecutive registers are needed for a given mode. 23581 23582 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 23583 A C expression for the number of consecutive hard registers, 23584 starting at register number REGNO, required to hold a value of mode 23585 MODE. This macro must never return zero, even if a register 23586 cannot hold the requested mode - indicate that with 23587 HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead. 23588 23589 On a machine where all registers are exactly one word, a suitable 23590 definition of this macro is 23591 23592 #define HARD_REGNO_NREGS(REGNO, MODE) \ 23593 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 23594 / UNITS_PER_WORD) 23595 23596 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 23597 A C expression that is nonzero if a value of mode MODE, stored in 23598 memory, ends with padding that causes it to take up more space than 23599 in registers starting at register number REGNO (as determined by 23600 multiplying GCC's notion of the size of the register when 23601 containing this mode by the number of registers returned by 23602 `HARD_REGNO_NREGS'). By default this is zero. 23603 23604 For example, if a floating-point value is stored in three 32-bit 23605 registers but takes up 128 bits in memory, then this would be 23606 nonzero. 23607 23608 This macros only needs to be defined if there are cases where 23609 `subreg_get_info' would otherwise wrongly determine that a 23610 `subreg' can be represented by an offset to the register number, 23611 when in fact such a `subreg' would contain some of the padding not 23612 stored in registers and so not be representable. 23613 23614 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 23615 For values of REGNO and MODE for which 23616 `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 23617 returning the greater number of registers required to hold the 23618 value including any padding. In the example above, the value 23619 would be four. 23620 23621 -- Macro: REGMODE_NATURAL_SIZE (MODE) 23622 Define this macro if the natural size of registers that hold values 23623 of mode MODE is not the word size. It is a C expression that 23624 should give the natural size in bytes for the specified mode. It 23625 is used by the register allocator to try to optimize its results. 23626 This happens for example on SPARC 64-bit where the natural size of 23627 floating-point registers is still 32-bit. 23628 23629 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 23630 A C expression that is nonzero if it is permissible to store a 23631 value of mode MODE in hard register number REGNO (or in several 23632 registers starting with that one). For a machine where all 23633 registers are equivalent, a suitable definition is 23634 23635 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 23636 23637 You need not include code to check for the numbers of fixed 23638 registers, because the allocation mechanism considers them to be 23639 always occupied. 23640 23641 On some machines, double-precision values must be kept in even/odd 23642 register pairs. You can implement that by defining this macro to 23643 reject odd register numbers for such modes. 23644 23645 The minimum requirement for a mode to be OK in a register is that 23646 the `movMODE' instruction pattern support moves between the 23647 register and other hard register in the same class and that moving 23648 a value into the register and back out not alter it. 23649 23650 Since the same instruction used to move `word_mode' will work for 23651 all narrower integer modes, it is not necessary on any machine for 23652 `HARD_REGNO_MODE_OK' to distinguish between these modes, provided 23653 you define patterns `movhi', etc., to take advantage of this. This 23654 is useful because of the interaction between `HARD_REGNO_MODE_OK' 23655 and `MODES_TIEABLE_P'; it is very desirable for all integer modes 23656 to be tieable. 23657 23658 Many machines have special registers for floating point arithmetic. 23659 Often people assume that floating point machine modes are allowed 23660 only in floating point registers. This is not true. Any 23661 registers that can hold integers can safely _hold_ a floating 23662 point machine mode, whether or not floating arithmetic can be done 23663 on it in those registers. Integer move instructions can be used 23664 to move the values. 23665 23666 On some machines, though, the converse is true: fixed-point machine 23667 modes may not go in floating registers. This is true if the 23668 floating registers normalize any value stored in them, because 23669 storing a non-floating value there would garble it. In this case, 23670 `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 23671 floating registers. But if the floating registers do not 23672 automatically normalize, if you can store any bit pattern in one 23673 and retrieve it unchanged without a trap, then any machine mode 23674 may go in a floating register, so you can define this macro to say 23675 so. 23676 23677 The primary significance of special floating registers is rather 23678 that they are the registers acceptable in floating point arithmetic 23679 instructions. However, this is of no concern to 23680 `HARD_REGNO_MODE_OK'. You handle it by writing the proper 23681 constraints for those instructions. 23682 23683 On some machines, the floating registers are especially slow to 23684 access, so that it is better to store a value in a stack frame 23685 than in such a register if floating point arithmetic is not being 23686 done. As long as the floating registers are not in class 23687 `GENERAL_REGS', they will not be used unless some pattern's 23688 constraint asks for one. 23689 23690 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 23691 A C expression that is nonzero if it is OK to rename a hard 23692 register FROM to another hard register TO. 23693 23694 One common use of this macro is to prevent renaming of a register 23695 to another register that is not saved by a prologue in an interrupt 23696 handler. 23697 23698 The default is always nonzero. 23699 23700 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 23701 A C expression that is nonzero if a value of mode MODE1 is 23702 accessible in mode MODE2 without copying. 23703 23704 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, 23705 MODE2)' are always the same for any R, then `MODES_TIEABLE_P 23706 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 23707 should define this macro to return zero unless some other 23708 mechanism ensures the accessibility of the value in a narrower 23709 mode. 23710 23711 You should define this macro to return nonzero in as many cases as 23712 possible since doing so will allow GCC to perform better register 23713 allocation. 23714 23715 -- Macro: AVOID_CCMODE_COPIES 23716 Define this macro if the compiler should avoid copies to/from 23717 `CCmode' registers. You should only define this macro if support 23718 for copying to/from `CCmode' is incomplete. 23719 23720 23721 File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 23722 23723 15.7.4 Handling Leaf Functions 23724 ------------------------------ 23725 23726 On some machines, a leaf function (i.e., one which makes no calls) can 23727 run more efficiently if it does not make its own register window. 23728 Often this means it is required to receive its arguments in the 23729 registers where they are passed by the caller, instead of the registers 23730 where they would normally arrive. 23731 23732 The special treatment for leaf functions generally applies only when 23733 other conditions are met; for example, often they may use only those 23734 registers for its own variables and temporaries. We use the term "leaf 23735 function" to mean a function that is suitable for this special 23736 handling, so that functions with no calls are not necessarily "leaf 23737 functions". 23738 23739 GCC assigns register numbers before it knows whether the function is 23740 suitable for leaf function treatment. So it needs to renumber the 23741 registers in order to output a leaf function. The following macros 23742 accomplish this. 23743 23744 -- Macro: LEAF_REGISTERS 23745 Name of a char vector, indexed by hard register number, which 23746 contains 1 for a register that is allowable in a candidate for leaf 23747 function treatment. 23748 23749 If leaf function treatment involves renumbering the registers, 23750 then the registers marked here should be the ones before 23751 renumbering--those that GCC would ordinarily allocate. The 23752 registers which will actually be used in the assembler code, after 23753 renumbering, should not be marked with 1 in this vector. 23754 23755 Define this macro only if the target machine offers a way to 23756 optimize the treatment of leaf functions. 23757 23758 -- Macro: LEAF_REG_REMAP (REGNO) 23759 A C expression whose value is the register number to which REGNO 23760 should be renumbered, when a function is treated as a leaf 23761 function. 23762 23763 If REGNO is a register number which should not appear in a leaf 23764 function before renumbering, then the expression should yield -1, 23765 which will cause the compiler to abort. 23766 23767 Define this macro only if the target machine offers a way to 23768 optimize the treatment of leaf functions, and registers need to be 23769 renumbered to do this. 23770 23771 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must 23772 usually treat leaf functions specially. They can test the C variable 23773 `current_function_is_leaf' which is nonzero for leaf functions. 23774 `current_function_is_leaf' is set prior to local register allocation 23775 and is valid for the remaining compiler passes. They can also test the 23776 C variable `current_function_uses_only_leaf_regs' which is nonzero for 23777 leaf functions which only use leaf registers. 23778 `current_function_uses_only_leaf_regs' is valid after all passes that 23779 modify the instructions have been run and is only useful if 23780 `LEAF_REGISTERS' is defined. 23781 23782 23783 File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 23784 23785 15.7.5 Registers That Form a Stack 23786 ---------------------------------- 23787 23788 There are special features to handle computers where some of the 23789 "registers" form a stack. Stack registers are normally written by 23790 pushing onto the stack, and are numbered relative to the top of the 23791 stack. 23792 23793 Currently, GCC can only handle one group of stack-like registers, and 23794 they must be consecutively numbered. Furthermore, the existing support 23795 for stack-like registers is specific to the 80387 floating point 23796 coprocessor. If you have a new architecture that uses stack-like 23797 registers, you will need to do substantial work on `reg-stack.c' and 23798 write your machine description to cooperate with it, as well as 23799 defining these macros. 23800 23801 -- Macro: STACK_REGS 23802 Define this if the machine has any stack-like registers. 23803 23804 -- Macro: FIRST_STACK_REG 23805 The number of the first stack-like register. This one is the top 23806 of the stack. 23807 23808 -- Macro: LAST_STACK_REG 23809 The number of the last stack-like register. This one is the 23810 bottom of the stack. 23811 23812 23813 File: gccint.info, Node: Register Classes, Next: Old Constraints, Prev: Registers, Up: Target Macros 23814 23815 15.8 Register Classes 23816 ===================== 23817 23818 On many machines, the numbered registers are not all equivalent. For 23819 example, certain registers may not be allowed for indexed addressing; 23820 certain registers may not be allowed in some instructions. These 23821 machine restrictions are described to the compiler using "register 23822 classes". 23823 23824 You define a number of register classes, giving each one a name and 23825 saying which of the registers belong to it. Then you can specify 23826 register classes that are allowed as operands to particular instruction 23827 patterns. 23828 23829 In general, each register will belong to several classes. In fact, one 23830 class must be named `ALL_REGS' and contain all the registers. Another 23831 class must be named `NO_REGS' and contain no registers. Often the 23832 union of two classes will be another class; however, this is not 23833 required. 23834 23835 One of the classes must be named `GENERAL_REGS'. There is nothing 23836 terribly special about the name, but the operand constraint letters `r' 23837 and `g' specify this class. If `GENERAL_REGS' is the same as 23838 `ALL_REGS', just define it as a macro which expands to `ALL_REGS'. 23839 23840 Order the classes so that if class X is contained in class Y then X 23841 has a lower class number than Y. 23842 23843 The way classes other than `GENERAL_REGS' are specified in operand 23844 constraints is through machine-dependent operand constraint letters. 23845 You can define such letters to correspond to various classes, then use 23846 them in operand constraints. 23847 23848 You should define a class for the union of two classes whenever some 23849 instruction allows both classes. For example, if an instruction allows 23850 either a floating point (coprocessor) register or a general register 23851 for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS' 23852 which includes both of them. Otherwise you will get suboptimal code. 23853 23854 You must also specify certain redundant information about the register 23855 classes: for each class, which classes contain it and which ones are 23856 contained in it; for each pair of classes, the largest class contained 23857 in their union. 23858 23859 When a value occupying several consecutive registers is expected in a 23860 certain class, all the registers used must belong to that class. 23861 Therefore, register classes cannot be used to enforce a requirement for 23862 a register pair to start with an even-numbered register. The way to 23863 specify this requirement is with `HARD_REGNO_MODE_OK'. 23864 23865 Register classes used for input-operands of bitwise-and or shift 23866 instructions have a special requirement: each such class must have, for 23867 each fixed-point machine mode, a subclass whose registers can transfer 23868 that mode to or from memory. For example, on some machines, the 23869 operations for single-byte values (`QImode') are limited to certain 23870 registers. When this is so, each register class that is used in a 23871 bitwise-and or shift instruction must have a subclass consisting of 23872 registers from which single-byte values can be loaded or stored. This 23873 is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to 23874 return. 23875 23876 -- Data type: enum reg_class 23877 An enumerated type that must be defined with all the register 23878 class names as enumerated values. `NO_REGS' must be first. 23879 `ALL_REGS' must be the last register class, followed by one more 23880 enumerated value, `LIM_REG_CLASSES', which is not a register class 23881 but rather tells how many classes there are. 23882 23883 Each register class has a number, which is the value of casting 23884 the class name to type `int'. The number serves as an index in 23885 many of the tables described below. 23886 23887 -- Macro: N_REG_CLASSES 23888 The number of distinct register classes, defined as follows: 23889 23890 #define N_REG_CLASSES (int) LIM_REG_CLASSES 23891 23892 -- Macro: REG_CLASS_NAMES 23893 An initializer containing the names of the register classes as C 23894 string constants. These names are used in writing some of the 23895 debugging dumps. 23896 23897 -- Macro: REG_CLASS_CONTENTS 23898 An initializer containing the contents of the register classes, as 23899 integers which are bit masks. The Nth integer specifies the 23900 contents of class N. The way the integer MASK is interpreted is 23901 that register R is in the class if `MASK & (1 << R)' is 1. 23902 23903 When the machine has more than 32 registers, an integer does not 23904 suffice. Then the integers are replaced by sub-initializers, 23905 braced groupings containing several integers. Each 23906 sub-initializer must be suitable as an initializer for the type 23907 `HARD_REG_SET' which is defined in `hard-reg-set.h'. In this 23908 situation, the first integer in each sub-initializer corresponds to 23909 registers 0 through 31, the second integer to registers 32 through 23910 63, and so on. 23911 23912 -- Macro: REGNO_REG_CLASS (REGNO) 23913 A C expression whose value is a register class containing hard 23914 register REGNO. In general there is more than one such class; 23915 choose a class which is "minimal", meaning that no smaller class 23916 also contains the register. 23917 23918 -- Macro: BASE_REG_CLASS 23919 A macro whose definition is the name of the class to which a valid 23920 base register must belong. A base register is one used in an 23921 address which is the register value plus a displacement. 23922 23923 -- Macro: MODE_BASE_REG_CLASS (MODE) 23924 This is a variation of the `BASE_REG_CLASS' macro which allows the 23925 selection of a base register in a mode dependent manner. If MODE 23926 is VOIDmode then it should return the same value as 23927 `BASE_REG_CLASS'. 23928 23929 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 23930 A C expression whose value is the register class to which a valid 23931 base register must belong in order to be used in a base plus index 23932 register address. You should define this macro if base plus index 23933 addresses have different requirements than other base register 23934 uses. 23935 23936 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE) 23937 A C expression whose value is the register class to which a valid 23938 base register must belong. OUTER_CODE and INDEX_CODE define the 23939 context in which the base register occurs. OUTER_CODE is the code 23940 of the immediately enclosing expression (`MEM' for the top level 23941 of an address, `ADDRESS' for something that occurs in an 23942 `address_operand'). INDEX_CODE is the code of the corresponding 23943 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise. 23944 23945 -- Macro: INDEX_REG_CLASS 23946 A macro whose definition is the name of the class to which a valid 23947 index register must belong. An index register is one used in an 23948 address where its value is either multiplied by a scale factor or 23949 added to another register (as well as added to a displacement). 23950 23951 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 23952 A C expression which is nonzero if register number NUM is suitable 23953 for use as a base register in operand addresses. It may be either 23954 a suitable hard register or a pseudo register that has been 23955 allocated such a hard register. 23956 23957 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 23958 A C expression that is just like `REGNO_OK_FOR_BASE_P', except that 23959 that expression may examine the mode of the memory reference in 23960 MODE. You should define this macro if the mode of the memory 23961 reference affects whether a register may be used as a base 23962 register. If you define this macro, the compiler will use it 23963 instead of `REGNO_OK_FOR_BASE_P'. The mode may be `VOIDmode' for 23964 addresses that appear outside a `MEM', i.e., as an 23965 `address_operand'. 23966 23967 23968 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 23969 A C expression which is nonzero if register number NUM is suitable 23970 for use as a base register in base plus index operand addresses, 23971 accessing memory in mode MODE. It may be either a suitable hard 23972 register or a pseudo register that has been allocated such a hard 23973 register. You should define this macro if base plus index 23974 addresses have different requirements than other base register 23975 uses. 23976 23977 Use of this macro is deprecated; please use the more general 23978 `REGNO_MODE_CODE_OK_FOR_BASE_P'. 23979 23980 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE, 23981 INDEX_CODE) 23982 A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except 23983 that that expression may examine the context in which the register 23984 appears in the memory reference. OUTER_CODE is the code of the 23985 immediately enclosing expression (`MEM' if at the top level of the 23986 address, `ADDRESS' for something that occurs in an 23987 `address_operand'). INDEX_CODE is the code of the corresponding 23988 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise. 23989 The mode may be `VOIDmode' for addresses that appear outside a 23990 `MEM', i.e., as an `address_operand'. 23991 23992 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 23993 A C expression which is nonzero if register number NUM is suitable 23994 for use as an index register in operand addresses. It may be 23995 either a suitable hard register or a pseudo register that has been 23996 allocated such a hard register. 23997 23998 The difference between an index register and a base register is 23999 that the index register may be scaled. If an address involves the 24000 sum of two registers, neither one of them scaled, then either one 24001 may be labeled the "base" and the other the "index"; but whichever 24002 labeling is used must fit the machine's constraints of which 24003 registers may serve in each capacity. The compiler will try both 24004 labelings, looking for one that is valid, and will reload one or 24005 both registers only if neither labeling works. 24006 24007 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 24008 A C expression that places additional restrictions on the register 24009 class to use when it is necessary to copy value X into a register 24010 in class CLASS. The value is a register class; perhaps CLASS, or 24011 perhaps another, smaller class. On many machines, the following 24012 definition is safe: 24013 24014 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 24015 24016 Sometimes returning a more restrictive class makes better code. 24017 For example, on the 68000, when X is an integer constant that is 24018 in range for a `moveq' instruction, the value of this macro is 24019 always `DATA_REGS' as long as CLASS includes the data registers. 24020 Requiring a data register guarantees that a `moveq' will be used. 24021 24022 One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is 24023 if X is a legitimate constant which cannot be loaded into some 24024 register class. By returning `NO_REGS' you can force X into a 24025 memory location. For example, rs6000 can load immediate values 24026 into general-purpose registers, but does not have an instruction 24027 for loading an immediate value into a floating-point register, so 24028 `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a 24029 floating-point constant. If the constant can't be loaded into any 24030 kind of register, code generation will be better if 24031 `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of 24032 using `PREFERRED_RELOAD_CLASS'. 24033 24034 If an insn has pseudos in it after register allocation, reload 24035 will go through the alternatives and call repeatedly 24036 `PREFERRED_RELOAD_CLASS' to find the best one. Returning 24037 `NO_REGS', in this case, makes reload add a `!' in front of the 24038 constraint: the x86 back-end uses this feature to discourage usage 24039 of 387 registers when math is done in the SSE registers (and vice 24040 versa). 24041 24042 -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS) 24043 Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of 24044 input reloads. If you don't define this macro, the default is to 24045 use CLASS, unchanged. 24046 24047 You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage 24048 reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'. 24049 24050 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 24051 A C expression that places additional restrictions on the register 24052 class to use when it is necessary to be able to hold a value of 24053 mode MODE in a reload register for which class CLASS would 24054 ordinarily be used. 24055 24056 Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when 24057 there are certain modes that simply can't go in certain reload 24058 classes. 24059 24060 The value is a register class; perhaps CLASS, or perhaps another, 24061 smaller class. 24062 24063 Don't define this macro unless the target machine has limitations 24064 which require the macro to do something nontrivial. 24065 24066 -- Target Hook: enum reg_class TARGET_SECONDARY_RELOAD (bool IN_P, rtx 24067 X, enum reg_class RELOAD_CLASS, enum machine_mode 24068 RELOAD_MODE, secondary_reload_info *SRI) 24069 Many machines have some registers that cannot be copied directly 24070 to or from memory or even from other types of registers. An 24071 example is the `MQ' register, which on most machines, can only be 24072 copied to or from general registers, but not memory. Below, we 24073 shall be using the term 'intermediate register' when a move 24074 operation cannot be performed directly, but has to be done by 24075 copying the source into the intermediate register first, and then 24076 copying the intermediate register to the destination. An 24077 intermediate register always has the same mode as source and 24078 destination. Since it holds the actual value being copied, reload 24079 might apply optimizations to re-use an intermediate register and 24080 eliding the copy from the source when it can determine that the 24081 intermediate register still holds the required value. 24082 24083 Another kind of secondary reload is required on some machines which 24084 allow copying all registers to and from memory, but require a 24085 scratch register for stores to some memory locations (e.g., those 24086 with symbolic address on the RT, and those with certain symbolic 24087 address on the SPARC when compiling PIC). Scratch registers need 24088 not have the same mode as the value being copied, and usually hold 24089 a different value that that being copied. Special patterns in the 24090 md file are needed to describe how the copy is performed with the 24091 help of the scratch register; these patterns also describe the 24092 number, register class(es) and mode(s) of the scratch register(s). 24093 24094 In some cases, both an intermediate and a scratch register are 24095 required. 24096 24097 For input reloads, this target hook is called with nonzero IN_P, 24098 and X is an rtx that needs to be copied to a register of class 24099 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 24100 is called with zero IN_P, and a register of class RELOAD_CLASS 24101 needs to be copied to rtx X in RELOAD_MODE. 24102 24103 If copying a register of RELOAD_CLASS from/to X requires an 24104 intermediate register, the hook `secondary_reload' should return 24105 the register class required for this intermediate register. If no 24106 intermediate register is required, it should return NO_REGS. If 24107 more than one intermediate register is required, describe the one 24108 that is closest in the copy chain to the reload register. 24109 24110 If scratch registers are needed, you also have to describe how to 24111 perform the copy from/to the reload register to/from this closest 24112 intermediate register. Or if no intermediate register is 24113 required, but still a scratch register is needed, describe the 24114 copy from/to the reload register to/from the reload operand X. 24115 24116 You do this by setting `sri->icode' to the instruction code of a 24117 pattern in the md file which performs the move. Operands 0 and 1 24118 are the output and input of this copy, respectively. Operands 24119 from operand 2 onward are for scratch operands. These scratch 24120 operands must have a mode, and a single-register-class output 24121 constraint. 24122 24123 When an intermediate register is used, the `secondary_reload' hook 24124 will be called again to determine how to copy the intermediate 24125 register to/from the reload operand X, so your hook must also have 24126 code to handle the register class of the intermediate operand. 24127 24128 X might be a pseudo-register or a `subreg' of a pseudo-register, 24129 which could either be in a hard register or in memory. Use 24130 `true_regnum' to find out; it will return -1 if the pseudo is in 24131 memory and the hard register number if it is in a register. 24132 24133 Scratch operands in memory (constraint `"=m"' / `"=&m"') are 24134 currently not supported. For the time being, you will have to 24135 continue to use `SECONDARY_MEMORY_NEEDED' for that purpose. 24136 24137 `copy_cost' also uses this target hook to find out how values are 24138 copied. If you want it to include some extra cost for the need to 24139 allocate (a) scratch register(s), set `sri->extra_cost' to the 24140 additional cost. Or if two dependent moves are supposed to have a 24141 lower cost than the sum of the individual moves due to expected 24142 fortuitous scheduling and/or special forwarding logic, you can set 24143 `sri->extra_cost' to a negative amount. 24144 24145 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 24146 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 24147 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 24148 These macros are obsolete, new ports should use the target hook 24149 `TARGET_SECONDARY_RELOAD' instead. 24150 24151 These are obsolete macros, replaced by the 24152 `TARGET_SECONDARY_RELOAD' target hook. Older ports still define 24153 these macros to indicate to the reload phase that it may need to 24154 allocate at least one register for a reload in addition to the 24155 register to contain the data. Specifically, if copying X to a 24156 register CLASS in MODE requires an intermediate register, you were 24157 supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the 24158 largest register class all of whose registers can be used as 24159 intermediate registers or scratch registers. 24160 24161 If copying a register CLASS in MODE to X requires an intermediate 24162 or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 24163 to be defined be defined to return the largest register class 24164 required. If the requirements for input and output reloads were 24165 the same, the macro `SECONDARY_RELOAD_CLASS' should have been used 24166 instead of defining both macros identically. 24167 24168 The values returned by these macros are often `GENERAL_REGS'. 24169 Return `NO_REGS' if no spare register is needed; i.e., if X can be 24170 directly copied to or from a register of CLASS in MODE without 24171 requiring a scratch register. Do not define this macro if it 24172 would always return `NO_REGS'. 24173 24174 If a scratch register is required (either with or without an 24175 intermediate register), you were supposed to define patterns for 24176 `reload_inM' or `reload_outM', as required (*note Standard 24177 Names::. These patterns, which were normally implemented with a 24178 `define_expand', should be similar to the `movM' patterns, except 24179 that operand 2 is the scratch register. 24180 24181 These patterns need constraints for the reload register and scratch 24182 register that contain a single register class. If the original 24183 reload register (whose class is CLASS) can meet the constraint 24184 given in the pattern, the value returned by these macros is used 24185 for the class of the scratch register. Otherwise, two additional 24186 reload registers are required. Their classes are obtained from 24187 the constraints in the insn pattern. 24188 24189 X might be a pseudo-register or a `subreg' of a pseudo-register, 24190 which could either be in a hard register or in memory. Use 24191 `true_regnum' to find out; it will return -1 if the pseudo is in 24192 memory and the hard register number if it is in a register. 24193 24194 These macros should not be used in the case where a particular 24195 class of registers can only be copied to memory and not to another 24196 class of registers. In that case, secondary reload registers are 24197 not needed and would not be helpful. Instead, a stack location 24198 must be used to perform the copy and the `movM' pattern should use 24199 memory as an intermediate storage. This case often occurs between 24200 floating-point and general registers. 24201 24202 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 24203 Certain machines have the property that some registers cannot be 24204 copied to some other registers without using memory. Define this 24205 macro on those machines to be a C expression that is nonzero if 24206 objects of mode M in registers of CLASS1 can only be copied to 24207 registers of class CLASS2 by storing a register of CLASS1 into 24208 memory and loading that memory location into a register of CLASS2. 24209 24210 Do not define this macro if its value would always be zero. 24211 24212 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 24213 Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler 24214 allocates a stack slot for a memory location needed for register 24215 copies. If this macro is defined, the compiler instead uses the 24216 memory location defined by this macro. 24217 24218 Do not define this macro if you do not define 24219 `SECONDARY_MEMORY_NEEDED'. 24220 24221 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 24222 When the compiler needs a secondary memory location to copy 24223 between two registers of mode MODE, it normally allocates 24224 sufficient memory to hold a quantity of `BITS_PER_WORD' bits and 24225 performs the store and load operations in a mode that many bits 24226 wide and whose class is the same as that of MODE. 24227 24228 This is right thing to do on most machines because it ensures that 24229 all bits of the register are copied and prevents accesses to the 24230 registers in a narrower mode, which some machines prohibit for 24231 floating-point registers. 24232 24233 However, this default behavior is not correct on some machines, 24234 such as the DEC Alpha, that store short integers in floating-point 24235 registers differently than in integer registers. On those 24236 machines, the default widening will not work correctly and you 24237 must define this macro to suppress that widening in some cases. 24238 See the file `alpha.h' for details. 24239 24240 Do not define this macro if you do not define 24241 `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 24242 `BITS_PER_WORD' bits wide is correct for your machine. 24243 24244 -- Macro: SMALL_REGISTER_CLASSES 24245 On some machines, it is risky to let hard registers live across 24246 arbitrary insns. Typically, these machines have instructions that 24247 require values to be in specific registers (like an accumulator), 24248 and reload will fail if the required hard register is used for 24249 another purpose across such an insn. 24250 24251 Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero 24252 value on these machines. When this macro has a nonzero value, the 24253 compiler will try to minimize the lifetime of hard registers. 24254 24255 It is always safe to define this macro with a nonzero value, but 24256 if you unnecessarily define it, you will reduce the amount of 24257 optimizations that can be performed in some cases. If you do not 24258 define this macro with a nonzero value when it is required, the 24259 compiler will run out of spill registers and print a fatal error 24260 message. For most machines, you should not define this macro at 24261 all. 24262 24263 -- Macro: CLASS_LIKELY_SPILLED_P (CLASS) 24264 A C expression whose value is nonzero if pseudos that have been 24265 assigned to registers of class CLASS would likely be spilled 24266 because registers of CLASS are needed for spill registers. 24267 24268 The default value of this macro returns 1 if CLASS has exactly one 24269 register and zero otherwise. On most machines, this default 24270 should be used. Only define this macro to some other expression 24271 if pseudos allocated by `local-alloc.c' end up in memory because 24272 their hard registers were needed for spill registers. If this 24273 macro returns nonzero for those classes, those pseudos will only 24274 be allocated by `global.c', which knows how to reallocate the 24275 pseudo to another register. If there would not be another 24276 register available for reallocation, you should not change the 24277 definition of this macro since the only effect of such a 24278 definition would be to slow down register allocation. 24279 24280 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 24281 A C expression for the maximum number of consecutive registers of 24282 class CLASS needed to hold a value of mode MODE. 24283 24284 This is closely related to the macro `HARD_REGNO_NREGS'. In fact, 24285 the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be 24286 the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all 24287 REGNO values in the class CLASS. 24288 24289 This macro helps control the handling of multiple-word values in 24290 the reload pass. 24291 24292 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 24293 If defined, a C expression that returns nonzero for a CLASS for 24294 which a change from mode FROM to mode TO is invalid. 24295 24296 For the example, loading 32-bit integer or floating-point objects 24297 into floating-point registers on the Alpha extends them to 64 bits. 24298 Therefore loading a 64-bit object and then storing it as a 32-bit 24299 object does not store the low-order 32 bits, as would be the case 24300 for a normal register. Therefore, `alpha.h' defines 24301 `CANNOT_CHANGE_MODE_CLASS' as below: 24302 24303 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 24304 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 24305 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 24306 24307 24308 File: gccint.info, Node: Old Constraints, Next: Stack and Calling, Prev: Register Classes, Up: Target Macros 24309 24310 15.9 Obsolete Macros for Defining Constraints 24311 ============================================= 24312 24313 Machine-specific constraints can be defined with these macros instead 24314 of the machine description constructs described in *Note Define 24315 Constraints::. This mechanism is obsolete. New ports should not use 24316 it; old ports should convert to the new mechanism. 24317 24318 -- Macro: CONSTRAINT_LEN (CHAR, STR) 24319 For the constraint at the start of STR, which starts with the 24320 letter C, return the length. This allows you to have register 24321 class / constant / extra constraints that are longer than a single 24322 letter; you don't need to define this macro if you can do with 24323 single-letter constraints only. The definition of this macro 24324 should use DEFAULT_CONSTRAINT_LEN for all the characters that you 24325 don't want to handle specially. There are some sanity checks in 24326 genoutput.c that check the constraint lengths for the md file, so 24327 you can also use this macro to help you while you are 24328 transitioning from a byzantine single-letter-constraint scheme: 24329 when you return a negative length for a constraint you want to 24330 re-use, genoutput will complain about every instance where it is 24331 used in the md file. 24332 24333 -- Macro: REG_CLASS_FROM_LETTER (CHAR) 24334 A C expression which defines the machine-dependent operand 24335 constraint letters for register classes. If CHAR is such a 24336 letter, the value should be the register class corresponding to 24337 it. Otherwise, the value should be `NO_REGS'. The register 24338 letter `r', corresponding to class `GENERAL_REGS', will not be 24339 passed to this macro; you do not need to handle it. 24340 24341 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR) 24342 Like `REG_CLASS_FROM_LETTER', but you also get the constraint 24343 string passed in STR, so that you can use suffixes to distinguish 24344 between different variants. 24345 24346 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C) 24347 A C expression that defines the machine-dependent operand 24348 constraint letters (`I', `J', `K', ... `P') that specify 24349 particular ranges of integer values. If C is one of those 24350 letters, the expression should check that VALUE, an integer, is in 24351 the appropriate range and return 1 if so, 0 otherwise. If C is 24352 not one of those letters, the value should be 0 regardless of 24353 VALUE. 24354 24355 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 24356 Like `CONST_OK_FOR_LETTER_P', but you also get the constraint 24357 string passed in STR, so that you can use suffixes to distinguish 24358 between different variants. 24359 24360 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C) 24361 A C expression that defines the machine-dependent operand 24362 constraint letters that specify particular ranges of 24363 `const_double' values (`G' or `H'). 24364 24365 If C is one of those letters, the expression should check that 24366 VALUE, an RTX of code `const_double', is in the appropriate range 24367 and return 1 if so, 0 otherwise. If C is not one of those 24368 letters, the value should be 0 regardless of VALUE. 24369 24370 `const_double' is used for all floating-point constants and for 24371 `DImode' fixed-point constants. A given letter can accept either 24372 or both kinds of values. It can use `GET_MODE' to distinguish 24373 between these kinds. 24374 24375 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 24376 Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the 24377 constraint string passed in STR, so that you can use suffixes to 24378 distinguish between different variants. 24379 24380 -- Macro: EXTRA_CONSTRAINT (VALUE, C) 24381 A C expression that defines the optional machine-dependent 24382 constraint letters that can be used to segregate specific types of 24383 operands, usually memory references, for the target machine. Any 24384 letter that is not elsewhere defined and not matched by 24385 `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used. 24386 Normally this macro will not be defined. 24387 24388 If it is required for a particular target machine, it should 24389 return 1 if VALUE corresponds to the operand type represented by 24390 the constraint letter C. If C is not defined as an extra 24391 constraint, the value returned should be 0 regardless of VALUE. 24392 24393 For example, on the ROMP, load instructions cannot have their 24394 output in r0 if the memory reference contains a symbolic address. 24395 Constraint letter `Q' is defined as representing a memory address 24396 that does _not_ contain a symbolic address. An alternative is 24397 specified with a `Q' constraint on the input and `r' on the 24398 output. The next alternative specifies `m' on the input and a 24399 register class that does not include r0 on the output. 24400 24401 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR) 24402 Like `EXTRA_CONSTRAINT', but you also get the constraint string 24403 passed in STR, so that you can use suffixes to distinguish between 24404 different variants. 24405 24406 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR) 24407 A C expression that defines the optional machine-dependent 24408 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT', 24409 that should be treated like memory constraints by the reload pass. 24410 24411 It should return 1 if the operand type represented by the 24412 constraint at the start of STR, the first letter of which is the 24413 letter C, comprises a subset of all memory references including 24414 all those whose address is simply a base register. This allows 24415 the reload pass to reload an operand, if it does not directly 24416 correspond to the operand type of C, by copying its address into a 24417 base register. 24418 24419 For example, on the S/390, some instructions do not accept 24420 arbitrary memory references, but only those that do not make use 24421 of an index register. The constraint letter `Q' is defined via 24422 `EXTRA_CONSTRAINT' as representing a memory address of this type. 24423 If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q' 24424 constraint can handle any memory operand, because the reload pass 24425 knows it can be reloaded by copying the memory address into a base 24426 register if required. This is analogous to the way a `o' 24427 constraint can handle any memory operand. 24428 24429 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR) 24430 A C expression that defines the optional machine-dependent 24431 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' / 24432 `EXTRA_CONSTRAINT_STR', that should be treated like address 24433 constraints by the reload pass. 24434 24435 It should return 1 if the operand type represented by the 24436 constraint at the start of STR, which starts with the letter C, 24437 comprises a subset of all memory addresses including all those 24438 that consist of just a base register. This allows the reload pass 24439 to reload an operand, if it does not directly correspond to the 24440 operand type of STR, by copying it into a base register. 24441 24442 Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be 24443 used with the `address_operand' predicate. It is treated 24444 analogously to the `p' constraint. 24445 24446 24447 File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Old Constraints, Up: Target Macros 24448 24449 15.10 Stack Layout and Calling Conventions 24450 ========================================== 24451 24452 This describes the stack layout and calling conventions. 24453 24454 * Menu: 24455 24456 * Frame Layout:: 24457 * Exception Handling:: 24458 * Stack Checking:: 24459 * Frame Registers:: 24460 * Elimination:: 24461 * Stack Arguments:: 24462 * Register Arguments:: 24463 * Scalar Return:: 24464 * Aggregate Return:: 24465 * Caller Saves:: 24466 * Function Entry:: 24467 * Profiling:: 24468 * Tail Calls:: 24469 * Stack Smashing Protection:: 24470 24471 24472 File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 24473 24474 15.10.1 Basic Stack Layout 24475 -------------------------- 24476 24477 Here is the basic stack layout. 24478 24479 -- Macro: STACK_GROWS_DOWNWARD 24480 Define this macro if pushing a word onto the stack moves the stack 24481 pointer to a smaller address. 24482 24483 When we say, "define this macro if ...", it means that the 24484 compiler checks this macro only with `#ifdef' so the precise 24485 definition used does not matter. 24486 24487 -- Macro: STACK_PUSH_CODE 24488 This macro defines the operation used when something is pushed on 24489 the stack. In RTL, a push operation will be `(set (mem 24490 (STACK_PUSH_CODE (reg sp))) ...)' 24491 24492 The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'. 24493 Which of these is correct depends on the stack direction and on 24494 whether the stack pointer points to the last item on the stack or 24495 whether it points to the space for the next item on the stack. 24496 24497 The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined, 24498 which is almost always right, and `PRE_INC' otherwise, which is 24499 often wrong. 24500 24501 -- Macro: FRAME_GROWS_DOWNWARD 24502 Define this macro to nonzero value if the addresses of local 24503 variable slots are at negative offsets from the frame pointer. 24504 24505 -- Macro: ARGS_GROW_DOWNWARD 24506 Define this macro if successive arguments to a function occupy 24507 decreasing addresses on the stack. 24508 24509 -- Macro: STARTING_FRAME_OFFSET 24510 Offset from the frame pointer to the first local variable slot to 24511 be allocated. 24512 24513 If `FRAME_GROWS_DOWNWARD', find the next slot's offset by 24514 subtracting the first slot's length from `STARTING_FRAME_OFFSET'. 24515 Otherwise, it is found by adding the length of the first slot to 24516 the value `STARTING_FRAME_OFFSET'. 24517 24518 -- Macro: STACK_ALIGNMENT_NEEDED 24519 Define to zero to disable final alignment of the stack during 24520 reload. The nonzero default for this macro is suitable for most 24521 ports. 24522 24523 On ports where `STARTING_FRAME_OFFSET' is nonzero or where there 24524 is a register save block following the local block that doesn't 24525 require alignment to `STACK_BOUNDARY', it may be beneficial to 24526 disable stack alignment and do it in the backend. 24527 24528 -- Macro: STACK_POINTER_OFFSET 24529 Offset from the stack pointer register to the first location at 24530 which outgoing arguments are placed. If not specified, the 24531 default value of zero is used. This is the proper value for most 24532 machines. 24533 24534 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 24535 the first location at which outgoing arguments are placed. 24536 24537 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 24538 Offset from the argument pointer register to the first argument's 24539 address. On some machines it may depend on the data type of the 24540 function. 24541 24542 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 24543 the first argument's address. 24544 24545 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 24546 Offset from the stack pointer register to an item dynamically 24547 allocated on the stack, e.g., by `alloca'. 24548 24549 The default value for this macro is `STACK_POINTER_OFFSET' plus the 24550 length of the outgoing arguments. The default is correct for most 24551 machines. See `function.c' for details. 24552 24553 -- Macro: INITIAL_FRAME_ADDRESS_RTX 24554 A C expression whose value is RTL representing the address of the 24555 initial stack frame. This address is passed to `RETURN_ADDR_RTX' 24556 and `DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 24557 reasonable default value will be used. Define this macro in order 24558 to make frame pointer elimination work in the presence of 24559 `__builtin_frame_address (count)' and `__builtin_return_address 24560 (count)' for `count' not equal to zero. 24561 24562 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 24563 A C expression whose value is RTL representing the address in a 24564 stack frame where the pointer to the caller's frame is stored. 24565 Assume that FRAMEADDR is an RTL expression for the address of the 24566 stack frame itself. 24567 24568 If you don't define this macro, the default is to return the value 24569 of FRAMEADDR--that is, the stack frame address is also the address 24570 of the stack word that points to the previous frame. 24571 24572 -- Macro: SETUP_FRAME_ADDRESSES 24573 If defined, a C expression that produces the machine-specific code 24574 to setup the stack so that arbitrary frames can be accessed. For 24575 example, on the SPARC, we must flush all of the register windows 24576 to the stack before we can access arbitrary stack frames. You 24577 will seldom need to define this macro. 24578 24579 -- Target Hook: bool TARGET_BUILTIN_SETJMP_FRAME_VALUE () 24580 This target hook should return an rtx that is used to store the 24581 address of the current frame into the built in `setjmp' buffer. 24582 The default value, `virtual_stack_vars_rtx', is correct for most 24583 machines. One reason you may need to define this target hook is if 24584 `hard_frame_pointer_rtx' is the appropriate value on your machine. 24585 24586 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 24587 A C expression whose value is RTL representing the value of the 24588 frame address for the current frame. FRAMEADDR is the frame 24589 pointer of the current frame. This is used for 24590 __builtin_frame_address. You need only define this macro if the 24591 frame address is not the same as the frame pointer. Most machines 24592 do not need to define it. 24593 24594 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 24595 A C expression whose value is RTL representing the value of the 24596 return address for the frame COUNT steps up from the current 24597 frame, after the prologue. FRAMEADDR is the frame pointer of the 24598 COUNT frame, or the frame pointer of the COUNT - 1 frame if 24599 `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined. 24600 24601 The value of the expression must always be the correct address when 24602 COUNT is zero, but may be `NULL_RTX' if there is not way to 24603 determine the return address of other frames. 24604 24605 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 24606 Define this if the return address of a particular stack frame is 24607 accessed from the frame pointer of the previous stack frame. 24608 24609 -- Macro: INCOMING_RETURN_ADDR_RTX 24610 A C expression whose value is RTL representing the location of the 24611 incoming return address at the beginning of any function, before 24612 the prologue. This RTL is either a `REG', indicating that the 24613 return value is saved in `REG', or a `MEM' representing a location 24614 in the stack. 24615 24616 You only need to define this macro if you want to support call 24617 frame debugging information like that provided by DWARF 2. 24618 24619 If this RTL is a `REG', you should also define 24620 `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'. 24621 24622 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 24623 A C expression whose value is an integer giving a DWARF 2 column 24624 number that may be used as an alternative return column. The 24625 column must not correspond to any gcc hard register (that is, it 24626 must not be in the range of `DWARF_FRAME_REGNUM'). 24627 24628 This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a 24629 general register, but an alternative column needs to be used for 24630 signal frames. Some targets have also used different frame return 24631 columns over time. 24632 24633 -- Macro: DWARF_ZERO_REG 24634 A C expression whose value is an integer giving a DWARF 2 register 24635 number that is considered to always have the value zero. This 24636 should only be defined if the target has an architected zero 24637 register, and someone decided it was a good idea to use that 24638 register number to terminate the stack backtrace. New ports 24639 should avoid this. 24640 24641 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 24642 *LABEL, rtx PATTERN, int INDEX) 24643 This target hook allows the backend to emit frame-related insns 24644 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 24645 debugging info engine will invoke it on insns of the form 24646 (set (reg) (unspec [...] UNSPEC_INDEX)) 24647 and 24648 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 24649 to let the backend emit the call frame instructions. LABEL is the 24650 CFI label attached to the insn, PATTERN is the pattern of the insn 24651 and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'. 24652 24653 -- Macro: INCOMING_FRAME_SP_OFFSET 24654 A C expression whose value is an integer giving the offset, in 24655 bytes, from the value of the stack pointer register to the top of 24656 the stack frame at the beginning of any function, before the 24657 prologue. The top of the frame is defined to be the value of the 24658 stack pointer in the previous frame, just before the call 24659 instruction. 24660 24661 You only need to define this macro if you want to support call 24662 frame debugging information like that provided by DWARF 2. 24663 24664 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 24665 A C expression whose value is an integer giving the offset, in 24666 bytes, from the argument pointer to the canonical frame address 24667 (cfa). The final value should coincide with that calculated by 24668 `INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 24669 during virtual register instantiation. 24670 24671 The default value for this macro is `FIRST_PARM_OFFSET (fundecl)', 24672 which is correct for most machines; in general, the arguments are 24673 found immediately before the stack frame. Note that this is not 24674 the case on some targets that save registers into the caller's 24675 frame, such as SPARC and rs6000, and so such targets need to 24676 define this macro. 24677 24678 You only need to define this macro if the default is incorrect, 24679 and you want to support call frame debugging information like that 24680 provided by DWARF 2. 24681 24682 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 24683 If defined, a C expression whose value is an integer giving the 24684 offset in bytes from the frame pointer to the canonical frame 24685 address (cfa). The final value should coincide with that 24686 calculated by `INCOMING_FRAME_SP_OFFSET'. 24687 24688 Normally the CFA is calculated as an offset from the argument 24689 pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer 24690 is variable due to the ABI, this may not be possible. If this 24691 macro is defined, it implies that the virtual register 24692 instantiation should be based on the frame pointer instead of the 24693 argument pointer. Only one of `FRAME_POINTER_CFA_OFFSET' and 24694 `ARG_POINTER_CFA_OFFSET' should be defined. 24695 24696 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 24697 If defined, a C expression whose value is an integer giving the 24698 offset in bytes from the canonical frame address (cfa) to the 24699 frame base used in DWARF 2 debug information. The default is 24700 zero. A different value may reduce the size of debug information 24701 on some ports. 24702 24703 24704 File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 24705 24706 15.10.2 Exception Handling Support 24707 ---------------------------------- 24708 24709 -- Macro: EH_RETURN_DATA_REGNO (N) 24710 A C expression whose value is the Nth register number used for 24711 data by exception handlers, or `INVALID_REGNUM' if fewer than N 24712 registers are usable. 24713 24714 The exception handling library routines communicate with the 24715 exception handlers via a set of agreed upon registers. Ideally 24716 these registers should be call-clobbered; it is possible to use 24717 call-saved registers, but may negatively impact code size. The 24718 target must support at least 2 data registers, but should define 4 24719 if there are enough free registers. 24720 24721 You must define this macro if you want to support call frame 24722 exception handling like that provided by DWARF 2. 24723 24724 -- Macro: EH_RETURN_STACKADJ_RTX 24725 A C expression whose value is RTL representing a location in which 24726 to store a stack adjustment to be applied before function return. 24727 This is used to unwind the stack to an exception handler's call 24728 frame. It will be assigned zero on code paths that return 24729 normally. 24730 24731 Typically this is a call-clobbered hard register that is otherwise 24732 untouched by the epilogue, but could also be a stack slot. 24733 24734 Do not define this macro if the stack pointer is saved and restored 24735 by the regular prolog and epilog code in the call frame itself; in 24736 this case, the exception handling library routines will update the 24737 stack location to be restored in place. Otherwise, you must define 24738 this macro if you want to support call frame exception handling 24739 like that provided by DWARF 2. 24740 24741 -- Macro: EH_RETURN_HANDLER_RTX 24742 A C expression whose value is RTL representing a location in which 24743 to store the address of an exception handler to which we should 24744 return. It will not be assigned on code paths that return 24745 normally. 24746 24747 Typically this is the location in the call frame at which the 24748 normal return address is stored. For targets that return by 24749 popping an address off the stack, this might be a memory address 24750 just below the _target_ call frame rather than inside the current 24751 call frame. If defined, `EH_RETURN_STACKADJ_RTX' will have already 24752 been assigned, so it may be used to calculate the location of the 24753 target call frame. 24754 24755 Some targets have more complex requirements than storing to an 24756 address calculable during initial code generation. In that case 24757 the `eh_return' instruction pattern should be used instead. 24758 24759 If you want to support call frame exception handling, you must 24760 define either this macro or the `eh_return' instruction pattern. 24761 24762 -- Macro: RETURN_ADDR_OFFSET 24763 If defined, an integer-valued C expression for which rtl will be 24764 generated to add it to the exception handler address before it is 24765 searched in the exception handling tables, and to subtract it 24766 again from the address before using it to return to the exception 24767 handler. 24768 24769 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 24770 This macro chooses the encoding of pointers embedded in the 24771 exception handling sections. If at all possible, this should be 24772 defined such that the exception handling section will not require 24773 dynamic relocations, and so may be read-only. 24774 24775 CODE is 0 for data, 1 for code labels, 2 for function pointers. 24776 GLOBAL is true if the symbol may be affected by dynamic 24777 relocations. The macro should return a combination of the 24778 `DW_EH_PE_*' defines as found in `dwarf2.h'. 24779 24780 If this macro is not defined, pointers will not be encoded but 24781 represented directly. 24782 24783 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 24784 ADDR, DONE) 24785 This macro allows the target to emit whatever special magic is 24786 required to represent the encoding chosen by 24787 `ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 24788 pc-relative and indirect encodings; this must be defined if the 24789 target uses text-relative or data-relative encodings. 24790 24791 This is a C statement that branches to DONE if the format was 24792 handled. ENCODING is the format chosen, SIZE is the number of 24793 bytes that the format occupies, ADDR is the `SYMBOL_REF' to be 24794 emitted. 24795 24796 -- Macro: MD_UNWIND_SUPPORT 24797 A string specifying a file to be #include'd in unwind-dw2.c. The 24798 file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'. 24799 24800 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 24801 This macro allows the target to add CPU and operating system 24802 specific code to the call-frame unwinder for use when there is no 24803 unwind data available. The most common reason to implement this 24804 macro is to unwind through signal frames. 24805 24806 This macro is called from `uw_frame_state_for' in `unwind-dw2.c', 24807 `unwind-dw2-xtensa.c' and `unwind-ia64.c'. CONTEXT is an 24808 `_Unwind_Context'; FS is an `_Unwind_FrameState'. Examine 24809 `context->ra' for the address of the code being executed and 24810 `context->cfa' for the stack pointer value. If the frame can be 24811 decoded, the register save addresses should be updated in FS and 24812 the macro should evaluate to `_URC_NO_REASON'. If the frame 24813 cannot be decoded, the macro should evaluate to 24814 `_URC_END_OF_STACK'. 24815 24816 For proper signal handling in Java this macro is accompanied by 24817 `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h' 24818 headers. 24819 24820 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 24821 This macro allows the target to add operating system specific code 24822 to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding 24823 directive, usually used for signal or interrupt frames. 24824 24825 This macro is called from `uw_update_context' in `unwind-ia64.c'. 24826 CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'. 24827 Examine `fs->unwabi' for the abi and context in the `.unwabi' 24828 directive. If the `.unwabi' directive can be handled, the 24829 register save addresses should be updated in FS. 24830 24831 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 24832 A C expression that evaluates to true if the target requires unwind 24833 info to be given comdat linkage. Define it to be `1' if comdat 24834 linkage is necessary. The default is `0'. 24835 24836 24837 File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 24838 24839 15.10.3 Specifying How Stack Checking is Done 24840 --------------------------------------------- 24841 24842 GCC will check that stack references are within the boundaries of the 24843 stack, if the `-fstack-check' is specified, in one of three ways: 24844 24845 1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC 24846 will assume that you have arranged for stack checking to be done at 24847 appropriate places in the configuration files, e.g., in 24848 `TARGET_ASM_FUNCTION_PROLOGUE'. GCC will do not other special 24849 processing. 24850 24851 2. If `STACK_CHECK_BUILTIN' is zero and you defined a named pattern 24852 called `check_stack' in your `md' file, GCC will call that pattern 24853 with one argument which is the address to compare the stack value 24854 against. You must arrange for this pattern to report an error if 24855 the stack pointer is out of range. 24856 24857 3. If neither of the above are true, GCC will generate code to 24858 periodically "probe" the stack pointer using the values of the 24859 macros defined below. 24860 24861 Normally, you will use the default values of these macros, so GCC will 24862 use the third approach. 24863 24864 -- Macro: STACK_CHECK_BUILTIN 24865 A nonzero value if stack checking is done by the configuration 24866 files in a machine-dependent manner. You should define this macro 24867 if stack checking is require by the ABI of your machine or if you 24868 would like to have to stack checking in some more efficient way 24869 than GCC's portable approach. The default value of this macro is 24870 zero. 24871 24872 -- Macro: STACK_CHECK_PROBE_INTERVAL 24873 An integer representing the interval at which GCC must generate 24874 stack probe instructions. You will normally define this macro to 24875 be no larger than the size of the "guard pages" at the end of a 24876 stack area. The default value of 4096 is suitable for most 24877 systems. 24878 24879 -- Macro: STACK_CHECK_PROBE_LOAD 24880 A integer which is nonzero if GCC should perform the stack probe 24881 as a load instruction and zero if GCC should use a store 24882 instruction. The default is zero, which is the most efficient 24883 choice on most systems. 24884 24885 -- Macro: STACK_CHECK_PROTECT 24886 The number of bytes of stack needed to recover from a stack 24887 overflow, for languages where such a recovery is supported. The 24888 default value of 75 words should be adequate for most machines. 24889 24890 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 24891 The maximum size of a stack frame, in bytes. GCC will generate 24892 probe instructions in non-leaf functions to ensure at least this 24893 many bytes of stack are available. If a stack frame is larger 24894 than this size, stack checking will not be reliable and GCC will 24895 issue a warning. The default is chosen so that GCC only generates 24896 one instruction on most systems. You should normally not change 24897 the default value of this macro. 24898 24899 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 24900 GCC uses this value to generate the above warning message. It 24901 represents the amount of fixed frame used by a function, not 24902 including space for any callee-saved registers, temporaries and 24903 user variables. You need only specify an upper bound for this 24904 amount and will normally use the default of four words. 24905 24906 -- Macro: STACK_CHECK_MAX_VAR_SIZE 24907 The maximum size, in bytes, of an object that GCC will place in the 24908 fixed area of the stack frame when the user specifies 24909 `-fstack-check'. GCC computed the default from the values of the 24910 above macros and you will normally not need to override that 24911 default. 24912 24913 24914 File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 24915 24916 15.10.4 Registers That Address the Stack Frame 24917 ---------------------------------------------- 24918 24919 This discusses registers that address the stack frame. 24920 24921 -- Macro: STACK_POINTER_REGNUM 24922 The register number of the stack pointer register, which must also 24923 be a fixed register according to `FIXED_REGISTERS'. On most 24924 machines, the hardware determines which register this is. 24925 24926 -- Macro: FRAME_POINTER_REGNUM 24927 The register number of the frame pointer register, which is used to 24928 access automatic variables in the stack frame. On some machines, 24929 the hardware determines which register this is. On other 24930 machines, you can choose any register you wish for this purpose. 24931 24932 -- Macro: HARD_FRAME_POINTER_REGNUM 24933 On some machines the offset between the frame pointer and starting 24934 offset of the automatic variables is not known until after register 24935 allocation has been done (for example, because the saved registers 24936 are between these two locations). On those machines, define 24937 `FRAME_POINTER_REGNUM' the number of a special, fixed register to 24938 be used internally until the offset is known, and define 24939 `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 24940 used for the frame pointer. 24941 24942 You should define this macro only in the very rare circumstances 24943 when it is not possible to calculate the offset between the frame 24944 pointer and the automatic variables until after register 24945 allocation has been completed. When this macro is defined, you 24946 must also indicate in your definition of `ELIMINABLE_REGS' how to 24947 eliminate `FRAME_POINTER_REGNUM' into either 24948 `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'. 24949 24950 Do not define this macro if it would be the same as 24951 `FRAME_POINTER_REGNUM'. 24952 24953 -- Macro: ARG_POINTER_REGNUM 24954 The register number of the arg pointer register, which is used to 24955 access the function's argument list. On some machines, this is 24956 the same as the frame pointer register. On some machines, the 24957 hardware determines which register this is. On other machines, 24958 you can choose any register you wish for this purpose. If this is 24959 not the same register as the frame pointer register, then you must 24960 mark it as a fixed register according to `FIXED_REGISTERS', or 24961 arrange to be able to eliminate it (*note Elimination::). 24962 24963 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 24964 The register number of the return address pointer register, which 24965 is used to access the current function's return address from the 24966 stack. On some machines, the return address is not at a fixed 24967 offset from the frame pointer or stack pointer or argument 24968 pointer. This register can be defined to point to the return 24969 address on the stack, and then be converted by `ELIMINABLE_REGS' 24970 into either the frame pointer or stack pointer. 24971 24972 Do not define this macro unless there is no other way to get the 24973 return address from the stack. 24974 24975 -- Macro: STATIC_CHAIN_REGNUM 24976 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 24977 Register numbers used for passing a function's static chain 24978 pointer. If register windows are used, the register number as 24979 seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM', 24980 while the register number as seen by the calling function is 24981 `STATIC_CHAIN_REGNUM'. If these registers are the same, 24982 `STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 24983 24984 The static chain register need not be a fixed register. 24985 24986 If the static chain is passed in memory, these macros should not be 24987 defined; instead, the next two macros should be defined. 24988 24989 -- Macro: STATIC_CHAIN 24990 -- Macro: STATIC_CHAIN_INCOMING 24991 If the static chain is passed in memory, these macros provide rtx 24992 giving `mem' expressions that denote where they are stored. 24993 `STATIC_CHAIN' and `STATIC_CHAIN_INCOMING' give the locations as 24994 seen by the calling and called functions, respectively. Often the 24995 former will be at an offset from the stack pointer and the latter 24996 at an offset from the frame pointer. 24997 24998 The variables `stack_pointer_rtx', `frame_pointer_rtx', and 24999 `arg_pointer_rtx' will have been initialized prior to the use of 25000 these macros and should be used to refer to those items. 25001 25002 If the static chain is passed in a register, the two previous 25003 macros should be defined instead. 25004 25005 -- Macro: DWARF_FRAME_REGISTERS 25006 This macro specifies the maximum number of hard registers that can 25007 be saved in a call frame. This is used to size data structures 25008 used in DWARF2 exception handling. 25009 25010 Prior to GCC 3.0, this macro was needed in order to establish a 25011 stable exception handling ABI in the face of adding new hard 25012 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 25013 insulated from changes in the number of hard registers. 25014 Nevertheless, this macro can still be used to reduce the runtime 25015 memory requirements of the exception handling routines, which can 25016 be substantial if the ISA contains a lot of registers that are not 25017 call-saved. 25018 25019 If this macro is not defined, it defaults to 25020 `FIRST_PSEUDO_REGISTER'. 25021 25022 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 25023 This macro is similar to `DWARF_FRAME_REGISTERS', but is provided 25024 for backward compatibility in pre GCC 3.0 compiled code. 25025 25026 If this macro is not defined, it defaults to 25027 `DWARF_FRAME_REGISTERS'. 25028 25029 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 25030 Define this macro if the target's representation for dwarf 25031 registers is different than the internal representation for unwind 25032 column. Given a dwarf register, this macro should return the 25033 internal unwind column number to use instead. 25034 25035 See the PowerPC's SPE target for an example. 25036 25037 -- Macro: DWARF_FRAME_REGNUM (REGNO) 25038 Define this macro if the target's representation for dwarf 25039 registers used in .eh_frame or .debug_frame is different from that 25040 used in other debug info sections. Given a GCC hard register 25041 number, this macro should return the .eh_frame register number. 25042 The default is `DBX_REGISTER_NUMBER (REGNO)'. 25043 25044 25045 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 25046 Define this macro to map register numbers held in the call frame 25047 info that GCC has collected using `DWARF_FRAME_REGNUM' to those 25048 that should be output in .debug_frame (`FOR_EH' is zero) and 25049 .eh_frame (`FOR_EH' is nonzero). The default is to return `REGNO'. 25050 25051 25052 25053 File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 25054 25055 15.10.5 Eliminating Frame Pointer and Arg Pointer 25056 ------------------------------------------------- 25057 25058 This is about eliminating the frame pointer and arg pointer. 25059 25060 -- Macro: FRAME_POINTER_REQUIRED 25061 A C expression which is nonzero if a function must have and use a 25062 frame pointer. This expression is evaluated in the reload pass. 25063 If its value is nonzero the function will have a frame pointer. 25064 25065 The expression can in principle examine the current function and 25066 decide according to the facts, but on most machines the constant 0 25067 or the constant 1 suffices. Use 0 when the machine allows code to 25068 be generated with no frame pointer, and doing so saves some time 25069 or space. Use 1 when there is no possible advantage to avoiding a 25070 frame pointer. 25071 25072 In certain cases, the compiler does not know how to produce valid 25073 code without a frame pointer. The compiler recognizes those cases 25074 and automatically gives the function a frame pointer regardless of 25075 what `FRAME_POINTER_REQUIRED' says. You don't need to worry about 25076 them. 25077 25078 In a function that does not require a frame pointer, the frame 25079 pointer register can be allocated for ordinary usage, unless you 25080 mark it as a fixed register. See `FIXED_REGISTERS' for more 25081 information. 25082 25083 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 25084 A C statement to store in the variable DEPTH-VAR the difference 25085 between the frame pointer and the stack pointer values immediately 25086 after the function prologue. The value would be computed from 25087 information such as the result of `get_frame_size ()' and the 25088 tables of registers `regs_ever_live' and `call_used_regs'. 25089 25090 If `ELIMINABLE_REGS' is defined, this macro will be not be used and 25091 need not be defined. Otherwise, it must be defined even if 25092 `FRAME_POINTER_REQUIRED' is defined to always be true; in that 25093 case, you may set DEPTH-VAR to anything. 25094 25095 -- Macro: ELIMINABLE_REGS 25096 If defined, this macro specifies a table of register pairs used to 25097 eliminate unneeded registers that point into the stack frame. If 25098 it is not defined, the only elimination attempted by the compiler 25099 is to replace references to the frame pointer with references to 25100 the stack pointer. 25101 25102 The definition of this macro is a list of structure 25103 initializations, each of which specifies an original and 25104 replacement register. 25105 25106 On some machines, the position of the argument pointer is not 25107 known until the compilation is completed. In such a case, a 25108 separate hard register must be used for the argument pointer. 25109 This register can be eliminated by replacing it with either the 25110 frame pointer or the argument pointer, depending on whether or not 25111 the frame pointer has been eliminated. 25112 25113 In this case, you might specify: 25114 #define ELIMINABLE_REGS \ 25115 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 25116 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 25117 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 25118 25119 Note that the elimination of the argument pointer with the stack 25120 pointer is specified first since that is the preferred elimination. 25121 25122 -- Macro: CAN_ELIMINATE (FROM-REG, TO-REG) 25123 A C expression that returns nonzero if the compiler is allowed to 25124 try to replace register number FROM-REG with register number 25125 TO-REG. This macro need only be defined if `ELIMINABLE_REGS' is 25126 defined, and will usually be the constant 1, since most of the 25127 cases preventing register elimination are things that the compiler 25128 already knows about. 25129 25130 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 25131 This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It 25132 specifies the initial difference between the specified pair of 25133 registers. This macro must be defined if `ELIMINABLE_REGS' is 25134 defined. 25135 25136 25137 File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 25138 25139 15.10.6 Passing Function Arguments on the Stack 25140 ----------------------------------------------- 25141 25142 The macros in this section control how arguments are passed on the 25143 stack. See the following section for other macros that control passing 25144 certain arguments in registers. 25145 25146 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (tree FNTYPE) 25147 This target hook returns `true' if an argument declared in a 25148 prototype as an integral type smaller than `int' should actually be 25149 passed as an `int'. In addition to avoiding errors in certain 25150 cases of mismatch, it also makes for better code on certain 25151 machines. The default is to not promote prototypes. 25152 25153 -- Macro: PUSH_ARGS 25154 A C expression. If nonzero, push insns will be used to pass 25155 outgoing arguments. If the target machine does not have a push 25156 instruction, set it to zero. That directs GCC to use an alternate 25157 strategy: to allocate the entire argument block and then store the 25158 arguments into it. When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING' 25159 must be defined too. 25160 25161 -- Macro: PUSH_ARGS_REVERSED 25162 A C expression. If nonzero, function arguments will be evaluated 25163 from last to first, rather than from first to last. If this macro 25164 is not defined, it defaults to `PUSH_ARGS' on targets where the 25165 stack and args grow in opposite directions, and 0 otherwise. 25166 25167 -- Macro: PUSH_ROUNDING (NPUSHED) 25168 A C expression that is the number of bytes actually pushed onto the 25169 stack when an instruction attempts to push NPUSHED bytes. 25170 25171 On some machines, the definition 25172 25173 #define PUSH_ROUNDING(BYTES) (BYTES) 25174 25175 will suffice. But on other machines, instructions that appear to 25176 push one byte actually push two bytes in an attempt to maintain 25177 alignment. Then the definition should be 25178 25179 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 25180 25181 -- Macro: ACCUMULATE_OUTGOING_ARGS 25182 A C expression. If nonzero, the maximum amount of space required 25183 for outgoing arguments will be computed and placed into the 25184 variable `current_function_outgoing_args_size'. No space will be 25185 pushed onto the stack for each call; instead, the function 25186 prologue should increase the stack frame size by this amount. 25187 25188 Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not 25189 proper. 25190 25191 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 25192 Define this macro if functions should assume that stack space has 25193 been allocated for arguments even when their values are passed in 25194 registers. 25195 25196 The value of this macro is the size, in bytes, of the area 25197 reserved for arguments passed in registers for the function 25198 represented by FNDECL, which can be zero if GCC is calling a 25199 library function. 25200 25201 This space can be allocated by the caller, or be a part of the 25202 machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says 25203 which. 25204 25205 -- Macro: OUTGOING_REG_PARM_STACK_SPACE 25206 Define this to a nonzero value if it is the responsibility of the 25207 caller to allocate the area reserved for arguments passed in 25208 registers. 25209 25210 If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 25211 whether the space for these arguments counts in the value of 25212 `current_function_outgoing_args_size'. 25213 25214 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 25215 Define this macro if `REG_PARM_STACK_SPACE' is defined, but the 25216 stack parameters don't skip the area specified by it. 25217 25218 Normally, when a parameter is not passed in registers, it is 25219 placed on the stack beyond the `REG_PARM_STACK_SPACE' area. 25220 Defining this macro suppresses this behavior and causes the 25221 parameter to be passed on the stack in its natural location. 25222 25223 -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE) 25224 A C expression that should indicate the number of bytes of its own 25225 arguments that a function pops on returning, or 0 if the function 25226 pops no arguments and the caller must therefore pop them all after 25227 the function returns. 25228 25229 FUNDECL is a C variable whose value is a tree node that describes 25230 the function in question. Normally it is a node of type 25231 `FUNCTION_DECL' that describes the declaration of the function. 25232 From this you can obtain the `DECL_ATTRIBUTES' of the function. 25233 25234 FUNTYPE is a C variable whose value is a tree node that describes 25235 the function in question. Normally it is a node of type 25236 `FUNCTION_TYPE' that describes the data type of the function. 25237 From this it is possible to obtain the data types of the value and 25238 arguments (if known). 25239 25240 When a call to a library function is being considered, FUNDECL 25241 will contain an identifier node for the library function. Thus, if 25242 you need to distinguish among various library functions, you can 25243 do so by their names. Note that "library function" in this 25244 context means a function used to perform arithmetic, whose name is 25245 known specially in the compiler and was not mentioned in the C 25246 code being compiled. 25247 25248 STACK-SIZE is the number of bytes of arguments passed on the 25249 stack. If a variable number of bytes is passed, it is zero, and 25250 argument popping will always be the responsibility of the calling 25251 function. 25252 25253 On the VAX, all functions always pop their arguments, so the 25254 definition of this macro is STACK-SIZE. On the 68000, using the 25255 standard calling convention, no functions pop their arguments, so 25256 the value of the macro is always 0 in this case. But an 25257 alternative calling convention is available in which functions 25258 that take a fixed number of arguments pop them but other functions 25259 (such as `printf') pop nothing (the caller pops all). When this 25260 convention is in use, FUNTYPE is examined to determine whether a 25261 function takes a fixed number of arguments. 25262 25263 -- Macro: CALL_POPS_ARGS (CUM) 25264 A C expression that should indicate the number of bytes a call 25265 sequence pops off the stack. It is added to the value of 25266 `RETURN_POPS_ARGS' when compiling a function call. 25267 25268 CUM is the variable in which all arguments to the called function 25269 have been accumulated. 25270 25271 On certain architectures, such as the SH5, a call trampoline is 25272 used that pops certain registers off the stack, depending on the 25273 arguments that have been passed to the function. Since this is a 25274 property of the call site, not of the called function, 25275 `RETURN_POPS_ARGS' is not appropriate. 25276 25277 25278 File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 25279 25280 15.10.7 Passing Arguments in Registers 25281 -------------------------------------- 25282 25283 This section describes the macros which let you control how various 25284 types of arguments are passed in registers or how they are arranged in 25285 the stack. 25286 25287 -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED) 25288 A C expression that controls whether a function argument is passed 25289 in a register, and which register. 25290 25291 The arguments are CUM, which summarizes all the previous 25292 arguments; MODE, the machine mode of the argument; TYPE, the data 25293 type of the argument as a tree node or 0 if that is not known 25294 (which happens for C support library functions); and NAMED, which 25295 is 1 for an ordinary argument and 0 for nameless arguments that 25296 correspond to `...' in the called function's prototype. TYPE can 25297 be an incomplete type if a syntax error has previously occurred. 25298 25299 The value of the expression is usually either a `reg' RTX for the 25300 hard register in which to pass the argument, or zero to pass the 25301 argument on the stack. 25302 25303 For machines like the VAX and 68000, where normally all arguments 25304 are pushed, zero suffices as a definition. 25305 25306 The value of the expression can also be a `parallel' RTX. This is 25307 used when an argument is passed in multiple locations. The mode 25308 of the `parallel' should be the mode of the entire argument. The 25309 `parallel' holds any number of `expr_list' pairs; each one 25310 describes where part of the argument is passed. In each 25311 `expr_list' the first operand must be a `reg' RTX for the hard 25312 register in which to pass this part of the argument, and the mode 25313 of the register RTX indicates how large this part of the argument 25314 is. The second operand of the `expr_list' is a `const_int' which 25315 gives the offset in bytes into the entire argument of where this 25316 part starts. As a special exception the first `expr_list' in the 25317 `parallel' RTX may have a first operand of zero. This indicates 25318 that the entire argument is also stored on the stack. 25319 25320 The last time this macro is called, it is called with `MODE == 25321 VOIDmode', and its result is passed to the `call' or `call_value' 25322 pattern as operands 2 and 3 respectively. 25323 25324 The usual way to make the ISO library `stdarg.h' work on a machine 25325 where some arguments are usually passed in registers, is to cause 25326 nameless arguments to be passed on the stack instead. This is done 25327 by making `FUNCTION_ARG' return 0 whenever NAMED is 0. 25328 25329 You may use the hook `targetm.calls.must_pass_in_stack' in the 25330 definition of this macro to determine if this argument is of a 25331 type that must be passed in the stack. If `REG_PARM_STACK_SPACE' 25332 is not defined and `FUNCTION_ARG' returns nonzero for such an 25333 argument, the compiler will abort. If `REG_PARM_STACK_SPACE' is 25334 defined, the argument will be computed in the stack and then 25335 loaded into a register. 25336 25337 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode 25338 MODE, tree TYPE) 25339 This target hook should return `true' if we should not pass TYPE 25340 solely in registers. The file `expr.h' defines a definition that 25341 is usually appropriate, refer to `expr.h' for additional 25342 documentation. 25343 25344 -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED) 25345 Define this macro if the target machine has "register windows", so 25346 that the register in which a function sees an arguments is not 25347 necessarily the same as the one in which the caller passed the 25348 argument. 25349 25350 For such machines, `FUNCTION_ARG' computes the register in which 25351 the caller passes the value, and `FUNCTION_INCOMING_ARG' should be 25352 defined in a similar fashion to tell the function being called 25353 where the arguments will arrive. 25354 25355 If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves 25356 both purposes. 25357 25358 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM, 25359 enum machine_mode MODE, tree TYPE, bool NAMED) 25360 This target hook returns the number of bytes at the beginning of an 25361 argument that must be put in registers. The value must be zero for 25362 arguments that are passed entirely in registers or that are 25363 entirely pushed on the stack. 25364 25365 On some machines, certain arguments must be passed partially in 25366 registers and partially in memory. On these machines, typically 25367 the first few words of arguments are passed in registers, and the 25368 rest on the stack. If a multi-word argument (a `double' or a 25369 structure) crosses that boundary, its first few words must be 25370 passed in registers and the rest must be pushed. This macro tells 25371 the compiler when this occurs, and how many bytes should go in 25372 registers. 25373 25374 `FUNCTION_ARG' for these arguments should return the first 25375 register to be used by the caller for this argument; likewise 25376 `FUNCTION_INCOMING_ARG', for the called function. 25377 25378 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM, 25379 enum machine_mode MODE, tree TYPE, bool NAMED) 25380 This target hook should return `true' if an argument at the 25381 position indicated by CUM should be passed by reference. This 25382 predicate is queried after target independent reasons for being 25383 passed by reference, such as `TREE_ADDRESSABLE (type)'. 25384 25385 If the hook returns true, a copy of that argument is made in 25386 memory and a pointer to the argument is passed instead of the 25387 argument itself. The pointer is passed in whatever way is 25388 appropriate for passing a pointer to that type. 25389 25390 -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum 25391 machine_mode MODE, tree TYPE, bool NAMED) 25392 The function argument described by the parameters to this hook is 25393 known to be passed by reference. The hook should return true if 25394 the function argument should be copied by the callee instead of 25395 copied by the caller. 25396 25397 For any argument for which the hook returns true, if it can be 25398 determined that the argument is not modified, then a copy need not 25399 be generated. 25400 25401 The default version of this hook always returns false. 25402 25403 -- Macro: CUMULATIVE_ARGS 25404 A C type for declaring a variable that is used as the first 25405 argument of `FUNCTION_ARG' and other related values. For some 25406 target machines, the type `int' suffices and can hold the number 25407 of bytes of argument so far. 25408 25409 There is no need to record in `CUMULATIVE_ARGS' anything about the 25410 arguments that have been passed on the stack. The compiler has 25411 other variables to keep track of that. For target machines on 25412 which all arguments are passed on the stack, there is no need to 25413 store anything in `CUMULATIVE_ARGS'; however, the data structure 25414 must exist and should not be empty, so use `int'. 25415 25416 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 25417 N_NAMED_ARGS) 25418 A C statement (sans semicolon) for initializing the variable CUM 25419 for the state at the beginning of the argument list. The variable 25420 has type `CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 25421 for the data type of the function which will receive the args, or 25422 0 if the args are to a compiler support library function. For 25423 direct calls that are not libcalls, FNDECL contain the declaration 25424 node of the function. FNDECL is also set when 25425 `INIT_CUMULATIVE_ARGS' is used to find arguments for the function 25426 being compiled. N_NAMED_ARGS is set to the number of named 25427 arguments, including a structure return address if it is passed as 25428 a parameter, when making a call. When processing incoming 25429 arguments, N_NAMED_ARGS is set to -1. 25430 25431 When processing a call to a compiler support library function, 25432 LIBNAME identifies which one. It is a `symbol_ref' rtx which 25433 contains the name of the function, as a string. LIBNAME is 0 when 25434 an ordinary C function call is being processed. Thus, each time 25435 this macro is called, either LIBNAME or FNTYPE is nonzero, but 25436 never both of them at once. 25437 25438 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 25439 Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, 25440 it gets a `MODE' argument instead of FNTYPE, that would be `NULL'. 25441 INDIRECT would always be zero, too. If this macro is not 25442 defined, `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is 25443 used instead. 25444 25445 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 25446 Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 25447 finding the arguments for the function being compiled. If this 25448 macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead. 25449 25450 The value passed for LIBNAME is always 0, since library routines 25451 with special calling conventions are never compiled with GCC. The 25452 argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'. 25453 25454 -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED) 25455 A C statement (sans semicolon) to update the summarizer variable 25456 CUM to advance past an argument in the argument list. The values 25457 MODE, TYPE and NAMED describe that argument. Once this is done, 25458 the variable CUM is suitable for analyzing the _following_ 25459 argument with `FUNCTION_ARG', etc. 25460 25461 This macro need not do anything if the argument in question was 25462 passed on the stack. The compiler knows how to track the amount 25463 of stack space used for arguments without any special help. 25464 25465 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 25466 If defined, a C expression which determines whether, and in which 25467 direction, to pad out an argument with extra space. The value 25468 should be of type `enum direction': either `upward' to pad above 25469 the argument, `downward' to pad below, or `none' to inhibit 25470 padding. 25471 25472 The _amount_ of padding is always just enough to reach the next 25473 multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control 25474 it. 25475 25476 This macro has a default definition which is right for most 25477 systems. For little-endian machines, the default is to pad 25478 upward. For big-endian machines, the default is to pad downward 25479 for an argument of constant size shorter than an `int', and upward 25480 otherwise. 25481 25482 -- Macro: PAD_VARARGS_DOWN 25483 If defined, a C expression which determines whether the default 25484 implementation of va_arg will attempt to pad down before reading 25485 the next argument, if that argument is smaller than its aligned 25486 space as controlled by `PARM_BOUNDARY'. If this macro is not 25487 defined, all such arguments are padded down if `BYTES_BIG_ENDIAN' 25488 is true. 25489 25490 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 25491 Specify padding for the last element of a block move between 25492 registers and memory. FIRST is nonzero if this is the only 25493 element. Defining this macro allows better control of register 25494 function parameters on big-endian machines, without using 25495 `PARALLEL' rtl. In particular, `MUST_PASS_IN_STACK' need not test 25496 padding and mode of types in registers, as there is no longer a 25497 "wrong" part of a register; For example, a three byte aggregate 25498 may be passed in the high part of a register if so required. 25499 25500 -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE) 25501 If defined, a C expression that gives the alignment boundary, in 25502 bits, of an argument with the specified mode and type. If it is 25503 not defined, `PARM_BOUNDARY' is used for all arguments. 25504 25505 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 25506 A C expression that is nonzero if REGNO is the number of a hard 25507 register in which function arguments are sometimes passed. This 25508 does _not_ include implicit arguments such as the static chain and 25509 the structure-value address. On many machines, no registers can be 25510 used for this purpose since all function arguments are pushed on 25511 the stack. 25512 25513 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (tree TYPE) 25514 This hook should return true if parameter of type TYPE are passed 25515 as two scalar parameters. By default, GCC will attempt to pack 25516 complex arguments into the target's word size. Some ABIs require 25517 complex arguments to be split and treated as their individual 25518 components. For example, on AIX64, complex floats should be 25519 passed in a pair of floating point registers, even though a 25520 complex float would fit in one 64-bit floating point register. 25521 25522 The default value of this hook is `NULL', which is treated as 25523 always false. 25524 25525 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 25526 This hook returns a type node for `va_list' for the target. The 25527 default version of the hook returns `void*'. 25528 25529 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 25530 TYPE, tree *PRE_P, tree *POST_P) 25531 This hook performs target-specific gimplification of 25532 `VA_ARG_EXPR'. The first two parameters correspond to the 25533 arguments to `va_arg'; the latter two are as in 25534 `gimplify.c:gimplify_expr'. 25535 25536 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE) 25537 Define this to return nonzero if the port can handle pointers with 25538 machine mode MODE. The default version of this hook returns true 25539 for both `ptr_mode' and `Pmode'. 25540 25541 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode 25542 MODE) 25543 Define this to return nonzero if the port is prepared to handle 25544 insns involving scalar mode MODE. For a scalar mode to be 25545 considered supported, all the basic arithmetic and comparisons 25546 must work. 25547 25548 The default version of this hook returns true for any mode 25549 required to handle the basic C types (as defined by the port). 25550 Included here are the double-word arithmetic supported by the code 25551 in `optabs.c'. 25552 25553 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode 25554 MODE) 25555 Define this to return nonzero if the port is prepared to handle 25556 insns involving vector mode MODE. At the very least, it must have 25557 move patterns for this mode. 25558 25559 25560 File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 25561 25562 15.10.8 How Scalar Function Values Are Returned 25563 ----------------------------------------------- 25564 25565 This section discusses the macros that control returning scalars as 25566 values--values that can fit in registers. 25567 25568 -- Target Hook: rtx TARGET_FUNCTION_VALUE (tree RET_TYPE, tree 25569 FN_DECL_OR_TYPE, bool OUTGOING) 25570 Define this to return an RTX representing the place where a 25571 function returns or receives a value of data type RET_TYPE, a tree 25572 node node representing a data type. FN_DECL_OR_TYPE is a tree node 25573 representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function 25574 being called. If OUTGOING is false, the hook should compute the 25575 register in which the caller will see the return value. 25576 Otherwise, the hook should return an RTX representing the place 25577 where a function returns a value. 25578 25579 On many machines, only `TYPE_MODE (RET_TYPE)' is relevant. 25580 (Actually, on most machines, scalar values are returned in the same 25581 place regardless of mode.) The value of the expression is usually 25582 a `reg' RTX for the hard register where the return value is stored. 25583 The value can also be a `parallel' RTX, if the return value is in 25584 multiple places. See `FUNCTION_ARG' for an explanation of the 25585 `parallel' form. Note that the callee will populate every 25586 location specified in the `parallel', but if the first element of 25587 the `parallel' contains the whole return value, callers will use 25588 that element as the canonical location and ignore the others. The 25589 m68k port uses this type of `parallel' to return pointers in both 25590 `%a0' (the canonical location) and `%d0'. 25591 25592 If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 25593 the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is 25594 a scalar type. 25595 25596 If the precise function being called is known, FUNC is a tree node 25597 (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 25598 makes it possible to use a different value-returning convention 25599 for specific functions when all their calls are known. 25600 25601 Some target machines have "register windows" so that the register 25602 in which a function returns its value is not the same as the one 25603 in which the caller sees the value. For such machines, you should 25604 return different RTX depending on OUTGOING. 25605 25606 `TARGET_FUNCTION_VALUE' is not used for return values with 25607 aggregate data types, because these are returned in another way. 25608 See `TARGET_STRUCT_VALUE_RTX' and related macros, below. 25609 25610 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 25611 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a 25612 new target instead. 25613 25614 -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC) 25615 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a 25616 new target instead. 25617 25618 -- Macro: LIBCALL_VALUE (MODE) 25619 A C expression to create an RTX representing the place where a 25620 library function returns a value of mode MODE. If the precise 25621 function being called is known, FUNC is a tree node 25622 (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 25623 makes it possible to use a different value-returning convention 25624 for specific functions when all their calls are known. 25625 25626 Note that "library function" in this context means a compiler 25627 support routine, used to perform arithmetic, whose name is known 25628 specially by the compiler and was not mentioned in the C code being 25629 compiled. 25630 25631 The definition of `LIBRARY_VALUE' need not be concerned aggregate 25632 data types, because none of the library functions returns such 25633 types. 25634 25635 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 25636 A C expression that is nonzero if REGNO is the number of a hard 25637 register in which the values of called function may come back. 25638 25639 A register whose use for returning values is limited to serving as 25640 the second of a pair (for a value of type `double', say) need not 25641 be recognized by this macro. So for most machines, this definition 25642 suffices: 25643 25644 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 25645 25646 If the machine has register windows, so that the caller and the 25647 called function use different registers for the return value, this 25648 macro should recognize only the caller's register numbers. 25649 25650 -- Macro: APPLY_RESULT_SIZE 25651 Define this macro if `untyped_call' and `untyped_return' need more 25652 space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and 25653 restoring an arbitrary return value. 25654 25655 -- Target Hook: bool TARGET_RETURN_IN_MSB (tree TYPE) 25656 This hook should return true if values of type TYPE are returned 25657 at the most significant end of a register (in other words, if they 25658 are padded at the least significant end). You can assume that TYPE 25659 is returned in a register; the caller is required to check this. 25660 25661 Note that the register provided by `TARGET_FUNCTION_VALUE' must be 25662 able to hold the complete return value. For example, if a 1-, 2- 25663 or 3-byte structure is returned at the most significant end of a 25664 4-byte register, `TARGET_FUNCTION_VALUE' should provide an 25665 `SImode' rtx. 25666 25667 25668 File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 25669 25670 15.10.9 How Large Values Are Returned 25671 ------------------------------------- 25672 25673 When a function value's mode is `BLKmode' (and in some other cases), 25674 the value is not returned according to `TARGET_FUNCTION_VALUE' (*note 25675 Scalar Return::). Instead, the caller passes the address of a block of 25676 memory in which the value should be stored. This address is called the 25677 "structure value address". 25678 25679 This section describes how to control returning structure values in 25680 memory. 25681 25682 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (tree TYPE, tree FNTYPE) 25683 This target hook should return a nonzero value to say to return the 25684 function value in memory, just as large structures are always 25685 returned. Here TYPE will be the data type of the value, and FNTYPE 25686 will be the type of the function doing the returning, or `NULL' for 25687 libcalls. 25688 25689 Note that values of mode `BLKmode' must be explicitly handled by 25690 this function. Also, the option `-fpcc-struct-return' takes 25691 effect regardless of this macro. On most systems, it is possible 25692 to leave the hook undefined; this causes a default definition to 25693 be used, whose value is the constant 1 for `BLKmode' values, and 0 25694 otherwise. 25695 25696 Do not use this hook to indicate that structures and unions should 25697 always be returned in memory. You should instead use 25698 `DEFAULT_PCC_STRUCT_RETURN' to indicate this. 25699 25700 -- Macro: DEFAULT_PCC_STRUCT_RETURN 25701 Define this macro to be 1 if all structure and union return values 25702 must be in memory. Since this results in slower code, this should 25703 be defined only if needed for compatibility with other compilers 25704 or with an ABI. If you define this macro to be 0, then the 25705 conventions used for structure and union return values are decided 25706 by the `TARGET_RETURN_IN_MEMORY' target hook. 25707 25708 If not defined, this defaults to the value 1. 25709 25710 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 25711 This target hook should return the location of the structure value 25712 address (normally a `mem' or `reg'), or 0 if the address is passed 25713 as an "invisible" first argument. Note that FNDECL may be `NULL', 25714 for libcalls. You do not need to define this target hook if the 25715 address is always passed as an "invisible" first argument. 25716 25717 On some architectures the place where the structure value address 25718 is found by the called function is not the same place that the 25719 caller put it. This can be due to register windows, or it could 25720 be because the function prologue moves it to a different place. 25721 INCOMING is `1' or `2' when the location is needed in the context 25722 of the called function, and `0' in the context of the caller. 25723 25724 If INCOMING is nonzero and the address is to be found on the 25725 stack, return a `mem' which refers to the frame pointer. If 25726 INCOMING is `2', the result is being used to fetch the structure 25727 value address at the beginning of a function. If you need to emit 25728 adjusting code, you should do it at this point. 25729 25730 -- Macro: PCC_STATIC_STRUCT_RETURN 25731 Define this macro if the usual system convention on the target 25732 machine for returning structures and unions is for the called 25733 function to return the address of a static variable containing the 25734 value. 25735 25736 Do not define this if the usual system convention is for the 25737 caller to pass an address to the subroutine. 25738 25739 This macro has effect in `-fpcc-struct-return' mode, but it does 25740 nothing when you use `-freg-struct-return' mode. 25741 25742 25743 File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 25744 25745 15.10.10 Caller-Saves Register Allocation 25746 ----------------------------------------- 25747 25748 If you enable it, GCC can save registers around function calls. This 25749 makes it possible to use call-clobbered registers to hold variables that 25750 must live across calls. 25751 25752 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS) 25753 A C expression to determine whether it is worthwhile to consider 25754 placing a pseudo-register in a call-clobbered hard register and 25755 saving and restoring it around each function call. The expression 25756 should be 1 when this is worth doing, and 0 otherwise. 25757 25758 If you don't define this macro, a default is used which is good on 25759 most machines: `4 * CALLS < REFS'. 25760 25761 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 25762 A C expression specifying which mode is required for saving NREGS 25763 of a pseudo-register in call-clobbered hard register REGNO. If 25764 REGNO is unsuitable for caller save, `VOIDmode' should be 25765 returned. For most machines this macro need not be defined since 25766 GCC will select the smallest suitable mode. 25767 25768 25769 File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 25770 25771 15.10.11 Function Entry and Exit 25772 -------------------------------- 25773 25774 This section describes the macros that output function entry 25775 ("prologue") and exit ("epilogue") code. 25776 25777 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 25778 HOST_WIDE_INT SIZE) 25779 If defined, a function that outputs the assembler code for entry 25780 to a function. The prologue is responsible for setting up the 25781 stack frame, initializing the frame pointer register, saving 25782 registers that must be saved, and allocating SIZE additional bytes 25783 of storage for the local variables. SIZE is an integer. FILE is 25784 a stdio stream to which the assembler code should be output. 25785 25786 The label for the beginning of the function need not be output by 25787 this macro. That has already been done when the macro is run. 25788 25789 To determine which registers to save, the macro can refer to the 25790 array `regs_ever_live': element R is nonzero if hard register R is 25791 used anywhere within the function. This implies the function 25792 prologue should save register R, provided it is not one of the 25793 call-used registers. (`TARGET_ASM_FUNCTION_EPILOGUE' must 25794 likewise use `regs_ever_live'.) 25795 25796 On machines that have "register windows", the function entry code 25797 does not save on the stack the registers that are in the windows, 25798 even if they are supposed to be preserved by function calls; 25799 instead it takes appropriate steps to "push" the register stack, 25800 if any non-call-used registers are used in the function. 25801 25802 On machines where functions may or may not have frame-pointers, the 25803 function entry code must vary accordingly; it must set up the frame 25804 pointer if one is wanted, and not otherwise. To determine whether 25805 a frame pointer is in wanted, the macro can refer to the variable 25806 `frame_pointer_needed'. The variable's value will be 1 at run 25807 time in a function that needs a frame pointer. *Note 25808 Elimination::. 25809 25810 The function entry code is responsible for allocating any stack 25811 space required for the function. This stack space consists of the 25812 regions listed below. In most cases, these regions are allocated 25813 in the order listed, with the last listed region closest to the 25814 top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is 25815 defined, and the highest address if it is not defined). You can 25816 use a different order for a machine if doing so is more convenient 25817 or required for compatibility reasons. Except in cases where 25818 required by standard or by a debugger, there is no reason why the 25819 stack layout used by GCC need agree with that used by other 25820 compilers for a machine. 25821 25822 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 25823 If defined, a function that outputs assembler code at the end of a 25824 prologue. This should be used when the function prologue is being 25825 emitted as RTL, and you have some extra assembler that needs to be 25826 emitted. *Note prologue instruction pattern::. 25827 25828 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 25829 If defined, a function that outputs assembler code at the start of 25830 an epilogue. This should be used when the function epilogue is 25831 being emitted as RTL, and you have some extra assembler that needs 25832 to be emitted. *Note epilogue instruction pattern::. 25833 25834 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 25835 HOST_WIDE_INT SIZE) 25836 If defined, a function that outputs the assembler code for exit 25837 from a function. The epilogue is responsible for restoring the 25838 saved registers and stack pointer to their values when the 25839 function was called, and returning control to the caller. This 25840 macro takes the same arguments as the macro 25841 `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are 25842 determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the 25843 same way. 25844 25845 On some machines, there is a single instruction that does all the 25846 work of returning from the function. On these machines, give that 25847 instruction the name `return' and do not define the macro 25848 `TARGET_ASM_FUNCTION_EPILOGUE' at all. 25849 25850 Do not define a pattern named `return' if you want the 25851 `TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 25852 switches to control whether return instructions or epilogues are 25853 used, define a `return' pattern with a validity condition that 25854 tests the target switches appropriately. If the `return' 25855 pattern's validity condition is false, epilogues will be used. 25856 25857 On machines where functions may or may not have frame-pointers, the 25858 function exit code must vary accordingly. Sometimes the code for 25859 these two cases is completely different. To determine whether a 25860 frame pointer is wanted, the macro can refer to the variable 25861 `frame_pointer_needed'. The variable's value will be 1 when 25862 compiling a function that needs a frame pointer. 25863 25864 Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and 25865 `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 25866 The C variable `current_function_is_leaf' is nonzero for such a 25867 function. *Note Leaf Functions::. 25868 25869 On some machines, some functions pop their arguments on exit while 25870 others leave that for the caller to do. For example, the 68020 25871 when given `-mrtd' pops arguments in functions that take a fixed 25872 number of arguments. 25873 25874 Your definition of the macro `RETURN_POPS_ARGS' decides which 25875 functions pop their own arguments. `TARGET_ASM_FUNCTION_EPILOGUE' 25876 needs to know what was decided. The variable that is called 25877 `current_function_pops_args' is the number of bytes of its 25878 arguments that a function should pop. *Note Scalar Return::. 25879 25880 * A region of `current_function_pretend_args_size' bytes of 25881 uninitialized space just underneath the first argument arriving on 25882 the stack. (This may not be at the very start of the allocated 25883 stack region if the calling sequence has pushed anything else 25884 since pushing the stack arguments. But usually, on such machines, 25885 nothing else has been pushed yet, because the function prologue 25886 itself does all the pushing.) This region is used on machines 25887 where an argument may be passed partly in registers and partly in 25888 memory, and, in some cases to support the features in `<stdarg.h>'. 25889 25890 * An area of memory used to save certain registers used by the 25891 function. The size of this area, which may also include space for 25892 such things as the return address and pointers to previous stack 25893 frames, is machine-specific and usually depends on which registers 25894 have been used in the function. Machines with register windows 25895 often do not require a save area. 25896 25897 * A region of at least SIZE bytes, possibly rounded up to an 25898 allocation boundary, to contain the local variables of the 25899 function. On some machines, this region and the save area may 25900 occur in the opposite order, with the save area closer to the top 25901 of the stack. 25902 25903 * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of 25904 `current_function_outgoing_args_size' bytes to be used for outgoing 25905 argument lists of the function. *Note Stack Arguments::. 25906 25907 -- Macro: EXIT_IGNORE_STACK 25908 Define this macro as a C expression that is nonzero if the return 25909 instruction or the function epilogue ignores the value of the stack 25910 pointer; in other words, if it is safe to delete an instruction to 25911 adjust the stack pointer before a return from the function. The 25912 default is 0. 25913 25914 Note that this macro's value is relevant only for functions for 25915 which frame pointers are maintained. It is never safe to delete a 25916 final stack adjustment in a function that has no frame pointer, 25917 and the compiler knows this regardless of `EXIT_IGNORE_STACK'. 25918 25919 -- Macro: EPILOGUE_USES (REGNO) 25920 Define this macro as a C expression that is nonzero for registers 25921 that are used by the epilogue or the `return' pattern. The stack 25922 and frame pointer registers are already assumed to be used as 25923 needed. 25924 25925 -- Macro: EH_USES (REGNO) 25926 Define this macro as a C expression that is nonzero for registers 25927 that are used by the exception handling mechanism, and so should 25928 be considered live on entry to an exception edge. 25929 25930 -- Macro: DELAY_SLOTS_FOR_EPILOGUE 25931 Define this macro if the function epilogue contains delay slots to 25932 which instructions from the rest of the function can be "moved". 25933 The definition should be a C expression whose value is an integer 25934 representing the number of delay slots there. 25935 25936 -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N) 25937 A C expression that returns 1 if INSN can be placed in delay slot 25938 number N of the epilogue. 25939 25940 The argument N is an integer which identifies the delay slot now 25941 being considered (since different slots may have different rules of 25942 eligibility). It is never negative and is always less than the 25943 number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE' 25944 returns). If you reject a particular insn for a given delay slot, 25945 in principle, it may be reconsidered for a subsequent delay slot. 25946 Also, other insns may (at least in principle) be considered for 25947 the so far unfilled delay slot. 25948 25949 The insns accepted to fill the epilogue delay slots are put in an 25950 RTL list made with `insn_list' objects, stored in the variable 25951 `current_function_epilogue_delay_list'. The insn for the first 25952 delay slot comes first in the list. Your definition of the macro 25953 `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by 25954 outputting the insns in this list, usually by calling 25955 `final_scan_insn'. 25956 25957 You need not define this macro if you did not define 25958 `DELAY_SLOTS_FOR_EPILOGUE'. 25959 25960 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 25961 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 25962 VCALL_OFFSET, tree FUNCTION) 25963 A function that outputs the assembler code for a thunk function, 25964 used to implement C++ virtual function calls with multiple 25965 inheritance. The thunk acts as a wrapper around a virtual 25966 function, adjusting the implicit object parameter before handing 25967 control off to the real function. 25968 25969 First, emit code to add the integer DELTA to the location that 25970 contains the incoming first argument. Assume that this argument 25971 contains a pointer, and is the one used to pass the `this' pointer 25972 in C++. This is the incoming argument _before_ the function 25973 prologue, e.g. `%o0' on a sparc. The addition must preserve the 25974 values of all other incoming arguments. 25975 25976 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 25977 be made after adding `delta'. In particular, if P is the adjusted 25978 pointer, the following adjustment should be made: 25979 25980 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 25981 25982 After the additions, emit code to jump to FUNCTION, which is a 25983 `FUNCTION_DECL'. This is a direct pure jump, not a call, and does 25984 not touch the return address. Hence returning from FUNCTION will 25985 return to whoever called the current `thunk'. 25986 25987 The effect must be as if FUNCTION had been called directly with 25988 the adjusted first argument. This macro is responsible for 25989 emitting all of the code for a thunk function; 25990 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' 25991 are not invoked. 25992 25993 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 25994 been extracted from it.) It might possibly be useful on some 25995 targets, but probably not. 25996 25997 If you do not define this macro, the target-independent code in 25998 the C++ front end will generate a less efficient heavyweight thunk 25999 that calls FUNCTION instead of jumping to it. The generic 26000 approach does not support varargs. 26001 26002 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (tree 26003 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 26004 VCALL_OFFSET, tree FUNCTION) 26005 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would 26006 be able to output the assembler code for the thunk function 26007 specified by the arguments it is passed, and false otherwise. In 26008 the latter case, the generic approach will be used by the C++ 26009 front end, with the limitations previously exposed. 26010 26011 26012 File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 26013 26014 15.10.12 Generating Code for Profiling 26015 -------------------------------------- 26016 26017 These macros will help you generate code for profiling. 26018 26019 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 26020 A C statement or compound statement to output to FILE some 26021 assembler code to call the profiling subroutine `mcount'. 26022 26023 The details of how `mcount' expects to be called are determined by 26024 your operating system environment, not by GCC. To figure them out, 26025 compile a small program for profiling using the system's installed 26026 C compiler and look at the assembler code that results. 26027 26028 Older implementations of `mcount' expect the address of a counter 26029 variable to be loaded into some register. The name of this 26030 variable is `LP' followed by the number LABELNO, so you would 26031 generate the name using `LP%d' in a `fprintf'. 26032 26033 -- Macro: PROFILE_HOOK 26034 A C statement or compound statement to output to FILE some assembly 26035 code to call the profiling subroutine `mcount' even the target does 26036 not support profiling. 26037 26038 -- Macro: NO_PROFILE_COUNTERS 26039 Define this macro to be an expression with a nonzero value if the 26040 `mcount' subroutine on your system does not need a counter variable 26041 allocated for each function. This is true for almost all modern 26042 implementations. If you define this macro, you must not use the 26043 LABELNO argument to `FUNCTION_PROFILER'. 26044 26045 -- Macro: PROFILE_BEFORE_PROLOGUE 26046 Define this macro if the code for function profiling should come 26047 before the function prologue. Normally, the profiling code comes 26048 after. 26049 26050 26051 File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 26052 26053 15.10.13 Permitting tail calls 26054 ------------------------------ 26055 26056 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 26057 EXP) 26058 True if it is ok to do sibling call optimization for the specified 26059 call expression EXP. DECL will be the called function, or `NULL' 26060 if this is an indirect call. 26061 26062 It is not uncommon for limitations of calling conventions to 26063 prevent tail calls to functions outside the current unit of 26064 translation, or during PIC compilation. The hook is used to 26065 enforce these restrictions, as the `sibcall' md pattern can not 26066 fail, or fall over to a "normal" call. The criteria for 26067 successful sibling call optimization may vary greatly between 26068 different architectures. 26069 26070 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap *REGS) 26071 Add any hard registers to REGS that are live on entry to the 26072 function. This hook only needs to be defined to provide registers 26073 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 26074 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 26075 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, 26076 FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM, 26077 ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM. 26078 26079 26080 File: gccint.info, Node: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling 26081 26082 15.10.14 Stack smashing protection 26083 ---------------------------------- 26084 26085 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 26086 This hook returns a `DECL' node for the external variable to use 26087 for the stack protection guard. This variable is initialized by 26088 the runtime to some random value and is used to initialize the 26089 guard value that is placed at the top of the local stack frame. 26090 The type of this variable must be `ptr_type_node'. 26091 26092 The default version of this hook creates a variable called 26093 `__stack_chk_guard', which is normally defined in `libgcc2.c'. 26094 26095 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 26096 This hook returns a tree expression that alerts the runtime that 26097 the stack protect guard variable has been modified. This 26098 expression should involve a call to a `noreturn' function. 26099 26100 The default version of this hook invokes a function called 26101 `__stack_chk_fail', taking no arguments. This function is 26102 normally defined in `libgcc2.c'. 26103 26104 26105 File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 26106 26107 15.11 Implementing the Varargs Macros 26108 ===================================== 26109 26110 GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that 26111 work without change on machines that pass arguments on the stack. 26112 Other machines require their own implementations of varargs, and the 26113 two machine independent header files must have conditionals to include 26114 it. 26115 26116 ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the 26117 calling convention for `va_start'. The traditional implementation 26118 takes just one argument, which is the variable in which to store the 26119 argument pointer. The ISO implementation of `va_start' takes an 26120 additional second argument. The user is supposed to write the last 26121 named argument of the function here. 26122 26123 However, `va_start' should not use this argument. The way to find the 26124 end of the named arguments is with the built-in functions described 26125 below. 26126 26127 -- Macro: __builtin_saveregs () 26128 Use this built-in function to save the argument registers in 26129 memory so that the varargs mechanism can access them. Both ISO 26130 and traditional versions of `va_start' must use 26131 `__builtin_saveregs', unless you use 26132 `TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 26133 26134 On some machines, `__builtin_saveregs' is open-coded under the 26135 control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'. On 26136 other machines, it calls a routine written in assembler language, 26137 found in `libgcc2.c'. 26138 26139 Code generated for the call to `__builtin_saveregs' appears at the 26140 beginning of the function, as opposed to where the call to 26141 `__builtin_saveregs' is written, regardless of what the code is. 26142 This is because the registers must be saved before the function 26143 starts to use them for its own purposes. 26144 26145 -- Macro: __builtin_args_info (CATEGORY) 26146 Use this built-in function to find the first anonymous arguments in 26147 registers. 26148 26149 In general, a machine may have several categories of registers 26150 used for arguments, each for a particular category of data types. 26151 (For example, on some machines, floating-point registers are used 26152 for floating-point arguments while other arguments are passed in 26153 the general registers.) To make non-varargs functions use the 26154 proper calling convention, you have defined the `CUMULATIVE_ARGS' 26155 data type to record how many registers in each category have been 26156 used so far 26157 26158 `__builtin_args_info' accesses the same data structure of type 26159 `CUMULATIVE_ARGS' after the ordinary argument layout is finished 26160 with it, with CATEGORY specifying which word to access. Thus, the 26161 value indicates the first unused register in a given category. 26162 26163 Normally, you would use `__builtin_args_info' in the implementation 26164 of `va_start', accessing each category just once and storing the 26165 value in the `va_list' object. This is because `va_list' will 26166 have to update the values, and there is no way to alter the values 26167 accessed by `__builtin_args_info'. 26168 26169 -- Macro: __builtin_next_arg (LASTARG) 26170 This is the equivalent of `__builtin_args_info', for stack 26171 arguments. It returns the address of the first anonymous stack 26172 argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns 26173 the address of the location above the first anonymous stack 26174 argument. Use it in `va_start' to initialize the pointer for 26175 fetching arguments from the stack. Also use it in `va_start' to 26176 verify that the second parameter LASTARG is the last named argument 26177 of the current function. 26178 26179 -- Macro: __builtin_classify_type (OBJECT) 26180 Since each machine has its own conventions for which data types are 26181 passed in which kind of register, your implementation of `va_arg' 26182 has to embody these conventions. The easiest way to categorize the 26183 specified data type is to use `__builtin_classify_type' together 26184 with `sizeof' and `__alignof__'. 26185 26186 `__builtin_classify_type' ignores the value of OBJECT, considering 26187 only its data type. It returns an integer describing what kind of 26188 type that is--integer, floating, pointer, structure, and so on. 26189 26190 The file `typeclass.h' defines an enumeration that you can use to 26191 interpret the values of `__builtin_classify_type'. 26192 26193 These machine description macros help implement varargs: 26194 26195 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 26196 If defined, this hook produces the machine-specific code for a 26197 call to `__builtin_saveregs'. This code will be moved to the very 26198 beginning of the function, before any parameter access are made. 26199 The return value of this function should be an RTX that contains 26200 the value to use as the return of `__builtin_saveregs'. 26201 26202 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS 26203 *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int 26204 *PRETEND_ARGS_SIZE, int SECOND_TIME) 26205 This target hook offers an alternative to using 26206 `__builtin_saveregs' and defining the hook 26207 `TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 26208 register arguments into the stack so that all the arguments appear 26209 to have been passed consecutively on the stack. Once this is 26210 done, you can use the standard implementation of varargs that 26211 works for machines that pass all their arguments on the stack. 26212 26213 The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data 26214 structure, containing the values that are obtained after 26215 processing the named arguments. The arguments MODE and TYPE 26216 describe the last named argument--its machine mode and its data 26217 type as a tree node. 26218 26219 The target hook should do two things: first, push onto the stack 26220 all the argument registers _not_ used for the named arguments, and 26221 second, store the size of the data thus pushed into the 26222 `int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 26223 that you store here will serve as additional offset for setting up 26224 the stack frame. 26225 26226 Because you must generate code to push the anonymous arguments at 26227 compile time without knowing their data types, 26228 `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 26229 have just a single category of argument register and use it 26230 uniformly for all data types. 26231 26232 If the argument SECOND_TIME is nonzero, it means that the 26233 arguments of the function are being analyzed for the second time. 26234 This happens for an inline function, which is not actually 26235 compiled until the end of the source file. The hook 26236 `TARGET_SETUP_INCOMING_VARARGS' should not generate any 26237 instructions in this case. 26238 26239 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS 26240 *CA) 26241 Define this hook to return `true' if the location where a function 26242 argument is passed depends on whether or not it is a named 26243 argument. 26244 26245 This hook controls how the NAMED argument to `FUNCTION_ARG' is set 26246 for varargs and stdarg functions. If this hook returns `true', 26247 the NAMED argument is always true for named arguments, and false 26248 for unnamed arguments. If it returns `false', but 26249 `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all 26250 arguments are treated as named. Otherwise, all named arguments 26251 except the last are treated as named. 26252 26253 You need not define this hook if it always returns zero. 26254 26255 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 26256 If you need to conditionally change ABIs so that one works with 26257 `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 26258 `TARGET_SETUP_INCOMING_VARARGS' nor 26259 `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook 26260 to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used, 26261 `false' otherwise. Otherwise, you should not define this hook. 26262 26263 26264 File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 26265 26266 15.12 Trampolines for Nested Functions 26267 ====================================== 26268 26269 A "trampoline" is a small piece of code that is created at run time 26270 when the address of a nested function is taken. It normally resides on 26271 the stack, in the stack frame of the containing function. These macros 26272 tell GCC how to generate code to allocate and initialize a trampoline. 26273 26274 The instructions in the trampoline must do two things: load a constant 26275 address into the static chain register, and jump to the real address of 26276 the nested function. On CISC machines such as the m68k, this requires 26277 two instructions, a move immediate and a jump. Then the two addresses 26278 exist in the trampoline as word-long immediate operands. On RISC 26279 machines, it is often necessary to load each address into a register in 26280 two parts. Then pieces of each address form separate immediate 26281 operands. 26282 26283 The code generated to initialize the trampoline must store the variable 26284 parts--the static chain value and the function address--into the 26285 immediate operands of the instructions. On a CISC machine, this is 26286 simply a matter of copying each address to a memory reference at the 26287 proper offset from the start of the trampoline. On a RISC machine, it 26288 may be necessary to take out pieces of the address and store them 26289 separately. 26290 26291 -- Macro: TRAMPOLINE_TEMPLATE (FILE) 26292 A C statement to output, on the stream FILE, assembler code for a 26293 block of data that contains the constant parts of a trampoline. 26294 This code should not include a label--the label is taken care of 26295 automatically. 26296 26297 If you do not define this macro, it means no template is needed 26298 for the target. Do not define this macro on systems where the 26299 block move code to copy the trampoline into place would be larger 26300 than the code to generate it on the spot. 26301 26302 -- Macro: TRAMPOLINE_SECTION 26303 Return the section into which the trampoline template is to be 26304 placed (*note Sections::). The default value is 26305 `readonly_data_section'. 26306 26307 -- Macro: TRAMPOLINE_SIZE 26308 A C expression for the size in bytes of the trampoline, as an 26309 integer. 26310 26311 -- Macro: TRAMPOLINE_ALIGNMENT 26312 Alignment required for trampolines, in bits. 26313 26314 If you don't define this macro, the value of `BIGGEST_ALIGNMENT' 26315 is used for aligning trampolines. 26316 26317 -- Macro: INITIALIZE_TRAMPOLINE (ADDR, FNADDR, STATIC_CHAIN) 26318 A C statement to initialize the variable parts of a trampoline. 26319 ADDR is an RTX for the address of the trampoline; FNADDR is an RTX 26320 for the address of the nested function; STATIC_CHAIN is an RTX for 26321 the static chain value that should be passed to the function when 26322 it is called. 26323 26324 -- Macro: TRAMPOLINE_ADJUST_ADDRESS (ADDR) 26325 A C statement that should perform any machine-specific adjustment 26326 in the address of the trampoline. Its argument contains the 26327 address that was passed to `INITIALIZE_TRAMPOLINE'. In case the 26328 address to be used for a function call should be different from 26329 the address in which the template was stored, the different 26330 address should be assigned to ADDR. If this macro is not defined, 26331 ADDR will be used for function calls. 26332 26333 If this macro is not defined, by default the trampoline is 26334 allocated as a stack slot. This default is right for most 26335 machines. The exceptions are machines where it is impossible to 26336 execute instructions in the stack area. On such machines, you may 26337 have to implement a separate stack, using this macro in 26338 conjunction with `TARGET_ASM_FUNCTION_PROLOGUE' and 26339 `TARGET_ASM_FUNCTION_EPILOGUE'. 26340 26341 FP points to a data structure, a `struct function', which 26342 describes the compilation status of the immediate containing 26343 function of the function which the trampoline is for. The stack 26344 slot for the trampoline is in the stack frame of this containing 26345 function. Other allocation strategies probably must do something 26346 analogous with this information. 26347 26348 Implementing trampolines is difficult on many machines because they 26349 have separate instruction and data caches. Writing into a stack 26350 location fails to clear the memory in the instruction cache, so when 26351 the program jumps to that location, it executes the old contents. 26352 26353 Here are two possible solutions. One is to clear the relevant parts of 26354 the instruction cache whenever a trampoline is set up. The other is to 26355 make all trampolines identical, by having them jump to a standard 26356 subroutine. The former technique makes trampoline execution faster; the 26357 latter makes initialization faster. 26358 26359 To clear the instruction cache when a trampoline is initialized, define 26360 the following macro. 26361 26362 -- Macro: CLEAR_INSN_CACHE (BEG, END) 26363 If defined, expands to a C expression clearing the _instruction 26364 cache_ in the specified interval. The definition of this macro 26365 would typically be a series of `asm' statements. Both BEG and END 26366 are both pointer expressions. 26367 26368 The operating system may also require the stack to be made executable 26369 before calling the trampoline. To implement this requirement, define 26370 the following macro. 26371 26372 -- Macro: ENABLE_EXECUTE_STACK 26373 Define this macro if certain operations must be performed before 26374 executing code located on the stack. The macro should expand to a 26375 series of C file-scope constructs (e.g. functions) and provide a 26376 unique entry point named `__enable_execute_stack'. The target is 26377 responsible for emitting calls to the entry point in the code, for 26378 example from the `INITIALIZE_TRAMPOLINE' macro. 26379 26380 To use a standard subroutine, define the following macro. In addition, 26381 you must make sure that the instructions in a trampoline fill an entire 26382 cache line with identical instructions, or else ensure that the 26383 beginning of the trampoline code is always aligned at the same point in 26384 its cache line. Look in `m68k.h' as a guide. 26385 26386 -- Macro: TRANSFER_FROM_TRAMPOLINE 26387 Define this macro if trampolines need a special subroutine to do 26388 their work. The macro should expand to a series of `asm' 26389 statements which will be compiled with GCC. They go in a library 26390 function named `__transfer_from_trampoline'. 26391 26392 If you need to avoid executing the ordinary prologue code of a 26393 compiled C function when you jump to the subroutine, you can do so 26394 by placing a special label of your own in the assembler code. Use 26395 one `asm' statement to generate an assembler label, and another to 26396 make the label global. Then trampolines can use that label to 26397 jump directly to your special assembler code. 26398 26399 26400 File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 26401 26402 15.13 Implicit Calls to Library Routines 26403 ======================================== 26404 26405 Here is an explanation of implicit calls to library routines. 26406 26407 -- Macro: DECLARE_LIBRARY_RENAMES 26408 This macro, if defined, should expand to a piece of C code that 26409 will get expanded when compiling functions for libgcc.a. It can 26410 be used to provide alternate names for GCC's internal library 26411 functions if there are ABI-mandated names that the compiler should 26412 provide. 26413 26414 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 26415 This hook should declare additional library routines or rename 26416 existing ones, using the functions `set_optab_libfunc' and 26417 `init_one_libfunc' defined in `optabs.c'. `init_optabs' calls 26418 this macro after initializing all the normal library routines. 26419 26420 The default is to do nothing. Most ports don't need to define 26421 this hook. 26422 26423 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 26424 This macro should return `true' if the library routine that 26425 implements the floating point comparison operator COMPARISON in 26426 mode MODE will return a boolean, and FALSE if it will return a 26427 tristate. 26428 26429 GCC's own floating point libraries return tristates from the 26430 comparison operators, so the default returns false always. Most 26431 ports don't need to define this macro. 26432 26433 -- Macro: TARGET_LIB_INT_CMP_BIASED 26434 This macro should evaluate to `true' if the integer comparison 26435 functions (like `__cmpdi2') return 0 to indicate that the first 26436 operand is smaller than the second, 1 to indicate that they are 26437 equal, and 2 to indicate that the first operand is greater than 26438 the second. If this macro evaluates to `false' the comparison 26439 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 26440 target uses the routines in `libgcc.a', you do not need to define 26441 this macro. 26442 26443 -- Macro: US_SOFTWARE_GOFAST 26444 Define this macro if your system C library uses the US Software 26445 GOFAST library to provide floating point emulation. 26446 26447 In addition to defining this macro, your architecture must set 26448 `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else 26449 call that function from its version of that hook. It is defined 26450 in `config/gofast.h', which must be included by your 26451 architecture's `CPU.c' file. See `sparc/sparc.c' for an example. 26452 26453 If this macro is defined, the 26454 `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return 26455 false for `SFmode' and `DFmode' comparisons. 26456 26457 -- Macro: TARGET_EDOM 26458 The value of `EDOM' on the target machine, as a C integer constant 26459 expression. If you don't define this macro, GCC does not attempt 26460 to deposit the value of `EDOM' into `errno' directly. Look in 26461 `/usr/include/errno.h' to find the value of `EDOM' on your system. 26462 26463 If you do not define `TARGET_EDOM', then compiled code reports 26464 domain errors by calling the library function and letting it 26465 report the error. If mathematical functions on your system use 26466 `matherr' when there is an error, then you should leave 26467 `TARGET_EDOM' undefined so that `matherr' is used normally. 26468 26469 -- Macro: GEN_ERRNO_RTX 26470 Define this macro as a C expression to create an rtl expression 26471 that refers to the global "variable" `errno'. (On certain systems, 26472 `errno' may not actually be a variable.) If you don't define this 26473 macro, a reasonable default is used. 26474 26475 -- Macro: TARGET_C99_FUNCTIONS 26476 When this macro is nonzero, GCC will implicitly optimize `sin' 26477 calls into `sinf' and similarly for other functions defined by C99 26478 standard. The default is nonzero that should be proper value for 26479 most modern systems, however number of existing systems lacks 26480 support for these functions in the runtime so they needs this 26481 macro to be redefined to 0. 26482 26483 -- Macro: TARGET_HAS_SINCOS 26484 When this macro is nonzero, GCC will implicitly optimize calls to 26485 `sin' and `cos' with the same argument to a call to `sincos'. The 26486 default is zero. The target has to provide the following 26487 functions: 26488 void sincos(double x, double *sin, double *cos); 26489 void sincosf(float x, float *sin, float *cos); 26490 void sincosl(long double x, long double *sin, long double *cos); 26491 26492 -- Macro: NEXT_OBJC_RUNTIME 26493 Define this macro to generate code for Objective-C message sending 26494 using the calling convention of the NeXT system. This calling 26495 convention involves passing the object, the selector and the 26496 method arguments all at once to the method-lookup library function. 26497 26498 The default calling convention passes just the object and the 26499 selector to the lookup function, which returns a pointer to the 26500 method. 26501 26502 26503 File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 26504 26505 15.14 Addressing Modes 26506 ====================== 26507 26508 This is about addressing modes. 26509 26510 -- Macro: HAVE_PRE_INCREMENT 26511 -- Macro: HAVE_PRE_DECREMENT 26512 -- Macro: HAVE_POST_INCREMENT 26513 -- Macro: HAVE_POST_DECREMENT 26514 A C expression that is nonzero if the machine supports 26515 pre-increment, pre-decrement, post-increment, or post-decrement 26516 addressing respectively. 26517 26518 -- Macro: HAVE_PRE_MODIFY_DISP 26519 -- Macro: HAVE_POST_MODIFY_DISP 26520 A C expression that is nonzero if the machine supports pre- or 26521 post-address side-effect generation involving constants other than 26522 the size of the memory operand. 26523 26524 -- Macro: HAVE_PRE_MODIFY_REG 26525 -- Macro: HAVE_POST_MODIFY_REG 26526 A C expression that is nonzero if the machine supports pre- or 26527 post-address side-effect generation involving a register 26528 displacement. 26529 26530 -- Macro: CONSTANT_ADDRESS_P (X) 26531 A C expression that is 1 if the RTX X is a constant which is a 26532 valid address. On most machines, this can be defined as 26533 `CONSTANT_P (X)', but a few machines are more restrictive in which 26534 constant addresses are supported. 26535 26536 -- Macro: CONSTANT_P (X) 26537 `CONSTANT_P', which is defined by target-independent code, accepts 26538 integer-values expressions whose values are not explicitly known, 26539 such as `symbol_ref', `label_ref', and `high' expressions and 26540 `const' arithmetic expressions, in addition to `const_int' and 26541 `const_double' expressions. 26542 26543 -- Macro: MAX_REGS_PER_ADDRESS 26544 A number, the maximum number of registers that can appear in a 26545 valid memory address. Note that it is up to you to specify a 26546 value equal to the maximum number that `GO_IF_LEGITIMATE_ADDRESS' 26547 would ever accept. 26548 26549 -- Macro: GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 26550 A C compound statement with a conditional `goto LABEL;' executed 26551 if X (an RTX) is a legitimate memory address on the target machine 26552 for a memory operand of mode MODE. 26553 26554 It usually pays to define several simpler macros to serve as 26555 subroutines for this one. Otherwise it may be too complicated to 26556 understand. 26557 26558 This macro must exist in two variants: a strict variant and a 26559 non-strict one. The strict variant is used in the reload pass. It 26560 must be defined so that any pseudo-register that has not been 26561 allocated a hard register is considered a memory reference. In 26562 contexts where some kind of register is required, a pseudo-register 26563 with no hard register must be rejected. 26564 26565 The non-strict variant is used in other passes. It must be 26566 defined to accept all pseudo-registers in every context where some 26567 kind of register is required. 26568 26569 Compiler source files that want to use the strict variant of this 26570 macro define the macro `REG_OK_STRICT'. You should use an `#ifdef 26571 REG_OK_STRICT' conditional to define the strict variant in that 26572 case and the non-strict variant otherwise. 26573 26574 Subroutines to check for acceptable registers for various purposes 26575 (one for base registers, one for index registers, and so on) are 26576 typically among the subroutines used to define 26577 `GO_IF_LEGITIMATE_ADDRESS'. Then only these subroutine macros 26578 need have two variants; the higher levels of macros may be the 26579 same whether strict or not. 26580 26581 Normally, constant addresses which are the sum of a `symbol_ref' 26582 and an integer are stored inside a `const' RTX to mark them as 26583 constant. Therefore, there is no need to recognize such sums 26584 specifically as legitimate addresses. Normally you would simply 26585 recognize any `const' as legitimate. 26586 26587 Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant 26588 sums that are not marked with `const'. It assumes that a naked 26589 `plus' indicates indexing. If so, then you _must_ reject such 26590 naked constant sums as illegitimate addresses, so that none of 26591 them will be given to `PRINT_OPERAND_ADDRESS'. 26592 26593 On some machines, whether a symbolic address is legitimate depends 26594 on the section that the address refers to. On these machines, 26595 define the target hook `TARGET_ENCODE_SECTION_INFO' to store the 26596 information into the `symbol_ref', and then check for it here. 26597 When you see a `const', you will have to look inside it to find the 26598 `symbol_ref' in order to determine the section. *Note Assembler 26599 Format::. 26600 26601 -- Macro: FIND_BASE_TERM (X) 26602 A C expression to determine the base term of address X. This 26603 macro is used in only one place: `find_base_term' in alias.c. 26604 26605 It is always safe for this macro to not be defined. It exists so 26606 that alias analysis can understand machine-dependent addresses. 26607 26608 The typical use of this macro is to handle addresses containing a 26609 label_ref or symbol_ref within an UNSPEC. 26610 26611 -- Macro: LEGITIMIZE_ADDRESS (X, OLDX, MODE, WIN) 26612 A C compound statement that attempts to replace X with a valid 26613 memory address for an operand of mode MODE. WIN will be a C 26614 statement label elsewhere in the code; the macro definition may use 26615 26616 GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); 26617 26618 to avoid further processing if the address has become legitimate. 26619 26620 X will always be the result of a call to `break_out_memory_refs', 26621 and OLDX will be the operand that was given to that function to 26622 produce X. 26623 26624 The code generated by this macro should not alter the substructure 26625 of X. If it transforms X into a more legitimate form, it should 26626 assign X (which will always be a C variable) a new value. 26627 26628 It is not necessary for this macro to come up with a legitimate 26629 address. The compiler has standard ways of doing so in all cases. 26630 In fact, it is safe to omit this macro. But often a 26631 machine-dependent strategy can generate better code. 26632 26633 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 26634 WIN) 26635 A C compound statement that attempts to replace X, which is an 26636 address that needs reloading, with a valid memory address for an 26637 operand of mode MODE. WIN will be a C statement label elsewhere 26638 in the code. It is not necessary to define this macro, but it 26639 might be useful for performance reasons. 26640 26641 For example, on the i386, it is sometimes possible to use a single 26642 reload register instead of two by reloading a sum of two pseudo 26643 registers into a register. On the other hand, for number of RISC 26644 processors offsets are limited so that often an intermediate 26645 address needs to be generated in order to address a stack slot. 26646 By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 26647 intermediate addresses generated for adjacent some stack slots can 26648 be made identical, and thus be shared. 26649 26650 _Note_: This macro should be used with caution. It is necessary 26651 to know something of how reload works in order to effectively use 26652 this, and it is quite easy to produce macros that build in too 26653 much knowledge of reload internals. 26654 26655 _Note_: This macro must be able to reload an address created by a 26656 previous invocation of this macro. If it fails to handle such 26657 addresses then the compiler may generate incorrect code or abort. 26658 26659 The macro definition should use `push_reload' to indicate parts 26660 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 26661 suitable to be passed unaltered to `push_reload'. 26662 26663 The code generated by this macro must not alter the substructure of 26664 X. If it transforms X into a more legitimate form, it should 26665 assign X (which will always be a C variable) a new value. This 26666 also applies to parts that you change indirectly by calling 26667 `push_reload'. 26668 26669 The macro definition may use `strict_memory_address_p' to test if 26670 the address has become legitimate. 26671 26672 If you want to change only a part of X, one standard way of doing 26673 this is to use `copy_rtx'. Note, however, that it unshares only a 26674 single level of rtl. Thus, if the part to be changed is not at the 26675 top level, you'll need to replace first the top level. It is not 26676 necessary for this macro to come up with a legitimate address; 26677 but often a machine-dependent strategy can generate better code. 26678 26679 -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL) 26680 A C statement or compound statement with a conditional `goto 26681 LABEL;' executed if memory address X (an RTX) can have different 26682 meanings depending on the machine mode of the memory reference it 26683 is used for or if the address is valid for some modes but not 26684 others. 26685 26686 Autoincrement and autodecrement addresses typically have 26687 mode-dependent effects because the amount of the increment or 26688 decrement is the size of the operand being addressed. Some 26689 machines have other mode-dependent addresses. Many RISC machines 26690 have no mode-dependent addresses. 26691 26692 You may assume that ADDR is a valid address for the machine. 26693 26694 -- Macro: LEGITIMATE_CONSTANT_P (X) 26695 A C expression that is nonzero if X is a legitimate constant for 26696 an immediate operand on the target machine. You can assume that X 26697 satisfies `CONSTANT_P', so you need not check this. In fact, `1' 26698 is a suitable definition for this macro on machines where anything 26699 `CONSTANT_P' is valid. 26700 26701 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 26702 This hook is used to undo the possibly obfuscating effects of the 26703 `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target 26704 macros. Some backend implementations of these macros wrap symbol 26705 references inside an `UNSPEC' rtx to represent PIC or similar 26706 addressing modes. This target hook allows GCC's optimizers to 26707 understand the semantics of these opaque `UNSPEC's by converting 26708 them back into their original form. 26709 26710 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X) 26711 This hook should return true if X is of a form that cannot (or 26712 should not) be spilled to the constant pool. The default version 26713 of this hook returns false. 26714 26715 The primary reason to define this hook is to prevent reload from 26716 deciding that a non-legitimate constant would be better reloaded 26717 from the constant pool instead of spilling and reloading a register 26718 holding the constant. This restriction is often true of addresses 26719 of TLS symbols for various targets. 26720 26721 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum 26722 machine_mode MODE, rtx X) 26723 This hook should return true if pool entries for constant X can be 26724 placed in an `object_block' structure. MODE is the mode of X. 26725 26726 The default version returns false for all constants. 26727 26728 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (enum tree_code FN, 26729 bool TM_FN, bool SQRT) 26730 This hook should return the DECL of a function that implements 26731 reciprocal of the builtin function with builtin function code FN, 26732 or `NULL_TREE' if such a function is not available. TM_FN is true 26733 when FN is a code of a machine-dependent builtin function. When 26734 SQRT is true, additional optimizations that apply only to the 26735 reciprocal of a square root function are performed, and only 26736 reciprocals of `sqrt' function are valid. 26737 26738 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 26739 This hook should return the DECL of a function F that given an 26740 address ADDR as an argument returns a mask M that can be used to 26741 extract from two vectors the relevant data that resides in ADDR in 26742 case ADDR is not properly aligned. 26743 26744 The autovectorizer, when vectorizing a load operation from an 26745 address ADDR that may be unaligned, will generate two vector loads 26746 from the two aligned addresses around ADDR. It then generates a 26747 `REALIGN_LOAD' operation to extract the relevant data from the two 26748 loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and 26749 V2, are the two vectors, each of size VS, and the third argument, 26750 OFF, defines how the data will be extracted from these two 26751 vectors: if OFF is 0, then the returned vector is V2; otherwise, 26752 the returned vector is composed from the last VS-OFF elements of 26753 V1 concatenated to the first OFF elements of V2. 26754 26755 If this hook is defined, the autovectorizer will generate a call 26756 to F (using the DECL tree that this hook returns) and will use the 26757 return value of F as the argument OFF to `REALIGN_LOAD'. 26758 Therefore, the mask M returned by F should comply with the 26759 semantics expected by `REALIGN_LOAD' described above. If this 26760 hook is not defined, then ADDR will be used as the argument OFF to 26761 `REALIGN_LOAD', in which case the low log2(VS)-1 bits of ADDR will 26762 be considered. 26763 26764 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X) 26765 This hook should return the DECL of a function F that implements 26766 widening multiplication of the even elements of two input vectors 26767 of type X. 26768 26769 If this hook is defined, the autovectorizer will use it along with 26770 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when 26771 vectorizing widening multiplication in cases that the order of the 26772 results does not have to be preserved (e.g. used only by a 26773 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms 26774 will be used. 26775 26776 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X) 26777 This hook should return the DECL of a function F that implements 26778 widening multiplication of the odd elements of two input vectors 26779 of type X. 26780 26781 If this hook is defined, the autovectorizer will use it along with 26782 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when 26783 vectorizing widening multiplication in cases that the order of the 26784 results does not have to be preserved (e.g. used only by a 26785 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms 26786 will be used. 26787 26788 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (enum 26789 tree_code CODE, tree TYPE) 26790 This hook should return the DECL of a function that implements 26791 conversion of the input vector of type TYPE. If TYPE is an 26792 integral type, the result of the conversion is a vector of 26793 floating-point type of the same size. If TYPE is a floating-point 26794 type, the result of the conversion is a vector of integral type of 26795 the same size. CODE specifies how the conversion is to be applied 26796 (truncation, rounding, etc.). 26797 26798 If this hook is defined, the autovectorizer will use the 26799 `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 26800 conversion. Otherwise, it will return `NULL_TREE'. 26801 26802 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION 26803 (enum built_in_function CODE, tree VEC_TYPE_OUT, tree 26804 VEC_TYPE_IN) 26805 This hook should return the decl of a function that implements the 26806 vectorized variant of the builtin function with builtin function 26807 code CODE or `NULL_TREE' if such a function is not available. The 26808 return type of the vectorized function shall be of vector type 26809 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 26810 26811 26812 File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 26813 26814 15.15 Anchored Addresses 26815 ======================== 26816 26817 GCC usually addresses every static object as a separate entity. For 26818 example, if we have: 26819 26820 static int a, b, c; 26821 int foo (void) { return a + b + c; } 26822 26823 the code for `foo' will usually calculate three separate symbolic 26824 addresses: those of `a', `b' and `c'. On some targets, it would be 26825 better to calculate just one symbolic address and access the three 26826 variables relative to it. The equivalent pseudocode would be something 26827 like: 26828 26829 int foo (void) 26830 { 26831 register int *xr = &x; 26832 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 26833 } 26834 26835 (which isn't valid C). We refer to shared addresses like `x' as 26836 "section anchors". Their use is controlled by `-fsection-anchors'. 26837 26838 The hooks below describe the target properties that GCC needs to know 26839 in order to make effective use of section anchors. It won't use 26840 section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or 26841 `TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 26842 26843 -- Variable: Target Hook HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 26844 The minimum offset that should be applied to a section anchor. On 26845 most targets, it should be the smallest offset that can be applied 26846 to a base register while still giving a legitimate address for 26847 every mode. The default value is 0. 26848 26849 -- Variable: Target Hook HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 26850 Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) 26851 offset that should be applied to section anchors. The default 26852 value is 0. 26853 26854 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 26855 Write the assembly code to define section anchor X, which is a 26856 `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true. The 26857 hook is called with the assembly output position set to the 26858 beginning of `SYMBOL_REF_BLOCK (X)'. 26859 26860 If `ASM_OUTPUT_DEF' is available, the hook's default definition 26861 uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'. 26862 If `ASM_OUTPUT_DEF' is not available, the hook's default definition 26863 is `NULL', which disables the use of section anchors altogether. 26864 26865 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (rtx X) 26866 Return true if GCC should attempt to use anchors to access 26867 `SYMBOL_REF' X. You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 26868 and `!SYMBOL_REF_ANCHOR_P (X)'. 26869 26870 The default version is correct for most targets, but you might 26871 need to intercept this hook to handle things like target-specific 26872 attributes or target-specific sections. 26873 26874 26875 File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 26876 26877 15.16 Condition Code Status 26878 =========================== 26879 26880 This describes the condition code status. 26881 26882 The file `conditions.h' defines a variable `cc_status' to describe how 26883 the condition code was computed (in case the interpretation of the 26884 condition code depends on the instruction that it was set by). This 26885 variable contains the RTL expressions on which the condition code is 26886 currently based, and several standard flags. 26887 26888 Sometimes additional machine-specific flags must be defined in the 26889 machine description header file. It can also add additional 26890 machine-specific information by defining `CC_STATUS_MDEP'. 26891 26892 -- Macro: CC_STATUS_MDEP 26893 C code for a data type which is used for declaring the `mdep' 26894 component of `cc_status'. It defaults to `int'. 26895 26896 This macro is not used on machines that do not use `cc0'. 26897 26898 -- Macro: CC_STATUS_MDEP_INIT 26899 A C expression to initialize the `mdep' field to "empty". The 26900 default definition does nothing, since most machines don't use the 26901 field anyway. If you want to use the field, you should probably 26902 define this macro to initialize it. 26903 26904 This macro is not used on machines that do not use `cc0'. 26905 26906 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 26907 A C compound statement to set the components of `cc_status' 26908 appropriately for an insn INSN whose body is EXP. It is this 26909 macro's responsibility to recognize insns that set the condition 26910 code as a byproduct of other activity as well as those that 26911 explicitly set `(cc0)'. 26912 26913 This macro is not used on machines that do not use `cc0'. 26914 26915 If there are insns that do not set the condition code but do alter 26916 other machine registers, this macro must check to see whether they 26917 invalidate the expressions that the condition code is recorded as 26918 reflecting. For example, on the 68000, insns that store in address 26919 registers do not set the condition code, which means that usually 26920 `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns. 26921 But suppose that the previous insn set the condition code based 26922 on location `a4@(102)' and the current insn stores a new value in 26923 `a4'. Although the condition code is not changed by this, it will 26924 no longer be true that it reflects the contents of `a4@(102)'. 26925 Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case 26926 to say that nothing is known about the condition code value. 26927 26928 The definition of `NOTICE_UPDATE_CC' must be prepared to deal with 26929 the results of peephole optimization: insns whose patterns are 26930 `parallel' RTXs containing various `reg', `mem' or constants which 26931 are just the operands. The RTL structure of these insns is not 26932 sufficient to indicate what the insns actually do. What 26933 `NOTICE_UPDATE_CC' should do when it sees one is just to run 26934 `CC_STATUS_INIT'. 26935 26936 A possible definition of `NOTICE_UPDATE_CC' is to call a function 26937 that looks at an attribute (*note Insn Attributes::) named, for 26938 example, `cc'. This avoids having detailed information about 26939 patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'. 26940 26941 -- Macro: SELECT_CC_MODE (OP, X, Y) 26942 Returns a mode from class `MODE_CC' to be used when comparison 26943 operation code OP is applied to rtx X and Y. For example, on the 26944 SPARC, `SELECT_CC_MODE' is defined as (see *note Jump Patterns:: 26945 for a description of the reason for this definition) 26946 26947 #define SELECT_CC_MODE(OP,X,Y) \ 26948 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 26949 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \ 26950 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 26951 || GET_CODE (X) == NEG) \ 26952 ? CC_NOOVmode : CCmode)) 26953 26954 You should define this macro if and only if you define extra CC 26955 modes in `MACHINE-modes.def'. 26956 26957 -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1) 26958 On some machines not all possible comparisons are defined, but you 26959 can convert an invalid comparison into a valid one. For example, 26960 the Alpha does not have a `GT' comparison, but you can use an `LT' 26961 comparison instead and swap the order of the operands. 26962 26963 On such machines, define this macro to be a C statement to do any 26964 required conversions. CODE is the initial comparison code and OP0 26965 and OP1 are the left and right operands of the comparison, 26966 respectively. You should modify CODE, OP0, and OP1 as required. 26967 26968 GCC will not assume that the comparison resulting from this macro 26969 is valid but will see if the resulting insn matches a pattern in 26970 the `md' file. 26971 26972 You need not define this macro if it would never change the 26973 comparison code or operands. 26974 26975 -- Macro: REVERSIBLE_CC_MODE (MODE) 26976 A C expression whose value is one if it is always safe to reverse a 26977 comparison whose mode is MODE. If `SELECT_CC_MODE' can ever 26978 return MODE for a floating-point inequality comparison, then 26979 `REVERSIBLE_CC_MODE (MODE)' must be zero. 26980 26981 You need not define this macro if it would always returns zero or 26982 if the floating-point format is anything other than 26983 `IEEE_FLOAT_FORMAT'. For example, here is the definition used on 26984 the SPARC, where floating-point inequality comparisons are always 26985 given `CCFPEmode': 26986 26987 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode) 26988 26989 -- Macro: REVERSE_CONDITION (CODE, MODE) 26990 A C expression whose value is reversed condition code of the CODE 26991 for comparison done in CC_MODE MODE. The macro is used only in 26992 case `REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 26993 case machine has some non-standard way how to reverse certain 26994 conditionals. For instance in case all floating point conditions 26995 are non-trapping, compiler may freely convert unordered compares 26996 to ordered one. Then definition may look like: 26997 26998 #define REVERSE_CONDITION(CODE, MODE) \ 26999 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 27000 : reverse_condition_maybe_unordered (CODE)) 27001 27002 -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2) 27003 A C expression that returns true if the conditional execution 27004 predicate OP1, a comparison operation, is the inverse of OP2 and 27005 vice versa. Define this to return 0 if the target has conditional 27006 execution predicates that cannot be reversed safely. There is no 27007 need to validate that the arguments of op1 and op2 are the same, 27008 this is done separately. If no expansion is specified, this macro 27009 is defined as follows: 27010 27011 #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \ 27012 (GET_CODE ((x)) == reversed_comparison_code ((y), NULL)) 27013 27014 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *, 27015 unsigned int *) 27016 On targets which do not use `(cc0)', and which use a hard register 27017 rather than a pseudo-register to hold condition codes, the regular 27018 CSE passes are often not able to identify cases in which the hard 27019 register is set to a common value. Use this hook to enable a 27020 small pass which optimizes such cases. This hook should return 27021 true to enable this pass, and it should set the integers to which 27022 its arguments point to the hard register numbers used for 27023 condition codes. When there is only one such register, as is true 27024 on most systems, the integer pointed to by the second argument 27025 should be set to `INVALID_REGNUM'. 27026 27027 The default version of this hook returns false. 27028 27029 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum 27030 machine_mode, enum machine_mode) 27031 On targets which use multiple condition code modes in class 27032 `MODE_CC', it is sometimes the case that a comparison can be 27033 validly done in more than one mode. On such a system, define this 27034 target hook to take two mode arguments and to return a mode in 27035 which both comparisons may be validly done. If there is no such 27036 mode, return `VOIDmode'. 27037 27038 The default version of this hook checks whether the modes are the 27039 same. If they are, it returns that mode. If they are different, 27040 it returns `VOIDmode'. 27041 27042 27043 File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 27044 27045 15.17 Describing Relative Costs of Operations 27046 ============================================= 27047 27048 These macros let you describe the relative speed of various operations 27049 on the target machine. 27050 27051 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 27052 A C expression for the cost of moving data of mode MODE from a 27053 register in class FROM to one in class TO. The classes are 27054 expressed using the enumeration values such as `GENERAL_REGS'. A 27055 value of 2 is the default; other values are interpreted relative to 27056 that. 27057 27058 It is not required that the cost always equal 2 when FROM is the 27059 same as TO; on some machines it is expensive to move between 27060 registers if they are not general registers. 27061 27062 If reload sees an insn consisting of a single `set' between two 27063 hard registers, and if `REGISTER_MOVE_COST' applied to their 27064 classes returns a value of 2, reload does not check to ensure that 27065 the constraints of the insn are met. Setting a cost of other than 27066 2 will allow reload to verify that the constraints are met. You 27067 should do this if the `movM' pattern's constraints do not allow 27068 such copying. 27069 27070 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 27071 A C expression for the cost of moving data of mode MODE between a 27072 register of class CLASS and memory; IN is zero if the value is to 27073 be written to memory, nonzero if it is to be read in. This cost 27074 is relative to those in `REGISTER_MOVE_COST'. If moving between 27075 registers and memory is more expensive than between two registers, 27076 you should define this macro to express the relative cost. 27077 27078 If you do not define this macro, GCC uses a default cost of 4 plus 27079 the cost of copying via a secondary reload register, if one is 27080 needed. If your machine requires a secondary reload register to 27081 copy between memory and a register of CLASS but the reload 27082 mechanism is more complex than copying via an intermediate, define 27083 this macro to reflect the actual cost of the move. 27084 27085 GCC defines the function `memory_move_secondary_cost' if secondary 27086 reloads are needed. It computes the costs due to copying via a 27087 secondary register. If your machine copies from memory using a 27088 secondary register in the conventional way but the default base 27089 value of 4 is not correct for your machine, define this macro to 27090 add some other value to the result of that function. The 27091 arguments to that function are the same as to this macro. 27092 27093 -- Macro: BRANCH_COST 27094 A C expression for the cost of a branch instruction. A value of 1 27095 is the default; other values are interpreted relative to that. 27096 27097 Here are additional macros which do not specify precise relative costs, 27098 but only that certain actions are more expensive than GCC would 27099 ordinarily expect. 27100 27101 -- Macro: SLOW_BYTE_ACCESS 27102 Define this macro as a C expression which is nonzero if accessing 27103 less than a word of memory (i.e. a `char' or a `short') is no 27104 faster than accessing a word of memory, i.e., if such access 27105 require more than one instruction or if there is no difference in 27106 cost between byte and (aligned) word loads. 27107 27108 When this macro is not defined, the compiler will access a field by 27109 finding the smallest containing object; when it is defined, a 27110 fullword load will be used if alignment permits. Unless bytes 27111 accesses are faster than word accesses, using word accesses is 27112 preferable since it may eliminate subsequent memory access if 27113 subsequent accesses occur to other fields in the same word of the 27114 structure, but to different bytes. 27115 27116 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 27117 Define this macro to be the value 1 if memory accesses described 27118 by the MODE and ALIGNMENT parameters have a cost many times greater 27119 than aligned accesses, for example if they are emulated in a trap 27120 handler. 27121 27122 When this macro is nonzero, the compiler will act as if 27123 `STRICT_ALIGNMENT' were nonzero when generating code for block 27124 moves. This can cause significantly more instructions to be 27125 produced. Therefore, do not set this macro nonzero if unaligned 27126 accesses only add a cycle or two to the time for a memory access. 27127 27128 If the value of this macro is always zero, it need not be defined. 27129 If this macro is defined, it should produce a nonzero value when 27130 `STRICT_ALIGNMENT' is nonzero. 27131 27132 -- Macro: MOVE_RATIO 27133 The threshold of number of scalar memory-to-memory move insns, 27134 _below_ which a sequence of insns should be generated instead of a 27135 string move insn or a library call. Increasing the value will 27136 always make code faster, but eventually incurs high cost in 27137 increased code size. 27138 27139 Note that on machines where the corresponding move insn is a 27140 `define_expand' that emits a sequence of insns, this macro counts 27141 the number of such sequences. 27142 27143 If you don't define this, a reasonable default is used. 27144 27145 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT) 27146 A C expression used to determine whether `move_by_pieces' will be 27147 used to copy a chunk of memory, or whether some other block move 27148 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 27149 returns less than `MOVE_RATIO'. 27150 27151 -- Macro: MOVE_MAX_PIECES 27152 A C expression used by `move_by_pieces' to determine the largest 27153 unit a load or store used to copy memory is. Defaults to 27154 `MOVE_MAX'. 27155 27156 -- Macro: CLEAR_RATIO 27157 The threshold of number of scalar move insns, _below_ which a 27158 sequence of insns should be generated to clear memory instead of a 27159 string clear insn or a library call. Increasing the value will 27160 always make code faster, but eventually incurs high cost in 27161 increased code size. 27162 27163 If you don't define this, a reasonable default is used. 27164 27165 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT) 27166 A C expression used to determine whether `clear_by_pieces' will be 27167 used to clear a chunk of memory, or whether some other block clear 27168 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 27169 returns less than `CLEAR_RATIO'. 27170 27171 -- Macro: SET_RATIO 27172 The threshold of number of scalar move insns, _below_ which a 27173 sequence of insns should be generated to set memory to a constant 27174 value, instead of a block set insn or a library call. Increasing 27175 the value will always make code faster, but eventually incurs high 27176 cost in increased code size. 27177 27178 If you don't define this, it defaults to the value of `MOVE_RATIO'. 27179 27180 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT) 27181 A C expression used to determine whether `store_by_pieces' will be 27182 used to set a chunk of memory to a constant value, or whether some 27183 other mechanism will be used. Used by `__builtin_memset' when 27184 storing values other than constant zero. Defaults to 1 if 27185 `move_by_pieces_ninsns' returns less than `SET_RATIO'. 27186 27187 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT) 27188 A C expression used to determine whether `store_by_pieces' will be 27189 used to set a chunk of memory to a constant string value, or 27190 whether some other mechanism will be used. Used by 27191 `__builtin_strcpy' when called with a constant source string. 27192 Defaults to 1 if `move_by_pieces_ninsns' returns less than 27193 `MOVE_RATIO'. 27194 27195 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 27196 A C expression used to determine whether a load postincrement is a 27197 good thing to use for a given mode. Defaults to the value of 27198 `HAVE_POST_INCREMENT'. 27199 27200 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 27201 A C expression used to determine whether a load postdecrement is a 27202 good thing to use for a given mode. Defaults to the value of 27203 `HAVE_POST_DECREMENT'. 27204 27205 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 27206 A C expression used to determine whether a load preincrement is a 27207 good thing to use for a given mode. Defaults to the value of 27208 `HAVE_PRE_INCREMENT'. 27209 27210 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 27211 A C expression used to determine whether a load predecrement is a 27212 good thing to use for a given mode. Defaults to the value of 27213 `HAVE_PRE_DECREMENT'. 27214 27215 -- Macro: USE_STORE_POST_INCREMENT (MODE) 27216 A C expression used to determine whether a store postincrement is 27217 a good thing to use for a given mode. Defaults to the value of 27218 `HAVE_POST_INCREMENT'. 27219 27220 -- Macro: USE_STORE_POST_DECREMENT (MODE) 27221 A C expression used to determine whether a store postdecrement is 27222 a good thing to use for a given mode. Defaults to the value of 27223 `HAVE_POST_DECREMENT'. 27224 27225 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 27226 This macro is used to determine whether a store preincrement is a 27227 good thing to use for a given mode. Defaults to the value of 27228 `HAVE_PRE_INCREMENT'. 27229 27230 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 27231 This macro is used to determine whether a store predecrement is a 27232 good thing to use for a given mode. Defaults to the value of 27233 `HAVE_PRE_DECREMENT'. 27234 27235 -- Macro: NO_FUNCTION_CSE 27236 Define this macro if it is as good or better to call a constant 27237 function address than to call an address kept in a register. 27238 27239 -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT 27240 Define this macro if a non-short-circuit operation produced by 27241 `fold_range_test ()' is optimal. This macro defaults to true if 27242 `BRANCH_COST' is greater than or equal to the value 2. 27243 27244 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int 27245 OUTER_CODE, int *TOTAL) 27246 This target hook describes the relative costs of RTL expressions. 27247 27248 The cost may depend on the precise form of the expression, which is 27249 available for examination in X, and the rtx code of the expression 27250 in which it is contained, found in OUTER_CODE. CODE is the 27251 expression code--redundant, since it can be obtained with 27252 `GET_CODE (X)'. 27253 27254 In implementing this hook, you can use the construct 27255 `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions. 27256 27257 On entry to the hook, `*TOTAL' contains a default estimate for the 27258 cost of the expression. The hook should modify this value as 27259 necessary. Traditionally, the default costs are `COSTS_N_INSNS 27260 (5)' for multiplications, `COSTS_N_INSNS (7)' for division and 27261 modulus operations, and `COSTS_N_INSNS (1)' for all other 27262 operations. 27263 27264 When optimizing for code size, i.e. when `optimize_size' is 27265 nonzero, this target hook should be used to estimate the relative 27266 size cost of an expression, again relative to `COSTS_N_INSNS'. 27267 27268 The hook returns true when all subexpressions of X have been 27269 processed, and false when `rtx_cost' should recurse. 27270 27271 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS) 27272 This hook computes the cost of an addressing mode that contains 27273 ADDRESS. If not defined, the cost is computed from the ADDRESS 27274 expression and the `TARGET_RTX_COST' hook. 27275 27276 For most CISC machines, the default cost is a good approximation 27277 of the true cost of the addressing mode. However, on RISC 27278 machines, all instructions normally have the same length and 27279 execution time. Hence all addresses will have equal costs. 27280 27281 In cases where more than one form of an address is known, the form 27282 with the lowest cost will be used. If multiple forms have the 27283 same, lowest, cost, the one that is the most complex will be used. 27284 27285 For example, suppose an address that is equal to the sum of a 27286 register and a constant is used twice in the same basic block. 27287 When this macro is not defined, the address will be computed in a 27288 register and memory references will be indirect through that 27289 register. On machines where the cost of the addressing mode 27290 containing the sum is no higher than that of a simple indirect 27291 reference, this will produce an additional instruction and 27292 possibly require an additional register. Proper specification of 27293 this macro eliminates this overhead for such machines. 27294 27295 This hook is never called with an invalid address. 27296 27297 On machines where an address involving more than one register is as 27298 cheap as an address computation involving only one register, 27299 defining `TARGET_ADDRESS_COST' to reflect this can cause two 27300 registers to be live over a region of code where only one would 27301 have been if `TARGET_ADDRESS_COST' were not defined in that 27302 manner. This effect should be considered in the definition of 27303 this macro. Equivalent costs should probably only be given to 27304 addresses with different numbers of registers on machines with 27305 lots of registers. 27306 27307 27308 File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 27309 27310 15.18 Adjusting the Instruction Scheduler 27311 ========================================= 27312 27313 The instruction scheduler may need a fair amount of machine-specific 27314 adjustment in order to produce good code. GCC provides several target 27315 hooks for this purpose. It is usually enough to define just a few of 27316 them: try the first ones in this list first. 27317 27318 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 27319 This hook returns the maximum number of instructions that can ever 27320 issue at the same time on the target machine. The default is one. 27321 Although the insn scheduler can define itself the possibility of 27322 issue an insn on the same cycle, the value can serve as an 27323 additional constraint to issue insns on the same simulated 27324 processor cycle (see hooks `TARGET_SCHED_REORDER' and 27325 `TARGET_SCHED_REORDER2'). This value must be constant over the 27326 entire compilation. If you need it to vary depending on what the 27327 instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'. 27328 27329 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 27330 VERBOSE, rtx INSN, int MORE) 27331 This hook is executed by the scheduler after it has scheduled an 27332 insn from the ready list. It should return the number of insns 27333 which can still be issued in the current cycle. The default is 27334 `MORE - 1' for insns other than `CLOBBER' and `USE', which 27335 normally are not counted against the issue rate. You should 27336 define this hook if some insns take more machine resources than 27337 others, so that fewer insns can follow them in the same cycle. 27338 FILE is either a null pointer, or a stdio stream to write any 27339 debug output to. VERBOSE is the verbose level provided by 27340 `-fsched-verbose-N'. INSN is the instruction that was scheduled. 27341 27342 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx 27343 DEP_INSN, int COST) 27344 This function corrects the value of COST based on the relationship 27345 between INSN and DEP_INSN through the dependence LINK. It should 27346 return the new value. The default is to make no adjustment to 27347 COST. This can be used for example to specify to the scheduler 27348 using the traditional pipeline description that an output- or 27349 anti-dependence does not incur the same cost as a data-dependence. 27350 If the scheduler using the automaton based pipeline description, 27351 the cost of anti-dependence is zero and the cost of 27352 output-dependence is maximum of one and the difference of latency 27353 times of the first and the second insns. If these values are not 27354 acceptable, you could use the hook to modify them too. See also 27355 *note Processor pipeline description::. 27356 27357 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int 27358 PRIORITY) 27359 This hook adjusts the integer scheduling priority PRIORITY of 27360 INSN. It should return the new priority. Increase the priority to 27361 execute INSN earlier, reduce the priority to execute INSN later. 27362 Do not define this hook if you do not need to adjust the 27363 scheduling priorities of insns. 27364 27365 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx 27366 *READY, int *N_READYP, int CLOCK) 27367 This hook is executed by the scheduler after it has scheduled the 27368 ready list, to allow the machine description to reorder it (for 27369 example to combine two small instructions together on `VLIW' 27370 machines). FILE is either a null pointer, or a stdio stream to 27371 write any debug output to. VERBOSE is the verbose level provided 27372 by `-fsched-verbose-N'. READY is a pointer to the ready list of 27373 instructions that are ready to be scheduled. N_READYP is a 27374 pointer to the number of elements in the ready list. The scheduler 27375 reads the ready list in reverse order, starting with 27376 READY[*N_READYP-1] and going to READY[0]. CLOCK is the timer tick 27377 of the scheduler. You may modify the ready list and the number of 27378 ready insns. The return value is the number of insns that can 27379 issue this cycle; normally this is just `issue_rate'. See also 27380 `TARGET_SCHED_REORDER2'. 27381 27382 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 27383 rtx *READY, int *N_READY, CLOCK) 27384 Like `TARGET_SCHED_REORDER', but called at a different time. That 27385 function is called whenever the scheduler starts a new cycle. 27386 This one is called once per iteration over a cycle, immediately 27387 after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list 27388 and return the number of insns to be scheduled in the same cycle. 27389 Defining this hook can be useful if there are frequent situations 27390 where scheduling one insn causes other insns to become ready in 27391 the same cycle. These other insns can then be taken into account 27392 properly. 27393 27394 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx 27395 HEAD, rtx TAIL) 27396 This hook is called after evaluation forward dependencies of insns 27397 in chain given by two parameter values (HEAD and TAIL 27398 correspondingly) but before insns scheduling of the insn chain. 27399 For example, it can be used for better insn classification if it 27400 requires analysis of dependencies. This hook can use backward and 27401 forward dependencies of the insn scheduler because they are already 27402 calculated. 27403 27404 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 27405 MAX_READY) 27406 This hook is executed by the scheduler at the beginning of each 27407 block of instructions that are to be scheduled. FILE is either a 27408 null pointer, or a stdio stream to write any debug output to. 27409 VERBOSE is the verbose level provided by `-fsched-verbose-N'. 27410 MAX_READY is the maximum number of insns in the current scheduling 27411 region that can be live at the same time. This can be used to 27412 allocate scratch space if it is needed, e.g. by 27413 `TARGET_SCHED_REORDER'. 27414 27415 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 27416 This hook is executed by the scheduler at the end of each block of 27417 instructions that are to be scheduled. It can be used to perform 27418 cleanup of any actions done by the other scheduling hooks. FILE 27419 is either a null pointer, or a stdio stream to write any debug 27420 output to. VERBOSE is the verbose level provided by 27421 `-fsched-verbose-N'. 27422 27423 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int 27424 VERBOSE, int OLD_MAX_UID) 27425 This hook is executed by the scheduler after function level 27426 initializations. FILE is either a null pointer, or a stdio stream 27427 to write any debug output to. VERBOSE is the verbose level 27428 provided by `-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 27429 uid when scheduling begins. 27430 27431 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 27432 VERBOSE) 27433 This is the cleanup hook corresponding to 27434 `TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 27435 stdio stream to write any debug output to. VERBOSE is the verbose 27436 level provided by `-fsched-verbose-N'. 27437 27438 -- Target Hook: int TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 27439 The hook returns an RTL insn. The automaton state used in the 27440 pipeline hazard recognizer is changed as if the insn were scheduled 27441 when the new simulated processor cycle starts. Usage of the hook 27442 may simplify the automaton pipeline description for some VLIW 27443 processors. If the hook is defined, it is used only for the 27444 automaton based pipeline description. The default is not to 27445 change the state when the new simulated processor cycle starts. 27446 27447 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 27448 The hook can be used to initialize data used by the previous hook. 27449 27450 -- Target Hook: int TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 27451 The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 27452 to changed the state as if the insn were scheduled when the new 27453 simulated processor cycle finishes. 27454 27455 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 27456 The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 27457 used to initialize data used by the previous hook. 27458 27459 -- Target Hook: void TARGET_SCHED_DFA_PRE_CYCLE_ADVANCE (void) 27460 The hook to notify target that the current simulated cycle is 27461 about to finish. The hook is analogous to 27462 `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 27463 more complicated situations - e.g., when advancing state on a 27464 single insn is not enough. 27465 27466 -- Target Hook: void TARGET_SCHED_DFA_POST_CYCLE_ADVANCE (void) 27467 The hook to notify target that new simulated cycle has just 27468 started. The hook is analogous to 27469 `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 27470 more complicated situations - e.g., when advancing state on a 27471 single insn is not enough. 27472 27473 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 27474 (void) 27475 This hook controls better choosing an insn from the ready insn 27476 queue for the DFA-based insn scheduler. Usually the scheduler 27477 chooses the first insn from the queue. If the hook returns a 27478 positive value, an additional scheduler code tries all 27479 permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 27480 ()' subsequent ready insns to choose an insn whose issue will 27481 result in maximal number of issued insns on the same cycle. For 27482 the VLIW processor, the code could actually solve the problem of 27483 packing simple insns into the VLIW insn. Of course, if the rules 27484 of VLIW packing are described in the automaton. 27485 27486 This code also could be used for superscalar RISC processors. Let 27487 us consider a superscalar RISC processor with 3 pipelines. Some 27488 insns can be executed in pipelines A or B, some insns can be 27489 executed only in pipelines B or C, and one insn can be executed in 27490 pipeline B. The processor may issue the 1st insn into A and the 27491 2nd one into B. In this case, the 3rd insn will wait for freeing B 27492 until the next cycle. If the scheduler issues the 3rd insn the 27493 first, the processor could issue all 3 insns per cycle. 27494 27495 Actually this code demonstrates advantages of the automaton based 27496 pipeline hazard recognizer. We try quickly and easy many insn 27497 schedules to choose the best one. 27498 27499 The default is no multipass scheduling. 27500 27501 -- Target Hook: int 27502 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx) 27503 This hook controls what insns from the ready insn queue will be 27504 considered for the multipass insn scheduling. If the hook returns 27505 zero for insn passed as the parameter, the insn will be not chosen 27506 to be issued. 27507 27508 The default is that any ready insns can be chosen to be issued. 27509 27510 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *, int, rtx, int, 27511 int, int *) 27512 This hook is called by the insn scheduler before issuing insn 27513 passed as the third parameter on given cycle. If the hook returns 27514 nonzero, the insn is not issued on given processors cycle. 27515 Instead of that, the processor cycle is advanced. If the value 27516 passed through the last parameter is zero, the insn ready queue is 27517 not sorted on the new cycle start as usually. The first parameter 27518 passes file for debugging output. The second one passes the 27519 scheduler verbose level of the debugging output. The forth and 27520 the fifth parameter values are correspondingly processor cycle on 27521 which the previous insn has been issued and the current processor 27522 cycle. 27523 27524 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct dep_def 27525 *_DEP, int COST, int DISTANCE) 27526 This hook is used to define which dependences are considered 27527 costly by the target, so costly that it is not advisable to 27528 schedule the insns that are involved in the dependence too close 27529 to one another. The parameters to this hook are as follows: The 27530 first parameter _DEP is the dependence being evaluated. The 27531 second parameter COST is the cost of the dependence, and the third 27532 parameter DISTANCE is the distance in cycles between the two insns. 27533 The hook returns `true' if considering the distance between the two 27534 insns the dependence between them is considered costly by the 27535 target, and `false' otherwise. 27536 27537 Defining this hook can be useful in multiple-issue out-of-order 27538 machines, where (a) it's practically hopeless to predict the 27539 actual data/resource delays, however: (b) there's a better chance 27540 to predict the actual grouping that will be formed, and (c) 27541 correctly emulating the grouping can be very important. In such 27542 targets one may want to allow issuing dependent insns closer to 27543 one another--i.e., closer than the dependence distance; however, 27544 not in cases of "costly dependences", which this hooks allows to 27545 define. 27546 27547 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 27548 This hook is called by the insn scheduler after emitting a new 27549 instruction to the instruction stream. The hook notifies a target 27550 backend to extend its per instruction data structures. 27551 27552 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int 27553 REQUEST, rtx *NEW_PAT) 27554 This hook is called by the insn scheduler when INSN has only 27555 speculative dependencies and therefore can be scheduled 27556 speculatively. The hook is used to check if the pattern of INSN 27557 has a speculative version and, in case of successful check, to 27558 generate that speculative pattern. The hook should return 1, if 27559 the instruction has a speculative form, or -1, if it doesn't. 27560 REQUEST describes the type of requested speculation. If the 27561 return value equals 1 then NEW_PAT is assigned the generated 27562 speculative pattern. 27563 27564 -- Target Hook: int TARGET_SCHED_NEEDS_BLOCK_P (rtx INSN) 27565 This hook is called by the insn scheduler during generation of 27566 recovery code for INSN. It should return nonzero, if the 27567 corresponding check instruction should branch to recovery code, or 27568 zero otherwise. 27569 27570 -- Target Hook: rtx TARGET_SCHED_GEN_CHECK (rtx INSN, rtx LABEL, int 27571 MUTATE_P) 27572 This hook is called by the insn scheduler to generate a pattern 27573 for recovery check instruction. If MUTATE_P is zero, then INSN is 27574 a speculative instruction for which the check should be generated. 27575 LABEL is either a label of a basic block, where recovery code 27576 should be emitted, or a null pointer, when requested check doesn't 27577 branch to recovery code (a simple check). If MUTATE_P is nonzero, 27578 then a pattern for a branchy check corresponding to a simple check 27579 denoted by INSN should be generated. In this case LABEL can't be 27580 null. 27581 27582 -- Target Hook: int 27583 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (rtx INSN) 27584 This hook is used as a workaround for 27585 `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being 27586 called on the first instruction of the ready list. The hook is 27587 used to discard speculative instruction that stand first in the 27588 ready list from being scheduled on the current cycle. For 27589 non-speculative instructions, the hook should always return 27590 nonzero. For example, in the ia64 backend the hook is used to 27591 cancel data speculative insns when the ALAT table is nearly full. 27592 27593 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (unsigned int 27594 *FLAGS, spec_info_t SPEC_INFO) 27595 This hook is used by the insn scheduler to find out what features 27596 should be enabled/used. FLAGS initially may have either the 27597 SCHED_RGN or SCHED_EBB bit set. This denotes the scheduler pass 27598 for which the data should be provided. The target backend should 27599 modify FLAGS by modifying the bits corresponding to the following 27600 features: USE_DEPS_LIST, USE_GLAT, DETACH_LIFE_INFO, and 27601 DO_SPECULATION. For the DO_SPECULATION feature an additional 27602 structure SPEC_INFO should be filled by the target. The structure 27603 describes speculation types that can be used in the scheduler. 27604 27605 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 27606 This hook is called by the swing modulo scheduler to calculate a 27607 resource-based lower bound which is based on the resources 27608 available in the machine and the resources required by each 27609 instruction. The target backend can use G to calculate such 27610 bound. A very simple lower bound will be used in case this hook 27611 is not implemented: the total number of instructions divided by 27612 the issue rate. 27613 27614 27615 File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 27616 27617 15.19 Dividing the Output into Sections (Texts, Data, ...) 27618 ========================================================== 27619 27620 An object file is divided into sections containing different types of 27621 data. In the most common case, there are three sections: the "text 27622 section", which holds instructions and read-only data; the "data 27623 section", which holds initialized writable data; and the "bss section", 27624 which holds uninitialized data. Some systems have other kinds of 27625 sections. 27626 27627 `varasm.c' provides several well-known sections, such as 27628 `text_section', `data_section' and `bss_section'. The normal way of 27629 controlling a `FOO_section' variable is to define the associated 27630 `FOO_SECTION_ASM_OP' macro, as described below. The macros are only 27631 read once, when `varasm.c' initializes itself, so their values must be 27632 run-time constants. They may however depend on command-line flags. 27633 27634 _Note:_ Some run-time files, such `crtstuff.c', also make use of the 27635 `FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 27636 27637 Some assemblers require a different string to be written every time a 27638 section is selected. If your assembler falls into this category, you 27639 should define the `TARGET_ASM_INIT_SECTIONS' hook and use 27640 `get_unnamed_section' to set up the sections. 27641 27642 You must always create a `text_section', either by defining 27643 `TEXT_SECTION_ASM_OP' or by initializing `text_section' in 27644 `TARGET_ASM_INIT_SECTIONS'. The same is true of `data_section' and 27645 `DATA_SECTION_ASM_OP'. If you do not create a distinct 27646 `readonly_data_section', the default is to reuse `text_section'. 27647 27648 All the other `varasm.c' sections are optional, and are null if the 27649 target does not provide them. 27650 27651 -- Macro: TEXT_SECTION_ASM_OP 27652 A C expression whose value is a string, including spacing, 27653 containing the assembler operation that should precede 27654 instructions and read-only data. Normally `"\t.text"' is right. 27655 27656 -- Macro: HOT_TEXT_SECTION_NAME 27657 If defined, a C string constant for the name of the section 27658 containing most frequently executed functions of the program. If 27659 not defined, GCC will provide a default definition if the target 27660 supports named sections. 27661 27662 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 27663 If defined, a C string constant for the name of the section 27664 containing unlikely executed functions in the program. 27665 27666 -- Macro: DATA_SECTION_ASM_OP 27667 A C expression whose value is a string, including spacing, 27668 containing the assembler operation to identify the following data 27669 as writable initialized data. Normally `"\t.data"' is right. 27670 27671 -- Macro: SDATA_SECTION_ASM_OP 27672 If defined, a C expression whose value is a string, including 27673 spacing, containing the assembler operation to identify the 27674 following data as initialized, writable small data. 27675 27676 -- Macro: READONLY_DATA_SECTION_ASM_OP 27677 A C expression whose value is a string, including spacing, 27678 containing the assembler operation to identify the following data 27679 as read-only initialized data. 27680 27681 -- Macro: BSS_SECTION_ASM_OP 27682 If defined, a C expression whose value is a string, including 27683 spacing, containing the assembler operation to identify the 27684 following data as uninitialized global data. If not defined, and 27685 neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, 27686 uninitialized global data will be output in the data section if 27687 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be 27688 used. 27689 27690 -- Macro: SBSS_SECTION_ASM_OP 27691 If defined, a C expression whose value is a string, including 27692 spacing, containing the assembler operation to identify the 27693 following data as uninitialized, writable small data. 27694 27695 -- Macro: INIT_SECTION_ASM_OP 27696 If defined, a C expression whose value is a string, including 27697 spacing, containing the assembler operation to identify the 27698 following data as initialization code. If not defined, GCC will 27699 assume such a section does not exist. This section has no 27700 corresponding `init_section' variable; it is used entirely in 27701 runtime code. 27702 27703 -- Macro: FINI_SECTION_ASM_OP 27704 If defined, a C expression whose value is a string, including 27705 spacing, containing the assembler operation to identify the 27706 following data as finalization code. If not defined, GCC will 27707 assume such a section does not exist. This section has no 27708 corresponding `fini_section' variable; it is used entirely in 27709 runtime code. 27710 27711 -- Macro: INIT_ARRAY_SECTION_ASM_OP 27712 If defined, a C expression whose value is a string, including 27713 spacing, containing the assembler operation to identify the 27714 following data as part of the `.init_array' (or equivalent) 27715 section. If not defined, GCC will assume such a section does not 27716 exist. Do not define both this macro and `INIT_SECTION_ASM_OP'. 27717 27718 -- Macro: FINI_ARRAY_SECTION_ASM_OP 27719 If defined, a C expression whose value is a string, including 27720 spacing, containing the assembler operation to identify the 27721 following data as part of the `.fini_array' (or equivalent) 27722 section. If not defined, GCC will assume such a section does not 27723 exist. Do not define both this macro and `FINI_SECTION_ASM_OP'. 27724 27725 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 27726 If defined, an ASM statement that switches to a different section 27727 via SECTION_OP, calls FUNCTION, and switches back to the text 27728 section. This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or 27729 `FINI_SECTION_ASM_OP' to calls to initialization and finalization 27730 functions from the init and fini sections. By default, this macro 27731 uses a simple function call. Some ports need hand-crafted 27732 assembly code to avoid dependencies on registers initialized in 27733 the function prologue or to ensure that constant pools don't end 27734 up too far way in the text section. 27735 27736 -- Macro: TARGET_LIBGCC_SDATA_SECTION 27737 If defined, a string which names the section into which small 27738 variables defined in crtstuff and libgcc should go. This is useful 27739 when the target has options for optimizing access to small data, 27740 and you want the crtstuff and libgcc routines to be conservative 27741 in what they expect of your application yet liberal in what your 27742 application expects. For example, for targets with a `.sdata' 27743 section (like MIPS), you could compile crtstuff with `-G 0' so 27744 that it doesn't require small data support from your application, 27745 but use this macro to put small data into `.sdata' so that your 27746 application can access these variables whether it uses small data 27747 or not. 27748 27749 -- Macro: FORCE_CODE_SECTION_ALIGN 27750 If defined, an ASM statement that aligns a code section to some 27751 arbitrary boundary. This is used to force all fragments of the 27752 `.init' and `.fini' sections to have to same alignment and thus 27753 prevent the linker from having to add any padding. 27754 27755 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 27756 Define this macro to be an expression with a nonzero value if jump 27757 tables (for `tablejump' insns) should be output in the text 27758 section, along with the assembler instructions. Otherwise, the 27759 readonly data section is used. 27760 27761 This macro is irrelevant if there is no separate readonly data 27762 section. 27763 27764 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 27765 Define this hook if you need to do something special to set up the 27766 `varasm.c' sections, or if your target has some special sections 27767 of its own that you need to create. 27768 27769 GCC calls this hook after processing the command line, but before 27770 writing any assembly code, and before calling any of the 27771 section-returning hooks described below. 27772 27773 -- Target Hook: TARGET_ASM_RELOC_RW_MASK (void) 27774 Return a mask describing how relocations should be treated when 27775 selecting sections. Bit 1 should be set if global relocations 27776 should be placed in a read-write section; bit 0 should be set if 27777 local relocations should be placed in a read-write section. 27778 27779 The default version of this function returns 3 when `-fpic' is in 27780 effect, and 0 otherwise. The hook is typically redefined when the 27781 target cannot support (some kinds of) dynamic relocations in 27782 read-only sections even in executables. 27783 27784 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 27785 RELOC, unsigned HOST_WIDE_INT ALIGN) 27786 Return the section into which EXP should be placed. You can 27787 assume that EXP is either a `VAR_DECL' node or a constant of some 27788 sort. RELOC indicates whether the initial value of EXP requires 27789 link-time relocations. Bit 0 is set when variable contains local 27790 relocations only, while bit 1 is set for global relocations. 27791 ALIGN is the constant alignment in bits. 27792 27793 The default version of this function takes care of putting 27794 read-only variables in `readonly_data_section'. 27795 27796 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 27797 27798 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 27799 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 27800 called for `FUNCTION_DECL's as well as for variables and constants. 27801 27802 In the case of a `FUNCTION_DECL', RELOC will be zero if the 27803 function has been determined to be likely to be called, and 27804 nonzero if it is unlikely to be called. 27805 27806 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 27807 Build up a unique section name, expressed as a `STRING_CST' node, 27808 and assign it to `DECL_SECTION_NAME (DECL)'. As with 27809 `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 27810 value of EXP requires link-time relocations. 27811 27812 The default version of this function appends the symbol name to the 27813 ELF section name that would normally be used for the symbol. For 27814 example, the function `foo' would be placed in `.text.foo'. 27815 Whatever the actual target object format, this is often good 27816 enough. 27817 27818 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 27819 DECL) 27820 Return the readonly data section associated with 27821 `DECL_SECTION_NAME (DECL)'. The default version of this function 27822 selects `.gnu.linkonce.r.name' if the function's section is 27823 `.gnu.linkonce.t.name', `.rodata.name' if function is in 27824 `.text.name', and the normal readonly-data section otherwise. 27825 27826 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum 27827 machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 27828 Return the section into which a constant X, of mode MODE, should 27829 be placed. You can assume that X is some kind of constant in RTL. 27830 The argument MODE is redundant except in the case of a 27831 `const_int' rtx. ALIGN is the constant alignment in bits. 27832 27833 The default version of this function takes care of putting symbolic 27834 constants in `flag_pic' mode in `data_section' and everything else 27835 in `readonly_data_section'. 27836 27837 -- Target Hook: void TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, 27838 tree ID) 27839 Define this hook if you need to postprocess the assembler name 27840 generated by target-independent code. The ID provided to this 27841 hook will be the computed name (e.g., the macro `DECL_NAME' of the 27842 DECL in C, or the mangled name of the DECL in C++). The return 27843 value of the hook is an `IDENTIFIER_NODE' for the appropriate 27844 mangled name on your target system. The default implementation of 27845 this hook just returns the ID provided. 27846 27847 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 27848 int NEW_DECL_P) 27849 Define this hook if references to a symbol or a constant must be 27850 treated differently depending on something about the variable or 27851 function named by the symbol (such as what section it is in). 27852 27853 The hook is executed immediately after rtl has been created for 27854 DECL, which may be a variable or function declaration or an entry 27855 in the constant pool. In either case, RTL is the rtl in question. 27856 Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not 27857 have been initialized yet. 27858 27859 In the case of a constant, it is safe to assume that the rtl is a 27860 `mem' whose address is a `symbol_ref'. Most decls will also have 27861 this form, but that is not guaranteed. Global register variables, 27862 for instance, will have a `reg' for their rtl. (Normally the 27863 right thing to do with such unusual rtl is leave it alone.) 27864 27865 The NEW_DECL_P argument will be true if this is the first time 27866 that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. 27867 It will be false for subsequent invocations, which will happen for 27868 duplicate declarations. Whether or not anything must be done for 27869 the duplicate declaration depends on whether the hook examines 27870 `DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 27871 called for a constant. 27872 27873 The usual thing for this hook to do is to record flags in the 27874 `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'. 27875 Historically, the name string was modified if it was necessary to 27876 encode more than one bit of information, but this practice is now 27877 discouraged; use `SYMBOL_REF_FLAGS'. 27878 27879 The default definition of this hook, `default_encode_section_info' 27880 in `varasm.c', sets a number of commonly-useful bits in 27881 `SYMBOL_REF_FLAGS'. Check whether the default does what you need 27882 before overriding it. 27883 27884 -- Target Hook: const char *TARGET_STRIP_NAME_ENCODING (const char 27885 *name) 27886 Decode NAME and return the real name part, sans the characters 27887 that `TARGET_ENCODE_SECTION_INFO' may have added. 27888 27889 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (tree EXP) 27890 Returns true if EXP should be placed into a "small data" section. 27891 The default version of this hook always returns false. 27892 27893 -- Variable: Target Hook bool TARGET_HAVE_SRODATA_SECTION 27894 Contains the value true if the target places read-only "small 27895 data" into a separate section. The default value is false. 27896 27897 -- Target Hook: bool TARGET_BINDS_LOCAL_P (tree EXP) 27898 Returns true if EXP names an object for which name resolution 27899 rules must resolve to the current "module" (dynamic shared library 27900 or executable image). 27901 27902 The default version of this hook implements the name resolution 27903 rules for ELF, which has a looser model of global name binding 27904 than other currently supported object file formats. 27905 27906 -- Variable: Target Hook bool TARGET_HAVE_TLS 27907 Contains the value true if the target supports thread-local 27908 storage. The default value is false. 27909 27910 27911 File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 27912 27913 15.20 Position Independent Code 27914 =============================== 27915 27916 This section describes macros that help implement generation of position 27917 independent code. Simply defining these macros is not enough to 27918 generate valid PIC; you must also add support to the macros 27919 `GO_IF_LEGITIMATE_ADDRESS' and `PRINT_OPERAND_ADDRESS', as well as 27920 `LEGITIMIZE_ADDRESS'. You must modify the definition of `movsi' to do 27921 something appropriate when the source operand contains a symbolic 27922 address. You may also need to alter the handling of switch statements 27923 so that they use relative addresses. 27924 27925 -- Macro: PIC_OFFSET_TABLE_REGNUM 27926 The register number of the register used to address a table of 27927 static data addresses in memory. In some cases this register is 27928 defined by a processor's "application binary interface" (ABI). 27929 When this macro is defined, RTL is generated for this register 27930 once, as with the stack pointer and frame pointer registers. If 27931 this macro is not defined, it is up to the machine-dependent files 27932 to allocate such a register (if necessary). Note that this 27933 register must be fixed when in use (e.g. when `flag_pic' is true). 27934 27935 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 27936 Define this macro if the register defined by 27937 `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. Do not define 27938 this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined. 27939 27940 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 27941 A C expression that is nonzero if X is a legitimate immediate 27942 operand on the target machine when generating position independent 27943 code. You can assume that X satisfies `CONSTANT_P', so you need 27944 not check this. You can also assume FLAG_PIC is true, so you need 27945 not check it either. You need not define this macro if all 27946 constants (including `SYMBOL_REF') can be immediate operands when 27947 generating position independent code. 27948 27949 27950 File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 27951 27952 15.21 Defining the Output Assembler Language 27953 ============================================ 27954 27955 This section describes macros whose principal purpose is to describe how 27956 to write instructions in assembler language--rather than what the 27957 instructions do. 27958 27959 * Menu: 27960 27961 * File Framework:: Structural information for the assembler file. 27962 * Data Output:: Output of constants (numbers, strings, addresses). 27963 * Uninitialized Data:: Output of uninitialized variables. 27964 * Label Output:: Output and generation of labels. 27965 * Initialization:: General principles of initialization 27966 and termination routines. 27967 * Macros for Initialization:: 27968 Specific macros that control the handling of 27969 initialization and termination routines. 27970 * Instruction Output:: Output of actual instructions. 27971 * Dispatch Tables:: Output of jump tables. 27972 * Exception Region Output:: Output of exception region code. 27973 * Alignment Output:: Pseudo ops for alignment and skipping data. 27974 27975 27976 File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 27977 27978 15.21.1 The Overall Framework of an Assembler File 27979 -------------------------------------------------- 27980 27981 This describes the overall framework of an assembly file. 27982 27983 -- Target Hook: void TARGET_ASM_FILE_START () 27984 Output to `asm_out_file' any text which the assembler expects to 27985 find at the beginning of a file. The default behavior is 27986 controlled by two flags, documented below. Unless your target's 27987 assembler is quite unusual, if you override the default, you 27988 should call `default_file_start' at some point in your target 27989 hook. This lets other target files rely on these variables. 27990 27991 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 27992 If this flag is true, the text of the macro `ASM_APP_OFF' will be 27993 printed as the very first line in the assembly file, unless 27994 `-fverbose-asm' is in effect. (If that macro has been defined to 27995 the empty string, this variable has no effect.) With the normal 27996 definition of `ASM_APP_OFF', the effect is to notify the GNU 27997 assembler that it need not bother stripping comments or extra 27998 whitespace from its input. This allows it to work a bit faster. 27999 28000 The default is false. You should not set it to true unless you 28001 have verified that your port does not generate any extra 28002 whitespace or comments that will cause GAS to issue errors in 28003 NO_APP mode. 28004 28005 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 28006 If this flag is true, `output_file_directive' will be called for 28007 the primary source file, immediately after printing `ASM_APP_OFF' 28008 (if that is enabled). Most ELF assemblers expect this to be done. 28009 The default is false. 28010 28011 -- Target Hook: void TARGET_ASM_FILE_END () 28012 Output to `asm_out_file' any text which the assembler expects to 28013 find at the end of a file. The default is to output nothing. 28014 28015 -- Function: void file_end_indicate_exec_stack () 28016 Some systems use a common convention, the `.note.GNU-stack' 28017 special section, to indicate whether or not an object file relies 28018 on the stack being executable. If your system uses this 28019 convention, you should define `TARGET_ASM_FILE_END' to this 28020 function. If you need to do other things in that hook, have your 28021 hook function call this function. 28022 28023 -- Macro: ASM_COMMENT_START 28024 A C string constant describing how to begin a comment in the target 28025 assembler language. The compiler assumes that the comment will 28026 end at the end of the line. 28027 28028 -- Macro: ASM_APP_ON 28029 A C string constant for text to be output before each `asm' 28030 statement or group of consecutive ones. Normally this is 28031 `"#APP"', which is a comment that has no effect on most assemblers 28032 but tells the GNU assembler that it must check the lines that 28033 follow for all valid assembler constructs. 28034 28035 -- Macro: ASM_APP_OFF 28036 A C string constant for text to be output after each `asm' 28037 statement or group of consecutive ones. Normally this is 28038 `"#NO_APP"', which tells the GNU assembler to resume making the 28039 time-saving assumptions that are valid for ordinary compiler 28040 output. 28041 28042 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 28043 A C statement to output COFF information or DWARF debugging 28044 information which indicates that filename NAME is the current 28045 source file to the stdio stream STREAM. 28046 28047 This macro need not be defined if the standard form of output for 28048 the file format in use is appropriate. 28049 28050 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 28051 A C statement to output the string STRING to the stdio stream 28052 STREAM. If you do not call the function `output_quoted_string' in 28053 your config files, GCC will only call it to output filenames to 28054 the assembler source. So you can use it to canonicalize the format 28055 of the filename using this macro. 28056 28057 -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING) 28058 A C statement to output something to the assembler file to handle a 28059 `#ident' directive containing the text STRING. If this macro is 28060 not defined, nothing is output for a `#ident' directive. 28061 28062 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 28063 unsigned int FLAGS, unsigned int ALIGN) 28064 Output assembly directives to switch to section NAME. The section 28065 should have attributes as specified by FLAGS, which is a bit mask 28066 of the `SECTION_*' flags defined in `output.h'. If ALIGN is 28067 nonzero, it contains an alignment in bytes to be used for the 28068 section, otherwise some target default should be used. Only 28069 targets that must specify an alignment within the section 28070 directive need pay attention to ALIGN - we will still use 28071 `ASM_OUTPUT_ALIGN'. 28072 28073 -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 28074 This flag is true if the target supports 28075 `TARGET_ASM_NAMED_SECTION'. 28076 28077 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 28078 This flag is true if we can create zeroed data by switching to a 28079 BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space. 28080 This is true on most ELF targets. 28081 28082 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 28083 const char *NAME, int RELOC) 28084 Choose a set of section attributes for use by 28085 `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 28086 section name, and whether or not the declaration's initializer may 28087 contain runtime relocations. DECL may be null, in which case 28088 read-write data should be assumed. 28089 28090 The default version of this function handles choosing code vs data, 28091 read-only vs read-write data, and `flag_pic'. You should only 28092 need to override this if your target has special flags that might 28093 be set via `__attribute__'. 28094 28095 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 28096 TYPE, const char * TEXT) 28097 Provides the target with the ability to record the gcc command line 28098 switches that have been passed to the compiler, and options that 28099 are enabled. The TYPE argument specifies what is being recorded. 28100 It can take the following values: 28101 28102 `SWITCH_TYPE_PASSED' 28103 TEXT is a command line switch that has been set by the user. 28104 28105 `SWITCH_TYPE_ENABLED' 28106 TEXT is an option which has been enabled. This might be as a 28107 direct result of a command line switch, or because it is 28108 enabled by default or because it has been enabled as a side 28109 effect of a different command line switch. For example, the 28110 `-O2' switch enables various different individual 28111 optimization passes. 28112 28113 `SWITCH_TYPE_DESCRIPTIVE' 28114 TEXT is either NULL or some descriptive text which should be 28115 ignored. If TEXT is NULL then it is being used to warn the 28116 target hook that either recording is starting or ending. The 28117 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 28118 the warning is for start up and the second time the warning 28119 is for wind down. This feature is to allow the target hook 28120 to make any necessary preparations before it starts to record 28121 switches and to perform any necessary tidying up after it has 28122 finished recording switches. 28123 28124 `SWITCH_TYPE_LINE_START' 28125 This option can be ignored by this target hook. 28126 28127 `SWITCH_TYPE_LINE_END' 28128 This option can be ignored by this target hook. 28129 28130 The hook's return value must be zero. Other return values may be 28131 supported in the future. 28132 28133 By default this hook is set to NULL, but an example implementation 28134 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 28135 it records the switches as ASCII text inside a new, string 28136 mergeable section in the assembler output file. The name of the 28137 new section is provided by the 28138 `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 28139 28140 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 28141 This is the name of the section that will be created by the example 28142 ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target 28143 hook. 28144 28145 28146 File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 28147 28148 15.21.2 Output of Data 28149 ---------------------- 28150 28151 -- Target Hook: const char * TARGET_ASM_BYTE_OP 28152 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 28153 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 28154 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 28155 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 28156 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 28157 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 28158 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 28159 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 28160 These hooks specify assembly directives for creating certain kinds 28161 of integer object. The `TARGET_ASM_BYTE_OP' directive creates a 28162 byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an 28163 aligned two-byte object, and so on. Any of the hooks may be 28164 `NULL', indicating that no suitable directive is available. 28165 28166 The compiler will print these strings at the start of a new line, 28167 followed immediately by the object's initial value. In most cases, 28168 the string should contain a tab, a pseudo-op, and then another tab. 28169 28170 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 28171 ALIGNED_P) 28172 The `assemble_integer' function uses this hook to output an 28173 integer object. X is the object's value, SIZE is its size in 28174 bytes and ALIGNED_P indicates whether it is aligned. The function 28175 should return `true' if it was able to output the object. If it 28176 returns false, `assemble_integer' will try to split the object 28177 into smaller parts. 28178 28179 The default implementation of this hook will use the 28180 `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the 28181 relevant string is `NULL'. 28182 28183 -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL) 28184 A C statement to recognize RTX patterns that `output_addr_const' 28185 can't deal with, and output assembly code to STREAM corresponding 28186 to the pattern X. This may be used to allow machine-dependent 28187 `UNSPEC's to appear within constants. 28188 28189 If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must 28190 `goto fail', so that a standard error message is printed. If it 28191 prints an error message itself, by calling, for example, 28192 `output_operand_lossage', it may just complete normally. 28193 28194 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 28195 A C statement to output to the stdio stream STREAM an assembler 28196 instruction to assemble a string constant containing the LEN bytes 28197 at PTR. PTR will be a C expression of type `char *' and LEN a C 28198 expression of type `int'. 28199 28200 If the assembler has a `.ascii' pseudo-op as found in the Berkeley 28201 Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'. 28202 28203 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 28204 A C statement to output word N of a function descriptor for DECL. 28205 This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is 28206 defined, and is otherwise unused. 28207 28208 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 28209 You may define this macro as a C expression. You should define the 28210 expression to have a nonzero value if GCC should output the 28211 constant pool for a function before the code for the function, or 28212 a zero value if GCC should output the constant pool after the 28213 function. If you do not define this macro, the usual case, GCC 28214 will output the constant pool before the function. 28215 28216 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 28217 A C statement to output assembler commands to define the start of 28218 the constant pool for a function. FUNNAME is a string giving the 28219 name of the function. Should the return type of the function be 28220 required, it can be obtained via FUNDECL. SIZE is the size, in 28221 bytes, of the constant pool that will be written immediately after 28222 this call. 28223 28224 If no constant-pool prefix is required, the usual case, this macro 28225 need not be defined. 28226 28227 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, 28228 LABELNO, JUMPTO) 28229 A C statement (with or without semicolon) to output a constant in 28230 the constant pool, if it needs special treatment. (This macro 28231 need not do anything for RTL expressions that can be output 28232 normally.) 28233 28234 The argument FILE is the standard I/O stream to output the 28235 assembler code on. X is the RTL expression for the constant to 28236 output, and MODE is the machine mode (in case X is a `const_int'). 28237 ALIGN is the required alignment for the value X; you should 28238 output an assembler directive to force this much alignment. 28239 28240 The argument LABELNO is a number to use in an internal label for 28241 the address of this pool entry. The definition of this macro is 28242 responsible for outputting the label definition at the proper 28243 place. Here is how to do this: 28244 28245 `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO); 28246 28247 When you output a pool entry specially, you should end with a 28248 `goto' to the label JUMPTO. This will prevent the same pool entry 28249 from being output a second time in the usual manner. 28250 28251 You need not define this macro if it would do nothing. 28252 28253 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 28254 A C statement to output assembler commands to at the end of the 28255 constant pool for a function. FUNNAME is a string giving the name 28256 of the function. Should the return type of the function be 28257 required, you can obtain it via FUNDECL. SIZE is the size, in 28258 bytes, of the constant pool that GCC wrote immediately before this 28259 call. 28260 28261 If no constant-pool epilogue is required, the usual case, you need 28262 not define this macro. 28263 28264 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 28265 Define this macro as a C expression which is nonzero if C is used 28266 as a logical line separator by the assembler. STR points to the 28267 position in the string where C was found; this can be used if a 28268 line separator uses multiple characters. 28269 28270 If you do not define this macro, the default is that only the 28271 character `;' is treated as a logical line separator. 28272 28273 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 28274 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 28275 These target hooks are C string constants, describing the syntax 28276 in the assembler for grouping arithmetic expressions. If not 28277 overridden, they default to normal parentheses, which is correct 28278 for most assemblers. 28279 28280 These macros are provided by `real.h' for writing the definitions of 28281 `ASM_OUTPUT_DOUBLE' and the like: 28282 28283 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 28284 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 28285 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 28286 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 28287 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 28288 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 28289 These translate X, of type `REAL_VALUE_TYPE', to the target's 28290 floating point representation, and store its bit pattern in the 28291 variable L. For `REAL_VALUE_TO_TARGET_SINGLE' and 28292 `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 28293 `long int'. For the others, it should be an array of `long int'. 28294 The number of elements in this array is determined by the size of 28295 the desired target floating point data type: 32 bits of it go in 28296 each `long int' array element. Each array element holds 32 bits 28297 of the result, even if `long int' is wider than 32 bits on the 28298 host machine. 28299 28300 The array element values are designed so that you can print them 28301 out using `fprintf' in the order they should appear in the target 28302 machine's memory. 28303 28304 28305 File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 28306 28307 15.21.3 Output of Uninitialized Variables 28308 ----------------------------------------- 28309 28310 Each of the macros in this section is used to do the whole job of 28311 outputting a single uninitialized variable. 28312 28313 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 28314 A C statement (sans semicolon) to output to the stdio stream 28315 STREAM the assembler definition of a common-label named NAME whose 28316 size is SIZE bytes. The variable ROUNDED is the size rounded up 28317 to whatever alignment the caller wants. 28318 28319 Use the expression `assemble_name (STREAM, NAME)' to output the 28320 name itself; before and after that, output the additional 28321 assembler syntax for defining the name, and a newline. 28322 28323 This macro controls how the assembler definitions of uninitialized 28324 common global variables are output. 28325 28326 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 28327 Like `ASM_OUTPUT_COMMON' except takes the required alignment as a 28328 separate, explicit argument. If you define this macro, it is used 28329 in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in 28330 handling the required alignment of the variable. The alignment is 28331 specified as the number of bits. 28332 28333 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 28334 ALIGNMENT) 28335 Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 28336 to be output, if there is one, or `NULL_TREE' if there is no 28337 corresponding variable. If you define this macro, GCC will use it 28338 in place of both `ASM_OUTPUT_COMMON' and 28339 `ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 28340 see the variable's decl in order to chose what to output. 28341 28342 -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED) 28343 A C statement (sans semicolon) to output to the stdio stream 28344 STREAM the assembler definition of uninitialized global DECL named 28345 NAME whose size is SIZE bytes. The variable ROUNDED is the size 28346 rounded up to whatever alignment the caller wants. 28347 28348 Try to use function `asm_output_bss' defined in `varasm.c' when 28349 defining this macro. If unable, use the expression `assemble_name 28350 (STREAM, NAME)' to output the name itself; before and after that, 28351 output the additional assembler syntax for defining the name, and 28352 a newline. 28353 28354 There are two ways of handling global BSS. One is to define either 28355 this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'. 28356 The other is to have `TARGET_ASM_SELECT_SECTION' return a 28357 switchable BSS section (*note 28358 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 28359 both. 28360 28361 Some languages do not have `common' data, and require a non-common 28362 form of global BSS in order to handle uninitialized globals 28363 efficiently. C++ is one example of this. However, if the target 28364 does not support global BSS, the front end may choose to make 28365 globals common in order to save space in the object file. 28366 28367 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 28368 Like `ASM_OUTPUT_BSS' except takes the required alignment as a 28369 separate, explicit argument. If you define this macro, it is used 28370 in place of `ASM_OUTPUT_BSS', and gives you more flexibility in 28371 handling the required alignment of the variable. The alignment is 28372 specified as the number of bits. 28373 28374 Try to use function `asm_output_aligned_bss' defined in file 28375 `varasm.c' when defining this macro. 28376 28377 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 28378 A C statement (sans semicolon) to output to the stdio stream 28379 STREAM the assembler definition of a local-common-label named NAME 28380 whose size is SIZE bytes. The variable ROUNDED is the size 28381 rounded up to whatever alignment the caller wants. 28382 28383 Use the expression `assemble_name (STREAM, NAME)' to output the 28384 name itself; before and after that, output the additional 28385 assembler syntax for defining the name, and a newline. 28386 28387 This macro controls how the assembler definitions of uninitialized 28388 static variables are output. 28389 28390 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 28391 Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a 28392 separate, explicit argument. If you define this macro, it is used 28393 in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in 28394 handling the required alignment of the variable. The alignment is 28395 specified as the number of bits. 28396 28397 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 28398 ALIGNMENT) 28399 Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 28400 be output, if there is one, or `NULL_TREE' if there is no 28401 corresponding variable. If you define this macro, GCC will use it 28402 in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'. 28403 Define this macro when you need to see the variable's decl in 28404 order to chose what to output. 28405 28406 28407 File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 28408 28409 15.21.4 Output and Generation of Labels 28410 --------------------------------------- 28411 28412 This is about outputting labels. 28413 28414 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 28415 A C statement (sans semicolon) to output to the stdio stream 28416 STREAM the assembler definition of a label named NAME. Use the 28417 expression `assemble_name (STREAM, NAME)' to output the name 28418 itself; before and after that, output the additional assembler 28419 syntax for defining the name, and a newline. A default definition 28420 of this macro is provided which is correct for most systems. 28421 28422 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 28423 Identical to `ASM_OUTPUT_LABEL', except that NAME is known to 28424 refer to a compiler-generated label. The default definition uses 28425 `assemble_name_raw', which is like `assemble_name' except that it 28426 is more efficient. 28427 28428 -- Macro: SIZE_ASM_OP 28429 A C string containing the appropriate assembler directive to 28430 specify the size of a symbol, without any arguments. On systems 28431 that use ELF, the default (in `config/elfos.h') is `"\t.size\t"'; 28432 on other systems, the default is not to define this macro. 28433 28434 Define this macro only if it is correct to use the default 28435 definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and 28436 `ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 28437 custom definitions of those macros, or if you do not need explicit 28438 symbol sizes at all, do not define this macro. 28439 28440 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 28441 A C statement (sans semicolon) to output to the stdio stream 28442 STREAM a directive telling the assembler that the size of the 28443 symbol NAME is SIZE. SIZE is a `HOST_WIDE_INT'. If you define 28444 `SIZE_ASM_OP', a default definition of this macro is provided. 28445 28446 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 28447 A C statement (sans semicolon) to output to the stdio stream 28448 STREAM a directive telling the assembler to calculate the size of 28449 the symbol NAME by subtracting its address from the current 28450 address. 28451 28452 If you define `SIZE_ASM_OP', a default definition of this macro is 28453 provided. The default assumes that the assembler recognizes a 28454 special `.' symbol as referring to the current address, and can 28455 calculate the difference between this and another symbol. If your 28456 assembler does not recognize `.' or cannot do calculations with 28457 it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use 28458 some other technique. 28459 28460 -- Macro: TYPE_ASM_OP 28461 A C string containing the appropriate assembler directive to 28462 specify the type of a symbol, without any arguments. On systems 28463 that use ELF, the default (in `config/elfos.h') is `"\t.type\t"'; 28464 on other systems, the default is not to define this macro. 28465 28466 Define this macro only if it is correct to use the default 28467 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 28468 need your own custom definition of this macro, or if you do not 28469 need explicit symbol types at all, do not define this macro. 28470 28471 -- Macro: TYPE_OPERAND_FMT 28472 A C string which specifies (using `printf' syntax) the format of 28473 the second operand to `TYPE_ASM_OP'. On systems that use ELF, the 28474 default (in `config/elfos.h') is `"@%s"'; on other systems, the 28475 default is not to define this macro. 28476 28477 Define this macro only if it is correct to use the default 28478 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 28479 need your own custom definition of this macro, or if you do not 28480 need explicit symbol types at all, do not define this macro. 28481 28482 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 28483 A C statement (sans semicolon) to output to the stdio stream 28484 STREAM a directive telling the assembler that the type of the 28485 symbol NAME is TYPE. TYPE is a C string; currently, that string 28486 is always either `"function"' or `"object"', but you should not 28487 count on this. 28488 28489 If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default 28490 definition of this macro is provided. 28491 28492 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 28493 A C statement (sans semicolon) to output to the stdio stream 28494 STREAM any text necessary for declaring the name NAME of a 28495 function which is being defined. This macro is responsible for 28496 outputting the label definition (perhaps using 28497 `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL' 28498 tree node representing the function. 28499 28500 If this macro is not defined, then the function name is defined in 28501 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 28502 28503 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 28504 of this macro. 28505 28506 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 28507 A C statement (sans semicolon) to output to the stdio stream 28508 STREAM any text necessary for declaring the size of a function 28509 which is being defined. The argument NAME is the name of the 28510 function. The argument DECL is the `FUNCTION_DECL' tree node 28511 representing the function. 28512 28513 If this macro is not defined, then the function size is not 28514 defined. 28515 28516 You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition 28517 of this macro. 28518 28519 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 28520 A C statement (sans semicolon) to output to the stdio stream 28521 STREAM any text necessary for declaring the name NAME of an 28522 initialized variable which is being defined. This macro must 28523 output the label definition (perhaps using `ASM_OUTPUT_LABEL'). 28524 The argument DECL is the `VAR_DECL' tree node representing the 28525 variable. 28526 28527 If this macro is not defined, then the variable name is defined in 28528 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 28529 28530 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or 28531 `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 28532 28533 -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE) 28534 A C statement (sans semicolon) to output to the stdio stream 28535 STREAM any text necessary for declaring the name NAME of a 28536 constant which is being defined. This macro is responsible for 28537 outputting the label definition (perhaps using 28538 `ASM_OUTPUT_LABEL'). The argument EXP is the value of the 28539 constant, and SIZE is the size of the constant in bytes. NAME 28540 will be an internal label. 28541 28542 If this macro is not defined, then the NAME is defined in the 28543 usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 28544 28545 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 28546 of this macro. 28547 28548 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 28549 A C statement (sans semicolon) to output to the stdio stream 28550 STREAM any text necessary for claiming a register REGNO for a 28551 global variable DECL with name NAME. 28552 28553 If you don't define this macro, that is equivalent to defining it 28554 to do nothing. 28555 28556 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 28557 A C statement (sans semicolon) to finish up declaring a variable 28558 name once the compiler has processed its initializer fully and 28559 thus has had a chance to determine the size of an array when 28560 controlled by an initializer. This is used on systems where it's 28561 necessary to declare something about the size of the object. 28562 28563 If you don't define this macro, that is equivalent to defining it 28564 to do nothing. 28565 28566 You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or 28567 `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 28568 28569 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 28570 char *NAME) 28571 This target hook is a function to output to the stdio stream 28572 STREAM some commands that will make the label NAME global; that 28573 is, available for reference from other files. 28574 28575 The default implementation relies on a proper definition of 28576 `GLOBAL_ASM_OP'. 28577 28578 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, 28579 tree DECL) 28580 This target hook is a function to output to the stdio stream 28581 STREAM some commands that will make the name associated with DECL 28582 global; that is, available for reference from other files. 28583 28584 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 28585 target hook. 28586 28587 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 28588 A C statement (sans semicolon) to output to the stdio stream 28589 STREAM some commands that will make the label NAME weak; that is, 28590 available for reference from other files but only used if no other 28591 definition is available. Use the expression `assemble_name 28592 (STREAM, NAME)' to output the name itself; before and after that, 28593 output the additional assembler syntax for making that name weak, 28594 and a newline. 28595 28596 If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not 28597 support weak symbols and you should not define the `SUPPORTS_WEAK' 28598 macro. 28599 28600 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 28601 Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and 28602 `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 28603 or variable decl. If VALUE is not `NULL', this C statement should 28604 output to the stdio stream STREAM assembler code which defines 28605 (equates) the weak symbol NAME to have the value VALUE. If VALUE 28606 is `NULL', it should output commands to make NAME weak. 28607 28608 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 28609 Outputs a directive that enables NAME to be used to refer to 28610 symbol VALUE with weak-symbol semantics. `decl' is the 28611 declaration of `name'. 28612 28613 -- Macro: SUPPORTS_WEAK 28614 A C expression which evaluates to true if the target supports weak 28615 symbols. 28616 28617 If you don't define this macro, `defaults.h' provides a default 28618 definition. If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is 28619 defined, the default definition is `1'; otherwise, it is `0'. 28620 Define this macro if you want to control weak symbol support with 28621 a compiler flag such as `-melf'. 28622 28623 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 28624 A C statement (sans semicolon) to mark DECL to be emitted as a 28625 public symbol such that extra copies in multiple translation units 28626 will be discarded by the linker. Define this macro if your object 28627 file format provides support for this concept, such as the `COMDAT' 28628 section flags in the Microsoft Windows PE/COFF format, and this 28629 support requires changes to DECL, such as putting it in a separate 28630 section. 28631 28632 -- Macro: SUPPORTS_ONE_ONLY 28633 A C expression which evaluates to true if the target supports 28634 one-only semantics. 28635 28636 If you don't define this macro, `varasm.c' provides a default 28637 definition. If `MAKE_DECL_ONE_ONLY' is defined, the default 28638 definition is `1'; otherwise, it is `0'. Define this macro if you 28639 want to control one-only symbol support with a compiler flag, or if 28640 setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to 28641 be emitted as one-only. 28642 28643 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, const 28644 char *VISIBILITY) 28645 This target hook is a function to output to ASM_OUT_FILE some 28646 commands that will make the symbol(s) associated with DECL have 28647 hidden, protected or internal visibility as specified by 28648 VISIBILITY. 28649 28650 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 28651 A C expression that evaluates to true if the target's linker 28652 expects that weak symbols do not appear in a static archive's 28653 table of contents. The default is `0'. 28654 28655 Leaving weak symbols out of an archive's table of contents means 28656 that, if a symbol will only have a definition in one translation 28657 unit and will have undefined references from other translation 28658 units, that symbol should not be weak. Defining this macro to be 28659 nonzero will thus have the effect that certain symbols that would 28660 normally be weak (explicit template instantiations, and vtables 28661 for polymorphic classes with noninline key methods) will instead 28662 be nonweak. 28663 28664 The C++ ABI requires this macro to be zero. Define this macro for 28665 targets where full C++ ABI compliance is impossible and where 28666 linker restrictions require weak symbols to be left out of a 28667 static archive's table of contents. 28668 28669 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 28670 A C statement (sans semicolon) to output to the stdio stream 28671 STREAM any text necessary for declaring the name of an external 28672 symbol named NAME which is referenced in this compilation but not 28673 defined. The value of DECL is the tree node for the declaration. 28674 28675 This macro need not be defined if it does not need to output 28676 anything. The GNU assembler and most Unix assemblers don't 28677 require anything. 28678 28679 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 28680 This target hook is a function to output to ASM_OUT_FILE an 28681 assembler pseudo-op to declare a library function name external. 28682 The name of the library function is given by SYMREF, which is a 28683 `symbol_ref'. 28684 28685 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (tree DECL) 28686 This target hook is a function to output to ASM_OUT_FILE an 28687 assembler directive to annotate used symbol. Darwin target use 28688 .no_dead_code_strip directive. 28689 28690 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 28691 A C statement (sans semicolon) to output to the stdio stream 28692 STREAM a reference in assembler syntax to a label named NAME. 28693 This should add `_' to the front of the name, if that is customary 28694 on your operating system, as it is in most Berkeley Unix systems. 28695 This macro is used in `assemble_name'. 28696 28697 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 28698 A C statement (sans semicolon) to output a reference to 28699 `SYMBOL_REF' SYM. If not defined, `assemble_name' will be used to 28700 output the name of the symbol. This macro may be used to modify 28701 the way a symbol is referenced depending on information encoded by 28702 `TARGET_ENCODE_SECTION_INFO'. 28703 28704 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 28705 A C statement (sans semicolon) to output a reference to BUF, the 28706 result of `ASM_GENERATE_INTERNAL_LABEL'. If not defined, 28707 `assemble_name' will be used to output the name of the symbol. 28708 This macro is not used by `output_asm_label', or the `%l' 28709 specifier that calls it; the intention is that this macro should 28710 be set when it is necessary to output a label differently when its 28711 address is being taken. 28712 28713 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 28714 char *PREFIX, unsigned long LABELNO) 28715 A function to output to the stdio stream STREAM a label whose name 28716 is made from the string PREFIX and the number LABELNO. 28717 28718 It is absolutely essential that these labels be distinct from the 28719 labels used for user-level functions and variables. Otherwise, 28720 certain programs will have name conflicts with internal labels. 28721 28722 It is desirable to exclude internal labels from the symbol table 28723 of the object file. Most assemblers have a naming convention for 28724 labels that should be excluded; on many systems, the letter `L' at 28725 the beginning of a label has this effect. You should find out what 28726 convention your system uses, and follow it. 28727 28728 The default version of this function utilizes 28729 `ASM_GENERATE_INTERNAL_LABEL'. 28730 28731 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 28732 A C statement to output to the stdio stream STREAM a debug info 28733 label whose name is made from the string PREFIX and the number 28734 NUM. This is useful for VLIW targets, where debug info labels may 28735 need to be treated differently than branch target labels. On some 28736 systems, branch target labels must be at the beginning of 28737 instruction bundles, but debug info labels can occur in the middle 28738 of instruction bundles. 28739 28740 If this macro is not defined, then 28741 `(*targetm.asm_out.internal_label)' will be used. 28742 28743 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 28744 A C statement to store into the string STRING a label whose name 28745 is made from the string PREFIX and the number NUM. 28746 28747 This string, when output subsequently by `assemble_name', should 28748 produce the output that `(*targetm.asm_out.internal_label)' would 28749 produce with the same PREFIX and NUM. 28750 28751 If the string begins with `*', then `assemble_name' will output 28752 the rest of the string unchanged. It is often convenient for 28753 `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way. If the 28754 string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to 28755 output the string, and may change it. (Of course, 28756 `ASM_OUTPUT_LABELREF' is also part of your machine description, so 28757 you should know what it does on your machine.) 28758 28759 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 28760 A C expression to assign to OUTVAR (which is a variable of type 28761 `char *') a newly allocated string made from the string NAME and 28762 the number NUMBER, with some suitable punctuation added. Use 28763 `alloca' to get space for the string. 28764 28765 The string will be used as an argument to `ASM_OUTPUT_LABELREF' to 28766 produce an assembler label for an internal static variable whose 28767 name is NAME. Therefore, the string must be such as to result in 28768 valid assembler code. The argument NUMBER is different each time 28769 this macro is executed; it prevents conflicts between 28770 similarly-named internal static variables in different scopes. 28771 28772 Ideally this string should not be a valid C identifier, to prevent 28773 any conflict with the user's own symbols. Most assemblers allow 28774 periods or percent signs in assembler symbols; putting at least 28775 one of these between the name and the number will suffice. 28776 28777 If this macro is not defined, a default definition will be provided 28778 which is correct for most systems. 28779 28780 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 28781 A C statement to output to the stdio stream STREAM assembler code 28782 which defines (equates) the symbol NAME to have the value VALUE. 28783 28784 If `SET_ASM_OP' is defined, a default definition is provided which 28785 is correct for most systems. 28786 28787 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 28788 DECL_OF_VALUE) 28789 A C statement to output to the stdio stream STREAM assembler code 28790 which defines (equates) the symbol whose tree node is DECL_OF_NAME 28791 to have the value of the tree node DECL_OF_VALUE. This macro will 28792 be used in preference to `ASM_OUTPUT_DEF' if it is defined and if 28793 the tree nodes are available. 28794 28795 If `SET_ASM_OP' is defined, a default definition is provided which 28796 is correct for most systems. 28797 28798 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 28799 A C statement that evaluates to true if the assembler code which 28800 defines (equates) the symbol whose tree node is DECL_OF_NAME to 28801 have the value of the tree node DECL_OF_VALUE should be emitted 28802 near the end of the current compilation unit. The default is to 28803 not defer output of defines. This macro affects defines output by 28804 `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'. 28805 28806 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 28807 A C statement to output to the stdio stream STREAM assembler code 28808 which defines (equates) the weak symbol NAME to have the value 28809 VALUE. If VALUE is `NULL', it defines NAME as an undefined weak 28810 symbol. 28811 28812 Define this macro if the target only supports weak aliases; define 28813 `ASM_OUTPUT_DEF' instead if possible. 28814 28815 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 28816 SEL_NAME) 28817 Define this macro to override the default assembler names used for 28818 Objective-C methods. 28819 28820 The default name is a unique method number followed by the name of 28821 the class (e.g. `_1_Foo'). For methods in categories, the name of 28822 the category is also included in the assembler name (e.g. 28823 `_1_Foo_Bar'). 28824 28825 These names are safe on most systems, but make debugging difficult 28826 since the method's selector is not present in the name. 28827 Therefore, particular systems define other ways of computing names. 28828 28829 BUF is an expression of type `char *' which gives you a buffer in 28830 which to store the name; its length is as long as CLASS_NAME, 28831 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 28832 28833 The argument IS_INST specifies whether the method is an instance 28834 method or a class method; CLASS_NAME is the name of the class; 28835 CAT_NAME is the name of the category (or `NULL' if the method is 28836 not in a category); and SEL_NAME is the name of the selector. 28837 28838 On systems where the assembler can handle quoted names, you can 28839 use this macro to provide more human-readable names. 28840 28841 -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME) 28842 A C statement (sans semicolon) to output to the stdio stream 28843 STREAM commands to declare that the label NAME is an Objective-C 28844 class reference. This is only needed for targets whose linkers 28845 have special support for NeXT-style runtimes. 28846 28847 -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME) 28848 A C statement (sans semicolon) to output to the stdio stream 28849 STREAM commands to declare that the label NAME is an unresolved 28850 Objective-C class reference. This is only needed for targets 28851 whose linkers have special support for NeXT-style runtimes. 28852 28853 28854 File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 28855 28856 15.21.5 How Initialization Functions Are Handled 28857 ------------------------------------------------ 28858 28859 The compiled code for certain languages includes "constructors" (also 28860 called "initialization routines")--functions to initialize data in the 28861 program when the program is started. These functions need to be called 28862 before the program is "started"--that is to say, before `main' is 28863 called. 28864 28865 Compiling some languages generates "destructors" (also called 28866 "termination routines") that should be called when the program 28867 terminates. 28868 28869 To make the initialization and termination functions work, the compiler 28870 must output something in the assembler code to cause those functions to 28871 be called at the appropriate time. When you port the compiler to a new 28872 system, you need to specify how to do this. 28873 28874 There are two major ways that GCC currently supports the execution of 28875 initialization and termination functions. Each way has two variants. 28876 Much of the structure is common to all four variations. 28877 28878 The linker must build two lists of these functions--a list of 28879 initialization functions, called `__CTOR_LIST__', and a list of 28880 termination functions, called `__DTOR_LIST__'. 28881 28882 Each list always begins with an ignored function pointer (which may 28883 hold 0, -1, or a count of the function pointers after it, depending on 28884 the environment). This is followed by a series of zero or more function 28885 pointers to constructors (or destructors), followed by a function 28886 pointer containing zero. 28887 28888 Depending on the operating system and its executable file format, 28889 either `crtstuff.c' or `libgcc2.c' traverses these lists at startup 28890 time and exit time. Constructors are called in reverse order of the 28891 list; destructors in forward order. 28892 28893 The best way to handle static constructors works only for object file 28894 formats which provide arbitrarily-named sections. A section is set 28895 aside for a list of constructors, and another for a list of destructors. 28896 Traditionally these are called `.ctors' and `.dtors'. Each object file 28897 that defines an initialization function also puts a word in the 28898 constructor section to point to that function. The linker accumulates 28899 all these words into one contiguous `.ctors' section. Termination 28900 functions are handled similarly. 28901 28902 This method will be chosen as the default by `target-def.h' if 28903 `TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 28904 arbitrary sections, but does support special designated constructor and 28905 destructor sections may define `CTORS_SECTION_ASM_OP' and 28906 `DTORS_SECTION_ASM_OP' to achieve the same effect. 28907 28908 When arbitrary sections are available, there are two variants, 28909 depending upon how the code in `crtstuff.c' is called. On systems that 28910 support a ".init" section which is executed at program startup, parts 28911 of `crtstuff.c' are compiled into that section. The program is linked 28912 by the `gcc' driver like this: 28913 28914 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 28915 28916 The prologue of a function (`__init') appears in the `.init' section 28917 of `crti.o'; the epilogue appears in `crtn.o'. Likewise for the 28918 function `__fini' in the ".fini" section. Normally these files are 28919 provided by the operating system or by the GNU C library, but are 28920 provided by GCC for a few targets. 28921 28922 The objects `crtbegin.o' and `crtend.o' are (for most targets) 28923 compiled from `crtstuff.c'. They contain, among other things, code 28924 fragments within the `.init' and `.fini' sections that branch to 28925 routines in the `.text' section. The linker will pull all parts of a 28926 section together, which results in a complete `__init' function that 28927 invokes the routines we need at startup. 28928 28929 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro 28930 properly. 28931 28932 If no init section is available, when GCC compiles any function called 28933 `main' (or more accurately, any function designated as a program entry 28934 point by the language front end calling `expand_main_function'), it 28935 inserts a procedure call to `__main' as the first executable code after 28936 the function prologue. The `__main' function is defined in `libgcc2.c' 28937 and runs the global constructors. 28938 28939 In file formats that don't support arbitrary sections, there are again 28940 two variants. In the simplest variant, the GNU linker (GNU `ld') and 28941 an `a.out' format must be used. In this case, `TARGET_ASM_CONSTRUCTOR' 28942 is defined to produce a `.stabs' entry of type `N_SETT', referencing 28943 the name `__CTOR_LIST__', and with the address of the void function 28944 containing the initialization code as its value. The GNU linker 28945 recognizes this as a request to add the value to a "set"; the values 28946 are accumulated, and are eventually placed in the executable as a 28947 vector in the format described above, with a leading (ignored) count 28948 and a trailing zero element. `TARGET_ASM_DESTRUCTOR' is handled 28949 similarly. Since no init section is available, the absence of 28950 `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main' 28951 as above, starting the initialization process. 28952 28953 The last variant uses neither arbitrary sections nor the GNU linker. 28954 This is preferable when you want to do dynamic linking and when using 28955 file formats which the GNU linker does not support, such as `ECOFF'. In 28956 this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and 28957 termination functions are recognized simply by their names. This 28958 requires an extra program in the linkage step, called `collect2'. This 28959 program pretends to be the linker, for use with GCC; it does its job by 28960 running the ordinary linker, but also arranges to include the vectors of 28961 initialization and termination functions. These functions are called 28962 via `__main' as described above. In order to use this method, 28963 `use_collect2' must be defined in the target in `config.gcc'. 28964 28965 The following section describes the specific macros that control and 28966 customize the handling of initialization and termination functions. 28967 28968 28969 File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 28970 28971 15.21.6 Macros Controlling Initialization Routines 28972 -------------------------------------------------- 28973 28974 Here are the macros that control how the compiler handles initialization 28975 and termination functions: 28976 28977 -- Macro: INIT_SECTION_ASM_OP 28978 If defined, a C string constant, including spacing, for the 28979 assembler operation to identify the following data as 28980 initialization code. If not defined, GCC will assume such a 28981 section does not exist. When you are using special sections for 28982 initialization and termination functions, this macro also controls 28983 how `crtstuff.c' and `libgcc2.c' arrange to run the initialization 28984 functions. 28985 28986 -- Macro: HAS_INIT_SECTION 28987 If defined, `main' will not call `__main' as described above. 28988 This macro should be defined for systems that control start-up code 28989 on a symbol-by-symbol basis, such as OSF/1, and should not be 28990 defined explicitly for systems that support `INIT_SECTION_ASM_OP'. 28991 28992 -- Macro: LD_INIT_SWITCH 28993 If defined, a C string constant for a switch that tells the linker 28994 that the following symbol is an initialization routine. 28995 28996 -- Macro: LD_FINI_SWITCH 28997 If defined, a C string constant for a switch that tells the linker 28998 that the following symbol is a finalization routine. 28999 29000 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 29001 If defined, a C statement that will write a function that can be 29002 automatically called when a shared library is loaded. The function 29003 should call FUNC, which takes no arguments. If not defined, and 29004 the object format requires an explicit initialization function, 29005 then a function called `_GLOBAL__DI' will be generated. 29006 29007 This function and the following one are used by collect2 when 29008 linking a shared library that needs constructors or destructors, 29009 or has DWARF2 exception tables embedded in the code. 29010 29011 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 29012 If defined, a C statement that will write a function that can be 29013 automatically called when a shared library is unloaded. The 29014 function should call FUNC, which takes no arguments. If not 29015 defined, and the object format requires an explicit finalization 29016 function, then a function called `_GLOBAL__DD' will be generated. 29017 29018 -- Macro: INVOKE__main 29019 If defined, `main' will call `__main' despite the presence of 29020 `INIT_SECTION_ASM_OP'. This macro should be defined for systems 29021 where the init section is not actually run automatically, but is 29022 still useful for collecting the lists of constructors and 29023 destructors. 29024 29025 -- Macro: SUPPORTS_INIT_PRIORITY 29026 If nonzero, the C++ `init_priority' attribute is supported and the 29027 compiler should emit instructions to control the order of 29028 initialization of objects. If zero, the compiler will issue an 29029 error message upon encountering an `init_priority' attribute. 29030 29031 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 29032 This value is true if the target supports some "native" method of 29033 collecting constructors and destructors to be run at startup and 29034 exit. It is false if we must use `collect2'. 29035 29036 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 29037 If defined, a function that outputs assembler code to arrange to 29038 call the function referenced by SYMBOL at initialization time. 29039 29040 Assume that SYMBOL is a `SYMBOL_REF' for a function taking no 29041 arguments and with no return value. If the target supports 29042 initialization priorities, PRIORITY is a value between 0 and 29043 `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'. 29044 29045 If this macro is not defined by the target, a suitable default will 29046 be chosen if (1) the target supports arbitrary section names, (2) 29047 the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2' 29048 is not defined. 29049 29050 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 29051 This is like `TARGET_ASM_CONSTRUCTOR' but used for termination 29052 functions rather than initialization functions. 29053 29054 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 29055 generated for the generated object file will have static linkage. 29056 29057 If your system uses `collect2' as the means of processing 29058 constructors, then that program normally uses `nm' to scan an object 29059 file for constructor functions to be called. 29060 29061 On certain kinds of systems, you can define this macro to make 29062 `collect2' work faster (and, in some cases, make it work at all): 29063 29064 -- Macro: OBJECT_FORMAT_COFF 29065 Define this macro if the system uses COFF (Common Object File 29066 Format) object files, so that `collect2' can assume this format 29067 and scan object files directly for dynamic constructor/destructor 29068 functions. 29069 29070 This macro is effective only in a native compiler; `collect2' as 29071 part of a cross compiler always uses `nm' for the target machine. 29072 29073 -- Macro: REAL_NM_FILE_NAME 29074 Define this macro as a C string constant containing the file name 29075 to use to execute `nm'. The default is to search the path 29076 normally for `nm'. 29077 29078 If your system supports shared libraries and has a program to list 29079 the dynamic dependencies of a given library or executable, you can 29080 define these macros to enable support for running initialization 29081 and termination functions in shared libraries: 29082 29083 -- Macro: LDD_SUFFIX 29084 Define this macro to a C string constant containing the name of 29085 the program which lists dynamic dependencies, like `"ldd"' under 29086 SunOS 4. 29087 29088 -- Macro: PARSE_LDD_OUTPUT (PTR) 29089 Define this macro to be C code that extracts filenames from the 29090 output of the program denoted by `LDD_SUFFIX'. PTR is a variable 29091 of type `char *' that points to the beginning of a line of output 29092 from `LDD_SUFFIX'. If the line lists a dynamic dependency, the 29093 code must advance PTR to the beginning of the filename on that 29094 line. Otherwise, it must set PTR to `NULL'. 29095 29096 -- Macro: SHLIB_SUFFIX 29097 Define this macro to a C string constant containing the default 29098 shared library extension of the target (e.g., `".so"'). `collect2' 29099 strips version information after this suffix when generating global 29100 constructor and destructor names. This define is only needed on 29101 targets that use `collect2' to process constructors and 29102 destructors. 29103 29104 29105 File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 29106 29107 15.21.7 Output of Assembler Instructions 29108 ---------------------------------------- 29109 29110 This describes assembler instruction output. 29111 29112 -- Macro: REGISTER_NAMES 29113 A C initializer containing the assembler's names for the machine 29114 registers, each one as a C string constant. This is what 29115 translates register numbers in the compiler into assembler 29116 language. 29117 29118 -- Macro: ADDITIONAL_REGISTER_NAMES 29119 If defined, a C initializer for an array of structures containing 29120 a name and a register number. This macro defines additional names 29121 for hard registers, thus allowing the `asm' option in declarations 29122 to refer to registers using alternate names. 29123 29124 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 29125 Define this macro if you are using an unusual assembler that 29126 requires different names for the machine instructions. 29127 29128 The definition is a C statement or statements which output an 29129 assembler instruction opcode to the stdio stream STREAM. The 29130 macro-operand PTR is a variable of type `char *' which points to 29131 the opcode name in its "internal" form--the form that is written 29132 in the machine description. The definition should output the 29133 opcode name to STREAM, performing any translation you desire, and 29134 increment the variable PTR to point at the end of the opcode so 29135 that it will not be output twice. 29136 29137 In fact, your macro definition may process less than the entire 29138 opcode name, or more than the opcode name; but if you want to 29139 process text that includes `%'-sequences to substitute operands, 29140 you must take care of the substitution yourself. Just be sure to 29141 increment PTR over whatever text should not be output normally. 29142 29143 If you need to look at the operand values, they can be found as the 29144 elements of `recog_data.operand'. 29145 29146 If the macro definition does nothing, the instruction is output in 29147 the usual way. 29148 29149 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 29150 If defined, a C statement to be executed just prior to the output 29151 of assembler code for INSN, to modify the extracted operands so 29152 they will be output differently. 29153 29154 Here the argument OPVEC is the vector containing the operands 29155 extracted from INSN, and NOPERANDS is the number of elements of 29156 the vector which contain meaningful data for this insn. The 29157 contents of this vector are what will be used to convert the insn 29158 template into assembler code, so you can change the assembler 29159 output by changing the contents of the vector. 29160 29161 This macro is useful when various assembler syntaxes share a single 29162 file of instruction patterns; by defining this macro differently, 29163 you can cause a large class of instructions to be output 29164 differently (such as with rearranged operands). Naturally, 29165 variations in assembler syntax affecting individual insn patterns 29166 ought to be handled by writing conditional output routines in 29167 those patterns. 29168 29169 If this macro is not defined, it is equivalent to a null statement. 29170 29171 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 29172 A C compound statement to output to stdio stream STREAM the 29173 assembler syntax for an instruction operand X. X is an RTL 29174 expression. 29175 29176 CODE is a value that can be used to specify one of several ways of 29177 printing the operand. It is used when identical operands must be 29178 printed differently depending on the context. CODE comes from the 29179 `%' specification that was used to request printing of the 29180 operand. If the specification was just `%DIGIT' then CODE is 0; 29181 if the specification was `%LTR DIGIT' then CODE is the ASCII code 29182 for LTR. 29183 29184 If X is a register, this macro should print the register's name. 29185 The names can be found in an array `reg_names' whose type is `char 29186 *[]'. `reg_names' is initialized from `REGISTER_NAMES'. 29187 29188 When the machine description has a specification `%PUNCT' (a `%' 29189 followed by a punctuation character), this macro is called with a 29190 null pointer for X and the punctuation character for CODE. 29191 29192 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 29193 A C expression which evaluates to true if CODE is a valid 29194 punctuation character for use in the `PRINT_OPERAND' macro. If 29195 `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 29196 punctuation characters (except for the standard one, `%') are used 29197 in this way. 29198 29199 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 29200 A C compound statement to output to stdio stream STREAM the 29201 assembler syntax for an instruction operand that is a memory 29202 reference whose address is X. X is an RTL expression. 29203 29204 On some machines, the syntax for a symbolic address depends on the 29205 section that the address refers to. On these machines, define the 29206 hook `TARGET_ENCODE_SECTION_INFO' to store the information into the 29207 `symbol_ref', and then check for it here. *Note Assembler 29208 Format::. 29209 29210 -- Macro: DBR_OUTPUT_SEQEND (FILE) 29211 A C statement, to be executed after all slot-filler instructions 29212 have been output. If necessary, call `dbr_sequence_length' to 29213 determine the number of slots filled in a sequence (zero if not 29214 currently outputting a sequence), to decide how many no-ops to 29215 output, or whatever. 29216 29217 Don't define this macro if it has nothing to do, but it is helpful 29218 in reading assembly output if the extent of the delay sequence is 29219 made explicit (e.g. with white space). 29220 29221 Note that output routines for instructions with delay slots must be 29222 prepared to deal with not being output as part of a sequence (i.e. when 29223 the scheduling pass is not run, or when no slot fillers could be 29224 found.) The variable `final_sequence' is null when not processing a 29225 sequence, otherwise it contains the `sequence' rtx being output. 29226 29227 -- Macro: REGISTER_PREFIX 29228 -- Macro: LOCAL_LABEL_PREFIX 29229 -- Macro: USER_LABEL_PREFIX 29230 -- Macro: IMMEDIATE_PREFIX 29231 If defined, C string expressions to be used for the `%R', `%L', 29232 `%U', and `%I' options of `asm_fprintf' (see `final.c'). These 29233 are useful when a single `md' file must support multiple assembler 29234 formats. In that case, the various `tm.h' files can define these 29235 macros differently. 29236 29237 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 29238 If defined this macro should expand to a series of `case' 29239 statements which will be parsed inside the `switch' statement of 29240 the `asm_fprintf' function. This allows targets to define extra 29241 printf formats which may useful when generating their assembler 29242 statements. Note that uppercase letters are reserved for future 29243 generic extensions to asm_fprintf, and so are not available to 29244 target specific code. The output file is given by the parameter 29245 FILE. The varargs input pointer is ARGPTR and the rest of the 29246 format string, starting the character after the one that is being 29247 switched upon, is pointed to by FORMAT. 29248 29249 -- Macro: ASSEMBLER_DIALECT 29250 If your target supports multiple dialects of assembler language 29251 (such as different opcodes), define this macro as a C expression 29252 that gives the numeric index of the assembler language dialect to 29253 use, with zero as the first variant. 29254 29255 If this macro is defined, you may use constructs of the form 29256 `{option0|option1|option2...}' 29257 in the output templates of patterns (*note Output Template::) or 29258 in the first argument of `asm_fprintf'. This construct outputs 29259 `option0', `option1', `option2', etc., if the value of 29260 `ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 29261 within these strings retain their usual meaning. If there are 29262 fewer alternatives within the braces than the value of 29263 `ASSEMBLER_DIALECT', the construct outputs nothing. 29264 29265 If you do not define this macro, the characters `{', `|' and `}' 29266 do not have any special meaning when used in templates or operands 29267 to `asm_fprintf'. 29268 29269 Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX', 29270 `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the 29271 variations in assembler language syntax with that mechanism. 29272 Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax 29273 if the syntax variant are larger and involve such things as 29274 different opcodes or operand order. 29275 29276 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 29277 A C expression to output to STREAM some assembler code which will 29278 push hard register number REGNO onto the stack. The code need not 29279 be optimal, since this macro is used only when profiling. 29280 29281 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 29282 A C expression to output to STREAM some assembler code which will 29283 pop hard register number REGNO off of the stack. The code need 29284 not be optimal, since this macro is used only when profiling. 29285 29286 29287 File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 29288 29289 15.21.8 Output of Dispatch Tables 29290 --------------------------------- 29291 29292 This concerns dispatch tables. 29293 29294 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 29295 A C statement to output to the stdio stream STREAM an assembler 29296 pseudo-instruction to generate a difference between two labels. 29297 VALUE and REL are the numbers of two internal labels. The 29298 definitions of these labels are output using 29299 `(*targetm.asm_out.internal_label)', and they must be printed in 29300 the same way here. For example, 29301 29302 fprintf (STREAM, "\t.word L%d-L%d\n", 29303 VALUE, REL) 29304 29305 You must provide this macro on machines where the addresses in a 29306 dispatch table are relative to the table's own address. If 29307 defined, GCC will also use this macro on all machines when 29308 producing PIC. BODY is the body of the `ADDR_DIFF_VEC'; it is 29309 provided so that the mode and flags can be read. 29310 29311 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 29312 This macro should be provided on machines where the addresses in a 29313 dispatch table are absolute. 29314 29315 The definition should be a C statement to output to the stdio 29316 stream STREAM an assembler pseudo-instruction to generate a 29317 reference to a label. VALUE is the number of an internal label 29318 whose definition is output using 29319 `(*targetm.asm_out.internal_label)'. For example, 29320 29321 fprintf (STREAM, "\t.word L%d\n", VALUE) 29322 29323 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 29324 Define this if the label before a jump-table needs to be output 29325 specially. The first three arguments are the same as for 29326 `(*targetm.asm_out.internal_label)'; the fourth argument is the 29327 jump-table which follows (a `jump_insn' containing an `addr_vec' 29328 or `addr_diff_vec'). 29329 29330 This feature is used on system V to output a `swbeg' statement for 29331 the table. 29332 29333 If this macro is not defined, these labels are output with 29334 `(*targetm.asm_out.internal_label)'. 29335 29336 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 29337 Define this if something special must be output at the end of a 29338 jump-table. The definition should be a C statement to be executed 29339 after the assembler code for the table is written. It should write 29340 the appropriate code to stdio stream STREAM. The argument TABLE 29341 is the jump-table insn, and NUM is the label-number of the 29342 preceding label. 29343 29344 If this macro is not defined, nothing special is output at the end 29345 of the jump-table. 29346 29347 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (STREAM, DECL, 29348 FOR_EH, EMPTY) 29349 This target hook emits a label at the beginning of each FDE. It 29350 should be defined on targets where FDEs need special labels, and it 29351 should write the appropriate label, for the FDE associated with the 29352 function declaration DECL, to the stdio stream STREAM. The third 29353 argument, FOR_EH, is a boolean: true if this is for an exception 29354 table. The fourth argument, EMPTY, is a boolean: true if this is 29355 a placeholder label for an omitted FDE. 29356 29357 The default is that FDEs are not given nonlocal labels. 29358 29359 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (STREAM) 29360 This target hook emits a label at the beginning of the exception 29361 table. It should be defined on targets where it is desirable for 29362 the table to be broken up according to function. 29363 29364 The default is that no label is emitted. 29365 29366 -- Target Hook: void TARGET_UNWIND_EMIT (FILE * STREAM, rtx INSN) 29367 This target hook emits and assembly directives required to unwind 29368 the given instruction. This is only used when TARGET_UNWIND_INFO 29369 is set. 29370 29371 29372 File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 29373 29374 15.21.9 Assembler Commands for Exception Regions 29375 ------------------------------------------------ 29376 29377 This describes commands marking the start and the end of an exception 29378 region. 29379 29380 -- Macro: EH_FRAME_SECTION_NAME 29381 If defined, a C string constant for the name of the section 29382 containing exception handling frame unwind information. If not 29383 defined, GCC will provide a default definition if the target 29384 supports named sections. `crtstuff.c' uses this macro to switch 29385 to the appropriate section. 29386 29387 You should define this symbol if your target supports DWARF 2 frame 29388 unwind information and the default definition does not work. 29389 29390 -- Macro: EH_FRAME_IN_DATA_SECTION 29391 If defined, DWARF 2 frame unwind information will be placed in the 29392 data section even though the target supports named sections. This 29393 might be necessary, for instance, if the system linker does garbage 29394 collection and sections cannot be marked as not to be collected. 29395 29396 Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also 29397 defined. 29398 29399 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 29400 Define this macro to 1 if your target is such that no frame unwind 29401 information encoding used with non-PIC code will ever require a 29402 runtime relocation, but the linker may not support merging 29403 read-only and read-write sections into a single read-write section. 29404 29405 -- Macro: MASK_RETURN_ADDR 29406 An rtx used to mask the return address found via 29407 `RETURN_ADDR_RTX', so that it does not contain any extraneous set 29408 bits in it. 29409 29410 -- Macro: DWARF2_UNWIND_INFO 29411 Define this macro to 0 if your target supports DWARF 2 frame unwind 29412 information, but it does not yet work with exception handling. 29413 Otherwise, if your target supports this information (if it defines 29414 `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or 29415 `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1. 29416 29417 If `TARGET_UNWIND_INFO' is defined, the target specific unwinder 29418 will be used in all cases. Defining this macro will enable the 29419 generation of DWARF 2 frame debugging information. 29420 29421 If `TARGET_UNWIND_INFO' is not defined, and this macro is defined 29422 to 1, the DWARF 2 unwinder will be the default exception handling 29423 mechanism; otherwise, the `setjmp'/`longjmp'-based scheme will be 29424 used by default. 29425 29426 -- Macro: TARGET_UNWIND_INFO 29427 Define this macro if your target has ABI specified unwind tables. 29428 Usually these will be output by `TARGET_UNWIND_EMIT'. 29429 29430 -- Variable: Target Hook bool TARGET_UNWIND_TABLES_DEFAULT 29431 This variable should be set to `true' if the target ABI requires 29432 unwinding tables even when exceptions are not used. 29433 29434 -- Macro: MUST_USE_SJLJ_EXCEPTIONS 29435 This macro need only be defined if `DWARF2_UNWIND_INFO' is 29436 runtime-variable. In that case, `except.h' cannot correctly 29437 determine the corresponding definition of 29438 `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly. 29439 29440 -- Macro: DONT_USE_BUILTIN_SETJMP 29441 Define this macro to 1 if the `setjmp'/`longjmp'-based scheme 29442 should use the `setjmp'/`longjmp' functions from the C library 29443 instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery. 29444 29445 -- Macro: DWARF_CIE_DATA_ALIGNMENT 29446 This macro need only be defined if the target might save registers 29447 in the function prologue at an offset to the stack pointer that is 29448 not aligned to `UNITS_PER_WORD'. The definition should be the 29449 negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined, 29450 and the positive minimum alignment otherwise. *Note SDB and 29451 DWARF::. Only applicable if the target supports DWARF 2 frame 29452 unwind information. 29453 29454 -- Variable: Target Hook bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 29455 Contains the value true if the target should add a zero word onto 29456 the end of a Dwarf-2 frame info section when used for exception 29457 handling. Default value is false if `EH_FRAME_SECTION_NAME' is 29458 defined, and true otherwise. 29459 29460 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 29461 Given a register, this hook should return a parallel of registers 29462 to represent where to find the register pieces. Define this hook 29463 if the register and its mode are represented in Dwarf in 29464 non-contiguous locations, or if the register should be represented 29465 in more than one register in Dwarf. Otherwise, this hook should 29466 return `NULL_RTX'. If not defined, the default is to return 29467 `NULL_RTX'. 29468 29469 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 29470 If some registers are represented in Dwarf-2 unwind information in 29471 multiple pieces, define this hook to fill in information about the 29472 sizes of those pieces in the table used by the unwinder at runtime. 29473 It will be called by `expand_builtin_init_dwarf_reg_sizes' after 29474 filling in a single size corresponding to each hard register; 29475 ADDRESS is the address of the table. 29476 29477 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 29478 This hook is used to output a reference from a frame unwinding 29479 table to the type_info object identified by SYM. It should return 29480 `true' if the reference was output. Returning `false' will cause 29481 the reference to be output using the normal Dwarf2 routines. 29482 29483 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 29484 This hook should be set to `true' on targets that use an ARM EABI 29485 based unwinding library, and `false' on other targets. This 29486 effects the format of unwinding tables, and how the unwinder in 29487 entered after running a cleanup. The default is `false'. 29488 29489 29490 File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 29491 29492 15.21.10 Assembler Commands for Alignment 29493 ----------------------------------------- 29494 29495 This describes commands for alignment. 29496 29497 -- Macro: JUMP_ALIGN (LABEL) 29498 The alignment (log base 2) to put in front of LABEL, which is a 29499 common destination of jumps and has no fallthru incoming edge. 29500 29501 This macro need not be defined if you don't want any special 29502 alignment to be done at such a time. Most machine descriptions do 29503 not currently define the macro. 29504 29505 Unless it's necessary to inspect the LABEL parameter, it is better 29506 to set the variable ALIGN_JUMPS in the target's 29507 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 29508 selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation. 29509 29510 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 29511 The alignment (log base 2) to put in front of LABEL, which follows 29512 a `BARRIER'. 29513 29514 This macro need not be defined if you don't want any special 29515 alignment to be done at such a time. Most machine descriptions do 29516 not currently define the macro. 29517 29518 -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 29519 The maximum number of bytes to skip when applying 29520 `LABEL_ALIGN_AFTER_BARRIER'. This works only if 29521 `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 29522 29523 -- Macro: LOOP_ALIGN (LABEL) 29524 The alignment (log base 2) to put in front of LABEL, which follows 29525 a `NOTE_INSN_LOOP_BEG' note. 29526 29527 This macro need not be defined if you don't want any special 29528 alignment to be done at such a time. Most machine descriptions do 29529 not currently define the macro. 29530 29531 Unless it's necessary to inspect the LABEL parameter, it is better 29532 to set the variable `align_loops' in the target's 29533 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 29534 selection in `align_loops' in a `LOOP_ALIGN' implementation. 29535 29536 -- Macro: LOOP_ALIGN_MAX_SKIP 29537 The maximum number of bytes to skip when applying `LOOP_ALIGN'. 29538 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 29539 29540 -- Macro: LABEL_ALIGN (LABEL) 29541 The alignment (log base 2) to put in front of LABEL. If 29542 `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different 29543 alignment, the maximum of the specified values is used. 29544 29545 Unless it's necessary to inspect the LABEL parameter, it is better 29546 to set the variable `align_labels' in the target's 29547 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 29548 selection in `align_labels' in a `LABEL_ALIGN' implementation. 29549 29550 -- Macro: LABEL_ALIGN_MAX_SKIP 29551 The maximum number of bytes to skip when applying `LABEL_ALIGN'. 29552 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 29553 29554 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 29555 A C statement to output to the stdio stream STREAM an assembler 29556 instruction to advance the location counter by NBYTES bytes. 29557 Those bytes should be zero when loaded. NBYTES will be a C 29558 expression of type `unsigned HOST_WIDE_INT'. 29559 29560 -- Macro: ASM_NO_SKIP_IN_TEXT 29561 Define this macro if `ASM_OUTPUT_SKIP' should not be used in the 29562 text section because it fails to put zeros in the bytes that are 29563 skipped. This is true on many Unix systems, where the pseudo-op 29564 to skip bytes produces no-op instructions rather than zeros when 29565 used in the text section. 29566 29567 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 29568 A C statement to output to the stdio stream STREAM an assembler 29569 command to advance the location counter to a multiple of 2 to the 29570 POWER bytes. POWER will be a C expression of type `int'. 29571 29572 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 29573 Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 29574 for padding, if necessary. 29575 29576 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 29577 A C statement to output to the stdio stream STREAM an assembler 29578 command to advance the location counter to a multiple of 2 to the 29579 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 29580 satisfy the alignment request. POWER and MAX_SKIP will be a C 29581 expression of type `int'. 29582 29583 29584 File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 29585 29586 15.22 Controlling Debugging Information Format 29587 ============================================== 29588 29589 This describes how to specify debugging information. 29590 29591 * Menu: 29592 29593 * All Debuggers:: Macros that affect all debugging formats uniformly. 29594 * DBX Options:: Macros enabling specific options in DBX format. 29595 * DBX Hooks:: Hook macros for varying DBX format. 29596 * File Names and DBX:: Macros controlling output of file names in DBX format. 29597 * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 29598 * VMS Debug:: Macros for VMS debug format. 29599 29600 29601 File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 29602 29603 15.22.1 Macros Affecting All Debugging Formats 29604 ---------------------------------------------- 29605 29606 These macros affect all debugging formats. 29607 29608 -- Macro: DBX_REGISTER_NUMBER (REGNO) 29609 A C expression that returns the DBX register number for the 29610 compiler register number REGNO. In the default macro provided, 29611 the value of this expression will be REGNO itself. But sometimes 29612 there are some registers that the compiler knows about and DBX 29613 does not, or vice versa. In such cases, some register may need to 29614 have one number in the compiler and another for DBX. 29615 29616 If two registers have consecutive numbers inside GCC, and they can 29617 be used as a pair to hold a multiword value, then they _must_ have 29618 consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'. 29619 Otherwise, debuggers will be unable to access such a pair, because 29620 they expect register pairs to be consecutive in their own 29621 numbering scheme. 29622 29623 If you find yourself defining `DBX_REGISTER_NUMBER' in way that 29624 does not preserve register pairs, then what you must do instead is 29625 redefine the actual register numbering scheme. 29626 29627 -- Macro: DEBUGGER_AUTO_OFFSET (X) 29628 A C expression that returns the integer offset value for an 29629 automatic variable having address X (an RTL expression). The 29630 default computation assumes that X is based on the frame-pointer 29631 and gives the offset from the frame-pointer. This is required for 29632 targets that produce debugging output for DBX or COFF-style 29633 debugging output for SDB and allow the frame-pointer to be 29634 eliminated when the `-g' options is used. 29635 29636 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 29637 A C expression that returns the integer offset value for an 29638 argument having address X (an RTL expression). The nominal offset 29639 is OFFSET. 29640 29641 -- Macro: PREFERRED_DEBUGGING_TYPE 29642 A C expression that returns the type of debugging output GCC should 29643 produce when the user specifies just `-g'. Define this if you 29644 have arranged for GCC to support more than one format of debugging 29645 output. Currently, the allowable values are `DBX_DEBUG', 29646 `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG', 29647 `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'. 29648 29649 When the user specifies `-ggdb', GCC normally also uses the value 29650 of this macro to select the debugging output format, but with two 29651 exceptions. If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the 29652 value `DWARF2_DEBUG'. Otherwise, if `DBX_DEBUGGING_INFO' is 29653 defined, GCC uses `DBX_DEBUG'. 29654 29655 The value of this macro only affects the default debugging output; 29656 the user can always get a specific type of output by using 29657 `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'. 29658 29659 29660 File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 29661 29662 15.22.2 Specific Options for DBX Output 29663 --------------------------------------- 29664 29665 These are specific options for DBX output. 29666 29667 -- Macro: DBX_DEBUGGING_INFO 29668 Define this macro if GCC should produce debugging output for DBX 29669 in response to the `-g' option. 29670 29671 -- Macro: XCOFF_DEBUGGING_INFO 29672 Define this macro if GCC should produce XCOFF format debugging 29673 output in response to the `-g' option. This is a variant of DBX 29674 format. 29675 29676 -- Macro: DEFAULT_GDB_EXTENSIONS 29677 Define this macro to control whether GCC should by default generate 29678 GDB's extended version of DBX debugging information (assuming 29679 DBX-format debugging information is enabled at all). If you don't 29680 define the macro, the default is 1: always generate the extended 29681 information if there is any occasion to. 29682 29683 -- Macro: DEBUG_SYMS_TEXT 29684 Define this macro if all `.stabs' commands should be output while 29685 in the text section. 29686 29687 -- Macro: ASM_STABS_OP 29688 A C string constant, including spacing, naming the assembler 29689 pseudo op to use instead of `"\t.stabs\t"' to define an ordinary 29690 debugging symbol. If you don't define this macro, `"\t.stabs\t"' 29691 is used. This macro applies only to DBX debugging information 29692 format. 29693 29694 -- Macro: ASM_STABD_OP 29695 A C string constant, including spacing, naming the assembler 29696 pseudo op to use instead of `"\t.stabd\t"' to define a debugging 29697 symbol whose value is the current location. If you don't define 29698 this macro, `"\t.stabd\t"' is used. This macro applies only to 29699 DBX debugging information format. 29700 29701 -- Macro: ASM_STABN_OP 29702 A C string constant, including spacing, naming the assembler 29703 pseudo op to use instead of `"\t.stabn\t"' to define a debugging 29704 symbol with no name. If you don't define this macro, 29705 `"\t.stabn\t"' is used. This macro applies only to DBX debugging 29706 information format. 29707 29708 -- Macro: DBX_NO_XREFS 29709 Define this macro if DBX on your system does not support the 29710 construct `xsTAGNAME'. On some systems, this construct is used to 29711 describe a forward reference to a structure named TAGNAME. On 29712 other systems, this construct is not supported at all. 29713 29714 -- Macro: DBX_CONTIN_LENGTH 29715 A symbol name in DBX-format debugging information is normally 29716 continued (split into two separate `.stabs' directives) when it 29717 exceeds a certain length (by default, 80 characters). On some 29718 operating systems, DBX requires this splitting; on others, 29719 splitting must not be done. You can inhibit splitting by defining 29720 this macro with the value zero. You can override the default 29721 splitting-length by defining this macro as an expression for the 29722 length you desire. 29723 29724 -- Macro: DBX_CONTIN_CHAR 29725 Normally continuation is indicated by adding a `\' character to 29726 the end of a `.stabs' string when a continuation follows. To use 29727 a different character instead, define this macro as a character 29728 constant for the character you want to use. Do not define this 29729 macro if backslash is correct for your system. 29730 29731 -- Macro: DBX_STATIC_STAB_DATA_SECTION 29732 Define this macro if it is necessary to go to the data section 29733 before outputting the `.stabs' pseudo-op for a non-global static 29734 variable. 29735 29736 -- Macro: DBX_TYPE_DECL_STABS_CODE 29737 The value to use in the "code" field of the `.stabs' directive for 29738 a typedef. The default is `N_LSYM'. 29739 29740 -- Macro: DBX_STATIC_CONST_VAR_CODE 29741 The value to use in the "code" field of the `.stabs' directive for 29742 a static variable located in the text section. DBX format does not 29743 provide any "right" way to do this. The default is `N_FUN'. 29744 29745 -- Macro: DBX_REGPARM_STABS_CODE 29746 The value to use in the "code" field of the `.stabs' directive for 29747 a parameter passed in registers. DBX format does not provide any 29748 "right" way to do this. The default is `N_RSYM'. 29749 29750 -- Macro: DBX_REGPARM_STABS_LETTER 29751 The letter to use in DBX symbol data to identify a symbol as a 29752 parameter passed in registers. DBX format does not customarily 29753 provide any way to do this. The default is `'P''. 29754 29755 -- Macro: DBX_FUNCTION_FIRST 29756 Define this macro if the DBX information for a function and its 29757 arguments should precede the assembler code for the function. 29758 Normally, in DBX format, the debugging information entirely 29759 follows the assembler code. 29760 29761 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 29762 Define this macro, with value 1, if the value of a symbol 29763 describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be 29764 relative to the start of the enclosing function. Normally, GCC 29765 uses an absolute address. 29766 29767 -- Macro: DBX_LINES_FUNCTION_RELATIVE 29768 Define this macro, with value 1, if the value of a symbol 29769 indicating the current line number (`N_SLINE') should be relative 29770 to the start of the enclosing function. Normally, GCC uses an 29771 absolute address. 29772 29773 -- Macro: DBX_USE_BINCL 29774 Define this macro if GCC should generate `N_BINCL' and `N_EINCL' 29775 stabs for included header files, as on Sun systems. This macro 29776 also directs GCC to output a type number as a pair of a file 29777 number and a type number within the file. Normally, GCC does not 29778 generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single 29779 number for a type number. 29780 29781 29782 File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 29783 29784 15.22.3 Open-Ended Hooks for DBX Format 29785 --------------------------------------- 29786 29787 These are hooks for DBX format. 29788 29789 -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME) 29790 Define this macro to say how to output to STREAM the debugging 29791 information for the start of a scope level for variable names. The 29792 argument NAME is the name of an assembler symbol (for use with 29793 `assemble_name') whose value is the address where the scope begins. 29794 29795 -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME) 29796 Like `DBX_OUTPUT_LBRAC', but for the end of a scope level. 29797 29798 -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL) 29799 Define this macro if the target machine requires special handling 29800 to output an `N_FUN' entry for the function DECL. 29801 29802 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 29803 A C statement to output DBX debugging information before code for 29804 line number LINE of the current source file to the stdio stream 29805 STREAM. COUNTER is the number of time the macro was invoked, 29806 including the current invocation; it is intended to generate 29807 unique labels in the assembly output. 29808 29809 This macro should not be defined if the default output is correct, 29810 or if it can be made correct by defining 29811 `DBX_LINES_FUNCTION_RELATIVE'. 29812 29813 -- Macro: NO_DBX_FUNCTION_END 29814 Some stabs encapsulation formats (in particular ECOFF), cannot 29815 handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 29816 extension construct. On those machines, define this macro to turn 29817 this feature off without disturbing the rest of the gdb extensions. 29818 29819 -- Macro: NO_DBX_BNSYM_ENSYM 29820 Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx 29821 extension construct. On those machines, define this macro to turn 29822 this feature off without disturbing the rest of the gdb extensions. 29823 29824 29825 File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 29826 29827 15.22.4 File Names in DBX Format 29828 -------------------------------- 29829 29830 This describes file names in DBX format. 29831 29832 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 29833 A C statement to output DBX debugging information to the stdio 29834 stream STREAM, which indicates that file NAME is the main source 29835 file--the file specified as the input file for compilation. This 29836 macro is called only once, at the beginning of compilation. 29837 29838 This macro need not be defined if the standard form of output for 29839 DBX debugging information is appropriate. 29840 29841 It may be necessary to refer to a label equal to the beginning of 29842 the text section. You can use `assemble_name (stream, 29843 ltext_label_name)' to do so. If you do this, you must also set 29844 the variable USED_LTEXT_LABEL_NAME to `true'. 29845 29846 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 29847 Define this macro, with value 1, if GCC should not emit an 29848 indication of the current directory for compilation and current 29849 source language at the beginning of the file. 29850 29851 -- Macro: NO_DBX_GCC_MARKER 29852 Define this macro, with value 1, if GCC should not emit an 29853 indication that this object file was compiled by GCC. The default 29854 is to emit an `N_OPT' stab at the beginning of every source file, 29855 with `gcc2_compiled.' for the string and value 0. 29856 29857 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 29858 A C statement to output DBX debugging information at the end of 29859 compilation of the main source file NAME. Output should be 29860 written to the stdio stream STREAM. 29861 29862 If you don't define this macro, nothing special is output at the 29863 end of compilation, which is correct for most machines. 29864 29865 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 29866 Define this macro _instead of_ defining 29867 `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 29868 the end of compilation is a `N_SO' stab with an empty string, 29869 whose value is the highest absolute text address in the file. 29870 29871 29872 File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 29873 29874 15.22.5 Macros for SDB and DWARF Output 29875 --------------------------------------- 29876 29877 Here are macros for SDB and DWARF output. 29878 29879 -- Macro: SDB_DEBUGGING_INFO 29880 Define this macro if GCC should produce COFF-style debugging output 29881 for SDB in response to the `-g' option. 29882 29883 -- Macro: DWARF2_DEBUGGING_INFO 29884 Define this macro if GCC should produce dwarf version 2 format 29885 debugging output in response to the `-g' option. 29886 29887 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (tree 29888 FUNCTION) 29889 Define this to enable the dwarf attribute 29890 `DW_AT_calling_convention' to be emitted for each function. 29891 Instead of an integer return the enum value for the `DW_CC_' 29892 tag. 29893 29894 To support optional call frame debugging information, you must also 29895 define `INCOMING_RETURN_ADDR_RTX' and either set 29896 `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 29897 prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as 29898 appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 29899 29900 -- Macro: DWARF2_FRAME_INFO 29901 Define this macro to a nonzero value if GCC should always output 29902 Dwarf 2 frame information. If `DWARF2_UNWIND_INFO' (*note 29903 Exception Region Output:: is nonzero, GCC will output this 29904 information not matter how you define `DWARF2_FRAME_INFO'. 29905 29906 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 29907 Define this macro to be a nonzero value if the assembler can 29908 generate Dwarf 2 line debug info sections. This will result in 29909 much more compact line number tables, and hence is desirable if it 29910 works. 29911 29912 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 29913 A C statement to issue assembly directives that create a difference 29914 LAB1 minus LAB2, using an integer of the given SIZE. 29915 29916 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 29917 A C statement to issue assembly directives that create a 29918 section-relative reference to the given LABEL, using an integer of 29919 the given SIZE. The label is known to be defined in the given 29920 SECTION. 29921 29922 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 29923 A C statement to issue assembly directives that create a 29924 self-relative reference to the given LABEL, using an integer of 29925 the given SIZE. 29926 29927 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 29928 SIZE, rtx X) 29929 If defined, this target hook is a function which outputs a 29930 DTP-relative reference to the given TLS symbol of the specified 29931 size. 29932 29933 -- Macro: PUT_SDB_... 29934 Define these macros to override the assembler syntax for the 29935 special SDB assembler directives. See `sdbout.c' for a list of 29936 these macros and their arguments. If the standard syntax is used, 29937 you need not define them yourself. 29938 29939 -- Macro: SDB_DELIM 29940 Some assemblers do not support a semicolon as a delimiter, even 29941 between SDB assembler directives. In that case, define this macro 29942 to be the delimiter to use (usually `\n'). It is not necessary to 29943 define a new set of `PUT_SDB_OP' macros if this is the only change 29944 required. 29945 29946 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 29947 Define this macro to allow references to unknown structure, union, 29948 or enumeration tags to be emitted. Standard COFF does not allow 29949 handling of unknown references, MIPS ECOFF has support for it. 29950 29951 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 29952 Define this macro to allow references to structure, union, or 29953 enumeration tags that have not yet been seen to be handled. Some 29954 assemblers choke if forward tags are used, while some require it. 29955 29956 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 29957 A C statement to output SDB debugging information before code for 29958 line number LINE of the current source file to the stdio stream 29959 STREAM. The default is to emit an `.ln' directive. 29960 29961 29962 File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 29963 29964 15.22.6 Macros for VMS Debug Format 29965 ----------------------------------- 29966 29967 Here are macros for VMS debug format. 29968 29969 -- Macro: VMS_DEBUGGING_INFO 29970 Define this macro if GCC should produce debugging output for VMS 29971 in response to the `-g' option. The default behavior for VMS is 29972 to generate minimal debug info for a traceback in the absence of 29973 `-g' unless explicitly overridden with `-g0'. This behavior is 29974 controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'. 29975 29976 29977 File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 29978 29979 15.23 Cross Compilation and Floating Point 29980 ========================================== 29981 29982 While all modern machines use twos-complement representation for 29983 integers, there are a variety of representations for floating point 29984 numbers. This means that in a cross-compiler the representation of 29985 floating point numbers in the compiled program may be different from 29986 that used in the machine doing the compilation. 29987 29988 Because different representation systems may offer different amounts of 29989 range and precision, all floating point constants must be represented in 29990 the target machine's format. Therefore, the cross compiler cannot 29991 safely use the host machine's floating point arithmetic; it must emulate 29992 the target's arithmetic. To ensure consistency, GCC always uses 29993 emulation to work with floating point values, even when the host and 29994 target floating point formats are identical. 29995 29996 The following macros are provided by `real.h' for the compiler to use. 29997 All parts of the compiler which generate or optimize floating-point 29998 calculations must use these macros. They may evaluate their operands 29999 more than once, so operands must not have side effects. 30000 30001 -- Macro: REAL_VALUE_TYPE 30002 The C data type to be used to hold a floating point value in the 30003 target machine's format. Typically this is a `struct' containing 30004 an array of `HOST_WIDE_INT', but all code should treat it as an 30005 opaque quantity. 30006 30007 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 30008 Compares for equality the two values, X and Y. If the target 30009 floating point format supports negative zeroes and/or NaNs, 30010 `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL 30011 (NaN, NaN)' is false. 30012 30013 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 30014 Tests whether X is less than Y. 30015 30016 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 30017 Truncates X to a signed integer, rounding toward zero. 30018 30019 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 30020 (REAL_VALUE_TYPE X) 30021 Truncates X to an unsigned integer, rounding toward zero. If X is 30022 negative, returns zero. 30023 30024 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum 30025 machine_mode MODE) 30026 Converts STRING into a floating point number in the target 30027 machine's representation for mode MODE. This routine can handle 30028 both decimal and hexadecimal floating point constants, using the 30029 syntax defined by the C language for both. 30030 30031 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 30032 Returns 1 if X is negative (including negative zero), 0 otherwise. 30033 30034 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 30035 Determines whether X represents infinity (positive or negative). 30036 30037 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 30038 Determines whether X represents a "NaN" (not-a-number). 30039 30040 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code 30041 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 30042 Calculates an arithmetic operation on the two floating point values 30043 X and Y, storing the result in OUTPUT (which must be a variable). 30044 30045 The operation to be performed is specified by CODE. Only the 30046 following codes are supported: `PLUS_EXPR', `MINUS_EXPR', 30047 `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'. 30048 30049 If `REAL_ARITHMETIC' is asked to evaluate division by zero and the 30050 target's floating point format cannot represent infinity, it will 30051 call `abort'. Callers should check for this situation first, using 30052 `MODE_HAS_INFINITIES'. *Note Storage Layout::. 30053 30054 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 30055 Returns the negative of the floating point value X. 30056 30057 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 30058 Returns the absolute value of X. 30059 30060 -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE, 30061 enum machine_mode X) 30062 Truncates the floating point value X to fit in MODE. The return 30063 value is still a full-size `REAL_VALUE_TYPE', but it has an 30064 appropriate bit pattern to be output as a floating constant whose 30065 precision accords with mode MODE. 30066 30067 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT 30068 HIGH, REAL_VALUE_TYPE X) 30069 Converts a floating point value X into a double-precision integer 30070 which is then stored into LOW and HIGH. If the value is not 30071 integral, it is truncated. 30072 30073 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT 30074 LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE) 30075 Converts a double-precision integer found in LOW and HIGH, into a 30076 floating point value which is then stored into X. The value is 30077 truncated to fit in mode MODE. 30078 30079 30080 File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 30081 30082 15.24 Mode Switching Instructions 30083 ================================= 30084 30085 The following macros control mode switching optimizations: 30086 30087 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 30088 Define this macro if the port needs extra instructions inserted 30089 for mode switching in an optimizing compilation. 30090 30091 For an example, the SH4 can perform both single and double 30092 precision floating point operations, but to perform a single 30093 precision operation, the FPSCR PR bit has to be cleared, while for 30094 a double precision operation, this bit has to be set. Changing 30095 the PR bit requires a general purpose register as a scratch 30096 register, hence these FPSCR sets have to be inserted before 30097 reload, i.e. you can't put this into instruction emitting or 30098 `TARGET_MACHINE_DEPENDENT_REORG'. 30099 30100 You can have multiple entities that are mode-switched, and select 30101 at run time which entities actually need it. 30102 `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY 30103 that needs mode-switching. If you define this macro, you also 30104 have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED', 30105 `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'. `MODE_AFTER', 30106 `MODE_ENTRY', and `MODE_EXIT' are optional. 30107 30108 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 30109 If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as 30110 initializer for an array of integers. Each initializer element N 30111 refers to an entity that needs mode switching, and specifies the 30112 number of different modes that might need to be set for this 30113 entity. The position of the initializer in the 30114 initializer--starting counting at zero--determines the integer 30115 that is used to refer to the mode-switched entity in question. In 30116 macros that take mode arguments / yield a mode result, modes are 30117 represented as numbers 0 ... N - 1. N is used to specify that no 30118 mode switch is needed / supplied. 30119 30120 -- Macro: MODE_NEEDED (ENTITY, INSN) 30121 ENTITY is an integer specifying a mode-switched entity. If 30122 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 30123 return an integer value not larger than the corresponding element 30124 in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 30125 must be switched into prior to the execution of INSN. 30126 30127 -- Macro: MODE_AFTER (MODE, INSN) 30128 If this macro is defined, it is evaluated for every INSN during 30129 mode switching. It determines the mode that an insn results in (if 30130 different from the incoming mode). 30131 30132 -- Macro: MODE_ENTRY (ENTITY) 30133 If this macro is defined, it is evaluated for every ENTITY that 30134 needs mode switching. It should evaluate to an integer, which is 30135 a mode that ENTITY is assumed to be switched to at function entry. 30136 If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined. 30137 30138 -- Macro: MODE_EXIT (ENTITY) 30139 If this macro is defined, it is evaluated for every ENTITY that 30140 needs mode switching. It should evaluate to an integer, which is 30141 a mode that ENTITY is assumed to be switched to at function exit. 30142 If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined. 30143 30144 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N) 30145 This macro specifies the order in which modes for ENTITY are 30146 processed. 0 is the highest priority, 30147 `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 30148 of the macro should be an integer designating a mode for ENTITY. 30149 For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be 30150 a bijection in 0 ... `num_modes_for_mode_switching[ENTITY] - 1'. 30151 30152 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE) 30153 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE 30154 is the set of hard registers live at the point where the insn(s) 30155 are to be inserted. 30156 30157 30158 File: gccint.info, Node: Target Attributes, Next: MIPS Coprocessors, Prev: Mode Switching, Up: Target Macros 30159 30160 15.25 Defining target-specific uses of `__attribute__' 30161 ====================================================== 30162 30163 Target-specific attributes may be defined for functions, data and types. 30164 These are described using the following target hooks; they also need to 30165 be documented in `extend.texi'. 30166 30167 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 30168 If defined, this target hook points to an array of `struct 30169 attribute_spec' (defined in `tree.h') specifying the machine 30170 specific attributes for this target and some of the restrictions 30171 on the entities to which these attributes are applied and the 30172 arguments they take. 30173 30174 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (tree TYPE1, tree 30175 TYPE2) 30176 If defined, this target hook is a function which returns zero if 30177 the attributes on TYPE1 and TYPE2 are incompatible, one if they 30178 are compatible, and two if they are nearly compatible (which 30179 causes a warning to be generated). If this is not defined, 30180 machine-specific attributes are supposed always to be compatible. 30181 30182 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 30183 If defined, this target hook is a function which assigns default 30184 attributes to newly defined TYPE. 30185 30186 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 30187 TYPE2) 30188 Define this target hook if the merging of type attributes needs 30189 special handling. If defined, the result is a list of the combined 30190 `TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 30191 `comptypes' has already been called and returned 1. This function 30192 may call `merge_attributes' to handle machine-independent merging. 30193 30194 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 30195 NEWDECL) 30196 Define this target hook if the merging of decl attributes needs 30197 special handling. If defined, the result is a list of the combined 30198 `DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 30199 declaration of OLDDECL. Examples of when this is needed are when 30200 one attribute overrides another, or when an attribute is nullified 30201 by a subsequent definition. This function may call 30202 `merge_attributes' to handle machine-independent merging. 30203 30204 If the only target-specific handling you require is `dllimport' 30205 for Microsoft Windows targets, you should define the macro 30206 `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'. The compiler will then 30207 define a function called `merge_dllimport_decl_attributes' which 30208 can then be defined as the expansion of 30209 `TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 30210 `handle_dll_attribute' in the attribute table for your port to 30211 perform initial processing of the `dllimport' and `dllexport' 30212 attributes. This is done in `i386/cygwin.h' and `i386/i386.c', 30213 for example. 30214 30215 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (tree DECL) 30216 DECL is a variable or function with `__attribute__((dllimport))' 30217 specified. Use this hook if the target needs to add extra 30218 validation checks to `handle_dll_attribute'. 30219 30220 -- Macro: TARGET_DECLSPEC 30221 Define this macro to a nonzero value if you want to treat 30222 `__declspec(X)' as equivalent to `__attribute((X))'. By default, 30223 this behavior is enabled only for targets that define 30224 `TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 30225 `__declspec' is via a built-in macro, but you should not rely on 30226 this implementation detail. 30227 30228 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 30229 *ATTR_PTR) 30230 Define this target hook if you want to be able to add attributes 30231 to a decl when it is being created. This is normally useful for 30232 back ends which wish to implement a pragma by using the attributes 30233 which correspond to the pragma's effect. The NODE argument is the 30234 decl which is being created. The ATTR_PTR argument is a pointer 30235 to the attribute list for this decl. The list itself should not 30236 be modified, since it may be shared with other decls, but 30237 attributes may be chained on the head of the list and `*ATTR_PTR' 30238 modified to point to the new attributes, or a copy of the list may 30239 be made if further changes are needed. 30240 30241 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree 30242 FNDECL) 30243 This target hook returns `true' if it is ok to inline FNDECL into 30244 the current function, despite its having target-specific 30245 attributes, `false' otherwise. By default, if a function has a 30246 target specific attribute attached to it, it will not be inlined. 30247 30248 30249 File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Target Attributes, Up: Target Macros 30250 30251 15.26 Defining coprocessor specifics for MIPS targets. 30252 ====================================================== 30253 30254 The MIPS specification allows MIPS implementations to have as many as 4 30255 coprocessors, each with as many as 32 private registers. GCC supports 30256 accessing these registers and transferring values between the registers 30257 and memory using asm-ized variables. For example: 30258 30259 register unsigned int cp0count asm ("c0r1"); 30260 unsigned int d; 30261 30262 d = cp0count + 3; 30263 30264 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 30265 names may be added as described below, or the default names may be 30266 overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 30267 30268 Coprocessor registers are assumed to be epilogue-used; sets to them 30269 will be preserved even if it does not appear that the register is used 30270 again later in the function. 30271 30272 Another note: according to the MIPS spec, coprocessor 1 (if present) is 30273 the FPU. One accesses COP1 registers through standard mips 30274 floating-point support; they are not included in this mechanism. 30275 30276 There is one macro used in defining the MIPS coprocessor interface 30277 which you may want to override in subtargets; it is described below. 30278 30279 -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES 30280 A comma-separated list (with leading comma) of pairs describing the 30281 alternate names of coprocessor registers. The format of each 30282 entry should be 30283 { ALTERNATENAME, REGISTER_NUMBER} 30284 Default: empty. 30285 30286 30287 File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 30288 30289 15.27 Parameters for Precompiled Header Validity Checking 30290 ========================================================= 30291 30292 -- Target Hook: void *TARGET_GET_PCH_VALIDITY (size_t *SZ) 30293 This hook returns the data needed by `TARGET_PCH_VALID_P' and sets 30294 `*SZ' to the size of the data in bytes. 30295 30296 -- Target Hook: const char *TARGET_PCH_VALID_P (const void *DATA, 30297 size_t SZ) 30298 This hook checks whether the options used to create a PCH file are 30299 compatible with the current settings. It returns `NULL' if so and 30300 a suitable error message if not. Error messages will be presented 30301 to the user and must be localized using `_(MSG)'. 30302 30303 DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY' 30304 when the PCH file was created and SZ is the size of that data in 30305 bytes. It's safe to assume that the data was created by the same 30306 version of the compiler, so no format checking is needed. 30307 30308 The default definition of `default_pch_valid_p' should be suitable 30309 for most targets. 30310 30311 -- Target Hook: const char *TARGET_CHECK_PCH_TARGET_FLAGS (int 30312 PCH_FLAGS) 30313 If this hook is nonnull, the default implementation of 30314 `TARGET_PCH_VALID_P' will use it to check for compatible values of 30315 `target_flags'. PCH_FLAGS specifies the value that `target_flags' 30316 had when the PCH file was created. The return value is the same 30317 as for `TARGET_PCH_VALID_P'. 30318 30319 30320 File: gccint.info, Node: C++ ABI, Next: Misc, Prev: PCH Target, Up: Target Macros 30321 30322 15.28 C++ ABI parameters 30323 ======================== 30324 30325 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 30326 Define this hook to override the integer type used for guard 30327 variables. These are used to implement one-time construction of 30328 static objects. The default is long_long_integer_type_node. 30329 30330 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 30331 This hook determines how guard variables are used. It should 30332 return `false' (the default) if first byte should be used. A 30333 return value of `true' indicates the least significant bit should 30334 be used. 30335 30336 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 30337 This hook returns the size of the cookie to use when allocating an 30338 array whose elements have the indicated TYPE. Assumes that it is 30339 already known that a cookie is needed. The default is `max(sizeof 30340 (size_t), alignof(type))', as defined in section 2.7 of the 30341 IA64/Generic C++ ABI. 30342 30343 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 30344 This hook should return `true' if the element size should be 30345 stored in array cookies. The default is to return `false'. 30346 30347 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 30348 IMPORT_EXPORT) 30349 If defined by a backend this hook allows the decision made to 30350 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 30351 contain 1 if the class is going to be exported, -1 if it is going 30352 to be imported and 0 otherwise. This function should return the 30353 modified value and perform any other actions necessary to support 30354 the backend's targeted operating system. 30355 30356 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 30357 This hook should return `true' if constructors and destructors 30358 return the address of the object created/destroyed. The default 30359 is to return `false'. 30360 30361 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 30362 This hook returns true if the key method for a class (i.e., the 30363 method which, if defined in the current translation unit, causes 30364 the virtual table to be emitted) may be an inline function. Under 30365 the standard Itanium C++ ABI the key method may be an inline 30366 function so long as the function is not declared inline in the 30367 class definition. Under some variants of the ABI, an inline 30368 function can never be the key method. The default is to return 30369 `true'. 30370 30371 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 30372 DECL) 30373 DECL is a virtual table, virtual table table, typeinfo object, or 30374 other similar implicit class data object that will be emitted with 30375 external linkage in this translation unit. No ELF visibility has 30376 been explicitly specified. If the target needs to specify a 30377 visibility other than that of the containing class, use this hook 30378 to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'. 30379 30380 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 30381 This hook returns true (the default) if virtual tables and other 30382 similar implicit class data objects are always COMDAT if they have 30383 external linkage. If this hook returns false, then class data for 30384 classes whose virtual table will be emitted in only one translation 30385 unit will not be COMDAT. 30386 30387 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 30388 This hook returns true (the default) if the RTTI information for 30389 the basic types which is defined in the C++ runtime should always 30390 be COMDAT, false if it should not be COMDAT. 30391 30392 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 30393 This hook returns true if `__aeabi_atexit' (as defined by the ARM 30394 EABI) should be used to register static destructors when 30395 `-fuse-cxa-atexit' is in effect. The default is to return false 30396 to use `__cxa_atexit'. 30397 30398 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 30399 This hook returns true if the target `atexit' function can be used 30400 in the same manner as `__cxa_atexit' to register C++ static 30401 destructors. This requires that `atexit'-registered functions in 30402 shared libraries are run in the correct order when the libraries 30403 are unloaded. The default is to return false. 30404 30405 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 30406 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has 30407 just been defined. Use this hook to make adjustments to the class 30408 (eg, tweak visibility or perform any other required target 30409 modifications). 30410 30411 30412 File: gccint.info, Node: Misc, Prev: C++ ABI, Up: Target Macros 30413 30414 15.29 Miscellaneous Parameters 30415 ============================== 30416 30417 Here are several miscellaneous parameters. 30418 30419 -- Macro: HAS_LONG_COND_BRANCH 30420 Define this boolean macro to indicate whether or not your 30421 architecture has conditional branches that can span all of memory. 30422 It is used in conjunction with an optimization that partitions 30423 hot and cold basic blocks into separate sections of the 30424 executable. If this macro is set to false, gcc will convert any 30425 conditional branches that attempt to cross between sections into 30426 unconditional branches or indirect jumps. 30427 30428 -- Macro: HAS_LONG_UNCOND_BRANCH 30429 Define this boolean macro to indicate whether or not your 30430 architecture has unconditional branches that can span all of 30431 memory. It is used in conjunction with an optimization that 30432 partitions hot and cold basic blocks into separate sections of the 30433 executable. If this macro is set to false, gcc will convert any 30434 unconditional branches that attempt to cross between sections into 30435 indirect jumps. 30436 30437 -- Macro: CASE_VECTOR_MODE 30438 An alias for a machine mode name. This is the machine mode that 30439 elements of a jump-table should have. 30440 30441 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 30442 Optional: return the preferred mode for an `addr_diff_vec' when 30443 the minimum and maximum offset are known. If you define this, it 30444 enables extra code in branch shortening to deal with 30445 `addr_diff_vec'. To make this work, you also have to define 30446 `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit. 30447 The BODY argument is provided so that the offset_unsigned and scale 30448 flags can be updated. 30449 30450 -- Macro: CASE_VECTOR_PC_RELATIVE 30451 Define this macro to be a C expression to indicate when jump-tables 30452 should contain relative addresses. You need not define this macro 30453 if jump-tables never contain relative addresses, or jump-tables 30454 should contain relative addresses only when `-fPIC' or `-fPIC' is 30455 in effect. 30456 30457 -- Macro: CASE_VALUES_THRESHOLD 30458 Define this to be the smallest number of different values for 30459 which it is best to use a jump-table instead of a tree of 30460 conditional branches. The default is four for machines with a 30461 `casesi' instruction and five otherwise. This is best for most 30462 machines. 30463 30464 -- Macro: CASE_USE_BIT_TESTS 30465 Define this macro to be a C expression to indicate whether C switch 30466 statements may be implemented by a sequence of bit tests. This is 30467 advantageous on processors that can efficiently implement left 30468 shift of 1 by the number of bits held in a register, but 30469 inappropriate on targets that would require a loop. By default, 30470 this macro returns `true' if the target defines an `ashlsi3' 30471 pattern, and `false' otherwise. 30472 30473 -- Macro: WORD_REGISTER_OPERATIONS 30474 Define this macro if operations between registers with integral 30475 mode smaller than a word are always performed on the entire 30476 register. Most RISC machines have this property and most CISC 30477 machines do not. 30478 30479 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 30480 Define this macro to be a C expression indicating when insns that 30481 read memory in MEM_MODE, an integral mode narrower than a word, 30482 set the bits outside of MEM_MODE to be either the sign-extension 30483 or the zero-extension of the data read. Return `SIGN_EXTEND' for 30484 values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND' 30485 for which it zero-extends, and `UNKNOWN' for other modes. 30486 30487 This macro is not called with MEM_MODE non-integral or with a width 30488 greater than or equal to `BITS_PER_WORD', so you may return any 30489 value in this case. Do not define this macro if it would always 30490 return `UNKNOWN'. On machines where this macro is defined, you 30491 will normally define it as the constant `SIGN_EXTEND' or 30492 `ZERO_EXTEND'. 30493 30494 You may return a non-`UNKNOWN' value even if for some hard 30495 registers the sign extension is not performed, if for the 30496 `REGNO_REG_CLASS' of these hard registers 30497 `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 30498 MEM_MODE and the TO mode is any integral mode larger than this but 30499 not larger than `word_mode'. 30500 30501 You must return `UNKNOWN' if for some hard registers that allow 30502 this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change 30503 to `word_mode', but that they can change to another integral mode 30504 that is larger then MEM_MODE but still smaller than `word_mode'. 30505 30506 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 30507 Define this macro if loading short immediate values into registers 30508 sign extends. 30509 30510 -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC 30511 Define this macro if the same instructions that convert a floating 30512 point number to a signed fixed point number also convert validly 30513 to an unsigned one. 30514 30515 -- Target Hook: int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum 30516 machine_mode MODE) 30517 When `-ffast-math' is in effect, GCC tries to optimize divisions 30518 by the same divisor, by turning them into multiplications by the 30519 reciprocal. This target hook specifies the minimum number of 30520 divisions that should be there for GCC to perform the optimization 30521 for a variable of mode MODE. The default implementation returns 3 30522 if the machine has an instruction for the division, and 2 if it 30523 does not. 30524 30525 -- Macro: MOVE_MAX 30526 The maximum number of bytes that a single instruction can move 30527 quickly between memory and registers or between two memory 30528 locations. 30529 30530 -- Macro: MAX_MOVE_MAX 30531 The maximum number of bytes that a single instruction can move 30532 quickly between memory and registers or between two memory 30533 locations. If this is undefined, the default is `MOVE_MAX'. 30534 Otherwise, it is the constant value that is the largest value that 30535 `MOVE_MAX' can have at run-time. 30536 30537 -- Macro: SHIFT_COUNT_TRUNCATED 30538 A C expression that is nonzero if on this machine the number of 30539 bits actually used for the count of a shift operation is equal to 30540 the number of bits needed to represent the size of the object 30541 being shifted. When this macro is nonzero, the compiler will 30542 assume that it is safe to omit a sign-extend, zero-extend, and 30543 certain bitwise `and' instructions that truncates the count of a 30544 shift operation. On machines that have instructions that act on 30545 bit-fields at variable positions, which may include `bit test' 30546 instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables 30547 deletion of truncations of the values that serve as arguments to 30548 bit-field instructions. 30549 30550 If both types of instructions truncate the count (for shifts) and 30551 position (for bit-field operations), or if no variable-position 30552 bit-field instructions exist, you should define this macro. 30553 30554 However, on some machines, such as the 80386 and the 680x0, 30555 truncation only applies to shift operations and not the (real or 30556 pretended) bit-field operations. Define `SHIFT_COUNT_TRUNCATED' 30557 to be zero on such machines. Instead, add patterns to the `md' 30558 file that include the implied truncation of the shift instructions. 30559 30560 You need not define this macro if it would always have the value 30561 of zero. 30562 30563 -- Target Hook: int TARGET_SHIFT_TRUNCATION_MASK (enum machine_mode 30564 MODE) 30565 This function describes how the standard shift patterns for MODE 30566 deal with shifts by negative amounts or by more than the width of 30567 the mode. *Note shift patterns::. 30568 30569 On many machines, the shift patterns will apply a mask M to the 30570 shift count, meaning that a fixed-width shift of X by Y is 30571 equivalent to an arbitrary-width shift of X by Y & M. If this is 30572 true for mode MODE, the function should return M, otherwise it 30573 should return 0. A return value of 0 indicates that no particular 30574 behavior is guaranteed. 30575 30576 Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does 30577 _not_ apply to general shift rtxes; it applies only to instructions 30578 that are generated by the named shift patterns. 30579 30580 The default implementation of this function returns 30581 `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0 30582 otherwise. This definition is always safe, but if 30583 `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 30584 nevertheless truncate the shift count, you may get better code by 30585 overriding it. 30586 30587 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 30588 A C expression which is nonzero if on this machine it is safe to 30589 "convert" an integer of INPREC bits to one of OUTPREC bits (where 30590 OUTPREC is smaller than INPREC) by merely operating on it as if it 30591 had only OUTPREC bits. 30592 30593 On many machines, this expression can be 1. 30594 30595 When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 30596 modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result. 30597 If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in 30598 such cases may improve things. 30599 30600 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE, 30601 enum machine_mode REP_MODE) 30602 The representation of an integral mode can be such that the values 30603 are always extended to a wider integral mode. Return 30604 `SIGN_EXTEND' if values of MODE are represented in sign-extended 30605 form to REP_MODE. Return `UNKNOWN' otherwise. (Currently, none 30606 of the targets use zero-extended representation this way so unlike 30607 `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return 30608 either `SIGN_EXTEND' or `UNKNOWN'. Also no target extends MODE to 30609 MODE_REP so that MODE_REP is not the next widest integral mode and 30610 currently we take advantage of this fact.) 30611 30612 Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value 30613 even if the extension is not performed on certain hard registers 30614 as long as for the `REGNO_REG_CLASS' of these hard registers 30615 `CANNOT_CHANGE_MODE_CLASS' returns nonzero. 30616 30617 Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe 30618 two related properties. If you define `TARGET_MODE_REP_EXTENDED 30619 (mode, word_mode)' you probably also want to define 30620 `LOAD_EXTEND_OP (mode)' to return the same type of extension. 30621 30622 In order to enforce the representation of `mode', 30623 `TRULY_NOOP_TRUNCATION' should return false when truncating to 30624 `mode'. 30625 30626 -- Macro: STORE_FLAG_VALUE 30627 A C expression describing the value returned by a comparison 30628 operator with an integral mode and stored by a store-flag 30629 instruction (`sCOND') when the condition is true. This 30630 description must apply to _all_ the `sCOND' patterns and all the 30631 comparison operators whose results have a `MODE_INT' mode. 30632 30633 A value of 1 or -1 means that the instruction implementing the 30634 comparison operator returns exactly 1 or -1 when the comparison is 30635 true and 0 when the comparison is false. Otherwise, the value 30636 indicates which bits of the result are guaranteed to be 1 when the 30637 comparison is true. This value is interpreted in the mode of the 30638 comparison operation, which is given by the mode of the first 30639 operand in the `sCOND' pattern. Either the low bit or the sign 30640 bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are 30641 used by the compiler. 30642 30643 If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 30644 generate code that depends only on the specified bits. It can also 30645 replace comparison operators with equivalent operations if they 30646 cause the required bits to be set, even if the remaining bits are 30647 undefined. For example, on a machine whose comparison operators 30648 return an `SImode' value and where `STORE_FLAG_VALUE' is defined as 30649 `0x80000000', saying that just the sign bit is relevant, the 30650 expression 30651 30652 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 30653 30654 can be converted to 30655 30656 (ashift:SI X (const_int N)) 30657 30658 where N is the appropriate shift count to move the bit being 30659 tested into the sign bit. 30660 30661 There is no way to describe a machine that always sets the 30662 low-order bit for a true value, but does not guarantee the value 30663 of any other bits, but we do not know of any machine that has such 30664 an instruction. If you are trying to port GCC to such a machine, 30665 include an instruction to perform a logical-and of the result with 30666 1 in the pattern for the comparison operators and let us know at 30667 <gcc (a] gcc.gnu.org>. 30668 30669 Often, a machine will have multiple instructions that obtain a 30670 value from a comparison (or the condition codes). Here are rules 30671 to guide the choice of value for `STORE_FLAG_VALUE', and hence the 30672 instructions to be used: 30673 30674 * Use the shortest sequence that yields a valid definition for 30675 `STORE_FLAG_VALUE'. It is more efficient for the compiler to 30676 "normalize" the value (convert it to, e.g., 1 or 0) than for 30677 the comparison operators to do so because there may be 30678 opportunities to combine the normalization with other 30679 operations. 30680 30681 * For equal-length sequences, use a value of 1 or -1, with -1 30682 being slightly preferred on machines with expensive jumps and 30683 1 preferred on other machines. 30684 30685 * As a second choice, choose a value of `0x80000001' if 30686 instructions exist that set both the sign and low-order bits 30687 but do not define the others. 30688 30689 * Otherwise, use a value of `0x80000000'. 30690 30691 Many machines can produce both the value chosen for 30692 `STORE_FLAG_VALUE' and its negation in the same number of 30693 instructions. On those machines, you should also define a pattern 30694 for those cases, e.g., one matching 30695 30696 (set A (neg:M (ne:M B C))) 30697 30698 Some machines can also perform `and' or `plus' operations on 30699 condition code values with less instructions than the corresponding 30700 `sCOND' insn followed by `and' or `plus'. On those machines, 30701 define the appropriate patterns. Use the names `incscc' and 30702 `decscc', respectively, for the patterns which perform `plus' or 30703 `minus' operations on condition code values. See `rs6000.md' for 30704 some examples. The GNU Superoptizer can be used to find such 30705 instruction sequences on other machines. 30706 30707 If this macro is not defined, the default value, 1, is used. You 30708 need not define `STORE_FLAG_VALUE' if the machine has no store-flag 30709 instructions, or if the value generated by these instructions is 1. 30710 30711 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 30712 A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is 30713 returned when comparison operators with floating-point results are 30714 true. Define this macro on machines that have comparison 30715 operations that return floating-point values. If there are no 30716 such operations, do not define this macro. 30717 30718 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 30719 A C expression that gives a rtx representing the nonzero true 30720 element for vector comparisons. The returned rtx should be valid 30721 for the inner mode of MODE which is guaranteed to be a vector 30722 mode. Define this macro on machines that have vector comparison 30723 operations that return a vector result. If there are no such 30724 operations, do not define this macro. Typically, this macro is 30725 defined as `const1_rtx' or `constm1_rtx'. This macro may return 30726 `NULL_RTX' to prevent the compiler optimizing such vector 30727 comparison operations for the given mode. 30728 30729 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 30730 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 30731 A C expression that indicates whether the architecture defines a 30732 value for `clz' or `ctz' with a zero operand. A result of `0' 30733 indicates the value is undefined. If the value is defined for 30734 only the RTL expression, the macro should evaluate to `1'; if the 30735 value applies also to the corresponding optab entry (which is 30736 normally the case if it expands directly into the corresponding 30737 RTL), then the macro should evaluate to `2'. In the cases where 30738 the value is defined, VALUE should be set to this value. 30739 30740 If this macro is not defined, the value of `clz' or `ctz' at zero 30741 is assumed to be undefined. 30742 30743 This macro must be defined if the target's expansion for `ffs' 30744 relies on a particular value to get correct results. Otherwise it 30745 is not necessary, though it may be used to optimize some corner 30746 cases, and to provide a default expansion for the `ffs' optab. 30747 30748 Note that regardless of this macro the "definedness" of `clz' and 30749 `ctz' at zero do _not_ extend to the builtin functions visible to 30750 the user. Thus one may be free to adjust the value at will to 30751 match the target expansion of these operations without fear of 30752 breaking the API. 30753 30754 -- Macro: Pmode 30755 An alias for the machine mode for pointers. On most machines, 30756 define this to be the integer mode corresponding to the width of a 30757 hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit 30758 machines. On some machines you must define this to be one of the 30759 partial integer modes, such as `PSImode'. 30760 30761 The width of `Pmode' must be at least as large as the value of 30762 `POINTER_SIZE'. If it is not equal, you must define the macro 30763 `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 30764 `Pmode'. 30765 30766 -- Macro: FUNCTION_MODE 30767 An alias for the machine mode used for memory references to 30768 functions being called, in `call' RTL expressions. On most CISC 30769 machines, where an instruction can begin at any byte address, this 30770 should be `QImode'. On most RISC machines, where all instructions 30771 have fixed size and alignment, this should be a mode with the same 30772 size and alignment as the machine instruction words - typically 30773 `SImode' or `HImode'. 30774 30775 -- Macro: STDC_0_IN_SYSTEM_HEADERS 30776 In normal operation, the preprocessor expands `__STDC__' to the 30777 constant 1, to signify that GCC conforms to ISO Standard C. On 30778 some hosts, like Solaris, the system compiler uses a different 30779 convention, where `__STDC__' is normally 0, but is 1 if the user 30780 specifies strict conformance to the C Standard. 30781 30782 Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 30783 convention when processing system header files, but when 30784 processing user files `__STDC__' will always expand to 1. 30785 30786 -- Macro: NO_IMPLICIT_EXTERN_C 30787 Define this macro if the system header files support C++ as well 30788 as C. This macro inhibits the usual method of using system header 30789 files in C++, which is to pretend that the file's contents are 30790 enclosed in `extern "C" {...}'. 30791 30792 -- Macro: REGISTER_TARGET_PRAGMAS () 30793 Define this macro if you want to implement any target-specific 30794 pragmas. If defined, it is a C expression which makes a series of 30795 calls to `c_register_pragma' or `c_register_pragma_with_expansion' 30796 for each pragma. The macro may also do any setup required for the 30797 pragmas. 30798 30799 The primary reason to define this macro is to provide 30800 compatibility with other compilers for the same target. In 30801 general, we discourage definition of target-specific pragmas for 30802 GCC. 30803 30804 If the pragma can be implemented by attributes then you should 30805 consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as 30806 well. 30807 30808 Preprocessor macros that appear on pragma lines are not expanded. 30809 All `#pragma' directives that do not match any registered pragma 30810 are silently ignored, unless the user specifies 30811 `-Wunknown-pragmas'. 30812 30813 -- Function: void c_register_pragma (const char *SPACE, const char 30814 *NAME, void (*CALLBACK) (struct cpp_reader *)) 30815 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 30816 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 30817 Each call to `c_register_pragma' or 30818 `c_register_pragma_with_expansion' establishes one pragma. The 30819 CALLBACK routine will be called when the preprocessor encounters a 30820 pragma of the form 30821 30822 #pragma [SPACE] NAME ... 30823 30824 SPACE is the case-sensitive namespace of the pragma, or `NULL' to 30825 put the pragma in the global namespace. The callback routine 30826 receives PFILE as its first argument, which can be passed on to 30827 cpplib's functions if necessary. You can lex tokens after the 30828 NAME by calling `pragma_lex'. Tokens that are not read by the 30829 callback will be silently ignored. The end of the line is 30830 indicated by a token of type `CPP_EOF'. Macro expansion occurs on 30831 the arguments of pragmas registered with 30832 `c_register_pragma_with_expansion' but not on the arguments of 30833 pragmas registered with `c_register_pragma'. 30834 30835 Note that the use of `pragma_lex' is specific to the C and C++ 30836 compilers. It will not work in the Java or Fortran compilers, or 30837 any other language compilers for that matter. Thus if 30838 `pragma_lex' is going to be called from target-specific code, it 30839 must only be done so when building the C and C++ compilers. This 30840 can be done by defining the variables `c_target_objs' and 30841 `cxx_target_objs' in the target entry in the `config.gcc' file. 30842 These variables should name the target-specific, language-specific 30843 object file which contains the code that uses `pragma_lex'. Note 30844 it will also be necessary to add a rule to the makefile fragment 30845 pointed to by `tmake_file' that shows how to build this object 30846 file. 30847 30848 -- Macro: HANDLE_SYSV_PRAGMA 30849 Define this macro (to a value of 1) if you want the System V style 30850 pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]' 30851 to be supported by gcc. 30852 30853 The pack pragma specifies the maximum alignment (in bytes) of 30854 fields within a structure, in much the same way as the 30855 `__aligned__' and `__packed__' `__attribute__'s do. A pack value 30856 of zero resets the behavior to the default. 30857 30858 A subtlety for Microsoft Visual C/C++ style bit-field packing 30859 (e.g. -mms-bitfields) for targets that support it: When a 30860 bit-field is inserted into a packed record, the whole size of the 30861 underlying type is used by one or more same-size adjacent 30862 bit-fields (that is, if its long:3, 32 bits is used in the record, 30863 and any additional adjacent long bit-fields are packed into the 30864 same chunk of 32 bits. However, if the size changes, a new field 30865 of that size is allocated). 30866 30867 If both MS bit-fields and `__attribute__((packed))' are used, the 30868 latter will take precedence. If `__attribute__((packed))' is used 30869 on a single field when MS bit-fields are in use, it will take 30870 precedence for that field, but the alignment of the rest of the 30871 structure may affect its placement. 30872 30873 The weak pragma only works if `SUPPORTS_WEAK' and 30874 `ASM_WEAKEN_LABEL' are defined. If enabled it allows the creation 30875 of specifically named weak labels, optionally with a value. 30876 30877 -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP 30878 Define this macro (to a value of 1) if you want to support the 30879 Win32 style pragmas `#pragma pack(push[,N])' and `#pragma 30880 pack(pop)'. The `pack(push,[N])' pragma specifies the maximum 30881 alignment (in bytes) of fields within a structure, in much the 30882 same way as the `__aligned__' and `__packed__' `__attribute__'s 30883 do. A pack value of zero resets the behavior to the default. 30884 Successive invocations of this pragma cause the previous values to 30885 be stacked, so that invocations of `#pragma pack(pop)' will return 30886 to the previous value. 30887 30888 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 30889 Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros 30890 should be expanded in the arguments of `#pragma pack'. 30891 30892 -- Macro: TARGET_DEFAULT_PACK_STRUCT 30893 If your target requires a structure packing default other than 0 30894 (meaning the machine default), define this macro to the necessary 30895 value (in bytes). This must be a value that would also be valid 30896 to use with `#pragma pack()' (that is, a small power of two). 30897 30898 -- Macro: HANDLE_PRAGMA_PUSH_POP_MACRO 30899 Define this macro if you want to support the Win32 style pragmas 30900 `#pragma push_macro(macro-name-as-string)' and `#pragma 30901 pop_macro(macro-name-as-string)'. The `#pragma push_macro( 30902 macro-name-as-string)' pragma saves the named macro and via 30903 `#pragma pop_macro(macro-name-as-string)' it will return to the 30904 previous value. 30905 30906 -- Macro: DOLLARS_IN_IDENTIFIERS 30907 Define this macro to control use of the character `$' in 30908 identifier names for the C family of languages. 0 means `$' is 30909 not allowed by default; 1 means it is allowed. 1 is the default; 30910 there is no need to define this macro in that case. 30911 30912 -- Macro: NO_DOLLAR_IN_LABEL 30913 Define this macro if the assembler does not accept the character 30914 `$' in label names. By default constructors and destructors in 30915 G++ have `$' in the identifiers. If this macro is defined, `.' is 30916 used instead. 30917 30918 -- Macro: NO_DOT_IN_LABEL 30919 Define this macro if the assembler does not accept the character 30920 `.' in label names. By default constructors and destructors in G++ 30921 have names that use `.'. If this macro is defined, these names 30922 are rewritten to avoid `.'. 30923 30924 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 30925 Define this macro as a C expression that is nonzero if it is safe 30926 for the delay slot scheduler to place instructions in the delay 30927 slot of INSN, even if they appear to use a resource set or 30928 clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GCC 30929 knows that every `call_insn' has this behavior. On machines where 30930 some `insn' or `jump_insn' is really a function call and hence has 30931 this behavior, you should define this macro. 30932 30933 You need not define this macro if it would always return zero. 30934 30935 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 30936 Define this macro as a C expression that is nonzero if it is safe 30937 for the delay slot scheduler to place instructions in the delay 30938 slot of INSN, even if they appear to set or clobber a resource 30939 referenced in INSN. INSN is always a `jump_insn' or an `insn'. 30940 On machines where some `insn' or `jump_insn' is really a function 30941 call and its operands are registers whose use is actually in the 30942 subroutine it calls, you should define this macro. Doing so 30943 allows the delay slot scheduler to move instructions which copy 30944 arguments into the argument registers into the delay slot of INSN. 30945 30946 You need not define this macro if it would always return zero. 30947 30948 -- Macro: MULTIPLE_SYMBOL_SPACES 30949 Define this macro as a C expression that is nonzero if, in some 30950 cases, global symbols from one translation unit may not be bound 30951 to undefined symbols in another translation unit without user 30952 intervention. For instance, under Microsoft Windows symbols must 30953 be explicitly imported from shared libraries (DLLs). 30954 30955 You need not define this macro if it would always evaluate to zero. 30956 30957 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree 30958 INPUTS, tree CLOBBERS) 30959 This target hook should add to CLOBBERS `STRING_CST' trees for any 30960 hard regs the port wishes to automatically clobber for an asm. It 30961 should return the result of the last `tree_cons' used to add a 30962 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the 30963 corresponding parameters to the asm and may be inspected to avoid 30964 clobbering a register that is an input or output of the asm. You 30965 can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test 30966 for overlap with regards to asm-declared registers. 30967 30968 -- Macro: MATH_LIBRARY 30969 Define this macro as a C string constant for the linker argument 30970 to link in the system math library, or `""' if the target does not 30971 have a separate math library. 30972 30973 You need only define this macro if the default of `"-lm"' is wrong. 30974 30975 -- Macro: LIBRARY_PATH_ENV 30976 Define this macro as a C string constant for the environment 30977 variable that specifies where the linker should look for libraries. 30978 30979 You need only define this macro if the default of `"LIBRARY_PATH"' 30980 is wrong. 30981 30982 -- Macro: TARGET_POSIX_IO 30983 Define this macro if the target supports the following POSIX file 30984 functions, access, mkdir and file locking with fcntl / F_SETLKW. 30985 Defining `TARGET_POSIX_IO' will enable the test coverage code to 30986 use file locking when exiting a program, which avoids race 30987 conditions if the program has forked. It will also create 30988 directories at run-time for cross-profiling. 30989 30990 -- Macro: MAX_CONDITIONAL_EXECUTE 30991 A C expression for the maximum number of instructions to execute 30992 via conditional execution instructions instead of a branch. A 30993 value of `BRANCH_COST'+1 is the default if the machine does not 30994 use cc0, and 1 if it does use cc0. 30995 30996 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 30997 Used if the target needs to perform machine-dependent 30998 modifications on the conditionals used for turning basic blocks 30999 into conditionally executed code. CE_INFO points to a data 31000 structure, `struct ce_if_block', which contains information about 31001 the currently processed blocks. TRUE_EXPR and FALSE_EXPR are the 31002 tests that are used for converting the then-block and the 31003 else-block, respectively. Set either TRUE_EXPR or FALSE_EXPR to a 31004 null pointer if the tests cannot be converted. 31005 31006 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 31007 FALSE_EXPR) 31008 Like `IFCVT_MODIFY_TESTS', but used when converting more 31009 complicated if-statements into conditions combined by `and' and 31010 `or' operations. BB contains the basic block that contains the 31011 test that is currently being processed and about to be turned into 31012 a condition. 31013 31014 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 31015 A C expression to modify the PATTERN of an INSN that is to be 31016 converted to conditional execution format. CE_INFO points to a 31017 data structure, `struct ce_if_block', which contains information 31018 about the currently processed blocks. 31019 31020 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 31021 A C expression to perform any final machine dependent 31022 modifications in converting code to conditional execution. The 31023 involved basic blocks can be found in the `struct ce_if_block' 31024 structure that is pointed to by CE_INFO. 31025 31026 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 31027 A C expression to cancel any machine dependent modifications in 31028 converting code to conditional execution. The involved basic 31029 blocks can be found in the `struct ce_if_block' structure that is 31030 pointed to by CE_INFO. 31031 31032 -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO) 31033 A C expression to initialize any extra fields in a `struct 31034 ce_if_block' structure, which are defined by the 31035 `IFCVT_EXTRA_FIELDS' macro. 31036 31037 -- Macro: IFCVT_EXTRA_FIELDS 31038 If defined, it should expand to a set of field declarations that 31039 will be added to the `struct ce_if_block' structure. These should 31040 be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro. 31041 31042 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG () 31043 If non-null, this hook performs a target-specific pass over the 31044 instruction stream. The compiler will run it at all optimization 31045 levels, just before the point at which it normally does 31046 delayed-branch scheduling. 31047 31048 The exact purpose of the hook varies from target to target. Some 31049 use it to do transformations that are necessary for correctness, 31050 such as laying out in-function constant pools or avoiding hardware 31051 hazards. Others use it as an opportunity to do some 31052 machine-dependent optimizations. 31053 31054 You need not implement the hook if it has nothing to do. The 31055 default definition is null. 31056 31057 -- Target Hook: void TARGET_INIT_BUILTINS () 31058 Define this hook if you have any machine-specific built-in 31059 functions that need to be defined. It should be a function that 31060 performs the necessary setup. 31061 31062 Machine specific built-in functions can be useful to expand 31063 special machine instructions that would otherwise not normally be 31064 generated because they have no equivalent in the source language 31065 (for example, SIMD vector instructions or prefetch instructions). 31066 31067 To create a built-in function, call the function 31068 `lang_hooks.builtin_function' which is defined by the language 31069 front end. You can use any type nodes set up by 31070 `build_common_tree_nodes' and `build_common_tree_nodes_2'; only 31071 language front ends that use those two functions will call 31072 `TARGET_INIT_BUILTINS'. 31073 31074 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 31075 SUBTARGET, enum machine_mode MODE, int IGNORE) 31076 Expand a call to a machine specific built-in function that was set 31077 up by `TARGET_INIT_BUILTINS'. EXP is the expression for the 31078 function call; the result should go to TARGET if that is 31079 convenient, and have mode MODE if that is convenient. SUBTARGET 31080 may be used as the target for computing one of EXP's operands. 31081 IGNORE is nonzero if the value is to be ignored. This function 31082 should return the result of the call to the built-in function. 31083 31084 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (tree FNDECL, 31085 tree ARGLIST) 31086 Select a replacement for a machine specific built-in function that 31087 was set up by `TARGET_INIT_BUILTINS'. This is done _before_ 31088 regular type checking, and so allows the target to implement a 31089 crude form of function overloading. FNDECL is the declaration of 31090 the built-in function. ARGLIST is the list of arguments passed to 31091 the built-in function. The result is a complete expression that 31092 implements the operation, usually another `CALL_EXPR'. 31093 31094 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, tree ARGLIST, 31095 bool IGNORE) 31096 Fold a call to a machine specific built-in function that was set 31097 up by `TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 31098 built-in function. ARGLIST is the list of arguments passed to the 31099 built-in function. The result is another tree containing a 31100 simplified expression for the call's result. If IGNORE is true 31101 the value will be ignored. 31102 31103 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (rtx INSN) 31104 Take an instruction in INSN and return NULL if it is valid within a 31105 low-overhead loop, otherwise return a string why doloop could not 31106 be applied. 31107 31108 Many targets use special registers for low-overhead looping. For 31109 any instruction that clobbers these this function should return a 31110 string indicating the reason why the doloop could not be applied. 31111 By default, the RTL loop optimizer does not use a present doloop 31112 pattern for loops containing function calls or branch on table 31113 instructions. 31114 31115 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2) 31116 Take a branch insn in BRANCH1 and another in BRANCH2. Return true 31117 if redirecting BRANCH1 to the destination of BRANCH2 is possible. 31118 31119 On some targets, branches may have a limited range. Optimizing the 31120 filling of delay slots can result in branches being redirected, 31121 and this may in turn cause a branch offset to overflow. 31122 31123 -- Target Hook: bool TARGET_COMMUTATIVE_P (rtx X, OUTER_CODE) 31124 This target hook returns `true' if X is considered to be 31125 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 31126 PA doesn't consider PLUS to be commutative inside a MEM. 31127 OUTER_CODE is the rtx code of the enclosing rtl, if known, 31128 otherwise it is UNKNOWN. 31129 31130 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 31131 When the initial value of a hard register has been copied in a 31132 pseudo register, it is often not necessary to actually allocate 31133 another register to this pseudo register, because the original 31134 hard register or a stack slot it has been saved into can be used. 31135 `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 31136 allocation once for each hard register that had its initial value 31137 copied by using `get_func_hard_reg_initial_val' or 31138 `get_hard_reg_initial_val'. Possible values are `NULL_RTX', if 31139 you don't want to do any special allocation, a `REG' rtx--that 31140 would typically be the hard register itself, if it is known not to 31141 be clobbered--or a `MEM'. If you are returning a `MEM', this is 31142 only a hint for the allocator; it might decide to use another 31143 register anyways. You may use `current_function_leaf_function' in 31144 the hook, functions that use `REG_N_SETS', to determine if the hard 31145 register in question will not be clobbered. The default value of 31146 this hook is `NULL', which disables any special allocation. 31147 31148 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 31149 FLAGS) 31150 This target hook returns nonzero if X, an `unspec' or 31151 `unspec_volatile' operation, might cause a trap. Targets can use 31152 this hook to enhance precision of analysis for `unspec' and 31153 `unspec_volatile' operations. You may call `may_trap_p_1' to 31154 analyze inner elements of X in which case FLAGS should be passed 31155 along. 31156 31157 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 31158 The compiler invokes this hook whenever it changes its current 31159 function context (`cfun'). You can define this function if the 31160 back end needs to perform any initialization or reset actions on a 31161 per-function basis. For example, it may be used to implement 31162 function attributes that affect register usage or code generation 31163 patterns. The argument DECL is the declaration for the new 31164 function context, and may be null to indicate that the compiler 31165 has left a function context and is returning to processing at the 31166 top level. The default hook function does nothing. 31167 31168 GCC sets `cfun' to a dummy function context during initialization 31169 of some parts of the back end. The hook function is not invoked 31170 in this situation; you need not worry about the hook being invoked 31171 recursively, or when the back end is in a partially-initialized 31172 state. 31173 31174 -- Macro: TARGET_OBJECT_SUFFIX 31175 Define this macro to be a C string representing the suffix for 31176 object files on your target machine. If you do not define this 31177 macro, GCC will use `.o' as the suffix for object files. 31178 31179 -- Macro: TARGET_EXECUTABLE_SUFFIX 31180 Define this macro to be a C string representing the suffix to be 31181 automatically added to executable files on your target machine. 31182 If you do not define this macro, GCC will use the null string as 31183 the suffix for executable files. 31184 31185 -- Macro: COLLECT_EXPORT_LIST 31186 If defined, `collect2' will scan the individual object files 31187 specified on its command line and create an export list for the 31188 linker. Define this macro for systems like AIX, where the linker 31189 discards object files that are not referenced from `main' and uses 31190 export lists. 31191 31192 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 31193 Define this macro to a C expression representing a variant of the 31194 method call MDECL, if Java Native Interface (JNI) methods must be 31195 invoked differently from other methods on your target. For 31196 example, on 32-bit Microsoft Windows, JNI methods must be invoked 31197 using the `stdcall' calling convention and this macro is then 31198 defined as this expression: 31199 31200 build_type_attribute_variant (MDECL, 31201 build_tree_list 31202 (get_identifier ("stdcall"), 31203 NULL)) 31204 31205 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 31206 This target hook returns `true' past the point in which new jump 31207 instructions could be created. On machines that require a 31208 register for every jump such as the SHmedia ISA of SH5, this point 31209 would typically be reload, so this target hook should be defined 31210 to a function such as: 31211 31212 static bool 31213 cannot_modify_jumps_past_reload_p () 31214 { 31215 return (reload_completed || reload_in_progress); 31216 } 31217 31218 -- Target Hook: int TARGET_BRANCH_TARGET_REGISTER_CLASS (void) 31219 This target hook returns a register class for which branch target 31220 register optimizations should be applied. All registers in this 31221 class should be usable interchangeably. After reload, registers 31222 in this class will be re-allocated and loads will be hoisted out 31223 of loops and be subjected to inter-block scheduling. 31224 31225 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 31226 AFTER_PROLOGUE_EPILOGUE_GEN) 31227 Branch target register optimization will by default exclude 31228 callee-saved registers that are not already live during the 31229 current function; if this target hook returns true, they will be 31230 included. The target code must than make sure that all target 31231 registers in the class returned by 31232 `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are 31233 saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and 31234 epilogues have already been generated. Note, even if you only 31235 return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still 31236 are likely to have to make special provisions in 31237 `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 31238 target registers. 31239 31240 -- Macro: POWI_MAX_MULTS 31241 If defined, this macro is interpreted as a signed integer C 31242 expression that specifies the maximum number of floating point 31243 multiplications that should be emitted when expanding 31244 exponentiation by an integer constant inline. When this value is 31245 defined, exponentiation requiring more than this number of 31246 multiplications is implemented by calling the system library's 31247 `pow', `powf' or `powl' routines. The default value places no 31248 upper bound on the multiplication count. 31249 31250 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 31251 *IPREFIX, int STDINC) 31252 This target hook should register any extra include files for the 31253 target. The parameter STDINC indicates if normal include files 31254 are present. The parameter SYSROOT is the system root directory. 31255 The parameter IPREFIX is the prefix for the gcc directory. 31256 31257 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 31258 char *IPREFIX, int STDINC) 31259 This target hook should register any extra include files for the 31260 target before any standard headers. The parameter STDINC 31261 indicates if normal include files are present. The parameter 31262 SYSROOT is the system root directory. The parameter IPREFIX is 31263 the prefix for the gcc directory. 31264 31265 -- Macro: void TARGET_OPTF (char *PATH) 31266 This target hook should register special include paths for the 31267 target. The parameter PATH is the include to register. On Darwin 31268 systems, this is used for Framework includes, which have semantics 31269 that are different from `-I'. 31270 31271 -- Target Hook: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 31272 This target hook returns `true' if it is safe to use a local alias 31273 for a virtual function FNDECL when constructing thunks, `false' 31274 otherwise. By default, the hook returns `true' for all functions, 31275 if a target supports aliases (i.e. defines `ASM_OUTPUT_DEF'), 31276 `false' otherwise, 31277 31278 -- Macro: TARGET_FORMAT_TYPES 31279 If defined, this macro is the name of a global variable containing 31280 target-specific format checking information for the `-Wformat' 31281 option. The default is to have no target-specific format checks. 31282 31283 -- Macro: TARGET_N_FORMAT_TYPES 31284 If defined, this macro is the number of entries in 31285 `TARGET_FORMAT_TYPES'. 31286 31287 -- Target Hook: bool TARGET_RELAXED_ORDERING 31288 If set to `true', means that the target's memory model does not 31289 guarantee that loads which do not depend on one another will access 31290 main memory in the order of the instruction stream; if ordering is 31291 important, an explicit memory barrier must be used. This is true 31292 of many recent processors which implement a policy of "relaxed," 31293 "weak," or "release" memory consistency, such as Alpha, PowerPC, 31294 and ia64. The default is `false'. 31295 31296 -- Target Hook: const char *TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 31297 (tree TYPELIST, tree FUNCDECL, tree VAL) 31298 If defined, this macro returns the diagnostic message when it is 31299 illegal to pass argument VAL to function FUNCDECL with prototype 31300 TYPELIST. 31301 31302 -- Target Hook: const char * TARGET_INVALID_CONVERSION (tree FROMTYPE, 31303 tree TOTYPE) 31304 If defined, this macro returns the diagnostic message when it is 31305 invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity 31306 should be determined by the front end. 31307 31308 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, tree 31309 TYPE) 31310 If defined, this macro returns the diagnostic message when it is 31311 invalid to apply operation OP (where unary plus is denoted by 31312 `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity 31313 should be determined by the front end. 31314 31315 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, tree 31316 TYPE1, tree TYPE2) 31317 If defined, this macro returns the diagnostic message when it is 31318 invalid to apply operation OP to operands of types TYPE1 and 31319 TYPE2, or `NULL' if validity should be determined by the front end. 31320 31321 -- Macro: TARGET_USE_JCR_SECTION 31322 This macro determines whether to use the JCR section to register 31323 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 31324 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, 31325 else 0. 31326 31327 -- Macro: OBJC_JBLEN 31328 This macro determines the size of the objective C jump buffer for 31329 the NeXT runtime. By default, OBJC_JBLEN is defined to an 31330 innocuous value. 31331 31332 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 31333 Define this macro if any target-specific attributes need to be 31334 attached to the functions in `libgcc' that provide low-level 31335 support for call stack unwinding. It is used in declarations in 31336 `unwind-generic.h' and the associated definitions of those 31337 functions. 31338 31339 31340 File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 31341 31342 16 Host Configuration 31343 ********************* 31344 31345 Most details about the machine and system on which the compiler is 31346 actually running are detected by the `configure' script. Some things 31347 are impossible for `configure' to detect; these are described in two 31348 ways, either by macros defined in a file named `xm-MACHINE.h' or by 31349 hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable 31350 in `config.gcc'. (The intention is that very few hosts will need a 31351 header file but nearly every fully supported host will need to override 31352 some hooks.) 31353 31354 If you need to define only a few macros, and they have simple 31355 definitions, consider using the `xm_defines' variable in your 31356 `config.gcc' entry instead of creating a host configuration header. 31357 *Note System Config::. 31358 31359 * Menu: 31360 31361 * Host Common:: Things every host probably needs implemented. 31362 * Filesystem:: Your host can't have the letter `a' in filenames? 31363 * Host Misc:: Rare configuration options for hosts. 31364 31365 31366 File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 31367 31368 16.1 Host Common 31369 ================ 31370 31371 Some things are just not portable, even between similar operating 31372 systems, and are too difficult for autoconf to detect. They get 31373 implemented using hook functions in the file specified by the 31374 HOST_HOOK_OBJ variable in `config.gcc'. 31375 31376 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 31377 This host hook is used to set up handling for extra signals. The 31378 most common thing to do in this hook is to detect stack overflow. 31379 31380 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 31381 FD) 31382 This host hook returns the address of some space that is likely to 31383 be free in some subsequent invocation of the compiler. We intend 31384 to load the PCH data at this address such that the data need not 31385 be relocated. The area should be able to hold SIZE bytes. If the 31386 host uses `mmap', FD is an open file descriptor that can be used 31387 for probing. 31388 31389 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, 31390 size_t SIZE, int FD, size_t OFFSET) 31391 This host hook is called when a PCH file is about to be loaded. 31392 We want to load SIZE bytes from FD at OFFSET into memory at 31393 ADDRESS. The given address will be the result of a previous 31394 invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we 31395 couldn't allocate SIZE bytes at ADDRESS. Return 0 if the memory 31396 is allocated but the data is not loaded. Return 1 if the hook has 31397 performed everything. 31398 31399 If the implementation uses reserved address space, free any 31400 reserved space beyond SIZE, regardless of the return value. If no 31401 PCH will be loaded, this hook may be called with SIZE zero, in 31402 which case all reserved address space should be freed. 31403 31404 Do not try to handle values of ADDRESS that could not have been 31405 returned by this executable; just return -1. Such values usually 31406 indicate an out-of-date PCH file (built by some other GCC 31407 executable), and such a PCH file won't work. 31408 31409 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 31410 This host hook returns the alignment required for allocating 31411 virtual memory. Usually this is the same as getpagesize, but on 31412 some hosts the alignment for reserving memory differs from the 31413 pagesize for committing memory. 31414 31415 31416 File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 31417 31418 16.2 Host Filesystem 31419 ==================== 31420 31421 GCC needs to know a number of things about the semantics of the host 31422 machine's filesystem. Filesystems with Unix and MS-DOS semantics are 31423 automatically detected. For other systems, you can define the 31424 following macros in `xm-MACHINE.h'. 31425 31426 `HAVE_DOS_BASED_FILE_SYSTEM' 31427 This macro is automatically defined by `system.h' if the host file 31428 system obeys the semantics defined by MS-DOS instead of Unix. DOS 31429 file systems are case insensitive, file specifications may begin 31430 with a drive letter, and both forward slash and backslash (`/' and 31431 `\') are directory separators. 31432 31433 `DIR_SEPARATOR' 31434 `DIR_SEPARATOR_2' 31435 If defined, these macros expand to character constants specifying 31436 separators for directory names within a file specification. 31437 `system.h' will automatically give them appropriate values on Unix 31438 and MS-DOS file systems. If your file system is neither of these, 31439 define one or both appropriately in `xm-MACHINE.h'. 31440 31441 However, operating systems like VMS, where constructing a pathname 31442 is more complicated than just stringing together directory names 31443 separated by a special character, should not define either of these 31444 macros. 31445 31446 `PATH_SEPARATOR' 31447 If defined, this macro should expand to a character constant 31448 specifying the separator for elements of search paths. The default 31449 value is a colon (`:'). DOS-based systems usually, but not 31450 always, use semicolon (`;'). 31451 31452 `VMS' 31453 Define this macro if the host system is VMS. 31454 31455 `HOST_OBJECT_SUFFIX' 31456 Define this macro to be a C string representing the suffix for 31457 object files on your host machine. If you do not define this 31458 macro, GCC will use `.o' as the suffix for object files. 31459 31460 `HOST_EXECUTABLE_SUFFIX' 31461 Define this macro to be a C string representing the suffix for 31462 executable files on your host machine. If you do not define this 31463 macro, GCC will use the null string as the suffix for executable 31464 files. 31465 31466 `HOST_BIT_BUCKET' 31467 A pathname defined by the host operating system, which can be 31468 opened as a file and written to, but all the information written 31469 is discarded. This is commonly known as a "bit bucket" or "null 31470 device". If you do not define this macro, GCC will use 31471 `/dev/null' as the bit bucket. If the host does not support a bit 31472 bucket, define this macro to an invalid filename. 31473 31474 `UPDATE_PATH_HOST_CANONICALIZE (PATH)' 31475 If defined, a C statement (sans semicolon) that performs 31476 host-dependent canonicalization when a path used in a compilation 31477 driver or preprocessor is canonicalized. PATH is a malloc-ed path 31478 to be canonicalized. If the C statement does canonicalize PATH 31479 into a different buffer, the old path should be freed and the new 31480 buffer should have been allocated with malloc. 31481 31482 `DUMPFILE_FORMAT' 31483 Define this macro to be a C string representing the format to use 31484 for constructing the index part of debugging dump file names. The 31485 resultant string must fit in fifteen bytes. The full filename 31486 will be the concatenation of: the prefix of the assembler file 31487 name, the string resulting from applying this format to an index 31488 number, and a string unique to each dump file kind, e.g. `rtl'. 31489 31490 If you do not define this macro, GCC will use `.%02d.'. You should 31491 define this macro if using the default will create an invalid file 31492 name. 31493 31494 `DELETE_IF_ORDINARY' 31495 Define this macro to be a C statement (sans semicolon) that 31496 performs host-dependent removal of ordinary temp files in the 31497 compilation driver. 31498 31499 If you do not define this macro, GCC will use the default version. 31500 You should define this macro if the default version does not 31501 reliably remove the temp file as, for example, on VMS which allows 31502 multiple versions of a file. 31503 31504 `HOST_LACKS_INODE_NUMBERS' 31505 Define this macro if the host filesystem does not report 31506 meaningful inode numbers in struct stat. 31507 31508 31509 File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 31510 31511 16.3 Host Misc 31512 ============== 31513 31514 `FATAL_EXIT_CODE' 31515 A C expression for the status code to be returned when the compiler 31516 exits after serious errors. The default is the system-provided 31517 macro `EXIT_FAILURE', or `1' if the system doesn't define that 31518 macro. Define this macro only if these defaults are incorrect. 31519 31520 `SUCCESS_EXIT_CODE' 31521 A C expression for the status code to be returned when the compiler 31522 exits without serious errors. (Warnings are not serious errors.) 31523 The default is the system-provided macro `EXIT_SUCCESS', or `0' if 31524 the system doesn't define that macro. Define this macro only if 31525 these defaults are incorrect. 31526 31527 `USE_C_ALLOCA' 31528 Define this macro if GCC should use the C implementation of 31529 `alloca' provided by `libiberty.a'. This only affects how some 31530 parts of the compiler itself allocate memory. It does not change 31531 code generation. 31532 31533 When GCC is built with a compiler other than itself, the C `alloca' 31534 is always used. This is because most other implementations have 31535 serious bugs. You should define this macro only on a system where 31536 no stack-based `alloca' can possibly work. For instance, if a 31537 system has a small limit on the size of the stack, GCC's builtin 31538 `alloca' will not work reliably. 31539 31540 `COLLECT2_HOST_INITIALIZATION' 31541 If defined, a C statement (sans semicolon) that performs 31542 host-dependent initialization when `collect2' is being initialized. 31543 31544 `GCC_DRIVER_HOST_INITIALIZATION' 31545 If defined, a C statement (sans semicolon) that performs 31546 host-dependent initialization when a compilation driver is being 31547 initialized. 31548 31549 `HOST_LONG_LONG_FORMAT' 31550 If defined, the string used to indicate an argument of type `long 31551 long' to functions like `printf'. The default value is `"ll"'. 31552 31553 In addition, if `configure' generates an incorrect definition of any 31554 of the macros in `auto-host.h', you can override that definition in a 31555 host configuration header. If you need to do this, first see if it is 31556 possible to fix `configure'. 31557 31558 31559 File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 31560 31561 17 Makefile Fragments 31562 ********************* 31563 31564 When you configure GCC using the `configure' script, it will construct 31565 the file `Makefile' from the template file `Makefile.in'. When it does 31566 this, it can incorporate makefile fragments from the `config' 31567 directory. These are used to set Makefile parameters that are not 31568 amenable to being calculated by autoconf. The list of fragments to 31569 incorporate is set by `config.gcc' (and occasionally `config.build' and 31570 `config.host'); *Note System Config::. 31571 31572 Fragments are named either `t-TARGET' or `x-HOST', depending on 31573 whether they are relevant to configuring GCC to produce code for a 31574 particular target, or to configuring GCC to run on a particular host. 31575 Here TARGET and HOST are mnemonics which usually have some relationship 31576 to the canonical system name, but no formal connection. 31577 31578 If these files do not exist, it means nothing needs to be added for a 31579 given target or host. Most targets need a few `t-TARGET' fragments, 31580 but needing `x-HOST' fragments is rare. 31581 31582 * Menu: 31583 31584 * Target Fragment:: Writing `t-TARGET' files. 31585 * Host Fragment:: Writing `x-HOST' files. 31586 31587 31588 File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 31589 31590 17.1 Target Makefile Fragments 31591 ============================== 31592 31593 Target makefile fragments can set these Makefile variables. 31594 31595 `LIBGCC2_CFLAGS' 31596 Compiler flags to use when compiling `libgcc2.c'. 31597 31598 `LIB2FUNCS_EXTRA' 31599 A list of source file names to be compiled or assembled and 31600 inserted into `libgcc.a'. 31601 31602 `Floating Point Emulation' 31603 To have GCC include software floating point libraries in `libgcc.a' 31604 define `FPBIT' and `DPBIT' along with a few rules as follows: 31605 # We want fine grained libraries, so use the new code 31606 # to build the floating point emulation libraries. 31607 FPBIT = fp-bit.c 31608 DPBIT = dp-bit.c 31609 31610 31611 fp-bit.c: $(srcdir)/config/fp-bit.c 31612 echo '#define FLOAT' > fp-bit.c 31613 cat $(srcdir)/config/fp-bit.c >> fp-bit.c 31614 31615 dp-bit.c: $(srcdir)/config/fp-bit.c 31616 cat $(srcdir)/config/fp-bit.c > dp-bit.c 31617 31618 You may need to provide additional #defines at the beginning of 31619 `fp-bit.c' and `dp-bit.c' to control target endianness and other 31620 options. 31621 31622 `CRTSTUFF_T_CFLAGS' 31623 Special flags used when compiling `crtstuff.c'. *Note 31624 Initialization::. 31625 31626 `CRTSTUFF_T_CFLAGS_S' 31627 Special flags used when compiling `crtstuff.c' for shared linking. 31628 Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'. 31629 *Note Initialization::. 31630 31631 `MULTILIB_OPTIONS' 31632 For some targets, invoking GCC in different ways produces objects 31633 that can not be linked together. For example, for some targets GCC 31634 produces both big and little endian code. For these targets, you 31635 must arrange for multiple versions of `libgcc.a' to be compiled, 31636 one for each set of incompatible options. When GCC invokes the 31637 linker, it arranges to link in the right version of `libgcc.a', 31638 based on the command line options used. 31639 31640 The `MULTILIB_OPTIONS' macro lists the set of options for which 31641 special versions of `libgcc.a' must be built. Write options that 31642 are mutually incompatible side by side, separated by a slash. 31643 Write options that may be used together separated by a space. The 31644 build procedure will build all combinations of compatible options. 31645 31646 For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020 31647 msoft-float', `Makefile' will build special versions of `libgcc.a' 31648 using the following sets of options: `-m68000', `-m68020', 31649 `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'. 31650 31651 `MULTILIB_DIRNAMES' 31652 If `MULTILIB_OPTIONS' is used, this variable specifies the 31653 directory names that should be used to hold the various libraries. 31654 Write one element in `MULTILIB_DIRNAMES' for each element in 31655 `MULTILIB_OPTIONS'. If `MULTILIB_DIRNAMES' is not used, the 31656 default value will be `MULTILIB_OPTIONS', with all slashes treated 31657 as spaces. 31658 31659 For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020 31660 msoft-float', then the default value of `MULTILIB_DIRNAMES' is 31661 `m68000 m68020 msoft-float'. You may specify a different value if 31662 you desire a different set of directory names. 31663 31664 `MULTILIB_MATCHES' 31665 Sometimes the same option may be written in two different ways. 31666 If an option is listed in `MULTILIB_OPTIONS', GCC needs to know 31667 about any synonyms. In that case, set `MULTILIB_MATCHES' to a 31668 list of items of the form `option=option' to describe all relevant 31669 synonyms. For example, `m68000=mc68000 m68020=mc68020'. 31670 31671 `MULTILIB_EXCEPTIONS' 31672 Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being 31673 specified, there are combinations that should not be built. In 31674 that case, set `MULTILIB_EXCEPTIONS' to be all of the switch 31675 exceptions in shell case syntax that should not be built. 31676 31677 For example the ARM processor cannot execute both hardware floating 31678 point instructions and the reduced size THUMB instructions at the 31679 same time, so there is no need to build libraries with both of 31680 these options enabled. Therefore `MULTILIB_EXCEPTIONS' is set to: 31681 *mthumb/*mhard-float* 31682 31683 `MULTILIB_EXTRA_OPTS' 31684 Sometimes it is desirable that when building multiple versions of 31685 `libgcc.a' certain options should always be passed on to the 31686 compiler. In that case, set `MULTILIB_EXTRA_OPTS' to be the list 31687 of options to be used for all builds. If you set this, you should 31688 probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it. 31689 31690 `NATIVE_SYSTEM_HEADER_DIR' 31691 If the default location for system headers is not `/usr/include', 31692 you must set this to the directory containing the headers. This 31693 value should match the value of the `SYSTEM_INCLUDE_DIR' macro. 31694 31695 `SPECS' 31696 Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since 31697 it does not affect the build of target libraries, at least not the 31698 build of the default multilib. One possible work-around is to use 31699 `DRIVER_SELF_SPECS' to bring options from the `specs' file as if 31700 they had been passed in the compiler driver command line. 31701 However, you don't want to be adding these options after the 31702 toolchain is installed, so you can instead tweak the `specs' file 31703 that will be used during the toolchain build, while you still 31704 install the original, built-in `specs'. The trick is to set 31705 `SPECS' to some other filename (say `specs.install'), that will 31706 then be created out of the built-in specs, and introduce a 31707 `Makefile' rule to generate the `specs' file that's going to be 31708 used at build time out of your `specs.install'. 31709 31710 31711 File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 31712 31713 17.2 Host Makefile Fragments 31714 ============================ 31715 31716 The use of `x-HOST' fragments is discouraged. You should do so only if 31717 there is no other mechanism to get the behavior desired. Host 31718 fragments should never forcibly override variables set by the configure 31719 script, as they may have been adjusted by the user. 31720 31721 Variables provided for host fragments to set include: 31722 31723 `X_CFLAGS' 31724 `X_CPPFLAGS' 31725 These are extra flags to pass to the C compiler and preprocessor, 31726 respectively. They are used both when building GCC, and when 31727 compiling things with the just-built GCC. 31728 31729 `XCFLAGS' 31730 These are extra flags to use when building the compiler. They are 31731 not used when compiling `libgcc.a'. However, they _are_ used when 31732 recompiling the compiler with itself in later stages of a 31733 bootstrap. 31734 31735 `BOOT_LDFLAGS' 31736 Flags to be passed to the linker when recompiling the compiler with 31737 itself in later stages of a bootstrap. You might need to use this 31738 if, for instance, one of the front ends needs more text space than 31739 the linker provides by default. 31740 31741 `EXTRA_PROGRAMS' 31742 A list of additional programs required to use the compiler on this 31743 host, which should be compiled with GCC and installed alongside 31744 the front ends. If you set this variable, you must also provide 31745 rules to build the extra programs. 31746 31747 31748 31749 File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 31750 31751 18 `collect2' 31752 ************* 31753 31754 GCC uses a utility called `collect2' on nearly all systems to arrange 31755 to call various initialization functions at start time. 31756 31757 The program `collect2' works by linking the program once and looking 31758 through the linker output file for symbols with particular names 31759 indicating they are constructor functions. If it finds any, it creates 31760 a new temporary `.c' file containing a table of them, compiles it, and 31761 links the program a second time including that file. 31762 31763 The actual calls to the constructors are carried out by a subroutine 31764 called `__main', which is called (automatically) at the beginning of 31765 the body of `main' (provided `main' was compiled with GNU CC). Calling 31766 `__main' is necessary, even when compiling C code, to allow linking C 31767 and C++ object code together. (If you use `-nostdlib', you get an 31768 unresolved reference to `__main', since it's defined in the standard 31769 GCC library. Include `-lgcc' at the end of your compiler command line 31770 to resolve this reference.) 31771 31772 The program `collect2' is installed as `ld' in the directory where the 31773 passes of the compiler are installed. When `collect2' needs to find 31774 the _real_ `ld', it tries the following file names: 31775 31776 * `real-ld' in the directories listed in the compiler's search 31777 directories. 31778 31779 * `real-ld' in the directories listed in the environment variable 31780 `PATH'. 31781 31782 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 31783 if specified. 31784 31785 * `ld' in the compiler's search directories, except that `collect2' 31786 will not execute itself recursively. 31787 31788 * `ld' in `PATH'. 31789 31790 "The compiler's search directories" means all the directories where 31791 `gcc' searches for passes of the compiler. This includes directories 31792 that you specify with `-B'. 31793 31794 Cross-compilers search a little differently: 31795 31796 * `real-ld' in the compiler's search directories. 31797 31798 * `TARGET-real-ld' in `PATH'. 31799 31800 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 31801 if specified. 31802 31803 * `ld' in the compiler's search directories. 31804 31805 * `TARGET-ld' in `PATH'. 31806 31807 `collect2' explicitly avoids running `ld' using the file name under 31808 which `collect2' itself was invoked. In fact, it remembers up a list 31809 of such names--in case one copy of `collect2' finds another copy (or 31810 version) of `collect2' installed as `ld' in a second place in the 31811 search path. 31812 31813 `collect2' searches for the utilities `nm' and `strip' using the same 31814 algorithm as above for `ld'. 31815 31816 31817 File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 31818 31819 19 Standard Header File Directories 31820 *********************************** 31821 31822 `GCC_INCLUDE_DIR' means the same thing for native and cross. It is 31823 where GCC stores its private include files, and also where GCC stores 31824 the fixed include files. A cross compiled GCC runs `fixincludes' on 31825 the header files in `$(tooldir)/include'. (If the cross compilation 31826 header files need to be fixed, they must be installed before GCC is 31827 built. If the cross compilation header files are already suitable for 31828 GCC, nothing special need be done). 31829 31830 `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 31831 is where `g++' looks first for header files. The C++ library installs 31832 only target independent header files in that directory. 31833 31834 `LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 31835 install anything there. It is normally `/usr/local/include'. This is 31836 where local additions to a packaged system should place header files. 31837 31838 `CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 31839 install anything there. 31840 31841 `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 31842 the place for other packages to install header files that GCC will use. 31843 For a cross-compiler, this is the equivalent of `/usr/include'. When 31844 you build a cross-compiler, `fixincludes' processes any header files in 31845 this directory. 31846 31847 31848 File: gccint.info, Node: Type Information, Next: Funding, Prev: Header Dirs, Up: Top 31849 31850 20 Memory Management and Type Information 31851 ***************************************** 31852 31853 GCC uses some fairly sophisticated memory management techniques, which 31854 involve determining information about GCC's data structures from GCC's 31855 source code and using this information to perform garbage collection and 31856 implement precompiled headers. 31857 31858 A full C parser would be too complicated for this task, so a limited 31859 subset of C is interpreted and special markers are used to determine 31860 what parts of the source to look at. All `struct' and `union' 31861 declarations that define data structures that are allocated under 31862 control of the garbage collector must be marked. All global variables 31863 that hold pointers to garbage-collected memory must also be marked. 31864 Finally, all global variables that need to be saved and restored by a 31865 precompiled header must be marked. (The precompiled header mechanism 31866 can only save static variables if they're scalar. Complex data 31867 structures must be allocated in garbage-collected memory to be saved in 31868 a precompiled header.) 31869 31870 The full format of a marker is 31871 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 31872 but in most cases no options are needed. The outer double parentheses 31873 are still necessary, though: `GTY(())'. Markers can appear: 31874 31875 * In a structure definition, before the open brace; 31876 31877 * In a global variable declaration, after the keyword `static' or 31878 `extern'; and 31879 31880 * In a structure field definition, before the name of the field. 31881 31882 Here are some examples of marking simple data structures and globals. 31883 31884 struct TAG GTY(()) 31885 { 31886 FIELDS... 31887 }; 31888 31889 typedef struct TAG GTY(()) 31890 { 31891 FIELDS... 31892 } *TYPENAME; 31893 31894 static GTY(()) struct TAG *LIST; /* points to GC memory */ 31895 static GTY(()) int COUNTER; /* save counter in a PCH */ 31896 31897 The parser understands simple typedefs such as `typedef struct TAG 31898 *NAME;' and `typedef int NAME;'. These don't need to be marked. 31899 31900 * Menu: 31901 31902 * GTY Options:: What goes inside a `GTY(())'. 31903 * GGC Roots:: Making global variables GGC roots. 31904 * Files:: How the generated files work. 31905 31906 31907 File: gccint.info, Node: GTY Options, Next: GGC Roots, Up: Type Information 31908 31909 20.1 The Inside of a `GTY(())' 31910 ============================== 31911 31912 Sometimes the C code is not enough to fully describe the type 31913 structure. Extra information can be provided with `GTY' options and 31914 additional markers. Some options take a parameter, which may be either 31915 a string or a type name, depending on the parameter. If an option 31916 takes no parameter, it is acceptable either to omit the parameter 31917 entirely, or to provide an empty string as a parameter. For example, 31918 `GTY ((skip))' and `GTY ((skip ("")))' are equivalent. 31919 31920 When the parameter is a string, often it is a fragment of C code. Four 31921 special escapes may be used in these strings, to refer to pieces of the 31922 data structure being marked: 31923 31924 `%h' 31925 The current structure. 31926 31927 `%1' 31928 The structure that immediately contains the current structure. 31929 31930 `%0' 31931 The outermost structure that contains the current structure. 31932 31933 `%a' 31934 A partial expression of the form `[i1][i2]...' that indexes the 31935 array item currently being marked. 31936 31937 For instance, suppose that you have a structure of the form 31938 struct A { 31939 ... 31940 }; 31941 struct B { 31942 struct A foo[12]; 31943 }; 31944 and `b' is a variable of type `struct B'. When marking `b.foo[11]', 31945 `%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to 31946 `b', and `%a' would expand to `[11]'. 31947 31948 As in ordinary C, adjacent strings will be concatenated; this is 31949 helpful when you have a complicated expression. 31950 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 31951 " ? TYPE_NEXT_VARIANT (&%h.generic)" 31952 " : TREE_CHAIN (&%h.generic)"))) 31953 31954 The available options are: 31955 31956 `length ("EXPRESSION")' 31957 There are two places the type machinery will need to be explicitly 31958 told the length of an array. The first case is when a structure 31959 ends in a variable-length array, like this: 31960 struct rtvec_def GTY(()) { 31961 int num_elem; /* number of elements */ 31962 rtx GTY ((length ("%h.num_elem"))) elem[1]; 31963 }; 31964 31965 In this case, the `length' option is used to override the specified 31966 array length (which should usually be `1'). The parameter of the 31967 option is a fragment of C code that calculates the length. 31968 31969 The second case is when a structure or a global variable contains a 31970 pointer to an array, like this: 31971 tree * 31972 GTY ((length ("%h.regno_pointer_align_length"))) regno_decl; 31973 In this case, `regno_decl' has been allocated by writing something 31974 like 31975 x->regno_decl = 31976 ggc_alloc (x->regno_pointer_align_length * sizeof (tree)); 31977 and the `length' provides the length of the field. 31978 31979 This second use of `length' also works on global variables, like: 31980 static GTY((length ("reg_base_value_size"))) 31981 rtx *reg_base_value; 31982 31983 `skip' 31984 If `skip' is applied to a field, the type machinery will ignore it. 31985 This is somewhat dangerous; the only safe use is in a union when 31986 one field really isn't ever used. 31987 31988 `desc ("EXPRESSION")' 31989 `tag ("CONSTANT")' 31990 `default' 31991 The type machinery needs to be told which field of a `union' is 31992 currently active. This is done by giving each field a constant 31993 `tag' value, and then specifying a discriminator using `desc'. 31994 The value of the expression given by `desc' is compared against 31995 each `tag' value, each of which should be different. If no `tag' 31996 is matched, the field marked with `default' is used if there is 31997 one, otherwise no field in the union will be marked. 31998 31999 In the `desc' option, the "current structure" is the union that it 32000 discriminates. Use `%1' to mean the structure containing it. 32001 There are no escapes available to the `tag' option, since it is a 32002 constant. 32003 32004 For example, 32005 struct tree_binding GTY(()) 32006 { 32007 struct tree_common common; 32008 union tree_binding_u { 32009 tree GTY ((tag ("0"))) scope; 32010 struct cp_binding_level * GTY ((tag ("1"))) level; 32011 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 32012 tree value; 32013 }; 32014 32015 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 32016 `struct tree_binding *' is presumed to be 0 or 1. If 1, the type 32017 mechanism will treat the field `level' as being present and if 0, 32018 will treat the field `scope' as being present. 32019 32020 `param_is (TYPE)' 32021 `use_param' 32022 Sometimes it's convenient to define some data structure to work on 32023 generic pointers (that is, `PTR') and then use it with a specific 32024 type. `param_is' specifies the real type pointed to, and 32025 `use_param' says where in the generic data structure that type 32026 should be put. 32027 32028 For instance, to have a `htab_t' that points to trees, one would 32029 write the definition of `htab_t' like this: 32030 typedef struct GTY(()) { 32031 ... 32032 void ** GTY ((use_param, ...)) entries; 32033 ... 32034 } htab_t; 32035 and then declare variables like this: 32036 static htab_t GTY ((param_is (union tree_node))) ict; 32037 32038 `paramN_is (TYPE)' 32039 `use_paramN' 32040 In more complicated cases, the data structure might need to work on 32041 several different types, which might not necessarily all be 32042 pointers. For this, `param1_is' through `param9_is' may be used to 32043 specify the real type of a field identified by `use_param1' through 32044 `use_param9'. 32045 32046 `use_params' 32047 When a structure contains another structure that is parameterized, 32048 there's no need to do anything special, the inner structure 32049 inherits the parameters of the outer one. When a structure 32050 contains a pointer to a parameterized structure, the type 32051 machinery won't automatically detect this (it could, it just 32052 doesn't yet), so it's necessary to tell it that the pointed-to 32053 structure should use the same parameters as the outer structure. 32054 This is done by marking the pointer with the `use_params' option. 32055 32056 `deletable' 32057 `deletable', when applied to a global variable, indicates that when 32058 garbage collection runs, there's no need to mark anything pointed 32059 to by this variable, it can just be set to `NULL' instead. This 32060 is used to keep a list of free structures around for re-use. 32061 32062 `if_marked ("EXPRESSION")' 32063 Suppose you want some kinds of object to be unique, and so you put 32064 them in a hash table. If garbage collection marks the hash table, 32065 these objects will never be freed, even if the last other 32066 reference to them goes away. GGC has special handling to deal 32067 with this: if you use the `if_marked' option on a global hash 32068 table, GGC will call the routine whose name is the parameter to 32069 the option on each hash table entry. If the routine returns 32070 nonzero, the hash table entry will be marked as usual. If the 32071 routine returns zero, the hash table entry will be deleted. 32072 32073 The routine `ggc_marked_p' can be used to determine if an element 32074 has been marked already; in fact, the usual case is to use 32075 `if_marked ("ggc_marked_p")'. 32076 32077 `mark_hook ("HOOK-ROUTINE-NAME")' 32078 If provided for a structure or union type, the given 32079 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine 32080 called when the garbage collector has just marked the data as 32081 reachable. This routine should not change the data, or call any ggc 32082 routine. Its only argument is a pointer to the just marked (const) 32083 structure or union. 32084 32085 `maybe_undef' 32086 When applied to a field, `maybe_undef' indicates that it's OK if 32087 the structure that this fields points to is never defined, so long 32088 as this field is always `NULL'. This is used to avoid requiring 32089 backends to define certain optional structures. It doesn't work 32090 with language frontends. 32091 32092 `nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 32093 The type machinery expects all pointers to point to the start of an 32094 object. Sometimes for abstraction purposes it's convenient to have 32095 a pointer which points inside an object. So long as it's possible 32096 to convert the original object to and from the pointer, such 32097 pointers can still be used. TYPE is the type of the original 32098 object, the TO EXPRESSION returns the pointer given the original 32099 object, and the FROM EXPRESSION returns the original object given 32100 the pointer. The pointer will be available using the `%h' escape. 32101 32102 `chain_next ("EXPRESSION")' 32103 `chain_prev ("EXPRESSION")' 32104 `chain_circular ("EXPRESSION")' 32105 It's helpful for the type machinery to know if objects are often 32106 chained together in long lists; this lets it generate code that 32107 uses less stack space by iterating along the list instead of 32108 recursing down it. `chain_next' is an expression for the next 32109 item in the list, `chain_prev' is an expression for the previous 32110 item. For singly linked lists, use only `chain_next'; for doubly 32111 linked lists, use both. The machinery requires that taking the 32112 next item of the previous item gives the original item. 32113 `chain_circular' is similar to `chain_next', but can be used for 32114 circular single linked lists. 32115 32116 `reorder ("FUNCTION NAME")' 32117 Some data structures depend on the relative ordering of pointers. 32118 If the precompiled header machinery needs to change that ordering, 32119 it will call the function referenced by the `reorder' option, 32120 before changing the pointers in the object that's pointed to by 32121 the field the option applies to. The function must take four 32122 arguments, with the signature 32123 `void *, void *, gt_pointer_operator, void *'. The first 32124 parameter is a pointer to the structure that contains the object 32125 being updated, or the object itself if there is no containing 32126 structure. The second parameter is a cookie that should be 32127 ignored. The third parameter is a routine that, given a pointer, 32128 will update it to its correct new value. The fourth parameter is 32129 a cookie that must be passed to the second parameter. 32130 32131 PCH cannot handle data structures that depend on the absolute 32132 values of pointers. `reorder' functions can be expensive. When 32133 possible, it is better to depend on properties of the data, like 32134 an ID number or the hash of a string instead. 32135 32136 `special ("NAME")' 32137 The `special' option is used to mark types that have to be dealt 32138 with by special case machinery. The parameter is the name of the 32139 special case. See `gengtype.c' for further details. Avoid adding 32140 new special cases unless there is no other alternative. 32141 32142 32143 File: gccint.info, Node: GGC Roots, Next: Files, Prev: GTY Options, Up: Type Information 32144 32145 20.2 Marking Roots for the Garbage Collector 32146 ============================================ 32147 32148 In addition to keeping track of types, the type machinery also locates 32149 the global variables ("roots") that the garbage collector starts at. 32150 Roots must be declared using one of the following syntaxes: 32151 32152 * `extern GTY(([OPTIONS])) TYPE NAME;' 32153 32154 * `static GTY(([OPTIONS])) TYPE NAME;' 32155 The syntax 32156 * `GTY(([OPTIONS])) TYPE NAME;' 32157 is _not_ accepted. There should be an `extern' declaration of such a 32158 variable in a header somewhere--mark that, not the definition. Or, if 32159 the variable is only used in one file, make it `static'. 32160 32161 32162 File: gccint.info, Node: Files, Prev: GGC Roots, Up: Type Information 32163 32164 20.3 Source Files Containing Type Information 32165 ============================================= 32166 32167 Whenever you add `GTY' markers to a source file that previously had 32168 none, or create a new source file containing `GTY' markers, there are 32169 three things you need to do: 32170 32171 1. You need to add the file to the list of source files the type 32172 machinery scans. There are four cases: 32173 32174 a. For a back-end file, this is usually done automatically; if 32175 not, you should add it to `target_gtfiles' in the appropriate 32176 port's entries in `config.gcc'. 32177 32178 b. For files shared by all front ends, add the filename to the 32179 `GTFILES' variable in `Makefile.in'. 32180 32181 c. For files that are part of one front end, add the filename to 32182 the `gtfiles' variable defined in the appropriate 32183 `config-lang.in'. For C, the file is `c-config-lang.in'. 32184 32185 d. For files that are part of some but not all front ends, add 32186 the filename to the `gtfiles' variable of _all_ the front ends 32187 that use it. 32188 32189 2. If the file was a header file, you'll need to check that it's 32190 included in the right place to be visible to the generated files. 32191 For a back-end header file, this should be done automatically. 32192 For a front-end header file, it needs to be included by the same 32193 file that includes `gtype-LANG.h'. For other header files, it 32194 needs to be included in `gtype-desc.c', which is a generated file, 32195 so add it to `ifiles' in `open_base_file' in `gengtype.c'. 32196 32197 For source files that aren't header files, the machinery will 32198 generate a header file that should be included in the source file 32199 you just changed. The file will be called `gt-PATH.h' where PATH 32200 is the pathname relative to the `gcc' directory with slashes 32201 replaced by -, so for example the header file to be included in 32202 `cp/parser.c' is called `gt-cp-parser.c'. The generated header 32203 file should be included after everything else in the source file. 32204 Don't forget to mention this file as a dependency in the 32205 `Makefile'! 32206 32207 32208 For language frontends, there is another file that needs to be included 32209 somewhere. It will be called `gtype-LANG.h', where LANG is the name of 32210 the subdirectory the language is contained in. 32211 32212 32213 File: gccint.info, Node: Funding, Next: GNU Project, Prev: Type Information, Up: Top 32214 32215 Funding Free Software 32216 ********************* 32217 32218 If you want to have more free software a few years from now, it makes 32219 sense for you to help encourage people to contribute funds for its 32220 development. The most effective approach known is to encourage 32221 commercial redistributors to donate. 32222 32223 Users of free software systems can boost the pace of development by 32224 encouraging for-a-fee distributors to donate part of their selling price 32225 to free software developers--the Free Software Foundation, and others. 32226 32227 The way to convince distributors to do this is to demand it and expect 32228 it from them. So when you compare distributors, judge them partly by 32229 how much they give to free software development. Show distributors 32230 they must compete to be the one who gives the most. 32231 32232 To make this approach work, you must insist on numbers that you can 32233 compare, such as, "We will donate ten dollars to the Frobnitz project 32234 for each disk sold." Don't be satisfied with a vague promise, such as 32235 "A portion of the profits are donated," since it doesn't give a basis 32236 for comparison. 32237 32238 Even a precise fraction "of the profits from this disk" is not very 32239 meaningful, since creative accounting and unrelated business decisions 32240 can greatly alter what fraction of the sales price counts as profit. 32241 If the price you pay is $50, ten percent of the profit is probably less 32242 than a dollar; it might be a few cents, or nothing at all. 32243 32244 Some redistributors do development work themselves. This is useful 32245 too; but to keep everyone honest, you need to inquire how much they do, 32246 and what kind. Some kinds of development make much more long-term 32247 difference than others. For example, maintaining a separate version of 32248 a program contributes very little; maintaining the standard version of a 32249 program for the whole community contributes much. Easy new ports 32250 contribute little, since someone else would surely do them; difficult 32251 ports such as adding a new CPU to the GNU Compiler Collection 32252 contribute more; major new features or packages contribute the most. 32253 32254 By establishing the idea that supporting further development is "the 32255 proper thing to do" when distributing free software for a fee, we can 32256 assure a steady flow of resources into making more free software. 32257 32258 Copyright (C) 1994 Free Software Foundation, Inc. 32259 Verbatim copying and redistribution of this section is permitted 32260 without royalty; alteration is not permitted. 32261 32262 32263 File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 32264 32265 The GNU Project and GNU/Linux 32266 ***************************** 32267 32268 The GNU Project was launched in 1984 to develop a complete Unix-like 32269 operating system which is free software: the GNU system. (GNU is a 32270 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 32271 Variants of the GNU operating system, which use the kernel Linux, are 32272 now widely used; though these systems are often referred to as "Linux", 32273 they are more accurately called GNU/Linux systems. 32274 32275 For more information, see: 32276 `http://www.gnu.org/' 32277 `http://www.gnu.org/gnu/linux-and-gnu.html' 32278 32279 32280 File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 32281 32282 GNU General Public License 32283 ************************** 32284 32285 Version 3, 29 June 2007 32286 32287 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 32288 32289 Everyone is permitted to copy and distribute verbatim copies of this 32290 license document, but changing it is not allowed. 32291 32292 Preamble 32293 ======== 32294 32295 The GNU General Public License is a free, copyleft license for software 32296 and other kinds of works. 32297 32298 The licenses for most software and other practical works are designed 32299 to take away your freedom to share and change the works. By contrast, 32300 the GNU General Public License is intended to guarantee your freedom to 32301 share and change all versions of a program-to make sure it remains free 32302 software for all its users. We, the Free Software Foundation, use the 32303 GNU General Public License for most of our software; it applies also to 32304 any other work released this way by its authors. You can apply it to 32305 your programs, too. 32306 32307 When we speak of free software, we are referring to freedom, not 32308 price. Our General Public Licenses are designed to make sure that you 32309 have the freedom to distribute copies of free software (and charge for 32310 them if you wish), that you receive source code or can get it if you 32311 want it, that you can change the software or use pieces of it in new 32312 free programs, and that you know you can do these things. 32313 32314 To protect your rights, we need to prevent others from denying you 32315 these rights or asking you to surrender the rights. Therefore, you 32316 have certain responsibilities if you distribute copies of the software, 32317 or if you modify it: responsibilities to respect the freedom of others. 32318 32319 For example, if you distribute copies of such a program, whether 32320 gratis or for a fee, you must pass on to the recipients the same 32321 freedoms that you received. You must make sure that they, too, receive 32322 or can get the source code. And you must show them these terms so they 32323 know their rights. 32324 32325 Developers that use the GNU GPL protect your rights with two steps: 32326 (1) assert copyright on the software, and (2) offer you this License 32327 giving you legal permission to copy, distribute and/or modify it. 32328 32329 For the developers' and authors' protection, the GPL clearly explains 32330 that there is no warranty for this free software. For both users' and 32331 authors' sake, the GPL requires that modified versions be marked as 32332 changed, so that their problems will not be attributed erroneously to 32333 authors of previous versions. 32334 32335 Some devices are designed to deny users access to install or run 32336 modified versions of the software inside them, although the 32337 manufacturer can do so. This is fundamentally incompatible with the 32338 aim of protecting users' freedom to change the software. The 32339 systematic pattern of such abuse occurs in the area of products for 32340 individuals to use, which is precisely where it is most unacceptable. 32341 Therefore, we have designed this version of the GPL to prohibit the 32342 practice for those products. If such problems arise substantially in 32343 other domains, we stand ready to extend this provision to those domains 32344 in future versions of the GPL, as needed to protect the freedom of 32345 users. 32346 32347 Finally, every program is threatened constantly by software patents. 32348 States should not allow patents to restrict development and use of 32349 software on general-purpose computers, but in those that do, we wish to 32350 avoid the special danger that patents applied to a free program could 32351 make it effectively proprietary. To prevent this, the GPL assures that 32352 patents cannot be used to render the program non-free. 32353 32354 The precise terms and conditions for copying, distribution and 32355 modification follow. 32356 32357 TERMS AND CONDITIONS 32358 ==================== 32359 32360 0. Definitions. 32361 32362 "This License" refers to version 3 of the GNU General Public 32363 License. 32364 32365 "Copyright" also means copyright-like laws that apply to other 32366 kinds of works, such as semiconductor masks. 32367 32368 "The Program" refers to any copyrightable work licensed under this 32369 License. Each licensee is addressed as "you". "Licensees" and 32370 "recipients" may be individuals or organizations. 32371 32372 To "modify" a work means to copy from or adapt all or part of the 32373 work in a fashion requiring copyright permission, other than the 32374 making of an exact copy. The resulting work is called a "modified 32375 version" of the earlier work or a work "based on" the earlier work. 32376 32377 A "covered work" means either the unmodified Program or a work 32378 based on the Program. 32379 32380 To "propagate" a work means to do anything with it that, without 32381 permission, would make you directly or secondarily liable for 32382 infringement under applicable copyright law, except executing it 32383 on a computer or modifying a private copy. Propagation includes 32384 copying, distribution (with or without modification), making 32385 available to the public, and in some countries other activities as 32386 well. 32387 32388 To "convey" a work means any kind of propagation that enables other 32389 parties to make or receive copies. Mere interaction with a user 32390 through a computer network, with no transfer of a copy, is not 32391 conveying. 32392 32393 An interactive user interface displays "Appropriate Legal Notices" 32394 to the extent that it includes a convenient and prominently visible 32395 feature that (1) displays an appropriate copyright notice, and (2) 32396 tells the user that there is no warranty for the work (except to 32397 the extent that warranties are provided), that licensees may 32398 convey the work under this License, and how to view a copy of this 32399 License. If the interface presents a list of user commands or 32400 options, such as a menu, a prominent item in the list meets this 32401 criterion. 32402 32403 1. Source Code. 32404 32405 The "source code" for a work means the preferred form of the work 32406 for making modifications to it. "Object code" means any 32407 non-source form of a work. 32408 32409 A "Standard Interface" means an interface that either is an 32410 official standard defined by a recognized standards body, or, in 32411 the case of interfaces specified for a particular programming 32412 language, one that is widely used among developers working in that 32413 language. 32414 32415 The "System Libraries" of an executable work include anything, 32416 other than the work as a whole, that (a) is included in the normal 32417 form of packaging a Major Component, but which is not part of that 32418 Major Component, and (b) serves only to enable use of the work 32419 with that Major Component, or to implement a Standard Interface 32420 for which an implementation is available to the public in source 32421 code form. A "Major Component", in this context, means a major 32422 essential component (kernel, window system, and so on) of the 32423 specific operating system (if any) on which the executable work 32424 runs, or a compiler used to produce the work, or an object code 32425 interpreter used to run it. 32426 32427 The "Corresponding Source" for a work in object code form means all 32428 the source code needed to generate, install, and (for an executable 32429 work) run the object code and to modify the work, including 32430 scripts to control those activities. However, it does not include 32431 the work's System Libraries, or general-purpose tools or generally 32432 available free programs which are used unmodified in performing 32433 those activities but which are not part of the work. For example, 32434 Corresponding Source includes interface definition files 32435 associated with source files for the work, and the source code for 32436 shared libraries and dynamically linked subprograms that the work 32437 is specifically designed to require, such as by intimate data 32438 communication or control flow between those subprograms and other 32439 parts of the work. 32440 32441 The Corresponding Source need not include anything that users can 32442 regenerate automatically from other parts of the Corresponding 32443 Source. 32444 32445 The Corresponding Source for a work in source code form is that 32446 same work. 32447 32448 2. Basic Permissions. 32449 32450 All rights granted under this License are granted for the term of 32451 copyright on the Program, and are irrevocable provided the stated 32452 conditions are met. This License explicitly affirms your unlimited 32453 permission to run the unmodified Program. The output from running 32454 a covered work is covered by this License only if the output, 32455 given its content, constitutes a covered work. This License 32456 acknowledges your rights of fair use or other equivalent, as 32457 provided by copyright law. 32458 32459 You may make, run and propagate covered works that you do not 32460 convey, without conditions so long as your license otherwise 32461 remains in force. You may convey covered works to others for the 32462 sole purpose of having them make modifications exclusively for 32463 you, or provide you with facilities for running those works, 32464 provided that you comply with the terms of this License in 32465 conveying all material for which you do not control copyright. 32466 Those thus making or running the covered works for you must do so 32467 exclusively on your behalf, under your direction and control, on 32468 terms that prohibit them from making any copies of your 32469 copyrighted material outside their relationship with you. 32470 32471 Conveying under any other circumstances is permitted solely under 32472 the conditions stated below. Sublicensing is not allowed; section 32473 10 makes it unnecessary. 32474 32475 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 32476 32477 No covered work shall be deemed part of an effective technological 32478 measure under any applicable law fulfilling obligations under 32479 article 11 of the WIPO copyright treaty adopted on 20 December 32480 1996, or similar laws prohibiting or restricting circumvention of 32481 such measures. 32482 32483 When you convey a covered work, you waive any legal power to forbid 32484 circumvention of technological measures to the extent such 32485 circumvention is effected by exercising rights under this License 32486 with respect to the covered work, and you disclaim any intention 32487 to limit operation or modification of the work as a means of 32488 enforcing, against the work's users, your or third parties' legal 32489 rights to forbid circumvention of technological measures. 32490 32491 4. Conveying Verbatim Copies. 32492 32493 You may convey verbatim copies of the Program's source code as you 32494 receive it, in any medium, provided that you conspicuously and 32495 appropriately publish on each copy an appropriate copyright notice; 32496 keep intact all notices stating that this License and any 32497 non-permissive terms added in accord with section 7 apply to the 32498 code; keep intact all notices of the absence of any warranty; and 32499 give all recipients a copy of this License along with the Program. 32500 32501 You may charge any price or no price for each copy that you convey, 32502 and you may offer support or warranty protection for a fee. 32503 32504 5. Conveying Modified Source Versions. 32505 32506 You may convey a work based on the Program, or the modifications to 32507 produce it from the Program, in the form of source code under the 32508 terms of section 4, provided that you also meet all of these 32509 conditions: 32510 32511 a. The work must carry prominent notices stating that you 32512 modified it, and giving a relevant date. 32513 32514 b. The work must carry prominent notices stating that it is 32515 released under this License and any conditions added under 32516 section 7. This requirement modifies the requirement in 32517 section 4 to "keep intact all notices". 32518 32519 c. You must license the entire work, as a whole, under this 32520 License to anyone who comes into possession of a copy. This 32521 License will therefore apply, along with any applicable 32522 section 7 additional terms, to the whole of the work, and all 32523 its parts, regardless of how they are packaged. This License 32524 gives no permission to license the work in any other way, but 32525 it does not invalidate such permission if you have separately 32526 received it. 32527 32528 d. If the work has interactive user interfaces, each must display 32529 Appropriate Legal Notices; however, if the Program has 32530 interactive interfaces that do not display Appropriate Legal 32531 Notices, your work need not make them do so. 32532 32533 A compilation of a covered work with other separate and independent 32534 works, which are not by their nature extensions of the covered 32535 work, and which are not combined with it such as to form a larger 32536 program, in or on a volume of a storage or distribution medium, is 32537 called an "aggregate" if the compilation and its resulting 32538 copyright are not used to limit the access or legal rights of the 32539 compilation's users beyond what the individual works permit. 32540 Inclusion of a covered work in an aggregate does not cause this 32541 License to apply to the other parts of the aggregate. 32542 32543 6. Conveying Non-Source Forms. 32544 32545 You may convey a covered work in object code form under the terms 32546 of sections 4 and 5, provided that you also convey the 32547 machine-readable Corresponding Source under the terms of this 32548 License, in one of these ways: 32549 32550 a. Convey the object code in, or embodied in, a physical product 32551 (including a physical distribution medium), accompanied by the 32552 Corresponding Source fixed on a durable physical medium 32553 customarily used for software interchange. 32554 32555 b. Convey the object code in, or embodied in, a physical product 32556 (including a physical distribution medium), accompanied by a 32557 written offer, valid for at least three years and valid for 32558 as long as you offer spare parts or customer support for that 32559 product model, to give anyone who possesses the object code 32560 either (1) a copy of the Corresponding Source for all the 32561 software in the product that is covered by this License, on a 32562 durable physical medium customarily used for software 32563 interchange, for a price no more than your reasonable cost of 32564 physically performing this conveying of source, or (2) access 32565 to copy the Corresponding Source from a network server at no 32566 charge. 32567 32568 c. Convey individual copies of the object code with a copy of 32569 the written offer to provide the Corresponding Source. This 32570 alternative is allowed only occasionally and noncommercially, 32571 and only if you received the object code with such an offer, 32572 in accord with subsection 6b. 32573 32574 d. Convey the object code by offering access from a designated 32575 place (gratis or for a charge), and offer equivalent access 32576 to the Corresponding Source in the same way through the same 32577 place at no further charge. You need not require recipients 32578 to copy the Corresponding Source along with the object code. 32579 If the place to copy the object code is a network server, the 32580 Corresponding Source may be on a different server (operated 32581 by you or a third party) that supports equivalent copying 32582 facilities, provided you maintain clear directions next to 32583 the object code saying where to find the Corresponding Source. 32584 Regardless of what server hosts the Corresponding Source, you 32585 remain obligated to ensure that it is available for as long 32586 as needed to satisfy these requirements. 32587 32588 e. Convey the object code using peer-to-peer transmission, 32589 provided you inform other peers where the object code and 32590 Corresponding Source of the work are being offered to the 32591 general public at no charge under subsection 6d. 32592 32593 32594 A separable portion of the object code, whose source code is 32595 excluded from the Corresponding Source as a System Library, need 32596 not be included in conveying the object code work. 32597 32598 A "User Product" is either (1) a "consumer product", which means 32599 any tangible personal property which is normally used for personal, 32600 family, or household purposes, or (2) anything designed or sold for 32601 incorporation into a dwelling. In determining whether a product 32602 is a consumer product, doubtful cases shall be resolved in favor of 32603 coverage. For a particular product received by a particular user, 32604 "normally used" refers to a typical or common use of that class of 32605 product, regardless of the status of the particular user or of the 32606 way in which the particular user actually uses, or expects or is 32607 expected to use, the product. A product is a consumer product 32608 regardless of whether the product has substantial commercial, 32609 industrial or non-consumer uses, unless such uses represent the 32610 only significant mode of use of the product. 32611 32612 "Installation Information" for a User Product means any methods, 32613 procedures, authorization keys, or other information required to 32614 install and execute modified versions of a covered work in that 32615 User Product from a modified version of its Corresponding Source. 32616 The information must suffice to ensure that the continued 32617 functioning of the modified object code is in no case prevented or 32618 interfered with solely because modification has been made. 32619 32620 If you convey an object code work under this section in, or with, 32621 or specifically for use in, a User Product, and the conveying 32622 occurs as part of a transaction in which the right of possession 32623 and use of the User Product is transferred to the recipient in 32624 perpetuity or for a fixed term (regardless of how the transaction 32625 is characterized), the Corresponding Source conveyed under this 32626 section must be accompanied by the Installation Information. But 32627 this requirement does not apply if neither you nor any third party 32628 retains the ability to install modified object code on the User 32629 Product (for example, the work has been installed in ROM). 32630 32631 The requirement to provide Installation Information does not 32632 include a requirement to continue to provide support service, 32633 warranty, or updates for a work that has been modified or 32634 installed by the recipient, or for the User Product in which it 32635 has been modified or installed. Access to a network may be denied 32636 when the modification itself materially and adversely affects the 32637 operation of the network or violates the rules and protocols for 32638 communication across the network. 32639 32640 Corresponding Source conveyed, and Installation Information 32641 provided, in accord with this section must be in a format that is 32642 publicly documented (and with an implementation available to the 32643 public in source code form), and must require no special password 32644 or key for unpacking, reading or copying. 32645 32646 7. Additional Terms. 32647 32648 "Additional permissions" are terms that supplement the terms of 32649 this License by making exceptions from one or more of its 32650 conditions. Additional permissions that are applicable to the 32651 entire Program shall be treated as though they were included in 32652 this License, to the extent that they are valid under applicable 32653 law. If additional permissions apply only to part of the Program, 32654 that part may be used separately under those permissions, but the 32655 entire Program remains governed by this License without regard to 32656 the additional permissions. 32657 32658 When you convey a copy of a covered work, you may at your option 32659 remove any additional permissions from that copy, or from any part 32660 of it. (Additional permissions may be written to require their own 32661 removal in certain cases when you modify the work.) You may place 32662 additional permissions on material, added by you to a covered work, 32663 for which you have or can give appropriate copyright permission. 32664 32665 Notwithstanding any other provision of this License, for material 32666 you add to a covered work, you may (if authorized by the copyright 32667 holders of that material) supplement the terms of this License 32668 with terms: 32669 32670 a. Disclaiming warranty or limiting liability differently from 32671 the terms of sections 15 and 16 of this License; or 32672 32673 b. Requiring preservation of specified reasonable legal notices 32674 or author attributions in that material or in the Appropriate 32675 Legal Notices displayed by works containing it; or 32676 32677 c. Prohibiting misrepresentation of the origin of that material, 32678 or requiring that modified versions of such material be 32679 marked in reasonable ways as different from the original 32680 version; or 32681 32682 d. Limiting the use for publicity purposes of names of licensors 32683 or authors of the material; or 32684 32685 e. Declining to grant rights under trademark law for use of some 32686 trade names, trademarks, or service marks; or 32687 32688 f. Requiring indemnification of licensors and authors of that 32689 material by anyone who conveys the material (or modified 32690 versions of it) with contractual assumptions of liability to 32691 the recipient, for any liability that these contractual 32692 assumptions directly impose on those licensors and authors. 32693 32694 All other non-permissive additional terms are considered "further 32695 restrictions" within the meaning of section 10. If the Program as 32696 you received it, or any part of it, contains a notice stating that 32697 it is governed by this License along with a term that is a further 32698 restriction, you may remove that term. If a license document 32699 contains a further restriction but permits relicensing or 32700 conveying under this License, you may add to a covered work 32701 material governed by the terms of that license document, provided 32702 that the further restriction does not survive such relicensing or 32703 conveying. 32704 32705 If you add terms to a covered work in accord with this section, you 32706 must place, in the relevant source files, a statement of the 32707 additional terms that apply to those files, or a notice indicating 32708 where to find the applicable terms. 32709 32710 Additional terms, permissive or non-permissive, may be stated in 32711 the form of a separately written license, or stated as exceptions; 32712 the above requirements apply either way. 32713 32714 8. Termination. 32715 32716 You may not propagate or modify a covered work except as expressly 32717 provided under this License. Any attempt otherwise to propagate or 32718 modify it is void, and will automatically terminate your rights 32719 under this License (including any patent licenses granted under 32720 the third paragraph of section 11). 32721 32722 However, if you cease all violation of this License, then your 32723 license from a particular copyright holder is reinstated (a) 32724 provisionally, unless and until the copyright holder explicitly 32725 and finally terminates your license, and (b) permanently, if the 32726 copyright holder fails to notify you of the violation by some 32727 reasonable means prior to 60 days after the cessation. 32728 32729 Moreover, your license from a particular copyright holder is 32730 reinstated permanently if the copyright holder notifies you of the 32731 violation by some reasonable means, this is the first time you have 32732 received notice of violation of this License (for any work) from 32733 that copyright holder, and you cure the violation prior to 30 days 32734 after your receipt of the notice. 32735 32736 Termination of your rights under this section does not terminate 32737 the licenses of parties who have received copies or rights from 32738 you under this License. If your rights have been terminated and 32739 not permanently reinstated, you do not qualify to receive new 32740 licenses for the same material under section 10. 32741 32742 9. Acceptance Not Required for Having Copies. 32743 32744 You are not required to accept this License in order to receive or 32745 run a copy of the Program. Ancillary propagation of a covered work 32746 occurring solely as a consequence of using peer-to-peer 32747 transmission to receive a copy likewise does not require 32748 acceptance. However, nothing other than this License grants you 32749 permission to propagate or modify any covered work. These actions 32750 infringe copyright if you do not accept this License. Therefore, 32751 by modifying or propagating a covered work, you indicate your 32752 acceptance of this License to do so. 32753 32754 10. Automatic Licensing of Downstream Recipients. 32755 32756 Each time you convey a covered work, the recipient automatically 32757 receives a license from the original licensors, to run, modify and 32758 propagate that work, subject to this License. You are not 32759 responsible for enforcing compliance by third parties with this 32760 License. 32761 32762 An "entity transaction" is a transaction transferring control of an 32763 organization, or substantially all assets of one, or subdividing an 32764 organization, or merging organizations. If propagation of a 32765 covered work results from an entity transaction, each party to that 32766 transaction who receives a copy of the work also receives whatever 32767 licenses to the work the party's predecessor in interest had or 32768 could give under the previous paragraph, plus a right to 32769 possession of the Corresponding Source of the work from the 32770 predecessor in interest, if the predecessor has it or can get it 32771 with reasonable efforts. 32772 32773 You may not impose any further restrictions on the exercise of the 32774 rights granted or affirmed under this License. For example, you 32775 may not impose a license fee, royalty, or other charge for 32776 exercise of rights granted under this License, and you may not 32777 initiate litigation (including a cross-claim or counterclaim in a 32778 lawsuit) alleging that any patent claim is infringed by making, 32779 using, selling, offering for sale, or importing the Program or any 32780 portion of it. 32781 32782 11. Patents. 32783 32784 A "contributor" is a copyright holder who authorizes use under this 32785 License of the Program or a work on which the Program is based. 32786 The work thus licensed is called the contributor's "contributor 32787 version". 32788 32789 A contributor's "essential patent claims" are all patent claims 32790 owned or controlled by the contributor, whether already acquired or 32791 hereafter acquired, that would be infringed by some manner, 32792 permitted by this License, of making, using, or selling its 32793 contributor version, but do not include claims that would be 32794 infringed only as a consequence of further modification of the 32795 contributor version. For purposes of this definition, "control" 32796 includes the right to grant patent sublicenses in a manner 32797 consistent with the requirements of this License. 32798 32799 Each contributor grants you a non-exclusive, worldwide, 32800 royalty-free patent license under the contributor's essential 32801 patent claims, to make, use, sell, offer for sale, import and 32802 otherwise run, modify and propagate the contents of its 32803 contributor version. 32804 32805 In the following three paragraphs, a "patent license" is any 32806 express agreement or commitment, however denominated, not to 32807 enforce a patent (such as an express permission to practice a 32808 patent or covenant not to sue for patent infringement). To 32809 "grant" such a patent license to a party means to make such an 32810 agreement or commitment not to enforce a patent against the party. 32811 32812 If you convey a covered work, knowingly relying on a patent 32813 license, and the Corresponding Source of the work is not available 32814 for anyone to copy, free of charge and under the terms of this 32815 License, through a publicly available network server or other 32816 readily accessible means, then you must either (1) cause the 32817 Corresponding Source to be so available, or (2) arrange to deprive 32818 yourself of the benefit of the patent license for this particular 32819 work, or (3) arrange, in a manner consistent with the requirements 32820 of this License, to extend the patent license to downstream 32821 recipients. "Knowingly relying" means you have actual knowledge 32822 that, but for the patent license, your conveying the covered work 32823 in a country, or your recipient's use of the covered work in a 32824 country, would infringe one or more identifiable patents in that 32825 country that you have reason to believe are valid. 32826 32827 If, pursuant to or in connection with a single transaction or 32828 arrangement, you convey, or propagate by procuring conveyance of, a 32829 covered work, and grant a patent license to some of the parties 32830 receiving the covered work authorizing them to use, propagate, 32831 modify or convey a specific copy of the covered work, then the 32832 patent license you grant is automatically extended to all 32833 recipients of the covered work and works based on it. 32834 32835 A patent license is "discriminatory" if it does not include within 32836 the scope of its coverage, prohibits the exercise of, or is 32837 conditioned on the non-exercise of one or more of the rights that 32838 are specifically granted under this License. You may not convey a 32839 covered work if you are a party to an arrangement with a third 32840 party that is in the business of distributing software, under 32841 which you make payment to the third party based on the extent of 32842 your activity of conveying the work, and under which the third 32843 party grants, to any of the parties who would receive the covered 32844 work from you, a discriminatory patent license (a) in connection 32845 with copies of the covered work conveyed by you (or copies made 32846 from those copies), or (b) primarily for and in connection with 32847 specific products or compilations that contain the covered work, 32848 unless you entered into that arrangement, or that patent license 32849 was granted, prior to 28 March 2007. 32850 32851 Nothing in this License shall be construed as excluding or limiting 32852 any implied license or other defenses to infringement that may 32853 otherwise be available to you under applicable patent law. 32854 32855 12. No Surrender of Others' Freedom. 32856 32857 If conditions are imposed on you (whether by court order, 32858 agreement or otherwise) that contradict the conditions of this 32859 License, they do not excuse you from the conditions of this 32860 License. If you cannot convey a covered work so as to satisfy 32861 simultaneously your obligations under this License and any other 32862 pertinent obligations, then as a consequence you may not convey it 32863 at all. For example, if you agree to terms that obligate you to 32864 collect a royalty for further conveying from those to whom you 32865 convey the Program, the only way you could satisfy both those 32866 terms and this License would be to refrain entirely from conveying 32867 the Program. 32868 32869 13. Use with the GNU Affero General Public License. 32870 32871 Notwithstanding any other provision of this License, you have 32872 permission to link or combine any covered work with a work licensed 32873 under version 3 of the GNU Affero General Public License into a 32874 single combined work, and to convey the resulting work. The terms 32875 of this License will continue to apply to the part which is the 32876 covered work, but the special requirements of the GNU Affero 32877 General Public License, section 13, concerning interaction through 32878 a network will apply to the combination as such. 32879 32880 14. Revised Versions of this License. 32881 32882 The Free Software Foundation may publish revised and/or new 32883 versions of the GNU General Public License from time to time. 32884 Such new versions will be similar in spirit to the present 32885 version, but may differ in detail to address new problems or 32886 concerns. 32887 32888 Each version is given a distinguishing version number. If the 32889 Program specifies that a certain numbered version of the GNU 32890 General Public License "or any later version" applies to it, you 32891 have the option of following the terms and conditions either of 32892 that numbered version or of any later version published by the 32893 Free Software Foundation. If the Program does not specify a 32894 version number of the GNU General Public License, you may choose 32895 any version ever published by the Free Software Foundation. 32896 32897 If the Program specifies that a proxy can decide which future 32898 versions of the GNU General Public License can be used, that 32899 proxy's public statement of acceptance of a version permanently 32900 authorizes you to choose that version for the Program. 32901 32902 Later license versions may give you additional or different 32903 permissions. However, no additional obligations are imposed on any 32904 author or copyright holder as a result of your choosing to follow a 32905 later version. 32906 32907 15. Disclaimer of Warranty. 32908 32909 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 32910 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 32911 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 32912 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 32913 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 32914 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 32915 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 32916 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 32917 NECESSARY SERVICING, REPAIR OR CORRECTION. 32918 32919 16. Limitation of Liability. 32920 32921 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 32922 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 32923 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 32924 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 32925 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 32926 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 32927 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 32928 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 32929 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 32930 THE POSSIBILITY OF SUCH DAMAGES. 32931 32932 17. Interpretation of Sections 15 and 16. 32933 32934 If the disclaimer of warranty and limitation of liability provided 32935 above cannot be given local legal effect according to their terms, 32936 reviewing courts shall apply local law that most closely 32937 approximates an absolute waiver of all civil liability in 32938 connection with the Program, unless a warranty or assumption of 32939 liability accompanies a copy of the Program in return for a fee. 32940 32941 32942 END OF TERMS AND CONDITIONS 32943 =========================== 32944 32945 How to Apply These Terms to Your New Programs 32946 ============================================= 32947 32948 If you develop a new program, and you want it to be of the greatest 32949 possible use to the public, the best way to achieve this is to make it 32950 free software which everyone can redistribute and change under these 32951 terms. 32952 32953 To do so, attach the following notices to the program. It is safest 32954 to attach them to the start of each source file to most effectively 32955 state the exclusion of warranty; and each file should have at least the 32956 "copyright" line and a pointer to where the full notice is found. 32957 32958 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 32959 Copyright (C) YEAR NAME OF AUTHOR 32960 32961 This program is free software: you can redistribute it and/or modify 32962 it under the terms of the GNU General Public License as published by 32963 the Free Software Foundation, either version 3 of the License, or (at 32964 your option) any later version. 32965 32966 This program is distributed in the hope that it will be useful, but 32967 WITHOUT ANY WARRANTY; without even the implied warranty of 32968 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 32969 General Public License for more details. 32970 32971 You should have received a copy of the GNU General Public License 32972 along with this program. If not, see `http://www.gnu.org/licenses/'. 32973 32974 Also add information on how to contact you by electronic and paper 32975 mail. 32976 32977 If the program does terminal interaction, make it output a short 32978 notice like this when it starts in an interactive mode: 32979 32980 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 32981 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 32982 This is free software, and you are welcome to redistribute it 32983 under certain conditions; type `show c' for details. 32984 32985 The hypothetical commands `show w' and `show c' should show the 32986 appropriate parts of the General Public License. Of course, your 32987 program's commands might be different; for a GUI interface, you would 32988 use an "about box". 32989 32990 You should also get your employer (if you work as a programmer) or 32991 school, if any, to sign a "copyright disclaimer" for the program, if 32992 necessary. For more information on this, and how to apply and follow 32993 the GNU GPL, see `http://www.gnu.org/licenses/'. 32994 32995 The GNU General Public License does not permit incorporating your 32996 program into proprietary programs. If your program is a subroutine 32997 library, you may consider it more useful to permit linking proprietary 32998 applications with the library. If this is what you want to do, use the 32999 GNU Lesser General Public License instead of this License. But first, 33000 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 33001 33002 33003 File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 33004 33005 GNU Free Documentation License 33006 ****************************** 33007 33008 Version 1.2, November 2002 33009 33010 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 33011 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 33012 33013 Everyone is permitted to copy and distribute verbatim copies 33014 of this license document, but changing it is not allowed. 33015 33016 0. PREAMBLE 33017 33018 The purpose of this License is to make a manual, textbook, or other 33019 functional and useful document "free" in the sense of freedom: to 33020 assure everyone the effective freedom to copy and redistribute it, 33021 with or without modifying it, either commercially or 33022 noncommercially. Secondarily, this License preserves for the 33023 author and publisher a way to get credit for their work, while not 33024 being considered responsible for modifications made by others. 33025 33026 This License is a kind of "copyleft", which means that derivative 33027 works of the document must themselves be free in the same sense. 33028 It complements the GNU General Public License, which is a copyleft 33029 license designed for free software. 33030 33031 We have designed this License in order to use it for manuals for 33032 free software, because free software needs free documentation: a 33033 free program should come with manuals providing the same freedoms 33034 that the software does. But this License is not limited to 33035 software manuals; it can be used for any textual work, regardless 33036 of subject matter or whether it is published as a printed book. 33037 We recommend this License principally for works whose purpose is 33038 instruction or reference. 33039 33040 1. APPLICABILITY AND DEFINITIONS 33041 33042 This License applies to any manual or other work, in any medium, 33043 that contains a notice placed by the copyright holder saying it 33044 can be distributed under the terms of this License. Such a notice 33045 grants a world-wide, royalty-free license, unlimited in duration, 33046 to use that work under the conditions stated herein. The 33047 "Document", below, refers to any such manual or work. Any member 33048 of the public is a licensee, and is addressed as "you". You 33049 accept the license if you copy, modify or distribute the work in a 33050 way requiring permission under copyright law. 33051 33052 A "Modified Version" of the Document means any work containing the 33053 Document or a portion of it, either copied verbatim, or with 33054 modifications and/or translated into another language. 33055 33056 A "Secondary Section" is a named appendix or a front-matter section 33057 of the Document that deals exclusively with the relationship of the 33058 publishers or authors of the Document to the Document's overall 33059 subject (or to related matters) and contains nothing that could 33060 fall directly within that overall subject. (Thus, if the Document 33061 is in part a textbook of mathematics, a Secondary Section may not 33062 explain any mathematics.) The relationship could be a matter of 33063 historical connection with the subject or with related matters, or 33064 of legal, commercial, philosophical, ethical or political position 33065 regarding them. 33066 33067 The "Invariant Sections" are certain Secondary Sections whose 33068 titles are designated, as being those of Invariant Sections, in 33069 the notice that says that the Document is released under this 33070 License. If a section does not fit the above definition of 33071 Secondary then it is not allowed to be designated as Invariant. 33072 The Document may contain zero Invariant Sections. If the Document 33073 does not identify any Invariant Sections then there are none. 33074 33075 The "Cover Texts" are certain short passages of text that are 33076 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 33077 that says that the Document is released under this License. A 33078 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 33079 be at most 25 words. 33080 33081 A "Transparent" copy of the Document means a machine-readable copy, 33082 represented in a format whose specification is available to the 33083 general public, that is suitable for revising the document 33084 straightforwardly with generic text editors or (for images 33085 composed of pixels) generic paint programs or (for drawings) some 33086 widely available drawing editor, and that is suitable for input to 33087 text formatters or for automatic translation to a variety of 33088 formats suitable for input to text formatters. A copy made in an 33089 otherwise Transparent file format whose markup, or absence of 33090 markup, has been arranged to thwart or discourage subsequent 33091 modification by readers is not Transparent. An image format is 33092 not Transparent if used for any substantial amount of text. A 33093 copy that is not "Transparent" is called "Opaque". 33094 33095 Examples of suitable formats for Transparent copies include plain 33096 ASCII without markup, Texinfo input format, LaTeX input format, 33097 SGML or XML using a publicly available DTD, and 33098 standard-conforming simple HTML, PostScript or PDF designed for 33099 human modification. Examples of transparent image formats include 33100 PNG, XCF and JPG. Opaque formats include proprietary formats that 33101 can be read and edited only by proprietary word processors, SGML or 33102 XML for which the DTD and/or processing tools are not generally 33103 available, and the machine-generated HTML, PostScript or PDF 33104 produced by some word processors for output purposes only. 33105 33106 The "Title Page" means, for a printed book, the title page itself, 33107 plus such following pages as are needed to hold, legibly, the 33108 material this License requires to appear in the title page. For 33109 works in formats which do not have any title page as such, "Title 33110 Page" means the text near the most prominent appearance of the 33111 work's title, preceding the beginning of the body of the text. 33112 33113 A section "Entitled XYZ" means a named subunit of the Document 33114 whose title either is precisely XYZ or contains XYZ in parentheses 33115 following text that translates XYZ in another language. (Here XYZ 33116 stands for a specific section name mentioned below, such as 33117 "Acknowledgements", "Dedications", "Endorsements", or "History".) 33118 To "Preserve the Title" of such a section when you modify the 33119 Document means that it remains a section "Entitled XYZ" according 33120 to this definition. 33121 33122 The Document may include Warranty Disclaimers next to the notice 33123 which states that this License applies to the Document. These 33124 Warranty Disclaimers are considered to be included by reference in 33125 this License, but only as regards disclaiming warranties: any other 33126 implication that these Warranty Disclaimers may have is void and 33127 has no effect on the meaning of this License. 33128 33129 2. VERBATIM COPYING 33130 33131 You may copy and distribute the Document in any medium, either 33132 commercially or noncommercially, provided that this License, the 33133 copyright notices, and the license notice saying this License 33134 applies to the Document are reproduced in all copies, and that you 33135 add no other conditions whatsoever to those of this License. You 33136 may not use technical measures to obstruct or control the reading 33137 or further copying of the copies you make or distribute. However, 33138 you may accept compensation in exchange for copies. If you 33139 distribute a large enough number of copies you must also follow 33140 the conditions in section 3. 33141 33142 You may also lend copies, under the same conditions stated above, 33143 and you may publicly display copies. 33144 33145 3. COPYING IN QUANTITY 33146 33147 If you publish printed copies (or copies in media that commonly 33148 have printed covers) of the Document, numbering more than 100, and 33149 the Document's license notice requires Cover Texts, you must 33150 enclose the copies in covers that carry, clearly and legibly, all 33151 these Cover Texts: Front-Cover Texts on the front cover, and 33152 Back-Cover Texts on the back cover. Both covers must also clearly 33153 and legibly identify you as the publisher of these copies. The 33154 front cover must present the full title with all words of the 33155 title equally prominent and visible. You may add other material 33156 on the covers in addition. Copying with changes limited to the 33157 covers, as long as they preserve the title of the Document and 33158 satisfy these conditions, can be treated as verbatim copying in 33159 other respects. 33160 33161 If the required texts for either cover are too voluminous to fit 33162 legibly, you should put the first ones listed (as many as fit 33163 reasonably) on the actual cover, and continue the rest onto 33164 adjacent pages. 33165 33166 If you publish or distribute Opaque copies of the Document 33167 numbering more than 100, you must either include a 33168 machine-readable Transparent copy along with each Opaque copy, or 33169 state in or with each Opaque copy a computer-network location from 33170 which the general network-using public has access to download 33171 using public-standard network protocols a complete Transparent 33172 copy of the Document, free of added material. If you use the 33173 latter option, you must take reasonably prudent steps, when you 33174 begin distribution of Opaque copies in quantity, to ensure that 33175 this Transparent copy will remain thus accessible at the stated 33176 location until at least one year after the last time you 33177 distribute an Opaque copy (directly or through your agents or 33178 retailers) of that edition to the public. 33179 33180 It is requested, but not required, that you contact the authors of 33181 the Document well before redistributing any large number of 33182 copies, to give them a chance to provide you with an updated 33183 version of the Document. 33184 33185 4. MODIFICATIONS 33186 33187 You may copy and distribute a Modified Version of the Document 33188 under the conditions of sections 2 and 3 above, provided that you 33189 release the Modified Version under precisely this License, with 33190 the Modified Version filling the role of the Document, thus 33191 licensing distribution and modification of the Modified Version to 33192 whoever possesses a copy of it. In addition, you must do these 33193 things in the Modified Version: 33194 33195 A. Use in the Title Page (and on the covers, if any) a title 33196 distinct from that of the Document, and from those of 33197 previous versions (which should, if there were any, be listed 33198 in the History section of the Document). You may use the 33199 same title as a previous version if the original publisher of 33200 that version gives permission. 33201 33202 B. List on the Title Page, as authors, one or more persons or 33203 entities responsible for authorship of the modifications in 33204 the Modified Version, together with at least five of the 33205 principal authors of the Document (all of its principal 33206 authors, if it has fewer than five), unless they release you 33207 from this requirement. 33208 33209 C. State on the Title page the name of the publisher of the 33210 Modified Version, as the publisher. 33211 33212 D. Preserve all the copyright notices of the Document. 33213 33214 E. Add an appropriate copyright notice for your modifications 33215 adjacent to the other copyright notices. 33216 33217 F. Include, immediately after the copyright notices, a license 33218 notice giving the public permission to use the Modified 33219 Version under the terms of this License, in the form shown in 33220 the Addendum below. 33221 33222 G. Preserve in that license notice the full lists of Invariant 33223 Sections and required Cover Texts given in the Document's 33224 license notice. 33225 33226 H. Include an unaltered copy of this License. 33227 33228 I. Preserve the section Entitled "History", Preserve its Title, 33229 and add to it an item stating at least the title, year, new 33230 authors, and publisher of the Modified Version as given on 33231 the Title Page. If there is no section Entitled "History" in 33232 the Document, create one stating the title, year, authors, 33233 and publisher of the Document as given on its Title Page, 33234 then add an item describing the Modified Version as stated in 33235 the previous sentence. 33236 33237 J. Preserve the network location, if any, given in the Document 33238 for public access to a Transparent copy of the Document, and 33239 likewise the network locations given in the Document for 33240 previous versions it was based on. These may be placed in 33241 the "History" section. You may omit a network location for a 33242 work that was published at least four years before the 33243 Document itself, or if the original publisher of the version 33244 it refers to gives permission. 33245 33246 K. For any section Entitled "Acknowledgements" or "Dedications", 33247 Preserve the Title of the section, and preserve in the 33248 section all the substance and tone of each of the contributor 33249 acknowledgements and/or dedications given therein. 33250 33251 L. Preserve all the Invariant Sections of the Document, 33252 unaltered in their text and in their titles. Section numbers 33253 or the equivalent are not considered part of the section 33254 titles. 33255 33256 M. Delete any section Entitled "Endorsements". Such a section 33257 may not be included in the Modified Version. 33258 33259 N. Do not retitle any existing section to be Entitled 33260 "Endorsements" or to conflict in title with any Invariant 33261 Section. 33262 33263 O. Preserve any Warranty Disclaimers. 33264 33265 If the Modified Version includes new front-matter sections or 33266 appendices that qualify as Secondary Sections and contain no 33267 material copied from the Document, you may at your option 33268 designate some or all of these sections as invariant. To do this, 33269 add their titles to the list of Invariant Sections in the Modified 33270 Version's license notice. These titles must be distinct from any 33271 other section titles. 33272 33273 You may add a section Entitled "Endorsements", provided it contains 33274 nothing but endorsements of your Modified Version by various 33275 parties--for example, statements of peer review or that the text 33276 has been approved by an organization as the authoritative 33277 definition of a standard. 33278 33279 You may add a passage of up to five words as a Front-Cover Text, 33280 and a passage of up to 25 words as a Back-Cover Text, to the end 33281 of the list of Cover Texts in the Modified Version. Only one 33282 passage of Front-Cover Text and one of Back-Cover Text may be 33283 added by (or through arrangements made by) any one entity. If the 33284 Document already includes a cover text for the same cover, 33285 previously added by you or by arrangement made by the same entity 33286 you are acting on behalf of, you may not add another; but you may 33287 replace the old one, on explicit permission from the previous 33288 publisher that added the old one. 33289 33290 The author(s) and publisher(s) of the Document do not by this 33291 License give permission to use their names for publicity for or to 33292 assert or imply endorsement of any Modified Version. 33293 33294 5. COMBINING DOCUMENTS 33295 33296 You may combine the Document with other documents released under 33297 this License, under the terms defined in section 4 above for 33298 modified versions, provided that you include in the combination 33299 all of the Invariant Sections of all of the original documents, 33300 unmodified, and list them all as Invariant Sections of your 33301 combined work in its license notice, and that you preserve all 33302 their Warranty Disclaimers. 33303 33304 The combined work need only contain one copy of this License, and 33305 multiple identical Invariant Sections may be replaced with a single 33306 copy. If there are multiple Invariant Sections with the same name 33307 but different contents, make the title of each such section unique 33308 by adding at the end of it, in parentheses, the name of the 33309 original author or publisher of that section if known, or else a 33310 unique number. Make the same adjustment to the section titles in 33311 the list of Invariant Sections in the license notice of the 33312 combined work. 33313 33314 In the combination, you must combine any sections Entitled 33315 "History" in the various original documents, forming one section 33316 Entitled "History"; likewise combine any sections Entitled 33317 "Acknowledgements", and any sections Entitled "Dedications". You 33318 must delete all sections Entitled "Endorsements." 33319 33320 6. COLLECTIONS OF DOCUMENTS 33321 33322 You may make a collection consisting of the Document and other 33323 documents released under this License, and replace the individual 33324 copies of this License in the various documents with a single copy 33325 that is included in the collection, provided that you follow the 33326 rules of this License for verbatim copying of each of the 33327 documents in all other respects. 33328 33329 You may extract a single document from such a collection, and 33330 distribute it individually under this License, provided you insert 33331 a copy of this License into the extracted document, and follow 33332 this License in all other respects regarding verbatim copying of 33333 that document. 33334 33335 7. AGGREGATION WITH INDEPENDENT WORKS 33336 33337 A compilation of the Document or its derivatives with other 33338 separate and independent documents or works, in or on a volume of 33339 a storage or distribution medium, is called an "aggregate" if the 33340 copyright resulting from the compilation is not used to limit the 33341 legal rights of the compilation's users beyond what the individual 33342 works permit. When the Document is included in an aggregate, this 33343 License does not apply to the other works in the aggregate which 33344 are not themselves derivative works of the Document. 33345 33346 If the Cover Text requirement of section 3 is applicable to these 33347 copies of the Document, then if the Document is less than one half 33348 of the entire aggregate, the Document's Cover Texts may be placed 33349 on covers that bracket the Document within the aggregate, or the 33350 electronic equivalent of covers if the Document is in electronic 33351 form. Otherwise they must appear on printed covers that bracket 33352 the whole aggregate. 33353 33354 8. TRANSLATION 33355 33356 Translation is considered a kind of modification, so you may 33357 distribute translations of the Document under the terms of section 33358 4. Replacing Invariant Sections with translations requires special 33359 permission from their copyright holders, but you may include 33360 translations of some or all Invariant Sections in addition to the 33361 original versions of these Invariant Sections. You may include a 33362 translation of this License, and all the license notices in the 33363 Document, and any Warranty Disclaimers, provided that you also 33364 include the original English version of this License and the 33365 original versions of those notices and disclaimers. In case of a 33366 disagreement between the translation and the original version of 33367 this License or a notice or disclaimer, the original version will 33368 prevail. 33369 33370 If a section in the Document is Entitled "Acknowledgements", 33371 "Dedications", or "History", the requirement (section 4) to 33372 Preserve its Title (section 1) will typically require changing the 33373 actual title. 33374 33375 9. TERMINATION 33376 33377 You may not copy, modify, sublicense, or distribute the Document 33378 except as expressly provided for under this License. Any other 33379 attempt to copy, modify, sublicense or distribute the Document is 33380 void, and will automatically terminate your rights under this 33381 License. However, parties who have received copies, or rights, 33382 from you under this License will not have their licenses 33383 terminated so long as such parties remain in full compliance. 33384 33385 10. FUTURE REVISIONS OF THIS LICENSE 33386 33387 The Free Software Foundation may publish new, revised versions of 33388 the GNU Free Documentation License from time to time. Such new 33389 versions will be similar in spirit to the present version, but may 33390 differ in detail to address new problems or concerns. See 33391 `http://www.gnu.org/copyleft/'. 33392 33393 Each version of the License is given a distinguishing version 33394 number. If the Document specifies that a particular numbered 33395 version of this License "or any later version" applies to it, you 33396 have the option of following the terms and conditions either of 33397 that specified version or of any later version that has been 33398 published (not as a draft) by the Free Software Foundation. If 33399 the Document does not specify a version number of this License, 33400 you may choose any version ever published (not as a draft) by the 33401 Free Software Foundation. 33402 33403 ADDENDUM: How to use this License for your documents 33404 ==================================================== 33405 33406 To use this License in a document you have written, include a copy of 33407 the License in the document and put the following copyright and license 33408 notices just after the title page: 33409 33410 Copyright (C) YEAR YOUR NAME. 33411 Permission is granted to copy, distribute and/or modify this document 33412 under the terms of the GNU Free Documentation License, Version 1.2 33413 or any later version published by the Free Software Foundation; 33414 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 33415 Texts. A copy of the license is included in the section entitled ``GNU 33416 Free Documentation License''. 33417 33418 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 33419 replace the "with...Texts." line with this: 33420 33421 with the Invariant Sections being LIST THEIR TITLES, with 33422 the Front-Cover Texts being LIST, and with the Back-Cover Texts 33423 being LIST. 33424 33425 If you have Invariant Sections without Cover Texts, or some other 33426 combination of the three, merge those two alternatives to suit the 33427 situation. 33428 33429 If your document contains nontrivial examples of program code, we 33430 recommend releasing these examples in parallel under your choice of 33431 free software license, such as the GNU General Public License, to 33432 permit their use in free software. 33433 33434 33435 File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 33436 33437 Contributors to GCC 33438 ******************* 33439 33440 The GCC project would like to thank its many contributors. Without 33441 them the project would not have been nearly as successful as it has 33442 been. Any omissions in this list are accidental. Feel free to contact 33443 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 33444 some of your contributions are not listed. Please keep this list in 33445 alphabetical order. 33446 33447 * Analog Devices helped implement the support for complex data types 33448 and iterators. 33449 33450 * John David Anglin for threading-related fixes and improvements to 33451 libstdc++-v3, and the HP-UX port. 33452 33453 * James van Artsdalen wrote the code that makes efficient use of the 33454 Intel 80387 register stack. 33455 33456 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 33457 Series port. 33458 33459 * Alasdair Baird for various bug fixes. 33460 33461 * Giovanni Bajo for analyzing lots of complicated C++ problem 33462 reports. 33463 33464 * Peter Barada for his work to improve code generation for new 33465 ColdFire cores. 33466 33467 * Gerald Baumgartner added the signature extension to the C++ front 33468 end. 33469 33470 * Godmar Back for his Java improvements and encouragement. 33471 33472 * Scott Bambrough for help porting the Java compiler. 33473 33474 * Wolfgang Bangerth for processing tons of bug reports. 33475 33476 * Jon Beniston for his Microsoft Windows port of Java. 33477 33478 * Daniel Berlin for better DWARF2 support, faster/better 33479 optimizations, improved alias analysis, plus migrating GCC to 33480 Bugzilla. 33481 33482 * Geoff Berry for his Java object serialization work and various 33483 patches. 33484 33485 * Uros Bizjak for the implementation of x87 math built-in functions 33486 and for various middle end and i386 back end improvements and bug 33487 fixes. 33488 33489 * Eric Blake for helping to make GCJ and libgcj conform to the 33490 specifications. 33491 33492 * Janne Blomqvist for contributions to GNU Fortran. 33493 33494 * Segher Boessenkool for various fixes. 33495 33496 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 33497 other Java work. 33498 33499 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 33500 miscellaneous clean-ups. 33501 33502 * Steven Bosscher for integrating the GNU Fortran front end into GCC 33503 and for contributing to the tree-ssa branch. 33504 33505 * Eric Botcazou for fixing middle- and backend bugs left and right. 33506 33507 * Per Bothner for his direction via the steering committee and 33508 various improvements to the infrastructure for supporting new 33509 languages. Chill front end implementation. Initial 33510 implementations of cpplib, fix-header, config.guess, libio, and 33511 past C++ library (libg++) maintainer. Dreaming up, designing and 33512 implementing much of GCJ. 33513 33514 * Devon Bowen helped port GCC to the Tahoe. 33515 33516 * Don Bowman for mips-vxworks contributions. 33517 33518 * Dave Brolley for work on cpplib and Chill. 33519 33520 * Paul Brook for work on the ARM architecture and maintaining GNU 33521 Fortran. 33522 33523 * Robert Brown implemented the support for Encore 32000 systems. 33524 33525 * Christian Bruel for improvements to local store elimination. 33526 33527 * Herman A.J. ten Brugge for various fixes. 33528 33529 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 33530 FAQ. 33531 33532 * Joe Buck for his direction via the steering committee. 33533 33534 * Craig Burley for leadership of the G77 Fortran effort. 33535 33536 * Stephan Buys for contributing Doxygen notes for libstdc++. 33537 33538 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 33539 to the C++ strings, streambufs and formatted I/O, hard detective 33540 work on the frustrating localization issues, and keeping up with 33541 the problem reports. 33542 33543 * John Carr for his alias work, SPARC hacking, infrastructure 33544 improvements, previous contributions to the steering committee, 33545 loop optimizations, etc. 33546 33547 * Stephane Carrez for 68HC11 and 68HC12 ports. 33548 33549 * Steve Chamberlain for support for the Renesas SH and H8 processors 33550 and the PicoJava processor, and for GCJ config fixes. 33551 33552 * Glenn Chambers for help with the GCJ FAQ. 33553 33554 * John-Marc Chandonia for various libgcj patches. 33555 33556 * Scott Christley for his Objective-C contributions. 33557 33558 * Eric Christopher for his Java porting help and clean-ups. 33559 33560 * Branko Cibej for more warning contributions. 33561 33562 * The GNU Classpath project for all of their merged runtime code. 33563 33564 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 33565 other random hacking. 33566 33567 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 33568 33569 * R. Kelley Cook for making GCC buildable from a read-only directory 33570 as well as other miscellaneous build process and documentation 33571 clean-ups. 33572 33573 * Ralf Corsepius for SH testing and minor bug fixing. 33574 33575 * Stan Cox for care and feeding of the x86 port and lots of behind 33576 the scenes hacking. 33577 33578 * Alex Crain provided changes for the 3b1. 33579 33580 * Ian Dall for major improvements to the NS32k port. 33581 33582 * Paul Dale for his work to add uClinux platform support to the m68k 33583 backend. 33584 33585 * Dario Dariol contributed the four varieties of sample programs 33586 that print a copy of their source. 33587 33588 * Russell Davidson for fstream and stringstream fixes in libstdc++. 33589 33590 * Bud Davis for work on the G77 and GNU Fortran compilers. 33591 33592 * Mo DeJong for GCJ and libgcj bug fixes. 33593 33594 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 33595 various bug fixes, and the M32C port. 33596 33597 * Arnaud Desitter for helping to debug GNU Fortran. 33598 33599 * Gabriel Dos Reis for contributions to G++, contributions and 33600 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 33601 including `valarray<>', `complex<>', maintaining the numerics 33602 library (including that pesky `<limits>' :-) and keeping 33603 up-to-date anything to do with numbers. 33604 33605 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 33606 ISO C99 support, CFG dumping support, etc., plus support of the 33607 C++ runtime libraries including for all kinds of C interface 33608 issues, contributing and maintaining `complex<>', sanity checking 33609 and disbursement, configuration architecture, libio maintenance, 33610 and early math work. 33611 33612 * Zdenek Dvorak for a new loop unroller and various fixes. 33613 33614 * Richard Earnshaw for his ongoing work with the ARM. 33615 33616 * David Edelsohn for his direction via the steering committee, 33617 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 33618 loop changes, doing the entire AIX port of libstdc++ with his bare 33619 hands, and for ensuring GCC properly keeps working on AIX. 33620 33621 * Kevin Ediger for the floating point formatting of num_put::do_put 33622 in libstdc++. 33623 33624 * Phil Edwards for libstdc++ work including configuration hackery, 33625 documentation maintainer, chief breaker of the web pages, the 33626 occasional iostream bug fix, and work on shared library symbol 33627 versioning. 33628 33629 * Paul Eggert for random hacking all over GCC. 33630 33631 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 33632 configuration support for locales and fstream-related fixes. 33633 33634 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 33635 iostreams. 33636 33637 * Christian Ehrhardt for dealing with bug reports. 33638 33639 * Ben Elliston for his work to move the Objective-C runtime into its 33640 own subdirectory and for his work on autoconf. 33641 33642 * Revital Eres for work on the PowerPC 750CL port. 33643 33644 * Marc Espie for OpenBSD support. 33645 33646 * Doug Evans for much of the global optimization framework, arc, 33647 m32r, and SPARC work. 33648 33649 * Christopher Faylor for his work on the Cygwin port and for caring 33650 and feeding the gcc.gnu.org box and saving its users tons of spam. 33651 33652 * Fred Fish for BeOS support and Ada fixes. 33653 33654 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 33655 33656 * Peter Gerwinski for various bug fixes and the Pascal front end. 33657 33658 * Kaveh R. Ghazi for his direction via the steering committee, 33659 amazing work to make `-W -Wall -W* -Werror' useful, and 33660 continuously testing GCC on a plethora of platforms. Kaveh 33661 extends his gratitude to the CAIP Center at Rutgers University for 33662 providing him with computing resources to work on Free Software 33663 since the late 1980s. 33664 33665 * John Gilmore for a donation to the FSF earmarked improving GNU 33666 Java. 33667 33668 * Judy Goldberg for c++ contributions. 33669 33670 * Torbjorn Granlund for various fixes and the c-torture testsuite, 33671 multiply- and divide-by-constant optimization, improved long long 33672 support, improved leaf function register allocation, and his 33673 direction via the steering committee. 33674 33675 * Anthony Green for his `-Os' contributions and Java front end work. 33676 33677 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 33678 Java code. 33679 33680 * Michael K. Gschwind contributed the port to the PDP-11. 33681 33682 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 33683 the support for Dwarf symbolic debugging information, and much of 33684 the support for System V Release 4. He has also worked heavily on 33685 the Intel 386 and 860 support. 33686 33687 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 33688 GCSE. 33689 33690 * Bruno Haible for improvements in the runtime overhead for EH, new 33691 warnings and assorted bug fixes. 33692 33693 * Andrew Haley for his amazing Java compiler and library efforts. 33694 33695 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 33696 series 300. 33697 33698 * Michael Hayes for various thankless work he's done trying to get 33699 the c30/c40 ports functional. Lots of loop and unroll 33700 improvements and fixes. 33701 33702 * Dara Hazeghi for wading through myriads of target-specific bug 33703 reports. 33704 33705 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 33706 33707 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 33708 work, loop opts, and generally fixing lots of old problems we've 33709 ignored for years, flow rewrite and lots of further stuff, 33710 including reviewing tons of patches. 33711 33712 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 33713 various fixes. 33714 33715 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 33716 contributed the support for the Sony NEWS machine. 33717 33718 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 33719 various fixes. 33720 33721 * Katherine Holcomb for work on GNU Fortran. 33722 33723 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 33724 of testing and bug fixing, particularly of GCC configury code. 33725 33726 * Steve Holmgren for MachTen patches. 33727 33728 * Jan Hubicka for his x86 port improvements. 33729 33730 * Falk Hueffner for working on C and optimization bug reports. 33731 33732 * Bernardo Innocenti for his m68k work, including merging of 33733 ColdFire improvements and uClinux support. 33734 33735 * Christian Iseli for various bug fixes. 33736 33737 * Kamil Iskra for general m68k hacking. 33738 33739 * Lee Iverson for random fixes and MIPS testing. 33740 33741 * Andreas Jaeger for testing and benchmarking of GCC and various bug 33742 fixes. 33743 33744 * Jakub Jelinek for his SPARC work and sibling call optimizations as 33745 well as lots of bug fixes and test cases, and for improving the 33746 Java build system. 33747 33748 * Janis Johnson for ia64 testing and fixes, her quality improvement 33749 sidetracks, and web page maintenance. 33750 33751 * Kean Johnston for SCO OpenServer support and various fixes. 33752 33753 * Tim Josling for the sample language treelang based originally on 33754 Richard Kenner's "toy" language. 33755 33756 * Nicolai Josuttis for additional libstdc++ documentation. 33757 33758 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 33759 target. 33760 33761 * Steven G. Kargl for work on GNU Fortran. 33762 33763 * David Kashtan of SRI adapted GCC to VMS. 33764 33765 * Ryszard Kabatek for many, many libstdc++ bug fixes and 33766 optimizations of strings, especially member functions, and for 33767 auto_ptr fixes. 33768 33769 * Geoffrey Keating for his ongoing work to make the PPC work for 33770 GNU/Linux and his automatic regression tester. 33771 33772 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 33773 work in just about every part of libstdc++. 33774 33775 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 33776 MIL-STD-1750A. 33777 33778 * Richard Kenner of the New York University Ultracomputer Research 33779 Laboratory wrote the machine descriptions for the AMD 29000, the 33780 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 33781 support for instruction attributes. He also made changes to 33782 better support RISC processors including changes to common 33783 subexpression elimination, strength reduction, function calling 33784 sequence handling, and condition code support, in addition to 33785 generalizing the code for frame pointer elimination and delay slot 33786 scheduling. Richard Kenner was also the head maintainer of GCC 33787 for several years. 33788 33789 * Mumit Khan for various contributions to the Cygwin and Mingw32 33790 ports and maintaining binary releases for Microsoft Windows hosts, 33791 and for massive libstdc++ porting work to Cygwin/Mingw32. 33792 33793 * Robin Kirkham for cpu32 support. 33794 33795 * Mark Klein for PA improvements. 33796 33797 * Thomas Koenig for various bug fixes. 33798 33799 * Bruce Korb for the new and improved fixincludes code. 33800 33801 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 33802 effort. 33803 33804 * Charles LaBrec contributed the support for the Integrated Solutions 33805 68020 system. 33806 33807 * Asher Langton and Mike Kumbera for contributing Cray pointer 33808 support to GNU Fortran, and for other GNU Fortran improvements. 33809 33810 * Jeff Law for his direction via the steering committee, 33811 coordinating the entire egcs project and GCC 2.95, rolling out 33812 snapshots and releases, handling merges from GCC2, reviewing tons 33813 of patches that might have fallen through the cracks else, and 33814 random but extensive hacking. 33815 33816 * Marc Lehmann for his direction via the steering committee and 33817 helping with analysis and improvements of x86 performance. 33818 33819 * Victor Leikehman for work on GNU Fortran. 33820 33821 * Ted Lemon wrote parts of the RTL reader and printer. 33822 33823 * Kriang Lerdsuwanakij for C++ improvements including template as 33824 template parameter support, and many C++ fixes. 33825 33826 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 33827 and random work on the Java front end. 33828 33829 * Alain Lichnewsky ported GCC to the MIPS CPU. 33830 33831 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 33832 and patches. 33833 33834 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 33835 33836 * Chen Liqin for various S+core related fixes/improvement, and for 33837 maintaining the S+core port. 33838 33839 * Weiwen Liu for testing and various bug fixes. 33840 33841 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 33842 diagnostics fixes and improvements. 33843 33844 * Dave Love for his ongoing work with the Fortran front end and 33845 runtime libraries. 33846 33847 * Martin von Lo"wis for internal consistency checking infrastructure, 33848 various C++ improvements including namespace support, and tons of 33849 assistance with libstdc++/compiler merges. 33850 33851 * H.J. Lu for his previous contributions to the steering committee, 33852 many x86 bug reports, prototype patches, and keeping the GNU/Linux 33853 ports working. 33854 33855 * Greg McGary for random fixes and (someday) bounded pointers. 33856 33857 * Andrew MacLeod for his ongoing work in building a real EH system, 33858 various code generation improvements, work on the global 33859 optimizer, etc. 33860 33861 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 33862 hacking improvements to compile-time performance, overall 33863 knowledge and direction in the area of instruction scheduling, and 33864 design and implementation of the automaton based instruction 33865 scheduler. 33866 33867 * Bob Manson for his behind the scenes work on dejagnu. 33868 33869 * Philip Martin for lots of libstdc++ string and vector iterator 33870 fixes and improvements, and string clean up and testsuites. 33871 33872 * All of the Mauve project contributors, for Java test code. 33873 33874 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 33875 33876 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 33877 33878 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 33879 powerpc, haifa, ECOFF debug support, and other assorted hacking. 33880 33881 * Jason Merrill for his direction via the steering committee and 33882 leading the G++ effort. 33883 33884 * Martin Michlmayr for testing GCC on several architectures using the 33885 entire Debian archive. 33886 33887 * David Miller for his direction via the steering committee, lots of 33888 SPARC work, improvements in jump.c and interfacing with the Linux 33889 kernel developers. 33890 33891 * Gary Miller ported GCC to Charles River Data Systems machines. 33892 33893 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 33894 the entire libstdc++ testsuite namespace-compatible. 33895 33896 * Mark Mitchell for his direction via the steering committee, 33897 mountains of C++ work, load/store hoisting out of loops, alias 33898 analysis improvements, ISO C `restrict' support, and serving as 33899 release manager for GCC 3.x. 33900 33901 * Alan Modra for various GNU/Linux bits and testing. 33902 33903 * Toon Moene for his direction via the steering committee, Fortran 33904 maintenance, and his ongoing work to make us make Fortran run fast. 33905 33906 * Jason Molenda for major help in the care and feeding of all the 33907 services on the gcc.gnu.org (formerly egcs.cygnus.com) 33908 machine--mail, web services, ftp services, etc etc. Doing all 33909 this work on scrap paper and the backs of envelopes would have 33910 been... difficult. 33911 33912 * Catherine Moore for fixing various ugly problems we have sent her 33913 way, including the haifa bug which was killing the Alpha & PowerPC 33914 Linux kernels. 33915 33916 * Mike Moreton for his various Java patches. 33917 33918 * David Mosberger-Tang for various Alpha improvements, and for the 33919 initial IA-64 port. 33920 33921 * Stephen Moshier contributed the floating point emulator that 33922 assists in cross-compilation and permits support for floating 33923 point numbers wider than 64 bits and for ISO C99 support. 33924 33925 * Bill Moyer for his behind the scenes work on various issues. 33926 33927 * Philippe De Muyter for his work on the m68k port. 33928 33929 * Joseph S. Myers for his work on the PDP-11 port, format checking 33930 and ISO C99 support, and continuous emphasis on (and contributions 33931 to) documentation. 33932 33933 * Nathan Myers for his work on libstdc++-v3: architecture and 33934 authorship through the first three snapshots, including 33935 implementation of locale infrastructure, string, shadow C headers, 33936 and the initial project documentation (DESIGN, CHECKLIST, and so 33937 forth). Later, more work on MT-safe string and shadow headers. 33938 33939 * Felix Natter for documentation on porting libstdc++. 33940 33941 * Nathanael Nerode for cleaning up the configuration/build process. 33942 33943 * NeXT, Inc. donated the front end that supports the Objective-C 33944 language. 33945 33946 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 33947 the search engine setup, various documentation fixes and other 33948 small fixes. 33949 33950 * Geoff Noer for his work on getting cygwin native builds working. 33951 33952 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 33953 tracking web pages and assorted fixes. 33954 33955 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 33956 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 33957 related infrastructure improvements. 33958 33959 * Alexandre Oliva for various build infrastructure improvements, 33960 scripts and amazing testing work, including keeping libtool issues 33961 sane and happy. 33962 33963 * Stefan Olsson for work on mt_alloc. 33964 33965 * Melissa O'Neill for various NeXT fixes. 33966 33967 * Rainer Orth for random MIPS work, including improvements to GCC's 33968 o32 ABI support, improvements to dejagnu's MIPS support, Java 33969 configuration clean-ups and porting work, etc. 33970 33971 * Hartmut Penner for work on the s390 port. 33972 33973 * Paul Petersen wrote the machine description for the Alliant FX/8. 33974 33975 * Alexandre Petit-Bianco for implementing much of the Java compiler 33976 and continued Java maintainership. 33977 33978 * Matthias Pfaller for major improvements to the NS32k port. 33979 33980 * Gerald Pfeifer for his direction via the steering committee, 33981 pointing out lots of problems we need to solve, maintenance of the 33982 web pages, and taking care of documentation maintenance in general. 33983 33984 * Andrew Pinski for processing bug reports by the dozen. 33985 33986 * Ovidiu Predescu for his work on the Objective-C front end and 33987 runtime libraries. 33988 33989 * Jerry Quinn for major performance improvements in C++ formatted 33990 I/O. 33991 33992 * Ken Raeburn for various improvements to checker, MIPS ports and 33993 various cleanups in the compiler. 33994 33995 * Rolf W. Rasmussen for hacking on AWT. 33996 33997 * David Reese of Sun Microsystems contributed to the Solaris on 33998 PowerPC port. 33999 34000 * Volker Reichelt for keeping up with the problem reports. 34001 34002 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 34003 hacking. 34004 34005 * Loren J. Rittle for improvements to libstdc++-v3 including the 34006 FreeBSD port, threading fixes, thread-related configury changes, 34007 critical threading documentation, and solutions to really tricky 34008 I/O problems, as well as keeping GCC properly working on FreeBSD 34009 and continuous testing. 34010 34011 * Craig Rodrigues for processing tons of bug reports. 34012 34013 * Ola Ro"nnerup for work on mt_alloc. 34014 34015 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 34016 34017 * David Ronis inspired and encouraged Craig to rewrite the G77 34018 documentation in texinfo format by contributing a first pass at a 34019 translation of the old `g77-0.5.16/f/DOC' file. 34020 34021 * Ken Rose for fixes to GCC's delay slot filling code. 34022 34023 * Paul Rubin wrote most of the preprocessor. 34024 34025 * Pe'tur Runo'lfsson for major performance improvements in C++ 34026 formatted I/O and large file support in C++ filebuf. 34027 34028 * Chip Salzenberg for libstdc++ patches and improvements to locales, 34029 traits, Makefiles, libio, libtool hackery, and "long long" support. 34030 34031 * Juha Sarlin for improvements to the H8 code generator. 34032 34033 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 34034 300. 34035 34036 * Roger Sayle for improvements to constant folding and GCC's RTL 34037 optimizers as well as for fixing numerous bugs. 34038 34039 * Bradley Schatz for his work on the GCJ FAQ. 34040 34041 * Peter Schauer wrote the code to allow debugging to work on the 34042 Alpha. 34043 34044 * William Schelter did most of the work on the Intel 80386 support. 34045 34046 * Tobias Schlu"ter for work on GNU Fortran. 34047 34048 * Bernd Schmidt for various code generation improvements and major 34049 work in the reload pass as well a serving as release manager for 34050 GCC 2.95.3. 34051 34052 * Peter Schmid for constant testing of libstdc++--especially 34053 application testing, going above and beyond what was requested for 34054 the release criteria--and libstdc++ header file tweaks. 34055 34056 * Jason Schroeder for jcf-dump patches. 34057 34058 * Andreas Schwab for his work on the m68k port. 34059 34060 * Lars Segerlund for work on GNU Fortran. 34061 34062 * Joel Sherrill for his direction via the steering committee, RTEMS 34063 contributions and RTEMS testing. 34064 34065 * Nathan Sidwell for many C++ fixes/improvements. 34066 34067 * Jeffrey Siegal for helping RMS with the original design of GCC, 34068 some code which handles the parse tree and RTL data structures, 34069 constant folding and help with the original VAX & m68k ports. 34070 34071 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 34072 from the LWG (thereby keeping GCC in line with updates from the 34073 ISO). 34074 34075 * Franz Sirl for his ongoing work with making the PPC port stable 34076 for GNU/Linux. 34077 34078 * Andrey Slepuhin for assorted AIX hacking. 34079 34080 * Trevor Smigiel for contributing the SPU port. 34081 34082 * Christopher Smith did the port for Convex machines. 34083 34084 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 34085 34086 * Randy Smith finished the Sun FPA support. 34087 34088 * Scott Snyder for queue, iterator, istream, and string fixes and 34089 libstdc++ testsuite entries. Also for providing the patch to G77 34090 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 34091 `LOGICAL*1'. 34092 34093 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 34094 34095 * Richard Stallman, for writing the original GCC and launching the 34096 GNU project. 34097 34098 * Jan Stein of the Chalmers Computer Society provided support for 34099 Genix, as well as part of the 32000 machine description. 34100 34101 * Nigel Stephens for various mips16 related fixes/improvements. 34102 34103 * Jonathan Stone wrote the machine description for the Pyramid 34104 computer. 34105 34106 * Graham Stott for various infrastructure improvements. 34107 34108 * John Stracke for his Java HTTP protocol fixes. 34109 34110 * Mike Stump for his Elxsi port, G++ contributions over the years 34111 and more recently his vxworks contributions 34112 34113 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 34114 34115 * Shigeya Suzuki for this fixes for the bsdi platforms. 34116 34117 * Ian Lance Taylor for his mips16 work, general configury hacking, 34118 fixincludes, etc. 34119 34120 * Holger Teutsch provided the support for the Clipper CPU. 34121 34122 * Gary Thomas for his ongoing work to make the PPC work for 34123 GNU/Linux. 34124 34125 * Philipp Thomas for random bug fixes throughout the compiler 34126 34127 * Jason Thorpe for thread support in libstdc++ on NetBSD. 34128 34129 * Kresten Krab Thorup wrote the run time support for the Objective-C 34130 language and the fantastic Java bytecode interpreter. 34131 34132 * Michael Tiemann for random bug fixes, the first instruction 34133 scheduler, initial C++ support, function integration, NS32k, SPARC 34134 and M88k machine description work, delay slot scheduling. 34135 34136 * Andreas Tobler for his work porting libgcj to Darwin. 34137 34138 * Teemu Torma for thread safe exception handling support. 34139 34140 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 34141 definitions, and of the VAX machine description. 34142 34143 * Tom Tromey for internationalization support and for his many Java 34144 contributions and libgcj maintainership. 34145 34146 * Lassi Tuura for improvements to config.guess to determine HP 34147 processor types. 34148 34149 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 34150 34151 * Andy Vaught for the design and initial implementation of the GNU 34152 Fortran front end. 34153 34154 * Brent Verner for work with the libstdc++ cshadow files and their 34155 associated configure steps. 34156 34157 * Todd Vierling for contributions for NetBSD ports. 34158 34159 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 34160 guidance. 34161 34162 * Dean Wakerley for converting the install documentation from HTML 34163 to texinfo in time for GCC 3.0. 34164 34165 * Krister Walfridsson for random bug fixes. 34166 34167 * Feng Wang for contributions to GNU Fortran. 34168 34169 * Stephen M. Webb for time and effort on making libstdc++ shadow 34170 files work with the tricky Solaris 8+ headers, and for pushing the 34171 build-time header tree. 34172 34173 * John Wehle for various improvements for the x86 code generator, 34174 related infrastructure improvements to help x86 code generation, 34175 value range propagation and other work, WE32k port. 34176 34177 * Ulrich Weigand for work on the s390 port. 34178 34179 * Zack Weinberg for major work on cpplib and various other bug fixes. 34180 34181 * Matt Welsh for help with Linux Threads support in GCJ. 34182 34183 * Urban Widmark for help fixing java.io. 34184 34185 * Mark Wielaard for new Java library code and his work integrating 34186 with Classpath. 34187 34188 * Dale Wiles helped port GCC to the Tahoe. 34189 34190 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 34191 34192 * Jim Wilson for his direction via the steering committee, tackling 34193 hard problems in various places that nobody else wanted to work 34194 on, strength reduction and other loop optimizations. 34195 34196 * Paul Woegerer and Tal Agmon for the CRX port. 34197 34198 * Carlo Wood for various fixes. 34199 34200 * Tom Wood for work on the m88k port. 34201 34202 * Canqun Yang for work on GNU Fortran. 34203 34204 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 34205 description for the Tron architecture (specifically, the Gmicro). 34206 34207 * Kevin Zachmann helped port GCC to the Tahoe. 34208 34209 * Ayal Zaks for Swing Modulo Scheduling (SMS). 34210 34211 * Xiaoqiang Zhang for work on GNU Fortran. 34212 34213 * Gilles Zunino for help porting Java to Irix. 34214 34215 34216 The following people are recognized for their contributions to GNAT, 34217 the Ada front end of GCC: 34218 * Bernard Banner 34219 34220 * Romain Berrendonner 34221 34222 * Geert Bosch 34223 34224 * Emmanuel Briot 34225 34226 * Joel Brobecker 34227 34228 * Ben Brosgol 34229 34230 * Vincent Celier 34231 34232 * Arnaud Charlet 34233 34234 * Chien Chieng 34235 34236 * Cyrille Comar 34237 34238 * Cyrille Crozes 34239 34240 * Robert Dewar 34241 34242 * Gary Dismukes 34243 34244 * Robert Duff 34245 34246 * Ed Falis 34247 34248 * Ramon Fernandez 34249 34250 * Sam Figueroa 34251 34252 * Vasiliy Fofanov 34253 34254 * Michael Friess 34255 34256 * Franco Gasperoni 34257 34258 * Ted Giering 34259 34260 * Matthew Gingell 34261 34262 * Laurent Guerby 34263 34264 * Jerome Guitton 34265 34266 * Olivier Hainque 34267 34268 * Jerome Hugues 34269 34270 * Hristian Kirtchev 34271 34272 * Jerome Lambourg 34273 34274 * Bruno Leclerc 34275 34276 * Albert Lee 34277 34278 * Sean McNeil 34279 34280 * Javier Miranda 34281 34282 * Laurent Nana 34283 34284 * Pascal Obry 34285 34286 * Dong-Ik Oh 34287 34288 * Laurent Pautet 34289 34290 * Brett Porter 34291 34292 * Thomas Quinot 34293 34294 * Nicolas Roche 34295 34296 * Pat Rogers 34297 34298 * Jose Ruiz 34299 34300 * Douglas Rupp 34301 34302 * Sergey Rybin 34303 34304 * Gail Schenker 34305 34306 * Ed Schonberg 34307 34308 * Nicolas Setton 34309 34310 * Samuel Tardieu 34311 34312 34313 The following people are recognized for their contributions of new 34314 features, bug reports, testing and integration of classpath/libgcj for 34315 GCC version 4.1: 34316 * Lillian Angel for `JTree' implementation and lots Free Swing 34317 additions and bug fixes. 34318 34319 * Wolfgang Baer for `GapContent' bug fixes. 34320 34321 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 34322 event fixes, lots of Free Swing work including `JTable' editing. 34323 34324 * Stuart Ballard for RMI constant fixes. 34325 34326 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 34327 34328 * Gary Benson for `MessageFormat' fixes. 34329 34330 * Daniel Bonniot for `Serialization' fixes. 34331 34332 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 34333 and `DOM xml:id' support. 34334 34335 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 34336 34337 * Archie Cobbs for build fixes, VM interface updates, 34338 `URLClassLoader' updates. 34339 34340 * Kelley Cook for build fixes. 34341 34342 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 34343 34344 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 34345 and improvements. 34346 34347 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 34348 2D support. Lots of imageio framework additions, lots of AWT and 34349 Free Swing bug fixes. 34350 34351 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 34352 fixes, better `Proxy' support, bug fixes and IKVM integration. 34353 34354 * Santiago Gala for `AccessControlContext' fixes. 34355 34356 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 34357 improvements. 34358 34359 * David Gilbert for `basic' and `metal' icon and plaf support and 34360 lots of documenting, Lots of Free Swing and metal theme additions. 34361 `MetalIconFactory' implementation. 34362 34363 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 34364 34365 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 34366 build speedups. 34367 34368 * Kim Ho for `JFileChooser' implementation. 34369 34370 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 34371 updates, `Serialization' fixes, `Properties' XML support and 34372 generic branch work, VMIntegration guide update. 34373 34374 * Bastiaan Huisman for `TimeZone' bug fixing. 34375 34376 * Andreas Jaeger for mprec updates. 34377 34378 * Paul Jenner for better `-Werror' support. 34379 34380 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 34381 34382 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 34383 bug fixes all over. Lots of Free Swing work including styled text. 34384 34385 * Simon Kitching for `String' cleanups and optimization suggestions. 34386 34387 * Michael Koch for configuration fixes, `Locale' updates, bug and 34388 build fixes. 34389 34390 * Guilhem Lavaux for configuration, thread and channel fixes and 34391 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 34392 34393 * David Lichteblau for JCL support library global/local reference 34394 cleanups. 34395 34396 * Aaron Luchko for JDWP updates and documentation fixes. 34397 34398 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 34399 features. 34400 34401 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 34402 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 34403 and implementing the Qt4 peers. 34404 34405 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 34406 `SystemLogger' and `FileHandler' rotate implementations, NIO 34407 `FileChannel.map' support, security and policy updates. 34408 34409 * Bryce McKinlay for RMI work. 34410 34411 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 34412 testing and documenting. 34413 34414 * Kalle Olavi Niemitalo for build fixes. 34415 34416 * Rainer Orth for build fixes. 34417 34418 * Andrew Overholt for `File' locking fixes. 34419 34420 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 34421 34422 * Olga Rodimina for `MenuSelectionManager' implementation. 34423 34424 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 34425 34426 * Julian Scheid for documentation updates and gjdoc support. 34427 34428 * Christian Schlichtherle for zip fixes and cleanups. 34429 34430 * Robert Schuster for documentation updates and beans fixes, 34431 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 34432 and URL, AWT and Free Swing bug fixes. 34433 34434 * Keith Seitz for lots of JDWP work. 34435 34436 * Christian Thalinger for 64-bit cleanups, Configuration and VM 34437 interface fixes and `CACAO' integration, `fdlibm' updates. 34438 34439 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 34440 34441 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 34442 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 34443 34444 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 34445 integration. `Qt4' build infrastructure, `SHA1PRNG' and 34446 `GdkPixbugDecoder' updates. 34447 34448 * Tom Tromey for Eclipse integration, generics work, lots of bug 34449 fixes and gcj integration including coordinating The Big Merge. 34450 34451 * Mark Wielaard for bug fixes, packaging and release management, 34452 `Clipboard' implementation, system call interrupts and network 34453 timeouts and `GdkPixpufDecoder' fixes. 34454 34455 34456 In addition to the above, all of which also contributed time and 34457 energy in testing GCC, we would like to thank the following for their 34458 contributions to testing: 34459 34460 * Michael Abd-El-Malek 34461 34462 * Thomas Arend 34463 34464 * Bonzo Armstrong 34465 34466 * Steven Ashe 34467 34468 * Chris Baldwin 34469 34470 * David Billinghurst 34471 34472 * Jim Blandy 34473 34474 * Stephane Bortzmeyer 34475 34476 * Horst von Brand 34477 34478 * Frank Braun 34479 34480 * Rodney Brown 34481 34482 * Sidney Cadot 34483 34484 * Bradford Castalia 34485 34486 * Jonathan Corbet 34487 34488 * Ralph Doncaster 34489 34490 * Richard Emberson 34491 34492 * Levente Farkas 34493 34494 * Graham Fawcett 34495 34496 * Mark Fernyhough 34497 34498 * Robert A. French 34499 34500 * Jo"rgen Freyh 34501 34502 * Mark K. Gardner 34503 34504 * Charles-Antoine Gauthier 34505 34506 * Yung Shing Gene 34507 34508 * David Gilbert 34509 34510 * Simon Gornall 34511 34512 * Fred Gray 34513 34514 * John Griffin 34515 34516 * Patrik Hagglund 34517 34518 * Phil Hargett 34519 34520 * Amancio Hasty 34521 34522 * Takafumi Hayashi 34523 34524 * Bryan W. Headley 34525 34526 * Kevin B. Hendricks 34527 34528 * Joep Jansen 34529 34530 * Christian Joensson 34531 34532 * Michel Kern 34533 34534 * David Kidd 34535 34536 * Tobias Kuipers 34537 34538 * Anand Krishnaswamy 34539 34540 * A. O. V. Le Blanc 34541 34542 * llewelly 34543 34544 * Damon Love 34545 34546 * Brad Lucier 34547 34548 * Matthias Klose 34549 34550 * Martin Knoblauch 34551 34552 * Rick Lutowski 34553 34554 * Jesse Macnish 34555 34556 * Stefan Morrell 34557 34558 * Anon A. Mous 34559 34560 * Matthias Mueller 34561 34562 * Pekka Nikander 34563 34564 * Rick Niles 34565 34566 * Jon Olson 34567 34568 * Magnus Persson 34569 34570 * Chris Pollard 34571 34572 * Richard Polton 34573 34574 * Derk Reefman 34575 34576 * David Rees 34577 34578 * Paul Reilly 34579 34580 * Tom Reilly 34581 34582 * Torsten Rueger 34583 34584 * Danny Sadinoff 34585 34586 * Marc Schifer 34587 34588 * Erik Schnetter 34589 34590 * Wayne K. Schroll 34591 34592 * David Schuler 34593 34594 * Vin Shelton 34595 34596 * Tim Souder 34597 34598 * Adam Sulmicki 34599 34600 * Bill Thorson 34601 34602 * George Talbot 34603 34604 * Pedro A. M. Vazquez 34605 34606 * Gregory Warnes 34607 34608 * Ian Watson 34609 34610 * David E. Young 34611 34612 * And many others 34613 34614 And finally we'd like to thank everyone who uses the compiler, submits 34615 bug reports and generally reminds us why we're doing this work in the 34616 first place. 34617 34618 34619 File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 34620 34621 Option Index 34622 ************ 34623 34624 GCC's command line options are indexed here without any initial `-' or 34625 `--'. Where an option has both positive and negative forms (such as 34626 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 34627 indexed under the most appropriate form; it may sometimes be useful to 34628 look up both forms. 34629 34630 [index] 34631 * Menu: 34632 34633 * msoft-float: Soft float library routines. 34634 (line 6) 34635 34636 34637 File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 34638 34639 Concept Index 34640 ************* 34641 34642 [index] 34643 * Menu: 34644 34645 * ! in constraint: Multi-Alternative. (line 47) 34646 * # in constraint: Modifiers. (line 67) 34647 * # in template: Output Template. (line 66) 34648 * #pragma: Misc. (line 381) 34649 * % in constraint: Modifiers. (line 45) 34650 * % in GTY option: GTY Options. (line 18) 34651 * % in template: Output Template. (line 6) 34652 * & in constraint: Modifiers. (line 25) 34653 * (: Sections. (line 160) 34654 * (nil): RTL Objects. (line 73) 34655 * *: Host Common. (line 17) 34656 * * in constraint: Modifiers. (line 72) 34657 * * in template: Output Statement. (line 29) 34658 * *TARGET_GET_PCH_VALIDITY: PCH Target. (line 7) 34659 * + in constraint: Modifiers. (line 12) 34660 * -fsection-anchors <1>: Anchored Addresses. (line 6) 34661 * -fsection-anchors: Special Accessors. (line 106) 34662 * /c in RTL dump: Flags. (line 219) 34663 * /f in RTL dump: Flags. (line 224) 34664 * /i in RTL dump: Flags. (line 276) 34665 * /j in RTL dump: Flags. (line 289) 34666 * /s in RTL dump: Flags. (line 240) 34667 * /u in RTL dump: Flags. (line 299) 34668 * /v in RTL dump: Flags. (line 331) 34669 * 0 in constraint: Simple Constraints. (line 118) 34670 * < in constraint: Simple Constraints. (line 46) 34671 * = in constraint: Modifiers. (line 8) 34672 * > in constraint: Simple Constraints. (line 50) 34673 * ? in constraint: Multi-Alternative. (line 41) 34674 * \: Output Template. (line 46) 34675 * __absvdi2: Integer library routines. 34676 (line 107) 34677 * __absvsi2: Integer library routines. 34678 (line 106) 34679 * __addda3: Fixed-point fractional library routines. 34680 (line 45) 34681 * __adddf3: Soft float library routines. 34682 (line 23) 34683 * __adddq3: Fixed-point fractional library routines. 34684 (line 33) 34685 * __addha3: Fixed-point fractional library routines. 34686 (line 43) 34687 * __addhq3: Fixed-point fractional library routines. 34688 (line 30) 34689 * __addqq3: Fixed-point fractional library routines. 34690 (line 29) 34691 * __addsa3: Fixed-point fractional library routines. 34692 (line 44) 34693 * __addsf3: Soft float library routines. 34694 (line 22) 34695 * __addsq3: Fixed-point fractional library routines. 34696 (line 31) 34697 * __addta3: Fixed-point fractional library routines. 34698 (line 47) 34699 * __addtf3: Soft float library routines. 34700 (line 25) 34701 * __adduda3: Fixed-point fractional library routines. 34702 (line 53) 34703 * __addudq3: Fixed-point fractional library routines. 34704 (line 41) 34705 * __adduha3: Fixed-point fractional library routines. 34706 (line 49) 34707 * __adduhq3: Fixed-point fractional library routines. 34708 (line 37) 34709 * __adduqq3: Fixed-point fractional library routines. 34710 (line 35) 34711 * __addusa3: Fixed-point fractional library routines. 34712 (line 51) 34713 * __addusq3: Fixed-point fractional library routines. 34714 (line 39) 34715 * __adduta3: Fixed-point fractional library routines. 34716 (line 55) 34717 * __addvdi3: Integer library routines. 34718 (line 111) 34719 * __addvsi3: Integer library routines. 34720 (line 110) 34721 * __addxf3: Soft float library routines. 34722 (line 27) 34723 * __ashlda3: Fixed-point fractional library routines. 34724 (line 351) 34725 * __ashldi3: Integer library routines. 34726 (line 14) 34727 * __ashldq3: Fixed-point fractional library routines. 34728 (line 340) 34729 * __ashlha3: Fixed-point fractional library routines. 34730 (line 349) 34731 * __ashlhq3: Fixed-point fractional library routines. 34732 (line 337) 34733 * __ashlqq3: Fixed-point fractional library routines. 34734 (line 336) 34735 * __ashlsa3: Fixed-point fractional library routines. 34736 (line 350) 34737 * __ashlsi3: Integer library routines. 34738 (line 13) 34739 * __ashlsq3: Fixed-point fractional library routines. 34740 (line 338) 34741 * __ashlta3: Fixed-point fractional library routines. 34742 (line 353) 34743 * __ashlti3: Integer library routines. 34744 (line 15) 34745 * __ashluda3: Fixed-point fractional library routines. 34746 (line 359) 34747 * __ashludq3: Fixed-point fractional library routines. 34748 (line 348) 34749 * __ashluha3: Fixed-point fractional library routines. 34750 (line 355) 34751 * __ashluhq3: Fixed-point fractional library routines. 34752 (line 344) 34753 * __ashluqq3: Fixed-point fractional library routines. 34754 (line 342) 34755 * __ashlusa3: Fixed-point fractional library routines. 34756 (line 357) 34757 * __ashlusq3: Fixed-point fractional library routines. 34758 (line 346) 34759 * __ashluta3: Fixed-point fractional library routines. 34760 (line 361) 34761 * __ashrda3: Fixed-point fractional library routines. 34762 (line 371) 34763 * __ashrdi3: Integer library routines. 34764 (line 19) 34765 * __ashrdq3: Fixed-point fractional library routines. 34766 (line 368) 34767 * __ashrha3: Fixed-point fractional library routines. 34768 (line 369) 34769 * __ashrhq3: Fixed-point fractional library routines. 34770 (line 365) 34771 * __ashrqq3: Fixed-point fractional library routines. 34772 (line 364) 34773 * __ashrsa3: Fixed-point fractional library routines. 34774 (line 370) 34775 * __ashrsi3: Integer library routines. 34776 (line 18) 34777 * __ashrsq3: Fixed-point fractional library routines. 34778 (line 366) 34779 * __ashrta3: Fixed-point fractional library routines. 34780 (line 373) 34781 * __ashrti3: Integer library routines. 34782 (line 20) 34783 * __bid_adddd3: Decimal float library routines. 34784 (line 25) 34785 * __bid_addsd3: Decimal float library routines. 34786 (line 21) 34787 * __bid_addtd3: Decimal float library routines. 34788 (line 29) 34789 * __bid_divdd3: Decimal float library routines. 34790 (line 68) 34791 * __bid_divsd3: Decimal float library routines. 34792 (line 64) 34793 * __bid_divtd3: Decimal float library routines. 34794 (line 72) 34795 * __bid_eqdd2: Decimal float library routines. 34796 (line 259) 34797 * __bid_eqsd2: Decimal float library routines. 34798 (line 257) 34799 * __bid_eqtd2: Decimal float library routines. 34800 (line 261) 34801 * __bid_extendddtd2: Decimal float library routines. 34802 (line 92) 34803 * __bid_extendddtf: Decimal float library routines. 34804 (line 140) 34805 * __bid_extendddxf: Decimal float library routines. 34806 (line 134) 34807 * __bid_extenddfdd: Decimal float library routines. 34808 (line 147) 34809 * __bid_extenddftd: Decimal float library routines. 34810 (line 107) 34811 * __bid_extendsddd2: Decimal float library routines. 34812 (line 88) 34813 * __bid_extendsddf: Decimal float library routines. 34814 (line 128) 34815 * __bid_extendsdtd2: Decimal float library routines. 34816 (line 90) 34817 * __bid_extendsdtf: Decimal float library routines. 34818 (line 138) 34819 * __bid_extendsdxf: Decimal float library routines. 34820 (line 132) 34821 * __bid_extendsfdd: Decimal float library routines. 34822 (line 103) 34823 * __bid_extendsfsd: Decimal float library routines. 34824 (line 145) 34825 * __bid_extendsftd: Decimal float library routines. 34826 (line 105) 34827 * __bid_extendtftd: Decimal float library routines. 34828 (line 149) 34829 * __bid_extendxftd: Decimal float library routines. 34830 (line 109) 34831 * __bid_fixdddi: Decimal float library routines. 34832 (line 170) 34833 * __bid_fixddsi: Decimal float library routines. 34834 (line 162) 34835 * __bid_fixsddi: Decimal float library routines. 34836 (line 168) 34837 * __bid_fixsdsi: Decimal float library routines. 34838 (line 160) 34839 * __bid_fixtddi: Decimal float library routines. 34840 (line 172) 34841 * __bid_fixtdsi: Decimal float library routines. 34842 (line 164) 34843 * __bid_fixunsdddi: Decimal float library routines. 34844 (line 187) 34845 * __bid_fixunsddsi: Decimal float library routines. 34846 (line 178) 34847 * __bid_fixunssddi: Decimal float library routines. 34848 (line 185) 34849 * __bid_fixunssdsi: Decimal float library routines. 34850 (line 176) 34851 * __bid_fixunstddi: Decimal float library routines. 34852 (line 189) 34853 * __bid_fixunstdsi: Decimal float library routines. 34854 (line 180) 34855 * __bid_floatdidd: Decimal float library routines. 34856 (line 205) 34857 * __bid_floatdisd: Decimal float library routines. 34858 (line 203) 34859 * __bid_floatditd: Decimal float library routines. 34860 (line 207) 34861 * __bid_floatsidd: Decimal float library routines. 34862 (line 196) 34863 * __bid_floatsisd: Decimal float library routines. 34864 (line 194) 34865 * __bid_floatsitd: Decimal float library routines. 34866 (line 198) 34867 * __bid_floatunsdidd: Decimal float library routines. 34868 (line 223) 34869 * __bid_floatunsdisd: Decimal float library routines. 34870 (line 221) 34871 * __bid_floatunsditd: Decimal float library routines. 34872 (line 225) 34873 * __bid_floatunssidd: Decimal float library routines. 34874 (line 214) 34875 * __bid_floatunssisd: Decimal float library routines. 34876 (line 212) 34877 * __bid_floatunssitd: Decimal float library routines. 34878 (line 216) 34879 * __bid_gedd2: Decimal float library routines. 34880 (line 277) 34881 * __bid_gesd2: Decimal float library routines. 34882 (line 275) 34883 * __bid_getd2: Decimal float library routines. 34884 (line 279) 34885 * __bid_gtdd2: Decimal float library routines. 34886 (line 304) 34887 * __bid_gtsd2: Decimal float library routines. 34888 (line 302) 34889 * __bid_gttd2: Decimal float library routines. 34890 (line 306) 34891 * __bid_ledd2: Decimal float library routines. 34892 (line 295) 34893 * __bid_lesd2: Decimal float library routines. 34894 (line 293) 34895 * __bid_letd2: Decimal float library routines. 34896 (line 297) 34897 * __bid_ltdd2: Decimal float library routines. 34898 (line 286) 34899 * __bid_ltsd2: Decimal float library routines. 34900 (line 284) 34901 * __bid_lttd2: Decimal float library routines. 34902 (line 288) 34903 * __bid_muldd3: Decimal float library routines. 34904 (line 54) 34905 * __bid_mulsd3: Decimal float library routines. 34906 (line 50) 34907 * __bid_multd3: Decimal float library routines. 34908 (line 58) 34909 * __bid_nedd2: Decimal float library routines. 34910 (line 268) 34911 * __bid_negdd2: Decimal float library routines. 34912 (line 78) 34913 * __bid_negsd2: Decimal float library routines. 34914 (line 76) 34915 * __bid_negtd2: Decimal float library routines. 34916 (line 80) 34917 * __bid_nesd2: Decimal float library routines. 34918 (line 266) 34919 * __bid_netd2: Decimal float library routines. 34920 (line 270) 34921 * __bid_subdd3: Decimal float library routines. 34922 (line 39) 34923 * __bid_subsd3: Decimal float library routines. 34924 (line 35) 34925 * __bid_subtd3: Decimal float library routines. 34926 (line 43) 34927 * __bid_truncdddf: Decimal float library routines. 34928 (line 153) 34929 * __bid_truncddsd2: Decimal float library routines. 34930 (line 94) 34931 * __bid_truncddsf: Decimal float library routines. 34932 (line 124) 34933 * __bid_truncdfsd: Decimal float library routines. 34934 (line 111) 34935 * __bid_truncsdsf: Decimal float library routines. 34936 (line 151) 34937 * __bid_trunctddd2: Decimal float library routines. 34938 (line 98) 34939 * __bid_trunctddf: Decimal float library routines. 34940 (line 130) 34941 * __bid_trunctdsd2: Decimal float library routines. 34942 (line 96) 34943 * __bid_trunctdsf: Decimal float library routines. 34944 (line 126) 34945 * __bid_trunctdtf: Decimal float library routines. 34946 (line 155) 34947 * __bid_trunctdxf: Decimal float library routines. 34948 (line 136) 34949 * __bid_trunctfdd: Decimal float library routines. 34950 (line 119) 34951 * __bid_trunctfsd: Decimal float library routines. 34952 (line 115) 34953 * __bid_truncxfdd: Decimal float library routines. 34954 (line 117) 34955 * __bid_truncxfsd: Decimal float library routines. 34956 (line 113) 34957 * __bid_unorddd2: Decimal float library routines. 34958 (line 235) 34959 * __bid_unordsd2: Decimal float library routines. 34960 (line 233) 34961 * __bid_unordtd2: Decimal float library routines. 34962 (line 237) 34963 * __bswapdi2: Integer library routines. 34964 (line 162) 34965 * __bswapsi2: Integer library routines. 34966 (line 161) 34967 * __builtin_args_info: Varargs. (line 42) 34968 * __builtin_classify_type: Varargs. (line 76) 34969 * __builtin_next_arg: Varargs. (line 66) 34970 * __builtin_saveregs: Varargs. (line 24) 34971 * __clear_cache: Miscellaneous routines. 34972 (line 10) 34973 * __clzdi2: Integer library routines. 34974 (line 131) 34975 * __clzsi2: Integer library routines. 34976 (line 130) 34977 * __clzti2: Integer library routines. 34978 (line 132) 34979 * __cmpda2: Fixed-point fractional library routines. 34980 (line 451) 34981 * __cmpdf2: Soft float library routines. 34982 (line 164) 34983 * __cmpdi2: Integer library routines. 34984 (line 87) 34985 * __cmpdq2: Fixed-point fractional library routines. 34986 (line 441) 34987 * __cmpha2: Fixed-point fractional library routines. 34988 (line 449) 34989 * __cmphq2: Fixed-point fractional library routines. 34990 (line 438) 34991 * __cmpqq2: Fixed-point fractional library routines. 34992 (line 437) 34993 * __cmpsa2: Fixed-point fractional library routines. 34994 (line 450) 34995 * __cmpsf2: Soft float library routines. 34996 (line 163) 34997 * __cmpsq2: Fixed-point fractional library routines. 34998 (line 439) 34999 * __cmpta2: Fixed-point fractional library routines. 35000 (line 453) 35001 * __cmptf2: Soft float library routines. 35002 (line 165) 35003 * __cmpti2: Integer library routines. 35004 (line 88) 35005 * __cmpuda2: Fixed-point fractional library routines. 35006 (line 458) 35007 * __cmpudq2: Fixed-point fractional library routines. 35008 (line 448) 35009 * __cmpuha2: Fixed-point fractional library routines. 35010 (line 455) 35011 * __cmpuhq2: Fixed-point fractional library routines. 35012 (line 444) 35013 * __cmpuqq2: Fixed-point fractional library routines. 35014 (line 443) 35015 * __cmpusa2: Fixed-point fractional library routines. 35016 (line 456) 35017 * __cmpusq2: Fixed-point fractional library routines. 35018 (line 446) 35019 * __cmputa2: Fixed-point fractional library routines. 35020 (line 460) 35021 * __CTOR_LIST__: Initialization. (line 25) 35022 * __ctzdi2: Integer library routines. 35023 (line 138) 35024 * __ctzsi2: Integer library routines. 35025 (line 137) 35026 * __ctzti2: Integer library routines. 35027 (line 139) 35028 * __divda3: Fixed-point fractional library routines. 35029 (line 227) 35030 * __divdc3: Soft float library routines. 35031 (line 252) 35032 * __divdf3: Soft float library routines. 35033 (line 48) 35034 * __divdi3: Integer library routines. 35035 (line 25) 35036 * __divdq3: Fixed-point fractional library routines. 35037 (line 223) 35038 * __divha3: Fixed-point fractional library routines. 35039 (line 225) 35040 * __divhq3: Fixed-point fractional library routines. 35041 (line 220) 35042 * __divqq3: Fixed-point fractional library routines. 35043 (line 219) 35044 * __divsa3: Fixed-point fractional library routines. 35045 (line 226) 35046 * __divsc3: Soft float library routines. 35047 (line 250) 35048 * __divsf3: Soft float library routines. 35049 (line 47) 35050 * __divsi3: Integer library routines. 35051 (line 24) 35052 * __divsq3: Fixed-point fractional library routines. 35053 (line 221) 35054 * __divta3: Fixed-point fractional library routines. 35055 (line 229) 35056 * __divtc3: Soft float library routines. 35057 (line 254) 35058 * __divtf3: Soft float library routines. 35059 (line 50) 35060 * __divti3: Integer library routines. 35061 (line 26) 35062 * __divxc3: Soft float library routines. 35063 (line 256) 35064 * __divxf3: Soft float library routines. 35065 (line 52) 35066 * __dpd_adddd3: Decimal float library routines. 35067 (line 23) 35068 * __dpd_addsd3: Decimal float library routines. 35069 (line 19) 35070 * __dpd_addtd3: Decimal float library routines. 35071 (line 27) 35072 * __dpd_divdd3: Decimal float library routines. 35073 (line 66) 35074 * __dpd_divsd3: Decimal float library routines. 35075 (line 62) 35076 * __dpd_divtd3: Decimal float library routines. 35077 (line 70) 35078 * __dpd_eqdd2: Decimal float library routines. 35079 (line 258) 35080 * __dpd_eqsd2: Decimal float library routines. 35081 (line 256) 35082 * __dpd_eqtd2: Decimal float library routines. 35083 (line 260) 35084 * __dpd_extendddtd2: Decimal float library routines. 35085 (line 91) 35086 * __dpd_extendddtf: Decimal float library routines. 35087 (line 139) 35088 * __dpd_extendddxf: Decimal float library routines. 35089 (line 133) 35090 * __dpd_extenddfdd: Decimal float library routines. 35091 (line 146) 35092 * __dpd_extenddftd: Decimal float library routines. 35093 (line 106) 35094 * __dpd_extendsddd2: Decimal float library routines. 35095 (line 87) 35096 * __dpd_extendsddf: Decimal float library routines. 35097 (line 127) 35098 * __dpd_extendsdtd2: Decimal float library routines. 35099 (line 89) 35100 * __dpd_extendsdtf: Decimal float library routines. 35101 (line 137) 35102 * __dpd_extendsdxf: Decimal float library routines. 35103 (line 131) 35104 * __dpd_extendsfdd: Decimal float library routines. 35105 (line 102) 35106 * __dpd_extendsfsd: Decimal float library routines. 35107 (line 144) 35108 * __dpd_extendsftd: Decimal float library routines. 35109 (line 104) 35110 * __dpd_extendtftd: Decimal float library routines. 35111 (line 148) 35112 * __dpd_extendxftd: Decimal float library routines. 35113 (line 108) 35114 * __dpd_fixdddi: Decimal float library routines. 35115 (line 169) 35116 * __dpd_fixddsi: Decimal float library routines. 35117 (line 161) 35118 * __dpd_fixsddi: Decimal float library routines. 35119 (line 167) 35120 * __dpd_fixsdsi: Decimal float library routines. 35121 (line 159) 35122 * __dpd_fixtddi: Decimal float library routines. 35123 (line 171) 35124 * __dpd_fixtdsi: Decimal float library routines. 35125 (line 163) 35126 * __dpd_fixunsdddi: Decimal float library routines. 35127 (line 186) 35128 * __dpd_fixunsddsi: Decimal float library routines. 35129 (line 177) 35130 * __dpd_fixunssddi: Decimal float library routines. 35131 (line 184) 35132 * __dpd_fixunssdsi: Decimal float library routines. 35133 (line 175) 35134 * __dpd_fixunstddi: Decimal float library routines. 35135 (line 188) 35136 * __dpd_fixunstdsi: Decimal float library routines. 35137 (line 179) 35138 * __dpd_floatdidd: Decimal float library routines. 35139 (line 204) 35140 * __dpd_floatdisd: Decimal float library routines. 35141 (line 202) 35142 * __dpd_floatditd: Decimal float library routines. 35143 (line 206) 35144 * __dpd_floatsidd: Decimal float library routines. 35145 (line 195) 35146 * __dpd_floatsisd: Decimal float library routines. 35147 (line 193) 35148 * __dpd_floatsitd: Decimal float library routines. 35149 (line 197) 35150 * __dpd_floatunsdidd: Decimal float library routines. 35151 (line 222) 35152 * __dpd_floatunsdisd: Decimal float library routines. 35153 (line 220) 35154 * __dpd_floatunsditd: Decimal float library routines. 35155 (line 224) 35156 * __dpd_floatunssidd: Decimal float library routines. 35157 (line 213) 35158 * __dpd_floatunssisd: Decimal float library routines. 35159 (line 211) 35160 * __dpd_floatunssitd: Decimal float library routines. 35161 (line 215) 35162 * __dpd_gedd2: Decimal float library routines. 35163 (line 276) 35164 * __dpd_gesd2: Decimal float library routines. 35165 (line 274) 35166 * __dpd_getd2: Decimal float library routines. 35167 (line 278) 35168 * __dpd_gtdd2: Decimal float library routines. 35169 (line 303) 35170 * __dpd_gtsd2: Decimal float library routines. 35171 (line 301) 35172 * __dpd_gttd2: Decimal float library routines. 35173 (line 305) 35174 * __dpd_ledd2: Decimal float library routines. 35175 (line 294) 35176 * __dpd_lesd2: Decimal float library routines. 35177 (line 292) 35178 * __dpd_letd2: Decimal float library routines. 35179 (line 296) 35180 * __dpd_ltdd2: Decimal float library routines. 35181 (line 285) 35182 * __dpd_ltsd2: Decimal float library routines. 35183 (line 283) 35184 * __dpd_lttd2: Decimal float library routines. 35185 (line 287) 35186 * __dpd_muldd3: Decimal float library routines. 35187 (line 52) 35188 * __dpd_mulsd3: Decimal float library routines. 35189 (line 48) 35190 * __dpd_multd3: Decimal float library routines. 35191 (line 56) 35192 * __dpd_nedd2: Decimal float library routines. 35193 (line 267) 35194 * __dpd_negdd2: Decimal float library routines. 35195 (line 77) 35196 * __dpd_negsd2: Decimal float library routines. 35197 (line 75) 35198 * __dpd_negtd2: Decimal float library routines. 35199 (line 79) 35200 * __dpd_nesd2: Decimal float library routines. 35201 (line 265) 35202 * __dpd_netd2: Decimal float library routines. 35203 (line 269) 35204 * __dpd_subdd3: Decimal float library routines. 35205 (line 37) 35206 * __dpd_subsd3: Decimal float library routines. 35207 (line 33) 35208 * __dpd_subtd3: Decimal float library routines. 35209 (line 41) 35210 * __dpd_truncdddf: Decimal float library routines. 35211 (line 152) 35212 * __dpd_truncddsd2: Decimal float library routines. 35213 (line 93) 35214 * __dpd_truncddsf: Decimal float library routines. 35215 (line 123) 35216 * __dpd_truncdfsd: Decimal float library routines. 35217 (line 110) 35218 * __dpd_truncsdsf: Decimal float library routines. 35219 (line 150) 35220 * __dpd_trunctddd2: Decimal float library routines. 35221 (line 97) 35222 * __dpd_trunctddf: Decimal float library routines. 35223 (line 129) 35224 * __dpd_trunctdsd2: Decimal float library routines. 35225 (line 95) 35226 * __dpd_trunctdsf: Decimal float library routines. 35227 (line 125) 35228 * __dpd_trunctdtf: Decimal float library routines. 35229 (line 154) 35230 * __dpd_trunctdxf: Decimal float library routines. 35231 (line 135) 35232 * __dpd_trunctfdd: Decimal float library routines. 35233 (line 118) 35234 * __dpd_trunctfsd: Decimal float library routines. 35235 (line 114) 35236 * __dpd_truncxfdd: Decimal float library routines. 35237 (line 116) 35238 * __dpd_truncxfsd: Decimal float library routines. 35239 (line 112) 35240 * __dpd_unorddd2: Decimal float library routines. 35241 (line 234) 35242 * __dpd_unordsd2: Decimal float library routines. 35243 (line 232) 35244 * __dpd_unordtd2: Decimal float library routines. 35245 (line 236) 35246 * __DTOR_LIST__: Initialization. (line 25) 35247 * __eqdf2: Soft float library routines. 35248 (line 194) 35249 * __eqsf2: Soft float library routines. 35250 (line 193) 35251 * __eqtf2: Soft float library routines. 35252 (line 195) 35253 * __extenddftf2: Soft float library routines. 35254 (line 68) 35255 * __extenddfxf2: Soft float library routines. 35256 (line 69) 35257 * __extendsfdf2: Soft float library routines. 35258 (line 65) 35259 * __extendsftf2: Soft float library routines. 35260 (line 66) 35261 * __extendsfxf2: Soft float library routines. 35262 (line 67) 35263 * __ffsdi2: Integer library routines. 35264 (line 144) 35265 * __ffsti2: Integer library routines. 35266 (line 145) 35267 * __fixdfdi: Soft float library routines. 35268 (line 88) 35269 * __fixdfsi: Soft float library routines. 35270 (line 81) 35271 * __fixdfti: Soft float library routines. 35272 (line 94) 35273 * __fixsfdi: Soft float library routines. 35274 (line 87) 35275 * __fixsfsi: Soft float library routines. 35276 (line 80) 35277 * __fixsfti: Soft float library routines. 35278 (line 93) 35279 * __fixtfdi: Soft float library routines. 35280 (line 89) 35281 * __fixtfsi: Soft float library routines. 35282 (line 82) 35283 * __fixtfti: Soft float library routines. 35284 (line 95) 35285 * __fixunsdfdi: Soft float library routines. 35286 (line 108) 35287 * __fixunsdfsi: Soft float library routines. 35288 (line 101) 35289 * __fixunsdfti: Soft float library routines. 35290 (line 115) 35291 * __fixunssfdi: Soft float library routines. 35292 (line 107) 35293 * __fixunssfsi: Soft float library routines. 35294 (line 100) 35295 * __fixunssfti: Soft float library routines. 35296 (line 114) 35297 * __fixunstfdi: Soft float library routines. 35298 (line 109) 35299 * __fixunstfsi: Soft float library routines. 35300 (line 102) 35301 * __fixunstfti: Soft float library routines. 35302 (line 116) 35303 * __fixunsxfdi: Soft float library routines. 35304 (line 110) 35305 * __fixunsxfsi: Soft float library routines. 35306 (line 103) 35307 * __fixunsxfti: Soft float library routines. 35308 (line 117) 35309 * __fixxfdi: Soft float library routines. 35310 (line 90) 35311 * __fixxfsi: Soft float library routines. 35312 (line 83) 35313 * __fixxfti: Soft float library routines. 35314 (line 96) 35315 * __floatdidf: Soft float library routines. 35316 (line 128) 35317 * __floatdisf: Soft float library routines. 35318 (line 127) 35319 * __floatditf: Soft float library routines. 35320 (line 129) 35321 * __floatdixf: Soft float library routines. 35322 (line 130) 35323 * __floatsidf: Soft float library routines. 35324 (line 122) 35325 * __floatsisf: Soft float library routines. 35326 (line 121) 35327 * __floatsitf: Soft float library routines. 35328 (line 123) 35329 * __floatsixf: Soft float library routines. 35330 (line 124) 35331 * __floattidf: Soft float library routines. 35332 (line 134) 35333 * __floattisf: Soft float library routines. 35334 (line 133) 35335 * __floattitf: Soft float library routines. 35336 (line 135) 35337 * __floattixf: Soft float library routines. 35338 (line 136) 35339 * __floatundidf: Soft float library routines. 35340 (line 146) 35341 * __floatundisf: Soft float library routines. 35342 (line 145) 35343 * __floatunditf: Soft float library routines. 35344 (line 147) 35345 * __floatundixf: Soft float library routines. 35346 (line 148) 35347 * __floatunsidf: Soft float library routines. 35348 (line 140) 35349 * __floatunsisf: Soft float library routines. 35350 (line 139) 35351 * __floatunsitf: Soft float library routines. 35352 (line 141) 35353 * __floatunsixf: Soft float library routines. 35354 (line 142) 35355 * __floatuntidf: Soft float library routines. 35356 (line 152) 35357 * __floatuntisf: Soft float library routines. 35358 (line 151) 35359 * __floatuntitf: Soft float library routines. 35360 (line 153) 35361 * __floatuntixf: Soft float library routines. 35362 (line 154) 35363 * __fractdadf: Fixed-point fractional library routines. 35364 (line 636) 35365 * __fractdadi: Fixed-point fractional library routines. 35366 (line 633) 35367 * __fractdadq: Fixed-point fractional library routines. 35368 (line 616) 35369 * __fractdaha2: Fixed-point fractional library routines. 35370 (line 617) 35371 * __fractdahi: Fixed-point fractional library routines. 35372 (line 631) 35373 * __fractdahq: Fixed-point fractional library routines. 35374 (line 614) 35375 * __fractdaqi: Fixed-point fractional library routines. 35376 (line 630) 35377 * __fractdaqq: Fixed-point fractional library routines. 35378 (line 613) 35379 * __fractdasa2: Fixed-point fractional library routines. 35380 (line 618) 35381 * __fractdasf: Fixed-point fractional library routines. 35382 (line 635) 35383 * __fractdasi: Fixed-point fractional library routines. 35384 (line 632) 35385 * __fractdasq: Fixed-point fractional library routines. 35386 (line 615) 35387 * __fractdata2: Fixed-point fractional library routines. 35388 (line 619) 35389 * __fractdati: Fixed-point fractional library routines. 35390 (line 634) 35391 * __fractdauda: Fixed-point fractional library routines. 35392 (line 627) 35393 * __fractdaudq: Fixed-point fractional library routines. 35394 (line 624) 35395 * __fractdauha: Fixed-point fractional library routines. 35396 (line 625) 35397 * __fractdauhq: Fixed-point fractional library routines. 35398 (line 621) 35399 * __fractdauqq: Fixed-point fractional library routines. 35400 (line 620) 35401 * __fractdausa: Fixed-point fractional library routines. 35402 (line 626) 35403 * __fractdausq: Fixed-point fractional library routines. 35404 (line 622) 35405 * __fractdauta: Fixed-point fractional library routines. 35406 (line 629) 35407 * __fractdfda: Fixed-point fractional library routines. 35408 (line 1025) 35409 * __fractdfdq: Fixed-point fractional library routines. 35410 (line 1022) 35411 * __fractdfha: Fixed-point fractional library routines. 35412 (line 1023) 35413 * __fractdfhq: Fixed-point fractional library routines. 35414 (line 1020) 35415 * __fractdfqq: Fixed-point fractional library routines. 35416 (line 1019) 35417 * __fractdfsa: Fixed-point fractional library routines. 35418 (line 1024) 35419 * __fractdfsq: Fixed-point fractional library routines. 35420 (line 1021) 35421 * __fractdfta: Fixed-point fractional library routines. 35422 (line 1026) 35423 * __fractdfuda: Fixed-point fractional library routines. 35424 (line 1033) 35425 * __fractdfudq: Fixed-point fractional library routines. 35426 (line 1030) 35427 * __fractdfuha: Fixed-point fractional library routines. 35428 (line 1031) 35429 * __fractdfuhq: Fixed-point fractional library routines. 35430 (line 1028) 35431 * __fractdfuqq: Fixed-point fractional library routines. 35432 (line 1027) 35433 * __fractdfusa: Fixed-point fractional library routines. 35434 (line 1032) 35435 * __fractdfusq: Fixed-point fractional library routines. 35436 (line 1029) 35437 * __fractdfuta: Fixed-point fractional library routines. 35438 (line 1034) 35439 * __fractdida: Fixed-point fractional library routines. 35440 (line 975) 35441 * __fractdidq: Fixed-point fractional library routines. 35442 (line 972) 35443 * __fractdiha: Fixed-point fractional library routines. 35444 (line 973) 35445 * __fractdihq: Fixed-point fractional library routines. 35446 (line 970) 35447 * __fractdiqq: Fixed-point fractional library routines. 35448 (line 969) 35449 * __fractdisa: Fixed-point fractional library routines. 35450 (line 974) 35451 * __fractdisq: Fixed-point fractional library routines. 35452 (line 971) 35453 * __fractdita: Fixed-point fractional library routines. 35454 (line 976) 35455 * __fractdiuda: Fixed-point fractional library routines. 35456 (line 983) 35457 * __fractdiudq: Fixed-point fractional library routines. 35458 (line 980) 35459 * __fractdiuha: Fixed-point fractional library routines. 35460 (line 981) 35461 * __fractdiuhq: Fixed-point fractional library routines. 35462 (line 978) 35463 * __fractdiuqq: Fixed-point fractional library routines. 35464 (line 977) 35465 * __fractdiusa: Fixed-point fractional library routines. 35466 (line 982) 35467 * __fractdiusq: Fixed-point fractional library routines. 35468 (line 979) 35469 * __fractdiuta: Fixed-point fractional library routines. 35470 (line 984) 35471 * __fractdqda: Fixed-point fractional library routines. 35472 (line 544) 35473 * __fractdqdf: Fixed-point fractional library routines. 35474 (line 566) 35475 * __fractdqdi: Fixed-point fractional library routines. 35476 (line 563) 35477 * __fractdqha: Fixed-point fractional library routines. 35478 (line 542) 35479 * __fractdqhi: Fixed-point fractional library routines. 35480 (line 561) 35481 * __fractdqhq2: Fixed-point fractional library routines. 35482 (line 540) 35483 * __fractdqqi: Fixed-point fractional library routines. 35484 (line 560) 35485 * __fractdqqq2: Fixed-point fractional library routines. 35486 (line 539) 35487 * __fractdqsa: Fixed-point fractional library routines. 35488 (line 543) 35489 * __fractdqsf: Fixed-point fractional library routines. 35490 (line 565) 35491 * __fractdqsi: Fixed-point fractional library routines. 35492 (line 562) 35493 * __fractdqsq2: Fixed-point fractional library routines. 35494 (line 541) 35495 * __fractdqta: Fixed-point fractional library routines. 35496 (line 545) 35497 * __fractdqti: Fixed-point fractional library routines. 35498 (line 564) 35499 * __fractdquda: Fixed-point fractional library routines. 35500 (line 557) 35501 * __fractdqudq: Fixed-point fractional library routines. 35502 (line 552) 35503 * __fractdquha: Fixed-point fractional library routines. 35504 (line 554) 35505 * __fractdquhq: Fixed-point fractional library routines. 35506 (line 548) 35507 * __fractdquqq: Fixed-point fractional library routines. 35508 (line 547) 35509 * __fractdqusa: Fixed-point fractional library routines. 35510 (line 555) 35511 * __fractdqusq: Fixed-point fractional library routines. 35512 (line 550) 35513 * __fractdquta: Fixed-point fractional library routines. 35514 (line 559) 35515 * __fracthada2: Fixed-point fractional library routines. 35516 (line 572) 35517 * __fracthadf: Fixed-point fractional library routines. 35518 (line 590) 35519 * __fracthadi: Fixed-point fractional library routines. 35520 (line 587) 35521 * __fracthadq: Fixed-point fractional library routines. 35522 (line 570) 35523 * __fracthahi: Fixed-point fractional library routines. 35524 (line 585) 35525 * __fracthahq: Fixed-point fractional library routines. 35526 (line 568) 35527 * __fracthaqi: Fixed-point fractional library routines. 35528 (line 584) 35529 * __fracthaqq: Fixed-point fractional library routines. 35530 (line 567) 35531 * __fracthasa2: Fixed-point fractional library routines. 35532 (line 571) 35533 * __fracthasf: Fixed-point fractional library routines. 35534 (line 589) 35535 * __fracthasi: Fixed-point fractional library routines. 35536 (line 586) 35537 * __fracthasq: Fixed-point fractional library routines. 35538 (line 569) 35539 * __fracthata2: Fixed-point fractional library routines. 35540 (line 573) 35541 * __fracthati: Fixed-point fractional library routines. 35542 (line 588) 35543 * __fracthauda: Fixed-point fractional library routines. 35544 (line 581) 35545 * __fracthaudq: Fixed-point fractional library routines. 35546 (line 578) 35547 * __fracthauha: Fixed-point fractional library routines. 35548 (line 579) 35549 * __fracthauhq: Fixed-point fractional library routines. 35550 (line 575) 35551 * __fracthauqq: Fixed-point fractional library routines. 35552 (line 574) 35553 * __fracthausa: Fixed-point fractional library routines. 35554 (line 580) 35555 * __fracthausq: Fixed-point fractional library routines. 35556 (line 576) 35557 * __fracthauta: Fixed-point fractional library routines. 35558 (line 583) 35559 * __fracthida: Fixed-point fractional library routines. 35560 (line 943) 35561 * __fracthidq: Fixed-point fractional library routines. 35562 (line 940) 35563 * __fracthiha: Fixed-point fractional library routines. 35564 (line 941) 35565 * __fracthihq: Fixed-point fractional library routines. 35566 (line 938) 35567 * __fracthiqq: Fixed-point fractional library routines. 35568 (line 937) 35569 * __fracthisa: Fixed-point fractional library routines. 35570 (line 942) 35571 * __fracthisq: Fixed-point fractional library routines. 35572 (line 939) 35573 * __fracthita: Fixed-point fractional library routines. 35574 (line 944) 35575 * __fracthiuda: Fixed-point fractional library routines. 35576 (line 951) 35577 * __fracthiudq: Fixed-point fractional library routines. 35578 (line 948) 35579 * __fracthiuha: Fixed-point fractional library routines. 35580 (line 949) 35581 * __fracthiuhq: Fixed-point fractional library routines. 35582 (line 946) 35583 * __fracthiuqq: Fixed-point fractional library routines. 35584 (line 945) 35585 * __fracthiusa: Fixed-point fractional library routines. 35586 (line 950) 35587 * __fracthiusq: Fixed-point fractional library routines. 35588 (line 947) 35589 * __fracthiuta: Fixed-point fractional library routines. 35590 (line 952) 35591 * __fracthqda: Fixed-point fractional library routines. 35592 (line 498) 35593 * __fracthqdf: Fixed-point fractional library routines. 35594 (line 514) 35595 * __fracthqdi: Fixed-point fractional library routines. 35596 (line 511) 35597 * __fracthqdq2: Fixed-point fractional library routines. 35598 (line 495) 35599 * __fracthqha: Fixed-point fractional library routines. 35600 (line 496) 35601 * __fracthqhi: Fixed-point fractional library routines. 35602 (line 509) 35603 * __fracthqqi: Fixed-point fractional library routines. 35604 (line 508) 35605 * __fracthqqq2: Fixed-point fractional library routines. 35606 (line 493) 35607 * __fracthqsa: Fixed-point fractional library routines. 35608 (line 497) 35609 * __fracthqsf: Fixed-point fractional library routines. 35610 (line 513) 35611 * __fracthqsi: Fixed-point fractional library routines. 35612 (line 510) 35613 * __fracthqsq2: Fixed-point fractional library routines. 35614 (line 494) 35615 * __fracthqta: Fixed-point fractional library routines. 35616 (line 499) 35617 * __fracthqti: Fixed-point fractional library routines. 35618 (line 512) 35619 * __fracthquda: Fixed-point fractional library routines. 35620 (line 506) 35621 * __fracthqudq: Fixed-point fractional library routines. 35622 (line 503) 35623 * __fracthquha: Fixed-point fractional library routines. 35624 (line 504) 35625 * __fracthquhq: Fixed-point fractional library routines. 35626 (line 501) 35627 * __fracthquqq: Fixed-point fractional library routines. 35628 (line 500) 35629 * __fracthqusa: Fixed-point fractional library routines. 35630 (line 505) 35631 * __fracthqusq: Fixed-point fractional library routines. 35632 (line 502) 35633 * __fracthquta: Fixed-point fractional library routines. 35634 (line 507) 35635 * __fractqida: Fixed-point fractional library routines. 35636 (line 925) 35637 * __fractqidq: Fixed-point fractional library routines. 35638 (line 922) 35639 * __fractqiha: Fixed-point fractional library routines. 35640 (line 923) 35641 * __fractqihq: Fixed-point fractional library routines. 35642 (line 920) 35643 * __fractqiqq: Fixed-point fractional library routines. 35644 (line 919) 35645 * __fractqisa: Fixed-point fractional library routines. 35646 (line 924) 35647 * __fractqisq: Fixed-point fractional library routines. 35648 (line 921) 35649 * __fractqita: Fixed-point fractional library routines. 35650 (line 926) 35651 * __fractqiuda: Fixed-point fractional library routines. 35652 (line 934) 35653 * __fractqiudq: Fixed-point fractional library routines. 35654 (line 931) 35655 * __fractqiuha: Fixed-point fractional library routines. 35656 (line 932) 35657 * __fractqiuhq: Fixed-point fractional library routines. 35658 (line 928) 35659 * __fractqiuqq: Fixed-point fractional library routines. 35660 (line 927) 35661 * __fractqiusa: Fixed-point fractional library routines. 35662 (line 933) 35663 * __fractqiusq: Fixed-point fractional library routines. 35664 (line 929) 35665 * __fractqiuta: Fixed-point fractional library routines. 35666 (line 936) 35667 * __fractqqda: Fixed-point fractional library routines. 35668 (line 474) 35669 * __fractqqdf: Fixed-point fractional library routines. 35670 (line 492) 35671 * __fractqqdi: Fixed-point fractional library routines. 35672 (line 489) 35673 * __fractqqdq2: Fixed-point fractional library routines. 35674 (line 471) 35675 * __fractqqha: Fixed-point fractional library routines. 35676 (line 472) 35677 * __fractqqhi: Fixed-point fractional library routines. 35678 (line 487) 35679 * __fractqqhq2: Fixed-point fractional library routines. 35680 (line 469) 35681 * __fractqqqi: Fixed-point fractional library routines. 35682 (line 486) 35683 * __fractqqsa: Fixed-point fractional library routines. 35684 (line 473) 35685 * __fractqqsf: Fixed-point fractional library routines. 35686 (line 491) 35687 * __fractqqsi: Fixed-point fractional library routines. 35688 (line 488) 35689 * __fractqqsq2: Fixed-point fractional library routines. 35690 (line 470) 35691 * __fractqqta: Fixed-point fractional library routines. 35692 (line 475) 35693 * __fractqqti: Fixed-point fractional library routines. 35694 (line 490) 35695 * __fractqquda: Fixed-point fractional library routines. 35696 (line 483) 35697 * __fractqqudq: Fixed-point fractional library routines. 35698 (line 480) 35699 * __fractqquha: Fixed-point fractional library routines. 35700 (line 481) 35701 * __fractqquhq: Fixed-point fractional library routines. 35702 (line 477) 35703 * __fractqquqq: Fixed-point fractional library routines. 35704 (line 476) 35705 * __fractqqusa: Fixed-point fractional library routines. 35706 (line 482) 35707 * __fractqqusq: Fixed-point fractional library routines. 35708 (line 478) 35709 * __fractqquta: Fixed-point fractional library routines. 35710 (line 485) 35711 * __fractsada2: Fixed-point fractional library routines. 35712 (line 596) 35713 * __fractsadf: Fixed-point fractional library routines. 35714 (line 612) 35715 * __fractsadi: Fixed-point fractional library routines. 35716 (line 609) 35717 * __fractsadq: Fixed-point fractional library routines. 35718 (line 594) 35719 * __fractsaha2: Fixed-point fractional library routines. 35720 (line 595) 35721 * __fractsahi: Fixed-point fractional library routines. 35722 (line 607) 35723 * __fractsahq: Fixed-point fractional library routines. 35724 (line 592) 35725 * __fractsaqi: Fixed-point fractional library routines. 35726 (line 606) 35727 * __fractsaqq: Fixed-point fractional library routines. 35728 (line 591) 35729 * __fractsasf: Fixed-point fractional library routines. 35730 (line 611) 35731 * __fractsasi: Fixed-point fractional library routines. 35732 (line 608) 35733 * __fractsasq: Fixed-point fractional library routines. 35734 (line 593) 35735 * __fractsata2: Fixed-point fractional library routines. 35736 (line 597) 35737 * __fractsati: Fixed-point fractional library routines. 35738 (line 610) 35739 * __fractsauda: Fixed-point fractional library routines. 35740 (line 604) 35741 * __fractsaudq: Fixed-point fractional library routines. 35742 (line 601) 35743 * __fractsauha: Fixed-point fractional library routines. 35744 (line 602) 35745 * __fractsauhq: Fixed-point fractional library routines. 35746 (line 599) 35747 * __fractsauqq: Fixed-point fractional library routines. 35748 (line 598) 35749 * __fractsausa: Fixed-point fractional library routines. 35750 (line 603) 35751 * __fractsausq: Fixed-point fractional library routines. 35752 (line 600) 35753 * __fractsauta: Fixed-point fractional library routines. 35754 (line 605) 35755 * __fractsfda: Fixed-point fractional library routines. 35756 (line 1009) 35757 * __fractsfdq: Fixed-point fractional library routines. 35758 (line 1006) 35759 * __fractsfha: Fixed-point fractional library routines. 35760 (line 1007) 35761 * __fractsfhq: Fixed-point fractional library routines. 35762 (line 1004) 35763 * __fractsfqq: Fixed-point fractional library routines. 35764 (line 1003) 35765 * __fractsfsa: Fixed-point fractional library routines. 35766 (line 1008) 35767 * __fractsfsq: Fixed-point fractional library routines. 35768 (line 1005) 35769 * __fractsfta: Fixed-point fractional library routines. 35770 (line 1010) 35771 * __fractsfuda: Fixed-point fractional library routines. 35772 (line 1017) 35773 * __fractsfudq: Fixed-point fractional library routines. 35774 (line 1014) 35775 * __fractsfuha: Fixed-point fractional library routines. 35776 (line 1015) 35777 * __fractsfuhq: Fixed-point fractional library routines. 35778 (line 1012) 35779 * __fractsfuqq: Fixed-point fractional library routines. 35780 (line 1011) 35781 * __fractsfusa: Fixed-point fractional library routines. 35782 (line 1016) 35783 * __fractsfusq: Fixed-point fractional library routines. 35784 (line 1013) 35785 * __fractsfuta: Fixed-point fractional library routines. 35786 (line 1018) 35787 * __fractsida: Fixed-point fractional library routines. 35788 (line 959) 35789 * __fractsidq: Fixed-point fractional library routines. 35790 (line 956) 35791 * __fractsiha: Fixed-point fractional library routines. 35792 (line 957) 35793 * __fractsihq: Fixed-point fractional library routines. 35794 (line 954) 35795 * __fractsiqq: Fixed-point fractional library routines. 35796 (line 953) 35797 * __fractsisa: Fixed-point fractional library routines. 35798 (line 958) 35799 * __fractsisq: Fixed-point fractional library routines. 35800 (line 955) 35801 * __fractsita: Fixed-point fractional library routines. 35802 (line 960) 35803 * __fractsiuda: Fixed-point fractional library routines. 35804 (line 967) 35805 * __fractsiudq: Fixed-point fractional library routines. 35806 (line 964) 35807 * __fractsiuha: Fixed-point fractional library routines. 35808 (line 965) 35809 * __fractsiuhq: Fixed-point fractional library routines. 35810 (line 962) 35811 * __fractsiuqq: Fixed-point fractional library routines. 35812 (line 961) 35813 * __fractsiusa: Fixed-point fractional library routines. 35814 (line 966) 35815 * __fractsiusq: Fixed-point fractional library routines. 35816 (line 963) 35817 * __fractsiuta: Fixed-point fractional library routines. 35818 (line 968) 35819 * __fractsqda: Fixed-point fractional library routines. 35820 (line 520) 35821 * __fractsqdf: Fixed-point fractional library routines. 35822 (line 538) 35823 * __fractsqdi: Fixed-point fractional library routines. 35824 (line 535) 35825 * __fractsqdq2: Fixed-point fractional library routines. 35826 (line 517) 35827 * __fractsqha: Fixed-point fractional library routines. 35828 (line 518) 35829 * __fractsqhi: Fixed-point fractional library routines. 35830 (line 533) 35831 * __fractsqhq2: Fixed-point fractional library routines. 35832 (line 516) 35833 * __fractsqqi: Fixed-point fractional library routines. 35834 (line 532) 35835 * __fractsqqq2: Fixed-point fractional library routines. 35836 (line 515) 35837 * __fractsqsa: Fixed-point fractional library routines. 35838 (line 519) 35839 * __fractsqsf: Fixed-point fractional library routines. 35840 (line 537) 35841 * __fractsqsi: Fixed-point fractional library routines. 35842 (line 534) 35843 * __fractsqta: Fixed-point fractional library routines. 35844 (line 521) 35845 * __fractsqti: Fixed-point fractional library routines. 35846 (line 536) 35847 * __fractsquda: Fixed-point fractional library routines. 35848 (line 529) 35849 * __fractsqudq: Fixed-point fractional library routines. 35850 (line 526) 35851 * __fractsquha: Fixed-point fractional library routines. 35852 (line 527) 35853 * __fractsquhq: Fixed-point fractional library routines. 35854 (line 523) 35855 * __fractsquqq: Fixed-point fractional library routines. 35856 (line 522) 35857 * __fractsqusa: Fixed-point fractional library routines. 35858 (line 528) 35859 * __fractsqusq: Fixed-point fractional library routines. 35860 (line 524) 35861 * __fractsquta: Fixed-point fractional library routines. 35862 (line 531) 35863 * __fracttada2: Fixed-point fractional library routines. 35864 (line 643) 35865 * __fracttadf: Fixed-point fractional library routines. 35866 (line 664) 35867 * __fracttadi: Fixed-point fractional library routines. 35868 (line 661) 35869 * __fracttadq: Fixed-point fractional library routines. 35870 (line 640) 35871 * __fracttaha2: Fixed-point fractional library routines. 35872 (line 641) 35873 * __fracttahi: Fixed-point fractional library routines. 35874 (line 659) 35875 * __fracttahq: Fixed-point fractional library routines. 35876 (line 638) 35877 * __fracttaqi: Fixed-point fractional library routines. 35878 (line 658) 35879 * __fracttaqq: Fixed-point fractional library routines. 35880 (line 637) 35881 * __fracttasa2: Fixed-point fractional library routines. 35882 (line 642) 35883 * __fracttasf: Fixed-point fractional library routines. 35884 (line 663) 35885 * __fracttasi: Fixed-point fractional library routines. 35886 (line 660) 35887 * __fracttasq: Fixed-point fractional library routines. 35888 (line 639) 35889 * __fracttati: Fixed-point fractional library routines. 35890 (line 662) 35891 * __fracttauda: Fixed-point fractional library routines. 35892 (line 655) 35893 * __fracttaudq: Fixed-point fractional library routines. 35894 (line 650) 35895 * __fracttauha: Fixed-point fractional library routines. 35896 (line 652) 35897 * __fracttauhq: Fixed-point fractional library routines. 35898 (line 646) 35899 * __fracttauqq: Fixed-point fractional library routines. 35900 (line 645) 35901 * __fracttausa: Fixed-point fractional library routines. 35902 (line 653) 35903 * __fracttausq: Fixed-point fractional library routines. 35904 (line 648) 35905 * __fracttauta: Fixed-point fractional library routines. 35906 (line 657) 35907 * __fracttida: Fixed-point fractional library routines. 35908 (line 991) 35909 * __fracttidq: Fixed-point fractional library routines. 35910 (line 988) 35911 * __fracttiha: Fixed-point fractional library routines. 35912 (line 989) 35913 * __fracttihq: Fixed-point fractional library routines. 35914 (line 986) 35915 * __fracttiqq: Fixed-point fractional library routines. 35916 (line 985) 35917 * __fracttisa: Fixed-point fractional library routines. 35918 (line 990) 35919 * __fracttisq: Fixed-point fractional library routines. 35920 (line 987) 35921 * __fracttita: Fixed-point fractional library routines. 35922 (line 992) 35923 * __fracttiuda: Fixed-point fractional library routines. 35924 (line 1000) 35925 * __fracttiudq: Fixed-point fractional library routines. 35926 (line 997) 35927 * __fracttiuha: Fixed-point fractional library routines. 35928 (line 998) 35929 * __fracttiuhq: Fixed-point fractional library routines. 35930 (line 994) 35931 * __fracttiuqq: Fixed-point fractional library routines. 35932 (line 993) 35933 * __fracttiusa: Fixed-point fractional library routines. 35934 (line 999) 35935 * __fracttiusq: Fixed-point fractional library routines. 35936 (line 995) 35937 * __fracttiuta: Fixed-point fractional library routines. 35938 (line 1002) 35939 * __fractudada: Fixed-point fractional library routines. 35940 (line 858) 35941 * __fractudadf: Fixed-point fractional library routines. 35942 (line 881) 35943 * __fractudadi: Fixed-point fractional library routines. 35944 (line 878) 35945 * __fractudadq: Fixed-point fractional library routines. 35946 (line 855) 35947 * __fractudaha: Fixed-point fractional library routines. 35948 (line 856) 35949 * __fractudahi: Fixed-point fractional library routines. 35950 (line 876) 35951 * __fractudahq: Fixed-point fractional library routines. 35952 (line 852) 35953 * __fractudaqi: Fixed-point fractional library routines. 35954 (line 875) 35955 * __fractudaqq: Fixed-point fractional library routines. 35956 (line 851) 35957 * __fractudasa: Fixed-point fractional library routines. 35958 (line 857) 35959 * __fractudasf: Fixed-point fractional library routines. 35960 (line 880) 35961 * __fractudasi: Fixed-point fractional library routines. 35962 (line 877) 35963 * __fractudasq: Fixed-point fractional library routines. 35964 (line 853) 35965 * __fractudata: Fixed-point fractional library routines. 35966 (line 860) 35967 * __fractudati: Fixed-point fractional library routines. 35968 (line 879) 35969 * __fractudaudq: Fixed-point fractional library routines. 35970 (line 868) 35971 * __fractudauha2: Fixed-point fractional library routines. 35972 (line 870) 35973 * __fractudauhq: Fixed-point fractional library routines. 35974 (line 864) 35975 * __fractudauqq: Fixed-point fractional library routines. 35976 (line 862) 35977 * __fractudausa2: Fixed-point fractional library routines. 35978 (line 872) 35979 * __fractudausq: Fixed-point fractional library routines. 35980 (line 866) 35981 * __fractudauta2: Fixed-point fractional library routines. 35982 (line 874) 35983 * __fractudqda: Fixed-point fractional library routines. 35984 (line 766) 35985 * __fractudqdf: Fixed-point fractional library routines. 35986 (line 791) 35987 * __fractudqdi: Fixed-point fractional library routines. 35988 (line 787) 35989 * __fractudqdq: Fixed-point fractional library routines. 35990 (line 761) 35991 * __fractudqha: Fixed-point fractional library routines. 35992 (line 763) 35993 * __fractudqhi: Fixed-point fractional library routines. 35994 (line 785) 35995 * __fractudqhq: Fixed-point fractional library routines. 35996 (line 757) 35997 * __fractudqqi: Fixed-point fractional library routines. 35998 (line 784) 35999 * __fractudqqq: Fixed-point fractional library routines. 36000 (line 756) 36001 * __fractudqsa: Fixed-point fractional library routines. 36002 (line 764) 36003 * __fractudqsf: Fixed-point fractional library routines. 36004 (line 790) 36005 * __fractudqsi: Fixed-point fractional library routines. 36006 (line 786) 36007 * __fractudqsq: Fixed-point fractional library routines. 36008 (line 759) 36009 * __fractudqta: Fixed-point fractional library routines. 36010 (line 768) 36011 * __fractudqti: Fixed-point fractional library routines. 36012 (line 789) 36013 * __fractudquda: Fixed-point fractional library routines. 36014 (line 780) 36015 * __fractudquha: Fixed-point fractional library routines. 36016 (line 776) 36017 * __fractudquhq2: Fixed-point fractional library routines. 36018 (line 772) 36019 * __fractudquqq2: Fixed-point fractional library routines. 36020 (line 770) 36021 * __fractudqusa: Fixed-point fractional library routines. 36022 (line 778) 36023 * __fractudqusq2: Fixed-point fractional library routines. 36024 (line 774) 36025 * __fractudquta: Fixed-point fractional library routines. 36026 (line 782) 36027 * __fractuhada: Fixed-point fractional library routines. 36028 (line 799) 36029 * __fractuhadf: Fixed-point fractional library routines. 36030 (line 822) 36031 * __fractuhadi: Fixed-point fractional library routines. 36032 (line 819) 36033 * __fractuhadq: Fixed-point fractional library routines. 36034 (line 796) 36035 * __fractuhaha: Fixed-point fractional library routines. 36036 (line 797) 36037 * __fractuhahi: Fixed-point fractional library routines. 36038 (line 817) 36039 * __fractuhahq: Fixed-point fractional library routines. 36040 (line 793) 36041 * __fractuhaqi: Fixed-point fractional library routines. 36042 (line 816) 36043 * __fractuhaqq: Fixed-point fractional library routines. 36044 (line 792) 36045 * __fractuhasa: Fixed-point fractional library routines. 36046 (line 798) 36047 * __fractuhasf: Fixed-point fractional library routines. 36048 (line 821) 36049 * __fractuhasi: Fixed-point fractional library routines. 36050 (line 818) 36051 * __fractuhasq: Fixed-point fractional library routines. 36052 (line 794) 36053 * __fractuhata: Fixed-point fractional library routines. 36054 (line 801) 36055 * __fractuhati: Fixed-point fractional library routines. 36056 (line 820) 36057 * __fractuhauda2: Fixed-point fractional library routines. 36058 (line 813) 36059 * __fractuhaudq: Fixed-point fractional library routines. 36060 (line 809) 36061 * __fractuhauhq: Fixed-point fractional library routines. 36062 (line 805) 36063 * __fractuhauqq: Fixed-point fractional library routines. 36064 (line 803) 36065 * __fractuhausa2: Fixed-point fractional library routines. 36066 (line 811) 36067 * __fractuhausq: Fixed-point fractional library routines. 36068 (line 807) 36069 * __fractuhauta2: Fixed-point fractional library routines. 36070 (line 815) 36071 * __fractuhqda: Fixed-point fractional library routines. 36072 (line 702) 36073 * __fractuhqdf: Fixed-point fractional library routines. 36074 (line 723) 36075 * __fractuhqdi: Fixed-point fractional library routines. 36076 (line 720) 36077 * __fractuhqdq: Fixed-point fractional library routines. 36078 (line 699) 36079 * __fractuhqha: Fixed-point fractional library routines. 36080 (line 700) 36081 * __fractuhqhi: Fixed-point fractional library routines. 36082 (line 718) 36083 * __fractuhqhq: Fixed-point fractional library routines. 36084 (line 697) 36085 * __fractuhqqi: Fixed-point fractional library routines. 36086 (line 717) 36087 * __fractuhqqq: Fixed-point fractional library routines. 36088 (line 696) 36089 * __fractuhqsa: Fixed-point fractional library routines. 36090 (line 701) 36091 * __fractuhqsf: Fixed-point fractional library routines. 36092 (line 722) 36093 * __fractuhqsi: Fixed-point fractional library routines. 36094 (line 719) 36095 * __fractuhqsq: Fixed-point fractional library routines. 36096 (line 698) 36097 * __fractuhqta: Fixed-point fractional library routines. 36098 (line 703) 36099 * __fractuhqti: Fixed-point fractional library routines. 36100 (line 721) 36101 * __fractuhquda: Fixed-point fractional library routines. 36102 (line 714) 36103 * __fractuhqudq2: Fixed-point fractional library routines. 36104 (line 709) 36105 * __fractuhquha: Fixed-point fractional library routines. 36106 (line 711) 36107 * __fractuhquqq2: Fixed-point fractional library routines. 36108 (line 705) 36109 * __fractuhqusa: Fixed-point fractional library routines. 36110 (line 712) 36111 * __fractuhqusq2: Fixed-point fractional library routines. 36112 (line 707) 36113 * __fractuhquta: Fixed-point fractional library routines. 36114 (line 716) 36115 * __fractunsdadi: Fixed-point fractional library routines. 36116 (line 1555) 36117 * __fractunsdahi: Fixed-point fractional library routines. 36118 (line 1553) 36119 * __fractunsdaqi: Fixed-point fractional library routines. 36120 (line 1552) 36121 * __fractunsdasi: Fixed-point fractional library routines. 36122 (line 1554) 36123 * __fractunsdati: Fixed-point fractional library routines. 36124 (line 1556) 36125 * __fractunsdida: Fixed-point fractional library routines. 36126 (line 1707) 36127 * __fractunsdidq: Fixed-point fractional library routines. 36128 (line 1704) 36129 * __fractunsdiha: Fixed-point fractional library routines. 36130 (line 1705) 36131 * __fractunsdihq: Fixed-point fractional library routines. 36132 (line 1702) 36133 * __fractunsdiqq: Fixed-point fractional library routines. 36134 (line 1701) 36135 * __fractunsdisa: Fixed-point fractional library routines. 36136 (line 1706) 36137 * __fractunsdisq: Fixed-point fractional library routines. 36138 (line 1703) 36139 * __fractunsdita: Fixed-point fractional library routines. 36140 (line 1708) 36141 * __fractunsdiuda: Fixed-point fractional library routines. 36142 (line 1720) 36143 * __fractunsdiudq: Fixed-point fractional library routines. 36144 (line 1715) 36145 * __fractunsdiuha: Fixed-point fractional library routines. 36146 (line 1717) 36147 * __fractunsdiuhq: Fixed-point fractional library routines. 36148 (line 1711) 36149 * __fractunsdiuqq: Fixed-point fractional library routines. 36150 (line 1710) 36151 * __fractunsdiusa: Fixed-point fractional library routines. 36152 (line 1718) 36153 * __fractunsdiusq: Fixed-point fractional library routines. 36154 (line 1713) 36155 * __fractunsdiuta: Fixed-point fractional library routines. 36156 (line 1722) 36157 * __fractunsdqdi: Fixed-point fractional library routines. 36158 (line 1539) 36159 * __fractunsdqhi: Fixed-point fractional library routines. 36160 (line 1537) 36161 * __fractunsdqqi: Fixed-point fractional library routines. 36162 (line 1536) 36163 * __fractunsdqsi: Fixed-point fractional library routines. 36164 (line 1538) 36165 * __fractunsdqti: Fixed-point fractional library routines. 36166 (line 1541) 36167 * __fractunshadi: Fixed-point fractional library routines. 36168 (line 1545) 36169 * __fractunshahi: Fixed-point fractional library routines. 36170 (line 1543) 36171 * __fractunshaqi: Fixed-point fractional library routines. 36172 (line 1542) 36173 * __fractunshasi: Fixed-point fractional library routines. 36174 (line 1544) 36175 * __fractunshati: Fixed-point fractional library routines. 36176 (line 1546) 36177 * __fractunshida: Fixed-point fractional library routines. 36178 (line 1663) 36179 * __fractunshidq: Fixed-point fractional library routines. 36180 (line 1660) 36181 * __fractunshiha: Fixed-point fractional library routines. 36182 (line 1661) 36183 * __fractunshihq: Fixed-point fractional library routines. 36184 (line 1658) 36185 * __fractunshiqq: Fixed-point fractional library routines. 36186 (line 1657) 36187 * __fractunshisa: Fixed-point fractional library routines. 36188 (line 1662) 36189 * __fractunshisq: Fixed-point fractional library routines. 36190 (line 1659) 36191 * __fractunshita: Fixed-point fractional library routines. 36192 (line 1664) 36193 * __fractunshiuda: Fixed-point fractional library routines. 36194 (line 1676) 36195 * __fractunshiudq: Fixed-point fractional library routines. 36196 (line 1671) 36197 * __fractunshiuha: Fixed-point fractional library routines. 36198 (line 1673) 36199 * __fractunshiuhq: Fixed-point fractional library routines. 36200 (line 1667) 36201 * __fractunshiuqq: Fixed-point fractional library routines. 36202 (line 1666) 36203 * __fractunshiusa: Fixed-point fractional library routines. 36204 (line 1674) 36205 * __fractunshiusq: Fixed-point fractional library routines. 36206 (line 1669) 36207 * __fractunshiuta: Fixed-point fractional library routines. 36208 (line 1678) 36209 * __fractunshqdi: Fixed-point fractional library routines. 36210 (line 1529) 36211 * __fractunshqhi: Fixed-point fractional library routines. 36212 (line 1527) 36213 * __fractunshqqi: Fixed-point fractional library routines. 36214 (line 1526) 36215 * __fractunshqsi: Fixed-point fractional library routines. 36216 (line 1528) 36217 * __fractunshqti: Fixed-point fractional library routines. 36218 (line 1530) 36219 * __fractunsqida: Fixed-point fractional library routines. 36220 (line 1641) 36221 * __fractunsqidq: Fixed-point fractional library routines. 36222 (line 1638) 36223 * __fractunsqiha: Fixed-point fractional library routines. 36224 (line 1639) 36225 * __fractunsqihq: Fixed-point fractional library routines. 36226 (line 1636) 36227 * __fractunsqiqq: Fixed-point fractional library routines. 36228 (line 1635) 36229 * __fractunsqisa: Fixed-point fractional library routines. 36230 (line 1640) 36231 * __fractunsqisq: Fixed-point fractional library routines. 36232 (line 1637) 36233 * __fractunsqita: Fixed-point fractional library routines. 36234 (line 1642) 36235 * __fractunsqiuda: Fixed-point fractional library routines. 36236 (line 1654) 36237 * __fractunsqiudq: Fixed-point fractional library routines. 36238 (line 1649) 36239 * __fractunsqiuha: Fixed-point fractional library routines. 36240 (line 1651) 36241 * __fractunsqiuhq: Fixed-point fractional library routines. 36242 (line 1645) 36243 * __fractunsqiuqq: Fixed-point fractional library routines. 36244 (line 1644) 36245 * __fractunsqiusa: Fixed-point fractional library routines. 36246 (line 1652) 36247 * __fractunsqiusq: Fixed-point fractional library routines. 36248 (line 1647) 36249 * __fractunsqiuta: Fixed-point fractional library routines. 36250 (line 1656) 36251 * __fractunsqqdi: Fixed-point fractional library routines. 36252 (line 1524) 36253 * __fractunsqqhi: Fixed-point fractional library routines. 36254 (line 1522) 36255 * __fractunsqqqi: Fixed-point fractional library routines. 36256 (line 1521) 36257 * __fractunsqqsi: Fixed-point fractional library routines. 36258 (line 1523) 36259 * __fractunsqqti: Fixed-point fractional library routines. 36260 (line 1525) 36261 * __fractunssadi: Fixed-point fractional library routines. 36262 (line 1550) 36263 * __fractunssahi: Fixed-point fractional library routines. 36264 (line 1548) 36265 * __fractunssaqi: Fixed-point fractional library routines. 36266 (line 1547) 36267 * __fractunssasi: Fixed-point fractional library routines. 36268 (line 1549) 36269 * __fractunssati: Fixed-point fractional library routines. 36270 (line 1551) 36271 * __fractunssida: Fixed-point fractional library routines. 36272 (line 1685) 36273 * __fractunssidq: Fixed-point fractional library routines. 36274 (line 1682) 36275 * __fractunssiha: Fixed-point fractional library routines. 36276 (line 1683) 36277 * __fractunssihq: Fixed-point fractional library routines. 36278 (line 1680) 36279 * __fractunssiqq: Fixed-point fractional library routines. 36280 (line 1679) 36281 * __fractunssisa: Fixed-point fractional library routines. 36282 (line 1684) 36283 * __fractunssisq: Fixed-point fractional library routines. 36284 (line 1681) 36285 * __fractunssita: Fixed-point fractional library routines. 36286 (line 1686) 36287 * __fractunssiuda: Fixed-point fractional library routines. 36288 (line 1698) 36289 * __fractunssiudq: Fixed-point fractional library routines. 36290 (line 1693) 36291 * __fractunssiuha: Fixed-point fractional library routines. 36292 (line 1695) 36293 * __fractunssiuhq: Fixed-point fractional library routines. 36294 (line 1689) 36295 * __fractunssiuqq: Fixed-point fractional library routines. 36296 (line 1688) 36297 * __fractunssiusa: Fixed-point fractional library routines. 36298 (line 1696) 36299 * __fractunssiusq: Fixed-point fractional library routines. 36300 (line 1691) 36301 * __fractunssiuta: Fixed-point fractional library routines. 36302 (line 1700) 36303 * __fractunssqdi: Fixed-point fractional library routines. 36304 (line 1534) 36305 * __fractunssqhi: Fixed-point fractional library routines. 36306 (line 1532) 36307 * __fractunssqqi: Fixed-point fractional library routines. 36308 (line 1531) 36309 * __fractunssqsi: Fixed-point fractional library routines. 36310 (line 1533) 36311 * __fractunssqti: Fixed-point fractional library routines. 36312 (line 1535) 36313 * __fractunstadi: Fixed-point fractional library routines. 36314 (line 1560) 36315 * __fractunstahi: Fixed-point fractional library routines. 36316 (line 1558) 36317 * __fractunstaqi: Fixed-point fractional library routines. 36318 (line 1557) 36319 * __fractunstasi: Fixed-point fractional library routines. 36320 (line 1559) 36321 * __fractunstati: Fixed-point fractional library routines. 36322 (line 1562) 36323 * __fractunstida: Fixed-point fractional library routines. 36324 (line 1730) 36325 * __fractunstidq: Fixed-point fractional library routines. 36326 (line 1727) 36327 * __fractunstiha: Fixed-point fractional library routines. 36328 (line 1728) 36329 * __fractunstihq: Fixed-point fractional library routines. 36330 (line 1724) 36331 * __fractunstiqq: Fixed-point fractional library routines. 36332 (line 1723) 36333 * __fractunstisa: Fixed-point fractional library routines. 36334 (line 1729) 36335 * __fractunstisq: Fixed-point fractional library routines. 36336 (line 1725) 36337 * __fractunstita: Fixed-point fractional library routines. 36338 (line 1732) 36339 * __fractunstiuda: Fixed-point fractional library routines. 36340 (line 1746) 36341 * __fractunstiudq: Fixed-point fractional library routines. 36342 (line 1740) 36343 * __fractunstiuha: Fixed-point fractional library routines. 36344 (line 1742) 36345 * __fractunstiuhq: Fixed-point fractional library routines. 36346 (line 1736) 36347 * __fractunstiuqq: Fixed-point fractional library routines. 36348 (line 1734) 36349 * __fractunstiusa: Fixed-point fractional library routines. 36350 (line 1744) 36351 * __fractunstiusq: Fixed-point fractional library routines. 36352 (line 1738) 36353 * __fractunstiuta: Fixed-point fractional library routines. 36354 (line 1748) 36355 * __fractunsudadi: Fixed-point fractional library routines. 36356 (line 1622) 36357 * __fractunsudahi: Fixed-point fractional library routines. 36358 (line 1618) 36359 * __fractunsudaqi: Fixed-point fractional library routines. 36360 (line 1616) 36361 * __fractunsudasi: Fixed-point fractional library routines. 36362 (line 1620) 36363 * __fractunsudati: Fixed-point fractional library routines. 36364 (line 1624) 36365 * __fractunsudqdi: Fixed-point fractional library routines. 36366 (line 1596) 36367 * __fractunsudqhi: Fixed-point fractional library routines. 36368 (line 1592) 36369 * __fractunsudqqi: Fixed-point fractional library routines. 36370 (line 1590) 36371 * __fractunsudqsi: Fixed-point fractional library routines. 36372 (line 1594) 36373 * __fractunsudqti: Fixed-point fractional library routines. 36374 (line 1598) 36375 * __fractunsuhadi: Fixed-point fractional library routines. 36376 (line 1606) 36377 * __fractunsuhahi: Fixed-point fractional library routines. 36378 (line 1602) 36379 * __fractunsuhaqi: Fixed-point fractional library routines. 36380 (line 1600) 36381 * __fractunsuhasi: Fixed-point fractional library routines. 36382 (line 1604) 36383 * __fractunsuhati: Fixed-point fractional library routines. 36384 (line 1608) 36385 * __fractunsuhqdi: Fixed-point fractional library routines. 36386 (line 1576) 36387 * __fractunsuhqhi: Fixed-point fractional library routines. 36388 (line 1574) 36389 * __fractunsuhqqi: Fixed-point fractional library routines. 36390 (line 1573) 36391 * __fractunsuhqsi: Fixed-point fractional library routines. 36392 (line 1575) 36393 * __fractunsuhqti: Fixed-point fractional library routines. 36394 (line 1578) 36395 * __fractunsuqqdi: Fixed-point fractional library routines. 36396 (line 1570) 36397 * __fractunsuqqhi: Fixed-point fractional library routines. 36398 (line 1566) 36399 * __fractunsuqqqi: Fixed-point fractional library routines. 36400 (line 1564) 36401 * __fractunsuqqsi: Fixed-point fractional library routines. 36402 (line 1568) 36403 * __fractunsuqqti: Fixed-point fractional library routines. 36404 (line 1572) 36405 * __fractunsusadi: Fixed-point fractional library routines. 36406 (line 1612) 36407 * __fractunsusahi: Fixed-point fractional library routines. 36408 (line 1610) 36409 * __fractunsusaqi: Fixed-point fractional library routines. 36410 (line 1609) 36411 * __fractunsusasi: Fixed-point fractional library routines. 36412 (line 1611) 36413 * __fractunsusati: Fixed-point fractional library routines. 36414 (line 1614) 36415 * __fractunsusqdi: Fixed-point fractional library routines. 36416 (line 1586) 36417 * __fractunsusqhi: Fixed-point fractional library routines. 36418 (line 1582) 36419 * __fractunsusqqi: Fixed-point fractional library routines. 36420 (line 1580) 36421 * __fractunsusqsi: Fixed-point fractional library routines. 36422 (line 1584) 36423 * __fractunsusqti: Fixed-point fractional library routines. 36424 (line 1588) 36425 * __fractunsutadi: Fixed-point fractional library routines. 36426 (line 1632) 36427 * __fractunsutahi: Fixed-point fractional library routines. 36428 (line 1628) 36429 * __fractunsutaqi: Fixed-point fractional library routines. 36430 (line 1626) 36431 * __fractunsutasi: Fixed-point fractional library routines. 36432 (line 1630) 36433 * __fractunsutati: Fixed-point fractional library routines. 36434 (line 1634) 36435 * __fractuqqda: Fixed-point fractional library routines. 36436 (line 672) 36437 * __fractuqqdf: Fixed-point fractional library routines. 36438 (line 695) 36439 * __fractuqqdi: Fixed-point fractional library routines. 36440 (line 692) 36441 * __fractuqqdq: Fixed-point fractional library routines. 36442 (line 669) 36443 * __fractuqqha: Fixed-point fractional library routines. 36444 (line 670) 36445 * __fractuqqhi: Fixed-point fractional library routines. 36446 (line 690) 36447 * __fractuqqhq: Fixed-point fractional library routines. 36448 (line 666) 36449 * __fractuqqqi: Fixed-point fractional library routines. 36450 (line 689) 36451 * __fractuqqqq: Fixed-point fractional library routines. 36452 (line 665) 36453 * __fractuqqsa: Fixed-point fractional library routines. 36454 (line 671) 36455 * __fractuqqsf: Fixed-point fractional library routines. 36456 (line 694) 36457 * __fractuqqsi: Fixed-point fractional library routines. 36458 (line 691) 36459 * __fractuqqsq: Fixed-point fractional library routines. 36460 (line 667) 36461 * __fractuqqta: Fixed-point fractional library routines. 36462 (line 674) 36463 * __fractuqqti: Fixed-point fractional library routines. 36464 (line 693) 36465 * __fractuqquda: Fixed-point fractional library routines. 36466 (line 686) 36467 * __fractuqqudq2: Fixed-point fractional library routines. 36468 (line 680) 36469 * __fractuqquha: Fixed-point fractional library routines. 36470 (line 682) 36471 * __fractuqquhq2: Fixed-point fractional library routines. 36472 (line 676) 36473 * __fractuqqusa: Fixed-point fractional library routines. 36474 (line 684) 36475 * __fractuqqusq2: Fixed-point fractional library routines. 36476 (line 678) 36477 * __fractuqquta: Fixed-point fractional library routines. 36478 (line 688) 36479 * __fractusada: Fixed-point fractional library routines. 36480 (line 829) 36481 * __fractusadf: Fixed-point fractional library routines. 36482 (line 850) 36483 * __fractusadi: Fixed-point fractional library routines. 36484 (line 847) 36485 * __fractusadq: Fixed-point fractional library routines. 36486 (line 826) 36487 * __fractusaha: Fixed-point fractional library routines. 36488 (line 827) 36489 * __fractusahi: Fixed-point fractional library routines. 36490 (line 845) 36491 * __fractusahq: Fixed-point fractional library routines. 36492 (line 824) 36493 * __fractusaqi: Fixed-point fractional library routines. 36494 (line 844) 36495 * __fractusaqq: Fixed-point fractional library routines. 36496 (line 823) 36497 * __fractusasa: Fixed-point fractional library routines. 36498 (line 828) 36499 * __fractusasf: Fixed-point fractional library routines. 36500 (line 849) 36501 * __fractusasi: Fixed-point fractional library routines. 36502 (line 846) 36503 * __fractusasq: Fixed-point fractional library routines. 36504 (line 825) 36505 * __fractusata: Fixed-point fractional library routines. 36506 (line 830) 36507 * __fractusati: Fixed-point fractional library routines. 36508 (line 848) 36509 * __fractusauda2: Fixed-point fractional library routines. 36510 (line 841) 36511 * __fractusaudq: Fixed-point fractional library routines. 36512 (line 837) 36513 * __fractusauha2: Fixed-point fractional library routines. 36514 (line 839) 36515 * __fractusauhq: Fixed-point fractional library routines. 36516 (line 833) 36517 * __fractusauqq: Fixed-point fractional library routines. 36518 (line 832) 36519 * __fractusausq: Fixed-point fractional library routines. 36520 (line 835) 36521 * __fractusauta2: Fixed-point fractional library routines. 36522 (line 843) 36523 * __fractusqda: Fixed-point fractional library routines. 36524 (line 731) 36525 * __fractusqdf: Fixed-point fractional library routines. 36526 (line 754) 36527 * __fractusqdi: Fixed-point fractional library routines. 36528 (line 751) 36529 * __fractusqdq: Fixed-point fractional library routines. 36530 (line 728) 36531 * __fractusqha: Fixed-point fractional library routines. 36532 (line 729) 36533 * __fractusqhi: Fixed-point fractional library routines. 36534 (line 749) 36535 * __fractusqhq: Fixed-point fractional library routines. 36536 (line 725) 36537 * __fractusqqi: Fixed-point fractional library routines. 36538 (line 748) 36539 * __fractusqqq: Fixed-point fractional library routines. 36540 (line 724) 36541 * __fractusqsa: Fixed-point fractional library routines. 36542 (line 730) 36543 * __fractusqsf: Fixed-point fractional library routines. 36544 (line 753) 36545 * __fractusqsi: Fixed-point fractional library routines. 36546 (line 750) 36547 * __fractusqsq: Fixed-point fractional library routines. 36548 (line 726) 36549 * __fractusqta: Fixed-point fractional library routines. 36550 (line 733) 36551 * __fractusqti: Fixed-point fractional library routines. 36552 (line 752) 36553 * __fractusquda: Fixed-point fractional library routines. 36554 (line 745) 36555 * __fractusqudq2: Fixed-point fractional library routines. 36556 (line 739) 36557 * __fractusquha: Fixed-point fractional library routines. 36558 (line 741) 36559 * __fractusquhq2: Fixed-point fractional library routines. 36560 (line 737) 36561 * __fractusquqq2: Fixed-point fractional library routines. 36562 (line 735) 36563 * __fractusqusa: Fixed-point fractional library routines. 36564 (line 743) 36565 * __fractusquta: Fixed-point fractional library routines. 36566 (line 747) 36567 * __fractutada: Fixed-point fractional library routines. 36568 (line 893) 36569 * __fractutadf: Fixed-point fractional library routines. 36570 (line 918) 36571 * __fractutadi: Fixed-point fractional library routines. 36572 (line 914) 36573 * __fractutadq: Fixed-point fractional library routines. 36574 (line 888) 36575 * __fractutaha: Fixed-point fractional library routines. 36576 (line 890) 36577 * __fractutahi: Fixed-point fractional library routines. 36578 (line 912) 36579 * __fractutahq: Fixed-point fractional library routines. 36580 (line 884) 36581 * __fractutaqi: Fixed-point fractional library routines. 36582 (line 911) 36583 * __fractutaqq: Fixed-point fractional library routines. 36584 (line 883) 36585 * __fractutasa: Fixed-point fractional library routines. 36586 (line 891) 36587 * __fractutasf: Fixed-point fractional library routines. 36588 (line 917) 36589 * __fractutasi: Fixed-point fractional library routines. 36590 (line 913) 36591 * __fractutasq: Fixed-point fractional library routines. 36592 (line 886) 36593 * __fractutata: Fixed-point fractional library routines. 36594 (line 895) 36595 * __fractutati: Fixed-point fractional library routines. 36596 (line 916) 36597 * __fractutauda2: Fixed-point fractional library routines. 36598 (line 909) 36599 * __fractutaudq: Fixed-point fractional library routines. 36600 (line 903) 36601 * __fractutauha2: Fixed-point fractional library routines. 36602 (line 905) 36603 * __fractutauhq: Fixed-point fractional library routines. 36604 (line 899) 36605 * __fractutauqq: Fixed-point fractional library routines. 36606 (line 897) 36607 * __fractutausa2: Fixed-point fractional library routines. 36608 (line 907) 36609 * __fractutausq: Fixed-point fractional library routines. 36610 (line 901) 36611 * __gedf2: Soft float library routines. 36612 (line 206) 36613 * __gesf2: Soft float library routines. 36614 (line 205) 36615 * __getf2: Soft float library routines. 36616 (line 207) 36617 * __gtdf2: Soft float library routines. 36618 (line 224) 36619 * __gtsf2: Soft float library routines. 36620 (line 223) 36621 * __gttf2: Soft float library routines. 36622 (line 225) 36623 * __ledf2: Soft float library routines. 36624 (line 218) 36625 * __lesf2: Soft float library routines. 36626 (line 217) 36627 * __letf2: Soft float library routines. 36628 (line 219) 36629 * __lshrdi3: Integer library routines. 36630 (line 31) 36631 * __lshrsi3: Integer library routines. 36632 (line 30) 36633 * __lshrti3: Integer library routines. 36634 (line 32) 36635 * __lshruda3: Fixed-point fractional library routines. 36636 (line 390) 36637 * __lshrudq3: Fixed-point fractional library routines. 36638 (line 384) 36639 * __lshruha3: Fixed-point fractional library routines. 36640 (line 386) 36641 * __lshruhq3: Fixed-point fractional library routines. 36642 (line 380) 36643 * __lshruqq3: Fixed-point fractional library routines. 36644 (line 378) 36645 * __lshrusa3: Fixed-point fractional library routines. 36646 (line 388) 36647 * __lshrusq3: Fixed-point fractional library routines. 36648 (line 382) 36649 * __lshruta3: Fixed-point fractional library routines. 36650 (line 392) 36651 * __ltdf2: Soft float library routines. 36652 (line 212) 36653 * __ltsf2: Soft float library routines. 36654 (line 211) 36655 * __lttf2: Soft float library routines. 36656 (line 213) 36657 * __main: Collect2. (line 15) 36658 * __moddi3: Integer library routines. 36659 (line 37) 36660 * __modsi3: Integer library routines. 36661 (line 36) 36662 * __modti3: Integer library routines. 36663 (line 38) 36664 * __mulda3: Fixed-point fractional library routines. 36665 (line 171) 36666 * __muldc3: Soft float library routines. 36667 (line 241) 36668 * __muldf3: Soft float library routines. 36669 (line 40) 36670 * __muldi3: Integer library routines. 36671 (line 43) 36672 * __muldq3: Fixed-point fractional library routines. 36673 (line 159) 36674 * __mulha3: Fixed-point fractional library routines. 36675 (line 169) 36676 * __mulhq3: Fixed-point fractional library routines. 36677 (line 156) 36678 * __mulqq3: Fixed-point fractional library routines. 36679 (line 155) 36680 * __mulsa3: Fixed-point fractional library routines. 36681 (line 170) 36682 * __mulsc3: Soft float library routines. 36683 (line 239) 36684 * __mulsf3: Soft float library routines. 36685 (line 39) 36686 * __mulsi3: Integer library routines. 36687 (line 42) 36688 * __mulsq3: Fixed-point fractional library routines. 36689 (line 157) 36690 * __multa3: Fixed-point fractional library routines. 36691 (line 173) 36692 * __multc3: Soft float library routines. 36693 (line 243) 36694 * __multf3: Soft float library routines. 36695 (line 42) 36696 * __multi3: Integer library routines. 36697 (line 44) 36698 * __muluda3: Fixed-point fractional library routines. 36699 (line 179) 36700 * __muludq3: Fixed-point fractional library routines. 36701 (line 167) 36702 * __muluha3: Fixed-point fractional library routines. 36703 (line 175) 36704 * __muluhq3: Fixed-point fractional library routines. 36705 (line 163) 36706 * __muluqq3: Fixed-point fractional library routines. 36707 (line 161) 36708 * __mulusa3: Fixed-point fractional library routines. 36709 (line 177) 36710 * __mulusq3: Fixed-point fractional library routines. 36711 (line 165) 36712 * __muluta3: Fixed-point fractional library routines. 36713 (line 181) 36714 * __mulvdi3: Integer library routines. 36715 (line 115) 36716 * __mulvsi3: Integer library routines. 36717 (line 114) 36718 * __mulxc3: Soft float library routines. 36719 (line 245) 36720 * __mulxf3: Soft float library routines. 36721 (line 44) 36722 * __nedf2: Soft float library routines. 36723 (line 200) 36724 * __negda2: Fixed-point fractional library routines. 36725 (line 299) 36726 * __negdf2: Soft float library routines. 36727 (line 56) 36728 * __negdi2: Integer library routines. 36729 (line 47) 36730 * __negdq2: Fixed-point fractional library routines. 36731 (line 289) 36732 * __negha2: Fixed-point fractional library routines. 36733 (line 297) 36734 * __neghq2: Fixed-point fractional library routines. 36735 (line 287) 36736 * __negqq2: Fixed-point fractional library routines. 36737 (line 286) 36738 * __negsa2: Fixed-point fractional library routines. 36739 (line 298) 36740 * __negsf2: Soft float library routines. 36741 (line 55) 36742 * __negsq2: Fixed-point fractional library routines. 36743 (line 288) 36744 * __negta2: Fixed-point fractional library routines. 36745 (line 300) 36746 * __negtf2: Soft float library routines. 36747 (line 57) 36748 * __negti2: Integer library routines. 36749 (line 48) 36750 * __neguda2: Fixed-point fractional library routines. 36751 (line 305) 36752 * __negudq2: Fixed-point fractional library routines. 36753 (line 296) 36754 * __neguha2: Fixed-point fractional library routines. 36755 (line 302) 36756 * __neguhq2: Fixed-point fractional library routines. 36757 (line 292) 36758 * __neguqq2: Fixed-point fractional library routines. 36759 (line 291) 36760 * __negusa2: Fixed-point fractional library routines. 36761 (line 303) 36762 * __negusq2: Fixed-point fractional library routines. 36763 (line 294) 36764 * __neguta2: Fixed-point fractional library routines. 36765 (line 307) 36766 * __negvdi2: Integer library routines. 36767 (line 119) 36768 * __negvsi2: Integer library routines. 36769 (line 118) 36770 * __negxf2: Soft float library routines. 36771 (line 58) 36772 * __nesf2: Soft float library routines. 36773 (line 199) 36774 * __netf2: Soft float library routines. 36775 (line 201) 36776 * __paritydi2: Integer library routines. 36777 (line 151) 36778 * __paritysi2: Integer library routines. 36779 (line 150) 36780 * __parityti2: Integer library routines. 36781 (line 152) 36782 * __popcountdi2: Integer library routines. 36783 (line 157) 36784 * __popcountsi2: Integer library routines. 36785 (line 156) 36786 * __popcountti2: Integer library routines. 36787 (line 158) 36788 * __powidf2: Soft float library routines. 36789 (line 233) 36790 * __powisf2: Soft float library routines. 36791 (line 232) 36792 * __powitf2: Soft float library routines. 36793 (line 234) 36794 * __powixf2: Soft float library routines. 36795 (line 235) 36796 * __satfractdadq: Fixed-point fractional library routines. 36797 (line 1153) 36798 * __satfractdaha2: Fixed-point fractional library routines. 36799 (line 1154) 36800 * __satfractdahq: Fixed-point fractional library routines. 36801 (line 1151) 36802 * __satfractdaqq: Fixed-point fractional library routines. 36803 (line 1150) 36804 * __satfractdasa2: Fixed-point fractional library routines. 36805 (line 1155) 36806 * __satfractdasq: Fixed-point fractional library routines. 36807 (line 1152) 36808 * __satfractdata2: Fixed-point fractional library routines. 36809 (line 1156) 36810 * __satfractdauda: Fixed-point fractional library routines. 36811 (line 1166) 36812 * __satfractdaudq: Fixed-point fractional library routines. 36813 (line 1162) 36814 * __satfractdauha: Fixed-point fractional library routines. 36815 (line 1164) 36816 * __satfractdauhq: Fixed-point fractional library routines. 36817 (line 1159) 36818 * __satfractdauqq: Fixed-point fractional library routines. 36819 (line 1158) 36820 * __satfractdausa: Fixed-point fractional library routines. 36821 (line 1165) 36822 * __satfractdausq: Fixed-point fractional library routines. 36823 (line 1160) 36824 * __satfractdauta: Fixed-point fractional library routines. 36825 (line 1168) 36826 * __satfractdfda: Fixed-point fractional library routines. 36827 (line 1506) 36828 * __satfractdfdq: Fixed-point fractional library routines. 36829 (line 1503) 36830 * __satfractdfha: Fixed-point fractional library routines. 36831 (line 1504) 36832 * __satfractdfhq: Fixed-point fractional library routines. 36833 (line 1501) 36834 * __satfractdfqq: Fixed-point fractional library routines. 36835 (line 1500) 36836 * __satfractdfsa: Fixed-point fractional library routines. 36837 (line 1505) 36838 * __satfractdfsq: Fixed-point fractional library routines. 36839 (line 1502) 36840 * __satfractdfta: Fixed-point fractional library routines. 36841 (line 1507) 36842 * __satfractdfuda: Fixed-point fractional library routines. 36843 (line 1515) 36844 * __satfractdfudq: Fixed-point fractional library routines. 36845 (line 1512) 36846 * __satfractdfuha: Fixed-point fractional library routines. 36847 (line 1513) 36848 * __satfractdfuhq: Fixed-point fractional library routines. 36849 (line 1509) 36850 * __satfractdfuqq: Fixed-point fractional library routines. 36851 (line 1508) 36852 * __satfractdfusa: Fixed-point fractional library routines. 36853 (line 1514) 36854 * __satfractdfusq: Fixed-point fractional library routines. 36855 (line 1510) 36856 * __satfractdfuta: Fixed-point fractional library routines. 36857 (line 1517) 36858 * __satfractdida: Fixed-point fractional library routines. 36859 (line 1456) 36860 * __satfractdidq: Fixed-point fractional library routines. 36861 (line 1453) 36862 * __satfractdiha: Fixed-point fractional library routines. 36863 (line 1454) 36864 * __satfractdihq: Fixed-point fractional library routines. 36865 (line 1451) 36866 * __satfractdiqq: Fixed-point fractional library routines. 36867 (line 1450) 36868 * __satfractdisa: Fixed-point fractional library routines. 36869 (line 1455) 36870 * __satfractdisq: Fixed-point fractional library routines. 36871 (line 1452) 36872 * __satfractdita: Fixed-point fractional library routines. 36873 (line 1457) 36874 * __satfractdiuda: Fixed-point fractional library routines. 36875 (line 1464) 36876 * __satfractdiudq: Fixed-point fractional library routines. 36877 (line 1461) 36878 * __satfractdiuha: Fixed-point fractional library routines. 36879 (line 1462) 36880 * __satfractdiuhq: Fixed-point fractional library routines. 36881 (line 1459) 36882 * __satfractdiuqq: Fixed-point fractional library routines. 36883 (line 1458) 36884 * __satfractdiusa: Fixed-point fractional library routines. 36885 (line 1463) 36886 * __satfractdiusq: Fixed-point fractional library routines. 36887 (line 1460) 36888 * __satfractdiuta: Fixed-point fractional library routines. 36889 (line 1465) 36890 * __satfractdqda: Fixed-point fractional library routines. 36891 (line 1098) 36892 * __satfractdqha: Fixed-point fractional library routines. 36893 (line 1096) 36894 * __satfractdqhq2: Fixed-point fractional library routines. 36895 (line 1094) 36896 * __satfractdqqq2: Fixed-point fractional library routines. 36897 (line 1093) 36898 * __satfractdqsa: Fixed-point fractional library routines. 36899 (line 1097) 36900 * __satfractdqsq2: Fixed-point fractional library routines. 36901 (line 1095) 36902 * __satfractdqta: Fixed-point fractional library routines. 36903 (line 1099) 36904 * __satfractdquda: Fixed-point fractional library routines. 36905 (line 1111) 36906 * __satfractdqudq: Fixed-point fractional library routines. 36907 (line 1106) 36908 * __satfractdquha: Fixed-point fractional library routines. 36909 (line 1108) 36910 * __satfractdquhq: Fixed-point fractional library routines. 36911 (line 1102) 36912 * __satfractdquqq: Fixed-point fractional library routines. 36913 (line 1101) 36914 * __satfractdqusa: Fixed-point fractional library routines. 36915 (line 1109) 36916 * __satfractdqusq: Fixed-point fractional library routines. 36917 (line 1104) 36918 * __satfractdquta: Fixed-point fractional library routines. 36919 (line 1113) 36920 * __satfracthada2: Fixed-point fractional library routines. 36921 (line 1119) 36922 * __satfracthadq: Fixed-point fractional library routines. 36923 (line 1117) 36924 * __satfracthahq: Fixed-point fractional library routines. 36925 (line 1115) 36926 * __satfracthaqq: Fixed-point fractional library routines. 36927 (line 1114) 36928 * __satfracthasa2: Fixed-point fractional library routines. 36929 (line 1118) 36930 * __satfracthasq: Fixed-point fractional library routines. 36931 (line 1116) 36932 * __satfracthata2: Fixed-point fractional library routines. 36933 (line 1120) 36934 * __satfracthauda: Fixed-point fractional library routines. 36935 (line 1132) 36936 * __satfracthaudq: Fixed-point fractional library routines. 36937 (line 1127) 36938 * __satfracthauha: Fixed-point fractional library routines. 36939 (line 1129) 36940 * __satfracthauhq: Fixed-point fractional library routines. 36941 (line 1123) 36942 * __satfracthauqq: Fixed-point fractional library routines. 36943 (line 1122) 36944 * __satfracthausa: Fixed-point fractional library routines. 36945 (line 1130) 36946 * __satfracthausq: Fixed-point fractional library routines. 36947 (line 1125) 36948 * __satfracthauta: Fixed-point fractional library routines. 36949 (line 1134) 36950 * __satfracthida: Fixed-point fractional library routines. 36951 (line 1424) 36952 * __satfracthidq: Fixed-point fractional library routines. 36953 (line 1421) 36954 * __satfracthiha: Fixed-point fractional library routines. 36955 (line 1422) 36956 * __satfracthihq: Fixed-point fractional library routines. 36957 (line 1419) 36958 * __satfracthiqq: Fixed-point fractional library routines. 36959 (line 1418) 36960 * __satfracthisa: Fixed-point fractional library routines. 36961 (line 1423) 36962 * __satfracthisq: Fixed-point fractional library routines. 36963 (line 1420) 36964 * __satfracthita: Fixed-point fractional library routines. 36965 (line 1425) 36966 * __satfracthiuda: Fixed-point fractional library routines. 36967 (line 1432) 36968 * __satfracthiudq: Fixed-point fractional library routines. 36969 (line 1429) 36970 * __satfracthiuha: Fixed-point fractional library routines. 36971 (line 1430) 36972 * __satfracthiuhq: Fixed-point fractional library routines. 36973 (line 1427) 36974 * __satfracthiuqq: Fixed-point fractional library routines. 36975 (line 1426) 36976 * __satfracthiusa: Fixed-point fractional library routines. 36977 (line 1431) 36978 * __satfracthiusq: Fixed-point fractional library routines. 36979 (line 1428) 36980 * __satfracthiuta: Fixed-point fractional library routines. 36981 (line 1433) 36982 * __satfracthqda: Fixed-point fractional library routines. 36983 (line 1064) 36984 * __satfracthqdq2: Fixed-point fractional library routines. 36985 (line 1061) 36986 * __satfracthqha: Fixed-point fractional library routines. 36987 (line 1062) 36988 * __satfracthqqq2: Fixed-point fractional library routines. 36989 (line 1059) 36990 * __satfracthqsa: Fixed-point fractional library routines. 36991 (line 1063) 36992 * __satfracthqsq2: Fixed-point fractional library routines. 36993 (line 1060) 36994 * __satfracthqta: Fixed-point fractional library routines. 36995 (line 1065) 36996 * __satfracthquda: Fixed-point fractional library routines. 36997 (line 1072) 36998 * __satfracthqudq: Fixed-point fractional library routines. 36999 (line 1069) 37000 * __satfracthquha: Fixed-point fractional library routines. 37001 (line 1070) 37002 * __satfracthquhq: Fixed-point fractional library routines. 37003 (line 1067) 37004 * __satfracthquqq: Fixed-point fractional library routines. 37005 (line 1066) 37006 * __satfracthqusa: Fixed-point fractional library routines. 37007 (line 1071) 37008 * __satfracthqusq: Fixed-point fractional library routines. 37009 (line 1068) 37010 * __satfracthquta: Fixed-point fractional library routines. 37011 (line 1073) 37012 * __satfractqida: Fixed-point fractional library routines. 37013 (line 1402) 37014 * __satfractqidq: Fixed-point fractional library routines. 37015 (line 1399) 37016 * __satfractqiha: Fixed-point fractional library routines. 37017 (line 1400) 37018 * __satfractqihq: Fixed-point fractional library routines. 37019 (line 1397) 37020 * __satfractqiqq: Fixed-point fractional library routines. 37021 (line 1396) 37022 * __satfractqisa: Fixed-point fractional library routines. 37023 (line 1401) 37024 * __satfractqisq: Fixed-point fractional library routines. 37025 (line 1398) 37026 * __satfractqita: Fixed-point fractional library routines. 37027 (line 1403) 37028 * __satfractqiuda: Fixed-point fractional library routines. 37029 (line 1415) 37030 * __satfractqiudq: Fixed-point fractional library routines. 37031 (line 1410) 37032 * __satfractqiuha: Fixed-point fractional library routines. 37033 (line 1412) 37034 * __satfractqiuhq: Fixed-point fractional library routines. 37035 (line 1406) 37036 * __satfractqiuqq: Fixed-point fractional library routines. 37037 (line 1405) 37038 * __satfractqiusa: Fixed-point fractional library routines. 37039 (line 1413) 37040 * __satfractqiusq: Fixed-point fractional library routines. 37041 (line 1408) 37042 * __satfractqiuta: Fixed-point fractional library routines. 37043 (line 1417) 37044 * __satfractqqda: Fixed-point fractional library routines. 37045 (line 1043) 37046 * __satfractqqdq2: Fixed-point fractional library routines. 37047 (line 1040) 37048 * __satfractqqha: Fixed-point fractional library routines. 37049 (line 1041) 37050 * __satfractqqhq2: Fixed-point fractional library routines. 37051 (line 1038) 37052 * __satfractqqsa: Fixed-point fractional library routines. 37053 (line 1042) 37054 * __satfractqqsq2: Fixed-point fractional library routines. 37055 (line 1039) 37056 * __satfractqqta: Fixed-point fractional library routines. 37057 (line 1044) 37058 * __satfractqquda: Fixed-point fractional library routines. 37059 (line 1056) 37060 * __satfractqqudq: Fixed-point fractional library routines. 37061 (line 1051) 37062 * __satfractqquha: Fixed-point fractional library routines. 37063 (line 1053) 37064 * __satfractqquhq: Fixed-point fractional library routines. 37065 (line 1047) 37066 * __satfractqquqq: Fixed-point fractional library routines. 37067 (line 1046) 37068 * __satfractqqusa: Fixed-point fractional library routines. 37069 (line 1054) 37070 * __satfractqqusq: Fixed-point fractional library routines. 37071 (line 1049) 37072 * __satfractqquta: Fixed-point fractional library routines. 37073 (line 1058) 37074 * __satfractsada2: Fixed-point fractional library routines. 37075 (line 1140) 37076 * __satfractsadq: Fixed-point fractional library routines. 37077 (line 1138) 37078 * __satfractsaha2: Fixed-point fractional library routines. 37079 (line 1139) 37080 * __satfractsahq: Fixed-point fractional library routines. 37081 (line 1136) 37082 * __satfractsaqq: Fixed-point fractional library routines. 37083 (line 1135) 37084 * __satfractsasq: Fixed-point fractional library routines. 37085 (line 1137) 37086 * __satfractsata2: Fixed-point fractional library routines. 37087 (line 1141) 37088 * __satfractsauda: Fixed-point fractional library routines. 37089 (line 1148) 37090 * __satfractsaudq: Fixed-point fractional library routines. 37091 (line 1145) 37092 * __satfractsauha: Fixed-point fractional library routines. 37093 (line 1146) 37094 * __satfractsauhq: Fixed-point fractional library routines. 37095 (line 1143) 37096 * __satfractsauqq: Fixed-point fractional library routines. 37097 (line 1142) 37098 * __satfractsausa: Fixed-point fractional library routines. 37099 (line 1147) 37100 * __satfractsausq: Fixed-point fractional library routines. 37101 (line 1144) 37102 * __satfractsauta: Fixed-point fractional library routines. 37103 (line 1149) 37104 * __satfractsfda: Fixed-point fractional library routines. 37105 (line 1490) 37106 * __satfractsfdq: Fixed-point fractional library routines. 37107 (line 1487) 37108 * __satfractsfha: Fixed-point fractional library routines. 37109 (line 1488) 37110 * __satfractsfhq: Fixed-point fractional library routines. 37111 (line 1485) 37112 * __satfractsfqq: Fixed-point fractional library routines. 37113 (line 1484) 37114 * __satfractsfsa: Fixed-point fractional library routines. 37115 (line 1489) 37116 * __satfractsfsq: Fixed-point fractional library routines. 37117 (line 1486) 37118 * __satfractsfta: Fixed-point fractional library routines. 37119 (line 1491) 37120 * __satfractsfuda: Fixed-point fractional library routines. 37121 (line 1498) 37122 * __satfractsfudq: Fixed-point fractional library routines. 37123 (line 1495) 37124 * __satfractsfuha: Fixed-point fractional library routines. 37125 (line 1496) 37126 * __satfractsfuhq: Fixed-point fractional library routines. 37127 (line 1493) 37128 * __satfractsfuqq: Fixed-point fractional library routines. 37129 (line 1492) 37130 * __satfractsfusa: Fixed-point fractional library routines. 37131 (line 1497) 37132 * __satfractsfusq: Fixed-point fractional library routines. 37133 (line 1494) 37134 * __satfractsfuta: Fixed-point fractional library routines. 37135 (line 1499) 37136 * __satfractsida: Fixed-point fractional library routines. 37137 (line 1440) 37138 * __satfractsidq: Fixed-point fractional library routines. 37139 (line 1437) 37140 * __satfractsiha: Fixed-point fractional library routines. 37141 (line 1438) 37142 * __satfractsihq: Fixed-point fractional library routines. 37143 (line 1435) 37144 * __satfractsiqq: Fixed-point fractional library routines. 37145 (line 1434) 37146 * __satfractsisa: Fixed-point fractional library routines. 37147 (line 1439) 37148 * __satfractsisq: Fixed-point fractional library routines. 37149 (line 1436) 37150 * __satfractsita: Fixed-point fractional library routines. 37151 (line 1441) 37152 * __satfractsiuda: Fixed-point fractional library routines. 37153 (line 1448) 37154 * __satfractsiudq: Fixed-point fractional library routines. 37155 (line 1445) 37156 * __satfractsiuha: Fixed-point fractional library routines. 37157 (line 1446) 37158 * __satfractsiuhq: Fixed-point fractional library routines. 37159 (line 1443) 37160 * __satfractsiuqq: Fixed-point fractional library routines. 37161 (line 1442) 37162 * __satfractsiusa: Fixed-point fractional library routines. 37163 (line 1447) 37164 * __satfractsiusq: Fixed-point fractional library routines. 37165 (line 1444) 37166 * __satfractsiuta: Fixed-point fractional library routines. 37167 (line 1449) 37168 * __satfractsqda: Fixed-point fractional library routines. 37169 (line 1079) 37170 * __satfractsqdq2: Fixed-point fractional library routines. 37171 (line 1076) 37172 * __satfractsqha: Fixed-point fractional library routines. 37173 (line 1077) 37174 * __satfractsqhq2: Fixed-point fractional library routines. 37175 (line 1075) 37176 * __satfractsqqq2: Fixed-point fractional library routines. 37177 (line 1074) 37178 * __satfractsqsa: Fixed-point fractional library routines. 37179 (line 1078) 37180 * __satfractsqta: Fixed-point fractional library routines. 37181 (line 1080) 37182 * __satfractsquda: Fixed-point fractional library routines. 37183 (line 1090) 37184 * __satfractsqudq: Fixed-point fractional library routines. 37185 (line 1086) 37186 * __satfractsquha: Fixed-point fractional library routines. 37187 (line 1088) 37188 * __satfractsquhq: Fixed-point fractional library routines. 37189 (line 1083) 37190 * __satfractsquqq: Fixed-point fractional library routines. 37191 (line 1082) 37192 * __satfractsqusa: Fixed-point fractional library routines. 37193 (line 1089) 37194 * __satfractsqusq: Fixed-point fractional library routines. 37195 (line 1084) 37196 * __satfractsquta: Fixed-point fractional library routines. 37197 (line 1092) 37198 * __satfracttada2: Fixed-point fractional library routines. 37199 (line 1175) 37200 * __satfracttadq: Fixed-point fractional library routines. 37201 (line 1172) 37202 * __satfracttaha2: Fixed-point fractional library routines. 37203 (line 1173) 37204 * __satfracttahq: Fixed-point fractional library routines. 37205 (line 1170) 37206 * __satfracttaqq: Fixed-point fractional library routines. 37207 (line 1169) 37208 * __satfracttasa2: Fixed-point fractional library routines. 37209 (line 1174) 37210 * __satfracttasq: Fixed-point fractional library routines. 37211 (line 1171) 37212 * __satfracttauda: Fixed-point fractional library routines. 37213 (line 1187) 37214 * __satfracttaudq: Fixed-point fractional library routines. 37215 (line 1182) 37216 * __satfracttauha: Fixed-point fractional library routines. 37217 (line 1184) 37218 * __satfracttauhq: Fixed-point fractional library routines. 37219 (line 1178) 37220 * __satfracttauqq: Fixed-point fractional library routines. 37221 (line 1177) 37222 * __satfracttausa: Fixed-point fractional library routines. 37223 (line 1185) 37224 * __satfracttausq: Fixed-point fractional library routines. 37225 (line 1180) 37226 * __satfracttauta: Fixed-point fractional library routines. 37227 (line 1189) 37228 * __satfracttida: Fixed-point fractional library routines. 37229 (line 1472) 37230 * __satfracttidq: Fixed-point fractional library routines. 37231 (line 1469) 37232 * __satfracttiha: Fixed-point fractional library routines. 37233 (line 1470) 37234 * __satfracttihq: Fixed-point fractional library routines. 37235 (line 1467) 37236 * __satfracttiqq: Fixed-point fractional library routines. 37237 (line 1466) 37238 * __satfracttisa: Fixed-point fractional library routines. 37239 (line 1471) 37240 * __satfracttisq: Fixed-point fractional library routines. 37241 (line 1468) 37242 * __satfracttita: Fixed-point fractional library routines. 37243 (line 1473) 37244 * __satfracttiuda: Fixed-point fractional library routines. 37245 (line 1481) 37246 * __satfracttiudq: Fixed-point fractional library routines. 37247 (line 1478) 37248 * __satfracttiuha: Fixed-point fractional library routines. 37249 (line 1479) 37250 * __satfracttiuhq: Fixed-point fractional library routines. 37251 (line 1475) 37252 * __satfracttiuqq: Fixed-point fractional library routines. 37253 (line 1474) 37254 * __satfracttiusa: Fixed-point fractional library routines. 37255 (line 1480) 37256 * __satfracttiusq: Fixed-point fractional library routines. 37257 (line 1476) 37258 * __satfracttiuta: Fixed-point fractional library routines. 37259 (line 1483) 37260 * __satfractudada: Fixed-point fractional library routines. 37261 (line 1351) 37262 * __satfractudadq: Fixed-point fractional library routines. 37263 (line 1347) 37264 * __satfractudaha: Fixed-point fractional library routines. 37265 (line 1349) 37266 * __satfractudahq: Fixed-point fractional library routines. 37267 (line 1344) 37268 * __satfractudaqq: Fixed-point fractional library routines. 37269 (line 1343) 37270 * __satfractudasa: Fixed-point fractional library routines. 37271 (line 1350) 37272 * __satfractudasq: Fixed-point fractional library routines. 37273 (line 1345) 37274 * __satfractudata: Fixed-point fractional library routines. 37275 (line 1353) 37276 * __satfractudaudq: Fixed-point fractional library routines. 37277 (line 1361) 37278 * __satfractudauha2: Fixed-point fractional library routines. 37279 (line 1363) 37280 * __satfractudauhq: Fixed-point fractional library routines. 37281 (line 1357) 37282 * __satfractudauqq: Fixed-point fractional library routines. 37283 (line 1355) 37284 * __satfractudausa2: Fixed-point fractional library routines. 37285 (line 1365) 37286 * __satfractudausq: Fixed-point fractional library routines. 37287 (line 1359) 37288 * __satfractudauta2: Fixed-point fractional library routines. 37289 (line 1367) 37290 * __satfractudqda: Fixed-point fractional library routines. 37291 (line 1276) 37292 * __satfractudqdq: Fixed-point fractional library routines. 37293 (line 1271) 37294 * __satfractudqha: Fixed-point fractional library routines. 37295 (line 1273) 37296 * __satfractudqhq: Fixed-point fractional library routines. 37297 (line 1267) 37298 * __satfractudqqq: Fixed-point fractional library routines. 37299 (line 1266) 37300 * __satfractudqsa: Fixed-point fractional library routines. 37301 (line 1274) 37302 * __satfractudqsq: Fixed-point fractional library routines. 37303 (line 1269) 37304 * __satfractudqta: Fixed-point fractional library routines. 37305 (line 1278) 37306 * __satfractudquda: Fixed-point fractional library routines. 37307 (line 1290) 37308 * __satfractudquha: Fixed-point fractional library routines. 37309 (line 1286) 37310 * __satfractudquhq2: Fixed-point fractional library routines. 37311 (line 1282) 37312 * __satfractudquqq2: Fixed-point fractional library routines. 37313 (line 1280) 37314 * __satfractudqusa: Fixed-point fractional library routines. 37315 (line 1288) 37316 * __satfractudqusq2: Fixed-point fractional library routines. 37317 (line 1284) 37318 * __satfractudquta: Fixed-point fractional library routines. 37319 (line 1292) 37320 * __satfractuhada: Fixed-point fractional library routines. 37321 (line 1304) 37322 * __satfractuhadq: Fixed-point fractional library routines. 37323 (line 1299) 37324 * __satfractuhaha: Fixed-point fractional library routines. 37325 (line 1301) 37326 * __satfractuhahq: Fixed-point fractional library routines. 37327 (line 1295) 37328 * __satfractuhaqq: Fixed-point fractional library routines. 37329 (line 1294) 37330 * __satfractuhasa: Fixed-point fractional library routines. 37331 (line 1302) 37332 * __satfractuhasq: Fixed-point fractional library routines. 37333 (line 1297) 37334 * __satfractuhata: Fixed-point fractional library routines. 37335 (line 1306) 37336 * __satfractuhauda2: Fixed-point fractional library routines. 37337 (line 1318) 37338 * __satfractuhaudq: Fixed-point fractional library routines. 37339 (line 1314) 37340 * __satfractuhauhq: Fixed-point fractional library routines. 37341 (line 1310) 37342 * __satfractuhauqq: Fixed-point fractional library routines. 37343 (line 1308) 37344 * __satfractuhausa2: Fixed-point fractional library routines. 37345 (line 1316) 37346 * __satfractuhausq: Fixed-point fractional library routines. 37347 (line 1312) 37348 * __satfractuhauta2: Fixed-point fractional library routines. 37349 (line 1320) 37350 * __satfractuhqda: Fixed-point fractional library routines. 37351 (line 1224) 37352 * __satfractuhqdq: Fixed-point fractional library routines. 37353 (line 1221) 37354 * __satfractuhqha: Fixed-point fractional library routines. 37355 (line 1222) 37356 * __satfractuhqhq: Fixed-point fractional library routines. 37357 (line 1219) 37358 * __satfractuhqqq: Fixed-point fractional library routines. 37359 (line 1218) 37360 * __satfractuhqsa: Fixed-point fractional library routines. 37361 (line 1223) 37362 * __satfractuhqsq: Fixed-point fractional library routines. 37363 (line 1220) 37364 * __satfractuhqta: Fixed-point fractional library routines. 37365 (line 1225) 37366 * __satfractuhquda: Fixed-point fractional library routines. 37367 (line 1236) 37368 * __satfractuhqudq2: Fixed-point fractional library routines. 37369 (line 1231) 37370 * __satfractuhquha: Fixed-point fractional library routines. 37371 (line 1233) 37372 * __satfractuhquqq2: Fixed-point fractional library routines. 37373 (line 1227) 37374 * __satfractuhqusa: Fixed-point fractional library routines. 37375 (line 1234) 37376 * __satfractuhqusq2: Fixed-point fractional library routines. 37377 (line 1229) 37378 * __satfractuhquta: Fixed-point fractional library routines. 37379 (line 1238) 37380 * __satfractunsdida: Fixed-point fractional library routines. 37381 (line 1834) 37382 * __satfractunsdidq: Fixed-point fractional library routines. 37383 (line 1831) 37384 * __satfractunsdiha: Fixed-point fractional library routines. 37385 (line 1832) 37386 * __satfractunsdihq: Fixed-point fractional library routines. 37387 (line 1828) 37388 * __satfractunsdiqq: Fixed-point fractional library routines. 37389 (line 1827) 37390 * __satfractunsdisa: Fixed-point fractional library routines. 37391 (line 1833) 37392 * __satfractunsdisq: Fixed-point fractional library routines. 37393 (line 1829) 37394 * __satfractunsdita: Fixed-point fractional library routines. 37395 (line 1836) 37396 * __satfractunsdiuda: Fixed-point fractional library routines. 37397 (line 1850) 37398 * __satfractunsdiudq: Fixed-point fractional library routines. 37399 (line 1844) 37400 * __satfractunsdiuha: Fixed-point fractional library routines. 37401 (line 1846) 37402 * __satfractunsdiuhq: Fixed-point fractional library routines. 37403 (line 1840) 37404 * __satfractunsdiuqq: Fixed-point fractional library routines. 37405 (line 1838) 37406 * __satfractunsdiusa: Fixed-point fractional library routines. 37407 (line 1848) 37408 * __satfractunsdiusq: Fixed-point fractional library routines. 37409 (line 1842) 37410 * __satfractunsdiuta: Fixed-point fractional library routines. 37411 (line 1852) 37412 * __satfractunshida: Fixed-point fractional library routines. 37413 (line 1786) 37414 * __satfractunshidq: Fixed-point fractional library routines. 37415 (line 1783) 37416 * __satfractunshiha: Fixed-point fractional library routines. 37417 (line 1784) 37418 * __satfractunshihq: Fixed-point fractional library routines. 37419 (line 1780) 37420 * __satfractunshiqq: Fixed-point fractional library routines. 37421 (line 1779) 37422 * __satfractunshisa: Fixed-point fractional library routines. 37423 (line 1785) 37424 * __satfractunshisq: Fixed-point fractional library routines. 37425 (line 1781) 37426 * __satfractunshita: Fixed-point fractional library routines. 37427 (line 1788) 37428 * __satfractunshiuda: Fixed-point fractional library routines. 37429 (line 1802) 37430 * __satfractunshiudq: Fixed-point fractional library routines. 37431 (line 1796) 37432 * __satfractunshiuha: Fixed-point fractional library routines. 37433 (line 1798) 37434 * __satfractunshiuhq: Fixed-point fractional library routines. 37435 (line 1792) 37436 * __satfractunshiuqq: Fixed-point fractional library routines. 37437 (line 1790) 37438 * __satfractunshiusa: Fixed-point fractional library routines. 37439 (line 1800) 37440 * __satfractunshiusq: Fixed-point fractional library routines. 37441 (line 1794) 37442 * __satfractunshiuta: Fixed-point fractional library routines. 37443 (line 1804) 37444 * __satfractunsqida: Fixed-point fractional library routines. 37445 (line 1760) 37446 * __satfractunsqidq: Fixed-point fractional library routines. 37447 (line 1757) 37448 * __satfractunsqiha: Fixed-point fractional library routines. 37449 (line 1758) 37450 * __satfractunsqihq: Fixed-point fractional library routines. 37451 (line 1754) 37452 * __satfractunsqiqq: Fixed-point fractional library routines. 37453 (line 1753) 37454 * __satfractunsqisa: Fixed-point fractional library routines. 37455 (line 1759) 37456 * __satfractunsqisq: Fixed-point fractional library routines. 37457 (line 1755) 37458 * __satfractunsqita: Fixed-point fractional library routines. 37459 (line 1762) 37460 * __satfractunsqiuda: Fixed-point fractional library routines. 37461 (line 1776) 37462 * __satfractunsqiudq: Fixed-point fractional library routines. 37463 (line 1770) 37464 * __satfractunsqiuha: Fixed-point fractional library routines. 37465 (line 1772) 37466 * __satfractunsqiuhq: Fixed-point fractional library routines. 37467 (line 1766) 37468 * __satfractunsqiuqq: Fixed-point fractional library routines. 37469 (line 1764) 37470 * __satfractunsqiusa: Fixed-point fractional library routines. 37471 (line 1774) 37472 * __satfractunsqiusq: Fixed-point fractional library routines. 37473 (line 1768) 37474 * __satfractunsqiuta: Fixed-point fractional library routines. 37475 (line 1778) 37476 * __satfractunssida: Fixed-point fractional library routines. 37477 (line 1811) 37478 * __satfractunssidq: Fixed-point fractional library routines. 37479 (line 1808) 37480 * __satfractunssiha: Fixed-point fractional library routines. 37481 (line 1809) 37482 * __satfractunssihq: Fixed-point fractional library routines. 37483 (line 1806) 37484 * __satfractunssiqq: Fixed-point fractional library routines. 37485 (line 1805) 37486 * __satfractunssisa: Fixed-point fractional library routines. 37487 (line 1810) 37488 * __satfractunssisq: Fixed-point fractional library routines. 37489 (line 1807) 37490 * __satfractunssita: Fixed-point fractional library routines. 37491 (line 1812) 37492 * __satfractunssiuda: Fixed-point fractional library routines. 37493 (line 1824) 37494 * __satfractunssiudq: Fixed-point fractional library routines. 37495 (line 1819) 37496 * __satfractunssiuha: Fixed-point fractional library routines. 37497 (line 1821) 37498 * __satfractunssiuhq: Fixed-point fractional library routines. 37499 (line 1815) 37500 * __satfractunssiuqq: Fixed-point fractional library routines. 37501 (line 1814) 37502 * __satfractunssiusa: Fixed-point fractional library routines. 37503 (line 1822) 37504 * __satfractunssiusq: Fixed-point fractional library routines. 37505 (line 1817) 37506 * __satfractunssiuta: Fixed-point fractional library routines. 37507 (line 1826) 37508 * __satfractunstida: Fixed-point fractional library routines. 37509 (line 1864) 37510 * __satfractunstidq: Fixed-point fractional library routines. 37511 (line 1859) 37512 * __satfractunstiha: Fixed-point fractional library routines. 37513 (line 1861) 37514 * __satfractunstihq: Fixed-point fractional library routines. 37515 (line 1855) 37516 * __satfractunstiqq: Fixed-point fractional library routines. 37517 (line 1854) 37518 * __satfractunstisa: Fixed-point fractional library routines. 37519 (line 1862) 37520 * __satfractunstisq: Fixed-point fractional library routines. 37521 (line 1857) 37522 * __satfractunstita: Fixed-point fractional library routines. 37523 (line 1866) 37524 * __satfractunstiuda: Fixed-point fractional library routines. 37525 (line 1880) 37526 * __satfractunstiudq: Fixed-point fractional library routines. 37527 (line 1874) 37528 * __satfractunstiuha: Fixed-point fractional library routines. 37529 (line 1876) 37530 * __satfractunstiuhq: Fixed-point fractional library routines. 37531 (line 1870) 37532 * __satfractunstiuqq: Fixed-point fractional library routines. 37533 (line 1868) 37534 * __satfractunstiusa: Fixed-point fractional library routines. 37535 (line 1878) 37536 * __satfractunstiusq: Fixed-point fractional library routines. 37537 (line 1872) 37538 * __satfractunstiuta: Fixed-point fractional library routines. 37539 (line 1882) 37540 * __satfractuqqda: Fixed-point fractional library routines. 37541 (line 1201) 37542 * __satfractuqqdq: Fixed-point fractional library routines. 37543 (line 1196) 37544 * __satfractuqqha: Fixed-point fractional library routines. 37545 (line 1198) 37546 * __satfractuqqhq: Fixed-point fractional library routines. 37547 (line 1192) 37548 * __satfractuqqqq: Fixed-point fractional library routines. 37549 (line 1191) 37550 * __satfractuqqsa: Fixed-point fractional library routines. 37551 (line 1199) 37552 * __satfractuqqsq: Fixed-point fractional library routines. 37553 (line 1194) 37554 * __satfractuqqta: Fixed-point fractional library routines. 37555 (line 1203) 37556 * __satfractuqquda: Fixed-point fractional library routines. 37557 (line 1215) 37558 * __satfractuqqudq2: Fixed-point fractional library routines. 37559 (line 1209) 37560 * __satfractuqquha: Fixed-point fractional library routines. 37561 (line 1211) 37562 * __satfractuqquhq2: Fixed-point fractional library routines. 37563 (line 1205) 37564 * __satfractuqqusa: Fixed-point fractional library routines. 37565 (line 1213) 37566 * __satfractuqqusq2: Fixed-point fractional library routines. 37567 (line 1207) 37568 * __satfractuqquta: Fixed-point fractional library routines. 37569 (line 1217) 37570 * __satfractusada: Fixed-point fractional library routines. 37571 (line 1327) 37572 * __satfractusadq: Fixed-point fractional library routines. 37573 (line 1324) 37574 * __satfractusaha: Fixed-point fractional library routines. 37575 (line 1325) 37576 * __satfractusahq: Fixed-point fractional library routines. 37577 (line 1322) 37578 * __satfractusaqq: Fixed-point fractional library routines. 37579 (line 1321) 37580 * __satfractusasa: Fixed-point fractional library routines. 37581 (line 1326) 37582 * __satfractusasq: Fixed-point fractional library routines. 37583 (line 1323) 37584 * __satfractusata: Fixed-point fractional library routines. 37585 (line 1328) 37586 * __satfractusauda2: Fixed-point fractional library routines. 37587 (line 1339) 37588 * __satfractusaudq: Fixed-point fractional library routines. 37589 (line 1335) 37590 * __satfractusauha2: Fixed-point fractional library routines. 37591 (line 1337) 37592 * __satfractusauhq: Fixed-point fractional library routines. 37593 (line 1331) 37594 * __satfractusauqq: Fixed-point fractional library routines. 37595 (line 1330) 37596 * __satfractusausq: Fixed-point fractional library routines. 37597 (line 1333) 37598 * __satfractusauta2: Fixed-point fractional library routines. 37599 (line 1341) 37600 * __satfractusqda: Fixed-point fractional library routines. 37601 (line 1248) 37602 * __satfractusqdq: Fixed-point fractional library routines. 37603 (line 1244) 37604 * __satfractusqha: Fixed-point fractional library routines. 37605 (line 1246) 37606 * __satfractusqhq: Fixed-point fractional library routines. 37607 (line 1241) 37608 * __satfractusqqq: Fixed-point fractional library routines. 37609 (line 1240) 37610 * __satfractusqsa: Fixed-point fractional library routines. 37611 (line 1247) 37612 * __satfractusqsq: Fixed-point fractional library routines. 37613 (line 1242) 37614 * __satfractusqta: Fixed-point fractional library routines. 37615 (line 1250) 37616 * __satfractusquda: Fixed-point fractional library routines. 37617 (line 1262) 37618 * __satfractusqudq2: Fixed-point fractional library routines. 37619 (line 1256) 37620 * __satfractusquha: Fixed-point fractional library routines. 37621 (line 1258) 37622 * __satfractusquhq2: Fixed-point fractional library routines. 37623 (line 1254) 37624 * __satfractusquqq2: Fixed-point fractional library routines. 37625 (line 1252) 37626 * __satfractusqusa: Fixed-point fractional library routines. 37627 (line 1260) 37628 * __satfractusquta: Fixed-point fractional library routines. 37629 (line 1264) 37630 * __satfractutada: Fixed-point fractional library routines. 37631 (line 1379) 37632 * __satfractutadq: Fixed-point fractional library routines. 37633 (line 1374) 37634 * __satfractutaha: Fixed-point fractional library routines. 37635 (line 1376) 37636 * __satfractutahq: Fixed-point fractional library routines. 37637 (line 1370) 37638 * __satfractutaqq: Fixed-point fractional library routines. 37639 (line 1369) 37640 * __satfractutasa: Fixed-point fractional library routines. 37641 (line 1377) 37642 * __satfractutasq: Fixed-point fractional library routines. 37643 (line 1372) 37644 * __satfractutata: Fixed-point fractional library routines. 37645 (line 1381) 37646 * __satfractutauda2: Fixed-point fractional library routines. 37647 (line 1395) 37648 * __satfractutaudq: Fixed-point fractional library routines. 37649 (line 1389) 37650 * __satfractutauha2: Fixed-point fractional library routines. 37651 (line 1391) 37652 * __satfractutauhq: Fixed-point fractional library routines. 37653 (line 1385) 37654 * __satfractutauqq: Fixed-point fractional library routines. 37655 (line 1383) 37656 * __satfractutausa2: Fixed-point fractional library routines. 37657 (line 1393) 37658 * __satfractutausq: Fixed-point fractional library routines. 37659 (line 1387) 37660 * __ssaddda3: Fixed-point fractional library routines. 37661 (line 67) 37662 * __ssadddq3: Fixed-point fractional library routines. 37663 (line 63) 37664 * __ssaddha3: Fixed-point fractional library routines. 37665 (line 65) 37666 * __ssaddhq3: Fixed-point fractional library routines. 37667 (line 60) 37668 * __ssaddqq3: Fixed-point fractional library routines. 37669 (line 59) 37670 * __ssaddsa3: Fixed-point fractional library routines. 37671 (line 66) 37672 * __ssaddsq3: Fixed-point fractional library routines. 37673 (line 61) 37674 * __ssaddta3: Fixed-point fractional library routines. 37675 (line 69) 37676 * __ssashlda3: Fixed-point fractional library routines. 37677 (line 402) 37678 * __ssashldq3: Fixed-point fractional library routines. 37679 (line 399) 37680 * __ssashlha3: Fixed-point fractional library routines. 37681 (line 400) 37682 * __ssashlhq3: Fixed-point fractional library routines. 37683 (line 396) 37684 * __ssashlsa3: Fixed-point fractional library routines. 37685 (line 401) 37686 * __ssashlsq3: Fixed-point fractional library routines. 37687 (line 397) 37688 * __ssashlta3: Fixed-point fractional library routines. 37689 (line 404) 37690 * __ssdivda3: Fixed-point fractional library routines. 37691 (line 261) 37692 * __ssdivdq3: Fixed-point fractional library routines. 37693 (line 257) 37694 * __ssdivha3: Fixed-point fractional library routines. 37695 (line 259) 37696 * __ssdivhq3: Fixed-point fractional library routines. 37697 (line 254) 37698 * __ssdivqq3: Fixed-point fractional library routines. 37699 (line 253) 37700 * __ssdivsa3: Fixed-point fractional library routines. 37701 (line 260) 37702 * __ssdivsq3: Fixed-point fractional library routines. 37703 (line 255) 37704 * __ssdivta3: Fixed-point fractional library routines. 37705 (line 263) 37706 * __ssmulda3: Fixed-point fractional library routines. 37707 (line 193) 37708 * __ssmuldq3: Fixed-point fractional library routines. 37709 (line 189) 37710 * __ssmulha3: Fixed-point fractional library routines. 37711 (line 191) 37712 * __ssmulhq3: Fixed-point fractional library routines. 37713 (line 186) 37714 * __ssmulqq3: Fixed-point fractional library routines. 37715 (line 185) 37716 * __ssmulsa3: Fixed-point fractional library routines. 37717 (line 192) 37718 * __ssmulsq3: Fixed-point fractional library routines. 37719 (line 187) 37720 * __ssmulta3: Fixed-point fractional library routines. 37721 (line 195) 37722 * __ssnegda2: Fixed-point fractional library routines. 37723 (line 316) 37724 * __ssnegdq2: Fixed-point fractional library routines. 37725 (line 313) 37726 * __ssnegha2: Fixed-point fractional library routines. 37727 (line 314) 37728 * __ssneghq2: Fixed-point fractional library routines. 37729 (line 311) 37730 * __ssnegqq2: Fixed-point fractional library routines. 37731 (line 310) 37732 * __ssnegsa2: Fixed-point fractional library routines. 37733 (line 315) 37734 * __ssnegsq2: Fixed-point fractional library routines. 37735 (line 312) 37736 * __ssnegta2: Fixed-point fractional library routines. 37737 (line 317) 37738 * __sssubda3: Fixed-point fractional library routines. 37739 (line 129) 37740 * __sssubdq3: Fixed-point fractional library routines. 37741 (line 125) 37742 * __sssubha3: Fixed-point fractional library routines. 37743 (line 127) 37744 * __sssubhq3: Fixed-point fractional library routines. 37745 (line 122) 37746 * __sssubqq3: Fixed-point fractional library routines. 37747 (line 121) 37748 * __sssubsa3: Fixed-point fractional library routines. 37749 (line 128) 37750 * __sssubsq3: Fixed-point fractional library routines. 37751 (line 123) 37752 * __sssubta3: Fixed-point fractional library routines. 37753 (line 131) 37754 * __subda3: Fixed-point fractional library routines. 37755 (line 107) 37756 * __subdf3: Soft float library routines. 37757 (line 31) 37758 * __subdq3: Fixed-point fractional library routines. 37759 (line 95) 37760 * __subha3: Fixed-point fractional library routines. 37761 (line 105) 37762 * __subhq3: Fixed-point fractional library routines. 37763 (line 92) 37764 * __subqq3: Fixed-point fractional library routines. 37765 (line 91) 37766 * __subsa3: Fixed-point fractional library routines. 37767 (line 106) 37768 * __subsf3: Soft float library routines. 37769 (line 30) 37770 * __subsq3: Fixed-point fractional library routines. 37771 (line 93) 37772 * __subta3: Fixed-point fractional library routines. 37773 (line 109) 37774 * __subtf3: Soft float library routines. 37775 (line 33) 37776 * __subuda3: Fixed-point fractional library routines. 37777 (line 115) 37778 * __subudq3: Fixed-point fractional library routines. 37779 (line 103) 37780 * __subuha3: Fixed-point fractional library routines. 37781 (line 111) 37782 * __subuhq3: Fixed-point fractional library routines. 37783 (line 99) 37784 * __subuqq3: Fixed-point fractional library routines. 37785 (line 97) 37786 * __subusa3: Fixed-point fractional library routines. 37787 (line 113) 37788 * __subusq3: Fixed-point fractional library routines. 37789 (line 101) 37790 * __subuta3: Fixed-point fractional library routines. 37791 (line 117) 37792 * __subvdi3: Integer library routines. 37793 (line 123) 37794 * __subvsi3: Integer library routines. 37795 (line 122) 37796 * __subxf3: Soft float library routines. 37797 (line 35) 37798 * __truncdfsf2: Soft float library routines. 37799 (line 76) 37800 * __trunctfdf2: Soft float library routines. 37801 (line 73) 37802 * __trunctfsf2: Soft float library routines. 37803 (line 75) 37804 * __truncxfdf2: Soft float library routines. 37805 (line 72) 37806 * __truncxfsf2: Soft float library routines. 37807 (line 74) 37808 * __ucmpdi2: Integer library routines. 37809 (line 93) 37810 * __ucmpti2: Integer library routines. 37811 (line 95) 37812 * __udivdi3: Integer library routines. 37813 (line 54) 37814 * __udivmoddi3: Integer library routines. 37815 (line 61) 37816 * __udivsi3: Integer library routines. 37817 (line 52) 37818 * __udivti3: Integer library routines. 37819 (line 56) 37820 * __udivuda3: Fixed-point fractional library routines. 37821 (line 246) 37822 * __udivudq3: Fixed-point fractional library routines. 37823 (line 240) 37824 * __udivuha3: Fixed-point fractional library routines. 37825 (line 242) 37826 * __udivuhq3: Fixed-point fractional library routines. 37827 (line 236) 37828 * __udivuqq3: Fixed-point fractional library routines. 37829 (line 234) 37830 * __udivusa3: Fixed-point fractional library routines. 37831 (line 244) 37832 * __udivusq3: Fixed-point fractional library routines. 37833 (line 238) 37834 * __udivuta3: Fixed-point fractional library routines. 37835 (line 248) 37836 * __umoddi3: Integer library routines. 37837 (line 71) 37838 * __umodsi3: Integer library routines. 37839 (line 69) 37840 * __umodti3: Integer library routines. 37841 (line 73) 37842 * __unorddf2: Soft float library routines. 37843 (line 173) 37844 * __unordsf2: Soft float library routines. 37845 (line 172) 37846 * __unordtf2: Soft float library routines. 37847 (line 174) 37848 * __usadduda3: Fixed-point fractional library routines. 37849 (line 85) 37850 * __usaddudq3: Fixed-point fractional library routines. 37851 (line 79) 37852 * __usadduha3: Fixed-point fractional library routines. 37853 (line 81) 37854 * __usadduhq3: Fixed-point fractional library routines. 37855 (line 75) 37856 * __usadduqq3: Fixed-point fractional library routines. 37857 (line 73) 37858 * __usaddusa3: Fixed-point fractional library routines. 37859 (line 83) 37860 * __usaddusq3: Fixed-point fractional library routines. 37861 (line 77) 37862 * __usadduta3: Fixed-point fractional library routines. 37863 (line 87) 37864 * __usashluda3: Fixed-point fractional library routines. 37865 (line 421) 37866 * __usashludq3: Fixed-point fractional library routines. 37867 (line 415) 37868 * __usashluha3: Fixed-point fractional library routines. 37869 (line 417) 37870 * __usashluhq3: Fixed-point fractional library routines. 37871 (line 411) 37872 * __usashluqq3: Fixed-point fractional library routines. 37873 (line 409) 37874 * __usashlusa3: Fixed-point fractional library routines. 37875 (line 419) 37876 * __usashlusq3: Fixed-point fractional library routines. 37877 (line 413) 37878 * __usashluta3: Fixed-point fractional library routines. 37879 (line 423) 37880 * __usdivuda3: Fixed-point fractional library routines. 37881 (line 280) 37882 * __usdivudq3: Fixed-point fractional library routines. 37883 (line 274) 37884 * __usdivuha3: Fixed-point fractional library routines. 37885 (line 276) 37886 * __usdivuhq3: Fixed-point fractional library routines. 37887 (line 270) 37888 * __usdivuqq3: Fixed-point fractional library routines. 37889 (line 268) 37890 * __usdivusa3: Fixed-point fractional library routines. 37891 (line 278) 37892 * __usdivusq3: Fixed-point fractional library routines. 37893 (line 272) 37894 * __usdivuta3: Fixed-point fractional library routines. 37895 (line 282) 37896 * __usmuluda3: Fixed-point fractional library routines. 37897 (line 212) 37898 * __usmuludq3: Fixed-point fractional library routines. 37899 (line 206) 37900 * __usmuluha3: Fixed-point fractional library routines. 37901 (line 208) 37902 * __usmuluhq3: Fixed-point fractional library routines. 37903 (line 202) 37904 * __usmuluqq3: Fixed-point fractional library routines. 37905 (line 200) 37906 * __usmulusa3: Fixed-point fractional library routines. 37907 (line 210) 37908 * __usmulusq3: Fixed-point fractional library routines. 37909 (line 204) 37910 * __usmuluta3: Fixed-point fractional library routines. 37911 (line 214) 37912 * __usneguda2: Fixed-point fractional library routines. 37913 (line 331) 37914 * __usnegudq2: Fixed-point fractional library routines. 37915 (line 326) 37916 * __usneguha2: Fixed-point fractional library routines. 37917 (line 328) 37918 * __usneguhq2: Fixed-point fractional library routines. 37919 (line 322) 37920 * __usneguqq2: Fixed-point fractional library routines. 37921 (line 321) 37922 * __usnegusa2: Fixed-point fractional library routines. 37923 (line 329) 37924 * __usnegusq2: Fixed-point fractional library routines. 37925 (line 324) 37926 * __usneguta2: Fixed-point fractional library routines. 37927 (line 333) 37928 * __ussubuda3: Fixed-point fractional library routines. 37929 (line 148) 37930 * __ussubudq3: Fixed-point fractional library routines. 37931 (line 142) 37932 * __ussubuha3: Fixed-point fractional library routines. 37933 (line 144) 37934 * __ussubuhq3: Fixed-point fractional library routines. 37935 (line 138) 37936 * __ussubuqq3: Fixed-point fractional library routines. 37937 (line 136) 37938 * __ussubusa3: Fixed-point fractional library routines. 37939 (line 146) 37940 * __ussubusq3: Fixed-point fractional library routines. 37941 (line 140) 37942 * __ussubuta3: Fixed-point fractional library routines. 37943 (line 150) 37944 * abort: Portability. (line 21) 37945 * abs: Arithmetic. (line 195) 37946 * abs and attributes: Expressions. (line 64) 37947 * ABS_EXPR: Expression trees. (line 6) 37948 * absence_set: Processor pipeline description. 37949 (line 215) 37950 * absM2 instruction pattern: Standard Names. (line 448) 37951 * absolute value: Arithmetic. (line 195) 37952 * access to operands: Accessors. (line 6) 37953 * access to special operands: Special Accessors. (line 6) 37954 * accessors: Accessors. (line 6) 37955 * ACCUM_TYPE_SIZE: Type Layout. (line 88) 37956 * ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 46) 37957 * ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 135) 37958 * ADA_LONG_TYPE_SIZE: Type Layout. (line 26) 37959 * ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 15) 37960 * addM3 instruction pattern: Standard Names. (line 216) 37961 * addMODEcc instruction pattern: Standard Names. (line 898) 37962 * addr_diff_vec: Side Effects. (line 299) 37963 * addr_diff_vec, length of: Insn Lengths. (line 26) 37964 * ADDR_EXPR: Expression trees. (line 6) 37965 * addr_vec: Side Effects. (line 294) 37966 * addr_vec, length of: Insn Lengths. (line 26) 37967 * address constraints: Simple Constraints. (line 152) 37968 * address_operand <1>: Simple Constraints. (line 156) 37969 * address_operand: Machine-Independent Predicates. 37970 (line 63) 37971 * addressing modes: Addressing Modes. (line 6) 37972 * addressof: Regs and Memory. (line 260) 37973 * ADJUST_FIELD_ALIGN: Storage Layout. (line 188) 37974 * ADJUST_INSN_LENGTH: Insn Lengths. (line 35) 37975 * AGGR_INIT_EXPR: Expression trees. (line 6) 37976 * aggregates as return values: Aggregate Return. (line 6) 37977 * alias: Alias analysis. (line 6) 37978 * ALL_COP_ADDITIONAL_REGISTER_NAMES: MIPS Coprocessors. (line 32) 37979 * ALL_REGS: Register Classes. (line 17) 37980 * allocate_stack instruction pattern: Standard Names. (line 1221) 37981 * alternate entry points: Insns. (line 140) 37982 * anchored addresses: Anchored Addresses. (line 6) 37983 * and: Arithmetic. (line 153) 37984 * and and attributes: Expressions. (line 50) 37985 * and, canonicalization of: Insn Canonicalizations. 37986 (line 57) 37987 * andM3 instruction pattern: Standard Names. (line 222) 37988 * annotations: Annotations. (line 6) 37989 * APPLY_RESULT_SIZE: Scalar Return. (line 92) 37990 * ARG_POINTER_CFA_OFFSET: Frame Layout. (line 194) 37991 * ARG_POINTER_REGNUM: Frame Registers. (line 41) 37992 * ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65) 37993 * arg_pointer_rtx: Frame Registers. (line 85) 37994 * ARGS_GROW_DOWNWARD: Frame Layout. (line 35) 37995 * argument passing: Interface. (line 36) 37996 * arguments in registers: Register Arguments. (line 6) 37997 * arguments on stack: Stack Arguments. (line 6) 37998 * arithmetic library: Soft float library routines. 37999 (line 6) 38000 * arithmetic shift: Arithmetic. (line 168) 38001 * arithmetic shift with signed saturation: Arithmetic. (line 168) 38002 * arithmetic shift with unsigned saturation: Arithmetic. (line 168) 38003 * arithmetic, in RTL: Arithmetic. (line 6) 38004 * ARITHMETIC_TYPE_P: Types. (line 76) 38005 * array: Types. (line 6) 38006 * ARRAY_RANGE_REF: Expression trees. (line 6) 38007 * ARRAY_REF: Expression trees. (line 6) 38008 * ARRAY_TYPE: Types. (line 6) 38009 * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 151) 38010 * ashift: Arithmetic. (line 168) 38011 * ashift and attributes: Expressions. (line 64) 38012 * ashiftrt: Arithmetic. (line 185) 38013 * ashiftrt and attributes: Expressions. (line 64) 38014 * ashlM3 instruction pattern: Standard Names. (line 431) 38015 * ashrM3 instruction pattern: Standard Names. (line 441) 38016 * ASM_APP_OFF: File Framework. (line 61) 38017 * ASM_APP_ON: File Framework. (line 54) 38018 * ASM_COMMENT_START: File Framework. (line 49) 38019 * ASM_DECLARE_CLASS_REFERENCE: Label Output. (line 436) 38020 * ASM_DECLARE_CONSTANT_NAME: Label Output. (line 128) 38021 * ASM_DECLARE_FUNCTION_NAME: Label Output. (line 87) 38022 * ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 101) 38023 * ASM_DECLARE_OBJECT_NAME: Label Output. (line 114) 38024 * ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 143) 38025 * ASM_DECLARE_UNRESOLVED_REFERENCE: Label Output. (line 442) 38026 * ASM_FINAL_SPEC: Driver. (line 144) 38027 * ASM_FINISH_DECLARE_OBJECT: Label Output. (line 151) 38028 * ASM_FORMAT_PRIVATE_NAME: Label Output. (line 354) 38029 * asm_fprintf: Instruction Output. (line 123) 38030 * ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 134) 38031 * ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 338) 38032 * asm_input: Side Effects. (line 281) 38033 * asm_input and /v: Flags. (line 79) 38034 * ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 82) 38035 * ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 72) 38036 * asm_noperands: Insns. (line 266) 38037 * asm_operands and /v: Flags. (line 79) 38038 * asm_operands, RTL sharing: Sharing. (line 45) 38039 * asm_operands, usage: Assembler. (line 6) 38040 * ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 9) 38041 * ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 26) 38042 * ASM_OUTPUT_ALIGN: Alignment Output. (line 79) 38043 * ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 84) 38044 * ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 64) 38045 * ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 23) 38046 * ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 31) 38047 * ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 95) 38048 * ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 87) 38049 * ASM_OUTPUT_ASCII: Data Output. (line 50) 38050 * ASM_OUTPUT_BSS: Uninitialized Data. (line 39) 38051 * ASM_OUTPUT_CASE_END: Dispatch Tables. (line 51) 38052 * ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 38) 38053 * ASM_OUTPUT_COMMON: Uninitialized Data. (line 10) 38054 * ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 326) 38055 * ASM_OUTPUT_DEF: Label Output. (line 375) 38056 * ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 383) 38057 * ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 42) 38058 * ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 46) 38059 * ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 52) 38060 * ASM_OUTPUT_EXTERNAL: Label Output. (line 264) 38061 * ASM_OUTPUT_FDESC: Data Output. (line 59) 38062 * ASM_OUTPUT_IDENT: File Framework. (line 83) 38063 * ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 17) 38064 * ASM_OUTPUT_LABEL: Label Output. (line 9) 38065 * ASM_OUTPUT_LABEL_REF: Label Output. (line 299) 38066 * ASM_OUTPUT_LABELREF: Label Output. (line 285) 38067 * ASM_OUTPUT_LOCAL: Uninitialized Data. (line 74) 38068 * ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 88) 38069 * ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 41) 38070 * ASM_OUTPUT_OPCODE: Instruction Output. (line 21) 38071 * ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 109) 38072 * ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 72) 38073 * ASM_OUTPUT_REG_POP: Instruction Output. (line 178) 38074 * ASM_OUTPUT_REG_PUSH: Instruction Output. (line 173) 38075 * ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 35) 38076 * ASM_OUTPUT_SKIP: Alignment Output. (line 66) 38077 * ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 68) 38078 * ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 84) 38079 * ASM_OUTPUT_SYMBOL_REF: Label Output. (line 292) 38080 * ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 77) 38081 * ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 401) 38082 * ASM_OUTPUT_WEAKREF: Label Output. (line 203) 38083 * ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 67) 38084 * ASM_SPEC: Driver. (line 136) 38085 * ASM_STABD_OP: DBX Options. (line 36) 38086 * ASM_STABN_OP: DBX Options. (line 43) 38087 * ASM_STABS_OP: DBX Options. (line 29) 38088 * ASM_WEAKEN_DECL: Label Output. (line 195) 38089 * ASM_WEAKEN_LABEL: Label Output. (line 182) 38090 * assemble_name: Label Output. (line 8) 38091 * assemble_name_raw: Label Output. (line 16) 38092 * assembler format: File Framework. (line 6) 38093 * assembler instructions in RTL: Assembler. (line 6) 38094 * ASSEMBLER_DIALECT: Instruction Output. (line 146) 38095 * assigning attribute values to insns: Tagging Insns. (line 6) 38096 * assignment operator: Function Basics. (line 6) 38097 * asterisk in template: Output Statement. (line 29) 38098 * atan2M3 instruction pattern: Standard Names. (line 518) 38099 * attr <1>: Tagging Insns. (line 54) 38100 * attr: Expressions. (line 154) 38101 * attr_flag: Expressions. (line 119) 38102 * attribute expressions: Expressions. (line 6) 38103 * attribute specifications: Attr Example. (line 6) 38104 * attribute specifications example: Attr Example. (line 6) 38105 * attributes: Attributes. (line 6) 38106 * attributes, defining: Defining Attributes. 38107 (line 6) 38108 * attributes, target-specific: Target Attributes. (line 6) 38109 * autoincrement addressing, availability: Portability. (line 21) 38110 * autoincrement/decrement addressing: Simple Constraints. (line 28) 38111 * automata_option: Processor pipeline description. 38112 (line 296) 38113 * automaton based pipeline description: Processor pipeline description. 38114 (line 6) 38115 * automaton based scheduler: Processor pipeline description. 38116 (line 6) 38117 * AVOID_CCMODE_COPIES: Values in Registers. 38118 (line 144) 38119 * backslash: Output Template. (line 46) 38120 * barrier: Insns. (line 160) 38121 * barrier and /f: Flags. (line 110) 38122 * barrier and /v: Flags. (line 29) 38123 * BASE_REG_CLASS: Register Classes. (line 107) 38124 * basic block: Basic Blocks. (line 6) 38125 * basic-block.h: Control Flow. (line 6) 38126 * BASIC_BLOCK: Basic Blocks. (line 19) 38127 * basic_block: Basic Blocks. (line 6) 38128 * BB_HEAD, BB_END: Maintaining the CFG. 38129 (line 88) 38130 * bCOND instruction pattern: Standard Names. (line 935) 38131 * BIGGEST_ALIGNMENT: Storage Layout. (line 168) 38132 * BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 181) 38133 * BImode: Machine Modes. (line 22) 38134 * BIND_EXPR: Expression trees. (line 6) 38135 * BINFO_TYPE: Classes. (line 6) 38136 * bit-fields: Bit-Fields. (line 6) 38137 * BIT_AND_EXPR: Expression trees. (line 6) 38138 * BIT_IOR_EXPR: Expression trees. (line 6) 38139 * BIT_NOT_EXPR: Expression trees. (line 6) 38140 * BIT_XOR_EXPR: Expression trees. (line 6) 38141 * BITFIELD_NBYTES_LIMITED: Storage Layout. (line 332) 38142 * BITS_BIG_ENDIAN: Storage Layout. (line 12) 38143 * BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8) 38144 * BITS_PER_UNIT: Storage Layout. (line 52) 38145 * BITS_PER_WORD: Storage Layout. (line 57) 38146 * bitwise complement: Arithmetic. (line 149) 38147 * bitwise exclusive-or: Arithmetic. (line 163) 38148 * bitwise inclusive-or: Arithmetic. (line 158) 38149 * bitwise logical-and: Arithmetic. (line 153) 38150 * BLKmode: Machine Modes. (line 183) 38151 * BLKmode, and function return values: Calls. (line 23) 38152 * block statement iterators <1>: Maintaining the CFG. 38153 (line 45) 38154 * block statement iterators: Basic Blocks. (line 68) 38155 * BLOCK_FOR_INSN, bb_for_stmt: Maintaining the CFG. 38156 (line 40) 38157 * BLOCK_REG_PADDING: Register Arguments. (line 214) 38158 * blockage instruction pattern: Standard Names. (line 1402) 38159 * Blocks: Blocks. (line 6) 38160 * bool <1>: Exception Region Output. 38161 (line 60) 38162 * bool: Sections. (line 280) 38163 * BOOL_TYPE_SIZE: Type Layout. (line 44) 38164 * BOOLEAN_TYPE: Types. (line 6) 38165 * branch prediction: Profile information. 38166 (line 24) 38167 * BRANCH_COST: Costs. (line 52) 38168 * break_out_memory_refs: Addressing Modes. (line 118) 38169 * BREAK_STMT: Function Bodies. (line 6) 38170 * bsi_commit_edge_inserts: Maintaining the CFG. 38171 (line 118) 38172 * bsi_end_p: Maintaining the CFG. 38173 (line 60) 38174 * bsi_insert_after: Maintaining the CFG. 38175 (line 72) 38176 * bsi_insert_before: Maintaining the CFG. 38177 (line 78) 38178 * bsi_insert_on_edge: Maintaining the CFG. 38179 (line 118) 38180 * bsi_last: Maintaining the CFG. 38181 (line 56) 38182 * bsi_next: Maintaining the CFG. 38183 (line 64) 38184 * bsi_prev: Maintaining the CFG. 38185 (line 68) 38186 * bsi_remove: Maintaining the CFG. 38187 (line 84) 38188 * bsi_start: Maintaining the CFG. 38189 (line 52) 38190 * BSS_SECTION_ASM_OP: Sections. (line 68) 38191 * bswap: Arithmetic. (line 232) 38192 * btruncM2 instruction pattern: Standard Names. (line 536) 38193 * builtin_longjmp instruction pattern: Standard Names. (line 1307) 38194 * builtin_setjmp_receiver instruction pattern: Standard Names. 38195 (line 1297) 38196 * builtin_setjmp_setup instruction pattern: Standard Names. (line 1286) 38197 * byte_mode: Machine Modes. (line 336) 38198 * BYTES_BIG_ENDIAN: Storage Layout. (line 24) 38199 * BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 136) 38200 * C statements for assembler output: Output Statement. (line 6) 38201 * C/C++ Internal Representation: Trees. (line 6) 38202 * C99 math functions, implicit usage: Library Calls. (line 76) 38203 * C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 114) 38204 * c_register_pragma: Misc. (line 404) 38205 * c_register_pragma_with_expansion: Misc. (line 406) 38206 * call <1>: Side Effects. (line 86) 38207 * call: Flags. (line 219) 38208 * call instruction pattern: Standard Names. (line 968) 38209 * call usage: Calls. (line 10) 38210 * call, in mem: Flags. (line 84) 38211 * call-clobbered register: Register Basics. (line 35) 38212 * call-saved register: Register Basics. (line 35) 38213 * call-used register: Register Basics. (line 35) 38214 * CALL_EXPR: Expression trees. (line 6) 38215 * call_insn: Insns. (line 95) 38216 * call_insn and /f: Flags. (line 110) 38217 * call_insn and /j: Flags. (line 164) 38218 * call_insn and /s: Flags. (line 34) 38219 * call_insn and /u: Flags. (line 19) 38220 * call_insn and /v: Flags. (line 29) 38221 * CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 38222 * call_pop instruction pattern: Standard Names. (line 996) 38223 * CALL_POPS_ARGS: Stack Arguments. (line 128) 38224 * CALL_REALLY_USED_REGISTERS: Register Basics. (line 46) 38225 * CALL_USED_REGISTERS: Register Basics. (line 35) 38226 * call_used_regs: Register Basics. (line 59) 38227 * call_value instruction pattern: Standard Names. (line 988) 38228 * call_value_pop instruction pattern: Standard Names. (line 996) 38229 * CALLER_SAVE_PROFITABLE: Caller Saves. (line 11) 38230 * calling conventions: Stack and Calling. (line 6) 38231 * calling functions in RTL: Calls. (line 6) 38232 * can_create_pseudo_p: Standard Names. (line 75) 38233 * CAN_DEBUG_WITHOUT_FP: Run-time Target. (line 147) 38234 * CAN_ELIMINATE: Elimination. (line 71) 38235 * can_fallthru: Basic Blocks. (line 57) 38236 * canadian: Configure Terms. (line 6) 38237 * CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 481) 38238 * canonicalization of instructions: Insn Canonicalizations. 38239 (line 6) 38240 * CANONICALIZE_COMPARISON: Condition Code. (line 84) 38241 * canonicalize_funcptr_for_compare instruction pattern: Standard Names. 38242 (line 1152) 38243 * CASE_USE_BIT_TESTS: Misc. (line 54) 38244 * CASE_VALUES_THRESHOLD: Misc. (line 47) 38245 * CASE_VECTOR_MODE: Misc. (line 27) 38246 * CASE_VECTOR_PC_RELATIVE: Misc. (line 40) 38247 * CASE_VECTOR_SHORTEN_MODE: Misc. (line 31) 38248 * casesi instruction pattern: Standard Names. (line 1076) 38249 * cbranchMODE4 instruction pattern: Standard Names. (line 957) 38250 * cc0: Regs and Memory. (line 182) 38251 * cc0, RTL sharing: Sharing. (line 27) 38252 * cc0_rtx: Regs and Memory. (line 208) 38253 * CC1_SPEC: Driver. (line 118) 38254 * CC1PLUS_SPEC: Driver. (line 126) 38255 * cc_status: Condition Code. (line 8) 38256 * CC_STATUS_MDEP: Condition Code. (line 19) 38257 * CC_STATUS_MDEP_INIT: Condition Code. (line 25) 38258 * CCmode: Machine Modes. (line 176) 38259 * CDImode: Machine Modes. (line 202) 38260 * CEIL_DIV_EXPR: Expression trees. (line 6) 38261 * CEIL_MOD_EXPR: Expression trees. (line 6) 38262 * ceilM2 instruction pattern: Standard Names. (line 552) 38263 * CFA_FRAME_BASE_OFFSET: Frame Layout. (line 226) 38264 * CFG, Control Flow Graph: Control Flow. (line 6) 38265 * cfghooks.h: Maintaining the CFG. 38266 (line 6) 38267 * cgraph_finalize_function: Parsing pass. (line 52) 38268 * chain_circular: GTY Options. (line 196) 38269 * chain_next: GTY Options. (line 196) 38270 * chain_prev: GTY Options. (line 196) 38271 * change_address: Standard Names. (line 47) 38272 * CHANGE_DYNAMIC_TYPE_EXPR: Expression trees. (line 6) 38273 * char <1>: Misc. (line 693) 38274 * char <2>: PCH Target. (line 12) 38275 * char: Sections. (line 272) 38276 * CHAR_TYPE_SIZE: Type Layout. (line 39) 38277 * check_stack instruction pattern: Standard Names. (line 1239) 38278 * CHImode: Machine Modes. (line 202) 38279 * class: Classes. (line 6) 38280 * class definitions, register: Register Classes. (line 6) 38281 * class preference constraints: Class Preferences. (line 6) 38282 * CLASS_LIKELY_SPILLED_P: Register Classes. (line 452) 38283 * CLASS_MAX_NREGS: Register Classes. (line 469) 38284 * CLASS_TYPE_P: Types. (line 80) 38285 * classes of RTX codes: RTL Classes. (line 6) 38286 * CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 38287 * CLASSTYPE_HAS_MUTABLE: Classes. (line 80) 38288 * CLASSTYPE_NON_POD_P: Classes. (line 85) 38289 * CLEANUP_DECL: Function Bodies. (line 6) 38290 * CLEANUP_EXPR: Function Bodies. (line 6) 38291 * CLEANUP_POINT_EXPR: Expression trees. (line 6) 38292 * CLEANUP_STMT: Function Bodies. (line 6) 38293 * Cleanups: Cleanups. (line 6) 38294 * CLEAR_BY_PIECES_P: Costs. (line 124) 38295 * clear_cache instruction pattern: Standard Names. (line 1549) 38296 * CLEAR_INSN_CACHE: Trampolines. (line 100) 38297 * CLEAR_RATIO: Costs. (line 115) 38298 * clobber: Side Effects. (line 100) 38299 * clz: Arithmetic. (line 208) 38300 * CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 319) 38301 * clzM2 instruction pattern: Standard Names. (line 617) 38302 * cmpM instruction pattern: Standard Names. (line 650) 38303 * cmpmemM instruction pattern: Standard Names. (line 763) 38304 * cmpstrM instruction pattern: Standard Names. (line 744) 38305 * cmpstrnM instruction pattern: Standard Names. (line 732) 38306 * code generation RTL sequences: Expander Definitions. 38307 (line 6) 38308 * code iterators in .md files: Code Iterators. (line 6) 38309 * code_label: Insns. (line 119) 38310 * code_label and /i: Flags. (line 44) 38311 * code_label and /v: Flags. (line 29) 38312 * CODE_LABEL_NUMBER: Insns. (line 119) 38313 * codes, RTL expression: RTL Objects. (line 47) 38314 * COImode: Machine Modes. (line 202) 38315 * COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 38316 * COLLECT_EXPORT_LIST: Misc. (line 775) 38317 * COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 38318 (line 44) 38319 * COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 38320 (line 33) 38321 * combiner pass: Regs and Memory. (line 148) 38322 * commit_edge_insertions: Maintaining the CFG. 38323 (line 118) 38324 * compare: Arithmetic. (line 43) 38325 * compare, canonicalization of: Insn Canonicalizations. 38326 (line 37) 38327 * comparison_operator: Machine-Independent Predicates. 38328 (line 111) 38329 * compiler passes and files: Passes. (line 6) 38330 * complement, bitwise: Arithmetic. (line 149) 38331 * COMPLEX_CST: Expression trees. (line 6) 38332 * COMPLEX_EXPR: Expression trees. (line 6) 38333 * COMPLEX_TYPE: Types. (line 6) 38334 * COMPONENT_REF: Expression trees. (line 6) 38335 * Compound Expressions: Compound Expressions. 38336 (line 6) 38337 * Compound Lvalues: Compound Lvalues. (line 6) 38338 * COMPOUND_EXPR: Expression trees. (line 6) 38339 * COMPOUND_LITERAL_EXPR: Expression trees. (line 6) 38340 * COMPOUND_LITERAL_EXPR_DECL: Expression trees. (line 608) 38341 * COMPOUND_LITERAL_EXPR_DECL_STMT: Expression trees. (line 608) 38342 * computed jump: Edges. (line 128) 38343 * computing the length of an insn: Insn Lengths. (line 6) 38344 * concat: Regs and Memory. (line 267) 38345 * concatn: Regs and Memory. (line 273) 38346 * cond: Comparisons. (line 90) 38347 * cond and attributes: Expressions. (line 37) 38348 * cond_exec: Side Effects. (line 245) 38349 * COND_EXPR: Expression trees. (line 6) 38350 * condition code register: Regs and Memory. (line 182) 38351 * condition code status: Condition Code. (line 6) 38352 * condition codes: Comparisons. (line 20) 38353 * conditional execution: Conditional Execution. 38354 (line 6) 38355 * Conditional Expressions: Conditional Expressions. 38356 (line 6) 38357 * CONDITIONAL_REGISTER_USAGE: Register Basics. (line 60) 38358 * conditional_trap instruction pattern: Standard Names. (line 1373) 38359 * conditions, in patterns: Patterns. (line 43) 38360 * configuration file <1>: Host Misc. (line 6) 38361 * configuration file: Filesystem. (line 6) 38362 * configure terms: Configure Terms. (line 6) 38363 * CONJ_EXPR: Expression trees. (line 6) 38364 * CONST0_RTX: Constants. (line 81) 38365 * const0_rtx: Constants. (line 16) 38366 * CONST1_RTX: Constants. (line 81) 38367 * const1_rtx: Constants. (line 16) 38368 * CONST2_RTX: Constants. (line 81) 38369 * const2_rtx: Constants. (line 16) 38370 * CONST_DECL: Declarations. (line 6) 38371 * const_double: Constants. (line 32) 38372 * const_double, RTL sharing: Sharing. (line 29) 38373 * CONST_DOUBLE_CHAIN: Constants. (line 59) 38374 * CONST_DOUBLE_LOW: Constants. (line 68) 38375 * CONST_DOUBLE_MEM: Constants. (line 59) 38376 * CONST_DOUBLE_OK_FOR_CONSTRAINT_P: Old Constraints. (line 69) 38377 * CONST_DOUBLE_OK_FOR_LETTER_P: Old Constraints. (line 54) 38378 * const_double_operand: Machine-Independent Predicates. 38379 (line 21) 38380 * const_fixed: Constants. (line 39) 38381 * const_int: Constants. (line 8) 38382 * const_int and attribute tests: Expressions. (line 47) 38383 * const_int and attributes: Expressions. (line 10) 38384 * const_int, RTL sharing: Sharing. (line 23) 38385 * const_int_operand: Machine-Independent Predicates. 38386 (line 16) 38387 * CONST_OK_FOR_CONSTRAINT_P: Old Constraints. (line 49) 38388 * CONST_OK_FOR_LETTER_P: Old Constraints. (line 40) 38389 * CONST_OR_PURE_CALL_P: Flags. (line 19) 38390 * const_string: Constants. (line 90) 38391 * const_string and attributes: Expressions. (line 20) 38392 * const_true_rtx: Constants. (line 26) 38393 * const_vector: Constants. (line 47) 38394 * const_vector, RTL sharing: Sharing. (line 32) 38395 * constant attributes: Constant Attributes. 38396 (line 6) 38397 * constant definitions: Constant Definitions. 38398 (line 6) 38399 * CONSTANT_ADDRESS_P: Addressing Modes. (line 29) 38400 * CONSTANT_ALIGNMENT: Storage Layout. (line 221) 38401 * CONSTANT_P: Addressing Modes. (line 35) 38402 * CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 38403 * CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 64) 38404 * constants in constraints: Simple Constraints. (line 58) 38405 * constm1_rtx: Constants. (line 16) 38406 * constraint modifier characters: Modifiers. (line 6) 38407 * constraint, matching: Simple Constraints. (line 130) 38408 * CONSTRAINT_LEN: Old Constraints. (line 12) 38409 * constraint_num: C Constraint Interface. 38410 (line 38) 38411 * constraint_satisfied_p: C Constraint Interface. 38412 (line 54) 38413 * constraints: Constraints. (line 6) 38414 * constraints, defining: Define Constraints. (line 6) 38415 * constraints, defining, obsolete method: Old Constraints. (line 6) 38416 * constraints, machine specific: Machine Constraints. 38417 (line 6) 38418 * constraints, testing: C Constraint Interface. 38419 (line 6) 38420 * CONSTRUCTOR: Expression trees. (line 6) 38421 * constructor: Function Basics. (line 6) 38422 * constructors, automatic calls: Collect2. (line 15) 38423 * constructors, output of: Initialization. (line 6) 38424 * container: Containers. (line 6) 38425 * CONTINUE_STMT: Function Bodies. (line 6) 38426 * contributors: Contributors. (line 6) 38427 * controlling register usage: Register Basics. (line 76) 38428 * controlling the compilation driver: Driver. (line 6) 38429 * conventions, run-time: Interface. (line 6) 38430 * conversions: Conversions. (line 6) 38431 * CONVERT_EXPR: Expression trees. (line 6) 38432 * copy constructor: Function Basics. (line 6) 38433 * copy_rtx: Addressing Modes. (line 170) 38434 * copy_rtx_if_shared: Sharing. (line 64) 38435 * copysignM3 instruction pattern: Standard Names. (line 598) 38436 * cosM2 instruction pattern: Standard Names. (line 477) 38437 * costs of instructions: Costs. (line 6) 38438 * CP_INTEGRAL_TYPE: Types. (line 72) 38439 * cp_namespace_decls: Namespaces. (line 44) 38440 * CP_TYPE_CONST_NON_VOLATILE_P: Types. (line 45) 38441 * CP_TYPE_CONST_P: Types. (line 36) 38442 * CP_TYPE_QUALS: Types. (line 6) 38443 * CP_TYPE_RESTRICT_P: Types. (line 42) 38444 * CP_TYPE_VOLATILE_P: Types. (line 39) 38445 * CPLUSPLUS_CPP_SPEC: Driver. (line 113) 38446 * CPP_SPEC: Driver. (line 106) 38447 * CQImode: Machine Modes. (line 202) 38448 * cross compilation and floating point: Floating Point. (line 6) 38449 * CRT_CALL_STATIC_FUNCTION: Sections. (line 112) 38450 * CRTSTUFF_T_CFLAGS: Target Fragment. (line 35) 38451 * CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 39) 38452 * CSImode: Machine Modes. (line 202) 38453 * CTImode: Machine Modes. (line 202) 38454 * ctz: Arithmetic. (line 216) 38455 * CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 320) 38456 * ctzM2 instruction pattern: Standard Names. (line 626) 38457 * CUMULATIVE_ARGS: Register Arguments. (line 127) 38458 * current_function_epilogue_delay_list: Function Entry. (line 181) 38459 * current_function_is_leaf: Leaf Functions. (line 51) 38460 * current_function_outgoing_args_size: Stack Arguments. (line 45) 38461 * current_function_pops_args: Function Entry. (line 106) 38462 * current_function_pretend_args_size: Function Entry. (line 112) 38463 * current_function_uses_only_leaf_regs: Leaf Functions. (line 51) 38464 * current_insn_predicate: Conditional Execution. 38465 (line 26) 38466 * DAmode: Machine Modes. (line 152) 38467 * data bypass: Processor pipeline description. 38468 (line 106) 38469 * data dependence delays: Processor pipeline description. 38470 (line 6) 38471 * Data Dependency Analysis: Dependency analysis. 38472 (line 6) 38473 * data structures: Per-Function Data. (line 6) 38474 * DATA_ALIGNMENT: Storage Layout. (line 208) 38475 * DATA_SECTION_ASM_OP: Sections. (line 53) 38476 * DBR_OUTPUT_SEQEND: Instruction Output. (line 107) 38477 * dbr_sequence_length: Instruction Output. (line 106) 38478 * DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 103) 38479 * DBX_CONTIN_CHAR: DBX Options. (line 66) 38480 * DBX_CONTIN_LENGTH: DBX Options. (line 56) 38481 * DBX_DEBUGGING_INFO: DBX Options. (line 9) 38482 * DBX_FUNCTION_FIRST: DBX Options. (line 97) 38483 * DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 109) 38484 * DBX_NO_XREFS: DBX Options. (line 50) 38485 * DBX_OUTPUT_LBRAC: DBX Hooks. (line 9) 38486 * DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 34) 38487 * DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 9) 38488 * DBX_OUTPUT_NFUN: DBX Hooks. (line 18) 38489 * DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 38490 (line 42) 38491 * DBX_OUTPUT_RBRAC: DBX Hooks. (line 15) 38492 * DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 22) 38493 * DBX_REGISTER_NUMBER: All Debuggers. (line 9) 38494 * DBX_REGPARM_STABS_CODE: DBX Options. (line 87) 38495 * DBX_REGPARM_STABS_LETTER: DBX Options. (line 92) 38496 * DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 82) 38497 * DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 73) 38498 * DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 78) 38499 * DBX_USE_BINCL: DBX Options. (line 115) 38500 * DCmode: Machine Modes. (line 197) 38501 * DDmode: Machine Modes. (line 90) 38502 * De Morgan's law: Insn Canonicalizations. 38503 (line 57) 38504 * dead_or_set_p: define_peephole. (line 65) 38505 * DEBUG_SYMS_TEXT: DBX Options. (line 25) 38506 * DEBUGGER_ARG_OFFSET: All Debuggers. (line 37) 38507 * DEBUGGER_AUTO_OFFSET: All Debuggers. (line 28) 38508 * decimal float library: Decimal float library routines. 38509 (line 6) 38510 * DECL_ALIGN: Declarations. (line 6) 38511 * DECL_ANTICIPATED: Function Basics. (line 48) 38512 * DECL_ARGUMENTS: Function Basics. (line 163) 38513 * DECL_ARRAY_DELETE_OPERATOR_P: Function Basics. (line 184) 38514 * DECL_ARTIFICIAL <1>: Function Basics. (line 6) 38515 * DECL_ARTIFICIAL: Working with declarations. 38516 (line 24) 38517 * DECL_ASSEMBLER_NAME: Function Basics. (line 6) 38518 * DECL_ATTRIBUTES: Attributes. (line 22) 38519 * DECL_BASE_CONSTRUCTOR_P: Function Basics. (line 94) 38520 * DECL_CLASS_SCOPE_P: Working with declarations. 38521 (line 41) 38522 * DECL_COMPLETE_CONSTRUCTOR_P: Function Basics. (line 90) 38523 * DECL_COMPLETE_DESTRUCTOR_P: Function Basics. (line 104) 38524 * DECL_CONST_MEMFUNC_P: Function Basics. (line 77) 38525 * DECL_CONSTRUCTOR_P: Function Basics. (line 6) 38526 * DECL_CONTEXT: Namespaces. (line 26) 38527 * DECL_CONV_FN_P: Function Basics. (line 6) 38528 * DECL_COPY_CONSTRUCTOR_P: Function Basics. (line 98) 38529 * DECL_DESTRUCTOR_P: Function Basics. (line 6) 38530 * DECL_EXTERN_C_FUNCTION_P: Function Basics. (line 52) 38531 * DECL_EXTERNAL <1>: Function Basics. (line 38) 38532 * DECL_EXTERNAL: Declarations. (line 6) 38533 * DECL_FUNCTION_MEMBER_P: Function Basics. (line 6) 38534 * DECL_FUNCTION_SCOPE_P: Working with declarations. 38535 (line 44) 38536 * DECL_GLOBAL_CTOR_P: Function Basics. (line 6) 38537 * DECL_GLOBAL_DTOR_P: Function Basics. (line 6) 38538 * DECL_INITIAL: Declarations. (line 6) 38539 * DECL_LINKONCE_P: Function Basics. (line 6) 38540 * DECL_LOCAL_FUNCTION_P: Function Basics. (line 44) 38541 * DECL_MAIN_P: Function Basics. (line 7) 38542 * DECL_NAME <1>: Function Basics. (line 6) 38543 * DECL_NAME <2>: Working with declarations. 38544 (line 7) 38545 * DECL_NAME: Namespaces. (line 15) 38546 * DECL_NAMESPACE_ALIAS: Namespaces. (line 30) 38547 * DECL_NAMESPACE_SCOPE_P: Working with declarations. 38548 (line 37) 38549 * DECL_NAMESPACE_STD_P: Namespaces. (line 40) 38550 * DECL_NON_THUNK_FUNCTION_P: Function Basics. (line 144) 38551 * DECL_NONCONVERTING_P: Function Basics. (line 86) 38552 * DECL_NONSTATIC_MEMBER_FUNCTION_P: Function Basics. (line 74) 38553 * DECL_OVERLOADED_OPERATOR_P: Function Basics. (line 6) 38554 * DECL_RESULT: Function Basics. (line 168) 38555 * DECL_SIZE: Declarations. (line 6) 38556 * DECL_STATIC_FUNCTION_P: Function Basics. (line 71) 38557 * DECL_STMT: Function Bodies. (line 6) 38558 * DECL_STMT_DECL: Function Bodies. (line 6) 38559 * DECL_THUNK_P: Function Basics. (line 122) 38560 * DECL_VOLATILE_MEMFUNC_P: Function Basics. (line 80) 38561 * declaration: Declarations. (line 6) 38562 * declarations, RTL: RTL Declarations. (line 6) 38563 * DECLARE_LIBRARY_RENAMES: Library Calls. (line 9) 38564 * decrement_and_branch_until_zero instruction pattern: Standard Names. 38565 (line 1114) 38566 * default: GTY Options. (line 82) 38567 * default_file_start: File Framework. (line 9) 38568 * DEFAULT_GDB_EXTENSIONS: DBX Options. (line 18) 38569 * DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 34) 38570 * DEFAULT_SIGNED_CHAR: Type Layout. (line 154) 38571 * define_address_constraint: Define Constraints. (line 107) 38572 * define_asm_attributes: Tagging Insns. (line 73) 38573 * define_attr: Defining Attributes. 38574 (line 6) 38575 * define_automaton: Processor pipeline description. 38576 (line 53) 38577 * define_bypass: Processor pipeline description. 38578 (line 197) 38579 * define_code_attr: Code Iterators. (line 6) 38580 * define_code_iterator: Code Iterators. (line 6) 38581 * define_cond_exec: Conditional Execution. 38582 (line 13) 38583 * define_constants: Constant Definitions. 38584 (line 6) 38585 * define_constraint: Define Constraints. (line 48) 38586 * define_cpu_unit: Processor pipeline description. 38587 (line 68) 38588 * define_delay: Delay Slots. (line 25) 38589 * define_expand: Expander Definitions. 38590 (line 11) 38591 * define_insn: Patterns. (line 6) 38592 * define_insn example: Example. (line 6) 38593 * define_insn_and_split: Insn Splitting. (line 170) 38594 * define_insn_reservation: Processor pipeline description. 38595 (line 106) 38596 * define_memory_constraint: Define Constraints. (line 88) 38597 * define_mode_attr: Substitutions. (line 6) 38598 * define_mode_iterator: Defining Mode Iterators. 38599 (line 6) 38600 * define_peephole: define_peephole. (line 6) 38601 * define_peephole2: define_peephole2. (line 6) 38602 * define_predicate: Defining Predicates. 38603 (line 6) 38604 * define_query_cpu_unit: Processor pipeline description. 38605 (line 90) 38606 * define_register_constraint: Define Constraints. (line 28) 38607 * define_reservation: Processor pipeline description. 38608 (line 186) 38609 * define_special_predicate: Defining Predicates. 38610 (line 6) 38611 * define_split: Insn Splitting. (line 32) 38612 * defining attributes and their values: Defining Attributes. 38613 (line 6) 38614 * defining constraints: Define Constraints. (line 6) 38615 * defining constraints, obsolete method: Old Constraints. (line 6) 38616 * defining jump instruction patterns: Jump Patterns. (line 6) 38617 * defining looping instruction patterns: Looping Patterns. (line 6) 38618 * defining peephole optimizers: Peephole Definitions. 38619 (line 6) 38620 * defining predicates: Defining Predicates. 38621 (line 6) 38622 * defining RTL sequences for code generation: Expander Definitions. 38623 (line 6) 38624 * delay slots, defining: Delay Slots. (line 6) 38625 * DELAY_SLOTS_FOR_EPILOGUE: Function Entry. (line 163) 38626 * deletable: GTY Options. (line 150) 38627 * DELETE_IF_ORDINARY: Filesystem. (line 79) 38628 * Dependent Patterns: Dependent Patterns. (line 6) 38629 * desc: GTY Options. (line 82) 38630 * destructor: Function Basics. (line 6) 38631 * destructors, output of: Initialization. (line 6) 38632 * deterministic finite state automaton: Processor pipeline description. 38633 (line 6) 38634 * DF_SIZE: Type Layout. (line 130) 38635 * DFmode: Machine Modes. (line 73) 38636 * digits in constraint: Simple Constraints. (line 118) 38637 * DImode: Machine Modes. (line 45) 38638 * DIR_SEPARATOR: Filesystem. (line 18) 38639 * DIR_SEPARATOR_2: Filesystem. (line 19) 38640 * directory options .md: Including Patterns. (line 44) 38641 * disabling certain registers: Register Basics. (line 76) 38642 * dispatch table: Dispatch Tables. (line 8) 38643 * div: Arithmetic. (line 111) 38644 * div and attributes: Expressions. (line 64) 38645 * division: Arithmetic. (line 111) 38646 * divM3 instruction pattern: Standard Names. (line 222) 38647 * divmodM4 instruction pattern: Standard Names. (line 411) 38648 * DO_BODY: Function Bodies. (line 6) 38649 * DO_COND: Function Bodies. (line 6) 38650 * DO_STMT: Function Bodies. (line 6) 38651 * DOLLARS_IN_IDENTIFIERS: Misc. (line 496) 38652 * doloop_begin instruction pattern: Standard Names. (line 1145) 38653 * doloop_end instruction pattern: Standard Names. (line 1124) 38654 * DONE: Expander Definitions. 38655 (line 74) 38656 * DONT_USE_BUILTIN_SETJMP: Exception Region Output. 38657 (line 70) 38658 * DOUBLE_TYPE_SIZE: Type Layout. (line 53) 38659 * DQmode: Machine Modes. (line 115) 38660 * driver: Driver. (line 6) 38661 * DRIVER_SELF_SPECS: Driver. (line 71) 38662 * DUMPFILE_FORMAT: Filesystem. (line 67) 38663 * DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 36) 38664 * DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 13) 38665 * DWARF2_FRAME_INFO: SDB and DWARF. (line 30) 38666 * DWARF2_FRAME_REG_OUT: Frame Registers. (line 133) 38667 * DWARF2_UNWIND_INFO: Exception Region Output. 38668 (line 40) 38669 * DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 152) 38670 * DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 38671 (line 75) 38672 * DWARF_FRAME_REGISTERS: Frame Registers. (line 93) 38673 * DWARF_FRAME_REGNUM: Frame Registers. (line 125) 38674 * DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 117) 38675 * DWARF_ZERO_REG: Frame Layout. (line 163) 38676 * DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 92) 38677 * E in constraint: Simple Constraints. (line 77) 38678 * earlyclobber operand: Modifiers. (line 25) 38679 * edge: Edges. (line 6) 38680 * edge in the flow graph: Edges. (line 6) 38681 * edge iterators: Edges. (line 15) 38682 * edge splitting: Maintaining the CFG. 38683 (line 118) 38684 * EDGE_ABNORMAL: Edges. (line 128) 38685 * EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 38686 * EDGE_ABNORMAL, EDGE_EH: Edges. (line 96) 38687 * EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 122) 38688 * EDGE_FALLTHRU, force_nonfallthru: Edges. (line 86) 38689 * EDOM, implicit usage: Library Calls. (line 58) 38690 * EH_FRAME_IN_DATA_SECTION: Exception Region Output. 38691 (line 20) 38692 * EH_FRAME_SECTION_NAME: Exception Region Output. 38693 (line 10) 38694 * eh_return instruction pattern: Standard Names. (line 1313) 38695 * EH_RETURN_DATA_REGNO: Exception Handling. (line 7) 38696 * EH_RETURN_HANDLER_RTX: Exception Handling. (line 39) 38697 * EH_RETURN_STACKADJ_RTX: Exception Handling. (line 22) 38698 * EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 38699 (line 29) 38700 * EH_USES: Function Entry. (line 158) 38701 * ei_edge: Edges. (line 43) 38702 * ei_end_p: Edges. (line 27) 38703 * ei_last: Edges. (line 23) 38704 * ei_next: Edges. (line 35) 38705 * ei_one_before_end_p: Edges. (line 31) 38706 * ei_prev: Edges. (line 39) 38707 * ei_safe_safe: Edges. (line 47) 38708 * ei_start: Edges. (line 19) 38709 * ELIGIBLE_FOR_EPILOGUE_DELAY: Function Entry. (line 169) 38710 * ELIMINABLE_REGS: Elimination. (line 44) 38711 * ELSE_CLAUSE: Function Bodies. (line 6) 38712 * Embedded C: Fixed-point fractional library routines. 38713 (line 6) 38714 * EMIT_MODE_SET: Mode Switching. (line 74) 38715 * Empty Statements: Empty Statements. (line 6) 38716 * EMPTY_CLASS_EXPR: Function Bodies. (line 6) 38717 * EMPTY_FIELD_BOUNDARY: Storage Layout. (line 245) 38718 * ENABLE_EXECUTE_STACK: Trampolines. (line 110) 38719 * ENDFILE_SPEC: Driver. (line 218) 38720 * endianness: Portability. (line 21) 38721 * ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 28) 38722 * enum machine_mode: Machine Modes. (line 6) 38723 * enum reg_class: Register Classes. (line 65) 38724 * ENUMERAL_TYPE: Types. (line 6) 38725 * epilogue: Function Entry. (line 6) 38726 * epilogue instruction pattern: Standard Names. (line 1345) 38727 * EPILOGUE_USES: Function Entry. (line 152) 38728 * eq: Comparisons. (line 52) 38729 * eq and attributes: Expressions. (line 64) 38730 * eq_attr: Expressions. (line 85) 38731 * EQ_EXPR: Expression trees. (line 6) 38732 * equal: Comparisons. (line 52) 38733 * errno, implicit usage: Library Calls. (line 70) 38734 * EXACT_DIV_EXPR: Expression trees. (line 6) 38735 * examining SSA_NAMEs: SSA. (line 221) 38736 * exception handling <1>: Exception Handling. (line 6) 38737 * exception handling: Edges. (line 96) 38738 * exception_receiver instruction pattern: Standard Names. (line 1277) 38739 * exclamation point: Multi-Alternative. (line 47) 38740 * exclusion_set: Processor pipeline description. 38741 (line 215) 38742 * exclusive-or, bitwise: Arithmetic. (line 163) 38743 * EXIT_EXPR: Expression trees. (line 6) 38744 * EXIT_IGNORE_STACK: Function Entry. (line 140) 38745 * expander definitions: Expander Definitions. 38746 (line 6) 38747 * expM2 instruction pattern: Standard Names. (line 493) 38748 * expr_list: Insns. (line 550) 38749 * EXPR_STMT: Function Bodies. (line 6) 38750 * EXPR_STMT_EXPR: Function Bodies. (line 6) 38751 * expression: Expression trees. (line 6) 38752 * expression codes: RTL Objects. (line 47) 38753 * extendMN2 instruction pattern: Standard Names. (line 820) 38754 * extensible constraints: Simple Constraints. (line 161) 38755 * EXTRA_ADDRESS_CONSTRAINT: Old Constraints. (line 123) 38756 * EXTRA_CONSTRAINT: Old Constraints. (line 74) 38757 * EXTRA_CONSTRAINT_STR: Old Constraints. (line 95) 38758 * EXTRA_MEMORY_CONSTRAINT: Old Constraints. (line 100) 38759 * EXTRA_SPECS: Driver. (line 245) 38760 * extv instruction pattern: Standard Names. (line 856) 38761 * extzv instruction pattern: Standard Names. (line 871) 38762 * F in constraint: Simple Constraints. (line 82) 38763 * FAIL: Expander Definitions. 38764 (line 80) 38765 * fall-thru: Edges. (line 69) 38766 * FATAL_EXIT_CODE: Host Misc. (line 6) 38767 * FDL, GNU Free Documentation License: GNU Free Documentation License. 38768 (line 6) 38769 * features, optional, in system conventions: Run-time Target. 38770 (line 59) 38771 * ffs: Arithmetic. (line 202) 38772 * ffsM2 instruction pattern: Standard Names. (line 607) 38773 * FIELD_DECL: Declarations. (line 6) 38774 * file_end_indicate_exec_stack: File Framework. (line 41) 38775 * files and passes of the compiler: Passes. (line 6) 38776 * files, generated: Files. (line 6) 38777 * final_absence_set: Processor pipeline description. 38778 (line 215) 38779 * FINAL_PRESCAN_INSN: Instruction Output. (line 46) 38780 * final_presence_set: Processor pipeline description. 38781 (line 215) 38782 * final_scan_insn: Function Entry. (line 181) 38783 * final_sequence: Instruction Output. (line 117) 38784 * FIND_BASE_TERM: Addressing Modes. (line 100) 38785 * FINI_ARRAY_SECTION_ASM_OP: Sections. (line 105) 38786 * FINI_SECTION_ASM_OP: Sections. (line 90) 38787 * finite state automaton minimization: Processor pipeline description. 38788 (line 296) 38789 * FIRST_PARM_OFFSET: Frame Layout. (line 67) 38790 * FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65) 38791 * FIRST_PSEUDO_REGISTER: Register Basics. (line 9) 38792 * FIRST_STACK_REG: Stack Registers. (line 23) 38793 * FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 38794 * fix: Conversions. (line 66) 38795 * FIX_TRUNC_EXPR: Expression trees. (line 6) 38796 * fix_truncMN2 instruction pattern: Standard Names. (line 807) 38797 * fixed register: Register Basics. (line 15) 38798 * fixed-point fractional library: Fixed-point fractional library routines. 38799 (line 6) 38800 * FIXED_CONVERT_EXPR: Expression trees. (line 6) 38801 * FIXED_CST: Expression trees. (line 6) 38802 * FIXED_POINT_TYPE: Types. (line 6) 38803 * FIXED_REGISTERS: Register Basics. (line 15) 38804 * fixed_regs: Register Basics. (line 59) 38805 * fixMN2 instruction pattern: Standard Names. (line 787) 38806 * FIXUNS_TRUNC_LIKE_FIX_TRUNC: Misc. (line 100) 38807 * fixuns_truncMN2 instruction pattern: Standard Names. (line 811) 38808 * fixunsMN2 instruction pattern: Standard Names. (line 796) 38809 * flags in RTL expression: Flags. (line 6) 38810 * float: Conversions. (line 58) 38811 * FLOAT_EXPR: Expression trees. (line 6) 38812 * float_extend: Conversions. (line 33) 38813 * FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 25) 38814 * FLOAT_STORE_FLAG_VALUE: Misc. (line 301) 38815 * float_truncate: Conversions. (line 53) 38816 * FLOAT_TYPE_SIZE: Type Layout. (line 49) 38817 * FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 43) 38818 * FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory. 38819 (line 140) 38820 * floating point and cross compilation: Floating Point. (line 6) 38821 * Floating Point Emulation: Target Fragment. (line 15) 38822 * floating point emulation library, US Software GOFAST: Library Calls. 38823 (line 44) 38824 * floatMN2 instruction pattern: Standard Names. (line 779) 38825 * floatunsMN2 instruction pattern: Standard Names. (line 783) 38826 * FLOOR_DIV_EXPR: Expression trees. (line 6) 38827 * FLOOR_MOD_EXPR: Expression trees. (line 6) 38828 * floorM2 instruction pattern: Standard Names. (line 528) 38829 * flow-insensitive alias analysis: Alias analysis. (line 6) 38830 * flow-sensitive alias analysis: Alias analysis. (line 6) 38831 * fmodM3 instruction pattern: Standard Names. (line 459) 38832 * FOR_BODY: Function Bodies. (line 6) 38833 * FOR_COND: Function Bodies. (line 6) 38834 * FOR_EXPR: Function Bodies. (line 6) 38835 * FOR_INIT_STMT: Function Bodies. (line 6) 38836 * FOR_STMT: Function Bodies. (line 6) 38837 * FORCE_CODE_SECTION_ALIGN: Sections. (line 136) 38838 * force_reg: Standard Names. (line 36) 38839 * fract_convert: Conversions. (line 83) 38840 * FRACT_TYPE_SIZE: Type Layout. (line 68) 38841 * fractional types: Fixed-point fractional library routines. 38842 (line 6) 38843 * fractMN2 instruction pattern: Standard Names. (line 829) 38844 * fractunsMN2 instruction pattern: Standard Names. (line 844) 38845 * frame layout: Frame Layout. (line 6) 38846 * FRAME_ADDR_RTX: Frame Layout. (line 116) 38847 * FRAME_GROWS_DOWNWARD: Frame Layout. (line 31) 38848 * FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory. 38849 (line 69) 38850 * FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 212) 38851 * frame_pointer_needed: Function Entry. (line 34) 38852 * FRAME_POINTER_REGNUM: Frame Registers. (line 14) 38853 * FRAME_POINTER_REGNUM and virtual registers: Regs and Memory. 38854 (line 74) 38855 * FRAME_POINTER_REQUIRED: Elimination. (line 9) 38856 * frame_pointer_rtx: Frame Registers. (line 85) 38857 * frame_related: Flags. (line 224) 38858 * frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags. 38859 (line 110) 38860 * frame_related, in mem: Flags. (line 88) 38861 * frame_related, in reg: Flags. (line 97) 38862 * frame_related, in symbol_ref: Flags. (line 168) 38863 * frequency, count, BB_FREQ_BASE: Profile information. 38864 (line 30) 38865 * ftruncM2 instruction pattern: Standard Names. (line 802) 38866 * function: Functions. (line 6) 38867 * function body: Function Bodies. (line 6) 38868 * function call conventions: Interface. (line 6) 38869 * function entry and exit: Function Entry. (line 6) 38870 * function entry point, alternate function entry point: Edges. 38871 (line 180) 38872 * function-call insns: Calls. (line 6) 38873 * FUNCTION_ARG: Register Arguments. (line 11) 38874 * FUNCTION_ARG_ADVANCE: Register Arguments. (line 178) 38875 * FUNCTION_ARG_BOUNDARY: Register Arguments. (line 224) 38876 * FUNCTION_ARG_PADDING: Register Arguments. (line 189) 38877 * FUNCTION_ARG_REGNO_P: Register Arguments. (line 229) 38878 * FUNCTION_BOUNDARY: Storage Layout. (line 165) 38879 * FUNCTION_DECL: Functions. (line 6) 38880 * FUNCTION_INCOMING_ARG: Register Arguments. (line 68) 38881 * FUNCTION_MODE: Misc. (line 356) 38882 * FUNCTION_OUTGOING_VALUE: Scalar Return. (line 56) 38883 * FUNCTION_PROFILER: Profiling. (line 9) 38884 * FUNCTION_TYPE: Types. (line 6) 38885 * FUNCTION_VALUE: Scalar Return. (line 52) 38886 * FUNCTION_VALUE_REGNO_P: Scalar Return. (line 77) 38887 * functions, leaf: Leaf Functions. (line 6) 38888 * fundamental type: Types. (line 6) 38889 * g in constraint: Simple Constraints. (line 108) 38890 * G in constraint: Simple Constraints. (line 86) 38891 * GCC and portability: Portability. (line 6) 38892 * GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 38893 * gcov_type: Profile information. 38894 (line 41) 38895 * ge: Comparisons. (line 72) 38896 * ge and attributes: Expressions. (line 64) 38897 * GE_EXPR: Expression trees. (line 6) 38898 * GEN_ERRNO_RTX: Library Calls. (line 71) 38899 * gencodes: RTL passes. (line 18) 38900 * general_operand: Machine-Independent Predicates. 38901 (line 105) 38902 * GENERAL_REGS: Register Classes. (line 23) 38903 * generated files: Files. (line 6) 38904 * generating assembler output: Output Statement. (line 6) 38905 * generating insns: RTL Template. (line 6) 38906 * GENERIC <1>: GENERIC. (line 6) 38907 * GENERIC <2>: Gimplification pass. 38908 (line 12) 38909 * GENERIC: Parsing pass. (line 6) 38910 * generic predicates: Machine-Independent Predicates. 38911 (line 6) 38912 * genflags: RTL passes. (line 18) 38913 * get_attr: Expressions. (line 80) 38914 * get_attr_length: Insn Lengths. (line 46) 38915 * GET_CLASS_NARROWEST_MODE: Machine Modes. (line 333) 38916 * GET_CODE: RTL Objects. (line 47) 38917 * get_frame_size: Elimination. (line 31) 38918 * get_insns: Insns. (line 34) 38919 * get_last_insn: Insns. (line 34) 38920 * GET_MODE: Machine Modes. (line 280) 38921 * GET_MODE_ALIGNMENT: Machine Modes. (line 320) 38922 * GET_MODE_BITSIZE: Machine Modes. (line 304) 38923 * GET_MODE_CLASS: Machine Modes. (line 294) 38924 * GET_MODE_FBIT: Machine Modes. (line 311) 38925 * GET_MODE_IBIT: Machine Modes. (line 307) 38926 * GET_MODE_MASK: Machine Modes. (line 315) 38927 * GET_MODE_NAME: Machine Modes. (line 291) 38928 * GET_MODE_NUNITS: Machine Modes. (line 329) 38929 * GET_MODE_SIZE: Machine Modes. (line 301) 38930 * GET_MODE_UNIT_SIZE: Machine Modes. (line 323) 38931 * GET_MODE_WIDER_MODE: Machine Modes. (line 297) 38932 * GET_RTX_CLASS: RTL Classes. (line 6) 38933 * GET_RTX_FORMAT: RTL Classes. (line 130) 38934 * GET_RTX_LENGTH: RTL Classes. (line 127) 38935 * geu: Comparisons. (line 72) 38936 * geu and attributes: Expressions. (line 64) 38937 * GGC: Type Information. (line 6) 38938 * GIMPLE <1>: GIMPLE. (line 6) 38939 * GIMPLE <2>: Gimplification pass. 38940 (line 6) 38941 * GIMPLE: Parsing pass. (line 14) 38942 * GIMPLE Example: GIMPLE Example. (line 6) 38943 * GIMPLE Exception Handling: GIMPLE Exception Handling. 38944 (line 6) 38945 * GIMPLE Expressions: GIMPLE Expressions. (line 6) 38946 * gimplification <1>: Interfaces. (line 6) 38947 * gimplification <2>: Gimplification pass. 38948 (line 6) 38949 * gimplification: Parsing pass. (line 14) 38950 * gimplifier: Parsing pass. (line 14) 38951 * gimplify_expr: Gimplification pass. 38952 (line 18) 38953 * gimplify_function_tree: Gimplification pass. 38954 (line 18) 38955 * GLOBAL_INIT_PRIORITY: Function Basics. (line 6) 38956 * global_regs: Register Basics. (line 59) 38957 * GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 48) 38958 * GO_IF_MODE_DEPENDENT_ADDRESS: Addressing Modes. (line 178) 38959 * GOFAST, floating point emulation library: Library Calls. (line 44) 38960 * gofast_maybe_init_libfuncs: Library Calls. (line 44) 38961 * greater than: Comparisons. (line 60) 38962 * gt: Comparisons. (line 60) 38963 * gt and attributes: Expressions. (line 64) 38964 * GT_EXPR: Expression trees. (line 6) 38965 * gtu: Comparisons. (line 64) 38966 * gtu and attributes: Expressions. (line 64) 38967 * GTY: Type Information. (line 6) 38968 * H in constraint: Simple Constraints. (line 86) 38969 * HAmode: Machine Modes. (line 144) 38970 * HANDLE_PRAGMA_PACK_PUSH_POP: Misc. (line 467) 38971 * HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 478) 38972 * HANDLE_PRAGMA_PUSH_POP_MACRO: Misc. (line 488) 38973 * HANDLE_SYSV_PRAGMA: Misc. (line 438) 38974 * HANDLER: Function Bodies. (line 6) 38975 * HANDLER_BODY: Function Bodies. (line 6) 38976 * HANDLER_PARMS: Function Bodies. (line 6) 38977 * hard registers: Regs and Memory. (line 9) 38978 * HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 20) 38979 * HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 53) 38980 * HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 20) 38981 * HARD_REGNO_MODE_OK: Values in Registers. 38982 (line 58) 38983 * HARD_REGNO_NREGS: Values in Registers. 38984 (line 11) 38985 * HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 38986 (line 25) 38987 * HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 38988 (line 43) 38989 * HARD_REGNO_RENAME_OK: Values in Registers. 38990 (line 119) 38991 * HAS_INIT_SECTION: Macros for Initialization. 38992 (line 19) 38993 * HAS_LONG_COND_BRANCH: Misc. (line 9) 38994 * HAS_LONG_UNCOND_BRANCH: Misc. (line 18) 38995 * HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 38996 * HAVE_POST_DECREMENT: Addressing Modes. (line 12) 38997 * HAVE_POST_INCREMENT: Addressing Modes. (line 11) 38998 * HAVE_POST_MODIFY_DISP: Addressing Modes. (line 18) 38999 * HAVE_POST_MODIFY_REG: Addressing Modes. (line 24) 39000 * HAVE_PRE_DECREMENT: Addressing Modes. (line 10) 39001 * HAVE_PRE_INCREMENT: Addressing Modes. (line 9) 39002 * HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 17) 39003 * HAVE_PRE_MODIFY_REG: Addressing Modes. (line 23) 39004 * HCmode: Machine Modes. (line 197) 39005 * HFmode: Machine Modes. (line 58) 39006 * high: Constants. (line 128) 39007 * HImode: Machine Modes. (line 29) 39008 * HImode, in insn: Insns. (line 231) 39009 * host configuration: Host Config. (line 6) 39010 * host functions: Host Common. (line 6) 39011 * host hooks: Host Common. (line 6) 39012 * host makefile fragment: Host Fragment. (line 6) 39013 * HOST_BIT_BUCKET: Filesystem. (line 51) 39014 * HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 39015 * HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 12) 39016 * HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 45) 39017 * HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 26) 39018 * HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 39019 * HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 39020 * HOST_OBJECT_SUFFIX: Filesystem. (line 40) 39021 * HOST_WIDE_INT: Anchored Addresses. (line 33) 39022 * HOT_TEXT_SECTION_NAME: Sections. (line 43) 39023 * HQmode: Machine Modes. (line 107) 39024 * I in constraint: Simple Constraints. (line 69) 39025 * i in constraint: Simple Constraints. (line 58) 39026 * identifier: Identifiers. (line 6) 39027 * IDENTIFIER_LENGTH: Identifiers. (line 20) 39028 * IDENTIFIER_NODE: Identifiers. (line 6) 39029 * IDENTIFIER_OPNAME_P: Identifiers. (line 25) 39030 * IDENTIFIER_POINTER: Identifiers. (line 15) 39031 * IDENTIFIER_TYPENAME_P: Identifiers. (line 31) 39032 * IEEE-754R: Decimal float library routines. 39033 (line 6) 39034 * IEEE_FLOAT_FORMAT: Storage Layout. (line 413) 39035 * IF_COND: Function Bodies. (line 6) 39036 * if_marked: GTY Options. (line 156) 39037 * IF_STMT: Function Bodies. (line 6) 39038 * if_then_else: Comparisons. (line 80) 39039 * if_then_else and attributes: Expressions. (line 32) 39040 * if_then_else usage: Side Effects. (line 56) 39041 * IFCVT_EXTRA_FIELDS: Misc. (line 627) 39042 * IFCVT_INIT_EXTRA_FIELDS: Misc. (line 622) 39043 * IFCVT_MODIFY_CANCEL: Misc. (line 616) 39044 * IFCVT_MODIFY_FINAL: Misc. (line 610) 39045 * IFCVT_MODIFY_INSN: Misc. (line 604) 39046 * IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 597) 39047 * IFCVT_MODIFY_TESTS: Misc. (line 586) 39048 * IMAGPART_EXPR: Expression trees. (line 6) 39049 * Immediate Uses: Statement Operands. (line 274) 39050 * immediate_operand: Machine-Independent Predicates. 39051 (line 11) 39052 * IMMEDIATE_PREFIX: Instruction Output. (line 127) 39053 * in_struct: Flags. (line 240) 39054 * in_struct, in code_label and note: Flags. (line 44) 39055 * in_struct, in insn and jump_insn and call_insn: Flags. (line 34) 39056 * in_struct, in insn, jump_insn and call_insn: Flags. (line 151) 39057 * in_struct, in mem: Flags. (line 55) 39058 * in_struct, in subreg: Flags. (line 190) 39059 * include: Including Patterns. (line 6) 39060 * INCLUDE_DEFAULTS: Driver. (line 430) 39061 * inclusive-or, bitwise: Arithmetic. (line 158) 39062 * INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 183) 39063 * INCOMING_REGNO: Register Basics. (line 91) 39064 * INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 139) 39065 * INDEX_REG_CLASS: Register Classes. (line 134) 39066 * indirect_jump instruction pattern: Standard Names. (line 1072) 39067 * indirect_operand: Machine-Independent Predicates. 39068 (line 71) 39069 * INDIRECT_REF: Expression trees. (line 6) 39070 * INIT_ARRAY_SECTION_ASM_OP: Sections. (line 98) 39071 * INIT_CUMULATIVE_ARGS: Register Arguments. (line 141) 39072 * INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 169) 39073 * INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 162) 39074 * INIT_ENVIRONMENT: Driver. (line 369) 39075 * INIT_EXPANDERS: Per-Function Data. (line 39) 39076 * INIT_EXPR: Expression trees. (line 6) 39077 * init_machine_status: Per-Function Data. (line 45) 39078 * init_one_libfunc: Library Calls. (line 15) 39079 * INIT_SECTION_ASM_OP <1>: Macros for Initialization. 39080 (line 10) 39081 * INIT_SECTION_ASM_OP: Sections. (line 82) 39082 * INITIAL_ELIMINATION_OFFSET: Elimination. (line 79) 39083 * INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 83) 39084 * INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 32) 39085 * initialization routines: Initialization. (line 6) 39086 * INITIALIZE_TRAMPOLINE: Trampolines. (line 55) 39087 * inlining: Target Attributes. (line 86) 39088 * insert_insn_on_edge: Maintaining the CFG. 39089 (line 118) 39090 * insn: Insns. (line 63) 39091 * insn and /f: Flags. (line 110) 39092 * insn and /j: Flags. (line 160) 39093 * insn and /s: Flags. (line 34) 39094 * insn and /u: Flags. (line 24) 39095 * insn and /v: Flags. (line 29) 39096 * insn attributes: Insn Attributes. (line 6) 39097 * insn canonicalization: Insn Canonicalizations. 39098 (line 6) 39099 * insn includes: Including Patterns. (line 6) 39100 * insn lengths, computing: Insn Lengths. (line 6) 39101 * insn splitting: Insn Splitting. (line 6) 39102 * insn-attr.h: Defining Attributes. 39103 (line 24) 39104 * INSN_ANNULLED_BRANCH_P: Flags. (line 24) 39105 * INSN_CODE: Insns. (line 257) 39106 * INSN_DELETED_P: Flags. (line 29) 39107 * INSN_FROM_TARGET_P: Flags. (line 34) 39108 * insn_list: Insns. (line 550) 39109 * INSN_REFERENCES_ARE_DELAYED: Misc. (line 525) 39110 * INSN_SETS_ARE_DELAYED: Misc. (line 514) 39111 * INSN_UID: Insns. (line 23) 39112 * insns: Insns. (line 6) 39113 * insns, generating: RTL Template. (line 6) 39114 * insns, recognizing: RTL Template. (line 6) 39115 * instruction attributes: Insn Attributes. (line 6) 39116 * instruction latency time: Processor pipeline description. 39117 (line 6) 39118 * instruction patterns: Patterns. (line 6) 39119 * instruction splitting: Insn Splitting. (line 6) 39120 * insv instruction pattern: Standard Names. (line 874) 39121 * int: Run-time Target. (line 56) 39122 * INT_TYPE_SIZE: Type Layout. (line 12) 39123 * INTEGER_CST: Expression trees. (line 6) 39124 * INTEGER_TYPE: Types. (line 6) 39125 * Interdependence of Patterns: Dependent Patterns. (line 6) 39126 * interfacing to GCC output: Interface. (line 6) 39127 * interlock delays: Processor pipeline description. 39128 (line 6) 39129 * intermediate representation lowering: Parsing pass. (line 14) 39130 * INTMAX_TYPE: Type Layout. (line 213) 39131 * introduction: Top. (line 6) 39132 * INVOKE__main: Macros for Initialization. 39133 (line 51) 39134 * ior: Arithmetic. (line 158) 39135 * ior and attributes: Expressions. (line 50) 39136 * ior, canonicalization of: Insn Canonicalizations. 39137 (line 57) 39138 * iorM3 instruction pattern: Standard Names. (line 222) 39139 * IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 120) 39140 * iterators in .md files: Iterators. (line 6) 39141 * IV analysis on GIMPLE: Scalar evolutions. (line 6) 39142 * IV analysis on RTL: loop-iv. (line 6) 39143 * jump: Flags. (line 289) 39144 * jump instruction pattern: Standard Names. (line 963) 39145 * jump instruction patterns: Jump Patterns. (line 6) 39146 * jump instructions and set: Side Effects. (line 56) 39147 * jump, in call_insn: Flags. (line 164) 39148 * jump, in insn: Flags. (line 160) 39149 * jump, in mem: Flags. (line 64) 39150 * JUMP_ALIGN: Alignment Output. (line 9) 39151 * jump_insn: Insns. (line 73) 39152 * jump_insn and /f: Flags. (line 110) 39153 * jump_insn and /s: Flags. (line 34) 39154 * jump_insn and /u: Flags. (line 24) 39155 * jump_insn and /v: Flags. (line 29) 39156 * JUMP_LABEL: Insns. (line 80) 39157 * JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 142) 39158 * Jumps: Jumps. (line 6) 39159 * LABEL_ALIGN: Alignment Output. (line 52) 39160 * LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 22) 39161 * LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. (line 30) 39162 * LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 62) 39163 * LABEL_ALT_ENTRY_P: Insns. (line 140) 39164 * LABEL_ALTERNATE_NAME: Edges. (line 180) 39165 * LABEL_DECL: Declarations. (line 6) 39166 * LABEL_KIND: Insns. (line 140) 39167 * LABEL_NUSES: Insns. (line 136) 39168 * LABEL_PRESERVE_P: Flags. (line 44) 39169 * label_ref: Constants. (line 105) 39170 * label_ref and /v: Flags. (line 50) 39171 * label_ref, RTL sharing: Sharing. (line 35) 39172 * LABEL_REF_NONLOCAL_P: Flags. (line 50) 39173 * lang_hooks.gimplify_expr: Gimplification pass. 39174 (line 18) 39175 * lang_hooks.parse_file: Parsing pass. (line 6) 39176 * language-independent intermediate representation: Parsing pass. 39177 (line 14) 39178 * large return values: Aggregate Return. (line 6) 39179 * LARGEST_EXPONENT_IS_NORMAL: Storage Layout. (line 493) 39180 * LAST_STACK_REG: Stack Registers. (line 27) 39181 * LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 39182 * lceilMN2: Standard Names. (line 593) 39183 * LCSSA: LCSSA. (line 6) 39184 * LD_FINI_SWITCH: Macros for Initialization. 39185 (line 29) 39186 * LD_INIT_SWITCH: Macros for Initialization. 39187 (line 25) 39188 * LDD_SUFFIX: Macros for Initialization. 39189 (line 116) 39190 * le: Comparisons. (line 76) 39191 * le and attributes: Expressions. (line 64) 39192 * LE_EXPR: Expression trees. (line 6) 39193 * leaf functions: Leaf Functions. (line 6) 39194 * leaf_function_p: Standard Names. (line 1034) 39195 * LEAF_REG_REMAP: Leaf Functions. (line 39) 39196 * LEAF_REGISTERS: Leaf Functions. (line 25) 39197 * left rotate: Arithmetic. (line 190) 39198 * left shift: Arithmetic. (line 168) 39199 * LEGITIMATE_CONSTANT_P: Addressing Modes. (line 193) 39200 * LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 39201 * LEGITIMIZE_ADDRESS: Addressing Modes. (line 110) 39202 * LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 133) 39203 * length: GTY Options. (line 50) 39204 * less than: Comparisons. (line 68) 39205 * less than or equal: Comparisons. (line 76) 39206 * leu: Comparisons. (line 76) 39207 * leu and attributes: Expressions. (line 64) 39208 * lfloorMN2: Standard Names. (line 588) 39209 * LIB2FUNCS_EXTRA: Target Fragment. (line 11) 39210 * LIB_SPEC: Driver. (line 170) 39211 * LIBCALL_VALUE: Scalar Return. (line 60) 39212 * libgcc.a: Library Calls. (line 6) 39213 * LIBGCC2_CFLAGS: Target Fragment. (line 8) 39214 * LIBGCC2_HAS_DF_MODE: Type Layout. (line 109) 39215 * LIBGCC2_HAS_TF_MODE: Type Layout. (line 123) 39216 * LIBGCC2_HAS_XF_MODE: Type Layout. (line 117) 39217 * LIBGCC2_LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 103) 39218 * LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 922) 39219 * LIBGCC2_WORDS_BIG_ENDIAN: Storage Layout. (line 36) 39220 * LIBGCC_SPEC: Driver. (line 178) 39221 * library subroutine names: Library Calls. (line 6) 39222 * LIBRARY_PATH_ENV: Misc. (line 565) 39223 * LIMIT_RELOAD_CLASS: Register Classes. (line 239) 39224 * Linear loop transformations framework: Lambda. (line 6) 39225 * LINK_COMMAND_SPEC: Driver. (line 299) 39226 * LINK_EH_SPEC: Driver. (line 205) 39227 * LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver. (line 309) 39228 * LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 295) 39229 * LINK_LIBGCC_SPECIAL_1: Driver. (line 290) 39230 * LINK_SPEC: Driver. (line 163) 39231 * linkage: Function Basics. (line 6) 39232 * list: Containers. (line 6) 39233 * Liveness representation: Liveness information. 39234 (line 6) 39235 * lo_sum: Arithmetic. (line 24) 39236 * load address instruction: Simple Constraints. (line 152) 39237 * LOAD_EXTEND_OP: Misc. (line 69) 39238 * load_multiple instruction pattern: Standard Names. (line 137) 39239 * LOCAL_ALIGNMENT: Storage Layout. (line 234) 39240 * LOCAL_CLASS_P: Classes. (line 68) 39241 * LOCAL_INCLUDE_DIR: Driver. (line 376) 39242 * LOCAL_LABEL_PREFIX: Instruction Output. (line 125) 39243 * LOCAL_REGNO: Register Basics. (line 105) 39244 * LOG_LINKS: Insns. (line 276) 39245 * Logical Operators: Logical Operators. (line 6) 39246 * logical-and, bitwise: Arithmetic. (line 153) 39247 * logM2 instruction pattern: Standard Names. (line 501) 39248 * LONG_ACCUM_TYPE_SIZE: Type Layout. (line 93) 39249 * LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 58) 39250 * LONG_FRACT_TYPE_SIZE: Type Layout. (line 73) 39251 * LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 98) 39252 * LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 78) 39253 * LONG_LONG_TYPE_SIZE: Type Layout. (line 33) 39254 * LONG_TYPE_SIZE: Type Layout. (line 22) 39255 * longjmp and automatic variables: Interface. (line 52) 39256 * Loop analysis: Loop representation. 39257 (line 6) 39258 * Loop manipulation: Loop manipulation. (line 6) 39259 * Loop querying: Loop querying. (line 6) 39260 * Loop representation: Loop representation. 39261 (line 6) 39262 * Loop-closed SSA form: LCSSA. (line 6) 39263 * LOOP_ALIGN: Alignment Output. (line 35) 39264 * LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 48) 39265 * LOOP_EXPR: Expression trees. (line 6) 39266 * looping instruction patterns: Looping Patterns. (line 6) 39267 * Loops: Loops. (line 6) 39268 * lowering, language-dependent intermediate representation: Parsing pass. 39269 (line 14) 39270 * lrintMN2: Standard Names. (line 578) 39271 * lroundMN2: Standard Names. (line 583) 39272 * LSHIFT_EXPR: Expression trees. (line 6) 39273 * lshiftrt: Arithmetic. (line 185) 39274 * lshiftrt and attributes: Expressions. (line 64) 39275 * lshrM3 instruction pattern: Standard Names. (line 441) 39276 * lt: Comparisons. (line 68) 39277 * lt and attributes: Expressions. (line 64) 39278 * LT_EXPR: Expression trees. (line 6) 39279 * LTGT_EXPR: Expression trees. (line 6) 39280 * ltu: Comparisons. (line 68) 39281 * m in constraint: Simple Constraints. (line 17) 39282 * machine attributes: Target Attributes. (line 6) 39283 * machine description macros: Target Macros. (line 6) 39284 * machine descriptions: Machine Desc. (line 6) 39285 * machine mode conversions: Conversions. (line 6) 39286 * machine modes: Machine Modes. (line 6) 39287 * machine specific constraints: Machine Constraints. 39288 (line 6) 39289 * machine-independent predicates: Machine-Independent Predicates. 39290 (line 6) 39291 * machine_mode: Condition Code. (line 157) 39292 * macros, target description: Target Macros. (line 6) 39293 * maddMN4 instruction pattern: Standard Names. (line 364) 39294 * MAKE_DECL_ONE_ONLY: Label Output. (line 218) 39295 * make_safe_from: Expander Definitions. 39296 (line 148) 39297 * makefile fragment: Fragments. (line 6) 39298 * makefile targets: Makefile. (line 6) 39299 * mark_hook: GTY Options. (line 171) 39300 * marking roots: GGC Roots. (line 6) 39301 * MASK_RETURN_ADDR: Exception Region Output. 39302 (line 35) 39303 * match_dup <1>: define_peephole2. (line 28) 39304 * match_dup: RTL Template. (line 73) 39305 * match_dup and attributes: Insn Lengths. (line 16) 39306 * match_op_dup: RTL Template. (line 163) 39307 * match_operand: RTL Template. (line 16) 39308 * match_operand and attributes: Expressions. (line 55) 39309 * match_operator: RTL Template. (line 95) 39310 * match_par_dup: RTL Template. (line 219) 39311 * match_parallel: RTL Template. (line 172) 39312 * match_scratch <1>: define_peephole2. (line 28) 39313 * match_scratch: RTL Template. (line 58) 39314 * matching constraint: Simple Constraints. (line 130) 39315 * matching operands: Output Template. (line 49) 39316 * math library: Soft float library routines. 39317 (line 6) 39318 * math, in RTL: Arithmetic. (line 6) 39319 * MATH_LIBRARY: Misc. (line 558) 39320 * matherr: Library Calls. (line 58) 39321 * MAX_BITS_PER_WORD: Storage Layout. (line 61) 39322 * MAX_CONDITIONAL_EXECUTE: Misc. (line 580) 39323 * MAX_FIXED_MODE_SIZE: Storage Layout. (line 370) 39324 * MAX_MOVE_MAX: Misc. (line 120) 39325 * MAX_OFILE_ALIGNMENT: Storage Layout. (line 196) 39326 * MAX_REGS_PER_ADDRESS: Addressing Modes. (line 42) 39327 * maxM3 instruction pattern: Standard Names. (line 234) 39328 * may_trap_p, tree_could_trap_p: Edges. (line 115) 39329 * maybe_undef: GTY Options. (line 179) 39330 * mcount: Profiling. (line 12) 39331 * MD_CAN_REDIRECT_BRANCH: Misc. (line 705) 39332 * MD_EXEC_PREFIX: Driver. (line 330) 39333 * MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 98) 39334 * MD_HANDLE_UNWABI: Exception Handling. (line 118) 39335 * MD_STARTFILE_PREFIX: Driver. (line 358) 39336 * MD_STARTFILE_PREFIX_1: Driver. (line 364) 39337 * MD_UNWIND_SUPPORT: Exception Handling. (line 94) 39338 * mem: Regs and Memory. (line 249) 39339 * mem and /c: Flags. (line 84) 39340 * mem and /f: Flags. (line 88) 39341 * mem and /i: Flags. (line 70) 39342 * mem and /j: Flags. (line 64) 39343 * mem and /s: Flags. (line 55) 39344 * mem and /u: Flags. (line 137) 39345 * mem and /v: Flags. (line 79) 39346 * mem, RTL sharing: Sharing. (line 40) 39347 * MEM_ALIAS_SET: Special Accessors. (line 9) 39348 * MEM_ALIGN: Special Accessors. (line 36) 39349 * MEM_EXPR: Special Accessors. (line 20) 39350 * MEM_IN_STRUCT_P: Flags. (line 55) 39351 * MEM_KEEP_ALIAS_SET_P: Flags. (line 64) 39352 * MEM_NOTRAP_P: Flags. (line 84) 39353 * MEM_OFFSET: Special Accessors. (line 28) 39354 * MEM_POINTER: Flags. (line 88) 39355 * MEM_READONLY_P: Flags. (line 137) 39356 * MEM_SCALAR_P: Flags. (line 70) 39357 * MEM_SIZE: Special Accessors. (line 31) 39358 * MEM_VOLATILE_P: Flags. (line 79) 39359 * MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 350) 39360 * memory reference, nonoffsettable: Simple Constraints. (line 244) 39361 * memory references in constraints: Simple Constraints. (line 17) 39362 * memory_barrier instruction pattern: Standard Names. (line 1407) 39363 * MEMORY_MOVE_COST: Costs. (line 29) 39364 * memory_operand: Machine-Independent Predicates. 39365 (line 58) 39366 * METHOD_TYPE: Types. (line 6) 39367 * MIN_UNITS_PER_WORD: Storage Layout. (line 71) 39368 * MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 174) 39369 * minM3 instruction pattern: Standard Names. (line 234) 39370 * minus: Arithmetic. (line 36) 39371 * minus and attributes: Expressions. (line 64) 39372 * minus, canonicalization of: Insn Canonicalizations. 39373 (line 27) 39374 * MINUS_EXPR: Expression trees. (line 6) 39375 * MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 39376 * mod: Arithmetic. (line 131) 39377 * mod and attributes: Expressions. (line 64) 39378 * mode classes: Machine Modes. (line 219) 39379 * mode iterators in .md files: Mode Iterators. (line 6) 39380 * mode switching: Mode Switching. (line 6) 39381 * MODE_ACCUM: Machine Modes. (line 249) 39382 * MODE_AFTER: Mode Switching. (line 49) 39383 * MODE_BASE_REG_CLASS: Register Classes. (line 112) 39384 * MODE_BASE_REG_REG_CLASS: Register Classes. (line 118) 39385 * MODE_CC: Machine Modes. (line 268) 39386 * MODE_CODE_BASE_REG_CLASS: Register Classes. (line 125) 39387 * MODE_COMPLEX_FLOAT: Machine Modes. (line 260) 39388 * MODE_COMPLEX_INT: Machine Modes. (line 257) 39389 * MODE_DECIMAL_FLOAT: Machine Modes. (line 237) 39390 * MODE_ENTRY: Mode Switching. (line 54) 39391 * MODE_EXIT: Mode Switching. (line 60) 39392 * MODE_FLOAT: Machine Modes. (line 233) 39393 * MODE_FRACT: Machine Modes. (line 241) 39394 * MODE_FUNCTION: Machine Modes. (line 264) 39395 * MODE_HAS_INFINITIES: Storage Layout. (line 441) 39396 * MODE_HAS_NANS: Storage Layout. (line 431) 39397 * MODE_HAS_SIGN_DEPENDENT_ROUNDING: Storage Layout. (line 463) 39398 * MODE_HAS_SIGNED_ZEROS: Storage Layout. (line 447) 39399 * MODE_INT: Machine Modes. (line 225) 39400 * MODE_NEEDED: Mode Switching. (line 42) 39401 * MODE_PARTIAL_INT: Machine Modes. (line 229) 39402 * MODE_PRIORITY_TO_MODE: Mode Switching. (line 66) 39403 * MODE_RANDOM: Machine Modes. (line 273) 39404 * MODE_UACCUM: Machine Modes. (line 253) 39405 * MODE_UFRACT: Machine Modes. (line 245) 39406 * MODES_TIEABLE_P: Values in Registers. 39407 (line 129) 39408 * modifiers in constraints: Modifiers. (line 6) 39409 * MODIFY_EXPR: Expression trees. (line 6) 39410 * MODIFY_JNI_METHOD_CALL: Misc. (line 782) 39411 * MODIFY_TARGET_NAME: Driver. (line 385) 39412 * modM3 instruction pattern: Standard Names. (line 222) 39413 * modulo scheduling: RTL passes. (line 140) 39414 * MOVE_BY_PIECES_P: Costs. (line 104) 39415 * MOVE_MAX: Misc. (line 115) 39416 * MOVE_MAX_PIECES: Costs. (line 110) 39417 * MOVE_RATIO: Costs. (line 91) 39418 * movM instruction pattern: Standard Names. (line 11) 39419 * movmemM instruction pattern: Standard Names. (line 668) 39420 * movmisalignM instruction pattern: Standard Names. (line 126) 39421 * movMODEcc instruction pattern: Standard Names. (line 885) 39422 * movstr instruction pattern: Standard Names. (line 702) 39423 * movstrictM instruction pattern: Standard Names. (line 120) 39424 * msubMN4 instruction pattern: Standard Names. (line 387) 39425 * mulhisi3 instruction pattern: Standard Names. (line 340) 39426 * mulM3 instruction pattern: Standard Names. (line 222) 39427 * mulqihi3 instruction pattern: Standard Names. (line 344) 39428 * mulsidi3 instruction pattern: Standard Names. (line 344) 39429 * mult: Arithmetic. (line 92) 39430 * mult and attributes: Expressions. (line 64) 39431 * mult, canonicalization of: Insn Canonicalizations. 39432 (line 27) 39433 * MULT_EXPR: Expression trees. (line 6) 39434 * MULTILIB_DEFAULTS: Driver. (line 315) 39435 * MULTILIB_DIRNAMES: Target Fragment. (line 64) 39436 * MULTILIB_EXCEPTIONS: Target Fragment. (line 84) 39437 * MULTILIB_EXTRA_OPTS: Target Fragment. (line 96) 39438 * MULTILIB_MATCHES: Target Fragment. (line 77) 39439 * MULTILIB_OPTIONS: Target Fragment. (line 44) 39440 * multiple alternative constraints: Multi-Alternative. (line 6) 39441 * MULTIPLE_SYMBOL_SPACES: Misc. (line 538) 39442 * multiplication: Arithmetic. (line 92) 39443 * multiplication with signed saturation: Arithmetic. (line 92) 39444 * multiplication with unsigned saturation: Arithmetic. (line 92) 39445 * MUST_USE_SJLJ_EXCEPTIONS: Exception Region Output. 39446 (line 64) 39447 * n in constraint: Simple Constraints. (line 63) 39448 * N_REG_CLASSES: Register Classes. (line 76) 39449 * name: Identifiers. (line 6) 39450 * named patterns and conditions: Patterns. (line 47) 39451 * names, pattern: Standard Names. (line 6) 39452 * namespace: Namespaces. (line 6) 39453 * namespace, class, scope: Scopes. (line 6) 39454 * NAMESPACE_DECL <1>: Declarations. (line 6) 39455 * NAMESPACE_DECL: Namespaces. (line 6) 39456 * NATIVE_SYSTEM_HEADER_DIR: Target Fragment. (line 103) 39457 * ne: Comparisons. (line 56) 39458 * ne and attributes: Expressions. (line 64) 39459 * NE_EXPR: Expression trees. (line 6) 39460 * nearbyintM2 instruction pattern: Standard Names. (line 560) 39461 * neg: Arithmetic. (line 81) 39462 * neg and attributes: Expressions. (line 64) 39463 * neg, canonicalization of: Insn Canonicalizations. 39464 (line 27) 39465 * NEGATE_EXPR: Expression trees. (line 6) 39466 * negation: Arithmetic. (line 81) 39467 * negation with signed saturation: Arithmetic. (line 81) 39468 * negation with unsigned saturation: Arithmetic. (line 81) 39469 * negM2 instruction pattern: Standard Names. (line 445) 39470 * nested functions, trampolines for: Trampolines. (line 6) 39471 * nested_ptr: GTY Options. (line 186) 39472 * next_bb, prev_bb, FOR_EACH_BB: Basic Blocks. (line 10) 39473 * next_cc0_user: Jump Patterns. (line 64) 39474 * NEXT_INSN: Insns. (line 30) 39475 * NEXT_OBJC_RUNTIME: Library Calls. (line 94) 39476 * nil: RTL Objects. (line 73) 39477 * NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 39) 39478 * NO_DBX_FUNCTION_END: DBX Hooks. (line 33) 39479 * NO_DBX_GCC_MARKER: File Names and DBX. (line 28) 39480 * NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 23) 39481 * NO_DOLLAR_IN_LABEL: Misc. (line 502) 39482 * NO_DOT_IN_LABEL: Misc. (line 508) 39483 * NO_FUNCTION_CSE: Costs. (line 194) 39484 * NO_IMPLICIT_EXTERN_C: Misc. (line 376) 39485 * NO_PROFILE_COUNTERS: Profiling. (line 28) 39486 * NO_REGS: Register Classes. (line 17) 39487 * NON_LVALUE_EXPR: Expression trees. (line 6) 39488 * nondeterministic finite state automaton: Processor pipeline description. 39489 (line 296) 39490 * nonimmediate_operand: Machine-Independent Predicates. 39491 (line 101) 39492 * nonlocal goto handler: Edges. (line 171) 39493 * nonlocal_goto instruction pattern: Standard Names. (line 1249) 39494 * nonlocal_goto_receiver instruction pattern: Standard Names. 39495 (line 1266) 39496 * nonmemory_operand: Machine-Independent Predicates. 39497 (line 97) 39498 * nonoffsettable memory reference: Simple Constraints. (line 244) 39499 * nop instruction pattern: Standard Names. (line 1067) 39500 * NOP_EXPR: Expression trees. (line 6) 39501 * normal predicates: Predicates. (line 31) 39502 * not: Arithmetic. (line 149) 39503 * not and attributes: Expressions. (line 50) 39504 * not equal: Comparisons. (line 56) 39505 * not, canonicalization of: Insn Canonicalizations. 39506 (line 27) 39507 * note: Insns. (line 168) 39508 * note and /i: Flags. (line 44) 39509 * note and /v: Flags. (line 29) 39510 * NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks. (line 41) 39511 * NOTE_INSN_BLOCK_BEG: Insns. (line 193) 39512 * NOTE_INSN_BLOCK_END: Insns. (line 193) 39513 * NOTE_INSN_DELETED: Insns. (line 183) 39514 * NOTE_INSN_DELETED_LABEL: Insns. (line 188) 39515 * NOTE_INSN_EH_REGION_BEG: Insns. (line 199) 39516 * NOTE_INSN_EH_REGION_END: Insns. (line 199) 39517 * NOTE_INSN_FUNCTION_BEG: Insns. (line 223) 39518 * NOTE_INSN_LOOP_BEG: Insns. (line 207) 39519 * NOTE_INSN_LOOP_CONT: Insns. (line 213) 39520 * NOTE_INSN_LOOP_END: Insns. (line 207) 39521 * NOTE_INSN_LOOP_VTOP: Insns. (line 217) 39522 * NOTE_LINE_NUMBER: Insns. (line 168) 39523 * NOTE_SOURCE_FILE: Insns. (line 168) 39524 * NOTICE_UPDATE_CC: Condition Code. (line 33) 39525 * NUM_MACHINE_MODES: Machine Modes. (line 286) 39526 * NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 39527 * Number of iterations analysis: Number of iterations. 39528 (line 6) 39529 * o in constraint: Simple Constraints. (line 21) 39530 * OBJC_GEN_METHOD_LABEL: Label Output. (line 411) 39531 * OBJC_JBLEN: Misc. (line 917) 39532 * OBJECT_FORMAT_COFF: Macros for Initialization. 39533 (line 97) 39534 * OFFSET_TYPE: Types. (line 6) 39535 * offsettable address: Simple Constraints. (line 21) 39536 * OImode: Machine Modes. (line 51) 39537 * Omega a solver for linear programming problems: Omega. (line 6) 39538 * OMP_ATOMIC: Expression trees. (line 6) 39539 * OMP_CLAUSE: Expression trees. (line 6) 39540 * OMP_CONTINUE: Expression trees. (line 6) 39541 * OMP_CRITICAL: Expression trees. (line 6) 39542 * OMP_FOR: Expression trees. (line 6) 39543 * OMP_MASTER: Expression trees. (line 6) 39544 * OMP_ORDERED: Expression trees. (line 6) 39545 * OMP_PARALLEL: Expression trees. (line 6) 39546 * OMP_RETURN: Expression trees. (line 6) 39547 * OMP_SECTION: Expression trees. (line 6) 39548 * OMP_SECTIONS: Expression trees. (line 6) 39549 * OMP_SINGLE: Expression trees. (line 6) 39550 * one_cmplM2 instruction pattern: Standard Names. (line 647) 39551 * operand access: Accessors. (line 6) 39552 * Operand Access Routines: Statement Operands. (line 119) 39553 * operand constraints: Constraints. (line 6) 39554 * Operand Iterators: Statement Operands. (line 119) 39555 * operand predicates: Predicates. (line 6) 39556 * operand substitution: Output Template. (line 6) 39557 * operands <1>: Patterns. (line 53) 39558 * operands: Statement Operands. (line 6) 39559 * operator predicates: Predicates. (line 6) 39560 * optc-gen.awk: Options. (line 6) 39561 * Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 39562 * OPTIMIZATION_OPTIONS: Run-time Target. (line 120) 39563 * OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 9) 39564 * option specification files: Options. (line 6) 39565 * OPTION_DEFAULT_SPECS: Driver. (line 88) 39566 * optional hardware or system features: Run-time Target. (line 59) 39567 * options, directory search: Including Patterns. (line 44) 39568 * order of register allocation: Allocation Order. (line 6) 39569 * ORDER_REGS_FOR_LOCAL_ALLOC: Allocation Order. (line 23) 39570 * ORDERED_EXPR: Expression trees. (line 6) 39571 * Ordering of Patterns: Pattern Ordering. (line 6) 39572 * ORIGINAL_REGNO: Special Accessors. (line 40) 39573 * other register constraints: Simple Constraints. (line 161) 39574 * OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 70) 39575 * OUTGOING_REGNO: Register Basics. (line 98) 39576 * output of assembler code: File Framework. (line 6) 39577 * output statements: Output Statement. (line 6) 39578 * output templates: Output Template. (line 6) 39579 * OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 39) 39580 * output_asm_insn: Output Statement. (line 53) 39581 * OUTPUT_QUOTED_STRING: File Framework. (line 76) 39582 * OVERLOAD: Functions. (line 6) 39583 * OVERRIDE_OPTIONS: Run-time Target. (line 104) 39584 * OVL_CURRENT: Functions. (line 6) 39585 * OVL_NEXT: Functions. (line 6) 39586 * p in constraint: Simple Constraints. (line 152) 39587 * PAD_VARARGS_DOWN: Register Arguments. (line 206) 39588 * parallel: Side Effects. (line 201) 39589 * param_is: GTY Options. (line 114) 39590 * parameters, c++ abi: C++ ABI. (line 6) 39591 * parameters, miscellaneous: Misc. (line 6) 39592 * parameters, precompiled headers: PCH Target. (line 6) 39593 * paramN_is: GTY Options. (line 132) 39594 * parity: Arithmetic. (line 228) 39595 * parityM2 instruction pattern: Standard Names. (line 641) 39596 * PARM_BOUNDARY: Storage Layout. (line 144) 39597 * PARM_DECL: Declarations. (line 6) 39598 * PARSE_LDD_OUTPUT: Macros for Initialization. 39599 (line 121) 39600 * passes and files of the compiler: Passes. (line 6) 39601 * passing arguments: Interface. (line 36) 39602 * PATH_SEPARATOR: Filesystem. (line 31) 39603 * PATTERN: Insns. (line 247) 39604 * pattern conditions: Patterns. (line 43) 39605 * pattern names: Standard Names. (line 6) 39606 * Pattern Ordering: Pattern Ordering. (line 6) 39607 * patterns: Patterns. (line 6) 39608 * pc: Regs and Memory. (line 236) 39609 * pc and attributes: Insn Lengths. (line 20) 39610 * pc, RTL sharing: Sharing. (line 25) 39611 * PC_REGNUM: Register Basics. (line 112) 39612 * pc_rtx: Regs and Memory. (line 241) 39613 * PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 264) 39614 * PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 64) 39615 * PDImode: Machine Modes. (line 40) 39616 * peephole optimization, RTL representation: Side Effects. (line 235) 39617 * peephole optimizer definitions: Peephole Definitions. 39618 (line 6) 39619 * per-function data: Per-Function Data. (line 6) 39620 * percent sign: Output Template. (line 6) 39621 * PHI nodes: SSA. (line 31) 39622 * PHI_ARG_DEF: SSA. (line 71) 39623 * PHI_ARG_EDGE: SSA. (line 68) 39624 * PHI_ARG_ELT: SSA. (line 63) 39625 * PHI_NUM_ARGS: SSA. (line 59) 39626 * PHI_RESULT: SSA. (line 56) 39627 * PIC: PIC. (line 6) 39628 * PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 26) 39629 * PIC_OFFSET_TABLE_REGNUM: PIC. (line 16) 39630 * pipeline hazard recognizer: Processor pipeline description. 39631 (line 6) 39632 * plus: Arithmetic. (line 14) 39633 * plus and attributes: Expressions. (line 64) 39634 * plus, canonicalization of: Insn Canonicalizations. 39635 (line 27) 39636 * PLUS_EXPR: Expression trees. (line 6) 39637 * Pmode: Misc. (line 344) 39638 * pmode_register_operand: Machine-Independent Predicates. 39639 (line 35) 39640 * pointer: Types. (line 6) 39641 * POINTER_PLUS_EXPR: Expression trees. (line 6) 39642 * POINTER_SIZE: Storage Layout. (line 83) 39643 * POINTER_TYPE: Types. (line 6) 39644 * POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 89) 39645 * pop_operand: Machine-Independent Predicates. 39646 (line 88) 39647 * popcount: Arithmetic. (line 224) 39648 * popcountM2 instruction pattern: Standard Names. (line 635) 39649 * portability: Portability. (line 6) 39650 * position independent code: PIC. (line 6) 39651 * post_dec: Incdec. (line 25) 39652 * post_inc: Incdec. (line 30) 39653 * post_modify: Incdec. (line 33) 39654 * POSTDECREMENT_EXPR: Expression trees. (line 6) 39655 * POSTINCREMENT_EXPR: Expression trees. (line 6) 39656 * POWI_MAX_MULTS: Misc. (line 830) 39657 * powM3 instruction pattern: Standard Names. (line 509) 39658 * pragma: Misc. (line 381) 39659 * pre_dec: Incdec. (line 8) 39660 * PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 110) 39661 * pre_inc: Incdec. (line 22) 39662 * pre_modify: Incdec. (line 51) 39663 * PREDECREMENT_EXPR: Expression trees. (line 6) 39664 * predefined macros: Run-time Target. (line 6) 39665 * predicates: Predicates. (line 6) 39666 * predicates and machine modes: Predicates. (line 31) 39667 * predication: Conditional Execution. 39668 (line 6) 39669 * predict.def: Profile information. 39670 (line 24) 39671 * PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 42) 39672 * PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 231) 39673 * PREFERRED_RELOAD_CLASS: Register Classes. (line 196) 39674 * PREFERRED_STACK_BOUNDARY: Storage Layout. (line 158) 39675 * prefetch: Side Effects. (line 309) 39676 * prefetch instruction pattern: Standard Names. (line 1386) 39677 * PREINCREMENT_EXPR: Expression trees. (line 6) 39678 * presence_set: Processor pipeline description. 39679 (line 215) 39680 * preserving SSA form: SSA. (line 76) 39681 * preserving virtual SSA form: SSA. (line 189) 39682 * prev_active_insn: define_peephole. (line 60) 39683 * prev_cc0_setter: Jump Patterns. (line 64) 39684 * PREV_INSN: Insns. (line 26) 39685 * PRINT_OPERAND: Instruction Output. (line 68) 39686 * PRINT_OPERAND_ADDRESS: Instruction Output. (line 96) 39687 * PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 89) 39688 * processor functional units: Processor pipeline description. 39689 (line 6) 39690 * processor pipeline description: Processor pipeline description. 39691 (line 6) 39692 * product: Arithmetic. (line 92) 39693 * profile feedback: Profile information. 39694 (line 14) 39695 * profile representation: Profile information. 39696 (line 6) 39697 * PROFILE_BEFORE_PROLOGUE: Profiling. (line 35) 39698 * PROFILE_HOOK: Profiling. (line 23) 39699 * profiling, code generation: Profiling. (line 6) 39700 * program counter: Regs and Memory. (line 237) 39701 * prologue: Function Entry. (line 6) 39702 * prologue instruction pattern: Standard Names. (line 1332) 39703 * PROMOTE_FUNCTION_MODE: Storage Layout. (line 123) 39704 * PROMOTE_MODE: Storage Layout. (line 100) 39705 * pseudo registers: Regs and Memory. (line 9) 39706 * PSImode: Machine Modes. (line 32) 39707 * PTRDIFF_TYPE: Type Layout. (line 184) 39708 * PTRMEM_CST: Expression trees. (line 6) 39709 * PTRMEM_CST_CLASS: Expression trees. (line 6) 39710 * PTRMEM_CST_MEMBER: Expression trees. (line 6) 39711 * purge_dead_edges <1>: Maintaining the CFG. 39712 (line 93) 39713 * purge_dead_edges: Edges. (line 104) 39714 * push address instruction: Simple Constraints. (line 152) 39715 * PUSH_ARGS: Stack Arguments. (line 18) 39716 * PUSH_ARGS_REVERSED: Stack Arguments. (line 26) 39717 * push_operand: Machine-Independent Predicates. 39718 (line 81) 39719 * push_reload: Addressing Modes. (line 157) 39720 * PUSH_ROUNDING: Stack Arguments. (line 32) 39721 * pushM1 instruction pattern: Standard Names. (line 209) 39722 * PUT_CODE: RTL Objects. (line 47) 39723 * PUT_MODE: Machine Modes. (line 283) 39724 * PUT_REG_NOTE_KIND: Insns. (line 309) 39725 * PUT_SDB_: SDB and DWARF. (line 63) 39726 * QCmode: Machine Modes. (line 197) 39727 * QFmode: Machine Modes. (line 54) 39728 * QImode: Machine Modes. (line 25) 39729 * QImode, in insn: Insns. (line 231) 39730 * QQmode: Machine Modes. (line 103) 39731 * qualified type: Types. (line 6) 39732 * querying function unit reservations: Processor pipeline description. 39733 (line 90) 39734 * question mark: Multi-Alternative. (line 41) 39735 * quotient: Arithmetic. (line 111) 39736 * r in constraint: Simple Constraints. (line 54) 39737 * RANGE_TEST_NON_SHORT_CIRCUIT: Costs. (line 198) 39738 * RDIV_EXPR: Expression trees. (line 6) 39739 * READONLY_DATA_SECTION_ASM_OP: Sections. (line 63) 39740 * real operands: Statement Operands. (line 6) 39741 * REAL_ARITHMETIC: Floating Point. (line 66) 39742 * REAL_CST: Expression trees. (line 6) 39743 * REAL_LIBGCC_SPEC: Driver. (line 187) 39744 * REAL_NM_FILE_NAME: Macros for Initialization. 39745 (line 106) 39746 * REAL_TYPE: Types. (line 6) 39747 * REAL_VALUE_ABS: Floating Point. (line 82) 39748 * REAL_VALUE_ATOF: Floating Point. (line 50) 39749 * REAL_VALUE_FIX: Floating Point. (line 41) 39750 * REAL_VALUE_FROM_INT: Floating Point. (line 99) 39751 * REAL_VALUE_ISINF: Floating Point. (line 59) 39752 * REAL_VALUE_ISNAN: Floating Point. (line 62) 39753 * REAL_VALUE_NEGATE: Floating Point. (line 79) 39754 * REAL_VALUE_NEGATIVE: Floating Point. (line 56) 39755 * REAL_VALUE_TO_INT: Floating Point. (line 93) 39756 * REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 144) 39757 * REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 142) 39758 * REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 143) 39759 * REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 140) 39760 * REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 141) 39761 * REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 139) 39762 * REAL_VALUE_TRUNCATE: Floating Point. (line 86) 39763 * REAL_VALUE_TYPE: Floating Point. (line 26) 39764 * REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 45) 39765 * REAL_VALUES_EQUAL: Floating Point. (line 32) 39766 * REAL_VALUES_LESS: Floating Point. (line 38) 39767 * REALPART_EXPR: Expression trees. (line 6) 39768 * recog_data.operand: Instruction Output. (line 39) 39769 * recognizing insns: RTL Template. (line 6) 39770 * RECORD_TYPE <1>: Classes. (line 6) 39771 * RECORD_TYPE: Types. (line 6) 39772 * redirect_edge_and_branch: Profile information. 39773 (line 71) 39774 * redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 39775 (line 103) 39776 * reduc_smax_M instruction pattern: Standard Names. (line 240) 39777 * reduc_smin_M instruction pattern: Standard Names. (line 240) 39778 * reduc_splus_M instruction pattern: Standard Names. (line 252) 39779 * reduc_umax_M instruction pattern: Standard Names. (line 246) 39780 * reduc_umin_M instruction pattern: Standard Names. (line 246) 39781 * reduc_uplus_M instruction pattern: Standard Names. (line 258) 39782 * reference: Types. (line 6) 39783 * REFERENCE_TYPE: Types. (line 6) 39784 * reg: Regs and Memory. (line 9) 39785 * reg and /f: Flags. (line 97) 39786 * reg and /i: Flags. (line 92) 39787 * reg and /v: Flags. (line 101) 39788 * reg, RTL sharing: Sharing. (line 17) 39789 * REG_ALLOC_ORDER: Allocation Order. (line 9) 39790 * REG_BR_PRED: Insns. (line 530) 39791 * REG_BR_PROB: Insns. (line 524) 39792 * REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 39793 (line 82) 39794 * REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 39795 (line 52) 39796 * REG_CC_SETTER: Insns. (line 495) 39797 * REG_CC_USER: Insns. (line 495) 39798 * REG_CLASS_CONTENTS: Register Classes. (line 86) 39799 * reg_class_contents: Register Basics. (line 59) 39800 * REG_CLASS_FROM_CONSTRAINT: Old Constraints. (line 35) 39801 * REG_CLASS_FROM_LETTER: Old Constraints. (line 27) 39802 * REG_CLASS_NAMES: Register Classes. (line 81) 39803 * REG_CROSSING_JUMP: Insns. (line 384) 39804 * REG_DEAD: Insns. (line 320) 39805 * REG_DEAD, REG_UNUSED: Liveness information. 39806 (line 32) 39807 * REG_DEP_ANTI: Insns. (line 517) 39808 * REG_DEP_OUTPUT: Insns. (line 513) 39809 * REG_DEP_TRUE: Insns. (line 510) 39810 * REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 110) 39811 * REG_EQUAL: Insns. (line 400) 39812 * REG_EQUIV: Insns. (line 400) 39813 * REG_EXPR: Special Accessors. (line 46) 39814 * REG_FRAME_RELATED_EXPR: Insns. (line 536) 39815 * REG_FUNCTION_VALUE_P: Flags. (line 92) 39816 * REG_INC: Insns. (line 336) 39817 * reg_label and /v: Flags. (line 50) 39818 * REG_LABEL_OPERAND: Insns. (line 366) 39819 * REG_LABEL_TARGET: Insns. (line 375) 39820 * REG_LIBCALL: Insns. (line 488) 39821 * REG_LIBCALL_ID: Insns. (line 541) 39822 * reg_names <1>: Instruction Output. (line 80) 39823 * reg_names: Register Basics. (line 59) 39824 * REG_NO_CONFLICT: Insns. (line 350) 39825 * REG_NONNEG: Insns. (line 342) 39826 * REG_NOTE_KIND: Insns. (line 309) 39827 * REG_NOTES: Insns. (line 283) 39828 * REG_OFFSET: Special Accessors. (line 50) 39829 * REG_OK_STRICT: Addressing Modes. (line 67) 39830 * REG_PARM_STACK_SPACE: Stack Arguments. (line 56) 39831 * REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments. 39832 (line 52) 39833 * REG_POINTER: Flags. (line 97) 39834 * REG_RETVAL: Insns. (line 472) 39835 * REG_SETJMP: Insns. (line 394) 39836 * REG_UNUSED: Insns. (line 329) 39837 * REG_USERVAR_P: Flags. (line 101) 39838 * regclass_for_constraint: C Constraint Interface. 39839 (line 60) 39840 * register allocation order: Allocation Order. (line 6) 39841 * register class definitions: Register Classes. (line 6) 39842 * register class preference constraints: Class Preferences. (line 6) 39843 * register pairs: Values in Registers. 39844 (line 69) 39845 * Register Transfer Language (RTL): RTL. (line 6) 39846 * register usage: Registers. (line 6) 39847 * REGISTER_MOVE_COST: Costs. (line 10) 39848 * REGISTER_NAMES: Instruction Output. (line 9) 39849 * register_operand: Machine-Independent Predicates. 39850 (line 30) 39851 * REGISTER_PREFIX: Instruction Output. (line 124) 39852 * REGISTER_TARGET_PRAGMAS: Misc. (line 382) 39853 * registers arguments: Register Arguments. (line 6) 39854 * registers in constraints: Simple Constraints. (line 54) 39855 * REGMODE_NATURAL_SIZE: Values in Registers. 39856 (line 50) 39857 * REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 170) 39858 * REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 146) 39859 * REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 157) 39860 * REGNO_OK_FOR_BASE_P: Register Classes. (line 140) 39861 * REGNO_OK_FOR_INDEX_P: Register Classes. (line 181) 39862 * REGNO_REG_CLASS: Register Classes. (line 101) 39863 * regs_ever_live: Function Entry. (line 21) 39864 * regular expressions: Processor pipeline description. 39865 (line 6) 39866 * relative costs: Costs. (line 6) 39867 * RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 325) 39868 * reload pass: Regs and Memory. (line 148) 39869 * reload_completed: Standard Names. (line 1034) 39870 * reload_in instruction pattern: Standard Names. (line 99) 39871 * reload_in_progress: Standard Names. (line 57) 39872 * reload_out instruction pattern: Standard Names. (line 99) 39873 * reloading: RTL passes. (line 181) 39874 * remainder: Arithmetic. (line 131) 39875 * remainderM3 instruction pattern: Standard Names. (line 468) 39876 * reorder: GTY Options. (line 210) 39877 * representation of RTL: RTL. (line 6) 39878 * reservation delays: Processor pipeline description. 39879 (line 6) 39880 * rest_of_decl_compilation: Parsing pass. (line 52) 39881 * rest_of_type_compilation: Parsing pass. (line 52) 39882 * restore_stack_block instruction pattern: Standard Names. (line 1168) 39883 * restore_stack_function instruction pattern: Standard Names. 39884 (line 1168) 39885 * restore_stack_nonlocal instruction pattern: Standard Names. 39886 (line 1168) 39887 * RESULT_DECL: Declarations. (line 6) 39888 * return: Side Effects. (line 72) 39889 * return instruction pattern: Standard Names. (line 1021) 39890 * return values in registers: Scalar Return. (line 6) 39891 * RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 135) 39892 * RETURN_ADDR_OFFSET: Exception Handling. (line 60) 39893 * RETURN_ADDR_RTX: Frame Layout. (line 124) 39894 * RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 51) 39895 * RETURN_EXPR: Function Bodies. (line 6) 39896 * RETURN_POPS_ARGS: Stack Arguments. (line 88) 39897 * RETURN_STMT: Function Bodies. (line 6) 39898 * return_val: Flags. (line 276) 39899 * return_val, in mem: Flags. (line 70) 39900 * return_val, in reg: Flags. (line 92) 39901 * return_val, in symbol_ref: Flags. (line 205) 39902 * returning aggregate values: Aggregate Return. (line 6) 39903 * returning structures and unions: Interface. (line 10) 39904 * reverse probability: Profile information. 39905 (line 66) 39906 * REVERSE_CONDEXEC_PREDICATES_P: Condition Code. (line 129) 39907 * REVERSE_CONDITION: Condition Code. (line 116) 39908 * REVERSIBLE_CC_MODE: Condition Code. (line 102) 39909 * right rotate: Arithmetic. (line 190) 39910 * right shift: Arithmetic. (line 185) 39911 * rintM2 instruction pattern: Standard Names. (line 568) 39912 * RISC: Processor pipeline description. 39913 (line 6) 39914 * roots, marking: GGC Roots. (line 6) 39915 * rotate: Arithmetic. (line 190) 39916 * rotatert: Arithmetic. (line 190) 39917 * rotlM3 instruction pattern: Standard Names. (line 441) 39918 * rotrM3 instruction pattern: Standard Names. (line 441) 39919 * Rough GIMPLE Grammar: Rough GIMPLE Grammar. 39920 (line 6) 39921 * ROUND_DIV_EXPR: Expression trees. (line 6) 39922 * ROUND_MOD_EXPR: Expression trees. (line 6) 39923 * ROUND_TOWARDS_ZERO: Storage Layout. (line 472) 39924 * ROUND_TYPE_ALIGN: Storage Layout. (line 361) 39925 * roundM2 instruction pattern: Standard Names. (line 544) 39926 * RSHIFT_EXPR: Expression trees. (line 6) 39927 * RTL addition: Arithmetic. (line 14) 39928 * RTL addition with signed saturation: Arithmetic. (line 14) 39929 * RTL addition with unsigned saturation: Arithmetic. (line 14) 39930 * RTL classes: RTL Classes. (line 6) 39931 * RTL comparison: Arithmetic. (line 43) 39932 * RTL comparison operations: Comparisons. (line 6) 39933 * RTL constant expression types: Constants. (line 6) 39934 * RTL constants: Constants. (line 6) 39935 * RTL declarations: RTL Declarations. (line 6) 39936 * RTL difference: Arithmetic. (line 36) 39937 * RTL expression: RTL Objects. (line 6) 39938 * RTL expressions for arithmetic: Arithmetic. (line 6) 39939 * RTL format: RTL Classes. (line 71) 39940 * RTL format characters: RTL Classes. (line 76) 39941 * RTL function-call insns: Calls. (line 6) 39942 * RTL insn template: RTL Template. (line 6) 39943 * RTL integers: RTL Objects. (line 6) 39944 * RTL memory expressions: Regs and Memory. (line 6) 39945 * RTL object types: RTL Objects. (line 6) 39946 * RTL postdecrement: Incdec. (line 6) 39947 * RTL postincrement: Incdec. (line 6) 39948 * RTL predecrement: Incdec. (line 6) 39949 * RTL preincrement: Incdec. (line 6) 39950 * RTL register expressions: Regs and Memory. (line 6) 39951 * RTL representation: RTL. (line 6) 39952 * RTL side effect expressions: Side Effects. (line 6) 39953 * RTL strings: RTL Objects. (line 6) 39954 * RTL structure sharing assumptions: Sharing. (line 6) 39955 * RTL subtraction: Arithmetic. (line 36) 39956 * RTL subtraction with signed saturation: Arithmetic. (line 36) 39957 * RTL subtraction with unsigned saturation: Arithmetic. (line 36) 39958 * RTL sum: Arithmetic. (line 14) 39959 * RTL vectors: RTL Objects. (line 6) 39960 * RTX (See RTL): RTL Objects. (line 6) 39961 * RTX codes, classes of: RTL Classes. (line 6) 39962 * RTX_FRAME_RELATED_P: Flags. (line 110) 39963 * run-time conventions: Interface. (line 6) 39964 * run-time target specification: Run-time Target. (line 6) 39965 * s in constraint: Simple Constraints. (line 90) 39966 * same_type_p: Types. (line 148) 39967 * SAmode: Machine Modes. (line 148) 39968 * sat_fract: Conversions. (line 91) 39969 * satfractMN2 instruction pattern: Standard Names. (line 837) 39970 * satfractunsMN2 instruction pattern: Standard Names. (line 850) 39971 * satisfies_constraint_: C Constraint Interface. 39972 (line 47) 39973 * SAVE_EXPR: Expression trees. (line 6) 39974 * save_stack_block instruction pattern: Standard Names. (line 1168) 39975 * save_stack_function instruction pattern: Standard Names. (line 1168) 39976 * save_stack_nonlocal instruction pattern: Standard Names. (line 1168) 39977 * SBSS_SECTION_ASM_OP: Sections. (line 77) 39978 * Scalar evolutions: Scalar evolutions. (line 6) 39979 * scalars, returned as values: Scalar Return. (line 6) 39980 * SCHED_GROUP_P: Flags. (line 151) 39981 * SCmode: Machine Modes. (line 197) 39982 * sCOND instruction pattern: Standard Names. (line 905) 39983 * scratch: Regs and Memory. (line 173) 39984 * scratch operands: Regs and Memory. (line 173) 39985 * scratch, RTL sharing: Sharing. (line 35) 39986 * scratch_operand: Machine-Independent Predicates. 39987 (line 50) 39988 * SDATA_SECTION_ASM_OP: Sections. (line 58) 39989 * SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 81) 39990 * SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 76) 39991 * SDB_DEBUGGING_INFO: SDB and DWARF. (line 9) 39992 * SDB_DELIM: SDB and DWARF. (line 69) 39993 * SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 86) 39994 * SDmode: Machine Modes. (line 85) 39995 * sdot_prodM instruction pattern: Standard Names. (line 264) 39996 * search options: Including Patterns. (line 44) 39997 * SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 335) 39998 * SECONDARY_MEMORY_NEEDED: Register Classes. (line 391) 39999 * SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 410) 40000 * SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 401) 40001 * SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 336) 40002 * SECONDARY_RELOAD_CLASS: Register Classes. (line 334) 40003 * SELECT_CC_MODE: Condition Code. (line 68) 40004 * Selection Statements: Selection Statements. 40005 (line 6) 40006 * sequence: Side Effects. (line 251) 40007 * set: Side Effects. (line 15) 40008 * set and /f: Flags. (line 110) 40009 * SET_ASM_OP: Label Output. (line 378) 40010 * set_attr: Tagging Insns. (line 31) 40011 * set_attr_alternative: Tagging Insns. (line 49) 40012 * SET_BY_PIECES_P: Costs. (line 139) 40013 * SET_DEST: Side Effects. (line 69) 40014 * SET_IS_RETURN_P: Flags. (line 160) 40015 * SET_LABEL_KIND: Insns. (line 140) 40016 * set_optab_libfunc: Library Calls. (line 15) 40017 * SET_RATIO: Costs. (line 130) 40018 * SET_SRC: Side Effects. (line 69) 40019 * SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 40020 * setmemM instruction pattern: Standard Names. (line 710) 40021 * SETUP_FRAME_ADDRESSES: Frame Layout. (line 102) 40022 * SF_SIZE: Type Layout. (line 129) 40023 * SFmode: Machine Modes. (line 66) 40024 * sharing of RTL components: Sharing. (line 6) 40025 * shift: Arithmetic. (line 168) 40026 * SHIFT_COUNT_TRUNCATED: Misc. (line 127) 40027 * SHLIB_SUFFIX: Macros for Initialization. 40028 (line 129) 40029 * SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 83) 40030 * SHORT_FRACT_TYPE_SIZE: Type Layout. (line 63) 40031 * SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 96) 40032 * SHORT_TYPE_SIZE: Type Layout. (line 16) 40033 * sibcall_epilogue instruction pattern: Standard Names. (line 1358) 40034 * sibling call: Edges. (line 122) 40035 * SIBLING_CALL_P: Flags. (line 164) 40036 * sign_extend: Conversions. (line 23) 40037 * sign_extract: Bit-Fields. (line 8) 40038 * sign_extract, canonicalization of: Insn Canonicalizations. 40039 (line 96) 40040 * signed division: Arithmetic. (line 111) 40041 * signed division with signed saturation: Arithmetic. (line 111) 40042 * signed maximum: Arithmetic. (line 136) 40043 * signed minimum: Arithmetic. (line 136) 40044 * SImode: Machine Modes. (line 37) 40045 * simple constraints: Simple Constraints. (line 6) 40046 * sincos math function, implicit usage: Library Calls. (line 84) 40047 * sinM2 instruction pattern: Standard Names. (line 485) 40048 * SIZE_ASM_OP: Label Output. (line 23) 40049 * SIZE_TYPE: Type Layout. (line 168) 40050 * skip: GTY Options. (line 77) 40051 * SLOW_BYTE_ACCESS: Costs. (line 60) 40052 * SLOW_UNALIGNED_ACCESS: Costs. (line 75) 40053 * SMALL_REGISTER_CLASSES: Register Classes. (line 433) 40054 * smax: Arithmetic. (line 136) 40055 * smin: Arithmetic. (line 136) 40056 * sms, swing, software pipelining: RTL passes. (line 140) 40057 * smulM3_highpart instruction pattern: Standard Names. (line 356) 40058 * soft float library: Soft float library routines. 40059 (line 6) 40060 * special: GTY Options. (line 230) 40061 * special predicates: Predicates. (line 31) 40062 * SPECS: Target Fragment. (line 108) 40063 * speed of instructions: Costs. (line 6) 40064 * split_block: Maintaining the CFG. 40065 (line 110) 40066 * splitting instructions: Insn Splitting. (line 6) 40067 * SQmode: Machine Modes. (line 111) 40068 * sqrt: Arithmetic. (line 198) 40069 * sqrtM2 instruction pattern: Standard Names. (line 451) 40070 * square root: Arithmetic. (line 198) 40071 * ss_ashift: Arithmetic. (line 168) 40072 * ss_div: Arithmetic. (line 111) 40073 * ss_minus: Arithmetic. (line 36) 40074 * ss_mult: Arithmetic. (line 92) 40075 * ss_neg: Arithmetic. (line 81) 40076 * ss_plus: Arithmetic. (line 14) 40077 * ss_truncate: Conversions. (line 43) 40078 * SSA: SSA. (line 6) 40079 * SSA_NAME_DEF_STMT: SSA. (line 224) 40080 * SSA_NAME_VERSION: SSA. (line 229) 40081 * ssaddM3 instruction pattern: Standard Names. (line 222) 40082 * ssashlM3 instruction pattern: Standard Names. (line 431) 40083 * ssdivM3 instruction pattern: Standard Names. (line 222) 40084 * ssmaddMN4 instruction pattern: Standard Names. (line 379) 40085 * ssmsubMN4 instruction pattern: Standard Names. (line 403) 40086 * ssmulM3 instruction pattern: Standard Names. (line 222) 40087 * ssnegM2 instruction pattern: Standard Names. (line 445) 40088 * sssubM3 instruction pattern: Standard Names. (line 222) 40089 * ssum_widenM3 instruction pattern: Standard Names. (line 274) 40090 * stack arguments: Stack Arguments. (line 6) 40091 * stack frame layout: Frame Layout. (line 6) 40092 * stack smashing protection: Stack Smashing Protection. 40093 (line 6) 40094 * STACK_ALIGNMENT_NEEDED: Frame Layout. (line 48) 40095 * STACK_BOUNDARY: Storage Layout. (line 150) 40096 * STACK_CHECK_BUILTIN: Stack Checking. (line 29) 40097 * STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 64) 40098 * STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 55) 40099 * STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 71) 40100 * STACK_CHECK_PROBE_INTERVAL: Stack Checking. (line 37) 40101 * STACK_CHECK_PROBE_LOAD: Stack Checking. (line 44) 40102 * STACK_CHECK_PROTECT: Stack Checking. (line 50) 40103 * STACK_DYNAMIC_OFFSET: Frame Layout. (line 75) 40104 * STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory. 40105 (line 83) 40106 * STACK_GROWS_DOWNWARD: Frame Layout. (line 9) 40107 * STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 79) 40108 * STACK_POINTER_OFFSET: Frame Layout. (line 58) 40109 * STACK_POINTER_OFFSET and virtual registers: Regs and Memory. 40110 (line 93) 40111 * STACK_POINTER_REGNUM: Frame Registers. (line 9) 40112 * STACK_POINTER_REGNUM and virtual registers: Regs and Memory. 40113 (line 83) 40114 * stack_pointer_rtx: Frame Registers. (line 85) 40115 * stack_protect_set instruction pattern: Standard Names. (line 1530) 40116 * stack_protect_test instruction pattern: Standard Names. (line 1540) 40117 * STACK_PUSH_CODE: Frame Layout. (line 17) 40118 * STACK_REGS: Stack Registers. (line 20) 40119 * STACK_SAVEAREA_MODE: Storage Layout. (line 377) 40120 * STACK_SIZE_MODE: Storage Layout. (line 389) 40121 * standard pattern names: Standard Names. (line 6) 40122 * STANDARD_INCLUDE_COMPONENT: Driver. (line 425) 40123 * STANDARD_INCLUDE_DIR: Driver. (line 417) 40124 * STANDARD_STARTFILE_PREFIX: Driver. (line 337) 40125 * STANDARD_STARTFILE_PREFIX_1: Driver. (line 344) 40126 * STANDARD_STARTFILE_PREFIX_2: Driver. (line 351) 40127 * STARTFILE_SPEC: Driver. (line 210) 40128 * STARTING_FRAME_OFFSET: Frame Layout. (line 39) 40129 * STARTING_FRAME_OFFSET and virtual registers: Regs and Memory. 40130 (line 74) 40131 * Statement Sequences: Statement Sequences. 40132 (line 6) 40133 * Statements: Statements. (line 6) 40134 * statements: Function Bodies. (line 6) 40135 * Static profile estimation: Profile information. 40136 (line 24) 40137 * static single assignment: SSA. (line 6) 40138 * STATIC_CHAIN: Frame Registers. (line 77) 40139 * STATIC_CHAIN_INCOMING: Frame Registers. (line 78) 40140 * STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 64) 40141 * STATIC_CHAIN_REGNUM: Frame Registers. (line 63) 40142 * stdarg.h and register arguments: Register Arguments. (line 47) 40143 * STDC_0_IN_SYSTEM_HEADERS: Misc. (line 365) 40144 * STMT_EXPR: Expression trees. (line 6) 40145 * STMT_IS_FULL_EXPR_P: Function Bodies. (line 22) 40146 * storage layout: Storage Layout. (line 6) 40147 * STORE_BY_PIECES_P: Costs. (line 146) 40148 * STORE_FLAG_VALUE: Misc. (line 216) 40149 * store_multiple instruction pattern: Standard Names. (line 160) 40150 * strcpy: Storage Layout. (line 215) 40151 * STRICT_ALIGNMENT: Storage Layout. (line 259) 40152 * strict_low_part: RTL Declarations. (line 9) 40153 * strict_memory_address_p: Addressing Modes. (line 167) 40154 * STRING_CST: Expression trees. (line 6) 40155 * STRING_POOL_ADDRESS_P: Flags. (line 168) 40156 * strlenM instruction pattern: Standard Names. (line 772) 40157 * structure value address: Aggregate Return. (line 6) 40158 * STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 251) 40159 * structures, returning: Interface. (line 10) 40160 * subM3 instruction pattern: Standard Names. (line 222) 40161 * SUBOBJECT: Function Bodies. (line 6) 40162 * SUBOBJECT_CLEANUP: Function Bodies. (line 6) 40163 * subreg: Regs and Memory. (line 97) 40164 * subreg and /s: Flags. (line 190) 40165 * subreg and /u: Flags. (line 183) 40166 * subreg and /u and /v: Flags. (line 173) 40167 * subreg, in strict_low_part: RTL Declarations. (line 9) 40168 * subreg, special reload handling: Regs and Memory. (line 148) 40169 * SUBREG_BYTE: Regs and Memory. (line 169) 40170 * SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 173) 40171 * SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 183) 40172 * SUBREG_PROMOTED_VAR_P: Flags. (line 190) 40173 * SUBREG_REG: Regs and Memory. (line 169) 40174 * SUCCESS_EXIT_CODE: Host Misc. (line 12) 40175 * SUPPORTS_INIT_PRIORITY: Macros for Initialization. 40176 (line 58) 40177 * SUPPORTS_ONE_ONLY: Label Output. (line 227) 40178 * SUPPORTS_WEAK: Label Output. (line 208) 40179 * SWITCH_BODY: Function Bodies. (line 6) 40180 * SWITCH_COND: Function Bodies. (line 6) 40181 * SWITCH_CURTAILS_COMPILATION: Driver. (line 33) 40182 * SWITCH_STMT: Function Bodies. (line 6) 40183 * SWITCH_TAKES_ARG: Driver. (line 9) 40184 * SWITCHES_NEED_SPACES: Driver. (line 47) 40185 * SYMBOL_FLAG_ANCHOR: Special Accessors. (line 106) 40186 * SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 88) 40187 * SYMBOL_FLAG_FUNCTION: Special Accessors. (line 81) 40188 * SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 102) 40189 * SYMBOL_FLAG_LOCAL: Special Accessors. (line 84) 40190 * SYMBOL_FLAG_SMALL: Special Accessors. (line 93) 40191 * SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 97) 40192 * symbol_ref: Constants. (line 95) 40193 * symbol_ref and /f: Flags. (line 168) 40194 * symbol_ref and /i: Flags. (line 205) 40195 * symbol_ref and /u: Flags. (line 10) 40196 * symbol_ref and /v: Flags. (line 209) 40197 * symbol_ref, RTL sharing: Sharing. (line 20) 40198 * SYMBOL_REF_ANCHOR_P: Special Accessors. (line 106) 40199 * SYMBOL_REF_BLOCK: Special Accessors. (line 119) 40200 * SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 124) 40201 * SYMBOL_REF_CONSTANT: Special Accessors. (line 67) 40202 * SYMBOL_REF_DATA: Special Accessors. (line 71) 40203 * SYMBOL_REF_DECL: Special Accessors. (line 55) 40204 * SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 88) 40205 * SYMBOL_REF_FLAG: Flags. (line 209) 40206 * SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 259) 40207 * SYMBOL_REF_FLAGS: Special Accessors. (line 75) 40208 * SYMBOL_REF_FUNCTION_P: Special Accessors. (line 81) 40209 * SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 102) 40210 * SYMBOL_REF_LOCAL_P: Special Accessors. (line 84) 40211 * SYMBOL_REF_SMALL_P: Special Accessors. (line 93) 40212 * SYMBOL_REF_TLS_MODEL: Special Accessors. (line 97) 40213 * SYMBOL_REF_USED: Flags. (line 200) 40214 * SYMBOL_REF_WEAK: Flags. (line 205) 40215 * symbolic label: Sharing. (line 20) 40216 * sync_addMODE instruction pattern: Standard Names. (line 1444) 40217 * sync_andMODE instruction pattern: Standard Names. (line 1444) 40218 * sync_compare_and_swap_ccMODE instruction pattern: Standard Names. 40219 (line 1431) 40220 * sync_compare_and_swapMODE instruction pattern: Standard Names. 40221 (line 1413) 40222 * sync_iorMODE instruction pattern: Standard Names. (line 1444) 40223 * sync_lock_releaseMODE instruction pattern: Standard Names. (line 1511) 40224 * sync_lock_test_and_setMODE instruction pattern: Standard Names. 40225 (line 1485) 40226 * sync_nandMODE instruction pattern: Standard Names. (line 1444) 40227 * sync_new_addMODE instruction pattern: Standard Names. (line 1478) 40228 * sync_new_andMODE instruction pattern: Standard Names. (line 1478) 40229 * sync_new_iorMODE instruction pattern: Standard Names. (line 1478) 40230 * sync_new_nandMODE instruction pattern: Standard Names. (line 1478) 40231 * sync_new_subMODE instruction pattern: Standard Names. (line 1478) 40232 * sync_new_xorMODE instruction pattern: Standard Names. (line 1478) 40233 * sync_old_addMODE instruction pattern: Standard Names. (line 1461) 40234 * sync_old_andMODE instruction pattern: Standard Names. (line 1461) 40235 * sync_old_iorMODE instruction pattern: Standard Names. (line 1461) 40236 * sync_old_nandMODE instruction pattern: Standard Names. (line 1461) 40237 * sync_old_subMODE instruction pattern: Standard Names. (line 1461) 40238 * sync_old_xorMODE instruction pattern: Standard Names. (line 1461) 40239 * sync_subMODE instruction pattern: Standard Names. (line 1444) 40240 * sync_xorMODE instruction pattern: Standard Names. (line 1444) 40241 * SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 239) 40242 * SYSROOT_SUFFIX_SPEC: Driver. (line 234) 40243 * SYSTEM_INCLUDE_DIR: Driver. (line 408) 40244 * t-TARGET: Target Fragment. (line 6) 40245 * table jump: Basic Blocks. (line 57) 40246 * tablejump instruction pattern: Standard Names. (line 1096) 40247 * tag: GTY Options. (line 82) 40248 * tagging insns: Tagging Insns. (line 6) 40249 * tail calls: Tail Calls. (line 6) 40250 * TAmode: Machine Modes. (line 156) 40251 * target attributes: Target Attributes. (line 6) 40252 * target description macros: Target Macros. (line 6) 40253 * target functions: Target Structure. (line 6) 40254 * target hooks: Target Structure. (line 6) 40255 * target makefile fragment: Target Fragment. (line 6) 40256 * target specifications: Run-time Target. (line 6) 40257 * TARGET_ADDRESS_COST: Costs. (line 230) 40258 * TARGET_ALIGN_ANON_BITFIELDS: Storage Layout. (line 336) 40259 * TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 720) 40260 * TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 83) 40261 * TARGET_ARM_EABI_UNWINDER: Exception Region Output. 40262 (line 113) 40263 * TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 10) 40264 * TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 8) 40265 * TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 9) 40266 * TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 11) 40267 * TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 239) 40268 * TARGET_ASM_BYTE_OP: Data Output. (line 7) 40269 * TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 237) 40270 * TARGET_ASM_CLOSE_PAREN: Data Output. (line 130) 40271 * TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 40272 (line 69) 40273 * TARGET_ASM_DESTRUCTOR: Macros for Initialization. 40274 (line 83) 40275 * TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 74) 40276 * TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 63) 40277 * TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 274) 40278 * TARGET_ASM_FILE_END: File Framework. (line 37) 40279 * TARGET_ASM_FILE_START: File Framework. (line 9) 40280 * TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 17) 40281 * TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 31) 40282 * TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 61) 40283 * TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 55) 40284 * TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 68) 40285 * TARGET_ASM_FUNCTION_EPILOGUE and trampolines: Trampolines. (line 70) 40286 * TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 11) 40287 * TARGET_ASM_FUNCTION_PROLOGUE and trampolines: Trampolines. (line 70) 40288 * TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 206) 40289 * TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 174) 40290 * TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 165) 40291 * TARGET_ASM_INIT_SECTIONS: Sections. (line 151) 40292 * TARGET_ASM_INTEGER: Data Output. (line 27) 40293 * TARGET_ASM_INTERNAL_LABEL: Label Output. (line 309) 40294 * TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 280) 40295 * TARGET_ASM_NAMED_SECTION: File Framework. (line 89) 40296 * TARGET_ASM_OPEN_PAREN: Data Output. (line 129) 40297 * TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 44) 40298 * TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 58) 40299 * TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 195) 40300 * TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 122) 40301 * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 166) 40302 * TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 214) 40303 * TARGET_ASM_SELECT_SECTION: Sections. (line 172) 40304 * TARGET_ASM_TTYPE: Exception Region Output. 40305 (line 107) 40306 * TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 14) 40307 * TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 12) 40308 * TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 13) 40309 * TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 15) 40310 * TARGET_ASM_UNIQUE_SECTION: Sections. (line 193) 40311 * TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 11) 40312 * TARGET_BINDS_LOCAL_P: Sections. (line 284) 40313 * TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 816) 40314 * TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 808) 40315 * TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 249) 40316 * TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 228) 40317 * TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 109) 40318 * TARGET_C99_FUNCTIONS: Library Calls. (line 77) 40319 * TARGET_CALLEE_COPIES: Register Arguments. (line 115) 40320 * TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 209) 40321 * TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 795) 40322 * TARGET_COMMUTATIVE_P: Misc. (line 713) 40323 * TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 19) 40324 * TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 9) 40325 * TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 87) 40326 * TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 38) 40327 * TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 62) 40328 * TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 25) 40329 * TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 54) 40330 * TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 18) 40331 * TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 12) 40332 * TARGET_CXX_GUARD_TYPE: C++ ABI. (line 7) 40333 * TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 30) 40334 * TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 43) 40335 * TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 69) 40336 * TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 74) 40337 * TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 80) 40338 * TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 539) 40339 * TARGET_DECLSPEC: Target Attributes. (line 64) 40340 * TARGET_DEFAULT_PACK_STRUCT: Misc. (line 482) 40341 * TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 160) 40342 * TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 393) 40343 * TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 200) 40344 * TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 47) 40345 * TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 18) 40346 * TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 172) 40347 * TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 40348 (line 90) 40349 * TARGET_EDOM: Library Calls. (line 59) 40350 * TARGET_ENCODE_SECTION_INFO: Sections. (line 235) 40351 * TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes. 40352 (line 91) 40353 * TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 100) 40354 * TARGET_EXECUTABLE_SUFFIX: Misc. (line 769) 40355 * TARGET_EXPAND_BUILTIN: Misc. (line 665) 40356 * TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 92) 40357 * TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 545) 40358 * TARGET_EXPR: Expression trees. (line 6) 40359 * TARGET_EXTRA_INCLUDES: Misc. (line 841) 40360 * TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 21) 40361 * TARGET_EXTRA_PRE_INCLUDES: Misc. (line 848) 40362 * TARGET_FIXED_CONDITION_CODE_REGS: Condition Code. (line 142) 40363 * TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 542) 40364 * target_flags: Run-time Target. (line 52) 40365 * TARGET_FLOAT_FORMAT: Storage Layout. (line 410) 40366 * TARGET_FLT_EVAL_METHOD: Type Layout. (line 141) 40367 * TARGET_FOLD_BUILTIN: Misc. (line 685) 40368 * TARGET_FORMAT_TYPES: Misc. (line 868) 40369 * TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 86) 40370 * TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 8) 40371 * TARGET_FUNCTION_VALUE: Scalar Return. (line 11) 40372 * TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 254) 40373 * TARGET_HANDLE_C_OPTION: Run-time Target. (line 78) 40374 * TARGET_HANDLE_OPTION: Run-time Target. (line 61) 40375 * TARGET_HAS_SINCOS: Library Calls. (line 85) 40376 * TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 40377 (line 64) 40378 * TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 99) 40379 * TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 103) 40380 * TARGET_HELP: Run-time Target. (line 141) 40381 * TARGET_IN_SMALL_DATA_P: Sections. (line 276) 40382 * TARGET_INIT_BUILTINS: Misc. (line 647) 40383 * TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 40384 (line 99) 40385 * TARGET_INIT_LIBFUNCS: Library Calls. (line 16) 40386 * TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 73) 40387 * TARGET_INSTANTIATE_DECLS: Storage Layout. (line 553) 40388 * TARGET_INVALID_BINARY_OP: Misc. (line 906) 40389 * TARGET_INVALID_CONVERSION: Misc. (line 893) 40390 * TARGET_INVALID_UNARY_OP: Misc. (line 899) 40391 * TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 35) 40392 * TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 398) 40393 * TARGET_LIBGCC_SDATA_SECTION: Sections. (line 123) 40394 * TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 404) 40395 * TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 632) 40396 * TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 225) 40397 * TARGET_MANGLE_TYPE: Storage Layout. (line 557) 40398 * TARGET_MD_ASM_CLOBBERS: Misc. (line 548) 40399 * TARGET_MEM_REF: Expression trees. (line 6) 40400 * TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 39) 40401 * TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 31) 40402 * TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 106) 40403 * TARGET_MODE_REP_EXTENDED: Misc. (line 191) 40404 * TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 512) 40405 * TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 62) 40406 * TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments. 40407 (line 52) 40408 * TARGET_N_FORMAT_TYPES: Misc. (line 873) 40409 * TARGET_NARROW_VOLATILE_BITFIELDS: Storage Layout. (line 342) 40410 * TARGET_OBJECT_SUFFIX: Misc. (line 764) 40411 * TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 46) 40412 * TARGET_OPTF: Misc. (line 855) 40413 * TARGET_OPTION_TRANSLATE_TABLE: Driver. (line 53) 40414 * TARGET_OS_CPP_BUILTINS: Run-time Target. (line 42) 40415 * TARGET_PASS_BY_REFERENCE: Register Arguments. (line 103) 40416 * TARGET_POSIX_IO: Misc. (line 572) 40417 * TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 152) 40418 * TARGET_PROMOTE_FUNCTION_ARGS: Storage Layout. (line 131) 40419 * TARGET_PROMOTE_FUNCTION_RETURN: Storage Layout. (line 136) 40420 * TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 11) 40421 * TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 235) 40422 * TARGET_RELAXED_ORDERING: Misc. (line 877) 40423 * TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 675) 40424 * TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 16) 40425 * TARGET_RETURN_IN_MSB: Scalar Return. (line 97) 40426 * TARGET_RTX_COSTS: Costs. (line 204) 40427 * TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 266) 40428 * TARGET_SCHED_ADJUST_COST: Scheduling. (line 37) 40429 * TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 52) 40430 * TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 89) 40431 * TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 205) 40432 * TARGET_SCHED_DFA_POST_CYCLE_ADVANCE: Scheduling. (line 160) 40433 * TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 144) 40434 * TARGET_SCHED_DFA_PRE_CYCLE_ADVANCE: Scheduling. (line 153) 40435 * TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 132) 40436 * TARGET_SCHED_FINISH: Scheduling. (line 109) 40437 * TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 126) 40438 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 40439 (line 168) 40440 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 40441 (line 196) 40442 * TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling. 40443 (line 277) 40444 * TARGET_SCHED_GEN_CHECK: Scheduling. (line 265) 40445 * TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 241) 40446 * TARGET_SCHED_INIT: Scheduling. (line 99) 40447 * TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 149) 40448 * TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 141) 40449 * TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 118) 40450 * TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 219) 40451 * TARGET_SCHED_ISSUE_RATE: Scheduling. (line 12) 40452 * TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 258) 40453 * TARGET_SCHED_REORDER: Scheduling. (line 60) 40454 * TARGET_SCHED_REORDER2: Scheduling. (line 77) 40455 * TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 288) 40456 * TARGET_SCHED_SMS_RES_MII: Scheduling. (line 299) 40457 * TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 247) 40458 * TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 24) 40459 * TARGET_SECONDARY_RELOAD: Register Classes. (line 257) 40460 * TARGET_SECTION_TYPE_FLAGS: File Framework. (line 109) 40461 * TARGET_SET_CURRENT_FUNCTION: Misc. (line 747) 40462 * TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 26) 40463 * TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 101) 40464 * TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 154) 40465 * TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 237) 40466 * TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 40467 (line 17) 40468 * TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 40469 (line 7) 40470 * TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 137) 40471 * TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 44) 40472 * TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 739) 40473 * TARGET_UNWIND_EMIT: Dispatch Tables. (line 81) 40474 * TARGET_UNWIND_INFO: Exception Region Output. 40475 (line 56) 40476 * TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 55) 40477 * TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 221) 40478 * TARGET_USE_JCR_SECTION: Misc. (line 911) 40479 * TARGET_USE_LOCAL_THUNK_ALIAS_P: Misc. (line 861) 40480 * TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 129) 40481 * TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 59) 40482 * TARGET_VALID_POINTER_MODE: Register Arguments. (line 260) 40483 * TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 278) 40484 * TARGET_VECTOR_OPAQUE_P: Storage Layout. (line 505) 40485 * TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 288) 40486 * TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 237) 40487 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line 263) 40488 * TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes. (line 275) 40489 * TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 40490 (line 303) 40491 * TARGET_VERSION: Run-time Target. (line 91) 40492 * TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 288) 40493 * TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 282) 40494 * TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 271) 40495 * TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 245) 40496 * targetm: Target Structure. (line 7) 40497 * targets, makefile: Makefile. (line 6) 40498 * TCmode: Machine Modes. (line 197) 40499 * TDmode: Machine Modes. (line 94) 40500 * TEMPLATE_DECL: Declarations. (line 6) 40501 * Temporaries: Temporaries. (line 6) 40502 * termination routines: Initialization. (line 6) 40503 * testing constraints: C Constraint Interface. 40504 (line 6) 40505 * TEXT_SECTION_ASM_OP: Sections. (line 38) 40506 * TF_SIZE: Type Layout. (line 132) 40507 * TFmode: Machine Modes. (line 98) 40508 * THEN_CLAUSE: Function Bodies. (line 6) 40509 * THREAD_MODEL_SPEC: Driver. (line 225) 40510 * THROW_EXPR: Expression trees. (line 6) 40511 * THUNK_DECL: Declarations. (line 6) 40512 * THUNK_DELTA: Declarations. (line 6) 40513 * TImode: Machine Modes. (line 48) 40514 * TImode, in insn: Insns. (line 231) 40515 * tm.h macros: Target Macros. (line 6) 40516 * TQFmode: Machine Modes. (line 62) 40517 * TQmode: Machine Modes. (line 119) 40518 * TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 62) 40519 * TRAMPOLINE_ALIGNMENT: Trampolines. (line 49) 40520 * TRAMPOLINE_SECTION: Trampolines. (line 40) 40521 * TRAMPOLINE_SIZE: Trampolines. (line 45) 40522 * TRAMPOLINE_TEMPLATE: Trampolines. (line 29) 40523 * trampolines for nested functions: Trampolines. (line 6) 40524 * TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 124) 40525 * trap instruction pattern: Standard Names. (line 1368) 40526 * tree <1>: Macros and Functions. 40527 (line 6) 40528 * tree: Tree overview. (line 6) 40529 * Tree SSA: Tree SSA. (line 6) 40530 * TREE_CODE: Tree overview. (line 6) 40531 * TREE_FILENAME: Working with declarations. 40532 (line 14) 40533 * tree_int_cst_equal: Expression trees. (line 6) 40534 * TREE_INT_CST_HIGH: Expression trees. (line 6) 40535 * TREE_INT_CST_LOW: Expression trees. (line 6) 40536 * tree_int_cst_lt: Expression trees. (line 6) 40537 * TREE_LINENO: Working with declarations. 40538 (line 20) 40539 * TREE_LIST: Containers. (line 6) 40540 * TREE_OPERAND: Expression trees. (line 6) 40541 * TREE_PUBLIC: Function Basics. (line 6) 40542 * TREE_PURPOSE: Containers. (line 6) 40543 * TREE_STRING_LENGTH: Expression trees. (line 6) 40544 * TREE_STRING_POINTER: Expression trees. (line 6) 40545 * TREE_TYPE <1>: Expression trees. (line 6) 40546 * TREE_TYPE <2>: Function Basics. (line 171) 40547 * TREE_TYPE <3>: Working with declarations. 40548 (line 11) 40549 * TREE_TYPE: Types. (line 6) 40550 * TREE_VALUE: Containers. (line 6) 40551 * TREE_VEC: Containers. (line 6) 40552 * TREE_VEC_ELT: Containers. (line 6) 40553 * TREE_VEC_LENGTH: Containers. (line 6) 40554 * Trees: Trees. (line 6) 40555 * TRULY_NOOP_TRUNCATION: Misc. (line 177) 40556 * TRUNC_DIV_EXPR: Expression trees. (line 6) 40557 * TRUNC_MOD_EXPR: Expression trees. (line 6) 40558 * truncate: Conversions. (line 38) 40559 * truncMN2 instruction pattern: Standard Names. (line 815) 40560 * TRUTH_AND_EXPR: Expression trees. (line 6) 40561 * TRUTH_ANDIF_EXPR: Expression trees. (line 6) 40562 * TRUTH_NOT_EXPR: Expression trees. (line 6) 40563 * TRUTH_OR_EXPR: Expression trees. (line 6) 40564 * TRUTH_ORIF_EXPR: Expression trees. (line 6) 40565 * TRUTH_XOR_EXPR: Expression trees. (line 6) 40566 * TRY_BLOCK: Function Bodies. (line 6) 40567 * TRY_HANDLERS: Function Bodies. (line 6) 40568 * TRY_STMTS: Function Bodies. (line 6) 40569 * tstM instruction pattern: Standard Names. (line 657) 40570 * type: Types. (line 6) 40571 * type declaration: Declarations. (line 6) 40572 * TYPE_ALIGN: Types. (line 6) 40573 * TYPE_ARG_TYPES: Types. (line 6) 40574 * TYPE_ASM_OP: Label Output. (line 55) 40575 * TYPE_ATTRIBUTES: Attributes. (line 25) 40576 * TYPE_BINFO: Classes. (line 6) 40577 * TYPE_BUILT_IN: Types. (line 83) 40578 * TYPE_CANONICAL: Types. (line 6) 40579 * TYPE_CONTEXT: Types. (line 6) 40580 * TYPE_DECL: Declarations. (line 6) 40581 * TYPE_FIELDS <1>: Classes. (line 6) 40582 * TYPE_FIELDS: Types. (line 6) 40583 * TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 91) 40584 * TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 76) 40585 * TYPE_HAS_MUTABLE_P: Classes. (line 81) 40586 * TYPE_HAS_NEW_OPERATOR: Classes. (line 88) 40587 * TYPE_MAIN_VARIANT: Types. (line 6) 40588 * TYPE_MAX_VALUE: Types. (line 6) 40589 * TYPE_METHOD_BASETYPE: Types. (line 6) 40590 * TYPE_METHODS: Classes. (line 6) 40591 * TYPE_MIN_VALUE: Types. (line 6) 40592 * TYPE_NAME: Types. (line 6) 40593 * TYPE_NOTHROW_P: Function Basics. (line 180) 40594 * TYPE_OFFSET_BASETYPE: Types. (line 6) 40595 * TYPE_OPERAND_FMT: Label Output. (line 66) 40596 * TYPE_OVERLOADS_ARRAY_REF: Classes. (line 99) 40597 * TYPE_OVERLOADS_ARROW: Classes. (line 102) 40598 * TYPE_OVERLOADS_CALL_EXPR: Classes. (line 95) 40599 * TYPE_POLYMORPHIC_P: Classes. (line 72) 40600 * TYPE_PRECISION: Types. (line 6) 40601 * TYPE_PTR_P: Types. (line 89) 40602 * TYPE_PTRFN_P: Types. (line 93) 40603 * TYPE_PTRMEM_P: Types. (line 6) 40604 * TYPE_PTROB_P: Types. (line 96) 40605 * TYPE_PTROBV_P: Types. (line 6) 40606 * TYPE_QUAL_CONST: Types. (line 6) 40607 * TYPE_QUAL_RESTRICT: Types. (line 6) 40608 * TYPE_QUAL_VOLATILE: Types. (line 6) 40609 * TYPE_RAISES_EXCEPTIONS: Function Basics. (line 175) 40610 * TYPE_SIZE: Types. (line 6) 40611 * TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 40612 * TYPE_UNQUALIFIED: Types. (line 6) 40613 * TYPE_VFIELD: Classes. (line 6) 40614 * TYPENAME_TYPE: Types. (line 6) 40615 * TYPENAME_TYPE_FULLNAME: Types. (line 6) 40616 * TYPEOF_TYPE: Types. (line 6) 40617 * UDAmode: Machine Modes. (line 168) 40618 * udiv: Arithmetic. (line 125) 40619 * udivM3 instruction pattern: Standard Names. (line 222) 40620 * udivmodM4 instruction pattern: Standard Names. (line 428) 40621 * udot_prodM instruction pattern: Standard Names. (line 265) 40622 * UDQmode: Machine Modes. (line 136) 40623 * UHAmode: Machine Modes. (line 160) 40624 * UHQmode: Machine Modes. (line 128) 40625 * UINTMAX_TYPE: Type Layout. (line 224) 40626 * umaddMN4 instruction pattern: Standard Names. (line 375) 40627 * umax: Arithmetic. (line 144) 40628 * umaxM3 instruction pattern: Standard Names. (line 222) 40629 * umin: Arithmetic. (line 144) 40630 * uminM3 instruction pattern: Standard Names. (line 222) 40631 * umod: Arithmetic. (line 131) 40632 * umodM3 instruction pattern: Standard Names. (line 222) 40633 * umsubMN4 instruction pattern: Standard Names. (line 399) 40634 * umulhisi3 instruction pattern: Standard Names. (line 347) 40635 * umulM3_highpart instruction pattern: Standard Names. (line 361) 40636 * umulqihi3 instruction pattern: Standard Names. (line 347) 40637 * umulsidi3 instruction pattern: Standard Names. (line 347) 40638 * unchanging: Flags. (line 299) 40639 * unchanging, in call_insn: Flags. (line 19) 40640 * unchanging, in jump_insn, call_insn and insn: Flags. (line 24) 40641 * unchanging, in mem: Flags. (line 137) 40642 * unchanging, in subreg: Flags. (line 173) 40643 * unchanging, in symbol_ref: Flags. (line 10) 40644 * UNEQ_EXPR: Expression trees. (line 6) 40645 * UNGE_EXPR: Expression trees. (line 6) 40646 * UNGT_EXPR: Expression trees. (line 6) 40647 * UNION_TYPE <1>: Classes. (line 6) 40648 * UNION_TYPE: Types. (line 6) 40649 * unions, returning: Interface. (line 10) 40650 * UNITS_PER_SIMD_WORD: Storage Layout. (line 77) 40651 * UNITS_PER_WORD: Storage Layout. (line 67) 40652 * UNKNOWN_TYPE: Types. (line 6) 40653 * UNLE_EXPR: Expression trees. (line 6) 40654 * UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 49) 40655 * UNLT_EXPR: Expression trees. (line 6) 40656 * UNORDERED_EXPR: Expression trees. (line 6) 40657 * unshare_all_rtl: Sharing. (line 58) 40658 * unsigned division: Arithmetic. (line 125) 40659 * unsigned division with unsigned saturation: Arithmetic. (line 125) 40660 * unsigned greater than: Comparisons. (line 64) 40661 * unsigned less than: Comparisons. (line 68) 40662 * unsigned minimum and maximum: Arithmetic. (line 144) 40663 * unsigned_fix: Conversions. (line 72) 40664 * unsigned_float: Conversions. (line 62) 40665 * unsigned_fract_convert: Conversions. (line 98) 40666 * unsigned_sat_fract: Conversions. (line 104) 40667 * unspec: Side Effects. (line 284) 40668 * unspec_volatile: Side Effects. (line 284) 40669 * untyped_call instruction pattern: Standard Names. (line 1006) 40670 * untyped_return instruction pattern: Standard Names. (line 1056) 40671 * UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 40672 * update_ssa: SSA. (line 76) 40673 * update_stmt: Statement Operands. (line 6) 40674 * UQQmode: Machine Modes. (line 123) 40675 * US Software GOFAST, floating point emulation library: Library Calls. 40676 (line 44) 40677 * us_ashift: Arithmetic. (line 168) 40678 * us_minus: Arithmetic. (line 36) 40679 * us_mult: Arithmetic. (line 92) 40680 * us_neg: Arithmetic. (line 81) 40681 * us_plus: Arithmetic. (line 14) 40682 * US_SOFTWARE_GOFAST: Library Calls. (line 45) 40683 * us_truncate: Conversions. (line 48) 40684 * usaddM3 instruction pattern: Standard Names. (line 222) 40685 * USAmode: Machine Modes. (line 164) 40686 * usashlM3 instruction pattern: Standard Names. (line 431) 40687 * usdivM3 instruction pattern: Standard Names. (line 222) 40688 * use: Side Effects. (line 159) 40689 * USE_C_ALLOCA: Host Misc. (line 19) 40690 * USE_LD_AS_NEEDED: Driver. (line 198) 40691 * USE_LOAD_POST_DECREMENT: Costs. (line 159) 40692 * USE_LOAD_POST_INCREMENT: Costs. (line 154) 40693 * USE_LOAD_PRE_DECREMENT: Costs. (line 169) 40694 * USE_LOAD_PRE_INCREMENT: Costs. (line 164) 40695 * use_param: GTY Options. (line 114) 40696 * use_paramN: GTY Options. (line 132) 40697 * use_params: GTY Options. (line 140) 40698 * USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 185) 40699 * USE_STORE_POST_DECREMENT: Costs. (line 179) 40700 * USE_STORE_POST_INCREMENT: Costs. (line 174) 40701 * USE_STORE_PRE_DECREMENT: Costs. (line 189) 40702 * USE_STORE_PRE_INCREMENT: Costs. (line 184) 40703 * used: Flags. (line 317) 40704 * used, in symbol_ref: Flags. (line 200) 40705 * USER_LABEL_PREFIX: Instruction Output. (line 126) 40706 * USING_DECL: Declarations. (line 6) 40707 * USING_STMT: Function Bodies. (line 6) 40708 * usmaddMN4 instruction pattern: Standard Names. (line 383) 40709 * usmsubMN4 instruction pattern: Standard Names. (line 407) 40710 * usmulhisi3 instruction pattern: Standard Names. (line 351) 40711 * usmulM3 instruction pattern: Standard Names. (line 222) 40712 * usmulqihi3 instruction pattern: Standard Names. (line 351) 40713 * usmulsidi3 instruction pattern: Standard Names. (line 351) 40714 * usnegM2 instruction pattern: Standard Names. (line 445) 40715 * USQmode: Machine Modes. (line 132) 40716 * ussubM3 instruction pattern: Standard Names. (line 222) 40717 * usum_widenM3 instruction pattern: Standard Names. (line 275) 40718 * UTAmode: Machine Modes. (line 172) 40719 * UTQmode: Machine Modes. (line 140) 40720 * V in constraint: Simple Constraints. (line 41) 40721 * VA_ARG_EXPR: Expression trees. (line 6) 40722 * values, returned by functions: Scalar Return. (line 6) 40723 * VAR_DECL <1>: Expression trees. (line 6) 40724 * VAR_DECL: Declarations. (line 6) 40725 * varargs implementation: Varargs. (line 6) 40726 * variable: Declarations. (line 6) 40727 * VAX_FLOAT_FORMAT: Storage Layout. (line 418) 40728 * vec_concat: Vector Operations. (line 25) 40729 * vec_duplicate: Vector Operations. (line 30) 40730 * VEC_EXTRACT_EVEN_EXPR: Expression trees. (line 6) 40731 * vec_extract_evenM instruction pattern: Standard Names. (line 176) 40732 * VEC_EXTRACT_ODD_EXPR: Expression trees. (line 6) 40733 * vec_extract_oddM instruction pattern: Standard Names. (line 183) 40734 * vec_extractM instruction pattern: Standard Names. (line 171) 40735 * vec_initM instruction pattern: Standard Names. (line 204) 40736 * VEC_INTERLEAVE_HIGH_EXPR: Expression trees. (line 6) 40737 * vec_interleave_highM instruction pattern: Standard Names. (line 190) 40738 * VEC_INTERLEAVE_LOW_EXPR: Expression trees. (line 6) 40739 * vec_interleave_lowM instruction pattern: Standard Names. (line 197) 40740 * VEC_LSHIFT_EXPR: Expression trees. (line 6) 40741 * vec_merge: Vector Operations. (line 11) 40742 * VEC_PACK_FIX_TRUNC_EXPR: Expression trees. (line 6) 40743 * VEC_PACK_SAT_EXPR: Expression trees. (line 6) 40744 * vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 302) 40745 * vec_pack_ssat_M instruction pattern: Standard Names. (line 295) 40746 * VEC_PACK_TRUNC_EXPR: Expression trees. (line 6) 40747 * vec_pack_trunc_M instruction pattern: Standard Names. (line 288) 40748 * vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 302) 40749 * vec_pack_usat_M instruction pattern: Standard Names. (line 295) 40750 * VEC_RSHIFT_EXPR: Expression trees. (line 6) 40751 * vec_select: Vector Operations. (line 19) 40752 * vec_setM instruction pattern: Standard Names. (line 166) 40753 * vec_shl_M instruction pattern: Standard Names. (line 282) 40754 * vec_shr_M instruction pattern: Standard Names. (line 282) 40755 * VEC_UNPACK_FLOAT_HI_EXPR: Expression trees. (line 6) 40756 * VEC_UNPACK_FLOAT_LO_EXPR: Expression trees. (line 6) 40757 * VEC_UNPACK_HI_EXPR: Expression trees. (line 6) 40758 * VEC_UNPACK_LO_EXPR: Expression trees. (line 6) 40759 * vec_unpacks_float_hi_M instruction pattern: Standard Names. 40760 (line 324) 40761 * vec_unpacks_float_lo_M instruction pattern: Standard Names. 40762 (line 324) 40763 * vec_unpacks_hi_M instruction pattern: Standard Names. (line 309) 40764 * vec_unpacks_lo_M instruction pattern: Standard Names. (line 309) 40765 * vec_unpacku_float_hi_M instruction pattern: Standard Names. 40766 (line 324) 40767 * vec_unpacku_float_lo_M instruction pattern: Standard Names. 40768 (line 324) 40769 * vec_unpacku_hi_M instruction pattern: Standard Names. (line 317) 40770 * vec_unpacku_lo_M instruction pattern: Standard Names. (line 317) 40771 * VEC_WIDEN_MULT_HI_EXPR: Expression trees. (line 6) 40772 * VEC_WIDEN_MULT_LO_EXPR: Expression trees. (line 6) 40773 * vec_widen_smult_hi_M instruction pattern: Standard Names. (line 333) 40774 * vec_widen_smult_lo_M instruction pattern: Standard Names. (line 333) 40775 * vec_widen_umult_hi_M instruction pattern: Standard Names. (line 333) 40776 * vec_widen_umult_lo__M instruction pattern: Standard Names. (line 333) 40777 * vector: Containers. (line 6) 40778 * vector operations: Vector Operations. (line 6) 40779 * VECTOR_CST: Expression trees. (line 6) 40780 * VECTOR_STORE_FLAG_VALUE: Misc. (line 308) 40781 * virtual operands: Statement Operands. (line 6) 40782 * VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 40783 * VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 40784 * VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 40785 * VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 40786 * VLIW: Processor pipeline description. 40787 (line 6) 40788 * VMS: Filesystem. (line 37) 40789 * VMS_DEBUGGING_INFO: VMS Debug. (line 9) 40790 * VOID_TYPE: Types. (line 6) 40791 * VOIDmode: Machine Modes. (line 190) 40792 * volatil: Flags. (line 331) 40793 * volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags. 40794 (line 29) 40795 * volatil, in label_ref and reg_label: Flags. (line 50) 40796 * volatil, in mem, asm_operands, and asm_input: Flags. (line 79) 40797 * volatil, in reg: Flags. (line 101) 40798 * volatil, in subreg: Flags. (line 173) 40799 * volatil, in symbol_ref: Flags. (line 209) 40800 * volatile memory references: Flags. (line 332) 40801 * voting between constraint alternatives: Class Preferences. (line 6) 40802 * walk_dominator_tree: SSA. (line 259) 40803 * walk_use_def_chains: SSA. (line 235) 40804 * WCHAR_TYPE: Type Layout. (line 192) 40805 * WCHAR_TYPE_SIZE: Type Layout. (line 200) 40806 * which_alternative: Output Statement. (line 59) 40807 * WHILE_BODY: Function Bodies. (line 6) 40808 * WHILE_COND: Function Bodies. (line 6) 40809 * WHILE_STMT: Function Bodies. (line 6) 40810 * WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 147) 40811 * WINT_TYPE: Type Layout. (line 205) 40812 * word_mode: Machine Modes. (line 336) 40813 * WORD_REGISTER_OPERATIONS: Misc. (line 63) 40814 * WORD_SWITCH_TAKES_ARG: Driver. (line 20) 40815 * WORDS_BIG_ENDIAN: Storage Layout. (line 29) 40816 * WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 132) 40817 * X in constraint: Simple Constraints. (line 112) 40818 * x-HOST: Host Fragment. (line 6) 40819 * XCmode: Machine Modes. (line 197) 40820 * XCOFF_DEBUGGING_INFO: DBX Options. (line 13) 40821 * XEXP: Accessors. (line 6) 40822 * XF_SIZE: Type Layout. (line 131) 40823 * XFmode: Machine Modes. (line 79) 40824 * XINT: Accessors. (line 6) 40825 * xm-MACHINE.h <1>: Host Misc. (line 6) 40826 * xm-MACHINE.h: Filesystem. (line 6) 40827 * xor: Arithmetic. (line 163) 40828 * xor, canonicalization of: Insn Canonicalizations. 40829 (line 84) 40830 * xorM3 instruction pattern: Standard Names. (line 222) 40831 * XSTR: Accessors. (line 6) 40832 * XVEC: Accessors. (line 41) 40833 * XVECEXP: Accessors. (line 48) 40834 * XVECLEN: Accessors. (line 44) 40835 * XWINT: Accessors. (line 6) 40836 * zero_extend: Conversions. (line 28) 40837 * zero_extendMN2 instruction pattern: Standard Names. (line 825) 40838 * zero_extract: Bit-Fields. (line 30) 40839 * zero_extract, canonicalization of: Insn Canonicalizations. 40840 (line 96) 40841 40842 40843 40844 Tag Table: 40845 Node: Top2112 40846 Node: Contributing5008 40847 Node: Portability5749 40848 Node: Interface7537 40849 Node: Libgcc10577 40850 Node: Integer library routines12418 40851 Node: Soft float library routines19257 40852 Node: Decimal float library routines31194 40853 Node: Fixed-point fractional library routines46947 40854 Node: Exception handling routines147345 40855 Node: Miscellaneous routines148452 40856 Node: Languages148835 40857 Node: Source Tree150382 40858 Node: Configure Terms151001 40859 Node: Top Level153959 40860 Node: gcc Directory156307 40861 Node: Subdirectories157276 40862 Node: Configuration159614 40863 Node: Config Fragments160334 40864 Node: System Config161678 40865 Node: Configuration Files162614 40866 Node: Build165189 40867 Node: Makefile165601 40868 Ref: Makefile-Footnote-1172319 40869 Ref: Makefile-Footnote-2172468 40870 Node: Library Files172542 40871 Node: Headers173104 40872 Node: Documentation175187 40873 Node: Texinfo Manuals176046 40874 Node: Man Page Generation178384 40875 Node: Miscellaneous Docs180299 40876 Node: Front End181598 40877 Node: Front End Directory185299 40878 Node: Front End Config190292 40879 Node: Back End193206 40880 Node: Testsuites196883 40881 Node: Test Idioms197675 40882 Node: Test Directives201076 40883 Node: Ada Tests212245 40884 Node: C Tests213537 40885 Node: libgcj Tests217892 40886 Node: gcov Testing219024 40887 Node: profopt Testing222008 40888 Node: compat Testing223451 40889 Node: Options227673 40890 Node: Option file format228114 40891 Node: Option properties230664 40892 Node: Passes236323 40893 Node: Parsing pass237058 40894 Node: Gimplification pass240586 40895 Node: Pass manager242413 40896 Node: Tree-SSA passes243742 40897 Node: RTL passes265558 40898 Node: Trees277400 40899 Node: Deficiencies280126 40900 Node: Tree overview280363 40901 Node: Macros and Functions284486 40902 Node: Identifiers284632 40903 Node: Containers286157 40904 Node: Types287312 40905 Node: Scopes303015 40906 Node: Namespaces303777 40907 Node: Classes306589 40908 Node: Declarations311346 40909 Node: Working with declarations311841 40910 Node: Internal structure318298 40911 Node: Current structure hierarchy318680 40912 Node: Adding new DECL node types320772 40913 Node: Functions324843 40914 Node: Function Basics327246 40915 Node: Function Bodies334411 40916 Node: Attributes345653 40917 Node: Expression trees346894 40918 Node: Tree SSA389503 40919 Node: GENERIC391380 40920 Node: GIMPLE392990 40921 Node: Interfaces394281 40922 Node: Temporaries396434 40923 Ref: Temporaries-Footnote-1397754 40924 Node: GIMPLE Expressions397817 40925 Node: Compound Expressions398589 40926 Node: Compound Lvalues398837 40927 Node: Conditional Expressions399617 40928 Node: Logical Operators400294 40929 Node: Statements400787 40930 Node: Blocks401495 40931 Node: Statement Sequences402912 40932 Node: Empty Statements403249 40933 Node: Loops403827 40934 Node: Selection Statements404071 40935 Node: Jumps404924 40936 Node: Cleanups405585 40937 Node: GIMPLE Exception Handling407376 40938 Node: GIMPLE Example409255 40939 Node: Rough GIMPLE Grammar410666 40940 Node: Annotations416015 40941 Node: Statement Operands416681 40942 Node: SSA431242 40943 Node: Alias analysis443630 40944 Node: Loop Analysis and Representation451089 40945 Node: Loop representation452139 40946 Node: Loop querying459059 40947 Node: Loop manipulation461892 40948 Node: LCSSA464260 40949 Node: Scalar evolutions466332 40950 Node: loop-iv469576 40951 Node: Number of iterations471502 40952 Node: Dependency analysis474311 40953 Node: Lambda480679 40954 Node: Omega482349 40955 Node: RTL483914 40956 Node: RTL Objects486018 40957 Node: RTL Classes489892 40958 Node: Accessors494844 40959 Node: Special Accessors497238 40960 Node: Flags502456 40961 Node: Machine Modes517692 40962 Node: Constants530008 40963 Node: Regs and Memory536653 40964 Node: Arithmetic550195 40965 Node: Comparisons559715 40966 Node: Bit-Fields564007 40967 Node: Vector Operations565559 40968 Node: Conversions567185 40969 Node: RTL Declarations571695 40970 Node: Side Effects572516 40971 Node: Incdec588632 40972 Node: Assembler591972 40973 Node: Insns593504 40974 Node: Calls619434 40975 Node: Sharing622027 40976 Node: Reading RTL625137 40977 Node: Control Flow626127 40978 Node: Basic Blocks627098 40979 Node: Edges631666 40980 Node: Profile information640228 40981 Node: Maintaining the CFG644914 40982 Node: Liveness information651806 40983 Node: Machine Desc653933 40984 Node: Overview656415 40985 Node: Patterns658456 40986 Node: Example661894 40987 Node: RTL Template663329 40988 Node: Output Template673984 40989 Node: Output Statement677950 40990 Node: Predicates681912 40991 Node: Machine-Independent Predicates684830 40992 Node: Defining Predicates689462 40993 Node: Constraints695427 40994 Node: Simple Constraints696588 40995 Node: Multi-Alternative708650 40996 Node: Class Preferences711491 40997 Node: Modifiers712383 40998 Node: Machine Constraints716509 40999 Node: Define Constraints748256 41000 Node: C Constraint Interface755036 41001 Node: Standard Names758656 41002 Ref: shift patterns777584 41003 Ref: prologue instruction pattern818233 41004 Ref: epilogue instruction pattern818726 41005 Node: Pattern Ordering828269 41006 Node: Dependent Patterns829505 41007 Node: Jump Patterns832319 41008 Node: Looping Patterns838015 41009 Node: Insn Canonicalizations842617 41010 Node: Expander Definitions847001 41011 Node: Insn Splitting855119 41012 Node: Including Patterns864715 41013 Node: Peephole Definitions866495 41014 Node: define_peephole867748 41015 Node: define_peephole2874079 41016 Node: Insn Attributes877146 41017 Node: Defining Attributes878252 41018 Node: Expressions880269 41019 Node: Tagging Insns886871 41020 Node: Attr Example891224 41021 Node: Insn Lengths893598 41022 Node: Constant Attributes896657 41023 Node: Delay Slots897826 41024 Node: Processor pipeline description901050 41025 Ref: Processor pipeline description-Footnote-1918416 41026 Node: Conditional Execution918746 41027 Node: Constant Definitions921599 41028 Node: Iterators923194 41029 Node: Mode Iterators923641 41030 Node: Defining Mode Iterators924603 41031 Node: Substitutions926097 41032 Node: Examples928338 41033 Node: Code Iterators929786 41034 Node: Target Macros932043 41035 Node: Target Structure934995 41036 Node: Driver936264 41037 Node: Run-time Target959945 41038 Node: Per-Function Data967149 41039 Node: Storage Layout969912 41040 Node: Type Layout996533 41041 Node: Registers1009490 41042 Node: Register Basics1010413 41043 Node: Allocation Order1015980 41044 Node: Values in Registers1017425 41045 Node: Leaf Functions1024530 41046 Node: Stack Registers1027388 41047 Node: Register Classes1028504 41048 Node: Old Constraints1054079 41049 Node: Stack and Calling1061231 41050 Node: Frame Layout1061765 41051 Node: Exception Handling1072612 41052 Node: Stack Checking1078990 41053 Node: Frame Registers1082621 41054 Node: Elimination1089227 41055 Node: Stack Arguments1093258 41056 Node: Register Arguments1099859 41057 Node: Scalar Return1114088 41058 Node: Aggregate Return1119373 41059 Node: Caller Saves1123032 41060 Node: Function Entry1124210 41061 Node: Profiling1136825 41062 Node: Tail Calls1138524 41063 Node: Stack Smashing Protection1139891 41064 Node: Varargs1141003 41065 Node: Trampolines1148963 41066 Node: Library Calls1155629 41067 Node: Addressing Modes1160492 41068 Node: Anchored Addresses1175750 41069 Node: Condition Code1178411 41070 Node: Costs1186700 41071 Node: Scheduling1199423 41072 Node: Sections1216170 41073 Node: PIC1230820 41074 Node: Assembler Format1232810 41075 Node: File Framework1233889 41076 Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1238795 41077 Node: Data Output1242062 41078 Node: Uninitialized Data1249821 41079 Node: Label Output1254892 41080 Node: Initialization1276559 41081 Node: Macros for Initialization1282521 41082 Node: Instruction Output1288973 41083 Node: Dispatch Tables1297967 41084 Node: Exception Region Output1301762 41085 Node: Alignment Output1307522 41086 Node: Debugging Info1311685 41087 Node: All Debuggers1312355 41088 Node: DBX Options1315210 41089 Node: DBX Hooks1320659 41090 Node: File Names and DBX1322585 41091 Node: SDB and DWARF1324696 41092 Node: VMS Debug1328688 41093 Node: Floating Point1329258 41094 Node: Mode Switching1334081 41095 Node: Target Attributes1338007 41096 Node: MIPS Coprocessors1342749 41097 Node: PCH Target1344323 41098 Node: C++ ABI1345844 41099 Node: Misc1350463 41100 Ref: TARGET_SHIFT_TRUNCATION_MASK1357834 41101 Node: Host Config1397048 41102 Node: Host Common1398108 41103 Node: Filesystem1400487 41104 Node: Host Misc1404602 41105 Node: Fragments1406741 41106 Node: Target Fragment1407936 41107 Node: Host Fragment1413602 41108 Node: Collect21415044 41109 Node: Header Dirs1417587 41110 Node: Type Information1419010 41111 Node: GTY Options1421198 41112 Node: GGC Roots1431871 41113 Node: Files1432591 41114 Node: Funding1434951 41115 Node: GNU Project1437447 41116 Node: Copying1438096 41117 Node: GNU Free Documentation License1475627 41118 Node: Contributors1498036 41119 Node: Option Index1534234 41120 Node: Concept Index1534819 41121 41122 End Tag Table 41123