1This is doc/gccint.info, produced by makeinfo version 4.12 from 2/space/rguenther/gcc-4.5.4/gcc-4.5.4/gcc/doc/gccint.texi. 3 4Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 51999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free 6Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9under the terms of the GNU Free Documentation License, Version 1.2 or 10any later version published by the Free Software Foundation; with the 11Invariant Sections being "Funding Free Software", the Front-Cover Texts 12being (a) (see below), and with the Back-Cover Texts being (b) (see 13below). A copy of the license is included in the section entitled "GNU 14Free 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 23software. Copies published by the Free Software Foundation raise 24funds for GNU development. 25 26INFO-DIR-SECTION Software development 27START-INFO-DIR-ENTRY 28* gccint: (gccint). Internals of the GNU Compiler Collection. 29END-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, 331999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free 34Software Foundation, Inc. 35 36 Permission is granted to copy, distribute and/or modify this document 37under the terms of the GNU Free Documentation License, Version 1.2 or 38any later version published by the Free Software Foundation; with the 39Invariant Sections being "Funding Free Software", the Front-Cover Texts 40being (a) (see below), and with the Back-Cover Texts being (b) (see 41below). A copy of the license is included in the section entitled "GNU 42Free 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 51software. Copies published by the Free Software Foundation raise 52funds for GNU development. 53 54 55 56File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 57 58Introduction 59************ 60 61This manual documents the internals of the GNU compilers, including how 62to port them to new targets and some information about how to write 63front ends for new languages. It corresponds to the compilers 64(GCC) version 4.5.4. The use of the GNU compilers is documented in a 65separate manual. *Note Introduction: (gcc)Top. 66 67 This manual is mainly a reference manual rather than a tutorial. It 68discusses how to contribute to GCC (*note Contributing::), the 69characteristics 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 72GCC front ends are written (*note Languages::). It then describes the 73GCC source tree structure and build system, some of the interfaces to 74GCC front ends, and how support for a target system is implemented in 75GCC. 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* Testsuites:: GCC testsuites. 89* Options:: Option specification files. 90* Passes:: Order of passes, what they do, and what each file is for. 91* GENERIC:: Language-independent representation generated by Front Ends 92* GIMPLE:: Tuple representation used by Tree SSA optimizers 93* Tree SSA:: Analysis and optimization of GIMPLE 94* RTL:: Machine-dependent low-level intermediate representation. 95* Control Flow:: Maintaining and manipulating the control flow graph. 96* Loop Analysis and Representation:: Analysis and representation of loops 97* Machine Desc:: How to write machine description instruction patterns. 98* Target Macros:: How to write the machine description C macros and functions. 99* Host Config:: Writing the `xm-MACHINE.h' file. 100* Fragments:: Writing the `t-TARGET' and `x-HOST' files. 101* Collect2:: How `collect2' works; how it finds `ld'. 102* Header Dirs:: Understanding the standard header file directories. 103* Type Information:: GCC's memory management; generating type information. 104* Plugins:: Extending the compiler with plugins. 105 106* Funding:: How to help assure funding for free software. 107* GNU Project:: The GNU Project and GNU/Linux. 108 109* Copying:: GNU General Public License says 110 how you can copy and share GCC. 111* GNU Free Documentation License:: How you can copy and share this manual. 112* Contributors:: People who have contributed to GCC. 113 114* Option Index:: Index to command line options. 115* Concept Index:: Index of concepts and symbol names. 116 117 118File: gccint.info, Node: Contributing, Next: Portability, Prev: Top, Up: Top 119 1201 Contributing to GCC Development 121********************************* 122 123If you would like to help pretest GCC releases to assure they work well, 124current development sources are available by SVN (see 125`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 126available for FTP; see `http://gcc.gnu.org/snapshots.html'. 127 128 If you would like to work on improvements to GCC, please read the 129advice at these URLs: 130 131 `http://gcc.gnu.org/contribute.html' 132 `http://gcc.gnu.org/contributewhy.html' 133 134for information on how to make useful contributions and avoid 135duplication of effort. Suggested projects are listed at 136`http://gcc.gnu.org/projects/'. 137 138 139File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 140 1412 GCC and Portability 142********************* 143 144GCC itself aims to be portable to any machine where `int' is at least a 14532-bit type. It aims to target machines with a flat (non-segmented) 146byte addressed data address space (the code address space can be 147separate). Target ABIs may have 8, 16, 32 or 64-bit `int' type. `char' 148can be wider than 8 bits. 149 150 GCC gets most of the information about the target machine from a 151machine description which gives an algebraic formula for each of the 152machine's instructions. This is a very clean way to describe the 153target. But when the compiler needs information that is difficult to 154express in this fashion, ad-hoc parameters have been defined for 155machine descriptions. The purpose of portability is to reduce the 156total work needed on the compiler; it was not of interest for its own 157sake. 158 159 GCC does not contain machine dependent code, but it does contain code 160that depends on machine parameters such as endianness (whether the most 161significant byte has the highest or lowest address of the bytes in a 162word) and the availability of autoincrement addressing. In the 163RTL-generation pass, it is often necessary to have multiple strategies 164for generating code for a particular kind of syntax tree, strategies 165that are usable for different combinations of parameters. Often, not 166all possible cases have been addressed, but only the common ones or 167only the ones that have been encountered. As a result, a new target 168may require additional strategies. You will know if this happens 169because the compiler will call `abort'. Fortunately, the new 170strategies can be added in a machine-independent fashion, and will 171affect only the target machines that need them. 172 173 174File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 175 1763 Interfacing to GCC Output 177*************************** 178 179GCC is normally configured to use the same function calling convention 180normally in use on the target system. This is done with the 181machine-description macros described (*note Target Macros::). 182 183 However, returning of structure and union values is done differently on 184some target machines. As a result, functions compiled with PCC 185returning such types cannot be called from code compiled with GCC, and 186vice versa. This does not cause trouble often because few Unix library 187routines return structures or unions. 188 189 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes 190long in the same registers used for `int' or `double' return values. 191(GCC typically allocates variables of such types in registers also.) 192Structures and unions of other sizes are returned by storing them into 193an address passed by the caller (usually in a register). The target 194hook `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 195 196 By contrast, PCC on most target machines returns structures and unions 197of any size by copying the data into an area of static storage, and then 198returning the address of that storage as if it were a pointer value. 199The caller must copy the data from that memory area to the place where 200the value is wanted. This is slower than the method used by GCC, and 201fails to be reentrant. 202 203 On some target machines, such as RISC machines and the 80386, the 204standard system convention is to pass to the subroutine the address of 205where to return the value. On these machines, GCC has been configured 206to be compatible with the standard compiler, when this method is used. 207It may not be compatible for structures of 1, 2, 4 or 8 bytes. 208 209 GCC uses the system's standard convention for passing arguments. On 210some machines, the first few arguments are passed in registers; in 211others, all are passed on the stack. It would be possible to use 212registers for argument passing on any machine, and this would probably 213result in a significant speedup. But the result would be complete 214incompatibility with code that follows the standard convention. So this 215change is practical only if you are switching to GCC as the sole C 216compiler for the system. We may implement register argument passing on 217certain machines once we have a complete GNU system so that we can 218compile the libraries with GCC. 219 220 On some machines (particularly the SPARC), certain types of arguments 221are passed "by invisible reference". This means that the value is 222stored in memory, and the address of the memory location is passed to 223the subroutine. 224 225 If you use `longjmp', beware of automatic variables. ISO C says that 226automatic variables that are not declared `volatile' have undefined 227values after a `longjmp'. And this is all GCC promises to do, because 228it is very difficult to restore register variables correctly, and one 229of GCC's features is that it can put variables in registers without 230your asking it to. 231 232 233File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 234 2354 The GCC low-level runtime library 236*********************************** 237 238GCC provides a low-level runtime library, `libgcc.a' or `libgcc_s.so.1' 239on some platforms. GCC generates calls to routines in this library 240automatically, whenever it needs to perform some operation that is too 241complicated to emit inline code for. 242 243 Most of the routines in `libgcc' handle arithmetic operations that the 244target processor cannot perform directly. This includes integer 245multiply and divide on some machines, and all floating-point and 246fixed-point operations on other machines. `libgcc' also includes 247routines for exception handling, and a handful of miscellaneous 248operations. 249 250 Some of these routines can be defined in mostly machine-independent C. 251Others must be hand-written in assembly language for each processor 252that needs them. 253 254 GCC will also generate calls to C library routines, such as `memcpy' 255and `memset', in some cases. The set of routines that GCC may possibly 256use is documented in *note Other Builtins: (gcc)Other Builtins. 257 258 These routines take arguments and return values of a specific machine 259mode, not a specific C type. *Note Machine Modes::, for an explanation 260of this concept. For illustrative purposes, in this chapter the 261floating point type `float' is assumed to correspond to `SFmode'; 262`double' to `DFmode'; and `long double' to both `TFmode' and `XFmode'. 263Similarly, the integer types `int' and `unsigned int' correspond to 264`SImode'; `long' and `unsigned long' to `DImode'; and `long long' and 265`unsigned long long' to `TImode'. 266 267* Menu: 268 269* Integer library routines:: 270* Soft float library routines:: 271* Decimal float library routines:: 272* Fixed-point fractional library routines:: 273* Exception handling routines:: 274* Miscellaneous routines:: 275 276 277File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 278 2794.1 Routines for integer arithmetic 280=================================== 281 282The integer arithmetic routines are used on platforms that don't provide 283hardware support for arithmetic operations on some modes. 284 2854.1.1 Arithmetic functions 286-------------------------- 287 288 -- Runtime Function: int __ashlsi3 (int A, int B) 289 -- Runtime Function: long __ashldi3 (long A, int B) 290 -- Runtime Function: long long __ashlti3 (long long A, int B) 291 These functions return the result of shifting A left by B bits. 292 293 -- Runtime Function: int __ashrsi3 (int A, int B) 294 -- Runtime Function: long __ashrdi3 (long A, int B) 295 -- Runtime Function: long long __ashrti3 (long long A, int B) 296 These functions return the result of arithmetically shifting A 297 right by B bits. 298 299 -- Runtime Function: int __divsi3 (int A, int B) 300 -- Runtime Function: long __divdi3 (long A, long B) 301 -- Runtime Function: long long __divti3 (long long A, long long B) 302 These functions return the quotient of the signed division of A and 303 B. 304 305 -- Runtime Function: int __lshrsi3 (int A, int B) 306 -- Runtime Function: long __lshrdi3 (long A, int B) 307 -- Runtime Function: long long __lshrti3 (long long A, int B) 308 These functions return the result of logically shifting A right by 309 B bits. 310 311 -- Runtime Function: int __modsi3 (int A, int B) 312 -- Runtime Function: long __moddi3 (long A, long B) 313 -- Runtime Function: long long __modti3 (long long A, long long B) 314 These functions return the remainder of the signed division of A 315 and B. 316 317 -- Runtime Function: int __mulsi3 (int A, int B) 318 -- Runtime Function: long __muldi3 (long A, long B) 319 -- Runtime Function: long long __multi3 (long long A, long long B) 320 These functions return the product of A and B. 321 322 -- Runtime Function: long __negdi2 (long A) 323 -- Runtime Function: long long __negti2 (long long A) 324 These functions return the negation of A. 325 326 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 327 int B) 328 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, 329 unsigned long B) 330 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 331 A, unsigned long long B) 332 These functions return the quotient of the unsigned division of A 333 and B. 334 335 -- Runtime Function: unsigned long __udivmoddi3 (unsigned long A, 336 unsigned long B, unsigned long *C) 337 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 338 A, unsigned long long B, unsigned long long *C) 339 These functions calculate both the quotient and remainder of the 340 unsigned division of A and B. The return value is the quotient, 341 and the remainder is placed in variable pointed to by C. 342 343 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 344 int B) 345 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, 346 unsigned long B) 347 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 348 A, unsigned long long B) 349 These functions return the remainder of the unsigned division of A 350 and B. 351 3524.1.2 Comparison functions 353-------------------------- 354 355The following functions implement integral comparisons. These functions 356implement a low-level compare, upon which the higher level comparison 357operators (such as less than and greater than or equal to) can be 358constructed. The returned values lie in the range zero to two, to allow 359the high-level operators to be implemented by testing the returned 360result using either signed or unsigned comparison. 361 362 -- Runtime Function: int __cmpdi2 (long A, long B) 363 -- Runtime Function: int __cmpti2 (long long A, long long B) 364 These functions perform a signed comparison of A and B. If A is 365 less than B, they return 0; if A is greater than B, they return 2; 366 and if A and B are equal they return 1. 367 368 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 369 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned 370 long long B) 371 These functions perform an unsigned comparison of A and B. If A 372 is less than B, they return 0; if A is greater than B, they return 373 2; and if A and B are equal they return 1. 374 3754.1.3 Trapping arithmetic functions 376----------------------------------- 377 378The following functions implement trapping arithmetic. These functions 379call the libc function `abort' upon signed arithmetic overflow. 380 381 -- Runtime Function: int __absvsi2 (int A) 382 -- Runtime Function: long __absvdi2 (long A) 383 These functions return the absolute value of A. 384 385 -- Runtime Function: int __addvsi3 (int A, int B) 386 -- Runtime Function: long __addvdi3 (long A, long B) 387 These functions return the sum of A and B; that is `A + B'. 388 389 -- Runtime Function: int __mulvsi3 (int A, int B) 390 -- Runtime Function: long __mulvdi3 (long A, long B) 391 The functions return the product of A and B; that is `A * B'. 392 393 -- Runtime Function: int __negvsi2 (int A) 394 -- Runtime Function: long __negvdi2 (long A) 395 These functions return the negation of A; that is `-A'. 396 397 -- Runtime Function: int __subvsi3 (int A, int B) 398 -- Runtime Function: long __subvdi3 (long A, long B) 399 These functions return the difference between B and A; that is `A 400 - B'. 401 4024.1.4 Bit operations 403-------------------- 404 405 -- Runtime Function: int __clzsi2 (int A) 406 -- Runtime Function: int __clzdi2 (long A) 407 -- Runtime Function: int __clzti2 (long long A) 408 These functions return the number of leading 0-bits in A, starting 409 at the most significant bit position. If A is zero, the result is 410 undefined. 411 412 -- Runtime Function: int __ctzsi2 (int A) 413 -- Runtime Function: int __ctzdi2 (long A) 414 -- Runtime Function: int __ctzti2 (long long A) 415 These functions return the number of trailing 0-bits in A, starting 416 at the least significant bit position. If A is zero, the result is 417 undefined. 418 419 -- Runtime Function: int __ffsdi2 (long A) 420 -- Runtime Function: int __ffsti2 (long long A) 421 These functions return the index of the least significant 1-bit in 422 A, or the value zero if A is zero. The least significant bit is 423 index one. 424 425 -- Runtime Function: int __paritysi2 (int A) 426 -- Runtime Function: int __paritydi2 (long A) 427 -- Runtime Function: int __parityti2 (long long A) 428 These functions return the value zero if the number of bits set in 429 A is even, and the value one otherwise. 430 431 -- Runtime Function: int __popcountsi2 (int A) 432 -- Runtime Function: int __popcountdi2 (long A) 433 -- Runtime Function: int __popcountti2 (long long A) 434 These functions return the number of bits set in A. 435 436 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 437 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 438 These functions return the A byteswapped. 439 440 441File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 442 4434.2 Routines for floating point emulation 444========================================= 445 446The software floating point library is used on machines which do not 447have hardware support for floating point. It is also used whenever 448`-msoft-float' is used to disable generation of floating point 449instructions. (Not all targets support this switch.) 450 451 For compatibility with other compilers, the floating point emulation 452routines can be renamed with the `DECLARE_LIBRARY_RENAMES' macro (*note 453Library Calls::). In this section, the default names are used. 454 455 Presently the library does not support `XFmode', which is used for 456`long double' on some architectures. 457 4584.2.1 Arithmetic functions 459-------------------------- 460 461 -- Runtime Function: float __addsf3 (float A, float B) 462 -- Runtime Function: double __adddf3 (double A, double B) 463 -- Runtime Function: long double __addtf3 (long double A, long double 464 B) 465 -- Runtime Function: long double __addxf3 (long double A, long double 466 B) 467 These functions return the sum of A and B. 468 469 -- Runtime Function: float __subsf3 (float A, float B) 470 -- Runtime Function: double __subdf3 (double A, double B) 471 -- Runtime Function: long double __subtf3 (long double A, long double 472 B) 473 -- Runtime Function: long double __subxf3 (long double A, long double 474 B) 475 These functions return the difference between B and A; that is, 476 A - B. 477 478 -- Runtime Function: float __mulsf3 (float A, float B) 479 -- Runtime Function: double __muldf3 (double A, double B) 480 -- Runtime Function: long double __multf3 (long double A, long double 481 B) 482 -- Runtime Function: long double __mulxf3 (long double A, long double 483 B) 484 These functions return the product of A and B. 485 486 -- Runtime Function: float __divsf3 (float A, float B) 487 -- Runtime Function: double __divdf3 (double A, double B) 488 -- Runtime Function: long double __divtf3 (long double A, long double 489 B) 490 -- Runtime Function: long double __divxf3 (long double A, long double 491 B) 492 These functions return the quotient of A and B; that is, A / B. 493 494 -- Runtime Function: float __negsf2 (float A) 495 -- Runtime Function: double __negdf2 (double A) 496 -- Runtime Function: long double __negtf2 (long double A) 497 -- Runtime Function: long double __negxf2 (long double A) 498 These functions return the negation of A. They simply flip the 499 sign bit, so they can produce negative zero and negative NaN. 500 5014.2.2 Conversion functions 502-------------------------- 503 504 -- Runtime Function: double __extendsfdf2 (float A) 505 -- Runtime Function: long double __extendsftf2 (float A) 506 -- Runtime Function: long double __extendsfxf2 (float A) 507 -- Runtime Function: long double __extenddftf2 (double A) 508 -- Runtime Function: long double __extenddfxf2 (double A) 509 These functions extend A to the wider mode of their return type. 510 511 -- Runtime Function: double __truncxfdf2 (long double A) 512 -- Runtime Function: double __trunctfdf2 (long double A) 513 -- Runtime Function: float __truncxfsf2 (long double A) 514 -- Runtime Function: float __trunctfsf2 (long double A) 515 -- Runtime Function: float __truncdfsf2 (double A) 516 These functions truncate A to the narrower mode of their return 517 type, rounding toward zero. 518 519 -- Runtime Function: int __fixsfsi (float A) 520 -- Runtime Function: int __fixdfsi (double A) 521 -- Runtime Function: int __fixtfsi (long double A) 522 -- Runtime Function: int __fixxfsi (long double A) 523 These functions convert A to a signed integer, rounding toward 524 zero. 525 526 -- Runtime Function: long __fixsfdi (float A) 527 -- Runtime Function: long __fixdfdi (double A) 528 -- Runtime Function: long __fixtfdi (long double A) 529 -- Runtime Function: long __fixxfdi (long double A) 530 These functions convert A to a signed long, rounding toward zero. 531 532 -- Runtime Function: long long __fixsfti (float A) 533 -- Runtime Function: long long __fixdfti (double A) 534 -- Runtime Function: long long __fixtfti (long double A) 535 -- Runtime Function: long long __fixxfti (long double A) 536 These functions convert A to a signed long long, rounding toward 537 zero. 538 539 -- Runtime Function: unsigned int __fixunssfsi (float A) 540 -- Runtime Function: unsigned int __fixunsdfsi (double A) 541 -- Runtime Function: unsigned int __fixunstfsi (long double A) 542 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 543 These functions convert A to an unsigned integer, rounding toward 544 zero. Negative values all become zero. 545 546 -- Runtime Function: unsigned long __fixunssfdi (float A) 547 -- Runtime Function: unsigned long __fixunsdfdi (double A) 548 -- Runtime Function: unsigned long __fixunstfdi (long double A) 549 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 550 These functions convert A to an unsigned long, rounding toward 551 zero. Negative values all become zero. 552 553 -- Runtime Function: unsigned long long __fixunssfti (float A) 554 -- Runtime Function: unsigned long long __fixunsdfti (double A) 555 -- Runtime Function: unsigned long long __fixunstfti (long double A) 556 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 557 These functions convert A to an unsigned long long, rounding 558 toward zero. Negative values all become zero. 559 560 -- Runtime Function: float __floatsisf (int I) 561 -- Runtime Function: double __floatsidf (int I) 562 -- Runtime Function: long double __floatsitf (int I) 563 -- Runtime Function: long double __floatsixf (int I) 564 These functions convert I, a signed integer, to floating point. 565 566 -- Runtime Function: float __floatdisf (long I) 567 -- Runtime Function: double __floatdidf (long I) 568 -- Runtime Function: long double __floatditf (long I) 569 -- Runtime Function: long double __floatdixf (long I) 570 These functions convert I, a signed long, to floating point. 571 572 -- Runtime Function: float __floattisf (long long I) 573 -- Runtime Function: double __floattidf (long long I) 574 -- Runtime Function: long double __floattitf (long long I) 575 -- Runtime Function: long double __floattixf (long long I) 576 These functions convert I, a signed long long, to floating point. 577 578 -- Runtime Function: float __floatunsisf (unsigned int I) 579 -- Runtime Function: double __floatunsidf (unsigned int I) 580 -- Runtime Function: long double __floatunsitf (unsigned int I) 581 -- Runtime Function: long double __floatunsixf (unsigned int I) 582 These functions convert I, an unsigned integer, to floating point. 583 584 -- Runtime Function: float __floatundisf (unsigned long I) 585 -- Runtime Function: double __floatundidf (unsigned long I) 586 -- Runtime Function: long double __floatunditf (unsigned long I) 587 -- Runtime Function: long double __floatundixf (unsigned long I) 588 These functions convert I, an unsigned long, to floating point. 589 590 -- Runtime Function: float __floatuntisf (unsigned long long I) 591 -- Runtime Function: double __floatuntidf (unsigned long long I) 592 -- Runtime Function: long double __floatuntitf (unsigned long long I) 593 -- Runtime Function: long double __floatuntixf (unsigned long long I) 594 These functions convert I, an unsigned long long, to floating 595 point. 596 5974.2.3 Comparison functions 598-------------------------- 599 600There are two sets of basic comparison functions. 601 602 -- Runtime Function: int __cmpsf2 (float A, float B) 603 -- Runtime Function: int __cmpdf2 (double A, double B) 604 -- Runtime Function: int __cmptf2 (long double A, long double B) 605 These functions calculate a <=> b. That is, if A is less than B, 606 they return -1; if A is greater than B, they return 1; and if A 607 and B are equal they return 0. If either argument is NaN they 608 return 1, but you should not rely on this; if NaN is a 609 possibility, use one of the higher-level comparison functions. 610 611 -- Runtime Function: int __unordsf2 (float A, float B) 612 -- Runtime Function: int __unorddf2 (double A, double B) 613 -- Runtime Function: int __unordtf2 (long double A, long double B) 614 These functions return a nonzero value if either argument is NaN, 615 otherwise 0. 616 617 There is also a complete group of higher level functions which 618correspond directly to comparison operators. They implement the ISO C 619semantics for floating-point comparisons, taking NaN into account. Pay 620careful attention to the return values defined for each set. Under the 621hood, all of these routines are implemented as 622 623 if (__unordXf2 (a, b)) 624 return E; 625 return __cmpXf2 (a, b); 626 627where E is a constant chosen to give the proper behavior for NaN. 628Thus, the meaning of the return value is different for each set. Do 629not rely on this implementation; only the semantics documented below 630are guaranteed. 631 632 -- Runtime Function: int __eqsf2 (float A, float B) 633 -- Runtime Function: int __eqdf2 (double A, double B) 634 -- Runtime Function: int __eqtf2 (long double A, long double B) 635 These functions return zero if neither argument is NaN, and A and 636 B are equal. 637 638 -- Runtime Function: int __nesf2 (float A, float B) 639 -- Runtime Function: int __nedf2 (double A, double B) 640 -- Runtime Function: int __netf2 (long double A, long double B) 641 These functions return a nonzero value if either argument is NaN, 642 or if A and B are unequal. 643 644 -- Runtime Function: int __gesf2 (float A, float B) 645 -- Runtime Function: int __gedf2 (double A, double B) 646 -- Runtime Function: int __getf2 (long double A, long double B) 647 These functions return a value greater than or equal to zero if 648 neither argument is NaN, and A is greater than or equal to B. 649 650 -- Runtime Function: int __ltsf2 (float A, float B) 651 -- Runtime Function: int __ltdf2 (double A, double B) 652 -- Runtime Function: int __lttf2 (long double A, long double B) 653 These functions return a value less than zero if neither argument 654 is NaN, and A is strictly less than B. 655 656 -- Runtime Function: int __lesf2 (float A, float B) 657 -- Runtime Function: int __ledf2 (double A, double B) 658 -- Runtime Function: int __letf2 (long double A, long double B) 659 These functions return a value less than or equal to zero if 660 neither argument is NaN, and A is less than or equal to B. 661 662 -- Runtime Function: int __gtsf2 (float A, float B) 663 -- Runtime Function: int __gtdf2 (double A, double B) 664 -- Runtime Function: int __gttf2 (long double A, long double B) 665 These functions return a value greater than zero if neither 666 argument is NaN, and A is strictly greater than B. 667 6684.2.4 Other floating-point functions 669------------------------------------ 670 671 -- Runtime Function: float __powisf2 (float A, int B) 672 -- Runtime Function: double __powidf2 (double A, int B) 673 -- Runtime Function: long double __powitf2 (long double A, int B) 674 -- Runtime Function: long double __powixf2 (long double A, int B) 675 These functions convert raise A to the power B. 676 677 -- Runtime Function: complex float __mulsc3 (float A, float B, float 678 C, float D) 679 -- Runtime Function: complex double __muldc3 (double A, double B, 680 double C, double D) 681 -- Runtime Function: complex long double __multc3 (long double A, long 682 double B, long double C, long double D) 683 -- Runtime Function: complex long double __mulxc3 (long double A, long 684 double B, long double C, long double D) 685 These functions return the product of A + iB and C + iD, following 686 the rules of C99 Annex G. 687 688 -- Runtime Function: complex float __divsc3 (float A, float B, float 689 C, float D) 690 -- Runtime Function: complex double __divdc3 (double A, double B, 691 double C, double D) 692 -- Runtime Function: complex long double __divtc3 (long double A, long 693 double B, long double C, long double D) 694 -- Runtime Function: complex long double __divxc3 (long double A, long 695 double B, long double C, long double D) 696 These functions return the quotient of A + iB and C + iD (i.e., (A 697 + iB) / (C + iD)), following the rules of C99 Annex G. 698 699 700File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 701 7024.3 Routines for decimal floating point emulation 703================================================= 704 705The software decimal floating point library implements IEEE 754-2008 706decimal floating point arithmetic and is only activated on selected 707targets. 708 709 The software decimal floating point library supports either DPD 710(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 711selected at configure time. 712 7134.3.1 Arithmetic functions 714-------------------------- 715 716 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 717 B) 718 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 719 B) 720 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 721 B) 722 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 723 B) 724 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 725 _Decimal128 B) 726 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 727 _Decimal128 B) 728 These functions return the sum of A and B. 729 730 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 731 B) 732 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 733 B) 734 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 735 B) 736 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 737 B) 738 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 739 _Decimal128 B) 740 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 741 _Decimal128 B) 742 These functions return the difference between B and A; that is, 743 A - B. 744 745 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 746 B) 747 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 748 B) 749 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 750 B) 751 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 752 B) 753 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 754 _Decimal128 B) 755 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 756 _Decimal128 B) 757 These functions return the product of A and B. 758 759 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 760 B) 761 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 762 B) 763 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 764 B) 765 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 766 B) 767 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 768 _Decimal128 B) 769 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 770 _Decimal128 B) 771 These functions return the quotient of A and B; that is, A / B. 772 773 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 774 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 775 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 776 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 777 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 778 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 779 These functions return the negation of A. They simply flip the 780 sign bit, so they can produce negative zero and negative NaN. 781 7824.3.2 Conversion functions 783-------------------------- 784 785 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 786 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 787 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 788 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 789 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 790 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 791 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 792 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 793 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 794 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 795 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 796 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 797 These functions convert the value A from one decimal floating type 798 to another. 799 800 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 801 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 802 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 803 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 804 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 805 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 806 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 807 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 808 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 809 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 810 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 811 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 812 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 813 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 814 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 815 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 816 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 817 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 818 These functions convert the value of A from a binary floating type 819 to a decimal floating type of a different size. 820 821 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 822 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 823 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 824 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 825 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 826 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 827 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 828 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 829 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 830 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 831 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 832 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 833 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 834 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 835 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 836 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 837 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 838 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 839 These functions convert the value of A from a decimal floating type 840 to a binary floating type of a different size. 841 842 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 843 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 844 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 845 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 846 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 847 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 848 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 849 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 850 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 851 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 852 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 853 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 854 These functions convert the value of A between decimal and binary 855 floating types of the same size. 856 857 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 858 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 859 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 860 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 861 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 862 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 863 These functions convert A to a signed integer. 864 865 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 866 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 867 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 868 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 869 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 870 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 871 These functions convert A to a signed long. 872 873 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 874 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 875 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 876 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 877 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 878 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 879 These functions convert A to an unsigned integer. Negative values 880 all become zero. 881 882 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 883 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 884 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 885 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 886 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 887 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 888 These functions convert A to an unsigned long. Negative values 889 all become zero. 890 891 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 892 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 893 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 894 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 895 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 896 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 897 These functions convert I, a signed integer, to decimal floating 898 point. 899 900 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 901 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 902 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 903 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 904 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 905 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 906 These functions convert I, a signed long, to decimal floating 907 point. 908 909 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 910 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 911 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 912 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 913 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 914 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 915 These functions convert I, an unsigned integer, to decimal 916 floating point. 917 918 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 919 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 920 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 921 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 922 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 923 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 924 These functions convert I, an unsigned long, to decimal floating 925 point. 926 9274.3.3 Comparison functions 928-------------------------- 929 930 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 931 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 932 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 933 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 934 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 935 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 936 These functions return a nonzero value if either argument is NaN, 937 otherwise 0. 938 939 There is also a complete group of higher level functions which 940correspond directly to comparison operators. They implement the ISO C 941semantics for floating-point comparisons, taking NaN into account. Pay 942careful attention to the return values defined for each set. Under the 943hood, all of these routines are implemented as 944 945 if (__bid_unordXd2 (a, b)) 946 return E; 947 return __bid_cmpXd2 (a, b); 948 949where E is a constant chosen to give the proper behavior for NaN. 950Thus, the meaning of the return value is different for each set. Do 951not rely on this implementation; only the semantics documented below 952are guaranteed. 953 954 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 955 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 956 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 957 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 958 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 959 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 960 These functions return zero if neither argument is NaN, and A and 961 B are equal. 962 963 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 964 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 965 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 966 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 967 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 968 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 969 These functions return a nonzero value if either argument is NaN, 970 or if A and B are unequal. 971 972 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 973 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 974 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 975 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 976 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 977 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 978 These functions return a value greater than or equal to zero if 979 neither argument is NaN, and A is greater than or equal to B. 980 981 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 982 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 983 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 984 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 985 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 986 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 987 These functions return a value less than zero if neither argument 988 is NaN, and A is strictly less than B. 989 990 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 991 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 992 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 993 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 994 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 995 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 996 These functions return a value less than or equal to zero if 997 neither argument is NaN, and A is less than or equal to B. 998 999 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 1000 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 1001 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 1002 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 1003 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 1004 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 1005 These functions return a value greater than zero if neither 1006 argument is NaN, and A is strictly greater than B. 1007 1008 1009File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1010 10114.4 Routines for fixed-point fractional emulation 1012================================================= 1013 1014The software fixed-point library implements fixed-point fractional 1015arithmetic, and is only activated on selected targets. 1016 1017 For ease of comprehension `fract' is an alias for the `_Fract' type, 1018`accum' an alias for `_Accum', and `sat' an alias for `_Sat'. 1019 1020 For illustrative purposes, in this section the fixed-point fractional 1021type `short fract' is assumed to correspond to machine mode `QQmode'; 1022`unsigned short fract' to `UQQmode'; `fract' to `HQmode'; 1023`unsigned fract' to `UHQmode'; `long fract' to `SQmode'; 1024`unsigned long fract' to `USQmode'; `long long fract' to `DQmode'; and 1025`unsigned long long fract' to `UDQmode'. Similarly the fixed-point 1026accumulator type `short accum' corresponds to `HAmode'; 1027`unsigned short accum' to `UHAmode'; `accum' to `SAmode'; 1028`unsigned accum' to `USAmode'; `long accum' to `DAmode'; 1029`unsigned long accum' to `UDAmode'; `long long accum' to `TAmode'; and 1030`unsigned long long accum' to `UTAmode'. 1031 10324.4.1 Arithmetic functions 1033-------------------------- 1034 1035 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1036 B) 1037 -- Runtime Function: fract __addhq3 (fract A, fract B) 1038 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1039 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1040 long fract B) 1041 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1042 fract A, unsigned short fract B) 1043 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1044 unsigned fract B) 1045 -- Runtime Function: unsigned long fract __addusq3 (unsigned long 1046 fract A, unsigned long fract B) 1047 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1048 long fract A, unsigned long long fract B) 1049 -- Runtime Function: short accum __addha3 (short accum A, short accum 1050 B) 1051 -- Runtime Function: accum __addsa3 (accum A, accum B) 1052 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1053 -- Runtime Function: long long accum __addta3 (long long accum A, long 1054 long accum B) 1055 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1056 accum A, unsigned short accum B) 1057 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1058 unsigned accum B) 1059 -- Runtime Function: unsigned long accum __adduda3 (unsigned long 1060 accum A, unsigned long accum B) 1061 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1062 long accum A, unsigned long long accum B) 1063 These functions return the sum of A and B. 1064 1065 -- Runtime Function: short fract __ssaddqq3 (short fract A, short 1066 fract B) 1067 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1068 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1069 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1070 long long fract B) 1071 -- Runtime Function: short accum __ssaddha3 (short accum A, short 1072 accum B) 1073 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1074 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1075 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1076 long long accum B) 1077 These functions return the sum of A and B with signed saturation. 1078 1079 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1080 fract A, unsigned short fract B) 1081 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1082 unsigned fract B) 1083 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1084 fract A, unsigned long fract B) 1085 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1086 long long fract A, unsigned long long fract B) 1087 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1088 accum A, unsigned short accum B) 1089 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1090 unsigned accum B) 1091 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1092 accum A, unsigned long accum B) 1093 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1094 long long accum A, unsigned long long accum B) 1095 These functions return the sum of A and B with unsigned saturation. 1096 1097 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1098 B) 1099 -- Runtime Function: fract __subhq3 (fract A, fract B) 1100 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1101 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1102 long fract B) 1103 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1104 fract A, unsigned short fract B) 1105 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1106 unsigned fract B) 1107 -- Runtime Function: unsigned long fract __subusq3 (unsigned long 1108 fract A, unsigned long fract B) 1109 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1110 long fract A, unsigned long long fract B) 1111 -- Runtime Function: short accum __subha3 (short accum A, short accum 1112 B) 1113 -- Runtime Function: accum __subsa3 (accum A, accum B) 1114 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1115 -- Runtime Function: long long accum __subta3 (long long accum A, long 1116 long accum B) 1117 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1118 accum A, unsigned short accum B) 1119 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1120 unsigned accum B) 1121 -- Runtime Function: unsigned long accum __subuda3 (unsigned long 1122 accum A, unsigned long accum B) 1123 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1124 long accum A, unsigned long long accum B) 1125 These functions return the difference of A and B; that is, `A - B'. 1126 1127 -- Runtime Function: short fract __sssubqq3 (short fract A, short 1128 fract B) 1129 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1130 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1131 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1132 long long fract B) 1133 -- Runtime Function: short accum __sssubha3 (short accum A, short 1134 accum B) 1135 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1136 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1137 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1138 long long accum B) 1139 These functions return the difference of A and B with signed 1140 saturation; that is, `A - B'. 1141 1142 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1143 fract A, unsigned short fract B) 1144 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1145 unsigned fract B) 1146 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1147 fract A, unsigned long fract B) 1148 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1149 long long fract A, unsigned long long fract B) 1150 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1151 accum A, unsigned short accum B) 1152 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1153 unsigned accum B) 1154 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1155 accum A, unsigned long accum B) 1156 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1157 long long accum A, unsigned long long accum B) 1158 These functions return the difference of A and B with unsigned 1159 saturation; that is, `A - B'. 1160 1161 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1162 B) 1163 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1164 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1165 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1166 long fract B) 1167 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1168 fract A, unsigned short fract B) 1169 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1170 unsigned fract B) 1171 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long 1172 fract A, unsigned long fract B) 1173 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1174 long fract A, unsigned long long fract B) 1175 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1176 B) 1177 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1178 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1179 -- Runtime Function: long long accum __multa3 (long long accum A, long 1180 long accum B) 1181 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1182 accum A, unsigned short accum B) 1183 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1184 unsigned accum B) 1185 -- Runtime Function: unsigned long accum __muluda3 (unsigned long 1186 accum A, unsigned long accum B) 1187 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1188 long accum A, unsigned long long accum B) 1189 These functions return the product of A and B. 1190 1191 -- Runtime Function: short fract __ssmulqq3 (short fract A, short 1192 fract B) 1193 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1194 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1195 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1196 long long fract B) 1197 -- Runtime Function: short accum __ssmulha3 (short accum A, short 1198 accum B) 1199 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1200 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1201 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1202 long long accum B) 1203 These functions return the product of A and B with signed 1204 saturation. 1205 1206 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1207 fract A, unsigned short fract B) 1208 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1209 unsigned fract B) 1210 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1211 fract A, unsigned long fract B) 1212 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1213 long long fract A, unsigned long long fract B) 1214 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1215 accum A, unsigned short accum B) 1216 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1217 unsigned accum B) 1218 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1219 accum A, unsigned long accum B) 1220 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1221 long long accum A, unsigned long long accum B) 1222 These functions return the product of A and B with unsigned 1223 saturation. 1224 1225 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1226 B) 1227 -- Runtime Function: fract __divhq3 (fract A, fract B) 1228 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1229 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1230 long fract B) 1231 -- Runtime Function: short accum __divha3 (short accum A, short accum 1232 B) 1233 -- Runtime Function: accum __divsa3 (accum A, accum B) 1234 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1235 -- Runtime Function: long long accum __divta3 (long long accum A, long 1236 long accum B) 1237 These functions return the quotient of the signed division of A 1238 and B. 1239 1240 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1241 fract A, unsigned short fract B) 1242 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1243 unsigned fract B) 1244 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1245 fract A, unsigned long fract B) 1246 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned 1247 long long fract A, unsigned long long fract B) 1248 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1249 accum A, unsigned short accum B) 1250 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1251 unsigned accum B) 1252 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1253 accum A, unsigned long accum B) 1254 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned 1255 long long accum A, unsigned long long accum B) 1256 These functions return the quotient of the unsigned division of A 1257 and B. 1258 1259 -- Runtime Function: short fract __ssdivqq3 (short fract A, short 1260 fract B) 1261 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1262 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1263 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1264 long long fract B) 1265 -- Runtime Function: short accum __ssdivha3 (short accum A, short 1266 accum B) 1267 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1268 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1269 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1270 long long accum B) 1271 These functions return the quotient of the signed division of A 1272 and B with signed saturation. 1273 1274 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1275 fract A, unsigned short fract B) 1276 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1277 unsigned fract B) 1278 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1279 fract A, unsigned long fract B) 1280 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1281 long long fract A, unsigned long long fract B) 1282 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1283 accum A, unsigned short accum B) 1284 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1285 unsigned accum B) 1286 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1287 accum A, unsigned long accum B) 1288 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1289 long long accum A, unsigned long long accum B) 1290 These functions return the quotient of the unsigned division of A 1291 and B with unsigned saturation. 1292 1293 -- Runtime Function: short fract __negqq2 (short fract A) 1294 -- Runtime Function: fract __neghq2 (fract A) 1295 -- Runtime Function: long fract __negsq2 (long fract A) 1296 -- Runtime Function: long long fract __negdq2 (long long fract A) 1297 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1298 fract A) 1299 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1300 -- Runtime Function: unsigned long fract __negusq2 (unsigned long 1301 fract A) 1302 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1303 long fract A) 1304 -- Runtime Function: short accum __negha2 (short accum A) 1305 -- Runtime Function: accum __negsa2 (accum A) 1306 -- Runtime Function: long accum __negda2 (long accum A) 1307 -- Runtime Function: long long accum __negta2 (long long accum A) 1308 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1309 accum A) 1310 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1311 -- Runtime Function: unsigned long accum __neguda2 (unsigned long 1312 accum A) 1313 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1314 long accum A) 1315 These functions return the negation of A. 1316 1317 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1318 -- Runtime Function: fract __ssneghq2 (fract A) 1319 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1320 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1321 -- Runtime Function: short accum __ssnegha2 (short accum A) 1322 -- Runtime Function: accum __ssnegsa2 (accum A) 1323 -- Runtime Function: long accum __ssnegda2 (long accum A) 1324 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1325 These functions return the negation of A with signed saturation. 1326 1327 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1328 fract A) 1329 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1330 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1331 fract A) 1332 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1333 long long fract A) 1334 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1335 accum A) 1336 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1337 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1338 accum A) 1339 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1340 long long accum A) 1341 These functions return the negation of A with unsigned saturation. 1342 1343 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1344 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1345 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1346 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1347 B) 1348 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1349 fract A, int B) 1350 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1351 B) 1352 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1353 fract A, int B) 1354 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned 1355 long long fract A, int B) 1356 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1357 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1358 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1359 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1360 B) 1361 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1362 accum A, int B) 1363 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1364 B) 1365 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1366 accum A, int B) 1367 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned 1368 long long accum A, int B) 1369 These functions return the result of shifting A left by B bits. 1370 1371 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1372 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1373 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1374 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1375 B) 1376 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1377 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1378 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1379 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1380 B) 1381 These functions return the result of arithmetically shifting A 1382 right by B bits. 1383 1384 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1385 fract A, int B) 1386 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1387 B) 1388 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1389 fract A, int B) 1390 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned 1391 long long fract A, int B) 1392 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1393 accum A, int B) 1394 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1395 B) 1396 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1397 accum A, int B) 1398 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned 1399 long long accum A, int B) 1400 These functions return the result of logically shifting A right by 1401 B bits. 1402 1403 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1404 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1405 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1406 int B) 1407 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1408 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1409 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1410 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1411 int B) 1412 These functions return the result of shifting A left by B bits 1413 with signed saturation. 1414 1415 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1416 fract A, int B) 1417 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, 1418 int B) 1419 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1420 fract A, int B) 1421 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1422 long long fract A, int B) 1423 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1424 accum A, int B) 1425 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, 1426 int B) 1427 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1428 accum A, int B) 1429 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1430 long long accum A, int B) 1431 These functions return the result of shifting A left by B bits 1432 with unsigned saturation. 1433 14344.4.2 Comparison functions 1435-------------------------- 1436 1437The following functions implement fixed-point comparisons. These 1438functions implement a low-level compare, upon which the higher level 1439comparison operators (such as less than and greater than or equal to) 1440can be constructed. The returned values lie in the range zero to two, 1441to allow the high-level operators to be implemented by testing the 1442returned result using either signed or unsigned comparison. 1443 1444 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1445 -- Runtime Function: int __cmphq2 (fract A, fract B) 1446 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1447 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1448 B) 1449 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1450 short fract B) 1451 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1452 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1453 long fract B) 1454 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1455 unsigned long long fract B) 1456 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1457 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1458 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1459 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1460 B) 1461 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1462 short accum B) 1463 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1464 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1465 long accum B) 1466 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1467 unsigned long long accum B) 1468 These functions perform a signed or unsigned comparison of A and B 1469 (depending on the selected machine mode). If A is less than B, 1470 they return 0; if A is greater than B, they return 2; and if A and 1471 B are equal they return 1. 1472 14734.4.3 Conversion functions 1474-------------------------- 1475 1476 -- Runtime Function: fract __fractqqhq2 (short fract A) 1477 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1478 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1479 -- Runtime Function: short accum __fractqqha (short fract A) 1480 -- Runtime Function: accum __fractqqsa (short fract A) 1481 -- Runtime Function: long accum __fractqqda (short fract A) 1482 -- Runtime Function: long long accum __fractqqta (short fract A) 1483 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1484 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1485 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1486 -- Runtime Function: unsigned long long fract __fractqqudq (short 1487 fract A) 1488 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1489 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1490 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1491 -- Runtime Function: unsigned long long accum __fractqquta (short 1492 fract A) 1493 -- Runtime Function: signed char __fractqqqi (short fract A) 1494 -- Runtime Function: short __fractqqhi (short fract A) 1495 -- Runtime Function: int __fractqqsi (short fract A) 1496 -- Runtime Function: long __fractqqdi (short fract A) 1497 -- Runtime Function: long long __fractqqti (short fract A) 1498 -- Runtime Function: float __fractqqsf (short fract A) 1499 -- Runtime Function: double __fractqqdf (short fract A) 1500 -- Runtime Function: short fract __fracthqqq2 (fract A) 1501 -- Runtime Function: long fract __fracthqsq2 (fract A) 1502 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1503 -- Runtime Function: short accum __fracthqha (fract A) 1504 -- Runtime Function: accum __fracthqsa (fract A) 1505 -- Runtime Function: long accum __fracthqda (fract A) 1506 -- Runtime Function: long long accum __fracthqta (fract A) 1507 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1508 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1509 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1510 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1511 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1512 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1513 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1514 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1515 -- Runtime Function: signed char __fracthqqi (fract A) 1516 -- Runtime Function: short __fracthqhi (fract A) 1517 -- Runtime Function: int __fracthqsi (fract A) 1518 -- Runtime Function: long __fracthqdi (fract A) 1519 -- Runtime Function: long long __fracthqti (fract A) 1520 -- Runtime Function: float __fracthqsf (fract A) 1521 -- Runtime Function: double __fracthqdf (fract A) 1522 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1523 -- Runtime Function: fract __fractsqhq2 (long fract A) 1524 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1525 -- Runtime Function: short accum __fractsqha (long fract A) 1526 -- Runtime Function: accum __fractsqsa (long fract A) 1527 -- Runtime Function: long accum __fractsqda (long fract A) 1528 -- Runtime Function: long long accum __fractsqta (long fract A) 1529 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1530 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1531 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1532 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1533 A) 1534 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1535 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1536 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1537 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1538 A) 1539 -- Runtime Function: signed char __fractsqqi (long fract A) 1540 -- Runtime Function: short __fractsqhi (long fract A) 1541 -- Runtime Function: int __fractsqsi (long fract A) 1542 -- Runtime Function: long __fractsqdi (long fract A) 1543 -- Runtime Function: long long __fractsqti (long fract A) 1544 -- Runtime Function: float __fractsqsf (long fract A) 1545 -- Runtime Function: double __fractsqdf (long fract A) 1546 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1547 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1548 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1549 -- Runtime Function: short accum __fractdqha (long long fract A) 1550 -- Runtime Function: accum __fractdqsa (long long fract A) 1551 -- Runtime Function: long accum __fractdqda (long long fract A) 1552 -- Runtime Function: long long accum __fractdqta (long long fract A) 1553 -- Runtime Function: unsigned short fract __fractdquqq (long long 1554 fract A) 1555 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1556 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1557 A) 1558 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1559 fract A) 1560 -- Runtime Function: unsigned short accum __fractdquha (long long 1561 fract A) 1562 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1563 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1564 A) 1565 -- Runtime Function: unsigned long long accum __fractdquta (long long 1566 fract A) 1567 -- Runtime Function: signed char __fractdqqi (long long fract A) 1568 -- Runtime Function: short __fractdqhi (long long fract A) 1569 -- Runtime Function: int __fractdqsi (long long fract A) 1570 -- Runtime Function: long __fractdqdi (long long fract A) 1571 -- Runtime Function: long long __fractdqti (long long fract A) 1572 -- Runtime Function: float __fractdqsf (long long fract A) 1573 -- Runtime Function: double __fractdqdf (long long fract A) 1574 -- Runtime Function: short fract __fracthaqq (short accum A) 1575 -- Runtime Function: fract __fracthahq (short accum A) 1576 -- Runtime Function: long fract __fracthasq (short accum A) 1577 -- Runtime Function: long long fract __fracthadq (short accum A) 1578 -- Runtime Function: accum __fracthasa2 (short accum A) 1579 -- Runtime Function: long accum __fracthada2 (short accum A) 1580 -- Runtime Function: long long accum __fracthata2 (short accum A) 1581 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1582 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1583 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1584 -- Runtime Function: unsigned long long fract __fracthaudq (short 1585 accum A) 1586 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1587 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1588 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1589 -- Runtime Function: unsigned long long accum __fracthauta (short 1590 accum A) 1591 -- Runtime Function: signed char __fracthaqi (short accum A) 1592 -- Runtime Function: short __fracthahi (short accum A) 1593 -- Runtime Function: int __fracthasi (short accum A) 1594 -- Runtime Function: long __fracthadi (short accum A) 1595 -- Runtime Function: long long __fracthati (short accum A) 1596 -- Runtime Function: float __fracthasf (short accum A) 1597 -- Runtime Function: double __fracthadf (short accum A) 1598 -- Runtime Function: short fract __fractsaqq (accum A) 1599 -- Runtime Function: fract __fractsahq (accum A) 1600 -- Runtime Function: long fract __fractsasq (accum A) 1601 -- Runtime Function: long long fract __fractsadq (accum A) 1602 -- Runtime Function: short accum __fractsaha2 (accum A) 1603 -- Runtime Function: long accum __fractsada2 (accum A) 1604 -- Runtime Function: long long accum __fractsata2 (accum A) 1605 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1606 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1607 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1608 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1609 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1610 -- Runtime Function: unsigned accum __fractsausa (accum A) 1611 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1612 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1613 -- Runtime Function: signed char __fractsaqi (accum A) 1614 -- Runtime Function: short __fractsahi (accum A) 1615 -- Runtime Function: int __fractsasi (accum A) 1616 -- Runtime Function: long __fractsadi (accum A) 1617 -- Runtime Function: long long __fractsati (accum A) 1618 -- Runtime Function: float __fractsasf (accum A) 1619 -- Runtime Function: double __fractsadf (accum A) 1620 -- Runtime Function: short fract __fractdaqq (long accum A) 1621 -- Runtime Function: fract __fractdahq (long accum A) 1622 -- Runtime Function: long fract __fractdasq (long accum A) 1623 -- Runtime Function: long long fract __fractdadq (long accum A) 1624 -- Runtime Function: short accum __fractdaha2 (long accum A) 1625 -- Runtime Function: accum __fractdasa2 (long accum A) 1626 -- Runtime Function: long long accum __fractdata2 (long accum A) 1627 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1628 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1629 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1630 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1631 A) 1632 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1633 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1634 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1635 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1636 A) 1637 -- Runtime Function: signed char __fractdaqi (long accum A) 1638 -- Runtime Function: short __fractdahi (long accum A) 1639 -- Runtime Function: int __fractdasi (long accum A) 1640 -- Runtime Function: long __fractdadi (long accum A) 1641 -- Runtime Function: long long __fractdati (long accum A) 1642 -- Runtime Function: float __fractdasf (long accum A) 1643 -- Runtime Function: double __fractdadf (long accum A) 1644 -- Runtime Function: short fract __fracttaqq (long long accum A) 1645 -- Runtime Function: fract __fracttahq (long long accum A) 1646 -- Runtime Function: long fract __fracttasq (long long accum A) 1647 -- Runtime Function: long long fract __fracttadq (long long accum A) 1648 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1649 -- Runtime Function: accum __fracttasa2 (long long accum A) 1650 -- Runtime Function: long accum __fracttada2 (long long accum A) 1651 -- Runtime Function: unsigned short fract __fracttauqq (long long 1652 accum A) 1653 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1654 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1655 A) 1656 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1657 accum A) 1658 -- Runtime Function: unsigned short accum __fracttauha (long long 1659 accum A) 1660 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1661 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1662 A) 1663 -- Runtime Function: unsigned long long accum __fracttauta (long long 1664 accum A) 1665 -- Runtime Function: signed char __fracttaqi (long long accum A) 1666 -- Runtime Function: short __fracttahi (long long accum A) 1667 -- Runtime Function: int __fracttasi (long long accum A) 1668 -- Runtime Function: long __fracttadi (long long accum A) 1669 -- Runtime Function: long long __fracttati (long long accum A) 1670 -- Runtime Function: float __fracttasf (long long accum A) 1671 -- Runtime Function: double __fracttadf (long long accum A) 1672 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1673 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1674 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1675 -- Runtime Function: long long fract __fractuqqdq (unsigned short 1676 fract A) 1677 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1678 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1679 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1680 -- Runtime Function: long long accum __fractuqqta (unsigned short 1681 fract A) 1682 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1683 fract A) 1684 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned 1685 short fract A) 1686 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1687 short fract A) 1688 -- Runtime Function: unsigned short accum __fractuqquha (unsigned 1689 short fract A) 1690 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short 1691 fract A) 1692 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1693 fract A) 1694 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1695 short fract A) 1696 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1697 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1698 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1699 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1700 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1701 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1702 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1703 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1704 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1705 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1706 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1707 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1708 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1709 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1710 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1711 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1712 fract A) 1713 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned 1714 fract A) 1715 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1716 fract A) 1717 -- Runtime Function: unsigned short accum __fractuhquha (unsigned 1718 fract A) 1719 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1720 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1721 A) 1722 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1723 fract A) 1724 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1725 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1726 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1727 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1728 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1729 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1730 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1731 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1732 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1733 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1734 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1735 A) 1736 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1737 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1738 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1739 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1740 A) 1741 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned 1742 long fract A) 1743 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long 1744 fract A) 1745 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1746 long fract A) 1747 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1748 fract A) 1749 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1750 A) 1751 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1752 fract A) 1753 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1754 long fract A) 1755 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1756 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1757 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1758 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1759 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1760 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1761 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1762 -- Runtime Function: short fract __fractudqqq (unsigned long long 1763 fract A) 1764 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1765 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1766 A) 1767 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1768 fract A) 1769 -- Runtime Function: short accum __fractudqha (unsigned long long 1770 fract A) 1771 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1772 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1773 A) 1774 -- Runtime Function: long long accum __fractudqta (unsigned long long 1775 fract A) 1776 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned 1777 long long fract A) 1778 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1779 fract A) 1780 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1781 long fract A) 1782 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1783 long fract A) 1784 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1785 fract A) 1786 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1787 long fract A) 1788 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1789 long long fract A) 1790 -- Runtime Function: signed char __fractudqqi (unsigned long long 1791 fract A) 1792 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1793 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1794 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1795 -- Runtime Function: long long __fractudqti (unsigned long long fract 1796 A) 1797 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1798 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1799 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1800 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1801 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1802 -- Runtime Function: long long fract __fractuhadq (unsigned short 1803 accum A) 1804 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1805 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1806 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1807 -- Runtime Function: long long accum __fractuhata (unsigned short 1808 accum A) 1809 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned 1810 short accum A) 1811 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short 1812 accum A) 1813 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1814 accum A) 1815 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1816 short accum A) 1817 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1818 accum A) 1819 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned 1820 short accum A) 1821 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1822 short accum A) 1823 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1824 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1825 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1826 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1827 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1828 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1829 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1830 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1831 -- Runtime Function: fract __fractusahq (unsigned accum A) 1832 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1833 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1834 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1835 -- Runtime Function: accum __fractusasa (unsigned accum A) 1836 -- Runtime Function: long accum __fractusada (unsigned accum A) 1837 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1838 -- Runtime Function: unsigned short fract __fractusauqq (unsigned 1839 accum A) 1840 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1841 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1842 A) 1843 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1844 accum A) 1845 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1846 accum A) 1847 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned 1848 accum A) 1849 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1850 accum A) 1851 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1852 -- Runtime Function: short __fractusahi (unsigned accum A) 1853 -- Runtime Function: int __fractusasi (unsigned accum A) 1854 -- Runtime Function: long __fractusadi (unsigned accum A) 1855 -- Runtime Function: long long __fractusati (unsigned accum A) 1856 -- Runtime Function: float __fractusasf (unsigned accum A) 1857 -- Runtime Function: double __fractusadf (unsigned accum A) 1858 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1859 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1860 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1861 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1862 A) 1863 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1864 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1865 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1866 -- Runtime Function: long long accum __fractudata (unsigned long accum 1867 A) 1868 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1869 accum A) 1870 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1871 A) 1872 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1873 accum A) 1874 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1875 long accum A) 1876 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned 1877 long accum A) 1878 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long 1879 accum A) 1880 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1881 long accum A) 1882 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1883 -- Runtime Function: short __fractudahi (unsigned long accum A) 1884 -- Runtime Function: int __fractudasi (unsigned long accum A) 1885 -- Runtime Function: long __fractudadi (unsigned long accum A) 1886 -- Runtime Function: long long __fractudati (unsigned long accum A) 1887 -- Runtime Function: float __fractudasf (unsigned long accum A) 1888 -- Runtime Function: double __fractudadf (unsigned long accum A) 1889 -- Runtime Function: short fract __fractutaqq (unsigned long long 1890 accum A) 1891 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1892 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1893 A) 1894 -- Runtime Function: long long fract __fractutadq (unsigned long long 1895 accum A) 1896 -- Runtime Function: short accum __fractutaha (unsigned long long 1897 accum A) 1898 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1899 -- Runtime Function: long accum __fractutada (unsigned long long accum 1900 A) 1901 -- Runtime Function: long long accum __fractutata (unsigned long long 1902 accum A) 1903 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1904 long accum A) 1905 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1906 accum A) 1907 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1908 long accum A) 1909 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1910 long long accum A) 1911 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned 1912 long long accum A) 1913 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1914 accum A) 1915 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1916 long accum A) 1917 -- Runtime Function: signed char __fractutaqi (unsigned long long 1918 accum A) 1919 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1920 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1921 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1922 -- Runtime Function: long long __fractutati (unsigned long long accum 1923 A) 1924 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1925 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1926 -- Runtime Function: short fract __fractqiqq (signed char A) 1927 -- Runtime Function: fract __fractqihq (signed char A) 1928 -- Runtime Function: long fract __fractqisq (signed char A) 1929 -- Runtime Function: long long fract __fractqidq (signed char A) 1930 -- Runtime Function: short accum __fractqiha (signed char A) 1931 -- Runtime Function: accum __fractqisa (signed char A) 1932 -- Runtime Function: long accum __fractqida (signed char A) 1933 -- Runtime Function: long long accum __fractqita (signed char A) 1934 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1935 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1936 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1937 -- Runtime Function: unsigned long long fract __fractqiudq (signed 1938 char A) 1939 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1940 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1941 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1942 -- Runtime Function: unsigned long long accum __fractqiuta (signed 1943 char A) 1944 -- Runtime Function: short fract __fracthiqq (short A) 1945 -- Runtime Function: fract __fracthihq (short A) 1946 -- Runtime Function: long fract __fracthisq (short A) 1947 -- Runtime Function: long long fract __fracthidq (short A) 1948 -- Runtime Function: short accum __fracthiha (short A) 1949 -- Runtime Function: accum __fracthisa (short A) 1950 -- Runtime Function: long accum __fracthida (short A) 1951 -- Runtime Function: long long accum __fracthita (short A) 1952 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1953 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1954 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1955 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1956 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1957 -- Runtime Function: unsigned accum __fracthiusa (short A) 1958 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1959 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1960 -- Runtime Function: short fract __fractsiqq (int A) 1961 -- Runtime Function: fract __fractsihq (int A) 1962 -- Runtime Function: long fract __fractsisq (int A) 1963 -- Runtime Function: long long fract __fractsidq (int A) 1964 -- Runtime Function: short accum __fractsiha (int A) 1965 -- Runtime Function: accum __fractsisa (int A) 1966 -- Runtime Function: long accum __fractsida (int A) 1967 -- Runtime Function: long long accum __fractsita (int A) 1968 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1969 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1970 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1971 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1972 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1973 -- Runtime Function: unsigned accum __fractsiusa (int A) 1974 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1975 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1976 -- Runtime Function: short fract __fractdiqq (long A) 1977 -- Runtime Function: fract __fractdihq (long A) 1978 -- Runtime Function: long fract __fractdisq (long A) 1979 -- Runtime Function: long long fract __fractdidq (long A) 1980 -- Runtime Function: short accum __fractdiha (long A) 1981 -- Runtime Function: accum __fractdisa (long A) 1982 -- Runtime Function: long accum __fractdida (long A) 1983 -- Runtime Function: long long accum __fractdita (long A) 1984 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1985 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1986 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1987 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1988 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1989 -- Runtime Function: unsigned accum __fractdiusa (long A) 1990 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1991 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1992 -- Runtime Function: short fract __fracttiqq (long long A) 1993 -- Runtime Function: fract __fracttihq (long long A) 1994 -- Runtime Function: long fract __fracttisq (long long A) 1995 -- Runtime Function: long long fract __fracttidq (long long A) 1996 -- Runtime Function: short accum __fracttiha (long long A) 1997 -- Runtime Function: accum __fracttisa (long long A) 1998 -- Runtime Function: long accum __fracttida (long long A) 1999 -- Runtime Function: long long accum __fracttita (long long A) 2000 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 2001 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 2002 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 2003 -- Runtime Function: unsigned long long fract __fracttiudq (long long 2004 A) 2005 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2006 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2007 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2008 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2009 A) 2010 -- Runtime Function: short fract __fractsfqq (float A) 2011 -- Runtime Function: fract __fractsfhq (float A) 2012 -- Runtime Function: long fract __fractsfsq (float A) 2013 -- Runtime Function: long long fract __fractsfdq (float A) 2014 -- Runtime Function: short accum __fractsfha (float A) 2015 -- Runtime Function: accum __fractsfsa (float A) 2016 -- Runtime Function: long accum __fractsfda (float A) 2017 -- Runtime Function: long long accum __fractsfta (float A) 2018 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2019 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2020 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2021 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2022 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2023 -- Runtime Function: unsigned accum __fractsfusa (float A) 2024 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2025 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2026 -- Runtime Function: short fract __fractdfqq (double A) 2027 -- Runtime Function: fract __fractdfhq (double A) 2028 -- Runtime Function: long fract __fractdfsq (double A) 2029 -- Runtime Function: long long fract __fractdfdq (double A) 2030 -- Runtime Function: short accum __fractdfha (double A) 2031 -- Runtime Function: accum __fractdfsa (double A) 2032 -- Runtime Function: long accum __fractdfda (double A) 2033 -- Runtime Function: long long accum __fractdfta (double A) 2034 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2035 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2036 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2037 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2038 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2039 -- Runtime Function: unsigned accum __fractdfusa (double A) 2040 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2041 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2042 These functions convert from fractional and signed non-fractionals 2043 to fractionals and signed non-fractionals, without saturation. 2044 2045 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2046 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2047 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2048 -- Runtime Function: short accum __satfractqqha (short fract A) 2049 -- Runtime Function: accum __satfractqqsa (short fract A) 2050 -- Runtime Function: long accum __satfractqqda (short fract A) 2051 -- Runtime Function: long long accum __satfractqqta (short fract A) 2052 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2053 A) 2054 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2055 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2056 A) 2057 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2058 fract A) 2059 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2060 A) 2061 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2062 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2063 A) 2064 -- Runtime Function: unsigned long long accum __satfractqquta (short 2065 fract A) 2066 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2067 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2068 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2069 -- Runtime Function: short accum __satfracthqha (fract A) 2070 -- Runtime Function: accum __satfracthqsa (fract A) 2071 -- Runtime Function: long accum __satfracthqda (fract A) 2072 -- Runtime Function: long long accum __satfracthqta (fract A) 2073 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2074 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2075 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2076 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2077 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2078 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2079 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2080 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2081 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2082 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2083 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2084 -- Runtime Function: short accum __satfractsqha (long fract A) 2085 -- Runtime Function: accum __satfractsqsa (long fract A) 2086 -- Runtime Function: long accum __satfractsqda (long fract A) 2087 -- Runtime Function: long long accum __satfractsqta (long fract A) 2088 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2089 A) 2090 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2091 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2092 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2093 fract A) 2094 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2095 A) 2096 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2097 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2098 -- Runtime Function: unsigned long long accum __satfractsquta (long 2099 fract A) 2100 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2101 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2102 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2103 -- Runtime Function: short accum __satfractdqha (long long fract A) 2104 -- Runtime Function: accum __satfractdqsa (long long fract A) 2105 -- Runtime Function: long accum __satfractdqda (long long fract A) 2106 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2107 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2108 fract A) 2109 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2110 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2111 fract A) 2112 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2113 long fract A) 2114 -- Runtime Function: unsigned short accum __satfractdquha (long long 2115 fract A) 2116 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2117 -- Runtime Function: unsigned long accum __satfractdquda (long long 2118 fract A) 2119 -- Runtime Function: unsigned long long accum __satfractdquta (long 2120 long fract A) 2121 -- Runtime Function: short fract __satfracthaqq (short accum A) 2122 -- Runtime Function: fract __satfracthahq (short accum A) 2123 -- Runtime Function: long fract __satfracthasq (short accum A) 2124 -- Runtime Function: long long fract __satfracthadq (short accum A) 2125 -- Runtime Function: accum __satfracthasa2 (short accum A) 2126 -- Runtime Function: long accum __satfracthada2 (short accum A) 2127 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2128 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2129 A) 2130 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2131 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2132 A) 2133 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2134 accum A) 2135 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2136 A) 2137 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2138 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2139 A) 2140 -- Runtime Function: unsigned long long accum __satfracthauta (short 2141 accum A) 2142 -- Runtime Function: short fract __satfractsaqq (accum A) 2143 -- Runtime Function: fract __satfractsahq (accum A) 2144 -- Runtime Function: long fract __satfractsasq (accum A) 2145 -- Runtime Function: long long fract __satfractsadq (accum A) 2146 -- Runtime Function: short accum __satfractsaha2 (accum A) 2147 -- Runtime Function: long accum __satfractsada2 (accum A) 2148 -- Runtime Function: long long accum __satfractsata2 (accum A) 2149 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2150 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2151 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2152 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2153 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2154 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2155 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2156 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2157 -- Runtime Function: short fract __satfractdaqq (long accum A) 2158 -- Runtime Function: fract __satfractdahq (long accum A) 2159 -- Runtime Function: long fract __satfractdasq (long accum A) 2160 -- Runtime Function: long long fract __satfractdadq (long accum A) 2161 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2162 -- Runtime Function: accum __satfractdasa2 (long accum A) 2163 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2164 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2165 A) 2166 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2167 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2168 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2169 accum A) 2170 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2171 A) 2172 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2173 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2174 -- Runtime Function: unsigned long long accum __satfractdauta (long 2175 accum A) 2176 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2177 -- Runtime Function: fract __satfracttahq (long long accum A) 2178 -- Runtime Function: long fract __satfracttasq (long long accum A) 2179 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2180 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2181 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2182 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2183 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2184 accum A) 2185 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2186 -- Runtime Function: unsigned long fract __satfracttausq (long long 2187 accum A) 2188 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2189 long accum A) 2190 -- Runtime Function: unsigned short accum __satfracttauha (long long 2191 accum A) 2192 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2193 -- Runtime Function: unsigned long accum __satfracttauda (long long 2194 accum A) 2195 -- Runtime Function: unsigned long long accum __satfracttauta (long 2196 long accum A) 2197 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2198 A) 2199 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2200 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2201 A) 2202 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2203 fract A) 2204 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2205 A) 2206 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2207 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2208 A) 2209 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2210 fract A) 2211 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2212 fract A) 2213 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2214 short fract A) 2215 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2216 (unsigned short fract A) 2217 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2218 short fract A) 2219 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2220 fract A) 2221 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2222 short fract A) 2223 -- Runtime Function: unsigned long long accum __satfractuqquta 2224 (unsigned short fract A) 2225 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2226 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2227 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2228 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2229 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2230 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2231 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2232 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2233 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2234 fract A) 2235 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2236 fract A) 2237 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2238 (unsigned fract A) 2239 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2240 fract A) 2241 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2242 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2243 fract A) 2244 -- Runtime Function: unsigned long long accum __satfractuhquta 2245 (unsigned fract A) 2246 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2247 A) 2248 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2249 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2250 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2251 fract A) 2252 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2253 A) 2254 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2255 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2256 -- Runtime Function: long long accum __satfractusqta (unsigned long 2257 fract A) 2258 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2259 long fract A) 2260 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2261 fract A) 2262 -- Runtime Function: unsigned long long fract __satfractusqudq2 2263 (unsigned long fract A) 2264 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2265 long fract A) 2266 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2267 fract A) 2268 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2269 long fract A) 2270 -- Runtime Function: unsigned long long accum __satfractusquta 2271 (unsigned long fract A) 2272 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2273 fract A) 2274 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2275 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2276 fract A) 2277 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2278 long fract A) 2279 -- Runtime Function: short accum __satfractudqha (unsigned long long 2280 fract A) 2281 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2282 -- Runtime Function: long accum __satfractudqda (unsigned long long 2283 fract A) 2284 -- Runtime Function: long long accum __satfractudqta (unsigned long 2285 long fract A) 2286 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2287 long long fract A) 2288 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2289 long fract A) 2290 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2291 long long fract A) 2292 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2293 long long fract A) 2294 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2295 long fract A) 2296 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2297 long long fract A) 2298 -- Runtime Function: unsigned long long accum __satfractudquta 2299 (unsigned long long fract A) 2300 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2301 A) 2302 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2303 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2304 A) 2305 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2306 accum A) 2307 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2308 A) 2309 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2310 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2311 A) 2312 -- Runtime Function: long long accum __satfractuhata (unsigned short 2313 accum A) 2314 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2315 short accum A) 2316 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2317 accum A) 2318 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2319 short accum A) 2320 -- Runtime Function: unsigned long long fract __satfractuhaudq 2321 (unsigned short accum A) 2322 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2323 accum A) 2324 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2325 short accum A) 2326 -- Runtime Function: unsigned long long accum __satfractuhauta2 2327 (unsigned short accum A) 2328 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2329 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2330 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2331 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2332 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2333 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2334 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2335 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2336 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2337 accum A) 2338 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2339 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2340 accum A) 2341 -- Runtime Function: unsigned long long fract __satfractusaudq 2342 (unsigned accum A) 2343 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2344 accum A) 2345 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2346 accum A) 2347 -- Runtime Function: unsigned long long accum __satfractusauta2 2348 (unsigned accum A) 2349 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2350 A) 2351 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2352 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2353 -- Runtime Function: long long fract __satfractudadq (unsigned long 2354 accum A) 2355 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2356 A) 2357 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2358 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2359 -- Runtime Function: long long accum __satfractudata (unsigned long 2360 accum A) 2361 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2362 long accum A) 2363 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2364 accum A) 2365 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2366 long accum A) 2367 -- Runtime Function: unsigned long long fract __satfractudaudq 2368 (unsigned long accum A) 2369 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2370 long accum A) 2371 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2372 accum A) 2373 -- Runtime Function: unsigned long long accum __satfractudauta2 2374 (unsigned long accum A) 2375 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2376 accum A) 2377 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2378 -- Runtime Function: long fract __satfractutasq (unsigned long long 2379 accum A) 2380 -- Runtime Function: long long fract __satfractutadq (unsigned long 2381 long accum A) 2382 -- Runtime Function: short accum __satfractutaha (unsigned long long 2383 accum A) 2384 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2385 -- Runtime Function: long accum __satfractutada (unsigned long long 2386 accum A) 2387 -- Runtime Function: long long accum __satfractutata (unsigned long 2388 long accum A) 2389 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2390 long long accum A) 2391 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2392 long accum A) 2393 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2394 long long accum A) 2395 -- Runtime Function: unsigned long long fract __satfractutaudq 2396 (unsigned long long accum A) 2397 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2398 long long accum A) 2399 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2400 long accum A) 2401 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2402 long long accum A) 2403 -- Runtime Function: short fract __satfractqiqq (signed char A) 2404 -- Runtime Function: fract __satfractqihq (signed char A) 2405 -- Runtime Function: long fract __satfractqisq (signed char A) 2406 -- Runtime Function: long long fract __satfractqidq (signed char A) 2407 -- Runtime Function: short accum __satfractqiha (signed char A) 2408 -- Runtime Function: accum __satfractqisa (signed char A) 2409 -- Runtime Function: long accum __satfractqida (signed char A) 2410 -- Runtime Function: long long accum __satfractqita (signed char A) 2411 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2412 A) 2413 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2414 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2415 A) 2416 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2417 char A) 2418 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2419 A) 2420 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2421 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2422 A) 2423 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2424 char A) 2425 -- Runtime Function: short fract __satfracthiqq (short A) 2426 -- Runtime Function: fract __satfracthihq (short A) 2427 -- Runtime Function: long fract __satfracthisq (short A) 2428 -- Runtime Function: long long fract __satfracthidq (short A) 2429 -- Runtime Function: short accum __satfracthiha (short A) 2430 -- Runtime Function: accum __satfracthisa (short A) 2431 -- Runtime Function: long accum __satfracthida (short A) 2432 -- Runtime Function: long long accum __satfracthita (short A) 2433 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2434 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2435 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2436 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2437 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2438 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2439 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2440 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2441 -- Runtime Function: short fract __satfractsiqq (int A) 2442 -- Runtime Function: fract __satfractsihq (int A) 2443 -- Runtime Function: long fract __satfractsisq (int A) 2444 -- Runtime Function: long long fract __satfractsidq (int A) 2445 -- Runtime Function: short accum __satfractsiha (int A) 2446 -- Runtime Function: accum __satfractsisa (int A) 2447 -- Runtime Function: long accum __satfractsida (int A) 2448 -- Runtime Function: long long accum __satfractsita (int A) 2449 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2450 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2451 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2452 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2453 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2454 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2455 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2456 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2457 -- Runtime Function: short fract __satfractdiqq (long A) 2458 -- Runtime Function: fract __satfractdihq (long A) 2459 -- Runtime Function: long fract __satfractdisq (long A) 2460 -- Runtime Function: long long fract __satfractdidq (long A) 2461 -- Runtime Function: short accum __satfractdiha (long A) 2462 -- Runtime Function: accum __satfractdisa (long A) 2463 -- Runtime Function: long accum __satfractdida (long A) 2464 -- Runtime Function: long long accum __satfractdita (long A) 2465 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2466 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2467 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2468 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2469 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2470 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2471 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2472 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2473 -- Runtime Function: short fract __satfracttiqq (long long A) 2474 -- Runtime Function: fract __satfracttihq (long long A) 2475 -- Runtime Function: long fract __satfracttisq (long long A) 2476 -- Runtime Function: long long fract __satfracttidq (long long A) 2477 -- Runtime Function: short accum __satfracttiha (long long A) 2478 -- Runtime Function: accum __satfracttisa (long long A) 2479 -- Runtime Function: long accum __satfracttida (long long A) 2480 -- Runtime Function: long long accum __satfracttita (long long A) 2481 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2482 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2483 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2484 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2485 long A) 2486 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2487 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2488 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2489 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2490 long A) 2491 -- Runtime Function: short fract __satfractsfqq (float A) 2492 -- Runtime Function: fract __satfractsfhq (float A) 2493 -- Runtime Function: long fract __satfractsfsq (float A) 2494 -- Runtime Function: long long fract __satfractsfdq (float A) 2495 -- Runtime Function: short accum __satfractsfha (float A) 2496 -- Runtime Function: accum __satfractsfsa (float A) 2497 -- Runtime Function: long accum __satfractsfda (float A) 2498 -- Runtime Function: long long accum __satfractsfta (float A) 2499 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2500 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2501 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2502 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2503 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2504 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2505 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2506 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2507 -- Runtime Function: short fract __satfractdfqq (double A) 2508 -- Runtime Function: fract __satfractdfhq (double A) 2509 -- Runtime Function: long fract __satfractdfsq (double A) 2510 -- Runtime Function: long long fract __satfractdfdq (double A) 2511 -- Runtime Function: short accum __satfractdfha (double A) 2512 -- Runtime Function: accum __satfractdfsa (double A) 2513 -- Runtime Function: long accum __satfractdfda (double A) 2514 -- Runtime Function: long long accum __satfractdfta (double A) 2515 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2516 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2517 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2518 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2519 A) 2520 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2521 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2522 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2523 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2524 A) 2525 The functions convert from fractional and signed non-fractionals to 2526 fractionals, with saturation. 2527 2528 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2529 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2530 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2531 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2532 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2533 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2534 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2535 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2536 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2537 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2538 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2539 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2540 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2541 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2542 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2543 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2544 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2545 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2546 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2547 -- Runtime Function: unsigned long long __fractunsdqti (long long 2548 fract A) 2549 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2550 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2551 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2552 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2553 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2554 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2555 -- Runtime Function: unsigned short __fractunssahi (accum A) 2556 -- Runtime Function: unsigned int __fractunssasi (accum A) 2557 -- Runtime Function: unsigned long __fractunssadi (accum A) 2558 -- Runtime Function: unsigned long long __fractunssati (accum A) 2559 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2560 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2561 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2562 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2563 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2564 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2565 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2566 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2567 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2568 -- Runtime Function: unsigned long long __fractunstati (long long 2569 accum A) 2570 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2571 fract A) 2572 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2573 fract A) 2574 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short 2575 fract A) 2576 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2577 fract A) 2578 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned 2579 short fract A) 2580 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2581 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2582 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2583 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2584 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned 2585 fract A) 2586 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long 2587 fract A) 2588 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2589 fract A) 2590 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2591 A) 2592 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long 2593 fract A) 2594 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2595 fract A) 2596 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2597 fract A) 2598 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long 2599 long fract A) 2600 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2601 fract A) 2602 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2603 fract A) 2604 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2605 long fract A) 2606 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2607 accum A) 2608 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2609 accum A) 2610 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short 2611 accum A) 2612 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2613 accum A) 2614 -- Runtime Function: unsigned long long __fractunsuhati (unsigned 2615 short accum A) 2616 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2617 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2618 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2619 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2620 -- Runtime Function: unsigned long long __fractunsusati (unsigned 2621 accum A) 2622 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long 2623 accum A) 2624 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2625 accum A) 2626 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2627 A) 2628 -- Runtime Function: unsigned long __fractunsudadi (unsigned long 2629 accum A) 2630 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2631 accum A) 2632 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2633 accum A) 2634 -- Runtime Function: unsigned short __fractunsutahi (unsigned long 2635 long accum A) 2636 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2637 accum A) 2638 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2639 accum A) 2640 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2641 long accum A) 2642 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2643 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2644 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2645 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2646 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2647 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2648 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2649 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2650 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2651 char A) 2652 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2653 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned 2654 char A) 2655 -- Runtime Function: unsigned long long fract __fractunsqiudq 2656 (unsigned char A) 2657 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2658 char A) 2659 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2660 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned 2661 char A) 2662 -- Runtime Function: unsigned long long accum __fractunsqiuta 2663 (unsigned char A) 2664 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2665 -- Runtime Function: fract __fractunshihq (unsigned short A) 2666 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2667 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2668 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2669 -- Runtime Function: accum __fractunshisa (unsigned short A) 2670 -- Runtime Function: long accum __fractunshida (unsigned short A) 2671 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2672 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2673 short A) 2674 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2675 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2676 short A) 2677 -- Runtime Function: unsigned long long fract __fractunshiudq 2678 (unsigned short A) 2679 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2680 short A) 2681 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2682 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2683 short A) 2684 -- Runtime Function: unsigned long long accum __fractunshiuta 2685 (unsigned short A) 2686 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2687 -- Runtime Function: fract __fractunssihq (unsigned int A) 2688 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2689 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2690 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2691 -- Runtime Function: accum __fractunssisa (unsigned int A) 2692 -- Runtime Function: long accum __fractunssida (unsigned int A) 2693 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2694 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned 2695 int A) 2696 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2697 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2698 A) 2699 -- Runtime Function: unsigned long long fract __fractunssiudq 2700 (unsigned int A) 2701 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned 2702 int A) 2703 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2704 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2705 A) 2706 -- Runtime Function: unsigned long long accum __fractunssiuta 2707 (unsigned int A) 2708 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2709 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2710 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2711 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2712 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2713 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2714 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2715 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2716 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2717 long A) 2718 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2719 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned 2720 long A) 2721 -- Runtime Function: unsigned long long fract __fractunsdiudq 2722 (unsigned long A) 2723 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2724 long A) 2725 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2726 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned 2727 long A) 2728 -- Runtime Function: unsigned long long accum __fractunsdiuta 2729 (unsigned long A) 2730 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2731 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2732 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2733 -- Runtime Function: long long fract __fractunstidq (unsigned long 2734 long A) 2735 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2736 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2737 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2738 -- Runtime Function: long long accum __fractunstita (unsigned long 2739 long A) 2740 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2741 long long A) 2742 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long 2743 long A) 2744 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned 2745 long long A) 2746 -- Runtime Function: unsigned long long fract __fractunstiudq 2747 (unsigned long long A) 2748 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2749 long long A) 2750 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long 2751 long A) 2752 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned 2753 long long A) 2754 -- Runtime Function: unsigned long long accum __fractunstiuta 2755 (unsigned long long A) 2756 These functions convert from fractionals to unsigned 2757 non-fractionals; and from unsigned non-fractionals to fractionals, 2758 without saturation. 2759 2760 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2761 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2762 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2763 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2764 A) 2765 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2766 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2767 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2768 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2769 A) 2770 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2771 char A) 2772 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2773 A) 2774 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2775 char A) 2776 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2777 (unsigned char A) 2778 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2779 char A) 2780 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2781 A) 2782 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2783 char A) 2784 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2785 (unsigned char A) 2786 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2787 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2788 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2789 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2790 A) 2791 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2792 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2793 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2794 -- Runtime Function: long long accum __satfractunshita (unsigned short 2795 A) 2796 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2797 short A) 2798 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2799 A) 2800 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2801 short A) 2802 -- Runtime Function: unsigned long long fract __satfractunshiudq 2803 (unsigned short A) 2804 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2805 short A) 2806 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2807 A) 2808 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2809 short A) 2810 -- Runtime Function: unsigned long long accum __satfractunshiuta 2811 (unsigned short A) 2812 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2813 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2814 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2815 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2816 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2817 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2818 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2819 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2820 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2821 int A) 2822 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2823 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2824 int A) 2825 -- Runtime Function: unsigned long long fract __satfractunssiudq 2826 (unsigned int A) 2827 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2828 int A) 2829 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2830 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2831 int A) 2832 -- Runtime Function: unsigned long long accum __satfractunssiuta 2833 (unsigned int A) 2834 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2835 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2836 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2837 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2838 A) 2839 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2840 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2841 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2842 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2843 A) 2844 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2845 long A) 2846 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2847 A) 2848 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2849 long A) 2850 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2851 (unsigned long A) 2852 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2853 long A) 2854 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2855 A) 2856 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2857 long A) 2858 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2859 (unsigned long A) 2860 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2861 A) 2862 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2863 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2864 A) 2865 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2866 long A) 2867 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2868 A) 2869 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2870 -- Runtime Function: long accum __satfractunstida (unsigned long long 2871 A) 2872 -- Runtime Function: long long accum __satfractunstita (unsigned long 2873 long A) 2874 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2875 long long A) 2876 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2877 long A) 2878 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2879 long long A) 2880 -- Runtime Function: unsigned long long fract __satfractunstiudq 2881 (unsigned long long A) 2882 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2883 long long A) 2884 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2885 long A) 2886 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2887 long long A) 2888 -- Runtime Function: unsigned long long accum __satfractunstiuta 2889 (unsigned long long A) 2890 These functions convert from unsigned non-fractionals to 2891 fractionals, with saturation. 2892 2893 2894File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2895 28964.5 Language-independent routines for exception handling 2897======================================================== 2898 2899document me! 2900 2901 _Unwind_DeleteException 2902 _Unwind_Find_FDE 2903 _Unwind_ForcedUnwind 2904 _Unwind_GetGR 2905 _Unwind_GetIP 2906 _Unwind_GetLanguageSpecificData 2907 _Unwind_GetRegionStart 2908 _Unwind_GetTextRelBase 2909 _Unwind_GetDataRelBase 2910 _Unwind_RaiseException 2911 _Unwind_Resume 2912 _Unwind_SetGR 2913 _Unwind_SetIP 2914 _Unwind_FindEnclosingFunction 2915 _Unwind_SjLj_Register 2916 _Unwind_SjLj_Unregister 2917 _Unwind_SjLj_RaiseException 2918 _Unwind_SjLj_ForcedUnwind 2919 _Unwind_SjLj_Resume 2920 __deregister_frame 2921 __deregister_frame_info 2922 __deregister_frame_info_bases 2923 __register_frame 2924 __register_frame_info 2925 __register_frame_info_bases 2926 __register_frame_info_table 2927 __register_frame_info_table_bases 2928 __register_frame_table 2929 2930 2931File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2932 29334.6 Miscellaneous runtime library routines 2934========================================== 2935 29364.6.1 Cache control functions 2937----------------------------- 2938 2939 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2940 This function clears the instruction cache between BEG and END. 2941 2942 2943File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2944 29455 Language Front Ends in GCC 2946**************************** 2947 2948The interface to front ends for languages in GCC, and in particular the 2949`tree' structure (*note GENERIC::), was initially designed for C, and 2950many aspects of it are still somewhat biased towards C and C-like 2951languages. It is, however, reasonably well suited to other procedural 2952languages, and front ends for many such languages have been written for 2953GCC. 2954 2955 Writing a compiler as a front end for GCC, rather than compiling 2956directly to assembler or generating C code which is then compiled by 2957GCC, has several advantages: 2958 2959 * GCC front ends benefit from the support for many different target 2960 machines already present in GCC. 2961 2962 * GCC front ends benefit from all the optimizations in GCC. Some of 2963 these, such as alias analysis, may work better when GCC is 2964 compiling directly from source code then when it is compiling from 2965 generated C code. 2966 2967 * Better debugging information is generated when compiling directly 2968 from source code than when going via intermediate generated C code. 2969 2970 Because of the advantages of writing a compiler as a GCC front end, 2971GCC front ends have also been created for languages very different from 2972those for which GCC was designed, such as the declarative 2973logic/functional language Mercury. For these reasons, it may also be 2974useful to implement compilers created for specialized purposes (for 2975example, as part of a research project) as GCC front ends. 2976 2977 2978File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 2979 29806 Source Tree Structure and Build System 2981**************************************** 2982 2983This chapter describes the structure of the GCC source tree, and how 2984GCC is built. The user documentation for building and installing GCC 2985is in a separate manual (`http://gcc.gnu.org/install/'), with which it 2986is presumed that you are familiar. 2987 2988* Menu: 2989 2990* Configure Terms:: Configuration terminology and history. 2991* Top Level:: The top level source directory. 2992* gcc Directory:: The `gcc' subdirectory. 2993 2994 2995File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 2996 29976.1 Configure Terms and History 2998=============================== 2999 3000The configure and build process has a long and colorful history, and can 3001be confusing to anyone who doesn't know why things are the way they are. 3002While there are other documents which describe the configuration process 3003in detail, here are a few things that everyone working on GCC should 3004know. 3005 3006 There are three system names that the build knows about: the machine 3007you are building on ("build"), the machine that you are building for 3008("host"), and the machine that GCC will produce code for ("target"). 3009When you configure GCC, you specify these with `--build=', `--host=', 3010and `--target='. 3011 3012 Specifying the host without specifying the build should be avoided, as 3013`configure' may (and once did) assume that the host you specify is also 3014the build, which may not be true. 3015 3016 If build, host, and target are all the same, this is called a 3017"native". If build and host are the same but target is different, this 3018is called a "cross". If build, host, and target are all different this 3019is called a "canadian" (for obscure reasons dealing with Canada's 3020political party and the background of the person working on the build 3021at that time). If host and target are the same, but build is 3022different, you are using a cross-compiler to build a native for a 3023different system. Some people call this a "host-x-host", "crossed 3024native", or "cross-built native". If build and target are the same, 3025but host is different, you are using a cross compiler to build a cross 3026compiler that produces code for the machine you're building on. This 3027is rare, so there is no common way of describing it. There is a 3028proposal to call this a "crossback". 3029 3030 If build and host are the same, the GCC you are building will also be 3031used to build the target libraries (like `libstdc++'). If build and 3032host are different, you must have already built and installed a cross 3033compiler that will be used to build the target libraries (if you 3034configured with `--target=foo-bar', this compiler will be called 3035`foo-bar-gcc'). 3036 3037 In the case of target libraries, the machine you're building for is the 3038machine you specified with `--target'. So, build is the machine you're 3039building on (no change there), host is the machine you're building for 3040(the target libraries are built for the target, so host is the target 3041you specified), and target doesn't apply (because you're not building a 3042compiler, you're building libraries). The configure/make process will 3043adjust these variables as needed. It also sets `$with_cross_host' to 3044the original `--host' value in case you need it. 3045 3046 The `libiberty' support library is built up to three times: once for 3047the host, once for the target (even if they are the same), and once for 3048the build if build and host are different. This allows it to be used 3049by all programs which are generated in the course of the build process. 3050 3051 3052File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3053 30546.2 Top Level Source Directory 3055============================== 3056 3057The top level source directory in a GCC distribution contains several 3058files and directories that are shared with other software distributions 3059such as that of GNU Binutils. It also contains several subdirectories 3060that contain parts of GCC and its runtime libraries: 3061 3062`boehm-gc' 3063 The Boehm conservative garbage collector, used as part of the Java 3064 runtime library. 3065 3066`config' 3067 Autoconf macros and Makefile fragments used throughout the tree. 3068 3069`contrib' 3070 Contributed scripts that may be found useful in conjunction with 3071 GCC. One of these, `contrib/texi2pod.pl', is used to generate man 3072 pages from Texinfo manuals as part of the GCC build process. 3073 3074`fixincludes' 3075 The support for fixing system headers to work with GCC. See 3076 `fixincludes/README' for more information. The headers fixed by 3077 this mechanism are installed in `LIBSUBDIR/include-fixed'. Along 3078 with those headers, `README-fixinc' is also installed, as 3079 `LIBSUBDIR/include-fixed/README'. 3080 3081`gcc' 3082 The main sources of GCC itself (except for runtime libraries), 3083 including optimizers, support for different target architectures, 3084 language front ends, and testsuites. *Note The `gcc' 3085 Subdirectory: gcc Directory, for details. 3086 3087`gnattools' 3088 Support tools for GNAT. 3089 3090`include' 3091 Headers for the `libiberty' library. 3092 3093`intl' 3094 GNU `libintl', from GNU `gettext', for systems which do not 3095 include it in `libc'. 3096 3097`libada' 3098 The Ada runtime library. 3099 3100`libcpp' 3101 The C preprocessor library. 3102 3103`libdecnumber' 3104 The Decimal Float support library. 3105 3106`libffi' 3107 The `libffi' library, used as part of the Java runtime library. 3108 3109`libgcc' 3110 The GCC runtime library. 3111 3112`libgfortran' 3113 The Fortran runtime library. 3114 3115`libgomp' 3116 The GNU OpenMP runtime library. 3117 3118`libiberty' 3119 The `libiberty' library, used for portability and for some 3120 generally useful data structures and algorithms. *Note 3121 Introduction: (libiberty)Top, for more information about this 3122 library. 3123 3124`libjava' 3125 The Java runtime library. 3126 3127`libmudflap' 3128 The `libmudflap' library, used for instrumenting pointer and array 3129 dereferencing operations. 3130 3131`libobjc' 3132 The Objective-C and Objective-C++ runtime library. 3133 3134`libssp' 3135 The Stack protector runtime library. 3136 3137`libstdc++-v3' 3138 The C++ runtime library. 3139 3140`lto-plugin' 3141 Plugin used by `gold' if link-time optimizations are enabled. 3142 3143`maintainer-scripts' 3144 Scripts used by the `gccadmin' account on `gcc.gnu.org'. 3145 3146`zlib' 3147 The `zlib' compression library, used by the Java front end, as 3148 part of the Java runtime library, and for compressing and 3149 uncompressing GCC's intermediate language in LTO object files. 3150 3151 The build system in the top level directory, including how recursion 3152into subdirectories works and how building runtime libraries for 3153multilibs is handled, is documented in a separate manual, included with 3154GNU Binutils. *Note GNU configure and build system: (configure)Top, 3155for details. 3156 3157 3158File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3159 31606.3 The `gcc' Subdirectory 3161========================== 3162 3163The `gcc' directory contains many files that are part of the C sources 3164of GCC, other files used as part of the configuration and build 3165process, and subdirectories including documentation and a testsuite. 3166The files that are sources of GCC are documented in a separate chapter. 3167*Note Passes and Files of the Compiler: Passes. 3168 3169* Menu: 3170 3171* Subdirectories:: Subdirectories of `gcc'. 3172* Configuration:: The configuration process, and the files it uses. 3173* Build:: The build system in the `gcc' directory. 3174* Makefile:: Targets in `gcc/Makefile'. 3175* Library Files:: Library source files and headers under `gcc/'. 3176* Headers:: Headers installed by GCC. 3177* Documentation:: Building documentation in GCC. 3178* Front End:: Anatomy of a language front end. 3179* Back End:: Anatomy of a target back end. 3180 3181 3182File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3183 31846.3.1 Subdirectories of `gcc' 3185----------------------------- 3186 3187The `gcc' directory contains the following subdirectories: 3188 3189`LANGUAGE' 3190 Subdirectories for various languages. Directories containing a 3191 file `config-lang.in' are language subdirectories. The contents of 3192 the subdirectories `cp' (for C++), `lto' (for LTO), `objc' (for 3193 Objective-C) and `objcp' (for Objective-C++) are documented in 3194 this manual (*note Passes and Files of the Compiler: Passes.); 3195 those for other languages are not. *Note Anatomy of a Language 3196 Front End: Front End, for details of the files in these 3197 directories. 3198 3199`config' 3200 Configuration files for supported architectures and operating 3201 systems. *Note Anatomy of a Target Back End: Back End, for 3202 details of the files in this directory. 3203 3204`doc' 3205 Texinfo documentation for GCC, together with automatically 3206 generated man pages and support for converting the installation 3207 manual to HTML. *Note Documentation::. 3208 3209`ginclude' 3210 System headers installed by GCC, mainly those required by the C 3211 standard of freestanding implementations. *Note Headers Installed 3212 by GCC: Headers, for details of when these and other headers are 3213 installed. 3214 3215`po' 3216 Message catalogs with translations of messages produced by GCC into 3217 various languages, `LANGUAGE.po'. This directory also contains 3218 `gcc.pot', the template for these message catalogues, `exgettext', 3219 a wrapper around `gettext' to extract the messages from the GCC 3220 sources and create `gcc.pot', which is run by `make gcc.pot', and 3221 `EXCLUDES', a list of files from which messages should not be 3222 extracted. 3223 3224`testsuite' 3225 The GCC testsuites (except for those for runtime libraries). 3226 *Note Testsuites::. 3227 3228 3229File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3230 32316.3.2 Configuration in the `gcc' Directory 3232------------------------------------------ 3233 3234The `gcc' directory is configured with an Autoconf-generated script 3235`configure'. The `configure' script is generated from `configure.ac' 3236and `aclocal.m4'. From the files `configure.ac' and `acconfig.h', 3237Autoheader generates the file `config.in'. The file `cstamp-h.in' is 3238used as a timestamp. 3239 3240* Menu: 3241 3242* Config Fragments:: Scripts used by `configure'. 3243* System Config:: The `config.build', `config.host', and 3244 `config.gcc' files. 3245* Configuration Files:: Files created by running `configure'. 3246 3247 3248File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3249 32506.3.2.1 Scripts Used by `configure' 3251................................... 3252 3253`configure' uses some other scripts to help in its work: 3254 3255 * The standard GNU `config.sub' and `config.guess' files, kept in 3256 the top level directory, are used. 3257 3258 * The file `config.gcc' is used to handle configuration specific to 3259 the particular target machine. The file `config.build' is used to 3260 handle configuration specific to the particular build machine. 3261 The file `config.host' is used to handle configuration specific to 3262 the particular host machine. (In general, these should only be 3263 used for features that cannot reasonably be tested in Autoconf 3264 feature tests.) *Note The `config.build'; `config.host'; and 3265 `config.gcc' Files: System Config, for details of the contents of 3266 these files. 3267 3268 * Each language subdirectory has a file `LANGUAGE/config-lang.in' 3269 that is used for front-end-specific configuration. *Note The 3270 Front End `config-lang.in' File: Front End Config, for details of 3271 this file. 3272 3273 * A helper script `configure.frag' is used as part of creating the 3274 output of `configure'. 3275 3276 3277File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3278 32796.3.2.2 The `config.build'; `config.host'; and `config.gcc' Files 3280................................................................. 3281 3282The `config.build' file contains specific rules for particular systems 3283which GCC is built on. This should be used as rarely as possible, as 3284the behavior of the build system can always be detected by autoconf. 3285 3286 The `config.host' file contains specific rules for particular systems 3287which GCC will run on. This is rarely needed. 3288 3289 The `config.gcc' file contains specific rules for particular systems 3290which GCC will generate code for. This is usually needed. 3291 3292 Each file has a list of the shell variables it sets, with 3293descriptions, at the top of the file. 3294 3295 FIXME: document the contents of these files, and what variables should 3296be set to control build, host and target configuration. 3297 3298 3299File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3300 33016.3.2.3 Files Created by `configure' 3302.................................... 3303 3304Here we spell out what files will be set up by `configure' in the `gcc' 3305directory. Some other files are created as temporary files in the 3306configuration process, and are not used in the subsequent build; these 3307are not documented. 3308 3309 * `Makefile' is constructed from `Makefile.in', together with the 3310 host and target fragments (*note Makefile Fragments: Fragments.) 3311 `t-TARGET' and `x-HOST' from `config', if any, and language 3312 Makefile fragments `LANGUAGE/Make-lang.in'. 3313 3314 * `auto-host.h' contains information about the host machine 3315 determined by `configure'. If the host machine is different from 3316 the build machine, then `auto-build.h' is also created, containing 3317 such information about the build machine. 3318 3319 * `config.status' is a script that may be run to recreate the 3320 current configuration. 3321 3322 * `configargs.h' is a header containing details of the arguments 3323 passed to `configure' to configure GCC, and of the thread model 3324 used. 3325 3326 * `cstamp-h' is used as a timestamp. 3327 3328 * `gccbug', a script for reporting bugs in GCC, is constructed from 3329 `gccbug.in'. 3330 3331 * If a language `config-lang.in' file (*note The Front End 3332 `config-lang.in' File: Front End Config.) sets `outputs', then the 3333 files listed in `outputs' there are also generated. 3334 3335 The following configuration headers are created from the Makefile, 3336using `mkconfig.sh', rather than directly by `configure'. `config.h', 3337`bconfig.h' and `tconfig.h' all contain the `xm-MACHINE.h' header, if 3338any, appropriate to the host, build and target machines respectively, 3339the configuration headers for the target, and some definitions; for the 3340host and build machines, these include the autoconfigured headers 3341generated by `configure'. The other configuration headers are 3342determined by `config.gcc'. They also contain the typedefs for `rtx', 3343`rtvec' and `tree'. 3344 3345 * `config.h', for use in programs that run on the host machine. 3346 3347 * `bconfig.h', for use in programs that run on the build machine. 3348 3349 * `tconfig.h', for use in programs and libraries for the target 3350 machine. 3351 3352 * `tm_p.h', which includes the header `MACHINE-protos.h' that 3353 contains prototypes for functions in the target `.c' file. FIXME: 3354 why is such a separate header necessary? 3355 3356 3357File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3358 33596.3.3 Build System in the `gcc' Directory 3360----------------------------------------- 3361 3362FIXME: describe the build system, including what is built in what 3363stages. Also list the various source files that are used in the build 3364process but aren't source files of GCC itself and so aren't documented 3365below (*note Passes::). 3366 3367 3368File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3369 33706.3.4 Makefile Targets 3371---------------------- 3372 3373These targets are available from the `gcc' directory: 3374 3375`all' 3376 This is the default target. Depending on what your 3377 build/host/target configuration is, it coordinates all the things 3378 that need to be built. 3379 3380`doc' 3381 Produce info-formatted documentation and man pages. Essentially it 3382 calls `make man' and `make info'. 3383 3384`dvi' 3385 Produce DVI-formatted documentation. 3386 3387`pdf' 3388 Produce PDF-formatted documentation. 3389 3390`html' 3391 Produce HTML-formatted documentation. 3392 3393`man' 3394 Generate man pages. 3395 3396`info' 3397 Generate info-formatted pages. 3398 3399`mostlyclean' 3400 Delete the files made while building the compiler. 3401 3402`clean' 3403 That, and all the other files built by `make all'. 3404 3405`distclean' 3406 That, and all the files created by `configure'. 3407 3408`maintainer-clean' 3409 Distclean plus any file that can be generated from other files. 3410 Note that additional tools may be required beyond what is normally 3411 needed to build GCC. 3412 3413`srcextra' 3414 Generates files in the source directory that are not 3415 version-controlled but should go into a release tarball. 3416 3417`srcinfo' 3418`srcman' 3419 Copies the info-formatted and manpage documentation into the source 3420 directory usually for the purpose of generating a release tarball. 3421 3422`install' 3423 Installs GCC. 3424 3425`uninstall' 3426 Deletes installed files, though this is not supported. 3427 3428`check' 3429 Run the testsuite. This creates a `testsuite' subdirectory that 3430 has various `.sum' and `.log' files containing the results of the 3431 testing. You can run subsets with, for example, `make check-gcc'. 3432 You can specify specific tests by setting `RUNTESTFLAGS' to be the 3433 name of the `.exp' file, optionally followed by (for some tests) 3434 an equals and a file wildcard, like: 3435 3436 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3437 3438 Note that running the testsuite may require additional tools be 3439 installed, such as Tcl or DejaGnu. 3440 3441 The toplevel tree from which you start GCC compilation is not the GCC 3442directory, but rather a complex Makefile that coordinates the various 3443steps of the build, including bootstrapping the compiler and using the 3444new compiler to build target libraries. 3445 3446 When GCC is configured for a native configuration, the default action 3447for `make' is to do a full three-stage bootstrap. This means that GCC 3448is built three times--once with the native compiler, once with the 3449native-built compiler it just built, and once with the compiler it 3450built the second time. In theory, the last two should produce the same 3451results, which `make compare' can check. Each stage is configured 3452separately and compiled into a separate directory, to minimize problems 3453due to ABI incompatibilities between the native compiler and GCC. 3454 3455 If you do a change, rebuilding will also start from the first stage 3456and "bubble" up the change through the three stages. Each stage is 3457taken from its build directory (if it had been built previously), 3458rebuilt, and copied to its subdirectory. This will allow you to, for 3459example, continue a bootstrap after fixing a bug which causes the 3460stage2 build to crash. It does not provide as good coverage of the 3461compiler as bootstrapping from scratch, but it ensures that the new 3462code is syntactically correct (e.g., that you did not use GCC extensions 3463by mistake), and avoids spurious bootstrap comparison failures(1). 3464 3465 Other targets available from the top level include: 3466 3467`bootstrap-lean' 3468 Like `bootstrap', except that the various stages are removed once 3469 they're no longer needed. This saves disk space. 3470 3471`bootstrap2' 3472`bootstrap2-lean' 3473 Performs only the first two stages of bootstrap. Unlike a 3474 three-stage bootstrap, this does not perform a comparison to test 3475 that the compiler is running properly. Note that the disk space 3476 required by a "lean" bootstrap is approximately independent of the 3477 number of stages. 3478 3479`stageN-bubble (N = 1...4)' 3480 Rebuild all the stages up to N, with the appropriate flags, 3481 "bubbling" the changes as described above. 3482 3483`all-stageN (N = 1...4)' 3484 Assuming that stage N has already been built, rebuild it with the 3485 appropriate flags. This is rarely needed. 3486 3487`cleanstrap' 3488 Remove everything (`make clean') and rebuilds (`make bootstrap'). 3489 3490`compare' 3491 Compares the results of stages 2 and 3. This ensures that the 3492 compiler is running properly, since it should produce the same 3493 object files regardless of how it itself was compiled. 3494 3495`profiledbootstrap' 3496 Builds a compiler with profiling feedback information. For more 3497 information, see *note Building with profile feedback: 3498 (gccinstall)Building. 3499 3500`restrap' 3501 Restart a bootstrap, so that everything that was not built with 3502 the system compiler is rebuilt. 3503 3504`stageN-start (N = 1...4)' 3505 For each package that is bootstrapped, rename directories so that, 3506 for example, `gcc' points to the stageN GCC, compiled with the 3507 stageN-1 GCC(2). 3508 3509 You will invoke this target if you need to test or debug the 3510 stageN GCC. If you only need to execute GCC (but you need not run 3511 `make' either to rebuild it or to run test suites), you should be 3512 able to work directly in the `stageN-gcc' directory. This makes 3513 it easier to debug multiple stages in parallel. 3514 3515`stage' 3516 For each package that is bootstrapped, relocate its build directory 3517 to indicate its stage. For example, if the `gcc' directory points 3518 to the stage2 GCC, after invoking this target it will be renamed 3519 to `stage2-gcc'. 3520 3521 3522 If you wish to use non-default GCC flags when compiling the stage2 and 3523stage3 compilers, set `BOOT_CFLAGS' on the command line when doing 3524`make'. 3525 3526 Usually, the first stage only builds the languages that the compiler 3527is written in: typically, C and maybe Ada. If you are debugging a 3528miscompilation of a different stage2 front-end (for example, of the 3529Fortran front-end), you may want to have front-ends for other languages 3530in the first stage as well. To do so, set `STAGE1_LANGUAGES' on the 3531command line when doing `make'. 3532 3533 For example, in the aforementioned scenario of debugging a Fortran 3534front-end miscompilation caused by the stage1 compiler, you may need a 3535command like 3536 3537 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3538 3539 Alternatively, you can use per-language targets to build and test 3540languages that are not enabled by default in stage1. For example, 3541`make f951' will build a Fortran compiler even in the stage1 build 3542directory. 3543 3544 ---------- Footnotes ---------- 3545 3546 (1) Except if the compiler was buggy and miscompiled some of the files 3547that were not modified. In this case, it's best to use `make restrap'. 3548 3549 (2) Customarily, the system compiler is also termed the `stage0' GCC. 3550 3551 3552File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3553 35546.3.5 Library Source Files and Headers under the `gcc' Directory 3555---------------------------------------------------------------- 3556 3557FIXME: list here, with explanation, all the C source files and headers 3558under the `gcc' directory that aren't built into the GCC executable but 3559rather are part of runtime libraries and object files, such as 3560`crtstuff.c' and `unwind-dw2.c'. *Note Headers Installed by GCC: 3561Headers, for more information about the `ginclude' directory. 3562 3563 3564File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3565 35666.3.6 Headers Installed by GCC 3567------------------------------ 3568 3569In general, GCC expects the system C library to provide most of the 3570headers to be used with it. However, GCC will fix those headers if 3571necessary to make them work with GCC, and will install some headers 3572required of freestanding implementations. These headers are installed 3573in `LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3574installed by GCC; these are not documented here. (FIXME: document them 3575somewhere.) 3576 3577 Several of the headers GCC installs are in the `ginclude' directory. 3578These headers, `iso646.h', `stdarg.h', `stdbool.h', and `stddef.h', are 3579installed in `LIBSUBDIR/include', unless the target Makefile fragment 3580(*note Target Fragment::) overrides this by setting `USER_H'. 3581 3582 In addition to these headers and those generated by fixing system 3583headers to work with GCC, some other headers may also be installed in 3584`LIBSUBDIR/include'. `config.gcc' may set `extra_headers'; this 3585specifies additional headers under `config' to be installed on some 3586systems. 3587 3588 GCC installs its own version of `<float.h>', from `ginclude/float.h'. 3589This is done to cope with command-line options that change the 3590representation of floating point numbers. 3591 3592 GCC also installs its own version of `<limits.h>'; this is generated 3593from `glimits.h', together with `limitx.h' and `limity.h' if the system 3594also has its own version of `<limits.h>'. (GCC provides its own header 3595because it is required of ISO C freestanding implementations, but needs 3596to include the system header from its own header as well because other 3597standards such as POSIX specify additional values to be defined in 3598`<limits.h>'.) The system's `<limits.h>' header is used via 3599`LIBSUBDIR/include/syslimits.h', which is copied from `gsyslimits.h' if 3600it does not need fixing to work with GCC; if it needs fixing, 3601`syslimits.h' is the fixed copy. 3602 3603 GCC can also install `<tgmath.h>'. It will do this when `config.gcc' 3604sets `use_gcc_tgmath' to `yes'. 3605 3606 3607File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3608 36096.3.7 Building Documentation 3610---------------------------- 3611 3612The main GCC documentation is in the form of manuals in Texinfo format. 3613These are installed in Info format; DVI versions may be generated by 3614`make dvi', PDF versions by `make pdf', and HTML versions by `make 3615html'. In addition, some man pages are generated from the Texinfo 3616manuals, there are some other text files with miscellaneous 3617documentation, and runtime libraries have their own documentation 3618outside the `gcc' directory. FIXME: document the documentation for 3619runtime libraries somewhere. 3620 3621* Menu: 3622 3623* Texinfo Manuals:: GCC manuals in Texinfo format. 3624* Man Page Generation:: Generating man pages from Texinfo manuals. 3625* Miscellaneous Docs:: Miscellaneous text files with documentation. 3626 3627 3628File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3629 36306.3.7.1 Texinfo Manuals 3631....................... 3632 3633The manuals for GCC as a whole, and the C and C++ front ends, are in 3634files `doc/*.texi'. Other front ends have their own manuals in files 3635`LANGUAGE/*.texi'. Common files `doc/include/*.texi' are provided 3636which may be included in multiple manuals; the following files are in 3637`doc/include': 3638 3639`fdl.texi' 3640 The GNU Free Documentation License. 3641 3642`funding.texi' 3643 The section "Funding Free Software". 3644 3645`gcc-common.texi' 3646 Common definitions for manuals. 3647 3648`gpl.texi' 3649`gpl_v3.texi' 3650 The GNU General Public License. 3651 3652`texinfo.tex' 3653 A copy of `texinfo.tex' known to work with the GCC manuals. 3654 3655 DVI-formatted manuals are generated by `make dvi', which uses 3656`texi2dvi' (via the Makefile macro `$(TEXI2DVI)'). PDF-formatted 3657manuals are generated by `make pdf', which uses `texi2pdf' (via the 3658Makefile macro `$(TEXI2PDF)'). HTML formatted manuals are generated by 3659`make html'. Info manuals are generated by `make info' (which is run 3660as part of a bootstrap); this generates the manuals in the source 3661directory, using `makeinfo' via the Makefile macro `$(MAKEINFO)', and 3662they are included in release distributions. 3663 3664 Manuals are also provided on the GCC web site, in both HTML and 3665PostScript forms. This is done via the script 3666`maintainer-scripts/update_web_docs'. Each manual to be provided 3667online must be listed in the definition of `MANUALS' in that file; a 3668file `NAME.texi' must only appear once in the source tree, and the 3669output manual must have the same name as the source file. (However, 3670other Texinfo files, included in manuals but not themselves the root 3671files of manuals, may have names that appear more than once in the 3672source tree.) The manual file `NAME.texi' should only include other 3673files in its own directory or in `doc/include'. HTML manuals will be 3674generated by `makeinfo --html', PostScript manuals by `texi2dvi' and 3675`dvips', and PDF manuals by `texi2pdf'. All Texinfo files that are 3676parts of manuals must be version-controlled, even if they are generated 3677files, for the generation of online manuals to work. 3678 3679 The installation manual, `doc/install.texi', is also provided on the 3680GCC web site. The HTML version is generated by the script 3681`doc/install.texi2html'. 3682 3683 3684File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3685 36866.3.7.2 Man Page Generation 3687........................... 3688 3689Because of user demand, in addition to full Texinfo manuals, man pages 3690are provided which contain extracts from those manuals. These man 3691pages are generated from the Texinfo manuals using 3692`contrib/texi2pod.pl' and `pod2man'. (The man page for `g++', 3693`cp/g++.1', just contains a `.so' reference to `gcc.1', but all the 3694other man pages are generated from Texinfo manuals.) 3695 3696 Because many systems may not have the necessary tools installed to 3697generate the man pages, they are only generated if the `configure' 3698script detects that recent enough tools are installed, and the 3699Makefiles allow generating man pages to fail without aborting the 3700build. Man pages are also included in release distributions. They are 3701generated in the source directory. 3702 3703 Magic comments in Texinfo files starting `@c man' control what parts 3704of a Texinfo file go into a man page. Only a subset of Texinfo is 3705supported by `texi2pod.pl', and it may be necessary to add support for 3706more Texinfo features to this script when generating new man pages. To 3707improve the man page output, some special Texinfo macros are provided 3708in `doc/include/gcc-common.texi' which `texi2pod.pl' understands: 3709 3710`@gcctabopt' 3711 Use in the form `@table @gcctabopt' for tables of options, where 3712 for printed output the effect of `@code' is better than that of 3713 `@option' but for man page output a different effect is wanted. 3714 3715`@gccoptlist' 3716 Use for summary lists of options in manuals. 3717 3718`@gol' 3719 Use at the end of each line inside `@gccoptlist'. This is 3720 necessary to avoid problems with differences in how the 3721 `@gccoptlist' macro is handled by different Texinfo formatters. 3722 3723 FIXME: describe the `texi2pod.pl' input language and magic comments in 3724more detail. 3725 3726 3727File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3728 37296.3.7.3 Miscellaneous Documentation 3730................................... 3731 3732In addition to the formal documentation that is installed by GCC, there 3733are several other text files in the `gcc' subdirectory with 3734miscellaneous documentation: 3735 3736`ABOUT-GCC-NLS' 3737 Notes on GCC's Native Language Support. FIXME: this should be 3738 part of this manual rather than a separate file. 3739 3740`ABOUT-NLS' 3741 Notes on the Free Translation Project. 3742 3743`COPYING' 3744`COPYING3' 3745 The GNU General Public License, Versions 2 and 3. 3746 3747`COPYING.LIB' 3748`COPYING3.LIB' 3749 The GNU Lesser General Public License, Versions 2.1 and 3. 3750 3751`*ChangeLog*' 3752`*/ChangeLog*' 3753 Change log files for various parts of GCC. 3754 3755`LANGUAGES' 3756 Details of a few changes to the GCC front-end interface. FIXME: 3757 the information in this file should be part of general 3758 documentation of the front-end interface in this manual. 3759 3760`ONEWS' 3761 Information about new features in old versions of GCC. (For recent 3762 versions, the information is on the GCC web site.) 3763 3764`README.Portability' 3765 Information about portability issues when writing code in GCC. 3766 FIXME: why isn't this part of this manual or of the GCC Coding 3767 Conventions? 3768 3769 FIXME: document such files in subdirectories, at least `config', `cp', 3770`objc', `testsuite'. 3771 3772 3773File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3774 37756.3.8 Anatomy of a Language Front End 3776------------------------------------- 3777 3778A front end for a language in GCC has the following parts: 3779 3780 * A directory `LANGUAGE' under `gcc' containing source files for 3781 that front end. *Note The Front End `LANGUAGE' Directory: Front 3782 End Directory, for details. 3783 3784 * A mention of the language in the list of supported languages in 3785 `gcc/doc/install.texi'. 3786 3787 * A mention of the name under which the language's runtime library is 3788 recognized by `--enable-shared=PACKAGE' in the documentation of 3789 that option in `gcc/doc/install.texi'. 3790 3791 * A mention of any special prerequisites for building the front end 3792 in the documentation of prerequisites in `gcc/doc/install.texi'. 3793 3794 * Details of contributors to that front end in 3795 `gcc/doc/contrib.texi'. If the details are in that front end's 3796 own manual then there should be a link to that manual's list in 3797 `contrib.texi'. 3798 3799 * Information about support for that language in 3800 `gcc/doc/frontends.texi'. 3801 3802 * Information about standards for that language, and the front end's 3803 support for them, in `gcc/doc/standards.texi'. This may be a link 3804 to such information in the front end's own manual. 3805 3806 * Details of source file suffixes for that language and `-x LANG' 3807 options supported, in `gcc/doc/invoke.texi'. 3808 3809 * Entries in `default_compilers' in `gcc.c' for source file suffixes 3810 for that language. 3811 3812 * Preferably testsuites, which may be under `gcc/testsuite' or 3813 runtime library directories. FIXME: document somewhere how to 3814 write testsuite harnesses. 3815 3816 * Probably a runtime library for the language, outside the `gcc' 3817 directory. FIXME: document this further. 3818 3819 * Details of the directories of any runtime libraries in 3820 `gcc/doc/sourcebuild.texi'. 3821 3822 * Check targets in `Makefile.def' for the top-level `Makefile' to 3823 check just the compiler or the compiler and runtime library for the 3824 language. 3825 3826 If the front end is added to the official GCC source repository, the 3827following are also necessary: 3828 3829 * At least one Bugzilla component for bugs in that front end and 3830 runtime libraries. This category needs to be mentioned in 3831 `gcc/gccbug.in', as well as being added to the Bugzilla database. 3832 3833 * Normally, one or more maintainers of that front end listed in 3834 `MAINTAINERS'. 3835 3836 * Mentions on the GCC web site in `index.html' and `frontends.html', 3837 with any relevant links on `readings.html'. (Front ends that are 3838 not an official part of GCC may also be listed on 3839 `frontends.html', with relevant links.) 3840 3841 * A news item on `index.html', and possibly an announcement on the 3842 <gcc-announce@gcc.gnu.org> mailing list. 3843 3844 * The front end's manuals should be mentioned in 3845 `maintainer-scripts/update_web_docs' (*note Texinfo Manuals::) and 3846 the online manuals should be linked to from 3847 `onlinedocs/index.html'. 3848 3849 * Any old releases or CVS repositories of the front end, before its 3850 inclusion in GCC, should be made available on the GCC FTP site 3851 `ftp://gcc.gnu.org/pub/gcc/old-releases/'. 3852 3853 * The release and snapshot script `maintainer-scripts/gcc_release' 3854 should be updated to generate appropriate tarballs for this front 3855 end. The associated `maintainer-scripts/snapshot-README' and 3856 `maintainer-scripts/snapshot-index.html' files should be updated 3857 to list the tarballs and diffs for this front end. 3858 3859 * If this front end includes its own version files that include the 3860 current date, `maintainer-scripts/update_version' should be 3861 updated accordingly. 3862 3863* Menu: 3864 3865* Front End Directory:: The front end `LANGUAGE' directory. 3866* Front End Config:: The front end `config-lang.in' file. 3867* Front End Makefile:: The front end `Make-lang.in' file. 3868 3869 3870File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3871 38726.3.8.1 The Front End `LANGUAGE' Directory 3873.......................................... 3874 3875A front end `LANGUAGE' directory contains the source files of that 3876front end (but not of any runtime libraries, which should be outside 3877the `gcc' directory). This includes documentation, and possibly some 3878subsidiary programs built alongside the front end. Certain files are 3879special and other parts of the compiler depend on their names: 3880 3881`config-lang.in' 3882 This file is required in all language subdirectories. *Note The 3883 Front End `config-lang.in' File: Front End Config, for details of 3884 its contents 3885 3886`Make-lang.in' 3887 This file is required in all language subdirectories. *Note The 3888 Front End `Make-lang.in' File: Front End Makefile, for details of 3889 its contents. 3890 3891`lang.opt' 3892 This file registers the set of switches that the front end accepts 3893 on the command line, and their `--help' text. *Note Options::. 3894 3895`lang-specs.h' 3896 This file provides entries for `default_compilers' in `gcc.c' 3897 which override the default of giving an error that a compiler for 3898 that language is not installed. 3899 3900`LANGUAGE-tree.def' 3901 This file, which need not exist, defines any language-specific tree 3902 codes. 3903 3904 3905File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3906 39076.3.8.2 The Front End `config-lang.in' File 3908........................................... 3909 3910Each language subdirectory contains a `config-lang.in' file. In 3911addition the main directory contains `c-config-lang.in', which contains 3912limited information for the C language. This file is a shell script 3913that may define some variables describing the language: 3914 3915`language' 3916 This definition must be present, and gives the name of the language 3917 for some purposes such as arguments to `--enable-languages'. 3918 3919`lang_requires' 3920 If defined, this variable lists (space-separated) language front 3921 ends other than C that this front end requires to be enabled (with 3922 the names given being their `language' settings). For example, the 3923 Java front end depends on the C++ front end, so sets 3924 `lang_requires=c++'. 3925 3926`subdir_requires' 3927 If defined, this variable lists (space-separated) front end 3928 directories other than C that this front end requires to be 3929 present. For example, the Objective-C++ front end uses source 3930 files from the C++ and Objective-C front ends, so sets 3931 `subdir_requires="cp objc"'. 3932 3933`target_libs' 3934 If defined, this variable lists (space-separated) targets in the 3935 top level `Makefile' to build the runtime libraries for this 3936 language, such as `target-libobjc'. 3937 3938`lang_dirs' 3939 If defined, this variable lists (space-separated) top level 3940 directories (parallel to `gcc'), apart from the runtime libraries, 3941 that should not be configured if this front end is not built. 3942 3943`build_by_default' 3944 If defined to `no', this language front end is not built unless 3945 enabled in a `--enable-languages' argument. Otherwise, front ends 3946 are built by default, subject to any special logic in 3947 `configure.ac' (as is present to disable the Ada front end if the 3948 Ada compiler is not already installed). 3949 3950`boot_language' 3951 If defined to `yes', this front end is built in stage1 of the 3952 bootstrap. This is only relevant to front ends written in their 3953 own languages. 3954 3955`compilers' 3956 If defined, a space-separated list of compiler executables that 3957 will be run by the driver. The names here will each end with 3958 `\$(exeext)'. 3959 3960`outputs' 3961 If defined, a space-separated list of files that should be 3962 generated by `configure' substituting values in them. This 3963 mechanism can be used to create a file `LANGUAGE/Makefile' from 3964 `LANGUAGE/Makefile.in', but this is deprecated, building 3965 everything from the single `gcc/Makefile' is preferred. 3966 3967`gtfiles' 3968 If defined, a space-separated list of files that should be scanned 3969 by `gengtype.c' to generate the garbage collection tables and 3970 routines for this language. This excludes the files that are 3971 common to all front ends. *Note Type Information::. 3972 3973 3974 3975File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 3976 39776.3.8.3 The Front End `Make-lang.in' File 3978......................................... 3979 3980Each language subdirectory contains a `Make-lang.in' file. It contains 3981targets `LANG.HOOK' (where `LANG' is the setting of `language' in 3982`config-lang.in') for the following values of `HOOK', and any other 3983Makefile rules required to build those targets (which may if necessary 3984use other Makefiles specified in `outputs' in `config-lang.in', 3985although this is deprecated). It also adds any testsuite targets that 3986can use the standard rule in `gcc/Makefile.in' to the variable 3987`lang_checks'. 3988 3989`all.cross' 3990`start.encap' 3991`rest.encap' 3992 FIXME: exactly what goes in each of these targets? 3993 3994`tags' 3995 Build an `etags' `TAGS' file in the language subdirectory in the 3996 source tree. 3997 3998`info' 3999 Build info documentation for the front end, in the build directory. 4000 This target is only called by `make bootstrap' if a suitable 4001 version of `makeinfo' is available, so does not need to check for 4002 this, and should fail if an error occurs. 4003 4004`dvi' 4005 Build DVI documentation for the front end, in the build directory. 4006 This should be done using `$(TEXI2DVI)', with appropriate `-I' 4007 arguments pointing to directories of included files. 4008 4009`pdf' 4010 Build PDF documentation for the front end, in the build directory. 4011 This should be done using `$(TEXI2PDF)', with appropriate `-I' 4012 arguments pointing to directories of included files. 4013 4014`html' 4015 Build HTML documentation for the front end, in the build directory. 4016 4017`man' 4018 Build generated man pages for the front end from Texinfo manuals 4019 (*note Man Page Generation::), in the build directory. This target 4020 is only called if the necessary tools are available, but should 4021 ignore errors so as not to stop the build if errors occur; man 4022 pages are optional and the tools involved may be installed in a 4023 broken way. 4024 4025`install-common' 4026 Install everything that is part of the front end, apart from the 4027 compiler executables listed in `compilers' in `config-lang.in'. 4028 4029`install-info' 4030 Install info documentation for the front end, if it is present in 4031 the source directory. This target should have dependencies on 4032 info files that should be installed. 4033 4034`install-man' 4035 Install man pages for the front end. This target should ignore 4036 errors. 4037 4038`install-plugin' 4039 Install headers needed for plugins. 4040 4041`srcextra' 4042 Copies its dependencies into the source directory. This generally 4043 should be used for generated files such as Bison output files 4044 which are not version-controlled, but should be included in any 4045 release tarballs. This target will be executed during a bootstrap 4046 if `--enable-generated-files-in-srcdir' was specified as a 4047 `configure' option. 4048 4049`srcinfo' 4050`srcman' 4051 Copies its dependencies into the source directory. These targets 4052 will be executed during a bootstrap if 4053 `--enable-generated-files-in-srcdir' was specified as a 4054 `configure' option. 4055 4056`uninstall' 4057 Uninstall files installed by installing the compiler. This is 4058 currently documented not to be supported, so the hook need not do 4059 anything. 4060 4061`mostlyclean' 4062`clean' 4063`distclean' 4064`maintainer-clean' 4065 The language parts of the standard GNU `*clean' targets. *Note 4066 Standard Targets for Users: (standards)Standard Targets, for 4067 details of the standard targets. For GCC, `maintainer-clean' 4068 should delete all generated files in the source directory that are 4069 not version-controlled, but should not delete anything that is. 4070 4071 `Make-lang.in' must also define a variable `LANG_OBJS' to a list of 4072host object files that are used by that language. 4073 4074 4075File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4076 40776.3.9 Anatomy of a Target Back End 4078---------------------------------- 4079 4080A back end for a target architecture in GCC has the following parts: 4081 4082 * A directory `MACHINE' under `gcc/config', containing a machine 4083 description `MACHINE.md' file (*note Machine Descriptions: Machine 4084 Desc.), header files `MACHINE.h' and `MACHINE-protos.h' and a 4085 source file `MACHINE.c' (*note Target Description Macros and 4086 Functions: Target Macros.), possibly a target Makefile fragment 4087 `t-MACHINE' (*note The Target Makefile Fragment: Target 4088 Fragment.), and maybe some other files. The names of these files 4089 may be changed from the defaults given by explicit specifications 4090 in `config.gcc'. 4091 4092 * If necessary, a file `MACHINE-modes.def' in the `MACHINE' 4093 directory, containing additional machine modes to represent 4094 condition codes. *Note Condition Code::, for further details. 4095 4096 * An optional `MACHINE.opt' file in the `MACHINE' directory, 4097 containing a list of target-specific options. You can also add 4098 other option files using the `extra_options' variable in 4099 `config.gcc'. *Note Options::. 4100 4101 * Entries in `config.gcc' (*note The `config.gcc' File: System 4102 Config.) for the systems with this target architecture. 4103 4104 * Documentation in `gcc/doc/invoke.texi' for any command-line 4105 options supported by this target (*note Run-time Target 4106 Specification: Run-time Target.). This means both entries in the 4107 summary table of options and details of the individual options. 4108 4109 * Documentation in `gcc/doc/extend.texi' for any target-specific 4110 attributes supported (*note Defining target-specific uses of 4111 `__attribute__': Target Attributes.), including where the same 4112 attribute is already supported on some targets, which are 4113 enumerated in the manual. 4114 4115 * Documentation in `gcc/doc/extend.texi' for any target-specific 4116 pragmas supported. 4117 4118 * Documentation in `gcc/doc/extend.texi' of any target-specific 4119 built-in functions supported. 4120 4121 * Documentation in `gcc/doc/extend.texi' of any target-specific 4122 format checking styles supported. 4123 4124 * Documentation in `gcc/doc/md.texi' of any target-specific 4125 constraint letters (*note Constraints for Particular Machines: 4126 Machine Constraints.). 4127 4128 * A note in `gcc/doc/contrib.texi' under the person or people who 4129 contributed the target support. 4130 4131 * Entries in `gcc/doc/install.texi' for all target triplets 4132 supported with this target architecture, giving details of any 4133 special notes about installation for this target, or saying that 4134 there are no special notes if there are none. 4135 4136 * Possibly other support outside the `gcc' directory for runtime 4137 libraries. FIXME: reference docs for this. The `libstdc++' 4138 porting manual needs to be installed as info for this to work, or 4139 to be a chapter of this manual. 4140 4141 If the back end is added to the official GCC source repository, the 4142following are also necessary: 4143 4144 * An entry for the target architecture in `readings.html' on the GCC 4145 web site, with any relevant links. 4146 4147 * Details of the properties of the back end and target architecture 4148 in `backends.html' on the GCC web site. 4149 4150 * A news item about the contribution of support for that target 4151 architecture, in `index.html' on the GCC web site. 4152 4153 * Normally, one or more maintainers of that target listed in 4154 `MAINTAINERS'. Some existing architectures may be unmaintained, 4155 but it would be unusual to add support for a target that does not 4156 have a maintainer when support is added. 4157 4158 4159File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4160 41617 Testsuites 4162************ 4163 4164GCC contains several testsuites to help maintain compiler quality. 4165Most of the runtime libraries and language front ends in GCC have 4166testsuites. Currently only the C language testsuites are documented 4167here; FIXME: document the others. 4168 4169* Menu: 4170 4171* Test Idioms:: Idioms used in testsuite code. 4172* Test Directives:: Directives used within DejaGnu tests. 4173* Ada Tests:: The Ada language testsuites. 4174* C Tests:: The C language testsuites. 4175* libgcj Tests:: The Java library testsuites. 4176* LTO Testing:: Support for testing link-time optimizations. 4177* gcov Testing:: Support for testing gcov. 4178* profopt Testing:: Support for testing profile-directed optimizations. 4179* compat Testing:: Support for testing binary compatibility. 4180* Torture Tests:: Support for torture testing using multiple options. 4181 4182 4183File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4184 41857.1 Idioms Used in Testsuite Code 4186================================= 4187 4188In general, C testcases have a trailing `-N.c', starting with `-1.c', 4189in case other testcases with similar names are added later. If the 4190test is a test of some well-defined feature, it should have a name 4191referring to that feature such as `FEATURE-1.c'. If it does not test a 4192well-defined feature but just happens to exercise a bug somewhere in 4193the compiler, and a bug report has been filed for this bug in the GCC 4194bug database, `prBUG-NUMBER-1.c' is the appropriate form of name. 4195Otherwise (for miscellaneous bugs not filed in the GCC bug database), 4196and previously more generally, test cases are named after the date on 4197which they were added. This allows people to tell at a glance whether 4198a test failure is because of a recently found bug that has not yet been 4199fixed, or whether it may be a regression, but does not give any other 4200information about the bug or where discussion of it may be found. Some 4201other language testsuites follow similar conventions. 4202 4203 In the `gcc.dg' testsuite, it is often necessary to test that an error 4204is indeed a hard error and not just a warning--for example, where it is 4205a constraint violation in the C standard, which must become an error 4206with `-pedantic-errors'. The following idiom, where the first line 4207shown is line LINE of the file and the line that generates the error, 4208is used for this: 4209 4210 /* { dg-bogus "warning" "warning in place of error" } */ 4211 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4212 4213 It may be necessary to check that an expression is an integer constant 4214expression and has a certain value. To check that `E' has value `V', 4215an idiom similar to the following is used: 4216 4217 char x[((E) == (V) ? 1 : -1)]; 4218 4219 In `gcc.dg' tests, `__typeof__' is sometimes used to make assertions 4220about the types of expressions. See, for example, 4221`gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4222rules for the types of conditional expressions in the C standard; see, 4223for example, `gcc.dg/c99-intconst-1.c'. 4224 4225 It is useful to be able to test that optimizations are being made 4226properly. This cannot be done in all cases, but it can be done where 4227the optimization will lead to code being optimized away (for example, 4228where flow analysis or alias analysis should show that certain code 4229cannot be called) or to functions not being called because they have 4230been expanded as built-in functions. Such tests go in 4231`gcc.c-torture/execute'. Where code should be optimized away, a call 4232to a nonexistent function such as `link_failure ()' may be inserted; a 4233definition 4234 4235 #ifndef __OPTIMIZE__ 4236 void 4237 link_failure (void) 4238 { 4239 abort (); 4240 } 4241 #endif 4242 4243will also be needed so that linking still succeeds when the test is run 4244without optimization. When all calls to a built-in function should 4245have been optimized and no calls to the non-built-in version of the 4246function should remain, that function may be defined as `static' to 4247call `abort ()' (although redeclaring a function as static may not work 4248on all targets). 4249 4250 All testcases must be portable. Target-specific testcases must have 4251appropriate code to avoid causing failures on unsupported systems; 4252unfortunately, the mechanisms for this differ by directory. 4253 4254 FIXME: discuss non-C testsuites here. 4255 4256 4257File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4258 42597.2 Directives used within DejaGnu tests 4260======================================== 4261 4262* Menu: 4263 4264* Directives:: Syntax and descriptions of test directives. 4265* Selectors:: Selecting targets to which a test applies. 4266* Effective-Target Keywords:: Keywords describing target attributes. 4267* Add Options:: Features for `dg-add-options' 4268* Require Support:: Variants of `dg-require-SUPPORT' 4269* Final Actions:: Commands for use in `dg-final' 4270 4271 4272File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4273 42747.2.1 Syntax and Descriptions of test directives 4275------------------------------------------------ 4276 4277Test directives appear within comments in a test source file and begin 4278with `dg-'. Some of these are defined within DejaGnu and others are 4279local to the GCC testsuite. 4280 4281 The order in which test directives appear in a test can be important: 4282directives local to GCC sometimes override information used by the 4283DejaGnu directives, which know nothing about the GCC directives, so the 4284DejaGnu directives must precede GCC directives. 4285 4286 Several test directives include selectors (*note Selectors::) which 4287are usually preceded by the keyword `target' or `xfail'. 4288 42897.2.1.1 Specify how to build the test 4290..................................... 4291 4292`{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4293 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4294 is executed. It is one of: 4295 4296 `preprocess' 4297 Compile with `-E' to run only the preprocessor. 4298 4299 `compile' 4300 Compile with `-S' to produce an assembly code file. 4301 4302 `assemble' 4303 Compile with `-c' to produce a relocatable object file. 4304 4305 `link' 4306 Compile, assemble, and link to produce an executable file. 4307 4308 `run' 4309 Produce and run an executable file, which is expected to 4310 return an exit code of 0. 4311 4312 The default is `compile'. That can be overridden for a set of 4313 tests by redefining `dg-do-what-default' within the `.exp' file 4314 for those tests. 4315 4316 If the directive includes the optional `{ target SELECTOR }' then 4317 the test is skipped unless the target system matches the SELECTOR. 4318 4319 If DO-WHAT-KEYWORD is `run' and the directive includes the 4320 optional `{ xfail SELECTOR }' and the selector is met then the 4321 test is expected to fail. The `xfail' clause is ignored for other 4322 values of DO-WHAT-KEYWORD; those tests can use directive 4323 `dg-xfail-if'. 4324 43257.2.1.2 Specify additional compiler options 4326........................................... 4327 4328`{ dg-options OPTIONS [{ target SELECTOR }] }' 4329 This DejaGnu directive provides a list of compiler options, to be 4330 used if the target system matches SELECTOR, that replace the 4331 default options used for this set of tests. 4332 4333`{ dg-add-options FEATURE ... }' 4334 Add any compiler options that are needed to access certain 4335 features. This directive does nothing on targets that enable the 4336 features by default, or that don't provide them at all. It must 4337 come after all `dg-options' directives. For supported values of 4338 FEATURE see *note Add Options::. 4339 43407.2.1.3 Modify the test timeout value 4341..................................... 4342 4343The normal timeout limit, in seconds, is found by searching the 4344following in order: 4345 4346 * the value defined by an earlier `dg-timeout' directive in the test 4347 4348 * variable TOOL_TIMEOUT defined by the set of tests 4349 4350 * GCC,TIMEOUT set in the target board 4351 4352 * 300 4353 4354`{ dg-timeout N [{target SELECTOR }] }' 4355 Set the time limit for the compilation and for the execution of 4356 the test to the specified number of seconds. 4357 4358`{ dg-timeout-factor X [{ target SELECTOR }] }' 4359 Multiply the normal time limit for compilation and execution of 4360 the test by the specified floating-point factor. 4361 43627.2.1.4 Skip a test for some targets 4363.................................... 4364 4365`{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4366 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4367 element is a string of zero or more GCC options. Skip the test if 4368 all of the following conditions are met: 4369 * the test system is included in SELECTOR 4370 4371 * for at least one of the option strings in INCLUDE-OPTS, every 4372 option from that string is in the set of options with which 4373 the test would be compiled; use `"*"' for an INCLUDE-OPTS list 4374 that matches any options; that is the default if INCLUDE-OPTS 4375 is not specified 4376 4377 * for each of the option strings in EXCLUDE-OPTS, at least one 4378 option from that string is not in the set of options with 4379 which the test would be compiled; use `""' for an empty 4380 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4381 specified 4382 4383 For example, to skip a test if option `-Os' is present: 4384 4385 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4386 4387 To skip a test if both options `-O2' and `-g' are present: 4388 4389 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4390 4391 To skip a test if either `-O2' or `-O3' is present: 4392 4393 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4394 4395 To skip a test unless option `-Os' is present: 4396 4397 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4398 4399 To skip a test if either `-O2' or `-O3' is used with `-g' but not 4400 if `-fpic' is also present: 4401 4402 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4403 4404`{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4405 Skip the test if the test target, including current multilib flags, 4406 is not covered by the effective-target keyword. If the directive 4407 includes the optional `{ SELECTOR }' then the effective-target 4408 test is only performed if the target system matches the SELECTOR. 4409 This directive must appear after any `dg-do' directive in the test 4410 and before any `dg-additional-sources' directive. *Note 4411 Effective-Target Keywords::. 4412 4413`{ dg-require-SUPPORT args }' 4414 Skip the test if the target does not provide the required support. 4415 These directives must appear after any `dg-do' directive in the 4416 test and before any `dg-additional-sources' directive. They 4417 require at least one argument, which can be an empty string if the 4418 specific procedure does not examine the argument. *Note Require 4419 Support::, for a complete list of these directives. 4420 44217.2.1.5 Expect a test to fail for some targets 4422.............................................. 4423 4424`{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4425 Expect the test to fail if the conditions (which are the same as 4426 for `dg-skip-if') are met. This does not affect the execute step. 4427 4428`{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4429 Expect the execute step of a test to fail if the conditions (which 4430 are the same as for `dg-skip-if') are met. 4431 44327.2.1.6 Expect the test executable to fail 4433.......................................... 4434 4435`{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4436 Expect the test executable to return a nonzero exit status if the 4437 conditions (which are the same as for `dg-skip-if') are met. 4438 44397.2.1.7 Verify compiler messages 4440................................ 4441 4442`{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4443 This DejaGnu directive appears on a source line that is expected 4444 to get an error message, or else specifies the source line 4445 associated with the message. If there is no message for that line 4446 or if the text of that message is not matched by REGEXP then the 4447 check fails and COMMENT is included in the `FAIL' message. The 4448 check does not look for the string `error' unless it is part of 4449 REGEXP. 4450 4451`{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4452 This DejaGnu directive appears on a source line that is expected 4453 to get a warning message, or else specifies the source line 4454 associated with the message. If there is no message for that line 4455 or if the text of that message is not matched by REGEXP then the 4456 check fails and COMMENT is included in the `FAIL' message. The 4457 check does not look for the string `warning' unless it is part of 4458 REGEXP. 4459 4460`{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4461 The line is expected to get a message other than an error or 4462 warning. If there is no message for that line or if the text of 4463 that message is not matched by REGEXP then the check fails and 4464 COMMENT is included in the `FAIL' message. 4465 4466`{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4467 This DejaGnu directive appears on a source line that should not 4468 get a message matching REGEXP, or else specifies the source line 4469 associated with the bogus message. It is usually used with `xfail' 4470 to indicate that the message is a known problem for a particular 4471 set of targets. 4472 4473`{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4474 This DejaGnu directive indicates that the test is expected to fail 4475 due to compiler messages that are not handled by `dg-error', 4476 `dg-warning' or `dg-bogus'. For this directive `xfail' has the 4477 same effect as `target'. 4478 4479`{ dg-prune-output REGEXP }' 4480 Prune messages matching REGEXP from the test output. 4481 44827.2.1.8 Verify output of the test executable 4483............................................ 4484 4485`{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4486 This DejaGnu directive compares REGEXP to the combined output that 4487 the test executable writes to `stdout' and `stderr'. 4488 44897.2.1.9 Specify additional files for a test 4490........................................... 4491 4492`{ dg-additional-files "FILELIST" }' 4493 Specify additional files, other than source files, that must be 4494 copied to the system where the compiler runs. 4495 4496`{ dg-additional-sources "FILELIST" }' 4497 Specify additional source files to appear in the compile line 4498 following the main test file. 4499 45007.2.1.10 Add checks at the end of a test 4501........................................ 4502 4503`{ dg-final { LOCAL-DIRECTIVE } }' 4504 This DejaGnu directive is placed within a comment anywhere in the 4505 source file and is processed after the test has been compiled and 4506 run. Multiple `dg-final' commands are processed in the order in 4507 which they appear in the source file. *Note Final Actions::, for 4508 a list of directives that can be used within `dg-final'. 4509 4510 4511File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4512 45137.2.2 Selecting targets to which a test applies 4514----------------------------------------------- 4515 4516Several test directives include SELECTORs to limit the targets for 4517which a test is run or to declare that a test is expected to fail on 4518particular targets. 4519 4520 A selector is: 4521 * one or more target triplets, possibly including wildcard characters 4522 4523 * a single effective-target keyword (*note Effective-Target 4524 Keywords::) 4525 4526 * a logical expression 4527 4528 Depending on the context, the selector specifies whether a test is 4529skipped and reported as unsupported or is expected to fail. Use 4530`*-*-*' to match any target. 4531 4532 A selector expression appears within curly braces and uses a single 4533logical operator: one of `!', `&&', or `||'. An operand is another 4534selector expression, an effective-target keyword, a single target 4535triplet, or a list of target triplets within quotes or curly braces. 4536For example: 4537 4538 { target { ! "hppa*-*-* ia64*-*-*" } } 4539 { target { powerpc*-*-* && lp64 } } 4540 { xfail { lp64 || vect_no_align } } 4541 4542 4543File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4544 45457.2.3 Keywords describing target attributes 4546------------------------------------------- 4547 4548Effective-target keywords identify sets of targets that support 4549particular functionality. They are used to limit tests to be run only 4550for particular targets, or to specify that particular sets of targets 4551are expected to fail some tests. 4552 4553 Effective-target keywords are defined in `lib/target-supports.exp' in 4554the GCC testsuite, with the exception of those that are documented as 4555being local to a particular test directory. 4556 4557 The `effective target' takes into account all of the compiler options 4558with which the test will be compiled, including the multilib options. 4559By convention, keywords ending in `_nocache' can also include options 4560specified for the particular test in an earlier `dg-options' or 4561`dg-add-options' directive. 4562 45637.2.3.1 Data type sizes 4564....................... 4565 4566`ilp32' 4567 Target has 32-bit `int', `long', and pointers. 4568 4569`lp64' 4570 Target has 32-bit `int', 64-bit `long' and pointers. 4571 4572`llp64' 4573 Target has 32-bit `int' and `long', 64-bit `long long' and 4574 pointers. 4575 4576`double64' 4577 Target has 64-bit `double'. 4578 4579`double64plus' 4580 Target has `double' that is 64 bits or longer. 4581 4582`int32plus' 4583 Target has `int' that is at 32 bits or longer. 4584 4585`int16' 4586 Target has `int' that is 16 bits or shorter. 4587 4588`large_double' 4589 Target supports `double' that is longer than `float'. 4590 4591`large_long_double' 4592 Target supports `long double' that is longer than `double'. 4593 4594`ptr32plus' 4595 Target has pointers that are 32 bits or longer. 4596 4597`size32plus' 4598 Target supports array and structure sizes that are 32 bits or 4599 longer. 4600 4601`4byte_wchar_t' 4602 Target has `wchar_t' that is at least 4 bytes. 4603 46047.2.3.2 Fortran-specific attributes 4605................................... 4606 4607`fortran_integer_16' 4608 Target supports Fortran `integer' that is 16 bytes or longer. 4609 4610`fortran_large_int' 4611 Target supports Fortran `integer' kinds larger than `integer(8)'. 4612 4613`fortran_large_real' 4614 Target supports Fortran `real' kinds larger than `real(8)'. 4615 46167.2.3.3 Vector-specific attributes 4617.................................. 4618 4619`vect_condition' 4620 Target supports vector conditional operations. 4621 4622`vect_double' 4623 Target supports hardware vectors of `double'. 4624 4625`vect_float' 4626 Target supports hardware vectors of `float'. 4627 4628`vect_int' 4629 Target supports hardware vectors of `int'. 4630 4631`vect_int_mult' 4632 Target supports a vector widening multiplication of `short' 4633 operands into an `int' result, or supports promotion (unpacking) 4634 from `short' to `int' and a non-widening multiplication of `int'. 4635 4636`vect_long' 4637 Target supports hardware vectors of `long'. 4638 4639`vect_long_long' 4640 Target supports hardware vectors of `long long'. 4641 4642`vect_aligned_arrays' 4643 Target aligns arrays to vector alignment boundary. 4644 4645`vect_hw_misalign' 4646 Target supports a vector misalign access. 4647 4648`vect_no_align' 4649 Target does not support a vector alignment mechanism. 4650 4651`vect_no_int_max' 4652 Target does not support a vector max instruction on `int'. 4653 4654`vect_no_int_add' 4655 Target does not support a vector add instruction on `int'. 4656 4657`vect_no_bitwise' 4658 Target does not support vector bitwise instructions. 4659 4660`vect_char_mult' 4661 Target supports `vector char' multiplication. 4662 4663`vect_short_mult' 4664 Target supports `vector short' multiplication. 4665 4666`vect_int_mult' 4667 Target supports `vector int' multiplication. 4668 4669`vect_extract_even_odd' 4670 Target supports vector even/odd element extraction. 4671 4672`vect_extract_even_odd_wide' 4673 Target supports vector even/odd element extraction of vectors with 4674 elements `SImode' or larger. 4675 4676`vect_interleave' 4677 Target supports vector interleaving. 4678 4679`vect_strided' 4680 Target supports vector interleaving and extract even/odd. 4681 4682`vect_strided_wide' 4683 Target supports vector interleaving and extract even/odd for wide 4684 element types. 4685 4686`vect_perm' 4687 Target supports vector permutation. 4688 4689`vect_shift' 4690 Target supports a hardware vector shift operation. 4691 4692`vect_widen_sum_hi_to_si' 4693 Target supports a vector widening summation of `short' operands 4694 into `int' results, or can promote (unpack) from `short' to `int'. 4695 4696`vect_widen_sum_qi_to_hi' 4697 Target supports a vector widening summation of `char' operands 4698 into `short' results, or can promote (unpack) from `char' to 4699 `short'. 4700 4701`vect_widen_sum_qi_to_si' 4702 Target supports a vector widening summation of `char' operands 4703 into `int' results. 4704 4705`vect_widen_mult_qi_to_hi' 4706 Target supports a vector widening multiplication of `char' operands 4707 into `short' results, or can promote (unpack) from `char' to 4708 `short' and perform non-widening multiplication of `short'. 4709 4710`vect_widen_mult_hi_to_si' 4711 Target supports a vector widening multiplication of `short' 4712 operands into `int' results, or can promote (unpack) from `short' 4713 to `int' and perform non-widening multiplication of `int'. 4714 4715`vect_sdot_qi' 4716 Target supports a vector dot-product of `signed char'. 4717 4718`vect_udot_qi' 4719 Target supports a vector dot-product of `unsigned char'. 4720 4721`vect_sdot_hi' 4722 Target supports a vector dot-product of `signed short'. 4723 4724`vect_udot_hi' 4725 Target supports a vector dot-product of `unsigned short'. 4726 4727`vect_pack_trunc' 4728 Target supports a vector demotion (packing) of `short' to `char' 4729 and from `int' to `short' using modulo arithmetic. 4730 4731`vect_unpack' 4732 Target supports a vector promotion (unpacking) of `char' to `short' 4733 and from `char' to `int'. 4734 4735`vect_intfloat_cvt' 4736 Target supports conversion from `signed int' to `float'. 4737 4738`vect_uintfloat_cvt' 4739 Target supports conversion from `unsigned int' to `float'. 4740 4741`vect_floatint_cvt' 4742 Target supports conversion from `float' to `signed int'. 4743 4744`vect_floatuint_cvt' 4745 Target supports conversion from `float' to `unsigned int'. 4746 47477.2.3.4 Thread Local Storage attributes 4748....................................... 4749 4750`tls' 4751 Target supports thread-local storage. 4752 4753`tls_native' 4754 Target supports native (rather than emulated) thread-local storage. 4755 4756`tls_runtime' 4757 Test system supports executing TLS executables. 4758 47597.2.3.5 Decimal floating point attributes 4760......................................... 4761 4762`dfp' 4763 Targets supports compiling decimal floating point extension to C. 4764 4765`dfp_nocache' 4766 Including the options used to compile this particular test, the 4767 target supports compiling decimal floating point extension to C. 4768 4769`dfprt' 4770 Test system can execute decimal floating point tests. 4771 4772`dfprt_nocache' 4773 Including the options used to compile this particular test, the 4774 test system can execute decimal floating point tests. 4775 4776`hard_dfp' 4777 Target generates decimal floating point instructions with current 4778 options. 4779 47807.2.3.6 ARM-specific attributes 4781............................... 4782 4783`arm32' 4784 ARM target generates 32-bit code. 4785 4786`arm_eabi' 4787 ARM target adheres to the ABI for the ARM Architecture. 4788 4789`arm_hard_vfp_ok' 4790 ARM target supports `-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4791 may be incompatible with these options. 4792 4793`arm_iwmmxt_ok' 4794 ARM target supports `-mcpu=iwmmxt'. Some multilibs may be 4795 incompatible with this option. 4796 4797`arm_neon' 4798 ARM target supports generating NEON instructions. 4799 4800`arm_neon_hw' 4801 Test system supports executing NEON instructions. 4802 4803`arm_neon_ok' 4804 ARM Target supports `-mfpu=neon -mfloat-abi=softfp'. Some 4805 multilibs may be incompatible with these options. 4806 4807`arm_thumb1_ok' 4808 ARM target generates Thumb-1 code for `-mthumb'. 4809 4810`arm_thumb2_ok' 4811 ARM target generates Thumb-2 code for `-mthumb'. 4812 4813`arm_vfp_ok' 4814 ARM target supports `-mfpu=vfp -mfloat-abi=softfp'. Some 4815 multilibs may be incompatible with these options. 4816 48177.2.3.7 MIPS-specific attributes 4818................................ 4819 4820`mips64' 4821 MIPS target supports 64-bit instructions. 4822 4823`nomips16' 4824 MIPS target does not produce MIPS16 code. 4825 4826`mips16_attribute' 4827 MIPS target can generate MIPS16 code. 4828 4829`mips_loongson' 4830 MIPS target is a Loongson-2E or -2F target using an ABI that 4831 supports the Loongson vector modes. 4832 4833`mips_newabi_large_long_double' 4834 MIPS target supports `long double' larger than `double' when using 4835 the new ABI. 4836 4837`mpaired_single' 4838 MIPS target supports `-mpaired-single'. 4839 48407.2.3.8 PowerPC-specific attributes 4841................................... 4842 4843`powerpc64' 4844 Test system supports executing 64-bit instructions. 4845 4846`powerpc_altivec' 4847 PowerPC target supports AltiVec. 4848 4849`powerpc_altivec_ok' 4850 PowerPC target supports `-maltivec'. 4851 4852`powerpc_fprs' 4853 PowerPC target supports floating-point registers. 4854 4855`powerpc_hard_double' 4856 PowerPC target supports hardware double-precision floating-point. 4857 4858`powerpc_ppu_ok' 4859 PowerPC target supports `-mcpu=cell'. 4860 4861`powerpc_spe' 4862 PowerPC target supports PowerPC SPE. 4863 4864`powerpc_spe_nocache' 4865 Including the options used to compile this particular test, the 4866 PowerPC target supports PowerPC SPE. 4867 4868`powerpc_spu' 4869 PowerPC target supports PowerPC SPU. 4870 4871`spu_auto_overlay' 4872 SPU target has toolchain that supports automatic overlay 4873 generation. 4874 4875`powerpc_vsx_ok' 4876 PowerPC target supports `-mvsx'. 4877 4878`powerpc_405_nocache' 4879 Including the options used to compile this particular test, the 4880 PowerPC target supports PowerPC 405. 4881 4882`vmx_hw' 4883 PowerPC target supports executing AltiVec instructions. 4884 48857.2.3.9 Other hardware attributes 4886................................. 4887 4888`avx' 4889 Target supports compiling AVX instructions. 4890 4891`cell_hw' 4892 Test system can execute AltiVec and Cell PPU instructions. 4893 4894`coldfire_fpu' 4895 Target uses a ColdFire FPU. 4896 4897`hard_float' 4898 Target supports FPU instructions. 4899 4900`sse' 4901 Target supports compiling `sse' instructions. 4902 4903`sse_runtime' 4904 Target supports the execution of `sse' instructions. 4905 4906`sse2' 4907 Target supports compiling `sse2' instructions. 4908 4909`sse2_runtime' 4910 Target supports the execution of `sse2' instructions. 4911 4912`sync_char_short' 4913 Target supports atomic operations on `char' and `short'. 4914 4915`sync_int_long' 4916 Target supports atomic operations on `int' and `long'. 4917 4918`ultrasparc_hw' 4919 Test environment appears to run executables on a simulator that 4920 accepts only `EM_SPARC' executables and chokes on `EM_SPARC32PLUS' 4921 or `EM_SPARCV9' executables. 4922 4923`vect_cmdline_needed' 4924 Target requires a command line argument to enable a SIMD 4925 instruction set. 4926 49277.2.3.10 Environment attributes 4928............................... 4929 4930`c' 4931 The language for the compiler under test is C. 4932 4933`c++' 4934 The language for the compiler under test is C++. 4935 4936`c99_runtime' 4937 Target provides a full C99 runtime. 4938 4939`correct_iso_cpp_string_wchar_protos' 4940 Target `string.h' and `wchar.h' headers provide C++ required 4941 overloads for `strchr' etc. functions. 4942 4943`dummy_wcsftime' 4944 Target uses a dummy `wcsftime' function that always returns zero. 4945 4946`fd_truncate' 4947 Target can truncate a file from a file descriptor, as used by 4948 `libgfortran/io/unix.c:fd_truncate'; i.e. `ftruncate' or `chsize'. 4949 4950`freestanding' 4951 Target is `freestanding' as defined in section 4 of the C99 4952 standard. Effectively, it is a target which supports no extra 4953 headers or libraries other than what is considered essential. 4954 4955`init_priority' 4956 Target supports constructors with initialization priority 4957 arguments. 4958 4959`inttypes_types' 4960 Target has the basic signed and unsigned types in `inttypes.h'. 4961 This is for tests that GCC's notions of these types agree with 4962 those in the header, as some systems have only `inttypes.h'. 4963 4964`lax_strtofp' 4965 Target might have errors of a few ULP in string to floating-point 4966 conversion functions and overflow is not always detected correctly 4967 by those functions. 4968 4969`newlib' 4970 Target supports Newlib. 4971 4972`pow10' 4973 Target provides `pow10' function. 4974 4975`pthread' 4976 Target can compile using `pthread.h' with no errors or warnings. 4977 4978`pthread_h' 4979 Target has `pthread.h'. 4980 4981`run_expensive_tests' 4982 Expensive testcases (usually those that consume excessive amounts 4983 of CPU time) should be run on this target. This can be enabled by 4984 setting the `GCC_TEST_RUN_EXPENSIVE' environment variable to a 4985 non-empty string. 4986 4987`simulator' 4988 Test system runs executables on a simulator (i.e. slowly) rather 4989 than hardware (i.e. fast). 4990 4991`stdint_types' 4992 Target has the basic signed and unsigned C types in `stdint.h'. 4993 This will be obsolete when GCC ensures a working `stdint.h' for 4994 all targets. 4995 4996`trampolines' 4997 Target supports trampolines. 4998 4999`uclibc' 5000 Target supports uClibc. 5001 5002`unwrapped' 5003 Target does not use a status wrapper. 5004 5005`vxworks_kernel' 5006 Target is a VxWorks kernel. 5007 5008`vxworks_rtp' 5009 Target is a VxWorks RTP. 5010 5011`wchar' 5012 Target supports wide characters. 5013 50147.2.3.11 Other attributes 5015......................... 5016 5017`automatic_stack_alignment' 5018 Target supports automatic stack alignment. 5019 5020`cxa_atexit' 5021 Target uses `__cxa_atexit'. 5022 5023`default_packed' 5024 Target has packed layout of structure members by default. 5025 5026`fgraphite' 5027 Target supports Graphite optimizations. 5028 5029`fixed_point' 5030 Target supports fixed-point extension to C. 5031 5032`fopenmp' 5033 Target supports OpenMP via `-fopenmp'. 5034 5035`fpic' 5036 Target supports `-fpic' and `-fPIC'. 5037 5038`freorder' 5039 Target supports `-freorder-blocks-and-partition'. 5040 5041`fstack_protector' 5042 Target supports `-fstack-protector'. 5043 5044`gas' 5045 Target uses GNU `as'. 5046 5047`gc_sections' 5048 Target supports `--gc-sections'. 5049 5050`keeps_null_pointer_checks' 5051 Target keeps null pointer checks, either due to the use of 5052 `-fno-delete-null-pointer-checks' or hardwired into the target. 5053 5054`lto' 5055 Compiler has been configured to support link-time optimization 5056 (LTO). 5057 5058`named_sections' 5059 Target supports named sections. 5060 5061`natural_alignment_32' 5062 Target uses natural alignment (aligned to type size) for types of 5063 32 bits or less. 5064 5065`target_natural_alignment_64' 5066 Target uses natural alignment (aligned to type size) for types of 5067 64 bits or less. 5068 5069`nonpic' 5070 Target does not generate PIC by default. 5071 5072`pcc_bitfield_type_matters' 5073 Target defines `PCC_BITFIELD_TYPE_MATTERS'. 5074 5075`pe_aligned_commons' 5076 Target supports `-mpe-aligned-commons'. 5077 5078`section_anchors' 5079 Target supports section anchors. 5080 5081`short_enums' 5082 Target defaults to short enums. 5083 5084`static' 5085 Target supports `-static'. 5086 5087`static_libgfortran' 5088 Target supports statically linking `libgfortran'. 5089 5090`string_merging' 5091 Target supports merging string constants at link time. 5092 5093`ucn' 5094 Target supports compiling and assembling UCN. 5095 5096`ucn_nocache' 5097 Including the options used to compile this particular test, the 5098 target supports compiling and assembling UCN. 5099 5100`unaligned_stack' 5101 Target does not guarantee that its `STACK_BOUNDARY' is greater than 5102 or equal to the required vector alignment. 5103 5104`vector_alignment_reachable' 5105 Vector alignment is reachable for types of 32 bits or less. 5106 5107`vector_alignment_reachable_for_64bit' 5108 Vector alignment is reachable for types of 64 bits or less. 5109 5110`wchar_t_char16_t_compatible' 5111 Target supports `wchar_t' that is compatible with `char16_t'. 5112 5113`wchar_t_char32_t_compatible' 5114 Target supports `wchar_t' that is compatible with `char32_t'. 5115 51167.2.3.12 Local to tests in `gcc.target/i386' 5117............................................ 5118 5119`3dnow' 5120 Target supports compiling `3dnow' instructions. 5121 5122`aes' 5123 Target supports compiling `aes' instructions. 5124 5125`fma4' 5126 Target supports compiling `fma4' instructions. 5127 5128`ms_hook_prologue' 5129 Target supports attribute `ms_hook_prologue'. 5130 5131`pclmul' 5132 Target supports compiling `pclmul' instructions. 5133 5134`sse3' 5135 Target supports compiling `sse3' instructions. 5136 5137`sse4' 5138 Target supports compiling `sse4' instructions. 5139 5140`sse4a' 5141 Target supports compiling `sse4a' instructions. 5142 5143`ssse3' 5144 Target supports compiling `ssse3' instructions. 5145 5146`vaes' 5147 Target supports compiling `vaes' instructions. 5148 5149`vpclmul' 5150 Target supports compiling `vpclmul' instructions. 5151 5152`xop' 5153 Target supports compiling `xop' instructions. 5154 51557.2.3.13 Local to tests in `gcc.target/spu/ea' 5156.............................................. 5157 5158`ealib' 5159 Target `__ea' library functions are available. 5160 51617.2.3.14 Local to tests in `gcc.test-framework' 5162............................................... 5163 5164`no' 5165 Always returns 0. 5166 5167`yes' 5168 Always returns 1. 5169 5170 5171File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5172 51737.2.4 Features for `dg-add-options' 5174----------------------------------- 5175 5176The supported values of FEATURE for directive `dg-add-options' are: 5177 5178`bind_pic_locally' 5179 Add the target-specific flags needed to enable functions to bind 5180 locally when using pic/PIC passes in the testsuite. 5181 5182`c99_runtime' 5183 Add the target-specific flags needed to access the C99 runtime. 5184 5185`ieee' 5186 Add the target-specific flags needed to enable full IEEE 5187 compliance mode. 5188 5189`mips16_attribute' 5190 `mips16' function attributes. Only MIPS targets support this 5191 feature, and only then in certain modes. 5192 5193`tls' 5194 Add the target-specific flags needed to use thread-local storage. 5195 5196 5197File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5198 51997.2.5 Variants of `dg-require-SUPPORT' 5200-------------------------------------- 5201 5202A few of the `dg-require' directives take arguments. 5203 5204`dg-require-iconv CODESET' 5205 Skip the test if the target does not support iconv. CODESET is 5206 the codeset to convert to. 5207 5208`dg-require-profiling PROFOPT' 5209 Skip the test if the target does not support profiling with option 5210 PROFOPT. 5211 5212`dg-require-visibility VIS' 5213 Skip the test if the target does not support the `visibility' 5214 attribute. If VIS is `""', support for `visibility("hidden")' is 5215 checked, for `visibility("VIS")' otherwise. 5216 5217 The original `dg-require' directives were defined before there was 5218support for effective-target keywords. The directives that do not take 5219arguments could be replaced with effective-target keywords. 5220 5221`dg-require-alias ""' 5222 Skip the test if the target does not support the `alias' attribute. 5223 5224`dg-require-ascii-locale ""' 5225 Skip the test if the host does not support an ASCII locale. 5226 5227`dg-require-compat-dfp ""' 5228 Skip this test unless both compilers in a `compat' testsuite 5229 support decimal floating point. 5230 5231`dg-require-cxa-atexit ""' 5232 Skip the test if the target does not support `__cxa_atexit'. This 5233 is equivalent to `dg-require-effective-target cxa_atexit'. 5234 5235`dg-require-dll ""' 5236 Skip the test if the target does not support DLL attributes. 5237 5238`dg-require-fork ""' 5239 Skip the test if the target does not support `fork'. 5240 5241`dg-require-gc-sections ""' 5242 Skip the test if the target's linker does not support the 5243 `--gc-sections' flags. This is equivalent to 5244 `dg-require-effective-target gc-sections'. 5245 5246`dg-require-host-local ""' 5247 Skip the test if the host is remote, rather than the same as the 5248 build system. Some tests are incompatible with DejaGnu's handling 5249 of remote hosts, which involves copying the source file to the 5250 host and compiling it with a relative path and "`-o a.out'". 5251 5252`dg-require-mkfifo ""' 5253 Skip the test if the target does not support `mkfifo'. 5254 5255`dg-require-named-sections ""' 5256 Skip the test is the target does not support named sections. This 5257 is equivalent to `dg-require-effective-target named_sections'. 5258 5259`dg-require-weak ""' 5260 Skip the test if the target does not support weak symbols. 5261 5262`dg-require-weak-override ""' 5263 Skip the test if the target does not support overriding weak 5264 symbols. 5265 5266 5267File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5268 52697.2.6 Commands for use in `dg-final' 5270------------------------------------ 5271 5272The GCC testsuite defines the following directives to be used within 5273`dg-final'. 5274 52757.2.6.1 Scan a particular file 5276.............................. 5277 5278`scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 5279 Passes if REGEXP matches text in FILENAME. 5280 5281`scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 5282 Passes if REGEXP does not match text in FILENAME. 5283 5284`scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 5285 Passes if REGEXP matches in Fortran module MODULE. 5286 52877.2.6.2 Scan the assembly output 5288................................ 5289 5290`scan-assembler REGEX [{ target/xfail SELECTOR }]' 5291 Passes if REGEX matches text in the test's assembler output. 5292 5293`scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 5294 Passes if REGEX does not match text in the test's assembler output. 5295 5296`scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 5297 Passes if REGEX is matched exactly NUM times in the test's 5298 assembler output. 5299 5300`scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 5301 Passes if REGEX matches text in the test's demangled assembler 5302 output. 5303 5304`scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 5305 Passes if REGEX does not match text in the test's demangled 5306 assembler output. 5307 5308`scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 5309 Passes if SYMBOL is defined as a hidden symbol in the test's 5310 assembly output. 5311 5312`scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 5313 Passes if SYMBOL is not defined as a hidden symbol in the test's 5314 assembly output. 5315 53167.2.6.3 Scan optimization dump files 5317.................................... 5318 5319These commands are available for KIND of `tree', `rtl', and `ipa'. 5320 5321`scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 5322 Passes if REGEX matches text in the dump file with suffix SUFFIX. 5323 5324`scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5325 Passes if REGEX does not match text in the dump file with suffix 5326 SUFFIX. 5327 5328`scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 5329 Passes if REGEX is found exactly NUM times in the dump file with 5330 suffix SUFFIX. 5331 5332`scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 5333 Passes if REGEX matches demangled text in the dump file with 5334 suffix SUFFIX. 5335 5336`scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5337 Passes if REGEX does not match demangled text in the dump file with 5338 suffix SUFFIX. 5339 53407.2.6.4 Verify that an output files exists or not 5341................................................. 5342 5343`output-exists [{ target/xfail SELECTOR }]' 5344 Passes if compiler output file exists. 5345 5346`output-exists-not [{ target/xfail SELECTOR }]' 5347 Passes if compiler output file does not exist. 5348 53497.2.6.5 Check for LTO tests 5350........................... 5351 5352`scan-symbol REGEXP [{ target/xfail SELECTOR }]' 5353 Passes if the pattern is present in the final executable. 5354 53557.2.6.6 Checks for `gcov' tests 5356............................... 5357 5358`run-gcov SOURCEFILE' 5359 Check line counts in `gcov' tests. 5360 5361`run-gcov [branches] [calls] { OPTS SOURCEFILE }' 5362 Check branch and/or call counts, in addition to line counts, in 5363 `gcov' tests. 5364 53657.2.6.7 Clean up generated test files 5366..................................... 5367 5368`cleanup-coverage-files' 5369 Removes coverage data files generated for this test. 5370 5371`cleanup-ipa-dump SUFFIX' 5372 Removes IPA dump files generated for this test. 5373 5374`cleanup-modules' 5375 Removes Fortran module files generated for this test. 5376 5377`cleanup-profile-file' 5378 Removes profiling files generated for this test. 5379 5380`cleanup-repo-files' 5381 Removes files generated for this test for `-frepo'. 5382 5383`cleanup-rtl-dump SUFFIX' 5384 Removes RTL dump files generated for this test. 5385 5386`cleanup-saved-temps' 5387 Removes files for the current test which were kept for 5388 `-save-temps'. 5389 5390`cleanup-tree-dump SUFFIX' 5391 Removes tree dump files matching SUFFIX which were generated for 5392 this test. 5393 5394 5395File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 5396 53977.3 Ada Language Testsuites 5398=========================== 5399 5400The Ada testsuite includes executable tests from the ACATS 2.5 5401testsuite, publicly available at 5402`http://www.adaic.org/compilers/acats/2.5'. 5403 5404 These tests are integrated in the GCC testsuite in the `ada/acats' 5405directory, and enabled automatically when running `make check', assuming 5406the Ada language has been enabled when configuring GCC. 5407 5408 You can also run the Ada testsuite independently, using `make 5409check-ada', or run a subset of the tests by specifying which chapter to 5410run, e.g.: 5411 5412 $ make check-ada CHAPTERS="c3 c9" 5413 5414 The tests are organized by directory, each directory corresponding to 5415a chapter of the Ada Reference Manual. So for example, `c9' corresponds 5416to chapter 9, which deals with tasking features of the language. 5417 5418 There is also an extra chapter called `gcc' containing a template for 5419creating new executable tests, although this is deprecated in favor of 5420the `gnat.dg' testsuite. 5421 5422 The tests are run using two `sh' scripts: `run_acats' and 5423`run_all.sh'. To run the tests using a simulator or a cross target, 5424see the small customization section at the top of `run_all.sh'. 5425 5426 These tests are run using the build tree: they can be run without doing 5427a `make install'. 5428 5429 5430File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 5431 54327.4 C Language Testsuites 5433========================= 5434 5435GCC contains the following C language testsuites, in the 5436`gcc/testsuite' directory: 5437 5438`gcc.dg' 5439 This contains tests of particular features of the C compiler, 5440 using the more modern `dg' harness. Correctness tests for various 5441 compiler features should go here if possible. 5442 5443 Magic comments determine whether the file is preprocessed, 5444 compiled, linked or run. In these tests, error and warning 5445 message texts are compared against expected texts or regular 5446 expressions given in comments. These tests are run with the 5447 options `-ansi -pedantic' unless other options are given in the 5448 test. Except as noted below they are not run with multiple 5449 optimization options. 5450 5451`gcc.dg/compat' 5452 This subdirectory contains tests for binary compatibility using 5453 `lib/compat.exp', which in turn uses the language-independent 5454 support (*note Support for testing binary compatibility: compat 5455 Testing.). 5456 5457`gcc.dg/cpp' 5458 This subdirectory contains tests of the preprocessor. 5459 5460`gcc.dg/debug' 5461 This subdirectory contains tests for debug formats. Tests in this 5462 subdirectory are run for each debug format that the compiler 5463 supports. 5464 5465`gcc.dg/format' 5466 This subdirectory contains tests of the `-Wformat' format 5467 checking. Tests in this directory are run with and without 5468 `-DWIDE'. 5469 5470`gcc.dg/noncompile' 5471 This subdirectory contains tests of code that should not compile 5472 and does not need any special compilation options. They are run 5473 with multiple optimization options, since sometimes invalid code 5474 crashes the compiler with optimization. 5475 5476`gcc.dg/special' 5477 FIXME: describe this. 5478 5479`gcc.c-torture' 5480 This contains particular code fragments which have historically 5481 broken easily. These tests are run with multiple optimization 5482 options, so tests for features which only break at some 5483 optimization levels belong here. This also contains tests to 5484 check that certain optimizations occur. It might be worthwhile to 5485 separate the correctness tests cleanly from the code quality 5486 tests, but it hasn't been done yet. 5487 5488`gcc.c-torture/compat' 5489 FIXME: describe this. 5490 5491 This directory should probably not be used for new tests. 5492 5493`gcc.c-torture/compile' 5494 This testsuite contains test cases that should compile, but do not 5495 need to link or run. These test cases are compiled with several 5496 different combinations of optimization options. All warnings are 5497 disabled for these test cases, so this directory is not suitable if 5498 you wish to test for the presence or absence of compiler warnings. 5499 While special options can be set, and tests disabled on specific 5500 platforms, by the use of `.x' files, mostly these test cases 5501 should not contain platform dependencies. FIXME: discuss how 5502 defines such as `NO_LABEL_VALUES' and `STACK_SIZE' are used. 5503 5504`gcc.c-torture/execute' 5505 This testsuite contains test cases that should compile, link and 5506 run; otherwise the same comments as for `gcc.c-torture/compile' 5507 apply. 5508 5509`gcc.c-torture/execute/ieee' 5510 This contains tests which are specific to IEEE floating point. 5511 5512`gcc.c-torture/unsorted' 5513 FIXME: describe this. 5514 5515 This directory should probably not be used for new tests. 5516 5517`gcc.misc-tests' 5518 This directory contains C tests that require special handling. 5519 Some of these tests have individual expect files, and others share 5520 special-purpose expect files: 5521 5522 ``bprob*.c'' 5523 Test `-fbranch-probabilities' using 5524 `gcc.misc-tests/bprob.exp', which in turn uses the generic, 5525 language-independent framework (*note Support for testing 5526 profile-directed optimizations: profopt Testing.). 5527 5528 ``gcov*.c'' 5529 Test `gcov' output using `gcov.exp', which in turn uses the 5530 language-independent support (*note Support for testing gcov: 5531 gcov Testing.). 5532 5533 ``i386-pf-*.c'' 5534 Test i386-specific support for data prefetch using 5535 `i386-prefetch.exp'. 5536 5537`gcc.test-framework' 5538 5539 ``dg-*.c'' 5540 Test the testsuite itself using 5541 `gcc.test-framework/test-framework.exp'. 5542 5543 5544 FIXME: merge in `testsuite/README.gcc' and discuss the format of test 5545cases and magic comments more. 5546 5547 5548File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites 5549 55507.5 The Java library testsuites. 5551================================ 5552 5553Runtime tests are executed via `make check' in the 5554`TARGET/libjava/testsuite' directory in the build tree. Additional 5555runtime tests can be checked into this testsuite. 5556 5557 Regression testing of the core packages in libgcj is also covered by 5558the Mauve testsuite. The Mauve Project develops tests for the Java 5559Class Libraries. These tests are run as part of libgcj testing by 5560placing the Mauve tree within the libjava testsuite sources at 5561`libjava/testsuite/libjava.mauve/mauve', or by specifying the location 5562of that tree when invoking `make', as in `make MAUVEDIR=~/mauve check'. 5563 5564 To detect regressions, a mechanism in `mauve.exp' compares the 5565failures for a test run against the list of expected failures in 5566`libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 5567Update this file when adding new failing tests to Mauve, or when fixing 5568bugs in libgcj that had caused Mauve test failures. 5569 5570 We encourage developers to contribute test cases to Mauve. 5571 5572 5573File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites 5574 55757.6 Support for testing link-time optimizations 5576=============================================== 5577 5578Tests for link-time optimizations usually require multiple source files 5579that are compiled separately, perhaps with different sets of options. 5580There are several special-purpose test directives used for these tests. 5581 5582`{ dg-lto-do DO-WHAT-KEYWORD }' 5583 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 5584 is executed. It is one of: 5585 5586 `assemble' 5587 Compile with `-c' to produce a relocatable object file. 5588 5589 `link' 5590 Compile, assemble, and link to produce an executable file. 5591 5592 `run' 5593 Produce and run an executable file, which is expected to 5594 return an exit code of 0. 5595 5596 The default is `assemble'. That can be overridden for a set of 5597 tests by redefining `dg-do-what-default' within the `.exp' file 5598 for those tests. 5599 5600 Unlike `dg-do', `dg-lto-do' does not support an optional `target' 5601 or `xfail' list. Use `dg-skip-if', `dg-xfail-if', or 5602 `dg-xfail-run-if'. 5603 5604`{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 5605 This directive provides a list of one or more sets of compiler 5606 options to override LTO_OPTIONS. Each test will be compiled and 5607 run with each of these sets of options. 5608 5609`{ dg-extra-ld-options OPTIONS }' 5610 This directive adds OPTIONS to the linker options used. 5611 5612`{ dg-suppress-ld-options OPTIONS }' 5613 This directive removes OPTIONS from the set of linker options used. 5614 5615 5616File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 5617 56187.7 Support for testing `gcov' 5619============================== 5620 5621Language-independent support for testing `gcov', and for checking that 5622branch profiling produces expected values, is provided by the expect 5623file `lib/gcov.exp'. `gcov' tests also rely on procedures in 5624`lib/gcc-dg.exp' to compile and run the test program. A typical `gcov' 5625test contains the following DejaGnu commands within comments: 5626 5627 { dg-options "-fprofile-arcs -ftest-coverage" } 5628 { dg-do run { target native } } 5629 { dg-final { run-gcov sourcefile } } 5630 5631 Checks of `gcov' output can include line counts, branch percentages, 5632and call return percentages. All of these checks are requested via 5633commands that appear in comments in the test's source file. Commands 5634to check line counts are processed by default. Commands to check 5635branch percentages and call return percentages are processed if the 5636`run-gcov' command has arguments `branches' or `calls', respectively. 5637For example, the following specifies checking both, as well as passing 5638`-b' to `gcov': 5639 5640 { dg-final { run-gcov branches calls { -b sourcefile } } } 5641 5642 A line count command appears within a comment on the source line that 5643is expected to get the specified count and has the form `count(CNT)'. 5644A test should only check line counts for lines that will get the same 5645count for any architecture. 5646 5647 Commands to check branch percentages (`branch') and call return 5648percentages (`returns') are very similar to each other. A beginning 5649command appears on or before the first of a range of lines that will 5650report the percentage, and the ending command follows that range of 5651lines. The beginning command can include a list of percentages, all of 5652which are expected to be found within the range. A range is terminated 5653by the next command of the same kind. A command `branch(end)' or 5654`returns(end)' marks the end of a range without starting a new one. 5655For example: 5656 5657 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 5658 /* branch(end) */ 5659 foo (i, j); 5660 5661 For a call return percentage, the value specified is the percentage of 5662calls reported to return. For a branch percentage, the value is either 5663the expected percentage or 100 minus that value, since the direction of 5664a branch can differ depending on the target or the optimization level. 5665 5666 Not all branches and calls need to be checked. A test should not 5667check for branches that might be optimized away or replaced with 5668predicated instructions. Don't check for calls inserted by the 5669compiler or ones that might be inlined or optimized away. 5670 5671 A single test can check for combinations of line counts, branch 5672percentages, and call return percentages. The command to check a line 5673count must appear on the line that will report that count, but commands 5674to check branch percentages and call return percentages can bracket the 5675lines that report them. 5676 5677 5678File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 5679 56807.8 Support for testing profile-directed optimizations 5681====================================================== 5682 5683The file `profopt.exp' provides language-independent support for 5684checking correct execution of a test built with profile-directed 5685optimization. This testing requires that a test program be built and 5686executed twice. The first time it is compiled to generate profile 5687data, and the second time it is compiled to use the data that was 5688generated during the first execution. The second execution is to 5689verify that the test produces the expected results. 5690 5691 To check that the optimization actually generated better code, a test 5692can be built and run a third time with normal optimizations to verify 5693that the performance is better with the profile-directed optimizations. 5694`profopt.exp' has the beginnings of this kind of support. 5695 5696 `profopt.exp' provides generic support for profile-directed 5697optimizations. Each set of tests that uses it provides information 5698about a specific optimization: 5699 5700`tool' 5701 tool being tested, e.g., `gcc' 5702 5703`profile_option' 5704 options used to generate profile data 5705 5706`feedback_option' 5707 options used to optimize using that profile data 5708 5709`prof_ext' 5710 suffix of profile data files 5711 5712`PROFOPT_OPTIONS' 5713 list of options with which to run each test, similar to the lists 5714 for torture tests 5715 5716`{ dg-final-generate { LOCAL-DIRECTIVE } }' 5717 This directive is similar to `dg-final', but the LOCAL-DIRECTIVE 5718 is run after the generation of profile data. 5719 5720`{ dg-final-use { LOCAL-DIRECTIVE } }' 5721 The LOCAL-DIRECTIVE is run after the profile data have been used. 5722 5723 5724File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 5725 57267.9 Support for testing binary compatibility 5727============================================ 5728 5729The file `compat.exp' provides language-independent support for binary 5730compatibility testing. It supports testing interoperability of two 5731compilers that follow the same ABI, or of multiple sets of compiler 5732options that should not affect binary compatibility. It is intended to 5733be used for testsuites that complement ABI testsuites. 5734 5735 A test supported by this framework has three parts, each in a separate 5736source file: a main program and two pieces that interact with each 5737other to split up the functionality being tested. 5738 5739`TESTNAME_main.SUFFIX' 5740 Contains the main program, which calls a function in file 5741 `TESTNAME_x.SUFFIX'. 5742 5743`TESTNAME_x.SUFFIX' 5744 Contains at least one call to a function in `TESTNAME_y.SUFFIX'. 5745 5746`TESTNAME_y.SUFFIX' 5747 Shares data with, or gets arguments from, `TESTNAME_x.SUFFIX'. 5748 5749 Within each test, the main program and one functional piece are 5750compiled by the GCC under test. The other piece can be compiled by an 5751alternate compiler. If no alternate compiler is specified, then all 5752three source files are all compiled by the GCC under test. You can 5753specify pairs of sets of compiler options. The first element of such a 5754pair specifies options used with the GCC under test, and the second 5755element of the pair specifies options used with the alternate compiler. 5756Each test is compiled with each pair of options. 5757 5758 `compat.exp' defines default pairs of compiler options. These can be 5759overridden by defining the environment variable `COMPAT_OPTIONS' as: 5760 5761 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 5762 ...[list {TSTN} {ALTN}]]" 5763 5764 where TSTI and ALTI are lists of options, with TSTI used by the 5765compiler under test and ALTI used by the alternate compiler. For 5766example, with `[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 5767the test is first built with `-g -O0' by the compiler under test and 5768with `-O3' by the alternate compiler. The test is built a second time 5769using `-fpic' by the compiler under test and `-fPIC -O2' by the 5770alternate compiler. 5771 5772 An alternate compiler is specified by defining an environment variable 5773to be the full pathname of an installed compiler; for C define 5774`ALT_CC_UNDER_TEST', and for C++ define `ALT_CXX_UNDER_TEST'. These 5775will be written to the `site.exp' file used by DejaGnu. The default is 5776to build each test with the compiler under test using the first of each 5777pair of compiler options from `COMPAT_OPTIONS'. When 5778`ALT_CC_UNDER_TEST' or `ALT_CXX_UNDER_TEST' is `same', each test is 5779built using the compiler under test but with combinations of the 5780options from `COMPAT_OPTIONS'. 5781 5782 To run only the C++ compatibility suite using the compiler under test 5783and another version of GCC using specific compiler options, do the 5784following from `OBJDIR/gcc': 5785 5786 rm site.exp 5787 make -k \ 5788 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 5789 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 5790 check-c++ \ 5791 RUNTESTFLAGS="compat.exp" 5792 5793 A test that fails when the source files are compiled with different 5794compilers, but passes when the files are compiled with the same 5795compiler, demonstrates incompatibility of the generated code or runtime 5796support. A test that fails for the alternate compiler but passes for 5797the compiler under test probably tests for a bug that was fixed in the 5798compiler under test but is present in the alternate compiler. 5799 5800 The binary compatibility tests support a small number of test framework 5801commands that appear within comments in a test file. 5802 5803`dg-require-*' 5804 These commands can be used in `TESTNAME_main.SUFFIX' to skip the 5805 test if specific support is not available on the target. 5806 5807`dg-options' 5808 The specified options are used for compiling this particular source 5809 file, appended to the options from `COMPAT_OPTIONS'. When this 5810 command appears in `TESTNAME_main.SUFFIX' the options are also 5811 used to link the test program. 5812 5813`dg-xfail-if' 5814 This command can be used in a secondary source file to specify that 5815 compilation is expected to fail for particular options on 5816 particular targets. 5817 5818 5819File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites 5820 58217.10 Support for torture testing using multiple options 5822======================================================= 5823 5824Throughout the compiler testsuite there are several directories whose 5825tests are run multiple times, each with a different set of options. 5826These are known as torture tests. `lib/torture-options.exp' defines 5827procedures to set up these lists: 5828 5829`torture-init' 5830 Initialize use of torture lists. 5831 5832`set-torture-options' 5833 Set lists of torture options to use for tests with and without 5834 loops. Optionally combine a set of torture options with a set of 5835 other options, as is done with Objective-C runtime options. 5836 5837`torture-finish' 5838 Finalize use of torture lists. 5839 5840 The `.exp' file for a set of tests that use torture options must 5841include calls to these three procedures if: 5842 5843 * It calls `gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 5844 5845 * It calls ${TOOL}`-torture' or ${TOOL}`-torture-execute', where 5846 TOOL is `c', `fortran', or `objc'. 5847 5848 * It calls `dg-pch'. 5849 5850 It is not necessary for a `.exp' file that calls `gcc-dg-runtest' to 5851call the torture procedures if the tests should use the list in 5852DG_TORTURE_OPTIONS defined in `gcc-dg.exp'. 5853 5854 Most uses of torture options can override the default lists by defining 5855TORTURE_OPTIONS or add to the default list by defining 5856ADDITIONAL_TORTURE_OPTIONS. Define these in a `.dejagnurc' file or add 5857them to the `site.exp' file; for example 5858 5859 set ADDITIONAL_TORTURE_OPTIONS [list \ 5860 { -O2 -ftree-loop-linear } \ 5861 { -O2 -fpeel-loops } ] 5862 5863 5864File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 5865 58668 Option specification files 5867**************************** 5868 5869Most GCC command-line options are described by special option 5870definition files, the names of which conventionally end in `.opt'. 5871This chapter describes the format of these files. 5872 5873* Menu: 5874 5875* Option file format:: The general layout of the files 5876* Option properties:: Supported option properties 5877 5878 5879File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 5880 58818.1 Option file format 5882====================== 5883 5884Option files are a simple list of records in which each field occupies 5885its own line and in which the records themselves are separated by blank 5886lines. Comments may appear on their own line anywhere within the file 5887and are preceded by semicolons. Whitespace is allowed before the 5888semicolon. 5889 5890 The files can contain the following types of record: 5891 5892 * A language definition record. These records have two fields: the 5893 string `Language' and the name of the language. Once a language 5894 has been declared in this way, it can be used as an option 5895 property. *Note Option properties::. 5896 5897 * A target specific save record to save additional information. These 5898 records have two fields: the string `TargetSave', and a 5899 declaration type to go in the `cl_target_option' structure. 5900 5901 * An option definition record. These records have the following 5902 fields: 5903 1. the name of the option, with the leading "-" removed 5904 5905 2. a space-separated list of option properties (*note Option 5906 properties::) 5907 5908 3. the help text to use for `--help' (omitted if the second field 5909 contains the `Undocumented' property). 5910 5911 By default, all options beginning with "f", "W" or "m" are 5912 implicitly assumed to take a "no-" form. This form should not be 5913 listed separately. If an option beginning with one of these 5914 letters does not have a "no-" form, you can use the 5915 `RejectNegative' property to reject it. 5916 5917 The help text is automatically line-wrapped before being displayed. 5918 Normally the name of the option is printed on the left-hand side of 5919 the output and the help text is printed on the right. However, if 5920 the help text contains a tab character, the text to the left of 5921 the tab is used instead of the option's name and the text to the 5922 right of the tab forms the help text. This allows you to 5923 elaborate on what type of argument the option takes. 5924 5925 * A target mask record. These records have one field of the form 5926 `Mask(X)'. The options-processing script will automatically 5927 allocate a bit in `target_flags' (*note Run-time Target::) for 5928 each mask name X and set the macro `MASK_X' to the appropriate 5929 bitmask. It will also declare a `TARGET_X' macro that has the 5930 value 1 when bit `MASK_X' is set and 0 otherwise. 5931 5932 They are primarily intended to declare target masks that are not 5933 associated with user options, either because these masks represent 5934 internal switches or because the options are not available on all 5935 configurations and yet the masks always need to be defined. 5936 5937 5938File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 5939 59408.2 Option properties 5941===================== 5942 5943The second field of an option record can specify any of the following 5944properties. When an option takes an argument, it is enclosed in 5945parentheses following the option property name. The parser that 5946handles option files is quite simplistic, and will be tricked by any 5947nested parentheses within the argument text itself; in this case, the 5948entire option argument can be wrapped in curly braces within the 5949parentheses to demarcate it, e.g.: 5950 5951 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 5952 5953`Common' 5954 The option is available for all languages and targets. 5955 5956`Target' 5957 The option is available for all languages but is target-specific. 5958 5959`LANGUAGE' 5960 The option is available when compiling for the given language. 5961 5962 It is possible to specify several different languages for the same 5963 option. Each LANGUAGE must have been declared by an earlier 5964 `Language' record. *Note Option file format::. 5965 5966`RejectNegative' 5967 The option does not have a "no-" form. All options beginning with 5968 "f", "W" or "m" are assumed to have a "no-" form unless this 5969 property is used. 5970 5971`Negative(OTHERNAME)' 5972 The option will turn off another option OTHERNAME, which is the 5973 option name with the leading "-" removed. This chain action will 5974 propagate through the `Negative' property of the option to be 5975 turned off. 5976 5977`Joined' 5978`Separate' 5979 The option takes a mandatory argument. `Joined' indicates that 5980 the option and argument can be included in the same `argv' entry 5981 (as with `-mflush-func=NAME', for example). `Separate' indicates 5982 that the option and argument can be separate `argv' entries (as 5983 with `-o'). An option is allowed to have both of these properties. 5984 5985`JoinedOrMissing' 5986 The option takes an optional argument. If the argument is given, 5987 it will be part of the same `argv' entry as the option itself. 5988 5989 This property cannot be used alongside `Joined' or `Separate'. 5990 5991`UInteger' 5992 The option's argument is a non-negative integer. The option parser 5993 will check and convert the argument before passing it to the 5994 relevant option handler. `UInteger' should also be used on 5995 options like `-falign-loops' where both `-falign-loops' and 5996 `-falign-loops'=N are supported to make sure the saved options are 5997 given a full integer. 5998 5999`Var(VAR)' 6000 The state of this option should be stored in variable VAR. The 6001 way that the state is stored depends on the type of option: 6002 6003 * If the option uses the `Mask' or `InverseMask' properties, 6004 VAR is the integer variable that contains the mask. 6005 6006 * If the option is a normal on/off switch, VAR is an integer 6007 variable that is nonzero when the option is enabled. The 6008 options parser will set the variable to 1 when the positive 6009 form of the option is used and 0 when the "no-" form is used. 6010 6011 * If the option takes an argument and has the `UInteger' 6012 property, VAR is an integer variable that stores the value of 6013 the argument. 6014 6015 * Otherwise, if the option takes an argument, VAR is a pointer 6016 to the argument string. The pointer will be null if the 6017 argument is optional and wasn't given. 6018 6019 The option-processing script will usually declare VAR in 6020 `options.c' and leave it to be zero-initialized at start-up time. 6021 You can modify this behavior using `VarExists' and `Init'. 6022 6023`Var(VAR, SET)' 6024 The option controls an integer variable VAR and is active when VAR 6025 equals SET. The option parser will set VAR to SET when the 6026 positive form of the option is used and `!SET' when the "no-" form 6027 is used. 6028 6029 VAR is declared in the same way as for the single-argument form 6030 described above. 6031 6032`VarExists' 6033 The variable specified by the `Var' property already exists. No 6034 definition should be added to `options.c' in response to this 6035 option record. 6036 6037 You should use this property only if the variable is declared 6038 outside `options.c'. 6039 6040`Init(VALUE)' 6041 The variable specified by the `Var' property should be statically 6042 initialized to VALUE. 6043 6044`Mask(NAME)' 6045 The option is associated with a bit in the `target_flags' variable 6046 (*note Run-time Target::) and is active when that bit is set. You 6047 may also specify `Var' to select a variable other than 6048 `target_flags'. 6049 6050 The options-processing script will automatically allocate a unique 6051 bit for the option. If the option is attached to `target_flags', 6052 the script will set the macro `MASK_NAME' to the appropriate 6053 bitmask. It will also declare a `TARGET_NAME' macro that has the 6054 value 1 when the option is active and 0 otherwise. If you use 6055 `Var' to attach the option to a different variable, the associated 6056 macros are called `OPTION_MASK_NAME' and `OPTION_NAME' 6057 respectively. 6058 6059 You can disable automatic bit allocation using `MaskExists'. 6060 6061`InverseMask(OTHERNAME)' 6062`InverseMask(OTHERNAME, THISNAME)' 6063 The option is the inverse of another option that has the 6064 `Mask(OTHERNAME)' property. If THISNAME is given, the 6065 options-processing script will declare a `TARGET_THISNAME' macro 6066 that is 1 when the option is active and 0 otherwise. 6067 6068`MaskExists' 6069 The mask specified by the `Mask' property already exists. No 6070 `MASK' or `TARGET' definitions should be added to `options.h' in 6071 response to this option record. 6072 6073 The main purpose of this property is to support synonymous options. 6074 The first option should use `Mask(NAME)' and the others should use 6075 `Mask(NAME) MaskExists'. 6076 6077`Report' 6078 The state of the option should be printed by `-fverbose-asm'. 6079 6080`Undocumented' 6081 The option is deliberately missing documentation and should not be 6082 included in the `--help' output. 6083 6084`Condition(COND)' 6085 The option should only be accepted if preprocessor condition COND 6086 is true. Note that any C declarations associated with the option 6087 will be present even if COND is false; COND simply controls 6088 whether the option is accepted and whether it is printed in the 6089 `--help' output. 6090 6091`Save' 6092 Build the `cl_target_option' structure to hold a copy of the 6093 option, add the functions `cl_target_option_save' and 6094 `cl_target_option_restore' to save and restore the options. 6095 6096 6097File: gccint.info, Node: Passes, Next: GENERIC, Prev: Options, Up: Top 6098 60999 Passes and Files of the Compiler 6100********************************** 6101 6102This chapter is dedicated to giving an overview of the optimization and 6103code generation passes of the compiler. In the process, it describes 6104some of the language front end interface, though this description is no 6105where near complete. 6106 6107* Menu: 6108 6109* Parsing pass:: The language front end turns text into bits. 6110* Gimplification pass:: The bits are turned into something we can optimize. 6111* Pass manager:: Sequencing the optimization passes. 6112* Tree SSA passes:: Optimizations on a high-level representation. 6113* RTL passes:: Optimizations on a low-level representation. 6114 6115 6116File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes 6117 61189.1 Parsing pass 6119================ 6120 6121The language front end is invoked only once, via 6122`lang_hooks.parse_file', to parse the entire input. The language front 6123end may use any intermediate language representation deemed 6124appropriate. The C front end uses GENERIC trees (CROSSREF), plus a 6125double handful of language specific tree codes defined in 6126`c-common.def'. The Fortran front end uses a completely different 6127private representation. 6128 6129 At some point the front end must translate the representation used in 6130the front end to a representation understood by the language-independent 6131portions of the compiler. Current practice takes one of two forms. 6132The C front end manually invokes the gimplifier (CROSSREF) on each 6133function, and uses the gimplifier callbacks to convert the 6134language-specific tree nodes directly to GIMPLE (CROSSREF) before 6135passing the function off to be compiled. The Fortran front end 6136converts from a private representation to GENERIC, which is later 6137lowered to GIMPLE when the function is compiled. Which route to choose 6138probably depends on how well GENERIC (plus extensions) can be made to 6139match up with the source language and necessary parsing data structures. 6140 6141 BUG: Gimplification must occur before nested function lowering, and 6142nested function lowering must be done by the front end before passing 6143the data off to cgraph. 6144 6145 TODO: Cgraph should control nested function lowering. It would only 6146be invoked when it is certain that the outer-most function is used. 6147 6148 TODO: Cgraph needs a gimplify_function callback. It should be invoked 6149when (1) it is certain that the function is used, (2) warning flags 6150specified by the user require some amount of compilation in order to 6151honor, (3) the language indicates that semantic analysis is not 6152complete until gimplification occurs. Hum... this sounds overly 6153complicated. Perhaps we should just have the front end gimplify 6154always; in most cases it's only one function call. 6155 6156 The front end needs to pass all function definitions and top level 6157declarations off to the middle-end so that they can be compiled and 6158emitted to the object file. For a simple procedural language, it is 6159usually most convenient to do this as each top level declaration or 6160definition is seen. There is also a distinction to be made between 6161generating functional code and generating complete debug information. 6162The only thing that is absolutely required for functional code is that 6163function and data _definitions_ be passed to the middle-end. For 6164complete debug information, function, data and type declarations should 6165all be passed as well. 6166 6167 In any case, the front end needs each complete top-level function or 6168data declaration, and each data definition should be passed to 6169`rest_of_decl_compilation'. Each complete type definition should be 6170passed to `rest_of_type_compilation'. Each function definition should 6171be passed to `cgraph_finalize_function'. 6172 6173 TODO: I know rest_of_compilation currently has all sorts of RTL 6174generation semantics. I plan to move all code generation bits (both 6175Tree and RTL) to compile_function. Should we hide cgraph from the 6176front ends and move back to rest_of_compilation as the official 6177interface? Possibly we should rename all three interfaces such that 6178the names match in some meaningful way and that is more descriptive 6179than "rest_of". 6180 6181 The middle-end will, at its option, emit the function and data 6182definitions immediately or queue them for later processing. 6183 6184 6185File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes 6186 61879.2 Gimplification pass 6188======================= 6189 6190"Gimplification" is a whimsical term for the process of converting the 6191intermediate representation of a function into the GIMPLE language 6192(CROSSREF). The term stuck, and so words like "gimplification", 6193"gimplify", "gimplifier" and the like are sprinkled throughout this 6194section of code. 6195 6196 While a front end may certainly choose to generate GIMPLE directly if 6197it chooses, this can be a moderately complex process unless the 6198intermediate language used by the front end is already fairly simple. 6199Usually it is easier to generate GENERIC trees plus extensions and let 6200the language-independent gimplifier do most of the work. 6201 6202 The main entry point to this pass is `gimplify_function_tree' located 6203in `gimplify.c'. From here we process the entire function gimplifying 6204each statement in turn. The main workhorse for this pass is 6205`gimplify_expr'. Approximately everything passes through here at least 6206once, and it is from here that we invoke the `lang_hooks.gimplify_expr' 6207callback. 6208 6209 The callback should examine the expression in question and return 6210`GS_UNHANDLED' if the expression is not a language specific construct 6211that requires attention. Otherwise it should alter the expression in 6212some way to such that forward progress is made toward producing valid 6213GIMPLE. If the callback is certain that the transformation is complete 6214and the expression is valid GIMPLE, it should return `GS_ALL_DONE'. 6215Otherwise it should return `GS_OK', which will cause the expression to 6216be processed again. If the callback encounters an error during the 6217transformation (because the front end is relying on the gimplification 6218process to finish semantic checks), it should return `GS_ERROR'. 6219 6220 6221File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes 6222 62239.3 Pass manager 6224================ 6225 6226The pass manager is located in `passes.c', `tree-optimize.c' and 6227`tree-pass.h'. Its job is to run all of the individual passes in the 6228correct order, and take care of standard bookkeeping that applies to 6229every pass. 6230 6231 The theory of operation is that each pass defines a structure that 6232represents everything we need to know about that pass--when it should 6233be run, how it should be run, what intermediate language form or 6234on-the-side data structures it needs. We register the pass to be run 6235in some particular order, and the pass manager arranges for everything 6236to happen in the correct order. 6237 6238 The actuality doesn't completely live up to the theory at present. 6239Command-line switches and `timevar_id_t' enumerations must still be 6240defined elsewhere. The pass manager validates constraints but does not 6241attempt to (re-)generate data structures or lower intermediate language 6242form based on the requirements of the next pass. Nevertheless, what is 6243present is useful, and a far sight better than nothing at all. 6244 6245 Each pass should have a unique name. Each pass may have its own dump 6246file (for GCC debugging purposes). Passes with a name starting with a 6247star do not dump anything. Sometimes passes are supposed to share a 6248dump file / option name. To still give these unique names, you can use 6249a prefix that is delimited by a space from the part that is used for 6250the dump file / option name. E.g. When the pass name is "ud dce", the 6251name used for dump file/options is "dce". 6252 6253 TODO: describe the global variables set up by the pass manager, and a 6254brief description of how a new pass should use it. I need to look at 6255what info RTL passes use first... 6256 6257 6258File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 6259 62609.4 Tree SSA passes 6261=================== 6262 6263The following briefly describes the Tree optimization passes that are 6264run after gimplification and what source files they are located in. 6265 6266 * Remove useless statements 6267 6268 This pass is an extremely simple sweep across the gimple code in 6269 which we identify obviously dead code and remove it. Here we do 6270 things like simplify `if' statements with constant conditions, 6271 remove exception handling constructs surrounding code that 6272 obviously cannot throw, remove lexical bindings that contain no 6273 variables, and other assorted simplistic cleanups. The idea is to 6274 get rid of the obvious stuff quickly rather than wait until later 6275 when it's more work to get rid of it. This pass is located in 6276 `tree-cfg.c' and described by `pass_remove_useless_stmts'. 6277 6278 * Mudflap declaration registration 6279 6280 If mudflap (*note -fmudflap -fmudflapth -fmudflapir: (gcc)Optimize 6281 Options.) is enabled, we generate code to register some variable 6282 declarations with the mudflap runtime. Specifically, the runtime 6283 tracks the lifetimes of those variable declarations that have 6284 their addresses taken, or whose bounds are unknown at compile time 6285 (`extern'). This pass generates new exception handling constructs 6286 (`try'/`finally'), and so must run before those are lowered. In 6287 addition, the pass enqueues declarations of static variables whose 6288 lifetimes extend to the entire program. The pass is located in 6289 `tree-mudflap.c' and is described by `pass_mudflap_1'. 6290 6291 * OpenMP lowering 6292 6293 If OpenMP generation (`-fopenmp') is enabled, this pass lowers 6294 OpenMP constructs into GIMPLE. 6295 6296 Lowering of OpenMP constructs involves creating replacement 6297 expressions for local variables that have been mapped using data 6298 sharing clauses, exposing the control flow of most synchronization 6299 directives and adding region markers to facilitate the creation of 6300 the control flow graph. The pass is located in `omp-low.c' and is 6301 described by `pass_lower_omp'. 6302 6303 * OpenMP expansion 6304 6305 If OpenMP generation (`-fopenmp') is enabled, this pass expands 6306 parallel regions into their own functions to be invoked by the 6307 thread library. The pass is located in `omp-low.c' and is 6308 described by `pass_expand_omp'. 6309 6310 * Lower control flow 6311 6312 This pass flattens `if' statements (`COND_EXPR') and moves lexical 6313 bindings (`BIND_EXPR') out of line. After this pass, all `if' 6314 statements will have exactly two `goto' statements in its `then' 6315 and `else' arms. Lexical binding information for each statement 6316 will be found in `TREE_BLOCK' rather than being inferred from its 6317 position under a `BIND_EXPR'. This pass is found in 6318 `gimple-low.c' and is described by `pass_lower_cf'. 6319 6320 * Lower exception handling control flow 6321 6322 This pass decomposes high-level exception handling constructs 6323 (`TRY_FINALLY_EXPR' and `TRY_CATCH_EXPR') into a form that 6324 explicitly represents the control flow involved. After this pass, 6325 `lookup_stmt_eh_region' will return a non-negative number for any 6326 statement that may have EH control flow semantics; examine 6327 `tree_can_throw_internal' or `tree_can_throw_external' for exact 6328 semantics. Exact control flow may be extracted from 6329 `foreach_reachable_handler'. The EH region nesting tree is defined 6330 in `except.h' and built in `except.c'. The lowering pass itself 6331 is in `tree-eh.c' and is described by `pass_lower_eh'. 6332 6333 * Build the control flow graph 6334 6335 This pass decomposes a function into basic blocks and creates all 6336 of the edges that connect them. It is located in `tree-cfg.c' and 6337 is described by `pass_build_cfg'. 6338 6339 * Find all referenced variables 6340 6341 This pass walks the entire function and collects an array of all 6342 variables referenced in the function, `referenced_vars'. The 6343 index at which a variable is found in the array is used as a UID 6344 for the variable within this function. This data is needed by the 6345 SSA rewriting routines. The pass is located in `tree-dfa.c' and 6346 is described by `pass_referenced_vars'. 6347 6348 * Enter static single assignment form 6349 6350 This pass rewrites the function such that it is in SSA form. After 6351 this pass, all `is_gimple_reg' variables will be referenced by 6352 `SSA_NAME', and all occurrences of other variables will be 6353 annotated with `VDEFS' and `VUSES'; PHI nodes will have been 6354 inserted as necessary for each basic block. This pass is located 6355 in `tree-ssa.c' and is described by `pass_build_ssa'. 6356 6357 * Warn for uninitialized variables 6358 6359 This pass scans the function for uses of `SSA_NAME's that are fed 6360 by default definition. For non-parameter variables, such uses are 6361 uninitialized. The pass is run twice, before and after 6362 optimization (if turned on). In the first pass we only warn for 6363 uses that are positively uninitialized; in the second pass we warn 6364 for uses that are possibly uninitialized. The pass is located in 6365 `tree-ssa.c' and is defined by `pass_early_warn_uninitialized' and 6366 `pass_late_warn_uninitialized'. 6367 6368 * Dead code elimination 6369 6370 This pass scans the function for statements without side effects 6371 whose result is unused. It does not do memory life analysis, so 6372 any value that is stored in memory is considered used. The pass 6373 is run multiple times throughout the optimization process. It is 6374 located in `tree-ssa-dce.c' and is described by `pass_dce'. 6375 6376 * Dominator optimizations 6377 6378 This pass performs trivial dominator-based copy and constant 6379 propagation, expression simplification, and jump threading. It is 6380 run multiple times throughout the optimization process. It is 6381 located in `tree-ssa-dom.c' and is described by `pass_dominator'. 6382 6383 * Forward propagation of single-use variables 6384 6385 This pass attempts to remove redundant computation by substituting 6386 variables that are used once into the expression that uses them and 6387 seeing if the result can be simplified. It is located in 6388 `tree-ssa-forwprop.c' and is described by `pass_forwprop'. 6389 6390 * Copy Renaming 6391 6392 This pass attempts to change the name of compiler temporaries 6393 involved in copy operations such that SSA->normal can coalesce the 6394 copy away. When compiler temporaries are copies of user 6395 variables, it also renames the compiler temporary to the user 6396 variable resulting in better use of user symbols. It is located 6397 in `tree-ssa-copyrename.c' and is described by `pass_copyrename'. 6398 6399 * PHI node optimizations 6400 6401 This pass recognizes forms of PHI inputs that can be represented as 6402 conditional expressions and rewrites them into straight line code. 6403 It is located in `tree-ssa-phiopt.c' and is described by 6404 `pass_phiopt'. 6405 6406 * May-alias optimization 6407 6408 This pass performs a flow sensitive SSA-based points-to analysis. 6409 The resulting may-alias, must-alias, and escape analysis 6410 information is used to promote variables from in-memory 6411 addressable objects to non-aliased variables that can be renamed 6412 into SSA form. We also update the `VDEF'/`VUSE' memory tags for 6413 non-renameable aggregates so that we get fewer false kills. The 6414 pass is located in `tree-ssa-alias.c' and is described by 6415 `pass_may_alias'. 6416 6417 Interprocedural points-to information is located in 6418 `tree-ssa-structalias.c' and described by `pass_ipa_pta'. 6419 6420 * Profiling 6421 6422 This pass rewrites the function in order to collect runtime block 6423 and value profiling data. Such data may be fed back into the 6424 compiler on a subsequent run so as to allow optimization based on 6425 expected execution frequencies. The pass is located in 6426 `predict.c' and is described by `pass_profile'. 6427 6428 * Lower complex arithmetic 6429 6430 This pass rewrites complex arithmetic operations into their 6431 component scalar arithmetic operations. The pass is located in 6432 `tree-complex.c' and is described by `pass_lower_complex'. 6433 6434 * Scalar replacement of aggregates 6435 6436 This pass rewrites suitable non-aliased local aggregate variables 6437 into a set of scalar variables. The resulting scalar variables are 6438 rewritten into SSA form, which allows subsequent optimization 6439 passes to do a significantly better job with them. The pass is 6440 located in `tree-sra.c' and is described by `pass_sra'. 6441 6442 * Dead store elimination 6443 6444 This pass eliminates stores to memory that are subsequently 6445 overwritten by another store, without any intervening loads. The 6446 pass is located in `tree-ssa-dse.c' and is described by `pass_dse'. 6447 6448 * Tail recursion elimination 6449 6450 This pass transforms tail recursion into a loop. It is located in 6451 `tree-tailcall.c' and is described by `pass_tail_recursion'. 6452 6453 * Forward store motion 6454 6455 This pass sinks stores and assignments down the flowgraph closer 6456 to their use point. The pass is located in `tree-ssa-sink.c' and 6457 is described by `pass_sink_code'. 6458 6459 * Partial redundancy elimination 6460 6461 This pass eliminates partially redundant computations, as well as 6462 performing load motion. The pass is located in `tree-ssa-pre.c' 6463 and is described by `pass_pre'. 6464 6465 Just before partial redundancy elimination, if 6466 `-funsafe-math-optimizations' is on, GCC tries to convert 6467 divisions to multiplications by the reciprocal. The pass is 6468 located in `tree-ssa-math-opts.c' and is described by 6469 `pass_cse_reciprocal'. 6470 6471 * Full redundancy elimination 6472 6473 This is a simpler form of PRE that only eliminates redundancies 6474 that occur an all paths. It is located in `tree-ssa-pre.c' and 6475 described by `pass_fre'. 6476 6477 * Loop optimization 6478 6479 The main driver of the pass is placed in `tree-ssa-loop.c' and 6480 described by `pass_loop'. 6481 6482 The optimizations performed by this pass are: 6483 6484 Loop invariant motion. This pass moves only invariants that would 6485 be hard to handle on RTL level (function calls, operations that 6486 expand to nontrivial sequences of insns). With `-funswitch-loops' 6487 it also moves operands of conditions that are invariant out of the 6488 loop, so that we can use just trivial invariantness analysis in 6489 loop unswitching. The pass also includes store motion. The pass 6490 is implemented in `tree-ssa-loop-im.c'. 6491 6492 Canonical induction variable creation. This pass creates a simple 6493 counter for number of iterations of the loop and replaces the exit 6494 condition of the loop using it, in case when a complicated 6495 analysis is necessary to determine the number of iterations. 6496 Later optimizations then may determine the number easily. The 6497 pass is implemented in `tree-ssa-loop-ivcanon.c'. 6498 6499 Induction variable optimizations. This pass performs standard 6500 induction variable optimizations, including strength reduction, 6501 induction variable merging and induction variable elimination. 6502 The pass is implemented in `tree-ssa-loop-ivopts.c'. 6503 6504 Loop unswitching. This pass moves the conditional jumps that are 6505 invariant out of the loops. To achieve this, a duplicate of the 6506 loop is created for each possible outcome of conditional jump(s). 6507 The pass is implemented in `tree-ssa-loop-unswitch.c'. This pass 6508 should eventually replace the RTL level loop unswitching in 6509 `loop-unswitch.c', but currently the RTL level pass is not 6510 completely redundant yet due to deficiencies in tree level alias 6511 analysis. 6512 6513 The optimizations also use various utility functions contained in 6514 `tree-ssa-loop-manip.c', `cfgloop.c', `cfgloopanal.c' and 6515 `cfgloopmanip.c'. 6516 6517 Vectorization. This pass transforms loops to operate on vector 6518 types instead of scalar types. Data parallelism across loop 6519 iterations is exploited to group data elements from consecutive 6520 iterations into a vector and operate on them in parallel. 6521 Depending on available target support the loop is conceptually 6522 unrolled by a factor `VF' (vectorization factor), which is the 6523 number of elements operated upon in parallel in each iteration, 6524 and the `VF' copies of each scalar operation are fused to form a 6525 vector operation. Additional loop transformations such as peeling 6526 and versioning may take place to align the number of iterations, 6527 and to align the memory accesses in the loop. The pass is 6528 implemented in `tree-vectorizer.c' (the main driver), 6529 `tree-vect-loop.c' and `tree-vect-loop-manip.c' (loop specific 6530 parts and general loop utilities), `tree-vect-slp' (loop-aware SLP 6531 functionality), `tree-vect-stmts.c' and `tree-vect-data-refs.c'. 6532 Analysis of data references is in `tree-data-ref.c'. 6533 6534 SLP Vectorization. This pass performs vectorization of 6535 straight-line code. The pass is implemented in `tree-vectorizer.c' 6536 (the main driver), `tree-vect-slp.c', `tree-vect-stmts.c' and 6537 `tree-vect-data-refs.c'. 6538 6539 Autoparallelization. This pass splits the loop iteration space to 6540 run into several threads. The pass is implemented in 6541 `tree-parloops.c'. 6542 6543 Graphite is a loop transformation framework based on the polyhedral 6544 model. Graphite stands for Gimple Represented as Polyhedra. The 6545 internals of this infrastructure are documented in 6546 `http://gcc.gnu.org/wiki/Graphite'. The passes working on this 6547 representation are implemented in the various `graphite-*' files. 6548 6549 * Tree level if-conversion for vectorizer 6550 6551 This pass applies if-conversion to simple loops to help vectorizer. 6552 We identify if convertible loops, if-convert statements and merge 6553 basic blocks in one big block. The idea is to present loop in such 6554 form so that vectorizer can have one to one mapping between 6555 statements and available vector operations. This patch 6556 re-introduces COND_EXPR at GIMPLE level. This pass is located in 6557 `tree-if-conv.c' and is described by `pass_if_conversion'. 6558 6559 * Conditional constant propagation 6560 6561 This pass relaxes a lattice of values in order to identify those 6562 that must be constant even in the presence of conditional branches. 6563 The pass is located in `tree-ssa-ccp.c' and is described by 6564 `pass_ccp'. 6565 6566 A related pass that works on memory loads and stores, and not just 6567 register values, is located in `tree-ssa-ccp.c' and described by 6568 `pass_store_ccp'. 6569 6570 * Conditional copy propagation 6571 6572 This is similar to constant propagation but the lattice of values 6573 is the "copy-of" relation. It eliminates redundant copies from the 6574 code. The pass is located in `tree-ssa-copy.c' and described by 6575 `pass_copy_prop'. 6576 6577 A related pass that works on memory copies, and not just register 6578 copies, is located in `tree-ssa-copy.c' and described by 6579 `pass_store_copy_prop'. 6580 6581 * Value range propagation 6582 6583 This transformation is similar to constant propagation but instead 6584 of propagating single constant values, it propagates known value 6585 ranges. The implementation is based on Patterson's range 6586 propagation algorithm (Accurate Static Branch Prediction by Value 6587 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 6588 Patterson's algorithm, this implementation does not propagate 6589 branch probabilities nor it uses more than a single range per SSA 6590 name. This means that the current implementation cannot be used 6591 for branch prediction (though adapting it would not be difficult). 6592 The pass is located in `tree-vrp.c' and is described by `pass_vrp'. 6593 6594 * Folding built-in functions 6595 6596 This pass simplifies built-in functions, as applicable, with 6597 constant arguments or with inferable string lengths. It is 6598 located in `tree-ssa-ccp.c' and is described by 6599 `pass_fold_builtins'. 6600 6601 * Split critical edges 6602 6603 This pass identifies critical edges and inserts empty basic blocks 6604 such that the edge is no longer critical. The pass is located in 6605 `tree-cfg.c' and is described by `pass_split_crit_edges'. 6606 6607 * Control dependence dead code elimination 6608 6609 This pass is a stronger form of dead code elimination that can 6610 eliminate unnecessary control flow statements. It is located in 6611 `tree-ssa-dce.c' and is described by `pass_cd_dce'. 6612 6613 * Tail call elimination 6614 6615 This pass identifies function calls that may be rewritten into 6616 jumps. No code transformation is actually applied here, but the 6617 data and control flow problem is solved. The code transformation 6618 requires target support, and so is delayed until RTL. In the 6619 meantime `CALL_EXPR_TAILCALL' is set indicating the possibility. 6620 The pass is located in `tree-tailcall.c' and is described by 6621 `pass_tail_calls'. The RTL transformation is handled by 6622 `fixup_tail_calls' in `calls.c'. 6623 6624 * Warn for function return without value 6625 6626 For non-void functions, this pass locates return statements that do 6627 not specify a value and issues a warning. Such a statement may 6628 have been injected by falling off the end of the function. This 6629 pass is run last so that we have as much time as possible to prove 6630 that the statement is not reachable. It is located in 6631 `tree-cfg.c' and is described by `pass_warn_function_return'. 6632 6633 * Mudflap statement annotation 6634 6635 If mudflap is enabled, we rewrite some memory accesses with code to 6636 validate that the memory access is correct. In particular, 6637 expressions involving pointer dereferences (`INDIRECT_REF', 6638 `ARRAY_REF', etc.) are replaced by code that checks the selected 6639 address range against the mudflap runtime's database of valid 6640 regions. This check includes an inline lookup into a 6641 direct-mapped cache, based on shift/mask operations of the pointer 6642 value, with a fallback function call into the runtime. The pass 6643 is located in `tree-mudflap.c' and is described by 6644 `pass_mudflap_2'. 6645 6646 * Leave static single assignment form 6647 6648 This pass rewrites the function such that it is in normal form. At 6649 the same time, we eliminate as many single-use temporaries as 6650 possible, so the intermediate language is no longer GIMPLE, but 6651 GENERIC. The pass is located in `tree-outof-ssa.c' and is 6652 described by `pass_del_ssa'. 6653 6654 * Merge PHI nodes that feed into one another 6655 6656 This is part of the CFG cleanup passes. It attempts to join PHI 6657 nodes from a forwarder CFG block into another block with PHI 6658 nodes. The pass is located in `tree-cfgcleanup.c' and is 6659 described by `pass_merge_phi'. 6660 6661 * Return value optimization 6662 6663 If a function always returns the same local variable, and that 6664 local variable is an aggregate type, then the variable is replaced 6665 with the return value for the function (i.e., the function's 6666 DECL_RESULT). This is equivalent to the C++ named return value 6667 optimization applied to GIMPLE. The pass is located in 6668 `tree-nrv.c' and is described by `pass_nrv'. 6669 6670 * Return slot optimization 6671 6672 If a function returns a memory object and is called as `var = 6673 foo()', this pass tries to change the call so that the address of 6674 `var' is sent to the caller to avoid an extra memory copy. This 6675 pass is located in `tree-nrv.c' and is described by 6676 `pass_return_slot'. 6677 6678 * Optimize calls to `__builtin_object_size' 6679 6680 This is a propagation pass similar to CCP that tries to remove 6681 calls to `__builtin_object_size' when the size of the object can be 6682 computed at compile-time. This pass is located in 6683 `tree-object-size.c' and is described by `pass_object_sizes'. 6684 6685 * Loop invariant motion 6686 6687 This pass removes expensive loop-invariant computations out of 6688 loops. The pass is located in `tree-ssa-loop.c' and described by 6689 `pass_lim'. 6690 6691 * Loop nest optimizations 6692 6693 This is a family of loop transformations that works on loop nests. 6694 It includes loop interchange, scaling, skewing and reversal and 6695 they are all geared to the optimization of data locality in array 6696 traversals and the removal of dependencies that hamper 6697 optimizations such as loop parallelization and vectorization. The 6698 pass is located in `tree-loop-linear.c' and described by 6699 `pass_linear_transform'. 6700 6701 * Removal of empty loops 6702 6703 This pass removes loops with no code in them. The pass is located 6704 in `tree-ssa-loop-ivcanon.c' and described by `pass_empty_loop'. 6705 6706 * Unrolling of small loops 6707 6708 This pass completely unrolls loops with few iterations. The pass 6709 is located in `tree-ssa-loop-ivcanon.c' and described by 6710 `pass_complete_unroll'. 6711 6712 * Predictive commoning 6713 6714 This pass makes the code reuse the computations from the previous 6715 iterations of the loops, especially loads and stores to memory. 6716 It does so by storing the values of these computations to a bank 6717 of temporary variables that are rotated at the end of loop. To 6718 avoid the need for this rotation, the loop is then unrolled and 6719 the copies of the loop body are rewritten to use the appropriate 6720 version of the temporary variable. This pass is located in 6721 `tree-predcom.c' and described by `pass_predcom'. 6722 6723 * Array prefetching 6724 6725 This pass issues prefetch instructions for array references inside 6726 loops. The pass is located in `tree-ssa-loop-prefetch.c' and 6727 described by `pass_loop_prefetch'. 6728 6729 * Reassociation 6730 6731 This pass rewrites arithmetic expressions to enable optimizations 6732 that operate on them, like redundancy elimination and 6733 vectorization. The pass is located in `tree-ssa-reassoc.c' and 6734 described by `pass_reassoc'. 6735 6736 * Optimization of `stdarg' functions 6737 6738 This pass tries to avoid the saving of register arguments into the 6739 stack on entry to `stdarg' functions. If the function doesn't use 6740 any `va_start' macros, no registers need to be saved. If 6741 `va_start' macros are used, the `va_list' variables don't escape 6742 the function, it is only necessary to save registers that will be 6743 used in `va_arg' macros. For instance, if `va_arg' is only used 6744 with integral types in the function, floating point registers 6745 don't need to be saved. This pass is located in `tree-stdarg.c' 6746 and described by `pass_stdarg'. 6747 6748 6749 6750File: gccint.info, Node: RTL passes, Prev: Tree SSA passes, Up: Passes 6751 67529.5 RTL passes 6753============== 6754 6755The following briefly describes the RTL generation and optimization 6756passes that are run after the Tree optimization passes. 6757 6758 * RTL generation 6759 6760 The source files for RTL generation include `stmt.c', `calls.c', 6761 `expr.c', `explow.c', `expmed.c', `function.c', `optabs.c' and 6762 `emit-rtl.c'. Also, the file `insn-emit.c', generated from the 6763 machine description by the program `genemit', is used in this 6764 pass. The header file `expr.h' is used for communication within 6765 this pass. 6766 6767 The header files `insn-flags.h' and `insn-codes.h', generated from 6768 the machine description by the programs `genflags' and `gencodes', 6769 tell this pass which standard names are available for use and 6770 which patterns correspond to them. 6771 6772 * Generation of exception landing pads 6773 6774 This pass generates the glue that handles communication between the 6775 exception handling library routines and the exception handlers 6776 within the function. Entry points in the function that are 6777 invoked by the exception handling library are called "landing 6778 pads". The code for this pass is located in `except.c'. 6779 6780 * Control flow graph cleanup 6781 6782 This pass removes unreachable code, simplifies jumps to next, 6783 jumps to jump, jumps across jumps, etc. The pass is run multiple 6784 times. For historical reasons, it is occasionally referred to as 6785 the "jump optimization pass". The bulk of the code for this pass 6786 is in `cfgcleanup.c', and there are support routines in `cfgrtl.c' 6787 and `jump.c'. 6788 6789 * Forward propagation of single-def values 6790 6791 This pass attempts to remove redundant computation by substituting 6792 variables that come from a single definition, and seeing if the 6793 result can be simplified. It performs copy propagation and 6794 addressing mode selection. The pass is run twice, with values 6795 being propagated into loops only on the second run. The code is 6796 located in `fwprop.c'. 6797 6798 * Common subexpression elimination 6799 6800 This pass removes redundant computation within basic blocks, and 6801 optimizes addressing modes based on cost. The pass is run twice. 6802 The code for this pass is located in `cse.c'. 6803 6804 * Global common subexpression elimination 6805 6806 This pass performs two different types of GCSE depending on 6807 whether you are optimizing for size or not (LCM based GCSE tends 6808 to increase code size for a gain in speed, while Morel-Renvoise 6809 based GCSE does not). When optimizing for size, GCSE is done 6810 using Morel-Renvoise Partial Redundancy Elimination, with the 6811 exception that it does not try to move invariants out of 6812 loops--that is left to the loop optimization pass. If MR PRE 6813 GCSE is done, code hoisting (aka unification) is also done, as 6814 well as load motion. If you are optimizing for speed, LCM (lazy 6815 code motion) based GCSE is done. LCM is based on the work of 6816 Knoop, Ruthing, and Steffen. LCM based GCSE also does loop 6817 invariant code motion. We also perform load and store motion when 6818 optimizing for speed. Regardless of which type of GCSE is used, 6819 the GCSE pass also performs global constant and copy propagation. 6820 The source file for this pass is `gcse.c', and the LCM routines 6821 are in `lcm.c'. 6822 6823 * Loop optimization 6824 6825 This pass performs several loop related optimizations. The source 6826 files `cfgloopanal.c' and `cfgloopmanip.c' contain generic loop 6827 analysis and manipulation code. Initialization and finalization 6828 of loop structures is handled by `loop-init.c'. A loop invariant 6829 motion pass is implemented in `loop-invariant.c'. Basic block 6830 level optimizations--unrolling, peeling and unswitching loops-- 6831 are implemented in `loop-unswitch.c' and `loop-unroll.c'. 6832 Replacing of the exit condition of loops by special 6833 machine-dependent instructions is handled by `loop-doloop.c'. 6834 6835 * Jump bypassing 6836 6837 This pass is an aggressive form of GCSE that transforms the control 6838 flow graph of a function by propagating constants into conditional 6839 branch instructions. The source file for this pass is `gcse.c'. 6840 6841 * If conversion 6842 6843 This pass attempts to replace conditional branches and surrounding 6844 assignments with arithmetic, boolean value producing comparison 6845 instructions, and conditional move instructions. In the very last 6846 invocation after reload, it will generate predicated instructions 6847 when supported by the target. The code is located in `ifcvt.c'. 6848 6849 * Web construction 6850 6851 This pass splits independent uses of each pseudo-register. This 6852 can improve effect of the other transformation, such as CSE or 6853 register allocation. The code for this pass is located in `web.c'. 6854 6855 * Instruction combination 6856 6857 This pass attempts to combine groups of two or three instructions 6858 that are related by data flow into single instructions. It 6859 combines the RTL expressions for the instructions by substitution, 6860 simplifies the result using algebra, and then attempts to match 6861 the result against the machine description. The code is located 6862 in `combine.c'. 6863 6864 * Register movement 6865 6866 This pass looks for cases where matching constraints would force an 6867 instruction to need a reload, and this reload would be a 6868 register-to-register move. It then attempts to change the 6869 registers used by the instruction to avoid the move instruction. 6870 The code is located in `regmove.c'. 6871 6872 * Mode switching optimization 6873 6874 This pass looks for instructions that require the processor to be 6875 in a specific "mode" and minimizes the number of mode changes 6876 required to satisfy all users. What these modes are, and what 6877 they apply to are completely target-specific. The code for this 6878 pass is located in `mode-switching.c'. 6879 6880 * Modulo scheduling 6881 6882 This pass looks at innermost loops and reorders their instructions 6883 by overlapping different iterations. Modulo scheduling is 6884 performed immediately before instruction scheduling. The code for 6885 this pass is located in `modulo-sched.c'. 6886 6887 * Instruction scheduling 6888 6889 This pass looks for instructions whose output will not be 6890 available by the time that it is used in subsequent instructions. 6891 Memory loads and floating point instructions often have this 6892 behavior on RISC machines. It re-orders instructions within a 6893 basic block to try to separate the definition and use of items 6894 that otherwise would cause pipeline stalls. This pass is 6895 performed twice, before and after register allocation. The code 6896 for this pass is located in `haifa-sched.c', `sched-deps.c', 6897 `sched-ebb.c', `sched-rgn.c' and `sched-vis.c'. 6898 6899 * Register allocation 6900 6901 These passes make sure that all occurrences of pseudo registers are 6902 eliminated, either by allocating them to a hard register, replacing 6903 them by an equivalent expression (e.g. a constant) or by placing 6904 them on the stack. This is done in several subpasses: 6905 6906 * Register move optimizations. This pass makes some simple RTL 6907 code transformations which improve the subsequent register 6908 allocation. The source file is `regmove.c'. 6909 6910 * The integrated register allocator (IRA). It is called 6911 integrated because coalescing, register live range splitting, 6912 and hard register preferencing are done on-the-fly during 6913 coloring. It also has better integration with the reload 6914 pass. Pseudo-registers spilled by the allocator or the 6915 reload have still a chance to get hard-registers if the 6916 reload evicts some pseudo-registers from hard-registers. The 6917 allocator helps to choose better pseudos for spilling based 6918 on their live ranges and to coalesce stack slots allocated 6919 for the spilled pseudo-registers. IRA is a regional register 6920 allocator which is transformed into Chaitin-Briggs allocator 6921 if there is one region. By default, IRA chooses regions using 6922 register pressure but the user can force it to use one region 6923 or regions corresponding to all loops. 6924 6925 Source files of the allocator are `ira.c', `ira-build.c', 6926 `ira-costs.c', `ira-conflicts.c', `ira-color.c', 6927 `ira-emit.c', `ira-lives', plus header files `ira.h' and 6928 `ira-int.h' used for the communication between the allocator 6929 and the rest of the compiler and between the IRA files. 6930 6931 * Reloading. This pass renumbers pseudo registers with the 6932 hardware registers numbers they were allocated. Pseudo 6933 registers that did not get hard registers are replaced with 6934 stack slots. Then it finds instructions that are invalid 6935 because a value has failed to end up in a register, or has 6936 ended up in a register of the wrong kind. It fixes up these 6937 instructions by reloading the problematical values 6938 temporarily into registers. Additional instructions are 6939 generated to do the copying. 6940 6941 The reload pass also optionally eliminates the frame pointer 6942 and inserts instructions to save and restore call-clobbered 6943 registers around calls. 6944 6945 Source files are `reload.c' and `reload1.c', plus the header 6946 `reload.h' used for communication between them. 6947 6948 * Basic block reordering 6949 6950 This pass implements profile guided code positioning. If profile 6951 information is not available, various types of static analysis are 6952 performed to make the predictions normally coming from the profile 6953 feedback (IE execution frequency, branch probability, etc). It is 6954 implemented in the file `bb-reorder.c', and the various prediction 6955 routines are in `predict.c'. 6956 6957 * Variable tracking 6958 6959 This pass computes where the variables are stored at each position 6960 in code and generates notes describing the variable locations to 6961 RTL code. The location lists are then generated according to these 6962 notes to debug information if the debugging information format 6963 supports location lists. The code is located in `var-tracking.c'. 6964 6965 * Delayed branch scheduling 6966 6967 This optional pass attempts to find instructions that can go into 6968 the delay slots of other instructions, usually jumps and calls. 6969 The code for this pass is located in `reorg.c'. 6970 6971 * Branch shortening 6972 6973 On many RISC machines, branch instructions have a limited range. 6974 Thus, longer sequences of instructions must be used for long 6975 branches. In this pass, the compiler figures out what how far 6976 each instruction will be from each other instruction, and 6977 therefore whether the usual instructions, or the longer sequences, 6978 must be used for each branch. The code for this pass is located 6979 in `final.c'. 6980 6981 * Register-to-stack conversion 6982 6983 Conversion from usage of some hard registers to usage of a register 6984 stack may be done at this point. Currently, this is supported only 6985 for the floating-point registers of the Intel 80387 coprocessor. 6986 The code for this pass is located in `reg-stack.c'. 6987 6988 * Final 6989 6990 This pass outputs the assembler code for the function. The source 6991 files are `final.c' plus `insn-output.c'; the latter is generated 6992 automatically from the machine description by the tool `genoutput'. 6993 The header file `conditions.h' is used for communication between 6994 these files. If mudflap is enabled, the queue of deferred 6995 declarations and any addressed constants (e.g., string literals) 6996 is processed by `mudflap_finish_file' into a synthetic constructor 6997 function containing calls into the mudflap runtime. 6998 6999 * Debugging information output 7000 7001 This is run after final because it must output the stack slot 7002 offsets for pseudo registers that did not get hard registers. 7003 Source files are `dbxout.c' for DBX symbol table format, 7004 `sdbout.c' for SDB symbol table format, `dwarfout.c' for DWARF 7005 symbol table format, files `dwarf2out.c' and `dwarf2asm.c' for 7006 DWARF2 symbol table format, and `vmsdbgout.c' for VMS debug symbol 7007 table format. 7008 7009 7010 7011File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top 7012 701310 RTL Representation 7014********************* 7015 7016The last part of the compiler work is done on a low-level intermediate 7017representation called Register Transfer Language. In this language, the 7018instructions to be output are described, pretty much one by one, in an 7019algebraic form that describes what the instruction does. 7020 7021 RTL is inspired by Lisp lists. It has both an internal form, made up 7022of structures that point at other structures, and a textual form that 7023is used in the machine description and in printed debugging dumps. The 7024textual form uses nested parentheses to indicate the pointers in the 7025internal form. 7026 7027* Menu: 7028 7029* RTL Objects:: Expressions vs vectors vs strings vs integers. 7030* RTL Classes:: Categories of RTL expression objects, and their structure. 7031* Accessors:: Macros to access expression operands or vector elts. 7032* Special Accessors:: Macros to access specific annotations on RTL. 7033* Flags:: Other flags in an RTL expression. 7034* Machine Modes:: Describing the size and format of a datum. 7035* Constants:: Expressions with constant values. 7036* Regs and Memory:: Expressions representing register contents or memory. 7037* Arithmetic:: Expressions representing arithmetic on other expressions. 7038* Comparisons:: Expressions representing comparison of expressions. 7039* Bit-Fields:: Expressions representing bit-fields in memory or reg. 7040* Vector Operations:: Expressions involving vector datatypes. 7041* Conversions:: Extending, truncating, floating or fixing. 7042* RTL Declarations:: Declaring volatility, constancy, etc. 7043* Side Effects:: Expressions for storing in registers, etc. 7044* Incdec:: Embedded side-effects for autoincrement addressing. 7045* Assembler:: Representing `asm' with operands. 7046* Debug Information:: Expressions representing debugging information. 7047* Insns:: Expression types for entire insns. 7048* Calls:: RTL representation of function call insns. 7049* Sharing:: Some expressions are unique; others *must* be copied. 7050* Reading RTL:: Reading textual RTL from a file. 7051 7052 7053File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 7054 705510.1 RTL Object Types 7056===================== 7057 7058RTL uses five kinds of objects: expressions, integers, wide integers, 7059strings and vectors. Expressions are the most important ones. An RTL 7060expression ("RTX", for short) is a C structure, but it is usually 7061referred to with a pointer; a type that is given the typedef name `rtx'. 7062 7063 An integer is simply an `int'; their written form uses decimal digits. 7064A wide integer is an integral object whose type is `HOST_WIDE_INT'; 7065their written form uses decimal digits. 7066 7067 A string is a sequence of characters. In core it is represented as a 7068`char *' in usual C fashion, and it is written in C syntax as well. 7069However, strings in RTL may never be null. If you write an empty 7070string in a machine description, it is represented in core as a null 7071pointer rather than as a pointer to a null character. In certain 7072contexts, these null pointers instead of strings are valid. Within RTL 7073code, strings are most commonly found inside `symbol_ref' expressions, 7074but they appear in other contexts in the RTL expressions that make up 7075machine descriptions. 7076 7077 In a machine description, strings are normally written with double 7078quotes, as you would in C. However, strings in machine descriptions may 7079extend over many lines, which is invalid C, and adjacent string 7080constants are not concatenated as they are in C. Any string constant 7081may be surrounded with a single set of parentheses. Sometimes this 7082makes the machine description easier to read. 7083 7084 There is also a special syntax for strings, which can be useful when C 7085code is embedded in a machine description. Wherever a string can 7086appear, it is also valid to write a C-style brace block. The entire 7087brace block, including the outermost pair of braces, is considered to be 7088the string constant. Double quote characters inside the braces are not 7089special. Therefore, if you write string constants in the C code, you 7090need not escape each quote character with a backslash. 7091 7092 A vector contains an arbitrary number of pointers to expressions. The 7093number of elements in the vector is explicitly present in the vector. 7094The written form of a vector consists of square brackets (`[...]') 7095surrounding the elements, in sequence and with whitespace separating 7096them. Vectors of length zero are not created; null pointers are used 7097instead. 7098 7099 Expressions are classified by "expression codes" (also called RTX 7100codes). The expression code is a name defined in `rtl.def', which is 7101also (in uppercase) a C enumeration constant. The possible expression 7102codes and their meanings are machine-independent. The code of an RTX 7103can be extracted with the macro `GET_CODE (X)' and altered with 7104`PUT_CODE (X, NEWCODE)'. 7105 7106 The expression code determines how many operands the expression 7107contains, and what kinds of objects they are. In RTL, unlike Lisp, you 7108cannot tell by looking at an operand what kind of object it is. 7109Instead, you must know from its context--from the expression code of 7110the containing expression. For example, in an expression of code 7111`subreg', the first operand is to be regarded as an expression and the 7112second operand as an integer. In an expression of code `plus', there 7113are two operands, both of which are to be regarded as expressions. In 7114a `symbol_ref' expression, there is one operand, which is to be 7115regarded as a string. 7116 7117 Expressions are written as parentheses containing the name of the 7118expression type, its flags and machine mode if any, and then the 7119operands of the expression (separated by spaces). 7120 7121 Expression code names in the `md' file are written in lowercase, but 7122when they appear in C code they are written in uppercase. In this 7123manual, they are shown as follows: `const_int'. 7124 7125 In a few contexts a null pointer is valid where an expression is 7126normally wanted. The written form of this is `(nil)'. 7127 7128 7129File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 7130 713110.2 RTL Classes and Formats 7132============================ 7133 7134The various expression codes are divided into several "classes", which 7135are represented by single characters. You can determine the class of 7136an RTX code with the macro `GET_RTX_CLASS (CODE)'. Currently, 7137`rtl.def' defines these classes: 7138 7139`RTX_OBJ' 7140 An RTX code that represents an actual object, such as a register 7141 (`REG') or a memory location (`MEM', `SYMBOL_REF'). `LO_SUM') is 7142 also included; instead, `SUBREG' and `STRICT_LOW_PART' are not in 7143 this class, but in class `x'. 7144 7145`RTX_CONST_OBJ' 7146 An RTX code that represents a constant object. `HIGH' is also 7147 included in this class. 7148 7149`RTX_COMPARE' 7150 An RTX code for a non-symmetric comparison, such as `GEU' or `LT'. 7151 7152`RTX_COMM_COMPARE' 7153 An RTX code for a symmetric (commutative) comparison, such as `EQ' 7154 or `ORDERED'. 7155 7156`RTX_UNARY' 7157 An RTX code for a unary arithmetic operation, such as `NEG', 7158 `NOT', or `ABS'. This category also includes value extension 7159 (sign or zero) and conversions between integer and floating point. 7160 7161`RTX_COMM_ARITH' 7162 An RTX code for a commutative binary operation, such as `PLUS' or 7163 `AND'. `NE' and `EQ' are comparisons, so they have class `<'. 7164 7165`RTX_BIN_ARITH' 7166 An RTX code for a non-commutative binary operation, such as 7167 `MINUS', `DIV', or `ASHIFTRT'. 7168 7169`RTX_BITFIELD_OPS' 7170 An RTX code for a bit-field operation. Currently only 7171 `ZERO_EXTRACT' and `SIGN_EXTRACT'. These have three inputs and 7172 are lvalues (so they can be used for insertion as well). *Note 7173 Bit-Fields::. 7174 7175`RTX_TERNARY' 7176 An RTX code for other three input operations. Currently only 7177 `IF_THEN_ELSE' and `VEC_MERGE'. 7178 7179`RTX_INSN' 7180 An RTX code for an entire instruction: `INSN', `JUMP_INSN', and 7181 `CALL_INSN'. *Note Insns::. 7182 7183`RTX_MATCH' 7184 An RTX code for something that matches in insns, such as 7185 `MATCH_DUP'. These only occur in machine descriptions. 7186 7187`RTX_AUTOINC' 7188 An RTX code for an auto-increment addressing mode, such as 7189 `POST_INC'. 7190 7191`RTX_EXTRA' 7192 All other RTX codes. This category includes the remaining codes 7193 used only in machine descriptions (`DEFINE_*', etc.). It also 7194 includes all the codes describing side effects (`SET', `USE', 7195 `CLOBBER', etc.) and the non-insns that may appear on an insn 7196 chain, such as `NOTE', `BARRIER', and `CODE_LABEL'. `SUBREG' is 7197 also part of this class. 7198 7199 For each expression code, `rtl.def' specifies the number of contained 7200objects and their kinds using a sequence of characters called the 7201"format" of the expression code. For example, the format of `subreg' 7202is `ei'. 7203 7204 These are the most commonly used format characters: 7205 7206`e' 7207 An expression (actually a pointer to an expression). 7208 7209`i' 7210 An integer. 7211 7212`w' 7213 A wide integer. 7214 7215`s' 7216 A string. 7217 7218`E' 7219 A vector of expressions. 7220 7221 A few other format characters are used occasionally: 7222 7223`u' 7224 `u' is equivalent to `e' except that it is printed differently in 7225 debugging dumps. It is used for pointers to insns. 7226 7227`n' 7228 `n' is equivalent to `i' except that it is printed differently in 7229 debugging dumps. It is used for the line number or code number of 7230 a `note' insn. 7231 7232`S' 7233 `S' indicates a string which is optional. In the RTL objects in 7234 core, `S' is equivalent to `s', but when the object is read, from 7235 an `md' file, the string value of this operand may be omitted. An 7236 omitted string is taken to be the null string. 7237 7238`V' 7239 `V' indicates a vector which is optional. In the RTL objects in 7240 core, `V' is equivalent to `E', but when the object is read from 7241 an `md' file, the vector value of this operand may be omitted. An 7242 omitted vector is effectively the same as a vector of no elements. 7243 7244`B' 7245 `B' indicates a pointer to basic block structure. 7246 7247`0' 7248 `0' means a slot whose contents do not fit any normal category. 7249 `0' slots are not printed at all in dumps, and are often used in 7250 special ways by small parts of the compiler. 7251 7252 There are macros to get the number of operands and the format of an 7253expression code: 7254 7255`GET_RTX_LENGTH (CODE)' 7256 Number of operands of an RTX of code CODE. 7257 7258`GET_RTX_FORMAT (CODE)' 7259 The format of an RTX of code CODE, as a C string. 7260 7261 Some classes of RTX codes always have the same format. For example, it 7262is safe to assume that all comparison operations have format `ee'. 7263 7264`1' 7265 All codes of this class have format `e'. 7266 7267`<' 7268`c' 7269`2' 7270 All codes of these classes have format `ee'. 7271 7272`b' 7273`3' 7274 All codes of these classes have format `eee'. 7275 7276`i' 7277 All codes of this class have formats that begin with `iuueiee'. 7278 *Note Insns::. Note that not all RTL objects linked onto an insn 7279 chain are of class `i'. 7280 7281`o' 7282`m' 7283`x' 7284 You can make no assumptions about the format of these codes. 7285 7286 7287File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 7288 728910.3 Access to Operands 7290======================= 7291 7292Operands of expressions are accessed using the macros `XEXP', `XINT', 7293`XWINT' and `XSTR'. Each of these macros takes two arguments: an 7294expression-pointer (RTX) and an operand number (counting from zero). 7295Thus, 7296 7297 XEXP (X, 2) 7298 7299accesses operand 2 of expression X, as an expression. 7300 7301 XINT (X, 2) 7302 7303accesses the same operand as an integer. `XSTR', used in the same 7304fashion, would access it as a string. 7305 7306 Any operand can be accessed as an integer, as an expression or as a 7307string. You must choose the correct method of access for the kind of 7308value actually stored in the operand. You would do this based on the 7309expression code of the containing expression. That is also how you 7310would know how many operands there are. 7311 7312 For example, if X is a `subreg' expression, you know that it has two 7313operands which can be correctly accessed as `XEXP (X, 0)' and `XINT (X, 73141)'. If you did `XINT (X, 0)', you would get the address of the 7315expression operand but cast as an integer; that might occasionally be 7316useful, but it would be cleaner to write `(int) XEXP (X, 0)'. `XEXP 7317(X, 1)' would also compile without error, and would return the second, 7318integer operand cast as an expression pointer, which would probably 7319result in a crash when accessed. Nothing stops you from writing `XEXP 7320(X, 28)' either, but this will access memory past the end of the 7321expression with unpredictable results. 7322 7323 Access to operands which are vectors is more complicated. You can use 7324the macro `XVEC' to get the vector-pointer itself, or the macros 7325`XVECEXP' and `XVECLEN' to access the elements and length of a vector. 7326 7327`XVEC (EXP, IDX)' 7328 Access the vector-pointer which is operand number IDX in EXP. 7329 7330`XVECLEN (EXP, IDX)' 7331 Access the length (number of elements) in the vector which is in 7332 operand number IDX in EXP. This value is an `int'. 7333 7334`XVECEXP (EXP, IDX, ELTNUM)' 7335 Access element number ELTNUM in the vector which is in operand 7336 number IDX in EXP. This value is an RTX. 7337 7338 It is up to you to make sure that ELTNUM is not negative and is 7339 less than `XVECLEN (EXP, IDX)'. 7340 7341 All the macros defined in this section expand into lvalues and 7342therefore can be used to assign the operands, lengths and vector 7343elements as well as to access them. 7344 7345 7346File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 7347 734810.4 Access to Special Operands 7349=============================== 7350 7351Some RTL nodes have special annotations associated with them. 7352 7353`MEM' 7354 7355 `MEM_ALIAS_SET (X)' 7356 If 0, X is not in any alias set, and may alias anything. 7357 Otherwise, X can only alias `MEM's in a conflicting alias 7358 set. This value is set in a language-dependent manner in the 7359 front-end, and should not be altered in the back-end. In 7360 some front-ends, these numbers may correspond in some way to 7361 types, or other language-level entities, but they need not, 7362 and the back-end makes no such assumptions. These set 7363 numbers are tested with `alias_sets_conflict_p'. 7364 7365 `MEM_EXPR (X)' 7366 If this register is known to hold the value of some user-level 7367 declaration, this is that tree node. It may also be a 7368 `COMPONENT_REF', in which case this is some field reference, 7369 and `TREE_OPERAND (X, 0)' contains the declaration, or 7370 another `COMPONENT_REF', or null if there is no compile-time 7371 object associated with the reference. 7372 7373 `MEM_OFFSET (X)' 7374 The offset from the start of `MEM_EXPR' as a `CONST_INT' rtx. 7375 7376 `MEM_SIZE (X)' 7377 The size in bytes of the memory reference as a `CONST_INT' 7378 rtx. This is mostly relevant for `BLKmode' references as 7379 otherwise the size is implied by the mode. 7380 7381 `MEM_ALIGN (X)' 7382 The known alignment in bits of the memory reference. 7383 7384 `MEM_ADDR_SPACE (X)' 7385 The address space of the memory reference. This will 7386 commonly be zero for the generic address space. 7387 7388`REG' 7389 7390 `ORIGINAL_REGNO (X)' 7391 This field holds the number the register "originally" had; 7392 for a pseudo register turned into a hard reg this will hold 7393 the old pseudo register number. 7394 7395 `REG_EXPR (X)' 7396 If this register is known to hold the value of some user-level 7397 declaration, this is that tree node. 7398 7399 `REG_OFFSET (X)' 7400 If this register is known to hold the value of some user-level 7401 declaration, this is the offset into that logical storage. 7402 7403`SYMBOL_REF' 7404 7405 `SYMBOL_REF_DECL (X)' 7406 If the `symbol_ref' X was created for a `VAR_DECL' or a 7407 `FUNCTION_DECL', that tree is recorded here. If this value is 7408 null, then X was created by back end code generation routines, 7409 and there is no associated front end symbol table entry. 7410 7411 `SYMBOL_REF_DECL' may also point to a tree of class `'c'', 7412 that is, some sort of constant. In this case, the 7413 `symbol_ref' is an entry in the per-file constant pool; 7414 again, there is no associated front end symbol table entry. 7415 7416 `SYMBOL_REF_CONSTANT (X)' 7417 If `CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 7418 pool entry for X. It is null otherwise. 7419 7420 `SYMBOL_REF_DATA (X)' 7421 A field of opaque type used to store `SYMBOL_REF_DECL' or 7422 `SYMBOL_REF_CONSTANT'. 7423 7424 `SYMBOL_REF_FLAGS (X)' 7425 In a `symbol_ref', this is used to communicate various 7426 predicates about the symbol. Some of these are common enough 7427 to be computed by common code, some are specific to the 7428 target. The common bits are: 7429 7430 `SYMBOL_FLAG_FUNCTION' 7431 Set if the symbol refers to a function. 7432 7433 `SYMBOL_FLAG_LOCAL' 7434 Set if the symbol is local to this "module". See 7435 `TARGET_BINDS_LOCAL_P'. 7436 7437 `SYMBOL_FLAG_EXTERNAL' 7438 Set if this symbol is not defined in this translation 7439 unit. Note that this is not the inverse of 7440 `SYMBOL_FLAG_LOCAL'. 7441 7442 `SYMBOL_FLAG_SMALL' 7443 Set if the symbol is located in the small data section. 7444 See `TARGET_IN_SMALL_DATA_P'. 7445 7446 `SYMBOL_REF_TLS_MODEL (X)' 7447 This is a multi-bit field accessor that returns the 7448 `tls_model' to be used for a thread-local storage 7449 symbol. It returns zero for non-thread-local symbols. 7450 7451 `SYMBOL_FLAG_HAS_BLOCK_INFO' 7452 Set if the symbol has `SYMBOL_REF_BLOCK' and 7453 `SYMBOL_REF_BLOCK_OFFSET' fields. 7454 7455 `SYMBOL_FLAG_ANCHOR' 7456 Set if the symbol is used as a section anchor. "Section 7457 anchors" are symbols that have a known position within 7458 an `object_block' and that can be used to access nearby 7459 members of that block. They are used to implement 7460 `-fsection-anchors'. 7461 7462 If this flag is set, then `SYMBOL_FLAG_HAS_BLOCK_INFO' 7463 will be too. 7464 7465 Bits beginning with `SYMBOL_FLAG_MACH_DEP' are available for 7466 the target's use. 7467 7468`SYMBOL_REF_BLOCK (X)' 7469 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the `object_block' 7470 structure to which the symbol belongs, or `NULL' if it has not 7471 been assigned a block. 7472 7473`SYMBOL_REF_BLOCK_OFFSET (X)' 7474 If `SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 7475 the first object in `SYMBOL_REF_BLOCK (X)'. The value is negative 7476 if X has not yet been assigned to a block, or it has not been 7477 given an offset within that block. 7478 7479 7480File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 7481 748210.5 Flags in an RTL Expression 7483=============================== 7484 7485RTL expressions contain several flags (one-bit bit-fields) that are 7486used in certain types of expression. Most often they are accessed with 7487the following macros, which expand into lvalues. 7488 7489`CONSTANT_POOL_ADDRESS_P (X)' 7490 Nonzero in a `symbol_ref' if it refers to part of the current 7491 function's constant pool. For most targets these addresses are in 7492 a `.rodata' section entirely separate from the function, but for 7493 some targets the addresses are close to the beginning of the 7494 function. In either case GCC assumes these addresses can be 7495 addressed directly, perhaps with the help of base registers. 7496 Stored in the `unchanging' field and printed as `/u'. 7497 7498`RTL_CONST_CALL_P (X)' 7499 In a `call_insn' indicates that the insn represents a call to a 7500 const function. Stored in the `unchanging' field and printed as 7501 `/u'. 7502 7503`RTL_PURE_CALL_P (X)' 7504 In a `call_insn' indicates that the insn represents a call to a 7505 pure function. Stored in the `return_val' field and printed as 7506 `/i'. 7507 7508`RTL_CONST_OR_PURE_CALL_P (X)' 7509 In a `call_insn', true if `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' 7510 is true. 7511 7512`RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 7513 In a `call_insn' indicates that the insn represents a possibly 7514 infinite looping call to a const or pure function. Stored in the 7515 `call' field and printed as `/c'. Only true if one of 7516 `RTL_CONST_CALL_P' or `RTL_PURE_CALL_P' is true. 7517 7518`INSN_ANNULLED_BRANCH_P (X)' 7519 In a `jump_insn', `call_insn', or `insn' indicates that the branch 7520 is an annulling one. See the discussion under `sequence' below. 7521 Stored in the `unchanging' field and printed as `/u'. 7522 7523`INSN_DELETED_P (X)' 7524 In an `insn', `call_insn', `jump_insn', `code_label', `barrier', 7525 or `note', nonzero if the insn has been deleted. Stored in the 7526 `volatil' field and printed as `/v'. 7527 7528`INSN_FROM_TARGET_P (X)' 7529 In an `insn' or `jump_insn' or `call_insn' in a delay slot of a 7530 branch, indicates that the insn is from the target of the branch. 7531 If the branch insn has `INSN_ANNULLED_BRANCH_P' set, this insn 7532 will only be executed if the branch is taken. For annulled 7533 branches with `INSN_FROM_TARGET_P' clear, the insn will be 7534 executed only if the branch is not taken. When 7535 `INSN_ANNULLED_BRANCH_P' is not set, this insn will always be 7536 executed. Stored in the `in_struct' field and printed as `/s'. 7537 7538`LABEL_PRESERVE_P (X)' 7539 In a `code_label' or `note', indicates that the label is 7540 referenced by code or data not visible to the RTL of a given 7541 function. Labels referenced by a non-local goto will have this 7542 bit set. Stored in the `in_struct' field and printed as `/s'. 7543 7544`LABEL_REF_NONLOCAL_P (X)' 7545 In `label_ref' and `reg_label' expressions, nonzero if this is a 7546 reference to a non-local label. Stored in the `volatil' field and 7547 printed as `/v'. 7548 7549`MEM_IN_STRUCT_P (X)' 7550 In `mem' expressions, nonzero for reference to an entire structure, 7551 union or array, or to a component of one. Zero for references to a 7552 scalar variable or through a pointer to a scalar. If both this 7553 flag and `MEM_SCALAR_P' are clear, then we don't know whether this 7554 `mem' is in a structure or not. Both flags should never be 7555 simultaneously set. Stored in the `in_struct' field and printed 7556 as `/s'. 7557 7558`MEM_KEEP_ALIAS_SET_P (X)' 7559 In `mem' expressions, 1 if we should keep the alias set for this 7560 mem unchanged when we access a component. Set to 1, for example, 7561 when we are already in a non-addressable component of an aggregate. 7562 Stored in the `jump' field and printed as `/j'. 7563 7564`MEM_SCALAR_P (X)' 7565 In `mem' expressions, nonzero for reference to a scalar known not 7566 to be a member of a structure, union, or array. Zero for such 7567 references and for indirections through pointers, even pointers 7568 pointing to scalar types. If both this flag and `MEM_IN_STRUCT_P' 7569 are clear, then we don't know whether this `mem' is in a structure 7570 or not. Both flags should never be simultaneously set. Stored in 7571 the `return_val' field and printed as `/i'. 7572 7573`MEM_VOLATILE_P (X)' 7574 In `mem', `asm_operands', and `asm_input' expressions, nonzero for 7575 volatile memory references. Stored in the `volatil' field and 7576 printed as `/v'. 7577 7578`MEM_NOTRAP_P (X)' 7579 In `mem', nonzero for memory references that will not trap. 7580 Stored in the `call' field and printed as `/c'. 7581 7582`MEM_POINTER (X)' 7583 Nonzero in a `mem' if the memory reference holds a pointer. 7584 Stored in the `frame_related' field and printed as `/f'. 7585 7586`REG_FUNCTION_VALUE_P (X)' 7587 Nonzero in a `reg' if it is the place in which this function's 7588 value is going to be returned. (This happens only in a hard 7589 register.) Stored in the `return_val' field and printed as `/i'. 7590 7591`REG_POINTER (X)' 7592 Nonzero in a `reg' if the register holds a pointer. Stored in the 7593 `frame_related' field and printed as `/f'. 7594 7595`REG_USERVAR_P (X)' 7596 In a `reg', nonzero if it corresponds to a variable present in the 7597 user's source code. Zero for temporaries generated internally by 7598 the compiler. Stored in the `volatil' field and printed as `/v'. 7599 7600 The same hard register may be used also for collecting the values 7601 of functions called by this one, but `REG_FUNCTION_VALUE_P' is zero 7602 in this kind of use. 7603 7604`RTX_FRAME_RELATED_P (X)' 7605 Nonzero in an `insn', `call_insn', `jump_insn', `barrier', or 7606 `set' which is part of a function prologue and sets the stack 7607 pointer, sets the frame pointer, or saves a register. This flag 7608 should also be set on an instruction that sets up a temporary 7609 register to use in place of the frame pointer. Stored in the 7610 `frame_related' field and printed as `/f'. 7611 7612 In particular, on RISC targets where there are limits on the sizes 7613 of immediate constants, it is sometimes impossible to reach the 7614 register save area directly from the stack pointer. In that case, 7615 a temporary register is used that is near enough to the register 7616 save area, and the Canonical Frame Address, i.e., DWARF2's logical 7617 frame pointer, register must (temporarily) be changed to be this 7618 temporary register. So, the instruction that sets this temporary 7619 register must be marked as `RTX_FRAME_RELATED_P'. 7620 7621 If the marked instruction is overly complex (defined in terms of 7622 what `dwarf2out_frame_debug_expr' can handle), you will also have 7623 to create a `REG_FRAME_RELATED_EXPR' note and attach it to the 7624 instruction. This note should contain a simple expression of the 7625 computation performed by this instruction, i.e., one that 7626 `dwarf2out_frame_debug_expr' can handle. 7627 7628 This flag is required for exception handling support on targets 7629 with RTL prologues. 7630 7631`MEM_READONLY_P (X)' 7632 Nonzero in a `mem', if the memory is statically allocated and 7633 read-only. 7634 7635 Read-only in this context means never modified during the lifetime 7636 of the program, not necessarily in ROM or in write-disabled pages. 7637 A common example of the later is a shared library's global offset 7638 table. This table is initialized by the runtime loader, so the 7639 memory is technically writable, but after control is transfered 7640 from the runtime loader to the application, this memory will never 7641 be subsequently modified. 7642 7643 Stored in the `unchanging' field and printed as `/u'. 7644 7645`SCHED_GROUP_P (X)' 7646 During instruction scheduling, in an `insn', `call_insn' or 7647 `jump_insn', indicates that the previous insn must be scheduled 7648 together with this insn. This is used to ensure that certain 7649 groups of instructions will not be split up by the instruction 7650 scheduling pass, for example, `use' insns before a `call_insn' may 7651 not be separated from the `call_insn'. Stored in the `in_struct' 7652 field and printed as `/s'. 7653 7654`SET_IS_RETURN_P (X)' 7655 For a `set', nonzero if it is for a return. Stored in the `jump' 7656 field and printed as `/j'. 7657 7658`SIBLING_CALL_P (X)' 7659 For a `call_insn', nonzero if the insn is a sibling call. Stored 7660 in the `jump' field and printed as `/j'. 7661 7662`STRING_POOL_ADDRESS_P (X)' 7663 For a `symbol_ref' expression, nonzero if it addresses this 7664 function's string constant pool. Stored in the `frame_related' 7665 field and printed as `/f'. 7666 7667`SUBREG_PROMOTED_UNSIGNED_P (X)' 7668 Returns a value greater then zero for a `subreg' that has 7669 `SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 7670 kept zero-extended, zero if it is kept sign-extended, and less 7671 then zero if it is extended some other way via the `ptr_extend' 7672 instruction. Stored in the `unchanging' field and `volatil' 7673 field, printed as `/u' and `/v'. This macro may only be used to 7674 get the value it may not be used to change the value. Use 7675 `SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 7676 7677`SUBREG_PROMOTED_UNSIGNED_SET (X)' 7678 Set the `unchanging' and `volatil' fields in a `subreg' to reflect 7679 zero, sign, or other extension. If `volatil' is zero, then 7680 `unchanging' as nonzero means zero extension and as zero means 7681 sign extension. If `volatil' is nonzero then some other type of 7682 extension was done via the `ptr_extend' instruction. 7683 7684`SUBREG_PROMOTED_VAR_P (X)' 7685 Nonzero in a `subreg' if it was made when accessing an object that 7686 was promoted to a wider mode in accord with the `PROMOTED_MODE' 7687 machine description macro (*note Storage Layout::). In this case, 7688 the mode of the `subreg' is the declared mode of the object and 7689 the mode of `SUBREG_REG' is the mode of the register that holds 7690 the object. Promoted variables are always either sign- or 7691 zero-extended to the wider mode on every assignment. Stored in 7692 the `in_struct' field and printed as `/s'. 7693 7694`SYMBOL_REF_USED (X)' 7695 In a `symbol_ref', indicates that X has been used. This is 7696 normally only used to ensure that X is only declared external 7697 once. Stored in the `used' field. 7698 7699`SYMBOL_REF_WEAK (X)' 7700 In a `symbol_ref', indicates that X has been declared weak. 7701 Stored in the `return_val' field and printed as `/i'. 7702 7703`SYMBOL_REF_FLAG (X)' 7704 In a `symbol_ref', this is used as a flag for machine-specific 7705 purposes. Stored in the `volatil' field and printed as `/v'. 7706 7707 Most uses of `SYMBOL_REF_FLAG' are historic and may be subsumed by 7708 `SYMBOL_REF_FLAGS'. Certainly use of `SYMBOL_REF_FLAGS' is 7709 mandatory if the target requires more than one bit of storage. 7710 7711`PREFETCH_SCHEDULE_BARRIER_P (X)' 7712 In a `prefetch', indicates that the prefetch is a scheduling 7713 barrier. No other INSNs will be moved over it. Stored in the 7714 `volatil' field and printed as `/v'. 7715 7716 These are the fields to which the above macros refer: 7717 7718`call' 7719 In a `mem', 1 means that the memory reference will not trap. 7720 7721 In a `call', 1 means that this pure or const call may possibly 7722 infinite loop. 7723 7724 In an RTL dump, this flag is represented as `/c'. 7725 7726`frame_related' 7727 In an `insn' or `set' expression, 1 means that it is part of a 7728 function prologue and sets the stack pointer, sets the frame 7729 pointer, saves a register, or sets up a temporary register to use 7730 in place of the frame pointer. 7731 7732 In `reg' expressions, 1 means that the register holds a pointer. 7733 7734 In `mem' expressions, 1 means that the memory reference holds a 7735 pointer. 7736 7737 In `symbol_ref' expressions, 1 means that the reference addresses 7738 this function's string constant pool. 7739 7740 In an RTL dump, this flag is represented as `/f'. 7741 7742`in_struct' 7743 In `mem' expressions, it is 1 if the memory datum referred to is 7744 all or part of a structure or array; 0 if it is (or might be) a 7745 scalar variable. A reference through a C pointer has 0 because 7746 the pointer might point to a scalar variable. This information 7747 allows the compiler to determine something about possible cases of 7748 aliasing. 7749 7750 In `reg' expressions, it is 1 if the register has its entire life 7751 contained within the test expression of some loop. 7752 7753 In `subreg' expressions, 1 means that the `subreg' is accessing an 7754 object that has had its mode promoted from a wider mode. 7755 7756 In `label_ref' expressions, 1 means that the referenced label is 7757 outside the innermost loop containing the insn in which the 7758 `label_ref' was found. 7759 7760 In `code_label' expressions, it is 1 if the label may never be 7761 deleted. This is used for labels which are the target of 7762 non-local gotos. Such a label that would have been deleted is 7763 replaced with a `note' of type `NOTE_INSN_DELETED_LABEL'. 7764 7765 In an `insn' during dead-code elimination, 1 means that the insn is 7766 dead code. 7767 7768 In an `insn' or `jump_insn' during reorg for an insn in the delay 7769 slot of a branch, 1 means that this insn is from the target of the 7770 branch. 7771 7772 In an `insn' during instruction scheduling, 1 means that this insn 7773 must be scheduled as part of a group together with the previous 7774 insn. 7775 7776 In an RTL dump, this flag is represented as `/s'. 7777 7778`return_val' 7779 In `reg' expressions, 1 means the register contains the value to 7780 be returned by the current function. On machines that pass 7781 parameters in registers, the same register number may be used for 7782 parameters as well, but this flag is not set on such uses. 7783 7784 In `mem' expressions, 1 means the memory reference is to a scalar 7785 known not to be a member of a structure, union, or array. 7786 7787 In `symbol_ref' expressions, 1 means the referenced symbol is weak. 7788 7789 In `call' expressions, 1 means the call is pure. 7790 7791 In an RTL dump, this flag is represented as `/i'. 7792 7793`jump' 7794 In a `mem' expression, 1 means we should keep the alias set for 7795 this mem unchanged when we access a component. 7796 7797 In a `set', 1 means it is for a return. 7798 7799 In a `call_insn', 1 means it is a sibling call. 7800 7801 In an RTL dump, this flag is represented as `/j'. 7802 7803`unchanging' 7804 In `reg' and `mem' expressions, 1 means that the value of the 7805 expression never changes. 7806 7807 In `subreg' expressions, it is 1 if the `subreg' references an 7808 unsigned object whose mode has been promoted to a wider mode. 7809 7810 In an `insn' or `jump_insn' in the delay slot of a branch 7811 instruction, 1 means an annulling branch should be used. 7812 7813 In a `symbol_ref' expression, 1 means that this symbol addresses 7814 something in the per-function constant pool. 7815 7816 In a `call_insn' 1 means that this instruction is a call to a const 7817 function. 7818 7819 In an RTL dump, this flag is represented as `/u'. 7820 7821`used' 7822 This flag is used directly (without an access macro) at the end of 7823 RTL generation for a function, to count the number of times an 7824 expression appears in insns. Expressions that appear more than 7825 once are copied, according to the rules for shared structure 7826 (*note Sharing::). 7827 7828 For a `reg', it is used directly (without an access macro) by the 7829 leaf register renumbering code to ensure that each register is only 7830 renumbered once. 7831 7832 In a `symbol_ref', it indicates that an external declaration for 7833 the symbol has already been written. 7834 7835`volatil' 7836 In a `mem', `asm_operands', or `asm_input' expression, it is 1 if 7837 the memory reference is volatile. Volatile memory references may 7838 not be deleted, reordered or combined. 7839 7840 In a `symbol_ref' expression, it is used for machine-specific 7841 purposes. 7842 7843 In a `reg' expression, it is 1 if the value is a user-level 7844 variable. 0 indicates an internal compiler temporary. 7845 7846 In an `insn', 1 means the insn has been deleted. 7847 7848 In `label_ref' and `reg_label' expressions, 1 means a reference to 7849 a non-local label. 7850 7851 In `prefetch' expressions, 1 means that the containing insn is a 7852 scheduling barrier. 7853 7854 In an RTL dump, this flag is represented as `/v'. 7855 7856 7857File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 7858 785910.6 Machine Modes 7860================== 7861 7862A machine mode describes a size of data object and the representation 7863used for it. In the C code, machine modes are represented by an 7864enumeration type, `enum machine_mode', defined in `machmode.def'. Each 7865RTL expression has room for a machine mode and so do certain kinds of 7866tree expressions (declarations and types, to be precise). 7867 7868 In debugging dumps and machine descriptions, the machine mode of an RTL 7869expression is written after the expression code with a colon to separate 7870them. The letters `mode' which appear at the end of each machine mode 7871name are omitted. For example, `(reg:SI 38)' is a `reg' expression 7872with machine mode `SImode'. If the mode is `VOIDmode', it is not 7873written at all. 7874 7875 Here is a table of machine modes. The term "byte" below refers to an 7876object of `BITS_PER_UNIT' bits (*note Storage Layout::). 7877 7878`BImode' 7879 "Bit" mode represents a single bit, for predicate registers. 7880 7881`QImode' 7882 "Quarter-Integer" mode represents a single byte treated as an 7883 integer. 7884 7885`HImode' 7886 "Half-Integer" mode represents a two-byte integer. 7887 7888`PSImode' 7889 "Partial Single Integer" mode represents an integer which occupies 7890 four bytes but which doesn't really use all four. On some 7891 machines, this is the right mode to use for pointers. 7892 7893`SImode' 7894 "Single Integer" mode represents a four-byte integer. 7895 7896`PDImode' 7897 "Partial Double Integer" mode represents an integer which occupies 7898 eight bytes but which doesn't really use all eight. On some 7899 machines, this is the right mode to use for certain pointers. 7900 7901`DImode' 7902 "Double Integer" mode represents an eight-byte integer. 7903 7904`TImode' 7905 "Tetra Integer" (?) mode represents a sixteen-byte integer. 7906 7907`OImode' 7908 "Octa Integer" (?) mode represents a thirty-two-byte integer. 7909 7910`QFmode' 7911 "Quarter-Floating" mode represents a quarter-precision (single 7912 byte) floating point number. 7913 7914`HFmode' 7915 "Half-Floating" mode represents a half-precision (two byte) 7916 floating point number. 7917 7918`TQFmode' 7919 "Three-Quarter-Floating" (?) mode represents a 7920 three-quarter-precision (three byte) floating point number. 7921 7922`SFmode' 7923 "Single Floating" mode represents a four byte floating point 7924 number. In the common case, of a processor with IEEE arithmetic 7925 and 8-bit bytes, this is a single-precision IEEE floating point 7926 number; it can also be used for double-precision (on processors 7927 with 16-bit bytes) and single-precision VAX and IBM types. 7928 7929`DFmode' 7930 "Double Floating" mode represents an eight byte floating point 7931 number. In the common case, of a processor with IEEE arithmetic 7932 and 8-bit bytes, this is a double-precision IEEE floating point 7933 number. 7934 7935`XFmode' 7936 "Extended Floating" mode represents an IEEE extended floating point 7937 number. This mode only has 80 meaningful bits (ten bytes). Some 7938 processors require such numbers to be padded to twelve bytes, 7939 others to sixteen; this mode is used for either. 7940 7941`SDmode' 7942 "Single Decimal Floating" mode represents a four byte decimal 7943 floating point number (as distinct from conventional binary 7944 floating point). 7945 7946`DDmode' 7947 "Double Decimal Floating" mode represents an eight byte decimal 7948 floating point number. 7949 7950`TDmode' 7951 "Tetra Decimal Floating" mode represents a sixteen byte decimal 7952 floating point number all 128 of whose bits are meaningful. 7953 7954`TFmode' 7955 "Tetra Floating" mode represents a sixteen byte floating point 7956 number all 128 of whose bits are meaningful. One common use is the 7957 IEEE quad-precision format. 7958 7959`QQmode' 7960 "Quarter-Fractional" mode represents a single byte treated as a 7961 signed fractional number. The default format is "s.7". 7962 7963`HQmode' 7964 "Half-Fractional" mode represents a two-byte signed fractional 7965 number. The default format is "s.15". 7966 7967`SQmode' 7968 "Single Fractional" mode represents a four-byte signed fractional 7969 number. The default format is "s.31". 7970 7971`DQmode' 7972 "Double Fractional" mode represents an eight-byte signed 7973 fractional number. The default format is "s.63". 7974 7975`TQmode' 7976 "Tetra Fractional" mode represents a sixteen-byte signed 7977 fractional number. The default format is "s.127". 7978 7979`UQQmode' 7980 "Unsigned Quarter-Fractional" mode represents a single byte 7981 treated as an unsigned fractional number. The default format is 7982 ".8". 7983 7984`UHQmode' 7985 "Unsigned Half-Fractional" mode represents a two-byte unsigned 7986 fractional number. The default format is ".16". 7987 7988`USQmode' 7989 "Unsigned Single Fractional" mode represents a four-byte unsigned 7990 fractional number. The default format is ".32". 7991 7992`UDQmode' 7993 "Unsigned Double Fractional" mode represents an eight-byte unsigned 7994 fractional number. The default format is ".64". 7995 7996`UTQmode' 7997 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 7998 fractional number. The default format is ".128". 7999 8000`HAmode' 8001 "Half-Accumulator" mode represents a two-byte signed accumulator. 8002 The default format is "s8.7". 8003 8004`SAmode' 8005 "Single Accumulator" mode represents a four-byte signed 8006 accumulator. The default format is "s16.15". 8007 8008`DAmode' 8009 "Double Accumulator" mode represents an eight-byte signed 8010 accumulator. The default format is "s32.31". 8011 8012`TAmode' 8013 "Tetra Accumulator" mode represents a sixteen-byte signed 8014 accumulator. The default format is "s64.63". 8015 8016`UHAmode' 8017 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 8018 accumulator. The default format is "8.8". 8019 8020`USAmode' 8021 "Unsigned Single Accumulator" mode represents a four-byte unsigned 8022 accumulator. The default format is "16.16". 8023 8024`UDAmode' 8025 "Unsigned Double Accumulator" mode represents an eight-byte 8026 unsigned accumulator. The default format is "32.32". 8027 8028`UTAmode' 8029 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 8030 unsigned accumulator. The default format is "64.64". 8031 8032`CCmode' 8033 "Condition Code" mode represents the value of a condition code, 8034 which is a machine-specific set of bits used to represent the 8035 result of a comparison operation. Other machine-specific modes 8036 may also be used for the condition code. These modes are not used 8037 on machines that use `cc0' (see *note Condition Code::). 8038 8039`BLKmode' 8040 "Block" mode represents values that are aggregates to which none of 8041 the other modes apply. In RTL, only memory references can have 8042 this mode, and only if they appear in string-move or vector 8043 instructions. On machines which have no such instructions, 8044 `BLKmode' will not appear in RTL. 8045 8046`VOIDmode' 8047 Void mode means the absence of a mode or an unspecified mode. For 8048 example, RTL expressions of code `const_int' have mode `VOIDmode' 8049 because they can be taken to have whatever mode the context 8050 requires. In debugging dumps of RTL, `VOIDmode' is expressed by 8051 the absence of any mode. 8052 8053`QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 8054 These modes stand for a complex number represented as a pair of 8055 floating point values. The floating point values are in `QFmode', 8056 `HFmode', `SFmode', `DFmode', `XFmode', and `TFmode', respectively. 8057 8058`CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 8059 These modes stand for a complex number represented as a pair of 8060 integer values. The integer values are in `QImode', `HImode', 8061 `SImode', `DImode', `TImode', and `OImode', respectively. 8062 8063 The machine description defines `Pmode' as a C macro which expands 8064into the machine mode used for addresses. Normally this is the mode 8065whose size is `BITS_PER_WORD', `SImode' on 32-bit machines. 8066 8067 The only modes which a machine description must support are `QImode', 8068and the modes corresponding to `BITS_PER_WORD', `FLOAT_TYPE_SIZE' and 8069`DOUBLE_TYPE_SIZE'. The compiler will attempt to use `DImode' for 80708-byte structures and unions, but this can be prevented by overriding 8071the definition of `MAX_FIXED_MODE_SIZE'. Alternatively, you can have 8072the compiler use `TImode' for 16-byte structures and unions. Likewise, 8073you can arrange for the C type `short int' to avoid using `HImode'. 8074 8075 Very few explicit references to machine modes remain in the compiler 8076and these few references will soon be removed. Instead, the machine 8077modes are divided into mode classes. These are represented by the 8078enumeration type `enum mode_class' defined in `machmode.h'. The 8079possible mode classes are: 8080 8081`MODE_INT' 8082 Integer modes. By default these are `BImode', `QImode', `HImode', 8083 `SImode', `DImode', `TImode', and `OImode'. 8084 8085`MODE_PARTIAL_INT' 8086 The "partial integer" modes, `PQImode', `PHImode', `PSImode' and 8087 `PDImode'. 8088 8089`MODE_FLOAT' 8090 Floating point modes. By default these are `QFmode', `HFmode', 8091 `TQFmode', `SFmode', `DFmode', `XFmode' and `TFmode'. 8092 8093`MODE_DECIMAL_FLOAT' 8094 Decimal floating point modes. By default these are `SDmode', 8095 `DDmode' and `TDmode'. 8096 8097`MODE_FRACT' 8098 Signed fractional modes. By default these are `QQmode', `HQmode', 8099 `SQmode', `DQmode' and `TQmode'. 8100 8101`MODE_UFRACT' 8102 Unsigned fractional modes. By default these are `UQQmode', 8103 `UHQmode', `USQmode', `UDQmode' and `UTQmode'. 8104 8105`MODE_ACCUM' 8106 Signed accumulator modes. By default these are `HAmode', 8107 `SAmode', `DAmode' and `TAmode'. 8108 8109`MODE_UACCUM' 8110 Unsigned accumulator modes. By default these are `UHAmode', 8111 `USAmode', `UDAmode' and `UTAmode'. 8112 8113`MODE_COMPLEX_INT' 8114 Complex integer modes. (These are not currently implemented). 8115 8116`MODE_COMPLEX_FLOAT' 8117 Complex floating point modes. By default these are `QCmode', 8118 `HCmode', `SCmode', `DCmode', `XCmode', and `TCmode'. 8119 8120`MODE_FUNCTION' 8121 Algol or Pascal function variables including a static chain. 8122 (These are not currently implemented). 8123 8124`MODE_CC' 8125 Modes representing condition code values. These are `CCmode' plus 8126 any `CC_MODE' modes listed in the `MACHINE-modes.def'. *Note Jump 8127 Patterns::, also see *note Condition Code::. 8128 8129`MODE_RANDOM' 8130 This is a catchall mode class for modes which don't fit into the 8131 above classes. Currently `VOIDmode' and `BLKmode' are in 8132 `MODE_RANDOM'. 8133 8134 Here are some C macros that relate to machine modes: 8135 8136`GET_MODE (X)' 8137 Returns the machine mode of the RTX X. 8138 8139`PUT_MODE (X, NEWMODE)' 8140 Alters the machine mode of the RTX X to be NEWMODE. 8141 8142`NUM_MACHINE_MODES' 8143 Stands for the number of machine modes available on the target 8144 machine. This is one greater than the largest numeric value of any 8145 machine mode. 8146 8147`GET_MODE_NAME (M)' 8148 Returns the name of mode M as a string. 8149 8150`GET_MODE_CLASS (M)' 8151 Returns the mode class of mode M. 8152 8153`GET_MODE_WIDER_MODE (M)' 8154 Returns the next wider natural mode. For example, the expression 8155 `GET_MODE_WIDER_MODE (QImode)' returns `HImode'. 8156 8157`GET_MODE_SIZE (M)' 8158 Returns the size in bytes of a datum of mode M. 8159 8160`GET_MODE_BITSIZE (M)' 8161 Returns the size in bits of a datum of mode M. 8162 8163`GET_MODE_IBIT (M)' 8164 Returns the number of integral bits of a datum of fixed-point mode 8165 M. 8166 8167`GET_MODE_FBIT (M)' 8168 Returns the number of fractional bits of a datum of fixed-point 8169 mode M. 8170 8171`GET_MODE_MASK (M)' 8172 Returns a bitmask containing 1 for all bits in a word that fit 8173 within mode M. This macro can only be used for modes whose 8174 bitsize is less than or equal to `HOST_BITS_PER_INT'. 8175 8176`GET_MODE_ALIGNMENT (M)' 8177 Return the required alignment, in bits, for an object of mode M. 8178 8179`GET_MODE_UNIT_SIZE (M)' 8180 Returns the size in bytes of the subunits of a datum of mode M. 8181 This is the same as `GET_MODE_SIZE' except in the case of complex 8182 modes. For them, the unit size is the size of the real or 8183 imaginary part. 8184 8185`GET_MODE_NUNITS (M)' 8186 Returns the number of units contained in a mode, i.e., 8187 `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'. 8188 8189`GET_CLASS_NARROWEST_MODE (C)' 8190 Returns the narrowest mode in mode class C. 8191 8192 The global variables `byte_mode' and `word_mode' contain modes whose 8193classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or 8194`BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode' 8195and `SImode', respectively. 8196 8197 8198File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 8199 820010.7 Constant Expression Types 8201============================== 8202 8203The simplest RTL expressions are those that represent constant values. 8204 8205`(const_int I)' 8206 This type of expression represents the integer value I. I is 8207 customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)', 8208 which is equivalent to `XWINT (EXP, 0)'. 8209 8210 Constants generated for modes with fewer bits than `HOST_WIDE_INT' 8211 must be sign extended to full width (e.g., with `gen_int_mode'). 8212 8213 There is only one expression object for the integer value zero; it 8214 is the value of the variable `const0_rtx'. Likewise, the only 8215 expression for integer value one is found in `const1_rtx', the only 8216 expression for integer value two is found in `const2_rtx', and the 8217 only expression for integer value negative one is found in 8218 `constm1_rtx'. Any attempt to create an expression of code 8219 `const_int' and value zero, one, two or negative one will return 8220 `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as 8221 appropriate. 8222 8223 Similarly, there is only one object for the integer whose value is 8224 `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If 8225 `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will 8226 point to the same object. If `STORE_FLAG_VALUE' is -1, 8227 `const_true_rtx' and `constm1_rtx' will point to the same object. 8228 8229`(const_double:M I0 I1 ...)' 8230 Represents either a floating-point constant of mode M or an 8231 integer constant too large to fit into `HOST_BITS_PER_WIDE_INT' 8232 bits but small enough to fit within twice that number of bits (GCC 8233 does not provide a mechanism to represent even larger constants). 8234 In the latter case, M will be `VOIDmode'. 8235 8236 If M is `VOIDmode', the bits of the value are stored in I0 and I1. 8237 I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and 8238 I1 with `CONST_DOUBLE_HIGH'. 8239 8240 If the constant is floating point (regardless of its precision), 8241 then the number of integers used to store the value depends on the 8242 size of `REAL_VALUE_TYPE' (*note Floating Point::). The integers 8243 represent a floating point number, but not precisely in the target 8244 machine's or host machine's floating point format. To convert 8245 them to the precise bit pattern used by the target machine, use 8246 the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 8247 Output::). 8248 8249`(const_fixed:M ...)' 8250 Represents a fixed-point constant of mode M. The operand is a 8251 data structure of type `struct fixed_value' and is accessed with 8252 the macro `CONST_FIXED_VALUE'. The high part of data is accessed 8253 with `CONST_FIXED_VALUE_HIGH'; the low part is accessed with 8254 `CONST_FIXED_VALUE_LOW'. 8255 8256`(const_vector:M [X0 X1 ...])' 8257 Represents a vector constant. The square brackets stand for the 8258 vector containing the constant elements. X0, X1 and so on are the 8259 `const_int', `const_double' or `const_fixed' elements. 8260 8261 The number of units in a `const_vector' is obtained with the macro 8262 `CONST_VECTOR_NUNITS' as in `CONST_VECTOR_NUNITS (V)'. 8263 8264 Individual elements in a vector constant are accessed with the 8265 macro `CONST_VECTOR_ELT' as in `CONST_VECTOR_ELT (V, N)' where V 8266 is the vector constant and N is the element desired. 8267 8268`(const_string STR)' 8269 Represents a constant string with value STR. Currently this is 8270 used only for insn attributes (*note Insn Attributes::) since 8271 constant strings in C are placed in memory. 8272 8273`(symbol_ref:MODE SYMBOL)' 8274 Represents the value of an assembler label for data. SYMBOL is a 8275 string that describes the name of the assembler label. If it 8276 starts with a `*', the label is the rest of SYMBOL not including 8277 the `*'. Otherwise, the label is SYMBOL, usually prefixed with 8278 `_'. 8279 8280 The `symbol_ref' contains a mode, which is usually `Pmode'. 8281 Usually that is the only mode for which a symbol is directly valid. 8282 8283`(label_ref:MODE LABEL)' 8284 Represents the value of an assembler label for code. It contains 8285 one operand, an expression, which must be a `code_label' or a 8286 `note' of type `NOTE_INSN_DELETED_LABEL' that appears in the 8287 instruction sequence to identify the place where the label should 8288 go. 8289 8290 The reason for using a distinct expression type for code label 8291 references is so that jump optimization can distinguish them. 8292 8293 The `label_ref' contains a mode, which is usually `Pmode'. 8294 Usually that is the only mode for which a label is directly valid. 8295 8296`(const:M EXP)' 8297 Represents a constant that is the result of an assembly-time 8298 arithmetic computation. The operand, EXP, is an expression that 8299 contains only constants (`const_int', `symbol_ref' and `label_ref' 8300 expressions) combined with `plus' and `minus'. However, not all 8301 combinations are valid, since the assembler cannot do arbitrary 8302 arithmetic on relocatable symbols. 8303 8304 M should be `Pmode'. 8305 8306`(high:M EXP)' 8307 Represents the high-order bits of EXP, usually a `symbol_ref'. 8308 The number of bits is machine-dependent and is normally the number 8309 of bits specified in an instruction that initializes the high 8310 order bits of a register. It is used with `lo_sum' to represent 8311 the typical two-instruction sequence used in RISC machines to 8312 reference a global memory location. 8313 8314 M should be `Pmode'. 8315 8316 The macro `CONST0_RTX (MODE)' refers to an expression with value 0 in 8317mode MODE. If mode MODE is of mode class `MODE_INT', it returns 8318`const0_rtx'. If mode MODE is of mode class `MODE_FLOAT', it returns a 8319`CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 8320`CONST_VECTOR' expression in mode MODE. Similarly, the macro 8321`CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 8322and similarly for `CONST2_RTX'. The `CONST1_RTX' and `CONST2_RTX' 8323macros are undefined for vector modes. 8324 8325 8326File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 8327 832810.8 Registers and Memory 8329========================= 8330 8331Here are the RTL expression types for describing access to machine 8332registers and to main memory. 8333 8334`(reg:M N)' 8335 For small values of the integer N (those that are less than 8336 `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 8337 register number N: a "hard register". For larger values of N, it 8338 stands for a temporary value or "pseudo register". The compiler's 8339 strategy is to generate code assuming an unlimited number of such 8340 pseudo registers, and later convert them into hard registers or 8341 into memory references. 8342 8343 M is the machine mode of the reference. It is necessary because 8344 machines can generally refer to each register in more than one 8345 mode. For example, a register may contain a full word but there 8346 may be instructions to refer to it as a half word or as a single 8347 byte, as well as instructions to refer to it as a floating point 8348 number of various precisions. 8349 8350 Even for a register that the machine can access in only one mode, 8351 the mode must always be specified. 8352 8353 The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine 8354 description, since the number of hard registers on the machine is 8355 an invariant characteristic of the machine. Note, however, that 8356 not all of the machine registers must be general registers. All 8357 the machine registers that can be used for storage of data are 8358 given hard register numbers, even those that can be used only in 8359 certain instructions or can hold only certain types of data. 8360 8361 A hard register may be accessed in various modes throughout one 8362 function, but each pseudo register is given a natural mode and is 8363 accessed only in that mode. When it is necessary to describe an 8364 access to a pseudo register using a nonnatural mode, a `subreg' 8365 expression is used. 8366 8367 A `reg' expression with a machine mode that specifies more than 8368 one word of data may actually stand for several consecutive 8369 registers. If in addition the register number specifies a 8370 hardware register, then it actually represents several consecutive 8371 hardware registers starting with the specified one. 8372 8373 Each pseudo register number used in a function's RTL code is 8374 represented by a unique `reg' expression. 8375 8376 Some pseudo register numbers, those within the range of 8377 `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear 8378 during the RTL generation phase and are eliminated before the 8379 optimization phases. These represent locations in the stack frame 8380 that cannot be determined until RTL generation for the function 8381 has been completed. The following virtual register numbers are 8382 defined: 8383 8384 `VIRTUAL_INCOMING_ARGS_REGNUM' 8385 This points to the first word of the incoming arguments 8386 passed on the stack. Normally these arguments are placed 8387 there by the caller, but the callee may have pushed some 8388 arguments that were previously passed in registers. 8389 8390 When RTL generation is complete, this virtual register is 8391 replaced by the sum of the register given by 8392 `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'. 8393 8394 `VIRTUAL_STACK_VARS_REGNUM' 8395 If `FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 8396 points to immediately above the first variable on the stack. 8397 Otherwise, it points to the first variable on the stack. 8398 8399 `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 8400 register given by `FRAME_POINTER_REGNUM' and the value 8401 `STARTING_FRAME_OFFSET'. 8402 8403 `VIRTUAL_STACK_DYNAMIC_REGNUM' 8404 This points to the location of dynamically allocated memory 8405 on the stack immediately after the stack pointer has been 8406 adjusted by the amount of memory desired. 8407 8408 This virtual register is replaced by the sum of the register 8409 given by `STACK_POINTER_REGNUM' and the value 8410 `STACK_DYNAMIC_OFFSET'. 8411 8412 `VIRTUAL_OUTGOING_ARGS_REGNUM' 8413 This points to the location in the stack at which outgoing 8414 arguments should be written when the stack is pre-pushed 8415 (arguments pushed using push insns should always use 8416 `STACK_POINTER_REGNUM'). 8417 8418 This virtual register is replaced by the sum of the register 8419 given by `STACK_POINTER_REGNUM' and the value 8420 `STACK_POINTER_OFFSET'. 8421 8422`(subreg:M1 REG:M2 BYTENUM)' 8423 `subreg' expressions are used to refer to a register in a machine 8424 mode other than its natural one, or to refer to one register of a 8425 multi-part `reg' that actually refers to several registers. 8426 8427 Each pseudo register has a natural mode. If it is necessary to 8428 operate on it in a different mode, the register must be enclosed 8429 in a `subreg'. 8430 8431 There are currently three supported types for the first operand of 8432 a `subreg': 8433 * pseudo registers This is the most common case. Most 8434 `subreg's have pseudo `reg's as their first operand. 8435 8436 * mem `subreg's of `mem' were common in earlier versions of GCC 8437 and are still supported. During the reload pass these are 8438 replaced by plain `mem's. On machines that do not do 8439 instruction scheduling, use of `subreg's of `mem' are still 8440 used, but this is no longer recommended. Such `subreg's are 8441 considered to be `register_operand's rather than 8442 `memory_operand's before and during reload. Because of this, 8443 the scheduling passes cannot properly schedule instructions 8444 with `subreg's of `mem', so for machines that do scheduling, 8445 `subreg's of `mem' should never be used. To support this, 8446 the combine and recog passes have explicit code to inhibit 8447 the creation of `subreg's of `mem' when `INSN_SCHEDULING' is 8448 defined. 8449 8450 The use of `subreg's of `mem' after the reload pass is an area 8451 that is not well understood and should be avoided. There is 8452 still some code in the compiler to support this, but this 8453 code has possibly rotted. This use of `subreg's is 8454 discouraged and will most likely not be supported in the 8455 future. 8456 8457 * hard registers It is seldom necessary to wrap hard registers 8458 in `subreg's; such registers would normally reduce to a 8459 single `reg' rtx. This use of `subreg's is discouraged and 8460 may not be supported in the future. 8461 8462 8463 `subreg's of `subreg's are not supported. Using 8464 `simplify_gen_subreg' is the recommended way to avoid this problem. 8465 8466 `subreg's come in two distinct flavors, each having its own usage 8467 and rules: 8468 8469 Paradoxical subregs 8470 When M1 is strictly wider than M2, the `subreg' expression is 8471 called "paradoxical". The canonical test for this class of 8472 `subreg' is: 8473 8474 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2) 8475 8476 Paradoxical `subreg's can be used as both lvalues and rvalues. 8477 When used as an lvalue, the low-order bits of the source value 8478 are stored in REG and the high-order bits are discarded. 8479 When used as an rvalue, the low-order bits of the `subreg' are 8480 taken from REG while the high-order bits may or may not be 8481 defined. 8482 8483 The high-order bits of rvalues are in the following 8484 circumstances: 8485 8486 * `subreg's of `mem' When M2 is smaller than a word, the 8487 macro `LOAD_EXTEND_OP', can control how the high-order 8488 bits are defined. 8489 8490 * `subreg' of `reg's The upper bits are defined when 8491 `SUBREG_PROMOTED_VAR_P' is true. 8492 `SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 8493 bits hold. Such subregs usually represent local 8494 variables, register variables and parameter pseudo 8495 variables that have been promoted to a wider mode. 8496 8497 8498 BYTENUM is always zero for a paradoxical `subreg', even on 8499 big-endian targets. 8500 8501 For example, the paradoxical `subreg': 8502 8503 (set (subreg:SI (reg:HI X) 0) Y) 8504 8505 stores the lower 2 bytes of Y in X and discards the upper 2 8506 bytes. A subsequent: 8507 8508 (set Z (subreg:SI (reg:HI X) 0)) 8509 8510 would set the lower two bytes of Z to Y and set the upper two 8511 bytes to an unknown value assuming `SUBREG_PROMOTED_VAR_P' is 8512 false. 8513 8514 Normal subregs 8515 When M1 is at least as narrow as M2 the `subreg' expression 8516 is called "normal". 8517 8518 Normal `subreg's restrict consideration to certain bits of 8519 REG. There are two cases. If M1 is smaller than a word, the 8520 `subreg' refers to the least-significant part (or "lowpart") 8521 of one word of REG. If M1 is word-sized or greater, the 8522 `subreg' refers to one or more complete words. 8523 8524 When used as an lvalue, `subreg' is a word-based accessor. 8525 Storing to a `subreg' modifies all the words of REG that 8526 overlap the `subreg', but it leaves the other words of REG 8527 alone. 8528 8529 When storing to a normal `subreg' that is smaller than a word, 8530 the other bits of the referenced word are usually left in an 8531 undefined state. This laxity makes it easier to generate 8532 efficient code for such instructions. To represent an 8533 instruction that preserves all the bits outside of those in 8534 the `subreg', use `strict_low_part' or `zero_extract' around 8535 the `subreg'. 8536 8537 BYTENUM must identify the offset of the first byte of the 8538 `subreg' from the start of REG, assuming that REG is laid out 8539 in memory order. The memory order of bytes is defined by two 8540 target macros, `WORDS_BIG_ENDIAN' and `BYTES_BIG_ENDIAN': 8541 8542 * `WORDS_BIG_ENDIAN', if set to 1, says that byte number 8543 zero is part of the most significant word; otherwise, it 8544 is part of the least significant word. 8545 8546 * `BYTES_BIG_ENDIAN', if set to 1, says that byte number 8547 zero is the most significant byte within a word; 8548 otherwise, it is the least significant byte within a 8549 word. 8550 8551 On a few targets, `FLOAT_WORDS_BIG_ENDIAN' disagrees with 8552 `WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 8553 floating point values as if they had the same endianness as 8554 integer values. This works because they handle them solely 8555 as a collection of integer values, with no particular 8556 numerical value. Only real.c and the runtime libraries care 8557 about `FLOAT_WORDS_BIG_ENDIAN'. 8558 8559 Thus, 8560 8561 (subreg:HI (reg:SI X) 2) 8562 8563 on a `BYTES_BIG_ENDIAN', `UNITS_PER_WORD == 4' target is the 8564 same as 8565 8566 (subreg:HI (reg:SI X) 0) 8567 8568 on a little-endian, `UNITS_PER_WORD == 4' target. Both 8569 `subreg's access the lower two bytes of register X. 8570 8571 8572 A `MODE_PARTIAL_INT' mode behaves as if it were as wide as the 8573 corresponding `MODE_INT' mode, except that it has an unknown 8574 number of undefined bits. For example: 8575 8576 (subreg:PSI (reg:SI 0) 0) 8577 8578 accesses the whole of `(reg:SI 0)', but the exact relationship 8579 between the `PSImode' value and the `SImode' value is not defined. 8580 If we assume `UNITS_PER_WORD <= 4', then the following two 8581 `subreg's: 8582 8583 (subreg:PSI (reg:DI 0) 0) 8584 (subreg:PSI (reg:DI 0) 4) 8585 8586 represent independent 4-byte accesses to the two halves of 8587 `(reg:DI 0)'. Both `subreg's have an unknown number of undefined 8588 bits. 8589 8590 If `UNITS_PER_WORD <= 2' then these two `subreg's: 8591 8592 (subreg:HI (reg:PSI 0) 0) 8593 (subreg:HI (reg:PSI 0) 2) 8594 8595 represent independent 2-byte accesses that together span the whole 8596 of `(reg:PSI 0)'. Storing to the first `subreg' does not affect 8597 the value of the second, and vice versa. `(reg:PSI 0)' has an 8598 unknown number of undefined bits, so the assignment: 8599 8600 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 8601 8602 does not guarantee that `(subreg:HI (reg:PSI 0) 0)' has the value 8603 `(reg:HI 4)'. 8604 8605 The rules above apply to both pseudo REGs and hard REGs. If the 8606 semantics are not correct for particular combinations of M1, M2 8607 and hard REG, the target-specific code must ensure that those 8608 combinations are never used. For example: 8609 8610 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS) 8611 8612 must be true for every class CLASS that includes REG. 8613 8614 The first operand of a `subreg' expression is customarily accessed 8615 with the `SUBREG_REG' macro and the second operand is customarily 8616 accessed with the `SUBREG_BYTE' macro. 8617 8618 It has been several years since a platform in which 8619 `BYTES_BIG_ENDIAN' not equal to `WORDS_BIG_ENDIAN' has been 8620 tested. Anyone wishing to support such a platform in the future 8621 may be confronted with code rot. 8622 8623`(scratch:M)' 8624 This represents a scratch register that will be required for the 8625 execution of a single instruction and not used subsequently. It is 8626 converted into a `reg' by either the local register allocator or 8627 the reload pass. 8628 8629 `scratch' is usually present inside a `clobber' operation (*note 8630 Side Effects::). 8631 8632`(cc0)' 8633 This refers to the machine's condition code register. It has no 8634 operands and may not have a machine mode. There are two ways to 8635 use it: 8636 8637 * To stand for a complete set of condition code flags. This is 8638 best on most machines, where each comparison sets the entire 8639 series of flags. 8640 8641 With this technique, `(cc0)' may be validly used in only two 8642 contexts: as the destination of an assignment (in test and 8643 compare instructions) and in comparison operators comparing 8644 against zero (`const_int' with value zero; that is to say, 8645 `const0_rtx'). 8646 8647 * To stand for a single flag that is the result of a single 8648 condition. This is useful on machines that have only a 8649 single flag bit, and in which comparison instructions must 8650 specify the condition to test. 8651 8652 With this technique, `(cc0)' may be validly used in only two 8653 contexts: as the destination of an assignment (in test and 8654 compare instructions) where the source is a comparison 8655 operator, and as the first operand of `if_then_else' (in a 8656 conditional branch). 8657 8658 There is only one expression object of code `cc0'; it is the value 8659 of the variable `cc0_rtx'. Any attempt to create an expression of 8660 code `cc0' will return `cc0_rtx'. 8661 8662 Instructions can set the condition code implicitly. On many 8663 machines, nearly all instructions set the condition code based on 8664 the value that they compute or store. It is not necessary to 8665 record these actions explicitly in the RTL because the machine 8666 description includes a prescription for recognizing the 8667 instructions that do so (by means of the macro 8668 `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions 8669 whose sole purpose is to set the condition code, and instructions 8670 that use the condition code, need mention `(cc0)'. 8671 8672 On some machines, the condition code register is given a register 8673 number and a `reg' is used instead of `(cc0)'. This is usually the 8674 preferable approach if only a small subset of instructions modify 8675 the condition code. Other machines store condition codes in 8676 general registers; in such cases a pseudo register should be used. 8677 8678 Some machines, such as the SPARC and RS/6000, have two sets of 8679 arithmetic instructions, one that sets and one that does not set 8680 the condition code. This is best handled by normally generating 8681 the instruction that does not set the condition code, and making a 8682 pattern that both performs the arithmetic and sets the condition 8683 code register (which would not be `(cc0)' in this case). For 8684 examples, search for `addcc' and `andcc' in `sparc.md'. 8685 8686`(pc)' 8687 This represents the machine's program counter. It has no operands 8688 and may not have a machine mode. `(pc)' may be validly used only 8689 in certain specific contexts in jump instructions. 8690 8691 There is only one expression object of code `pc'; it is the value 8692 of the variable `pc_rtx'. Any attempt to create an expression of 8693 code `pc' will return `pc_rtx'. 8694 8695 All instructions that do not jump alter the program counter 8696 implicitly by incrementing it, but there is no need to mention 8697 this in the RTL. 8698 8699`(mem:M ADDR ALIAS)' 8700 This RTX represents a reference to main memory at an address 8701 represented by the expression ADDR. M specifies how large a unit 8702 of memory is accessed. ALIAS specifies an alias set for the 8703 reference. In general two items are in different alias sets if 8704 they cannot reference the same memory address. 8705 8706 The construct `(mem:BLK (scratch))' is considered to alias all 8707 other memories. Thus it may be used as a memory barrier in 8708 epilogue stack deallocation patterns. 8709 8710`(concatM RTX RTX)' 8711 This RTX represents the concatenation of two other RTXs. This is 8712 used for complex values. It should only appear in the RTL 8713 attached to declarations and during RTL generation. It should not 8714 appear in the ordinary insn chain. 8715 8716`(concatnM [RTX ...])' 8717 This RTX represents the concatenation of all the RTX to make a 8718 single value. Like `concat', this should only appear in 8719 declarations, and not in the insn chain. 8720 8721 8722File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 8723 872410.9 RTL Expressions for Arithmetic 8725=================================== 8726 8727Unless otherwise specified, all the operands of arithmetic expressions 8728must be valid for mode M. An operand is valid for mode M if it has 8729mode M, or if it is a `const_int' or `const_double' and M is a mode of 8730class `MODE_INT'. 8731 8732 For commutative binary operations, constants should be placed in the 8733second operand. 8734 8735`(plus:M X Y)' 8736`(ss_plus:M X Y)' 8737`(us_plus:M X Y)' 8738 These three expressions all represent the sum of the values 8739 represented by X and Y carried out in machine mode M. They differ 8740 in their behavior on overflow of integer modes. `plus' wraps 8741 round modulo the width of M; `ss_plus' saturates at the maximum 8742 signed value representable in M; `us_plus' saturates at the 8743 maximum unsigned value. 8744 8745`(lo_sum:M X Y)' 8746 This expression represents the sum of X and the low-order bits of 8747 Y. It is used with `high' (*note Constants::) to represent the 8748 typical two-instruction sequence used in RISC machines to 8749 reference a global memory location. 8750 8751 The number of low order bits is machine-dependent but is normally 8752 the number of bits in a `Pmode' item minus the number of bits set 8753 by `high'. 8754 8755 M should be `Pmode'. 8756 8757`(minus:M X Y)' 8758`(ss_minus:M X Y)' 8759`(us_minus:M X Y)' 8760 These three expressions represent the result of subtracting Y from 8761 X, carried out in mode M. Behavior on overflow is the same as for 8762 the three variants of `plus' (see above). 8763 8764`(compare:M X Y)' 8765 Represents the result of subtracting Y from X for purposes of 8766 comparison. The result is computed without overflow, as if with 8767 infinite precision. 8768 8769 Of course, machines can't really subtract with infinite precision. 8770 However, they can pretend to do so when only the sign of the 8771 result will be used, which is the case when the result is stored 8772 in the condition code. And that is the _only_ way this kind of 8773 expression may validly be used: as a value to be stored in the 8774 condition codes, either `(cc0)' or a register. *Note 8775 Comparisons::. 8776 8777 The mode M is not related to the modes of X and Y, but instead is 8778 the mode of the condition code value. If `(cc0)' is used, it is 8779 `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often 8780 `CCmode'. *Note Condition Code::. If M is `VOIDmode' or 8781 `CCmode', the operation returns sufficient information (in an 8782 unspecified format) so that any comparison operator can be applied 8783 to the result of the `COMPARE' operation. For other modes in 8784 class `MODE_CC', the operation only returns a subset of this 8785 information. 8786 8787 Normally, X and Y must have the same mode. Otherwise, `compare' 8788 is valid only if the mode of X is in class `MODE_INT' and Y is a 8789 `const_int' or `const_double' with mode `VOIDmode'. The mode of X 8790 determines what mode the comparison is to be done in; thus it must 8791 not be `VOIDmode'. 8792 8793 If one of the operands is a constant, it should be placed in the 8794 second operand and the comparison code adjusted as appropriate. 8795 8796 A `compare' specifying two `VOIDmode' constants is not valid since 8797 there is no way to know in what mode the comparison is to be 8798 performed; the comparison must either be folded during the 8799 compilation or the first operand must be loaded into a register 8800 while its mode is still known. 8801 8802`(neg:M X)' 8803`(ss_neg:M X)' 8804`(us_neg:M X)' 8805 These two expressions represent the negation (subtraction from 8806 zero) of the value represented by X, carried out in mode M. They 8807 differ in the behavior on overflow of integer modes. In the case 8808 of `neg', the negation of the operand may be a number not 8809 representable in mode M, in which case it is truncated to M. 8810 `ss_neg' and `us_neg' ensure that an out-of-bounds result 8811 saturates to the maximum or minimum signed or unsigned value. 8812 8813`(mult:M X Y)' 8814`(ss_mult:M X Y)' 8815`(us_mult:M X Y)' 8816 Represents the signed product of the values represented by X and Y 8817 carried out in machine mode M. `ss_mult' and `us_mult' ensure 8818 that an out-of-bounds result saturates to the maximum or minimum 8819 signed or unsigned value. 8820 8821 Some machines support a multiplication that generates a product 8822 wider than the operands. Write the pattern for this as 8823 8824 (mult:M (sign_extend:M X) (sign_extend:M Y)) 8825 8826 where M is wider than the modes of X and Y, which need not be the 8827 same. 8828 8829 For unsigned widening multiplication, use the same idiom, but with 8830 `zero_extend' instead of `sign_extend'. 8831 8832`(div:M X Y)' 8833`(ss_div:M X Y)' 8834 Represents the quotient in signed division of X by Y, carried out 8835 in machine mode M. If M is a floating point mode, it represents 8836 the exact quotient; otherwise, the integerized quotient. `ss_div' 8837 ensures that an out-of-bounds result saturates to the maximum or 8838 minimum signed value. 8839 8840 Some machines have division instructions in which the operands and 8841 quotient widths are not all the same; you should represent such 8842 instructions using `truncate' and `sign_extend' as in, 8843 8844 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 8845 8846`(udiv:M X Y)' 8847`(us_div:M X Y)' 8848 Like `div' but represents unsigned division. `us_div' ensures 8849 that an out-of-bounds result saturates to the maximum or minimum 8850 unsigned value. 8851 8852`(mod:M X Y)' 8853`(umod:M X Y)' 8854 Like `div' and `udiv' but represent the remainder instead of the 8855 quotient. 8856 8857`(smin:M X Y)' 8858`(smax:M X Y)' 8859 Represents the smaller (for `smin') or larger (for `smax') of X 8860 and Y, interpreted as signed values in mode M. When used with 8861 floating point, if both operands are zeros, or if either operand 8862 is `NaN', then it is unspecified which of the two operands is 8863 returned as the result. 8864 8865`(umin:M X Y)' 8866`(umax:M X Y)' 8867 Like `smin' and `smax', but the values are interpreted as unsigned 8868 integers. 8869 8870`(not:M X)' 8871 Represents the bitwise complement of the value represented by X, 8872 carried out in mode M, which must be a fixed-point machine mode. 8873 8874`(and:M X Y)' 8875 Represents the bitwise logical-and of the values represented by X 8876 and Y, carried out in machine mode M, which must be a fixed-point 8877 machine mode. 8878 8879`(ior:M X Y)' 8880 Represents the bitwise inclusive-or of the values represented by X 8881 and Y, carried out in machine mode M, which must be a fixed-point 8882 mode. 8883 8884`(xor:M X Y)' 8885 Represents the bitwise exclusive-or of the values represented by X 8886 and Y, carried out in machine mode M, which must be a fixed-point 8887 mode. 8888 8889`(ashift:M X C)' 8890`(ss_ashift:M X C)' 8891`(us_ashift:M X C)' 8892 These three expressions represent the result of arithmetically 8893 shifting X left by C places. They differ in their behavior on 8894 overflow of integer modes. An `ashift' operation is a plain shift 8895 with no special behavior in case of a change in the sign bit; 8896 `ss_ashift' and `us_ashift' saturates to the minimum or maximum 8897 representable value if any of the bits shifted out differs from 8898 the final sign bit. 8899 8900 X have mode M, a fixed-point machine mode. C be a fixed-point 8901 mode or be a constant with mode `VOIDmode'; which mode is 8902 determined by the mode called for in the machine description entry 8903 for the left-shift instruction. For example, on the VAX, the mode 8904 of C is `QImode' regardless of M. 8905 8906`(lshiftrt:M X C)' 8907`(ashiftrt:M X C)' 8908 Like `ashift' but for right shift. Unlike the case for left shift, 8909 these two operations are distinct. 8910 8911`(rotate:M X C)' 8912`(rotatert:M X C)' 8913 Similar but represent left and right rotate. If C is a constant, 8914 use `rotate'. 8915 8916`(abs:M X)' 8917 8918`(ss_abs:M X)' 8919 Represents the absolute value of X, computed in mode M. `ss_abs' 8920 ensures that an out-of-bounds result saturates to the maximum 8921 signed value. 8922 8923`(sqrt:M X)' 8924 Represents the square root of X, computed in mode M. Most often M 8925 will be a floating point mode. 8926 8927`(ffs:M X)' 8928 Represents one plus the index of the least significant 1-bit in X, 8929 represented as an integer of mode M. (The value is zero if X is 8930 zero.) The mode of X need not be M; depending on the target 8931 machine, various mode combinations may be valid. 8932 8933`(clz:M X)' 8934 Represents the number of leading 0-bits in X, represented as an 8935 integer of mode M, starting at the most significant bit position. 8936 If X is zero, the value is determined by 8937 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 8938 of the few expressions that is not invariant under widening. The 8939 mode of X will usually be an integer mode. 8940 8941`(ctz:M X)' 8942 Represents the number of trailing 0-bits in X, represented as an 8943 integer of mode M, starting at the least significant bit position. 8944 If X is zero, the value is determined by 8945 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 8946 `ctz(x)' is equivalent to `ffs(X) - 1'. The mode of X will 8947 usually be an integer mode. 8948 8949`(popcount:M X)' 8950 Represents the number of 1-bits in X, represented as an integer of 8951 mode M. The mode of X will usually be an integer mode. 8952 8953`(parity:M X)' 8954 Represents the number of 1-bits modulo 2 in X, represented as an 8955 integer of mode M. The mode of X will usually be an integer mode. 8956 8957`(bswap:M X)' 8958 Represents the value X with the order of bytes reversed, carried 8959 out in mode M, which must be a fixed-point machine mode. 8960 8961 8962File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 8963 896410.10 Comparison Operations 8965=========================== 8966 8967Comparison operators test a relation on two operands and are considered 8968to represent a machine-dependent nonzero value described by, but not 8969necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::) if the relation 8970holds, or zero if it does not, for comparison operators whose results 8971have a `MODE_INT' mode, `FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 8972relation holds, or zero if it does not, for comparison operators that 8973return floating-point values, and a vector of either 8974`VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 8975zeros if it does not, for comparison operators that return vector 8976results. The mode of the comparison operation is independent of the 8977mode of the data being compared. If the comparison operation is being 8978tested (e.g., the first operand of an `if_then_else'), the mode must be 8979`VOIDmode'. 8980 8981 There are two ways that comparison operations may be used. The 8982comparison operators may be used to compare the condition codes `(cc0)' 8983against zero, as in `(eq (cc0) (const_int 0))'. Such a construct 8984actually refers to the result of the preceding instruction in which the 8985condition codes were set. The instruction setting the condition code 8986must be adjacent to the instruction using the condition code; only 8987`note' insns may separate them. 8988 8989 Alternatively, a comparison operation may directly compare two data 8990objects. The mode of the comparison is determined by the operands; they 8991must both be valid for a common machine mode. A comparison with both 8992operands constant would be invalid as the machine mode could not be 8993deduced from it, but such a comparison should never exist in RTL due to 8994constant folding. 8995 8996 In the example above, if `(cc0)' were last set to `(compare X Y)', the 8997comparison operation is identical to `(eq X Y)'. Usually only one style 8998of comparisons is supported on a particular machine, but the combine 8999pass will try to merge the operations to produce the `eq' shown in case 9000it exists in the context of the particular insn involved. 9001 9002 Inequality comparisons come in two flavors, signed and unsigned. Thus, 9003there are distinct expression codes `gt' and `gtu' for signed and 9004unsigned greater-than. These can produce different results for the same 9005pair of integer values: for example, 1 is signed greater-than -1 but not 9006unsigned greater-than, because -1 when regarded as unsigned is actually 9007`0xffffffff' which is greater than 1. 9008 9009 The signed comparisons are also used for floating point values. 9010Floating point comparisons are distinguished by the machine modes of 9011the operands. 9012 9013`(eq:M X Y)' 9014 `STORE_FLAG_VALUE' if the values represented by X and Y are equal, 9015 otherwise 0. 9016 9017`(ne:M X Y)' 9018 `STORE_FLAG_VALUE' if the values represented by X and Y are not 9019 equal, otherwise 0. 9020 9021`(gt:M X Y)' 9022 `STORE_FLAG_VALUE' if the X is greater than Y. If they are 9023 fixed-point, the comparison is done in a signed sense. 9024 9025`(gtu:M X Y)' 9026 Like `gt' but does unsigned comparison, on fixed-point numbers 9027 only. 9028 9029`(lt:M X Y)' 9030`(ltu:M X Y)' 9031 Like `gt' and `gtu' but test for "less than". 9032 9033`(ge:M X Y)' 9034`(geu:M X Y)' 9035 Like `gt' and `gtu' but test for "greater than or equal". 9036 9037`(le:M X Y)' 9038`(leu:M X Y)' 9039 Like `gt' and `gtu' but test for "less than or equal". 9040 9041`(if_then_else COND THEN ELSE)' 9042 This is not a comparison operation but is listed here because it is 9043 always used in conjunction with a comparison operation. To be 9044 precise, COND is a comparison expression. This expression 9045 represents a choice, according to COND, between the value 9046 represented by THEN and the one represented by ELSE. 9047 9048 On most machines, `if_then_else' expressions are valid only to 9049 express conditional jumps. 9050 9051`(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 9052 Similar to `if_then_else', but more general. Each of TEST1, 9053 TEST2, ... is performed in turn. The result of this expression is 9054 the VALUE corresponding to the first nonzero test, or DEFAULT if 9055 none of the tests are nonzero expressions. 9056 9057 This is currently not valid for instruction patterns and is 9058 supported only for insn attributes. *Note Insn Attributes::. 9059 9060 9061File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 9062 906310.11 Bit-Fields 9064================ 9065 9066Special expression codes exist to represent bit-field instructions. 9067 9068`(sign_extract:M LOC SIZE POS)' 9069 This represents a reference to a sign-extended bit-field contained 9070 or starting in LOC (a memory or register reference). The bit-field 9071 is SIZE bits wide and starts at bit POS. The compilation option 9072 `BITS_BIG_ENDIAN' says which end of the memory unit POS counts 9073 from. 9074 9075 If LOC is in memory, its mode must be a single-byte integer mode. 9076 If LOC is in a register, the mode to use is specified by the 9077 operand of the `insv' or `extv' pattern (*note Standard Names::) 9078 and is usually a full-word integer mode, which is the default if 9079 none is specified. 9080 9081 The mode of POS is machine-specific and is also specified in the 9082 `insv' or `extv' pattern. 9083 9084 The mode M is the same as the mode that would be used for LOC if 9085 it were a register. 9086 9087 A `sign_extract' can not appear as an lvalue, or part thereof, in 9088 RTL. 9089 9090`(zero_extract:M LOC SIZE POS)' 9091 Like `sign_extract' but refers to an unsigned or zero-extended 9092 bit-field. The same sequence of bits are extracted, but they are 9093 filled to an entire word with zeros instead of by sign-extension. 9094 9095 Unlike `sign_extract', this type of expressions can be lvalues in 9096 RTL; they may appear on the left side of an assignment, indicating 9097 insertion of a value into the specified bit-field. 9098 9099 9100File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 9101 910210.12 Vector Operations 9103======================= 9104 9105All normal RTL expressions can be used with vector modes; they are 9106interpreted as operating on each part of the vector independently. 9107Additionally, there are a few new expressions to describe specific 9108vector operations. 9109 9110`(vec_merge:M VEC1 VEC2 ITEMS)' 9111 This describes a merge operation between two vectors. The result 9112 is a vector of mode M; its elements are selected from either VEC1 9113 or VEC2. Which elements are selected is described by ITEMS, which 9114 is a bit mask represented by a `const_int'; a zero bit indicates 9115 the corresponding element in the result vector is taken from VEC2 9116 while a set bit indicates it is taken from VEC1. 9117 9118`(vec_select:M VEC1 SELECTION)' 9119 This describes an operation that selects parts of a vector. VEC1 9120 is the source vector, and SELECTION is a `parallel' that contains a 9121 `const_int' for each of the subparts of the result vector, giving 9122 the number of the source subpart that should be stored into it. 9123 The result mode M is either the submode for a single element of 9124 VEC1 (if only one subpart is selected), or another vector mode 9125 with that element submode (if multiple subparts are selected). 9126 9127`(vec_concat:M VEC1 VEC2)' 9128 Describes a vector concat operation. The result is a 9129 concatenation of the vectors VEC1 and VEC2; its length is the sum 9130 of the lengths of the two inputs. 9131 9132`(vec_duplicate:M VEC)' 9133 This operation converts a small vector into a larger one by 9134 duplicating the input values. The output vector mode must have 9135 the same submodes as the input vector mode, and the number of 9136 output parts must be an integer multiple of the number of input 9137 parts. 9138 9139 9140 9141File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 9142 914310.13 Conversions 9144================= 9145 9146All conversions between machine modes must be represented by explicit 9147conversion operations. For example, an expression which is the sum of 9148a byte and a full word cannot be written as `(plus:SI (reg:QI 34) 9149(reg:SI 80))' because the `plus' operation requires two operands of the 9150same machine mode. Therefore, the byte-sized operand is enclosed in a 9151conversion operation, as in 9152 9153 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 9154 9155 The conversion operation is not a mere placeholder, because there may 9156be more than one way of converting from a given starting mode to the 9157desired final mode. The conversion operation code says how to do it. 9158 9159 For all conversion operations, X must not be `VOIDmode' because the 9160mode in which to do the conversion would not be known. The conversion 9161must either be done at compile-time or X must be placed into a register. 9162 9163`(sign_extend:M X)' 9164 Represents the result of sign-extending the value X to machine 9165 mode M. M must be a fixed-point mode and X a fixed-point value of 9166 a mode narrower than M. 9167 9168`(zero_extend:M X)' 9169 Represents the result of zero-extending the value X to machine 9170 mode M. M must be a fixed-point mode and X a fixed-point value of 9171 a mode narrower than M. 9172 9173`(float_extend:M X)' 9174 Represents the result of extending the value X to machine mode M. 9175 M must be a floating point mode and X a floating point value of a 9176 mode narrower than M. 9177 9178`(truncate:M X)' 9179 Represents the result of truncating the value X to machine mode M. 9180 M must be a fixed-point mode and X a fixed-point value of a mode 9181 wider than M. 9182 9183`(ss_truncate:M X)' 9184 Represents the result of truncating the value X to machine mode M, 9185 using signed saturation in the case of overflow. Both M and the 9186 mode of X must be fixed-point modes. 9187 9188`(us_truncate:M X)' 9189 Represents the result of truncating the value X to machine mode M, 9190 using unsigned saturation in the case of overflow. Both M and the 9191 mode of X must be fixed-point modes. 9192 9193`(float_truncate:M X)' 9194 Represents the result of truncating the value X to machine mode M. 9195 M must be a floating point mode and X a floating point value of a 9196 mode wider than M. 9197 9198`(float:M X)' 9199 Represents the result of converting fixed point value X, regarded 9200 as signed, to floating point mode M. 9201 9202`(unsigned_float:M X)' 9203 Represents the result of converting fixed point value X, regarded 9204 as unsigned, to floating point mode M. 9205 9206`(fix:M X)' 9207 When M is a floating-point mode, represents the result of 9208 converting floating point value X (valid for mode M) to an 9209 integer, still represented in floating point mode M, by rounding 9210 towards zero. 9211 9212 When M is a fixed-point mode, represents the result of converting 9213 floating point value X to mode M, regarded as signed. How 9214 rounding is done is not specified, so this operation may be used 9215 validly in compiling C code only for integer-valued operands. 9216 9217`(unsigned_fix:M X)' 9218 Represents the result of converting floating point value X to 9219 fixed point mode M, regarded as unsigned. How rounding is done is 9220 not specified. 9221 9222`(fract_convert:M X)' 9223 Represents the result of converting fixed-point value X to 9224 fixed-point mode M, signed integer value X to fixed-point mode M, 9225 floating-point value X to fixed-point mode M, fixed-point value X 9226 to integer mode M regarded as signed, or fixed-point value X to 9227 floating-point mode M. When overflows or underflows happen, the 9228 results are undefined. 9229 9230`(sat_fract:M X)' 9231 Represents the result of converting fixed-point value X to 9232 fixed-point mode M, signed integer value X to fixed-point mode M, 9233 or floating-point value X to fixed-point mode M. When overflows 9234 or underflows happen, the results are saturated to the maximum or 9235 the minimum. 9236 9237`(unsigned_fract_convert:M X)' 9238 Represents the result of converting fixed-point value X to integer 9239 mode M regarded as unsigned, or unsigned integer value X to 9240 fixed-point mode M. When overflows or underflows happen, the 9241 results are undefined. 9242 9243`(unsigned_sat_fract:M X)' 9244 Represents the result of converting unsigned integer value X to 9245 fixed-point mode M. When overflows or underflows happen, the 9246 results are saturated to the maximum or the minimum. 9247 9248 9249File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 9250 925110.14 Declarations 9252================== 9253 9254Declaration expression codes do not represent arithmetic operations but 9255rather state assertions about their operands. 9256 9257`(strict_low_part (subreg:M (reg:N R) 0))' 9258 This expression code is used in only one context: as the 9259 destination operand of a `set' expression. In addition, the 9260 operand of this expression must be a non-paradoxical `subreg' 9261 expression. 9262 9263 The presence of `strict_low_part' says that the part of the 9264 register which is meaningful in mode N, but is not part of mode M, 9265 is not to be altered. Normally, an assignment to such a subreg is 9266 allowed to have undefined effects on the rest of the register when 9267 M is less than a word. 9268 9269 9270File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 9271 927210.15 Side Effect Expressions 9273============================= 9274 9275The expression codes described so far represent values, not actions. 9276But machine instructions never produce values; they are meaningful only 9277for their side effects on the state of the machine. Special expression 9278codes are used to represent side effects. 9279 9280 The body of an instruction is always one of these side effect codes; 9281the codes described above, which represent values, appear only as the 9282operands of these. 9283 9284`(set LVAL X)' 9285 Represents the action of storing the value of X into the place 9286 represented by LVAL. LVAL must be an expression representing a 9287 place that can be stored in: `reg' (or `subreg', `strict_low_part' 9288 or `zero_extract'), `mem', `pc', `parallel', or `cc0'. 9289 9290 If LVAL is a `reg', `subreg' or `mem', it has a machine mode; then 9291 X must be valid for that mode. 9292 9293 If LVAL is a `reg' whose machine mode is less than the full width 9294 of the register, then it means that the part of the register 9295 specified by the machine mode is given the specified value and the 9296 rest of the register receives an undefined value. Likewise, if 9297 LVAL is a `subreg' whose machine mode is narrower than the mode of 9298 the register, the rest of the register can be changed in an 9299 undefined way. 9300 9301 If LVAL is a `strict_low_part' of a subreg, then the part of the 9302 register specified by the machine mode of the `subreg' is given 9303 the value X and the rest of the register is not changed. 9304 9305 If LVAL is a `zero_extract', then the referenced part of the 9306 bit-field (a memory or register reference) specified by the 9307 `zero_extract' is given the value X and the rest of the bit-field 9308 is not changed. Note that `sign_extract' can not appear in LVAL. 9309 9310 If LVAL is `(cc0)', it has no machine mode, and X may be either a 9311 `compare' expression or a value that may have any mode. The 9312 latter case represents a "test" instruction. The expression `(set 9313 (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare (reg:M N) 9314 (const_int 0)))'. Use the former expression to save space during 9315 the compilation. 9316 9317 If LVAL is a `parallel', it is used to represent the case of a 9318 function returning a structure in multiple registers. Each element 9319 of the `parallel' is an `expr_list' whose first operand is a `reg' 9320 and whose second operand is a `const_int' representing the offset 9321 (in bytes) into the structure at which the data in that register 9322 corresponds. The first element may be null to indicate that the 9323 structure is also passed partly in memory. 9324 9325 If LVAL is `(pc)', we have a jump instruction, and the 9326 possibilities for X are very limited. It may be a `label_ref' 9327 expression (unconditional jump). It may be an `if_then_else' 9328 (conditional jump), in which case either the second or the third 9329 operand must be `(pc)' (for the case which does not jump) and the 9330 other of the two must be a `label_ref' (for the case which does 9331 jump). X may also be a `mem' or `(plus:SI (pc) Y)', where Y may 9332 be a `reg' or a `mem'; these unusual patterns are used to 9333 represent jumps through branch tables. 9334 9335 If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not 9336 be `VOIDmode' and the mode of X must be valid for the mode of LVAL. 9337 9338 LVAL is customarily accessed with the `SET_DEST' macro and X with 9339 the `SET_SRC' macro. 9340 9341`(return)' 9342 As the sole expression in a pattern, represents a return from the 9343 current function, on machines where this can be done with one 9344 instruction, such as VAXen. On machines where a multi-instruction 9345 "epilogue" must be executed in order to return from the function, 9346 returning is done by jumping to a label which precedes the 9347 epilogue, and the `return' expression code is never used. 9348 9349 Inside an `if_then_else' expression, represents the value to be 9350 placed in `pc' to return to the caller. 9351 9352 Note that an insn pattern of `(return)' is logically equivalent to 9353 `(set (pc) (return))', but the latter form is never used. 9354 9355`(call FUNCTION NARGS)' 9356 Represents a function call. FUNCTION is a `mem' expression whose 9357 address is the address of the function to be called. NARGS is an 9358 expression which can be used for two purposes: on some machines it 9359 represents the number of bytes of stack argument; on others, it 9360 represents the number of argument registers. 9361 9362 Each machine has a standard machine mode which FUNCTION must have. 9363 The machine description defines macro `FUNCTION_MODE' to expand 9364 into the requisite mode name. The purpose of this mode is to 9365 specify what kind of addressing is allowed, on machines where the 9366 allowed kinds of addressing depend on the machine mode being 9367 addressed. 9368 9369`(clobber X)' 9370 Represents the storing or possible storing of an unpredictable, 9371 undescribed value into X, which must be a `reg', `scratch', 9372 `parallel' or `mem' expression. 9373 9374 One place this is used is in string instructions that store 9375 standard values into particular hard registers. It may not be 9376 worth the trouble to describe the values that are stored, but it 9377 is essential to inform the compiler that the registers will be 9378 altered, lest it attempt to keep data in them across the string 9379 instruction. 9380 9381 If X is `(mem:BLK (const_int 0))' or `(mem:BLK (scratch))', it 9382 means that all memory locations must be presumed clobbered. If X 9383 is a `parallel', it has the same meaning as a `parallel' in a 9384 `set' expression. 9385 9386 Note that the machine description classifies certain hard 9387 registers as "call-clobbered". All function call instructions are 9388 assumed by default to clobber these registers, so there is no need 9389 to use `clobber' expressions to indicate this fact. Also, each 9390 function call is assumed to have the potential to alter any memory 9391 location, unless the function is declared `const'. 9392 9393 If the last group of expressions in a `parallel' are each a 9394 `clobber' expression whose arguments are `reg' or `match_scratch' 9395 (*note RTL Template::) expressions, the combiner phase can add the 9396 appropriate `clobber' expressions to an insn it has constructed 9397 when doing so will cause a pattern to be matched. 9398 9399 This feature can be used, for example, on a machine that whose 9400 multiply and add instructions don't use an MQ register but which 9401 has an add-accumulate instruction that does clobber the MQ 9402 register. Similarly, a combined instruction might require a 9403 temporary register while the constituent instructions might not. 9404 9405 When a `clobber' expression for a register appears inside a 9406 `parallel' with other side effects, the register allocator 9407 guarantees that the register is unoccupied both before and after 9408 that insn if it is a hard register clobber. For pseudo-register 9409 clobber, the register allocator and the reload pass do not assign 9410 the same hard register to the clobber and the input operands if 9411 there is an insn alternative containing the `&' constraint (*note 9412 Modifiers::) for the clobber and the hard register is in register 9413 classes of the clobber in the alternative. You can clobber either 9414 a specific hard register, a pseudo register, or a `scratch' 9415 expression; in the latter two cases, GCC will allocate a hard 9416 register that is available there for use as a temporary. 9417 9418 For instructions that require a temporary register, you should use 9419 `scratch' instead of a pseudo-register because this will allow the 9420 combiner phase to add the `clobber' when required. You do this by 9421 coding (`clobber' (`match_scratch' ...)). If you do clobber a 9422 pseudo register, use one which appears nowhere else--generate a 9423 new one each time. Otherwise, you may confuse CSE. 9424 9425 There is one other known use for clobbering a pseudo register in a 9426 `parallel': when one of the input operands of the insn is also 9427 clobbered by the insn. In this case, using the same pseudo 9428 register in the clobber and elsewhere in the insn produces the 9429 expected results. 9430 9431`(use X)' 9432 Represents the use of the value of X. It indicates that the value 9433 in X at this point in the program is needed, even though it may 9434 not be apparent why this is so. Therefore, the compiler will not 9435 attempt to delete previous instructions whose only effect is to 9436 store a value in X. X must be a `reg' expression. 9437 9438 In some situations, it may be tempting to add a `use' of a 9439 register in a `parallel' to describe a situation where the value 9440 of a special register will modify the behavior of the instruction. 9441 A hypothetical example might be a pattern for an addition that can 9442 either wrap around or use saturating addition depending on the 9443 value of a special control register: 9444 9445 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 9446 (reg:SI 4)] 0)) 9447 (use (reg:SI 1))]) 9448 9449 This will not work, several of the optimizers only look at 9450 expressions locally; it is very likely that if you have multiple 9451 insns with identical inputs to the `unspec', they will be 9452 optimized away even if register 1 changes in between. 9453 9454 This means that `use' can _only_ be used to describe that the 9455 register is live. You should think twice before adding `use' 9456 statements, more often you will want to use `unspec' instead. The 9457 `use' RTX is most commonly useful to describe that a fixed 9458 register is implicitly used in an insn. It is also safe to use in 9459 patterns where the compiler knows for other reasons that the result 9460 of the whole pattern is variable, such as `movmemM' or `call' 9461 patterns. 9462 9463 During the reload phase, an insn that has a `use' as pattern can 9464 carry a reg_equal note. These `use' insns will be deleted before 9465 the reload phase exits. 9466 9467 During the delayed branch scheduling phase, X may be an insn. 9468 This indicates that X previously was located at this place in the 9469 code and its data dependencies need to be taken into account. 9470 These `use' insns will be deleted before the delayed branch 9471 scheduling phase exits. 9472 9473`(parallel [X0 X1 ...])' 9474 Represents several side effects performed in parallel. The square 9475 brackets stand for a vector; the operand of `parallel' is a vector 9476 of expressions. X0, X1 and so on are individual side effect 9477 expressions--expressions of code `set', `call', `return', 9478 `clobber' or `use'. 9479 9480 "In parallel" means that first all the values used in the 9481 individual side-effects are computed, and second all the actual 9482 side-effects are performed. For example, 9483 9484 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 9485 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 9486 9487 says unambiguously that the values of hard register 1 and the 9488 memory location addressed by it are interchanged. In both places 9489 where `(reg:SI 1)' appears as a memory address it refers to the 9490 value in register 1 _before_ the execution of the insn. 9491 9492 It follows that it is _incorrect_ to use `parallel' and expect the 9493 result of one `set' to be available for the next one. For 9494 example, people sometimes attempt to represent a jump-if-zero 9495 instruction this way: 9496 9497 (parallel [(set (cc0) (reg:SI 34)) 9498 (set (pc) (if_then_else 9499 (eq (cc0) (const_int 0)) 9500 (label_ref ...) 9501 (pc)))]) 9502 9503 But this is incorrect, because it says that the jump condition 9504 depends on the condition code value _before_ this instruction, not 9505 on the new value that is set by this instruction. 9506 9507 Peephole optimization, which takes place together with final 9508 assembly code output, can produce insns whose patterns consist of 9509 a `parallel' whose elements are the operands needed to output the 9510 resulting assembler code--often `reg', `mem' or constant 9511 expressions. This would not be well-formed RTL at any other stage 9512 in compilation, but it is ok then because no further optimization 9513 remains to be done. However, the definition of the macro 9514 `NOTICE_UPDATE_CC', if any, must deal with such insns if you 9515 define any peephole optimizations. 9516 9517`(cond_exec [COND EXPR])' 9518 Represents a conditionally executed expression. The EXPR is 9519 executed only if the COND is nonzero. The COND expression must 9520 not have side-effects, but the EXPR may very well have 9521 side-effects. 9522 9523`(sequence [INSNS ...])' 9524 Represents a sequence of insns. Each of the INSNS that appears in 9525 the vector is suitable for appearing in the chain of insns, so it 9526 must be an `insn', `jump_insn', `call_insn', `code_label', 9527 `barrier' or `note'. 9528 9529 A `sequence' RTX is never placed in an actual insn during RTL 9530 generation. It represents the sequence of insns that result from a 9531 `define_expand' _before_ those insns are passed to `emit_insn' to 9532 insert them in the chain of insns. When actually inserted, the 9533 individual sub-insns are separated out and the `sequence' is 9534 forgotten. 9535 9536 After delay-slot scheduling is completed, an insn and all the 9537 insns that reside in its delay slots are grouped together into a 9538 `sequence'. The insn requiring the delay slot is the first insn 9539 in the vector; subsequent insns are to be placed in the delay slot. 9540 9541 `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 9542 indicate that a branch insn should be used that will conditionally 9543 annul the effect of the insns in the delay slots. In such a case, 9544 `INSN_FROM_TARGET_P' indicates that the insn is from the target of 9545 the branch and should be executed only if the branch is taken; 9546 otherwise the insn should be executed only if the branch is not 9547 taken. *Note Delay Slots::. 9548 9549 These expression codes appear in place of a side effect, as the body of 9550an insn, though strictly speaking they do not always describe side 9551effects as such: 9552 9553`(asm_input S)' 9554 Represents literal assembler code as described by the string S. 9555 9556`(unspec [OPERANDS ...] INDEX)' 9557`(unspec_volatile [OPERANDS ...] INDEX)' 9558 Represents a machine-specific operation on OPERANDS. INDEX 9559 selects between multiple machine-specific operations. 9560 `unspec_volatile' is used for volatile operations and operations 9561 that may trap; `unspec' is used for other operations. 9562 9563 These codes may appear inside a `pattern' of an insn, inside a 9564 `parallel', or inside an expression. 9565 9566`(addr_vec:M [LR0 LR1 ...])' 9567 Represents a table of jump addresses. The vector elements LR0, 9568 etc., are `label_ref' expressions. The mode M specifies how much 9569 space is given to each address; normally M would be `Pmode'. 9570 9571`(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 9572 Represents a table of jump addresses expressed as offsets from 9573 BASE. The vector elements LR0, etc., are `label_ref' expressions 9574 and so is BASE. The mode M specifies how much space is given to 9575 each address-difference. MIN and MAX are set up by branch 9576 shortening and hold a label with a minimum and a maximum address, 9577 respectively. FLAGS indicates the relative position of BASE, MIN 9578 and MAX to the containing insn and of MIN and MAX to BASE. See 9579 rtl.def for details. 9580 9581`(prefetch:M ADDR RW LOCALITY)' 9582 Represents prefetch of memory at address ADDR. Operand RW is 1 if 9583 the prefetch is for data to be written, 0 otherwise; targets that 9584 do not support write prefetches should treat this as a normal 9585 prefetch. Operand LOCALITY specifies the amount of temporal 9586 locality; 0 if there is none or 1, 2, or 3 for increasing levels 9587 of temporal locality; targets that do not support locality hints 9588 should ignore this. 9589 9590 This insn is used to minimize cache-miss latency by moving data 9591 into a cache before it is accessed. It should use only 9592 non-faulting data prefetch instructions. 9593 9594 9595File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 9596 959710.16 Embedded Side-Effects on Addresses 9598======================================== 9599 9600Six special side-effect expression codes appear as memory addresses. 9601 9602`(pre_dec:M X)' 9603 Represents the side effect of decrementing X by a standard amount 9604 and represents also the value that X has after being decremented. 9605 X must be a `reg' or `mem', but most machines allow only a `reg'. 9606 M must be the machine mode for pointers on the machine in use. 9607 The amount X is decremented by is the length in bytes of the 9608 machine mode of the containing memory reference of which this 9609 expression serves as the address. Here is an example of its use: 9610 9611 (mem:DF (pre_dec:SI (reg:SI 39))) 9612 9613 This says to decrement pseudo register 39 by the length of a 9614 `DFmode' value and use the result to address a `DFmode' value. 9615 9616`(pre_inc:M X)' 9617 Similar, but specifies incrementing X instead of decrementing it. 9618 9619`(post_dec:M X)' 9620 Represents the same side effect as `pre_dec' but a different 9621 value. The value represented here is the value X has before being 9622 decremented. 9623 9624`(post_inc:M X)' 9625 Similar, but specifies incrementing X instead of decrementing it. 9626 9627`(post_modify:M X Y)' 9628 Represents the side effect of setting X to Y and represents X 9629 before X is modified. X must be a `reg' or `mem', but most 9630 machines allow only a `reg'. M must be the machine mode for 9631 pointers on the machine in use. 9632 9633 The expression Y must be one of three forms: `(plus:M X Z)', 9634 `(minus:M X Z)', or `(plus:M X I)', where Z is an index register 9635 and I is a constant. 9636 9637 Here is an example of its use: 9638 9639 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 9640 (reg:SI 48)))) 9641 9642 This says to modify pseudo register 42 by adding the contents of 9643 pseudo register 48 to it, after the use of what ever 42 points to. 9644 9645`(pre_modify:M X EXPR)' 9646 Similar except side effects happen before the use. 9647 9648 These embedded side effect expressions must be used with care. 9649Instruction patterns may not use them. Until the `flow' pass of the 9650compiler, they may occur only to represent pushes onto the stack. The 9651`flow' pass finds cases where registers are incremented or decremented 9652in one instruction and used as an address shortly before or after; 9653these cases are then transformed to use pre- or post-increment or 9654-decrement. 9655 9656 If a register used as the operand of these expressions is used in 9657another address in an insn, the original value of the register is used. 9658Uses of the register outside of an address are not permitted within the 9659same insn as a use in an embedded side effect expression because such 9660insns behave differently on different machines and hence must be treated 9661as ambiguous and disallowed. 9662 9663 An instruction that can be represented with an embedded side effect 9664could also be represented using `parallel' containing an additional 9665`set' to describe how the address register is altered. This is not 9666done because machines that allow these operations at all typically 9667allow them wherever a memory address is called for. Describing them as 9668additional parallel stores would require doubling the number of entries 9669in the machine description. 9670 9671 9672File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 9673 967410.17 Assembler Instructions as Expressions 9675=========================================== 9676 9677The RTX code `asm_operands' represents a value produced by a 9678user-specified assembler instruction. It is used to represent an `asm' 9679statement with arguments. An `asm' statement with a single output 9680operand, like this: 9681 9682 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 9683 9684is represented using a single `asm_operands' RTX which represents the 9685value that is stored in `outputvar': 9686 9687 (set RTX-FOR-OUTPUTVAR 9688 (asm_operands "foo %1,%2,%0" "a" 0 9689 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 9690 [(asm_input:M1 "g") 9691 (asm_input:M2 "di")])) 9692 9693Here the operands of the `asm_operands' RTX are the assembler template 9694string, the output-operand's constraint, the index-number of the output 9695operand among the output operands specified, a vector of input operand 9696RTX's, and a vector of input-operand modes and constraints. The mode 9697M1 is the mode of the sum `x+y'; M2 is that of `*z'. 9698 9699 When an `asm' statement has multiple output values, its insn has 9700several such `set' RTX's inside of a `parallel'. Each `set' contains 9701an `asm_operands'; all of these share the same assembler template and 9702vectors, but each contains the constraint for the respective output 9703operand. They are also distinguished by the output-operand index 9704number, which is 0, 1, ... for successive output operands. 9705 9706 9707File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 9708 970910.18 Variable Location Debug Information in RTL 9710================================================ 9711 9712Variable tracking relies on `MEM_EXPR' and `REG_EXPR' annotations to 9713determine what user variables memory and register references refer to. 9714 9715 Variable tracking at assignments uses these notes only when they refer 9716to variables that live at fixed locations (e.g., addressable variables, 9717global non-automatic variables). For variables whose location may 9718vary, it relies on the following types of notes. 9719 9720`(var_location:MODE VAR EXP STAT)' 9721 Binds variable `var', a tree, to value EXP, an RTL expression. It 9722 appears only in `NOTE_INSN_VAR_LOCATION' and `DEBUG_INSN's, with 9723 slightly different meanings. MODE, if present, represents the 9724 mode of EXP, which is useful if it is a modeless expression. STAT 9725 is only meaningful in notes, indicating whether the variable is 9726 known to be initialized or uninitialized. 9727 9728`(debug_expr:MODE DECL)' 9729 Stands for the value bound to the `DEBUG_EXPR_DECL' DECL, that 9730 points back to it, within value expressions in `VAR_LOCATION' 9731 nodes. 9732 9733 9734 9735File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 9736 973710.19 Insns 9738=========== 9739 9740The RTL representation of the code for a function is a doubly-linked 9741chain of objects called "insns". Insns are expressions with special 9742codes that are used for no other purpose. Some insns are actual 9743instructions; others represent dispatch tables for `switch' statements; 9744others represent labels to jump to or various sorts of declarative 9745information. 9746 9747 In addition to its own specific data, each insn must have a unique 9748id-number that distinguishes it from all other insns in the current 9749function (after delayed branch scheduling, copies of an insn with the 9750same id-number may be present in multiple places in a function, but 9751these copies will always be identical and will only appear inside a 9752`sequence'), and chain pointers to the preceding and following insns. 9753These three fields occupy the same position in every insn, independent 9754of the expression code of the insn. They could be accessed with `XEXP' 9755and `XINT', but instead three special macros are always used: 9756 9757`INSN_UID (I)' 9758 Accesses the unique id of insn I. 9759 9760`PREV_INSN (I)' 9761 Accesses the chain pointer to the insn preceding I. If I is the 9762 first insn, this is a null pointer. 9763 9764`NEXT_INSN (I)' 9765 Accesses the chain pointer to the insn following I. If I is the 9766 last insn, this is a null pointer. 9767 9768 The first insn in the chain is obtained by calling `get_insns'; the 9769last insn is the result of calling `get_last_insn'. Within the chain 9770delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers must 9771always correspond: if INSN is not the first insn, 9772 9773 NEXT_INSN (PREV_INSN (INSN)) == INSN 9774 9775is always true and if INSN is not the last insn, 9776 9777 PREV_INSN (NEXT_INSN (INSN)) == INSN 9778 9779is always true. 9780 9781 After delay slot scheduling, some of the insns in the chain might be 9782`sequence' expressions, which contain a vector of insns. The value of 9783`NEXT_INSN' in all but the last of these insns is the next insn in the 9784vector; the value of `NEXT_INSN' of the last insn in the vector is the 9785same as the value of `NEXT_INSN' for the `sequence' in which it is 9786contained. Similar rules apply for `PREV_INSN'. 9787 9788 This means that the above invariants are not necessarily true for insns 9789inside `sequence' expressions. Specifically, if INSN is the first insn 9790in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn containing 9791the `sequence' expression, as is the value of `PREV_INSN (NEXT_INSN 9792(INSN))' if INSN is the last insn in the `sequence' expression. You 9793can use these expressions to find the containing `sequence' expression. 9794 9795 Every insn has one of the following expression codes: 9796 9797`insn' 9798 The expression code `insn' is used for instructions that do not 9799 jump and do not do function calls. `sequence' expressions are 9800 always contained in insns with code `insn' even if one of those 9801 insns should jump or do function calls. 9802 9803 Insns with code `insn' have four additional fields beyond the three 9804 mandatory ones listed above. These four are described in a table 9805 below. 9806 9807`jump_insn' 9808 The expression code `jump_insn' is used for instructions that may 9809 jump (or, more generally, may contain `label_ref' expressions to 9810 which `pc' can be set in that instruction). If there is an 9811 instruction to return from the current function, it is recorded as 9812 a `jump_insn'. 9813 9814 `jump_insn' insns have the same extra fields as `insn' insns, 9815 accessed in the same way and in addition contain a field 9816 `JUMP_LABEL' which is defined once jump optimization has completed. 9817 9818 For simple conditional and unconditional jumps, this field contains 9819 the `code_label' to which this insn will (possibly conditionally) 9820 branch. In a more complex jump, `JUMP_LABEL' records one of the 9821 labels that the insn refers to; other jump target labels are 9822 recorded as `REG_LABEL_TARGET' notes. The exception is `addr_vec' 9823 and `addr_diff_vec', where `JUMP_LABEL' is `NULL_RTX' and the only 9824 way to find the labels is to scan the entire body of the insn. 9825 9826 Return insns count as jumps, but since they do not refer to any 9827 labels, their `JUMP_LABEL' is `NULL_RTX'. 9828 9829`call_insn' 9830 The expression code `call_insn' is used for instructions that may 9831 do function calls. It is important to distinguish these 9832 instructions because they imply that certain registers and memory 9833 locations may be altered unpredictably. 9834 9835 `call_insn' insns have the same extra fields as `insn' insns, 9836 accessed in the same way and in addition contain a field 9837 `CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 9838 `expr_list' expressions) containing `use' and `clobber' 9839 expressions that denote hard registers and `MEM's used or 9840 clobbered by the called function. 9841 9842 A `MEM' generally points to a stack slots in which arguments passed 9843 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 9844 Register Arguments.) are stored. If the argument is caller-copied 9845 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 9846 will be mentioned in `CLOBBER' and `USE' entries; if it's 9847 callee-copied, only a `USE' will appear, and the `MEM' may point 9848 to addresses that are not stack slots. 9849 9850 `CLOBBER'ed registers in this list augment registers specified in 9851 `CALL_USED_REGISTERS' (*note Register Basics::). 9852 9853`code_label' 9854 A `code_label' insn represents a label that a jump insn can jump 9855 to. It contains two special fields of data in addition to the 9856 three standard ones. `CODE_LABEL_NUMBER' is used to hold the 9857 "label number", a number that identifies this label uniquely among 9858 all the labels in the compilation (not just in the current 9859 function). Ultimately, the label is represented in the assembler 9860 output as an assembler label, usually of the form `LN' where N is 9861 the label number. 9862 9863 When a `code_label' appears in an RTL expression, it normally 9864 appears within a `label_ref' which represents the address of the 9865 label, as a number. 9866 9867 Besides as a `code_label', a label can also be represented as a 9868 `note' of type `NOTE_INSN_DELETED_LABEL'. 9869 9870 The field `LABEL_NUSES' is only defined once the jump optimization 9871 phase is completed. It contains the number of times this label is 9872 referenced in the current function. 9873 9874 The field `LABEL_KIND' differentiates four different types of 9875 labels: `LABEL_NORMAL', `LABEL_STATIC_ENTRY', 9876 `LABEL_GLOBAL_ENTRY', and `LABEL_WEAK_ENTRY'. The only labels 9877 that do not have type `LABEL_NORMAL' are "alternate entry points" 9878 to the current function. These may be static (visible only in the 9879 containing translation unit), global (exposed to all translation 9880 units), or weak (global, but can be overridden by another symbol 9881 with the same name). 9882 9883 Much of the compiler treats all four kinds of label identically. 9884 Some of it needs to know whether or not a label is an alternate 9885 entry point; for this purpose, the macro `LABEL_ALT_ENTRY_P' is 9886 provided. It is equivalent to testing whether `LABEL_KIND (label) 9887 == LABEL_NORMAL'. The only place that cares about the distinction 9888 between static, global, and weak alternate entry points, besides 9889 the front-end code that creates them, is the function 9890 `output_alternate_entry_point', in `final.c'. 9891 9892 To set the kind of a label, use the `SET_LABEL_KIND' macro. 9893 9894`barrier' 9895 Barriers are placed in the instruction stream when control cannot 9896 flow past them. They are placed after unconditional jump 9897 instructions to indicate that the jumps are unconditional and 9898 after calls to `volatile' functions, which do not return (e.g., 9899 `exit'). They contain no information beyond the three standard 9900 fields. 9901 9902`note' 9903 `note' insns are used to represent additional debugging and 9904 declarative information. They contain two nonstandard fields, an 9905 integer which is accessed with the macro `NOTE_LINE_NUMBER' and a 9906 string accessed with `NOTE_SOURCE_FILE'. 9907 9908 If `NOTE_LINE_NUMBER' is positive, the note represents the 9909 position of a source line and `NOTE_SOURCE_FILE' is the source 9910 file name that the line came from. These notes control generation 9911 of line number data in the assembler output. 9912 9913 Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a 9914 code with one of the following values (and `NOTE_SOURCE_FILE' must 9915 contain a null pointer): 9916 9917 `NOTE_INSN_DELETED' 9918 Such a note is completely ignorable. Some passes of the 9919 compiler delete insns by altering them into notes of this 9920 kind. 9921 9922 `NOTE_INSN_DELETED_LABEL' 9923 This marks what used to be a `code_label', but was not used 9924 for other purposes than taking its address and was 9925 transformed to mark that no code jumps to it. 9926 9927 `NOTE_INSN_BLOCK_BEG' 9928 `NOTE_INSN_BLOCK_END' 9929 These types of notes indicate the position of the beginning 9930 and end of a level of scoping of variable names. They 9931 control the output of debugging information. 9932 9933 `NOTE_INSN_EH_REGION_BEG' 9934 `NOTE_INSN_EH_REGION_END' 9935 These types of notes indicate the position of the beginning 9936 and end of a level of scoping for exception handling. 9937 `NOTE_BLOCK_NUMBER' identifies which `CODE_LABEL' or `note' 9938 of type `NOTE_INSN_DELETED_LABEL' is associated with the 9939 given region. 9940 9941 `NOTE_INSN_LOOP_BEG' 9942 `NOTE_INSN_LOOP_END' 9943 These types of notes indicate the position of the beginning 9944 and end of a `while' or `for' loop. They enable the loop 9945 optimizer to find loops quickly. 9946 9947 `NOTE_INSN_LOOP_CONT' 9948 Appears at the place in a loop that `continue' statements 9949 jump to. 9950 9951 `NOTE_INSN_LOOP_VTOP' 9952 This note indicates the place in a loop where the exit test 9953 begins for those loops in which the exit test has been 9954 duplicated. This position becomes another virtual start of 9955 the loop when considering loop invariants. 9956 9957 `NOTE_INSN_FUNCTION_BEG' 9958 Appears at the start of the function body, after the function 9959 prologue. 9960 9961 `NOTE_INSN_VAR_LOCATION' 9962 This note is used to generate variable location debugging 9963 information. It indicates that the user variable in its 9964 `VAR_LOCATION' operand is at the location given in the RTL 9965 expression, or holds a value that can be computed by 9966 evaluating the RTL expression from that static point in the 9967 program up to the next such note for the same user variable. 9968 9969 9970 These codes are printed symbolically when they appear in debugging 9971 dumps. 9972 9973`debug_insn' 9974 The expression code `debug_insn' is used for pseudo-instructions 9975 that hold debugging information for variable tracking at 9976 assignments (see `-fvar-tracking-assignments' option). They are 9977 the RTL representation of `GIMPLE_DEBUG' statements (*note 9978 `GIMPLE_DEBUG'::), with a `VAR_LOCATION' operand that binds a user 9979 variable tree to an RTL representation of the `value' in the 9980 corresponding statement. A `DEBUG_EXPR' in it stands for the 9981 value bound to the corresponding `DEBUG_EXPR_DECL'. 9982 9983 Throughout optimization passes, binding information is kept in 9984 pseudo-instruction form, so that, unlike notes, it gets the same 9985 treatment and adjustments that regular instructions would. It is 9986 the variable tracking pass that turns these pseudo-instructions 9987 into var location notes, analyzing control flow, value 9988 equivalences and changes to registers and memory referenced in 9989 value expressions, propagating the values of debug temporaries and 9990 determining expressions that can be used to compute the value of 9991 each user variable at as many points (ranges, actually) in the 9992 program as possible. 9993 9994 Unlike `NOTE_INSN_VAR_LOCATION', the value expression in an 9995 `INSN_VAR_LOCATION' denotes a value at that specific point in the 9996 program, rather than an expression that can be evaluated at any 9997 later point before an overriding `VAR_LOCATION' is encountered. 9998 E.g., if a user variable is bound to a `REG' and then a subsequent 9999 insn modifies the `REG', the note location would keep mapping the 10000 user variable to the register across the insn, whereas the insn 10001 location would keep the variable bound to the value, so that the 10002 variable tracking pass would emit another location note for the 10003 variable at the point in which the register is modified. 10004 10005 10006 The machine mode of an insn is normally `VOIDmode', but some phases 10007use the mode for various purposes. 10008 10009 The common subexpression elimination pass sets the mode of an insn to 10010`QImode' when it is the first insn in a block that has already been 10011processed. 10012 10013 The second Haifa scheduling pass, for targets that can multiple issue, 10014sets the mode of an insn to `TImode' when it is believed that the 10015instruction begins an issue group. That is, when the instruction 10016cannot issue simultaneously with the previous. This may be relied on 10017by later passes, in particular machine-dependent reorg. 10018 10019 Here is a table of the extra fields of `insn', `jump_insn' and 10020`call_insn' insns: 10021 10022`PATTERN (I)' 10023 An expression for the side effect performed by this insn. This 10024 must be one of the following codes: `set', `call', `use', 10025 `clobber', `return', `asm_input', `asm_output', `addr_vec', 10026 `addr_diff_vec', `trap_if', `unspec', `unspec_volatile', 10027 `parallel', `cond_exec', or `sequence'. If it is a `parallel', 10028 each element of the `parallel' must be one these codes, except that 10029 `parallel' expressions cannot be nested and `addr_vec' and 10030 `addr_diff_vec' are not permitted inside a `parallel' expression. 10031 10032`INSN_CODE (I)' 10033 An integer that says which pattern in the machine description 10034 matches this insn, or -1 if the matching has not yet been 10035 attempted. 10036 10037 Such matching is never attempted and this field remains -1 on an 10038 insn whose pattern consists of a single `use', `clobber', 10039 `asm_input', `addr_vec' or `addr_diff_vec' expression. 10040 10041 Matching is also never attempted on insns that result from an `asm' 10042 statement. These contain at least one `asm_operands' expression. 10043 The function `asm_noperands' returns a non-negative value for such 10044 insns. 10045 10046 In the debugging output, this field is printed as a number 10047 followed by a symbolic representation that locates the pattern in 10048 the `md' file as some small positive or negative offset from a 10049 named pattern. 10050 10051`LOG_LINKS (I)' 10052 A list (chain of `insn_list' expressions) giving information about 10053 dependencies between instructions within a basic block. Neither a 10054 jump nor a label may come between the related insns. These are 10055 only used by the schedulers and by combine. This is a deprecated 10056 data structure. Def-use and use-def chains are now preferred. 10057 10058`REG_NOTES (I)' 10059 A list (chain of `expr_list' and `insn_list' expressions) giving 10060 miscellaneous information about the insn. It is often information 10061 pertaining to the registers used in this insn. 10062 10063 The `LOG_LINKS' field of an insn is a chain of `insn_list' 10064expressions. Each of these has two operands: the first is an insn, and 10065the second is another `insn_list' expression (the next one in the 10066chain). The last `insn_list' in the chain has a null pointer as second 10067operand. The significant thing about the chain is which insns appear 10068in it (as first operands of `insn_list' expressions). Their order is 10069not significant. 10070 10071 This list is originally set up by the flow analysis pass; it is a null 10072pointer until then. Flow only adds links for those data dependencies 10073which can be used for instruction combination. For each insn, the flow 10074analysis pass adds a link to insns which store into registers values 10075that are used for the first time in this insn. 10076 10077 The `REG_NOTES' field of an insn is a chain similar to the `LOG_LINKS' 10078field but it includes `expr_list' expressions in addition to 10079`insn_list' expressions. There are several kinds of register notes, 10080which are distinguished by the machine mode, which in a register note 10081is really understood as being an `enum reg_note'. The first operand OP 10082of the note is data whose meaning depends on the kind of note. 10083 10084 The macro `REG_NOTE_KIND (X)' returns the kind of register note. Its 10085counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 10086register note type of X to be NEWKIND. 10087 10088 Register notes are of three classes: They may say something about an 10089input to an insn, they may say something about an output of an insn, or 10090they may create a linkage between two insns. There are also a set of 10091values that are only used in `LOG_LINKS'. 10092 10093 These register notes annotate inputs to an insn: 10094 10095`REG_DEAD' 10096 The value in OP dies in this insn; that is to say, altering the 10097 value immediately after this insn would not affect the future 10098 behavior of the program. 10099 10100 It does not follow that the register OP has no useful value after 10101 this insn since OP is not necessarily modified by this insn. 10102 Rather, no subsequent instruction uses the contents of OP. 10103 10104`REG_UNUSED' 10105 The register OP being set by this insn will not be used in a 10106 subsequent insn. This differs from a `REG_DEAD' note, which 10107 indicates that the value in an input will not be used subsequently. 10108 These two notes are independent; both may be present for the same 10109 register. 10110 10111`REG_INC' 10112 The register OP is incremented (or decremented; at this level 10113 there is no distinction) by an embedded side effect inside this 10114 insn. This means it appears in a `post_inc', `pre_inc', 10115 `post_dec' or `pre_dec' expression. 10116 10117`REG_NONNEG' 10118 The register OP is known to have a nonnegative value when this 10119 insn is reached. This is used so that decrement and branch until 10120 zero instructions, such as the m68k dbra, can be matched. 10121 10122 The `REG_NONNEG' note is added to insns only if the machine 10123 description has a `decrement_and_branch_until_zero' pattern. 10124 10125`REG_LABEL_OPERAND' 10126 This insn uses OP, a `code_label' or a `note' of type 10127 `NOTE_INSN_DELETED_LABEL', but is not a `jump_insn', or it is a 10128 `jump_insn' that refers to the operand as an ordinary operand. 10129 The label may still eventually be a jump target, but if so in an 10130 indirect jump in a subsequent insn. The presence of this note 10131 allows jump optimization to be aware that OP is, in fact, being 10132 used, and flow optimization to build an accurate flow graph. 10133 10134`REG_LABEL_TARGET' 10135 This insn is a `jump_insn' but not an `addr_vec' or 10136 `addr_diff_vec'. It uses OP, a `code_label' as a direct or 10137 indirect jump target. Its purpose is similar to that of 10138 `REG_LABEL_OPERAND'. This note is only present if the insn has 10139 multiple targets; the last label in the insn (in the highest 10140 numbered insn-field) goes into the `JUMP_LABEL' field and does not 10141 have a `REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 10142 10143`REG_CROSSING_JUMP' 10144 This insn is a branching instruction (either an unconditional jump 10145 or an indirect jump) which crosses between hot and cold sections, 10146 which could potentially be very far apart in the executable. The 10147 presence of this note indicates to other optimizations that this 10148 branching instruction should not be "collapsed" into a simpler 10149 branching construct. It is used when the optimization to 10150 partition basic blocks into hot and cold sections is turned on. 10151 10152`REG_SETJMP' 10153 Appears attached to each `CALL_INSN' to `setjmp' or a related 10154 function. 10155 10156 The following notes describe attributes of outputs of an insn: 10157 10158`REG_EQUIV' 10159`REG_EQUAL' 10160 This note is only valid on an insn that sets only one register and 10161 indicates that that register will be equal to OP at run time; the 10162 scope of this equivalence differs between the two types of notes. 10163 The value which the insn explicitly copies into the register may 10164 look different from OP, but they will be equal at run time. If the 10165 output of the single `set' is a `strict_low_part' expression, the 10166 note refers to the register that is contained in `SUBREG_REG' of 10167 the `subreg' expression. 10168 10169 For `REG_EQUIV', the register is equivalent to OP throughout the 10170 entire function, and could validly be replaced in all its 10171 occurrences by OP. ("Validly" here refers to the data flow of the 10172 program; simple replacement may make some insns invalid.) For 10173 example, when a constant is loaded into a register that is never 10174 assigned any other value, this kind of note is used. 10175 10176 When a parameter is copied into a pseudo-register at entry to a 10177 function, a note of this kind records that the register is 10178 equivalent to the stack slot where the parameter was passed. 10179 Although in this case the register may be set by other insns, it 10180 is still valid to replace the register by the stack slot 10181 throughout the function. 10182 10183 A `REG_EQUIV' note is also used on an instruction which copies a 10184 register parameter into a pseudo-register at entry to a function, 10185 if there is a stack slot where that parameter could be stored. 10186 Although other insns may set the pseudo-register, it is valid for 10187 the compiler to replace the pseudo-register by stack slot 10188 throughout the function, provided the compiler ensures that the 10189 stack slot is properly initialized by making the replacement in 10190 the initial copy instruction as well. This is used on machines 10191 for which the calling convention allocates stack space for 10192 register parameters. See `REG_PARM_STACK_SPACE' in *note Stack 10193 Arguments::. 10194 10195 In the case of `REG_EQUAL', the register that is set by this insn 10196 will be equal to OP at run time at the end of this insn but not 10197 necessarily elsewhere in the function. In this case, OP is 10198 typically an arithmetic expression. For example, when a sequence 10199 of insns such as a library call is used to perform an arithmetic 10200 operation, this kind of note is attached to the insn that produces 10201 or copies the final value. 10202 10203 These two notes are used in different ways by the compiler passes. 10204 `REG_EQUAL' is used by passes prior to register allocation (such as 10205 common subexpression elimination and loop optimization) to tell 10206 them how to think of that value. `REG_EQUIV' notes are used by 10207 register allocation to indicate that there is an available 10208 substitute expression (either a constant or a `mem' expression for 10209 the location of a parameter on the stack) that may be used in 10210 place of a register if insufficient registers are available. 10211 10212 Except for stack homes for parameters, which are indicated by a 10213 `REG_EQUIV' note and are not useful to the early optimization 10214 passes and pseudo registers that are equivalent to a memory 10215 location throughout their entire life, which is not detected until 10216 later in the compilation, all equivalences are initially indicated 10217 by an attached `REG_EQUAL' note. In the early stages of register 10218 allocation, a `REG_EQUAL' note is changed into a `REG_EQUIV' note 10219 if OP is a constant and the insn represents the only set of its 10220 destination register. 10221 10222 Thus, compiler passes prior to register allocation need only check 10223 for `REG_EQUAL' notes and passes subsequent to register allocation 10224 need only check for `REG_EQUIV' notes. 10225 10226 These notes describe linkages between insns. They occur in pairs: one 10227insn has one of a pair of notes that points to a second insn, which has 10228the inverse note pointing back to the first insn. 10229 10230`REG_CC_SETTER' 10231`REG_CC_USER' 10232 On machines that use `cc0', the insns which set and use `cc0' set 10233 and use `cc0' are adjacent. However, when branch delay slot 10234 filling is done, this may no longer be true. In this case a 10235 `REG_CC_USER' note will be placed on the insn setting `cc0' to 10236 point to the insn using `cc0' and a `REG_CC_SETTER' note will be 10237 placed on the insn using `cc0' to point to the insn setting `cc0'. 10238 10239 These values are only used in the `LOG_LINKS' field, and indicate the 10240type of dependency that each link represents. Links which indicate a 10241data dependence (a read after write dependence) do not use any code, 10242they simply have mode `VOIDmode', and are printed without any 10243descriptive text. 10244 10245`REG_DEP_TRUE' 10246 This indicates a true dependence (a read after write dependence). 10247 10248`REG_DEP_OUTPUT' 10249 This indicates an output dependence (a write after write 10250 dependence). 10251 10252`REG_DEP_ANTI' 10253 This indicates an anti dependence (a write after read dependence). 10254 10255 10256 These notes describe information gathered from gcov profile data. They 10257are stored in the `REG_NOTES' field of an insn as an `expr_list'. 10258 10259`REG_BR_PROB' 10260 This is used to specify the ratio of branches to non-branches of a 10261 branch insn according to the profile data. The value is stored as 10262 a value between 0 and REG_BR_PROB_BASE; larger values indicate a 10263 higher probability that the branch will be taken. 10264 10265`REG_BR_PRED' 10266 These notes are found in JUMP insns after delayed branch scheduling 10267 has taken place. They indicate both the direction and the 10268 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 10269 values. 10270 10271`REG_FRAME_RELATED_EXPR' 10272 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 10273 expression is used in place of the actual insn pattern. This is 10274 done in cases where the pattern is either complex or misleading. 10275 10276 For convenience, the machine mode in an `insn_list' or `expr_list' is 10277printed using these symbolic codes in debugging dumps. 10278 10279 The only difference between the expression codes `insn_list' and 10280`expr_list' is that the first operand of an `insn_list' is assumed to 10281be an insn and is printed in debugging dumps as the insn's unique id; 10282the first operand of an `expr_list' is printed in the ordinary way as 10283an expression. 10284 10285 10286File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 10287 1028810.20 RTL Representation of Function-Call Insns 10289=============================================== 10290 10291Insns that call subroutines have the RTL expression code `call_insn'. 10292These insns must satisfy special rules, and their bodies must use a 10293special RTL expression code, `call'. 10294 10295 A `call' expression has two operands, as follows: 10296 10297 (call (mem:FM ADDR) NBYTES) 10298 10299Here NBYTES is an operand that represents the number of bytes of 10300argument data being passed to the subroutine, FM is a machine mode 10301(which must equal as the definition of the `FUNCTION_MODE' macro in the 10302machine description) and ADDR represents the address of the subroutine. 10303 10304 For a subroutine that returns no value, the `call' expression as shown 10305above is the entire body of the insn, except that the insn might also 10306contain `use' or `clobber' expressions. 10307 10308 For a subroutine that returns a value whose mode is not `BLKmode', the 10309value is returned in a hard register. If this register's number is R, 10310then the body of the call insn looks like this: 10311 10312 (set (reg:M R) 10313 (call (mem:FM ADDR) NBYTES)) 10314 10315This RTL expression makes it clear (to the optimizer passes) that the 10316appropriate register receives a useful value in this insn. 10317 10318 When a subroutine returns a `BLKmode' value, it is handled by passing 10319to the subroutine the address of a place to store the value. So the 10320call insn itself does not "return" any value, and it has the same RTL 10321form as a call that returns nothing. 10322 10323 On some machines, the call instruction itself clobbers some register, 10324for example to contain the return address. `call_insn' insns on these 10325machines should have a body which is a `parallel' that contains both 10326the `call' expression and `clobber' expressions that indicate which 10327registers are destroyed. Similarly, if the call instruction requires 10328some register other than the stack pointer that is not explicitly 10329mentioned in its RTL, a `use' subexpression should mention that 10330register. 10331 10332 Functions that are called are assumed to modify all registers listed in 10333the configuration macro `CALL_USED_REGISTERS' (*note Register Basics::) 10334and, with the exception of `const' functions and library calls, to 10335modify all of memory. 10336 10337 Insns containing just `use' expressions directly precede the 10338`call_insn' insn to indicate which registers contain inputs to the 10339function. Similarly, if registers other than those in 10340`CALL_USED_REGISTERS' are clobbered by the called function, insns 10341containing a single `clobber' follow immediately after the call to 10342indicate which registers. 10343 10344 10345File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 10346 1034710.21 Structure Sharing Assumptions 10348=================================== 10349 10350The compiler assumes that certain kinds of RTL expressions are unique; 10351there do not exist two distinct objects representing the same value. 10352In other cases, it makes an opposite assumption: that no RTL expression 10353object of a certain kind appears in more than one place in the 10354containing structure. 10355 10356 These assumptions refer to a single function; except for the RTL 10357objects that describe global variables and external functions, and a 10358few standard objects such as small integer constants, no RTL objects 10359are common to two functions. 10360 10361 * Each pseudo-register has only a single `reg' object to represent 10362 it, and therefore only a single machine mode. 10363 10364 * For any symbolic label, there is only one `symbol_ref' object 10365 referring to it. 10366 10367 * All `const_int' expressions with equal values are shared. 10368 10369 * There is only one `pc' expression. 10370 10371 * There is only one `cc0' expression. 10372 10373 * There is only one `const_double' expression with value 0 for each 10374 floating point mode. Likewise for values 1 and 2. 10375 10376 * There is only one `const_vector' expression with value 0 for each 10377 vector mode, be it an integer or a double constant vector. 10378 10379 * No `label_ref' or `scratch' appears in more than one place in the 10380 RTL structure; in other words, it is safe to do a tree-walk of all 10381 the insns in the function and assume that each time a `label_ref' 10382 or `scratch' is seen it is distinct from all others that are seen. 10383 10384 * Only one `mem' object is normally created for each static variable 10385 or stack slot, so these objects are frequently shared in all the 10386 places they appear. However, separate but equal objects for these 10387 variables are occasionally made. 10388 10389 * When a single `asm' statement has multiple output operands, a 10390 distinct `asm_operands' expression is made for each output operand. 10391 However, these all share the vector which contains the sequence of 10392 input operands. This sharing is used later on to test whether two 10393 `asm_operands' expressions come from the same statement, so all 10394 optimizations must carefully preserve the sharing if they copy the 10395 vector at all. 10396 10397 * No RTL object appears in more than one place in the RTL structure 10398 except as described above. Many passes of the compiler rely on 10399 this by assuming that they can modify RTL objects in place without 10400 unwanted side-effects on other insns. 10401 10402 * During initial RTL generation, shared structure is freely 10403 introduced. After all the RTL for a function has been generated, 10404 all shared structure is copied by `unshare_all_rtl' in 10405 `emit-rtl.c', after which the above rules are guaranteed to be 10406 followed. 10407 10408 * During the combiner pass, shared structure within an insn can exist 10409 temporarily. However, the shared structure is copied before the 10410 combiner is finished with the insn. This is done by calling 10411 `copy_rtx_if_shared', which is a subroutine of `unshare_all_rtl'. 10412 10413 10414File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 10415 1041610.22 Reading RTL 10417================= 10418 10419To read an RTL object from a file, call `read_rtx'. It takes one 10420argument, a stdio stream, and returns a single RTL object. This routine 10421is defined in `read-rtl.c'. It is not available in the compiler 10422itself, only the various programs that generate the compiler back end 10423from the machine description. 10424 10425 People frequently have the idea of using RTL stored as text in a file 10426as an interface between a language front end and the bulk of GCC. This 10427idea is not feasible. 10428 10429 GCC was designed to use RTL internally only. Correct RTL for a given 10430program is very dependent on the particular target machine. And the RTL 10431does not contain all the information about the program. 10432 10433 The proper way to interface GCC to a new language front end is with 10434the "tree" data structure, described in the files `tree.h' and 10435`tree.def'. The documentation for this structure (*note GENERIC::) is 10436incomplete. 10437 10438 10439File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: Passes, Up: Top 10440 1044111 GENERIC 10442********** 10443 10444The purpose of GENERIC is simply to provide a language-independent way 10445of representing an entire function in trees. To this end, it was 10446necessary to add a few new tree codes to the back end, but most 10447everything was already there. If you can express it with the codes in 10448`gcc/tree.def', it's GENERIC. 10449 10450 Early on, there was a great deal of debate about how to think about 10451statements in a tree IL. In GENERIC, a statement is defined as any 10452expression whose value, if any, is ignored. A statement will always 10453have `TREE_SIDE_EFFECTS' set (or it will be discarded), but a 10454non-statement expression may also have side effects. A `CALL_EXPR', 10455for instance. 10456 10457 It would be possible for some local optimizations to work on the 10458GENERIC form of a function; indeed, the adapted tree inliner works fine 10459on GENERIC, but the current compiler performs inlining after lowering 10460to GIMPLE (a restricted form described in the next section). Indeed, 10461currently the frontends perform this lowering before handing off to 10462`tree_rest_of_compilation', but this seems inelegant. 10463 10464* Menu: 10465 10466* Deficiencies:: Topics net yet covered in this document. 10467* Tree overview:: All about `tree's. 10468* Types:: Fundamental and aggregate types. 10469* Declarations:: Type declarations and variables. 10470* Attributes:: Declaration and type attributes. 10471* Expressions: Expression trees. Operating on data. 10472* Statements:: Control flow and related trees. 10473* Functions:: Function bodies, linkage, and other aspects. 10474* Language-dependent trees:: Topics and trees specific to language front ends. 10475* C and C++ Trees:: Trees specific to C and C++. 10476* Java Trees:: Trees specific to Java. 10477 10478 10479File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 10480 1048111.1 Deficiencies 10482================= 10483 10484There are many places in which this document is incomplet and incorrekt. 10485It is, as of yet, only _preliminary_ documentation. 10486 10487 10488File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 10489 1049011.2 Overview 10491============= 10492 10493The central data structure used by the internal representation is the 10494`tree'. These nodes, while all of the C type `tree', are of many 10495varieties. A `tree' is a pointer type, but the object to which it 10496points may be of a variety of types. From this point forward, we will 10497refer to trees in ordinary type, rather than in `this font', except 10498when talking about the actual C type `tree'. 10499 10500 You can tell what kind of node a particular tree is by using the 10501`TREE_CODE' macro. Many, many macros take trees as input and return 10502trees as output. However, most macros require a certain kind of tree 10503node as input. In other words, there is a type-system for trees, but 10504it is not reflected in the C type-system. 10505 10506 For safety, it is useful to configure GCC with `--enable-checking'. 10507Although this results in a significant performance penalty (since all 10508tree types are checked at run-time), and is therefore inappropriate in a 10509release version, it is extremely helpful during the development process. 10510 10511 Many macros behave as predicates. Many, although not all, of these 10512predicates end in `_P'. Do not rely on the result type of these macros 10513being of any particular type. You may, however, rely on the fact that 10514the type can be compared to `0', so that statements like 10515 if (TEST_P (t) && !TEST_P (y)) 10516 x = 1; 10517 and 10518 int i = (TEST_P (t) != 0); 10519 are legal. Macros that return `int' values now may be changed to 10520return `tree' values, or other pointers in the future. Even those that 10521continue to return `int' may return multiple nonzero codes where 10522previously they returned only zero and one. Therefore, you should not 10523write code like 10524 if (TEST_P (t) == 1) 10525 as this code is not guaranteed to work correctly in the future. 10526 10527 You should not take the address of values returned by the macros or 10528functions described here. In particular, no guarantee is given that the 10529values are lvalues. 10530 10531 In general, the names of macros are all in uppercase, while the names 10532of functions are entirely in lowercase. There are rare exceptions to 10533this rule. You should assume that any macro or function whose name is 10534made up entirely of uppercase letters may evaluate its arguments more 10535than once. You may assume that a macro or function whose name is made 10536up entirely of lowercase letters will evaluate its arguments only once. 10537 10538 The `error_mark_node' is a special tree. Its tree code is 10539`ERROR_MARK', but since there is only ever one node with that code, the 10540usual practice is to compare the tree against `error_mark_node'. (This 10541test is just a test for pointer equality.) If an error has occurred 10542during front-end processing the flag `errorcount' will be set. If the 10543front end has encountered code it cannot handle, it will issue a 10544message to the user and set `sorrycount'. When these flags are set, 10545any macro or function which normally returns a tree of a particular 10546kind may instead return the `error_mark_node'. Thus, if you intend to 10547do any processing of erroneous code, you must be prepared to deal with 10548the `error_mark_node'. 10549 10550 Occasionally, a particular tree slot (like an operand to an expression, 10551or a particular field in a declaration) will be referred to as 10552"reserved for the back end". These slots are used to store RTL when 10553the tree is converted to RTL for use by the GCC back end. However, if 10554that process is not taking place (e.g., if the front end is being hooked 10555up to an intelligent editor), then those slots may be used by the back 10556end presently in use. 10557 10558 If you encounter situations that do not match this documentation, such 10559as tree nodes of types not mentioned here, or macros documented to 10560return entities of a particular kind that instead return entities of 10561some different kind, you have found a bug, either in the front end or in 10562the documentation. Please report these bugs as you would any other bug. 10563 10564* Menu: 10565 10566* Macros and Functions::Macros and functions that can be used with all trees. 10567* Identifiers:: The names of things. 10568* Containers:: Lists and vectors. 10569 10570 10571File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 10572 1057311.2.1 Trees 10574------------ 10575 10576All GENERIC trees have two fields in common. First, `TREE_CHAIN' is a 10577pointer that can be used as a singly-linked list to other trees. The 10578other is `TREE_TYPE'. Many trees store the type of an expression or 10579declaration in this field. 10580 10581 These are some other functions for handling trees: 10582 10583`tree_size' 10584 Return the number of bytes a tree takes. 10585 10586`build0' 10587`build1' 10588`build2' 10589`build3' 10590`build4' 10591`build5' 10592`build6' 10593 These functions build a tree and supply values to put in each 10594 parameter. The basic signature is `code, type, [operands]'. 10595 `code' is the `TREE_CODE', and `type' is a tree representing the 10596 `TREE_TYPE'. These are followed by the operands, each of which is 10597 also a tree. 10598 10599 10600 10601File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 10602 1060311.2.2 Identifiers 10604------------------ 10605 10606An `IDENTIFIER_NODE' represents a slightly more general concept that 10607the standard C or C++ concept of identifier. In particular, an 10608`IDENTIFIER_NODE' may contain a `$', or other extraordinary characters. 10609 10610 There are never two distinct `IDENTIFIER_NODE's representing the same 10611identifier. Therefore, you may use pointer equality to compare 10612`IDENTIFIER_NODE's, rather than using a routine like `strcmp'. Use 10613`get_identifier' to obtain the unique `IDENTIFIER_NODE' for a supplied 10614string. 10615 10616 You can use the following macros to access identifiers: 10617`IDENTIFIER_POINTER' 10618 The string represented by the identifier, represented as a 10619 `char*'. This string is always `NUL'-terminated, and contains no 10620 embedded `NUL' characters. 10621 10622`IDENTIFIER_LENGTH' 10623 The length of the string returned by `IDENTIFIER_POINTER', not 10624 including the trailing `NUL'. This value of `IDENTIFIER_LENGTH 10625 (x)' is always the same as `strlen (IDENTIFIER_POINTER (x))'. 10626 10627`IDENTIFIER_OPNAME_P' 10628 This predicate holds if the identifier represents the name of an 10629 overloaded operator. In this case, you should not depend on the 10630 contents of either the `IDENTIFIER_POINTER' or the 10631 `IDENTIFIER_LENGTH'. 10632 10633`IDENTIFIER_TYPENAME_P' 10634 This predicate holds if the identifier represents the name of a 10635 user-defined conversion operator. In this case, the `TREE_TYPE' of 10636 the `IDENTIFIER_NODE' holds the type to which the conversion 10637 operator converts. 10638 10639 10640 10641File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 10642 1064311.2.3 Containers 10644----------------- 10645 10646Two common container data structures can be represented directly with 10647tree nodes. A `TREE_LIST' is a singly linked list containing two trees 10648per node. These are the `TREE_PURPOSE' and `TREE_VALUE' of each node. 10649(Often, the `TREE_PURPOSE' contains some kind of tag, or additional 10650information, while the `TREE_VALUE' contains the majority of the 10651payload. In other cases, the `TREE_PURPOSE' is simply `NULL_TREE', 10652while in still others both the `TREE_PURPOSE' and `TREE_VALUE' are of 10653equal stature.) Given one `TREE_LIST' node, the next node is found by 10654following the `TREE_CHAIN'. If the `TREE_CHAIN' is `NULL_TREE', then 10655you have reached the end of the list. 10656 10657 A `TREE_VEC' is a simple vector. The `TREE_VEC_LENGTH' is an integer 10658(not a tree) giving the number of nodes in the vector. The nodes 10659themselves are accessed using the `TREE_VEC_ELT' macro, which takes two 10660arguments. The first is the `TREE_VEC' in question; the second is an 10661integer indicating which element in the vector is desired. The 10662elements are indexed from zero. 10663 10664 10665File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 10666 1066711.3 Types 10668========== 10669 10670All types have corresponding tree nodes. However, you should not assume 10671that there is exactly one tree node corresponding to each type. There 10672are often multiple nodes corresponding to the same type. 10673 10674 For the most part, different kinds of types have different tree codes. 10675(For example, pointer types use a `POINTER_TYPE' code while arrays use 10676an `ARRAY_TYPE' code.) However, pointers to member functions use the 10677`RECORD_TYPE' code. Therefore, when writing a `switch' statement that 10678depends on the code associated with a particular type, you should take 10679care to handle pointers to member functions under the `RECORD_TYPE' 10680case label. 10681 10682 The following functions and macros deal with cv-qualification of types: 10683`TYPE_MAIN_VARIANT' 10684 This macro returns the unqualified version of a type. It may be 10685 applied to an unqualified type, but it is not always the identity 10686 function in that case. 10687 10688 A few other macros and functions are usable with all types: 10689`TYPE_SIZE' 10690 The number of bits required to represent the type, represented as 10691 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be 10692 `NULL_TREE'. 10693 10694`TYPE_ALIGN' 10695 The alignment of the type, in bits, represented as an `int'. 10696 10697`TYPE_NAME' 10698 This macro returns a declaration (in the form of a `TYPE_DECL') for 10699 the type. (Note this macro does _not_ return an 10700 `IDENTIFIER_NODE', as you might expect, given its name!) You can 10701 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual 10702 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type 10703 that is not a built-in type, the result of a typedef, or a named 10704 class type. 10705 10706`TYPE_CANONICAL' 10707 This macro returns the "canonical" type for the given type node. 10708 Canonical types are used to improve performance in the C++ and 10709 Objective-C++ front ends by allowing efficient comparison between 10710 two type nodes in `same_type_p': if the `TYPE_CANONICAL' values of 10711 the types are equal, the types are equivalent; otherwise, the types 10712 are not equivalent. The notion of equivalence for canonical types 10713 is the same as the notion of type equivalence in the language 10714 itself. For instance, 10715 10716 When `TYPE_CANONICAL' is `NULL_TREE', there is no canonical type 10717 for the given type node. In this case, comparison between this 10718 type and any other type requires the compiler to perform a deep, 10719 "structural" comparison to see if the two type nodes have the same 10720 form and properties. 10721 10722 The canonical type for a node is always the most fundamental type 10723 in the equivalence class of types. For instance, `int' is its own 10724 canonical type. A typedef `I' of `int' will have `int' as its 10725 canonical type. Similarly, `I*' and a typedef `IP' (defined to 10726 `I*') will has `int*' as their canonical type. When building a new 10727 type node, be sure to set `TYPE_CANONICAL' to the appropriate 10728 canonical type. If the new type is a compound type (built from 10729 other types), and any of those other types require structural 10730 equality, use `SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the 10731 new type also requires structural equality. Finally, if for some 10732 reason you cannot guarantee that `TYPE_CANONICAL' will point to 10733 the canonical type, use `SET_TYPE_STRUCTURAL_EQUALITY' to make 10734 sure that the new type-and any type constructed based on 10735 it-requires structural equality. If you suspect that the canonical 10736 type system is miscomparing types, pass `--param 10737 verify-canonical-types=1' to the compiler or configure with 10738 `--enable-checking' to force the compiler to verify its 10739 canonical-type comparisons against the structural comparisons; the 10740 compiler will then print any warnings if the canonical types 10741 miscompare. 10742 10743`TYPE_STRUCTURAL_EQUALITY_P' 10744 This predicate holds when the node requires structural equality 10745 checks, e.g., when `TYPE_CANONICAL' is `NULL_TREE'. 10746 10747`SET_TYPE_STRUCTURAL_EQUALITY' 10748 This macro states that the type node it is given requires 10749 structural equality checks, e.g., it sets `TYPE_CANONICAL' to 10750 `NULL_TREE'. 10751 10752`same_type_p' 10753 This predicate takes two types as input, and holds if they are the 10754 same type. For example, if one type is a `typedef' for the other, 10755 or both are `typedef's for the same type. This predicate also 10756 holds if the two trees given as input are simply copies of one 10757 another; i.e., there is no difference between them at the source 10758 level, but, for whatever reason, a duplicate has been made in the 10759 representation. You should never use `==' (pointer equality) to 10760 compare types; always use `same_type_p' instead. 10761 10762 Detailed below are the various kinds of types, and the macros that can 10763be used to access them. Although other kinds of types are used 10764elsewhere in G++, the types described here are the only ones that you 10765will encounter while examining the intermediate representation. 10766 10767`VOID_TYPE' 10768 Used to represent the `void' type. 10769 10770`INTEGER_TYPE' 10771 Used to represent the various integral types, including `char', 10772 `short', `int', `long', and `long long'. This code is not used 10773 for enumeration types, nor for the `bool' type. The 10774 `TYPE_PRECISION' is the number of bits used in the representation, 10775 represented as an `unsigned int'. (Note that in the general case 10776 this is not the same value as `TYPE_SIZE'; suppose that there were 10777 a 24-bit integer type, but that alignment requirements for the ABI 10778 required 32-bit alignment. Then, `TYPE_SIZE' would be an 10779 `INTEGER_CST' for 32, while `TYPE_PRECISION' would be 24.) The 10780 integer type is unsigned if `TYPE_UNSIGNED' holds; otherwise, it 10781 is signed. 10782 10783 The `TYPE_MIN_VALUE' is an `INTEGER_CST' for the smallest integer 10784 that may be represented by this type. Similarly, the 10785 `TYPE_MAX_VALUE' is an `INTEGER_CST' for the largest integer that 10786 may be represented by this type. 10787 10788`REAL_TYPE' 10789 Used to represent the `float', `double', and `long double' types. 10790 The number of bits in the floating-point representation is given 10791 by `TYPE_PRECISION', as in the `INTEGER_TYPE' case. 10792 10793`FIXED_POINT_TYPE' 10794 Used to represent the `short _Fract', `_Fract', `long _Fract', 10795 `long long _Fract', `short _Accum', `_Accum', `long _Accum', and 10796 `long long _Accum' types. The number of bits in the fixed-point 10797 representation is given by `TYPE_PRECISION', as in the 10798 `INTEGER_TYPE' case. There may be padding bits, fractional bits 10799 and integral bits. The number of fractional bits is given by 10800 `TYPE_FBIT', and the number of integral bits is given by 10801 `TYPE_IBIT'. The fixed-point type is unsigned if `TYPE_UNSIGNED' 10802 holds; otherwise, it is signed. The fixed-point type is 10803 saturating if `TYPE_SATURATING' holds; otherwise, it is not 10804 saturating. 10805 10806`COMPLEX_TYPE' 10807 Used to represent GCC built-in `__complex__' data types. The 10808 `TREE_TYPE' is the type of the real and imaginary parts. 10809 10810`ENUMERAL_TYPE' 10811 Used to represent an enumeration type. The `TYPE_PRECISION' gives 10812 (as an `int'), the number of bits used to represent the type. If 10813 there are no negative enumeration constants, `TYPE_UNSIGNED' will 10814 hold. The minimum and maximum enumeration constants may be 10815 obtained with `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE', respectively; 10816 each of these macros returns an `INTEGER_CST'. 10817 10818 The actual enumeration constants themselves may be obtained by 10819 looking at the `TYPE_VALUES'. This macro will return a 10820 `TREE_LIST', containing the constants. The `TREE_PURPOSE' of each 10821 node will be an `IDENTIFIER_NODE' giving the name of the constant; 10822 the `TREE_VALUE' will be an `INTEGER_CST' giving the value 10823 assigned to that constant. These constants will appear in the 10824 order in which they were declared. The `TREE_TYPE' of each of 10825 these constants will be the type of enumeration type itself. 10826 10827`BOOLEAN_TYPE' 10828 Used to represent the `bool' type. 10829 10830`POINTER_TYPE' 10831 Used to represent pointer types, and pointer to data member types. 10832 The `TREE_TYPE' gives the type to which this type points. 10833 10834`REFERENCE_TYPE' 10835 Used to represent reference types. The `TREE_TYPE' gives the type 10836 to which this type refers. 10837 10838`FUNCTION_TYPE' 10839 Used to represent the type of non-member functions and of static 10840 member functions. The `TREE_TYPE' gives the return type of the 10841 function. The `TYPE_ARG_TYPES' are a `TREE_LIST' of the argument 10842 types. The `TREE_VALUE' of each node in this list is the type of 10843 the corresponding argument; the `TREE_PURPOSE' is an expression 10844 for the default argument value, if any. If the last node in the 10845 list is `void_list_node' (a `TREE_LIST' node whose `TREE_VALUE' is 10846 the `void_type_node'), then functions of this type do not take 10847 variable arguments. Otherwise, they do take a variable number of 10848 arguments. 10849 10850 Note that in C (but not in C++) a function declared like `void f()' 10851 is an unprototyped function taking a variable number of arguments; 10852 the `TYPE_ARG_TYPES' of such a function will be `NULL'. 10853 10854`METHOD_TYPE' 10855 Used to represent the type of a non-static member function. Like a 10856 `FUNCTION_TYPE', the return type is given by the `TREE_TYPE'. The 10857 type of `*this', i.e., the class of which functions of this type 10858 are a member, is given by the `TYPE_METHOD_BASETYPE'. The 10859 `TYPE_ARG_TYPES' is the parameter list, as for a `FUNCTION_TYPE', 10860 and includes the `this' argument. 10861 10862`ARRAY_TYPE' 10863 Used to represent array types. The `TREE_TYPE' gives the type of 10864 the elements in the array. If the array-bound is present in the 10865 type, the `TYPE_DOMAIN' is an `INTEGER_TYPE' whose 10866 `TYPE_MIN_VALUE' and `TYPE_MAX_VALUE' will be the lower and upper 10867 bounds of the array, respectively. The `TYPE_MIN_VALUE' will 10868 always be an `INTEGER_CST' for zero, while the `TYPE_MAX_VALUE' 10869 will be one less than the number of elements in the array, i.e., 10870 the highest value which may be used to index an element in the 10871 array. 10872 10873`RECORD_TYPE' 10874 Used to represent `struct' and `class' types, as well as pointers 10875 to member functions and similar constructs in other languages. 10876 `TYPE_FIELDS' contains the items contained in this type, each of 10877 which can be a `FIELD_DECL', `VAR_DECL', `CONST_DECL', or 10878 `TYPE_DECL'. You may not make any assumptions about the ordering 10879 of the fields in the type or whether one or more of them overlap. 10880 10881`UNION_TYPE' 10882 Used to represent `union' types. Similar to `RECORD_TYPE' except 10883 that all `FIELD_DECL' nodes in `TYPE_FIELD' start at bit position 10884 zero. 10885 10886`QUAL_UNION_TYPE' 10887 Used to represent part of a variant record in Ada. Similar to 10888 `UNION_TYPE' except that each `FIELD_DECL' has a `DECL_QUALIFIER' 10889 field, which contains a boolean expression that indicates whether 10890 the field is present in the object. The type will only have one 10891 field, so each field's `DECL_QUALIFIER' is only evaluated if none 10892 of the expressions in the previous fields in `TYPE_FIELDS' are 10893 nonzero. Normally these expressions will reference a field in the 10894 outer object using a `PLACEHOLDER_EXPR'. 10895 10896`LANG_TYPE' 10897 This node is used to represent a language-specific type. The front 10898 end must handle it. 10899 10900`OFFSET_TYPE' 10901 This node is used to represent a pointer-to-data member. For a 10902 data member `X::m' the `TYPE_OFFSET_BASETYPE' is `X' and the 10903 `TREE_TYPE' is the type of `m'. 10904 10905 10906 There are variables whose values represent some of the basic types. 10907These include: 10908`void_type_node' 10909 A node for `void'. 10910 10911`integer_type_node' 10912 A node for `int'. 10913 10914`unsigned_type_node.' 10915 A node for `unsigned int'. 10916 10917`char_type_node.' 10918 A node for `char'. 10919 It may sometimes be useful to compare one of these variables with a 10920type in hand, using `same_type_p'. 10921 10922 10923File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 10924 1092511.4 Declarations 10926================= 10927 10928This section covers the various kinds of declarations that appear in the 10929internal representation, except for declarations of functions 10930(represented by `FUNCTION_DECL' nodes), which are described in *note 10931Functions::. 10932 10933* Menu: 10934 10935* Working with declarations:: Macros and functions that work on 10936declarations. 10937* Internal structure:: How declaration nodes are represented. 10938 10939 10940File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 10941 1094211.4.1 Working with declarations 10943-------------------------------- 10944 10945Some macros can be used with any kind of declaration. These include: 10946`DECL_NAME' 10947 This macro returns an `IDENTIFIER_NODE' giving the name of the 10948 entity. 10949 10950`TREE_TYPE' 10951 This macro returns the type of the entity declared. 10952 10953`EXPR_FILENAME' 10954 This macro returns the name of the file in which the entity was 10955 declared, as a `char*'. For an entity declared implicitly by the 10956 compiler (like `__builtin_memcpy'), this will be the string 10957 `"<internal>"'. 10958 10959`EXPR_LINENO' 10960 This macro returns the line number at which the entity was 10961 declared, as an `int'. 10962 10963`DECL_ARTIFICIAL' 10964 This predicate holds if the declaration was implicitly generated 10965 by the compiler. For example, this predicate will hold of an 10966 implicitly declared member function, or of the `TYPE_DECL' 10967 implicitly generated for a class type. Recall that in C++ code 10968 like: 10969 struct S {}; 10970 is roughly equivalent to C code like: 10971 struct S {}; 10972 typedef struct S S; 10973 The implicitly generated `typedef' declaration is represented by a 10974 `TYPE_DECL' for which `DECL_ARTIFICIAL' holds. 10975 10976 10977 The various kinds of declarations include: 10978`LABEL_DECL' 10979 These nodes are used to represent labels in function bodies. For 10980 more information, see *note Functions::. These nodes only appear 10981 in block scopes. 10982 10983`CONST_DECL' 10984 These nodes are used to represent enumeration constants. The 10985 value of the constant is given by `DECL_INITIAL' which will be an 10986 `INTEGER_CST' with the same type as the `TREE_TYPE' of the 10987 `CONST_DECL', i.e., an `ENUMERAL_TYPE'. 10988 10989`RESULT_DECL' 10990 These nodes represent the value returned by a function. When a 10991 value is assigned to a `RESULT_DECL', that indicates that the 10992 value should be returned, via bitwise copy, by the function. You 10993 can use `DECL_SIZE' and `DECL_ALIGN' on a `RESULT_DECL', just as 10994 with a `VAR_DECL'. 10995 10996`TYPE_DECL' 10997 These nodes represent `typedef' declarations. The `TREE_TYPE' is 10998 the type declared to have the name given by `DECL_NAME'. In some 10999 cases, there is no associated name. 11000 11001`VAR_DECL' 11002 These nodes represent variables with namespace or block scope, as 11003 well as static data members. The `DECL_SIZE' and `DECL_ALIGN' are 11004 analogous to `TYPE_SIZE' and `TYPE_ALIGN'. For a declaration, you 11005 should always use the `DECL_SIZE' and `DECL_ALIGN' rather than the 11006 `TYPE_SIZE' and `TYPE_ALIGN' given by the `TREE_TYPE', since 11007 special attributes may have been applied to the variable to give 11008 it a particular size and alignment. You may use the predicates 11009 `DECL_THIS_STATIC' or `DECL_THIS_EXTERN' to test whether the 11010 storage class specifiers `static' or `extern' were used to declare 11011 a variable. 11012 11013 If this variable is initialized (but does not require a 11014 constructor), the `DECL_INITIAL' will be an expression for the 11015 initializer. The initializer should be evaluated, and a bitwise 11016 copy into the variable performed. If the `DECL_INITIAL' is the 11017 `error_mark_node', there is an initializer, but it is given by an 11018 explicit statement later in the code; no bitwise copy is required. 11019 11020 GCC provides an extension that allows either automatic variables, 11021 or global variables, to be placed in particular registers. This 11022 extension is being used for a particular `VAR_DECL' if 11023 `DECL_REGISTER' holds for the `VAR_DECL', and if 11024 `DECL_ASSEMBLER_NAME' is not equal to `DECL_NAME'. In that case, 11025 `DECL_ASSEMBLER_NAME' is the name of the register into which the 11026 variable will be placed. 11027 11028`PARM_DECL' 11029 Used to represent a parameter to a function. Treat these nodes 11030 similarly to `VAR_DECL' nodes. These nodes only appear in the 11031 `DECL_ARGUMENTS' for a `FUNCTION_DECL'. 11032 11033 The `DECL_ARG_TYPE' for a `PARM_DECL' is the type that will 11034 actually be used when a value is passed to this function. It may 11035 be a wider type than the `TREE_TYPE' of the parameter; for 11036 example, the ordinary type might be `short' while the 11037 `DECL_ARG_TYPE' is `int'. 11038 11039`DEBUG_EXPR_DECL' 11040 Used to represent an anonymous debug-information temporary created 11041 to hold an expression as it is optimized away, so that its value 11042 can be referenced in debug bind statements. 11043 11044`FIELD_DECL' 11045 These nodes represent non-static data members. The `DECL_SIZE' and 11046 `DECL_ALIGN' behave as for `VAR_DECL' nodes. The position of the 11047 field within the parent record is specified by a combination of 11048 three attributes. `DECL_FIELD_OFFSET' is the position, counting 11049 in bytes, of the `DECL_OFFSET_ALIGN'-bit sized word containing the 11050 bit of the field closest to the beginning of the structure. 11051 `DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 11052 field within this word; this may be nonzero even for fields that 11053 are not bit-fields, since `DECL_OFFSET_ALIGN' may be greater than 11054 the natural alignment of the field's type. 11055 11056 If `DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 11057 bit-field, `DECL_BIT_FIELD_TYPE' also contains the type that was 11058 originally specified for it, while DECL_TYPE may be a modified 11059 type with lesser precision, according to the size of the bit field. 11060 11061`NAMESPACE_DECL' 11062 Namespaces provide a name hierarchy for other declarations. They 11063 appear in the `DECL_CONTEXT' of other `_DECL' nodes. 11064 11065 11066 11067File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 11068 1106911.4.2 Internal structure 11070------------------------- 11071 11072`DECL' nodes are represented internally as a hierarchy of structures. 11073 11074* Menu: 11075 11076* Current structure hierarchy:: The current DECL node structure 11077hierarchy. 11078* Adding new DECL node types:: How to add a new DECL node to a 11079frontend. 11080 11081 11082File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 11083 1108411.4.2.1 Current structure hierarchy 11085.................................... 11086 11087`struct tree_decl_minimal' 11088 This is the minimal structure to inherit from in order for common 11089 `DECL' macros to work. The fields it contains are a unique ID, 11090 source location, context, and name. 11091 11092`struct tree_decl_common' 11093 This structure inherits from `struct tree_decl_minimal'. It 11094 contains fields that most `DECL' nodes need, such as a field to 11095 store alignment, machine mode, size, and attributes. 11096 11097`struct tree_field_decl' 11098 This structure inherits from `struct tree_decl_common'. It is 11099 used to represent `FIELD_DECL'. 11100 11101`struct tree_label_decl' 11102 This structure inherits from `struct tree_decl_common'. It is 11103 used to represent `LABEL_DECL'. 11104 11105`struct tree_translation_unit_decl' 11106 This structure inherits from `struct tree_decl_common'. It is 11107 used to represent `TRANSLATION_UNIT_DECL'. 11108 11109`struct tree_decl_with_rtl' 11110 This structure inherits from `struct tree_decl_common'. It 11111 contains a field to store the low-level RTL associated with a 11112 `DECL' node. 11113 11114`struct tree_result_decl' 11115 This structure inherits from `struct tree_decl_with_rtl'. It is 11116 used to represent `RESULT_DECL'. 11117 11118`struct tree_const_decl' 11119 This structure inherits from `struct tree_decl_with_rtl'. It is 11120 used to represent `CONST_DECL'. 11121 11122`struct tree_parm_decl' 11123 This structure inherits from `struct tree_decl_with_rtl'. It is 11124 used to represent `PARM_DECL'. 11125 11126`struct tree_decl_with_vis' 11127 This structure inherits from `struct tree_decl_with_rtl'. It 11128 contains fields necessary to store visibility information, as well 11129 as a section name and assembler name. 11130 11131`struct tree_var_decl' 11132 This structure inherits from `struct tree_decl_with_vis'. It is 11133 used to represent `VAR_DECL'. 11134 11135`struct tree_function_decl' 11136 This structure inherits from `struct tree_decl_with_vis'. It is 11137 used to represent `FUNCTION_DECL'. 11138 11139 11140 11141File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 11142 1114311.4.2.2 Adding new DECL node types 11144................................... 11145 11146Adding a new `DECL' tree consists of the following steps 11147 11148Add a new tree code for the `DECL' node 11149 For language specific `DECL' nodes, there is a `.def' file in each 11150 frontend directory where the tree code should be added. For 11151 `DECL' nodes that are part of the middle-end, the code should be 11152 added to `tree.def'. 11153 11154Create a new structure type for the `DECL' node 11155 These structures should inherit from one of the existing 11156 structures in the language hierarchy by using that structure as 11157 the first member. 11158 11159 struct tree_foo_decl 11160 { 11161 struct tree_decl_with_vis common; 11162 } 11163 11164 Would create a structure name `tree_foo_decl' that inherits from 11165 `struct tree_decl_with_vis'. 11166 11167 For language specific `DECL' nodes, this new structure type should 11168 go in the appropriate `.h' file. For `DECL' nodes that are part 11169 of the middle-end, the structure type should go in `tree.h'. 11170 11171Add a member to the tree structure enumerator for the node 11172 For garbage collection and dynamic checking purposes, each `DECL' 11173 node structure type is required to have a unique enumerator value 11174 specified with it. For language specific `DECL' nodes, this new 11175 enumerator value should go in the appropriate `.def' file. For 11176 `DECL' nodes that are part of the middle-end, the enumerator 11177 values are specified in `treestruct.def'. 11178 11179Update `union tree_node' 11180 In order to make your new structure type usable, it must be added 11181 to `union tree_node'. For language specific `DECL' nodes, a new 11182 entry should be added to the appropriate `.h' file of the form 11183 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 11184 For `DECL' nodes that are part of the middle-end, the additional 11185 member goes directly into `union tree_node' in `tree.h'. 11186 11187Update dynamic checking info 11188 In order to be able to check whether accessing a named portion of 11189 `union tree_node' is legal, and whether a certain `DECL' node 11190 contains one of the enumerated `DECL' node structures in the 11191 hierarchy, a simple lookup table is used. This lookup table needs 11192 to be kept up to date with the tree structure hierarchy, or else 11193 checking and containment macros will fail inappropriately. 11194 11195 For language specific `DECL' nodes, their is an `init_ts' function 11196 in an appropriate `.c' file, which initializes the lookup table. 11197 Code setting up the table for new `DECL' nodes should be added 11198 there. For each `DECL' tree code and enumerator value 11199 representing a member of the inheritance hierarchy, the table 11200 should contain 1 if that tree code inherits (directly or 11201 indirectly) from that member. Thus, a `FOO_DECL' node derived 11202 from `struct decl_with_rtl', and enumerator value `TS_FOO_DECL', 11203 would be set up as follows 11204 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 11205 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 11206 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 11207 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 11208 11209 For `DECL' nodes that are part of the middle-end, the setup code 11210 goes into `tree.c'. 11211 11212Add macros to access any new fields and flags 11213 Each added field or flag should have a macro that is used to access 11214 it, that performs appropriate checking to ensure only the right 11215 type of `DECL' nodes access the field. 11216 11217 These macros generally take the following form 11218 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 11219 However, if the structure is simply a base class for further 11220 structures, something like the following should be used 11221 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 11222 #define BASE_STRUCT_FIELDNAME(NODE) \ 11223 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 11224 11225 11226 11227File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 11228 1122911.5 Attributes in trees 11230======================== 11231 11232Attributes, as specified using the `__attribute__' keyword, are 11233represented internally as a `TREE_LIST'. The `TREE_PURPOSE' is the 11234name of the attribute, as an `IDENTIFIER_NODE'. The `TREE_VALUE' is a 11235`TREE_LIST' of the arguments of the attribute, if any, or `NULL_TREE' 11236if there are no arguments; the arguments are stored as the `TREE_VALUE' 11237of successive entries in the list, and may be identifiers or 11238expressions. The `TREE_CHAIN' of the attribute is the next attribute 11239in a list of attributes applying to the same declaration or type, or 11240`NULL_TREE' if there are no further attributes in the list. 11241 11242 Attributes may be attached to declarations and to types; these 11243attributes may be accessed with the following macros. All attributes 11244are stored in this way, and many also cause other changes to the 11245declaration or type or to other internal compiler data structures. 11246 11247 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 11248 This macro returns the attributes on the declaration DECL. 11249 11250 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 11251 This macro returns the attributes on the type TYPE. 11252 11253 11254File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 11255 1125611.6 Expressions 11257================ 11258 11259The internal representation for expressions is for the most part quite 11260straightforward. However, there are a few facts that one must bear in 11261mind. In particular, the expression "tree" is actually a directed 11262acyclic graph. (For example there may be many references to the integer 11263constant zero throughout the source program; many of these will be 11264represented by the same expression node.) You should not rely on 11265certain kinds of node being shared, nor should you rely on certain 11266kinds of nodes being unshared. 11267 11268 The following macros can be used with all expression nodes: 11269 11270`TREE_TYPE' 11271 Returns the type of the expression. This value may not be 11272 precisely the same type that would be given the expression in the 11273 original program. 11274 11275 In what follows, some nodes that one might expect to always have type 11276`bool' are documented to have either integral or boolean type. At some 11277point in the future, the C front end may also make use of this same 11278intermediate representation, and at this point these nodes will 11279certainly have integral type. The previous sentence is not meant to 11280imply that the C++ front end does not or will not give these nodes 11281integral type. 11282 11283 Below, we list the various kinds of expression nodes. Except where 11284noted otherwise, the operands to an expression are accessed using the 11285`TREE_OPERAND' macro. For example, to access the first operand to a 11286binary plus expression `expr', use: 11287 11288 TREE_OPERAND (expr, 0) 11289 As this example indicates, the operands are zero-indexed. 11290 11291* Menu: 11292 11293* Constants: Constant expressions. 11294* Storage References:: 11295* Unary and Binary Expressions:: 11296* Vectors:: 11297 11298 11299File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 11300 1130111.6.1 Constant expressions 11302--------------------------- 11303 11304The table below begins with constants, moves on to unary expressions, 11305then proceeds to binary expressions, and concludes with various other 11306kinds of expressions: 11307 11308`INTEGER_CST' 11309 These nodes represent integer constants. Note that the type of 11310 these constants is obtained with `TREE_TYPE'; they are not always 11311 of type `int'. In particular, `char' constants are represented 11312 with `INTEGER_CST' nodes. The value of the integer constant `e' is 11313 given by 11314 ((TREE_INT_CST_HIGH (e) << HOST_BITS_PER_WIDE_INT) 11315 + TREE_INST_CST_LOW (e)) 11316 HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms. 11317 Both `TREE_INT_CST_HIGH' and `TREE_INT_CST_LOW' return a 11318 `HOST_WIDE_INT'. The value of an `INTEGER_CST' is interpreted as 11319 a signed or unsigned quantity depending on the type of the 11320 constant. In general, the expression given above will overflow, 11321 so it should not be used to calculate the value of the constant. 11322 11323 The variable `integer_zero_node' is an integer constant with value 11324 zero. Similarly, `integer_one_node' is an integer constant with 11325 value one. The `size_zero_node' and `size_one_node' variables are 11326 analogous, but have type `size_t' rather than `int'. 11327 11328 The function `tree_int_cst_lt' is a predicate which holds if its 11329 first argument is less than its second. Both constants are 11330 assumed to have the same signedness (i.e., either both should be 11331 signed or both should be unsigned.) The full width of the 11332 constant is used when doing the comparison; the usual rules about 11333 promotions and conversions are ignored. Similarly, 11334 `tree_int_cst_equal' holds if the two constants are equal. The 11335 `tree_int_cst_sgn' function returns the sign of a constant. The 11336 value is `1', `0', or `-1' according on whether the constant is 11337 greater than, equal to, or less than zero. Again, the signedness 11338 of the constant's type is taken into account; an unsigned constant 11339 is never less than zero, no matter what its bit-pattern. 11340 11341`REAL_CST' 11342 FIXME: Talk about how to obtain representations of this constant, 11343 do comparisons, and so forth. 11344 11345`FIXED_CST' 11346 These nodes represent fixed-point constants. The type of these 11347 constants is obtained with `TREE_TYPE'. `TREE_FIXED_CST_PTR' 11348 points to a `struct fixed_value'; `TREE_FIXED_CST' returns the 11349 structure itself. `struct fixed_value' contains `data' with the 11350 size of two `HOST_BITS_PER_WIDE_INT' and `mode' as the associated 11351 fixed-point machine mode for `data'. 11352 11353`COMPLEX_CST' 11354 These nodes are used to represent complex number constants, that 11355 is a `__complex__' whose parts are constant nodes. The 11356 `TREE_REALPART' and `TREE_IMAGPART' return the real and the 11357 imaginary parts respectively. 11358 11359`VECTOR_CST' 11360 These nodes are used to represent vector constants, whose parts are 11361 constant nodes. Each individual constant node is either an 11362 integer or a double constant node. The first operand is a 11363 `TREE_LIST' of the constant nodes and is accessed through 11364 `TREE_VECTOR_CST_ELTS'. 11365 11366`STRING_CST' 11367 These nodes represent string-constants. The `TREE_STRING_LENGTH' 11368 returns the length of the string, as an `int'. The 11369 `TREE_STRING_POINTER' is a `char*' containing the string itself. 11370 The string may not be `NUL'-terminated, and it may contain 11371 embedded `NUL' characters. Therefore, the `TREE_STRING_LENGTH' 11372 includes the trailing `NUL' if it is present. 11373 11374 For wide string constants, the `TREE_STRING_LENGTH' is the number 11375 of bytes in the string, and the `TREE_STRING_POINTER' points to an 11376 array of the bytes of the string, as represented on the target 11377 system (that is, as integers in the target endianness). Wide and 11378 non-wide string constants are distinguished only by the `TREE_TYPE' 11379 of the `STRING_CST'. 11380 11381 FIXME: The formats of string constants are not well-defined when 11382 the target system bytes are not the same width as host system 11383 bytes. 11384 11385 11386 11387File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 11388 1138911.6.2 References to storage 11390---------------------------- 11391 11392`ARRAY_REF' 11393 These nodes represent array accesses. The first operand is the 11394 array; the second is the index. To calculate the address of the 11395 memory accessed, you must scale the index by the size of the type 11396 of the array elements. The type of these expressions must be the 11397 type of a component of the array. The third and fourth operands 11398 are used after gimplification to represent the lower bound and 11399 component size but should not be used directly; call 11400 `array_ref_low_bound' and `array_ref_element_size' instead. 11401 11402`ARRAY_RANGE_REF' 11403 These nodes represent access to a range (or "slice") of an array. 11404 The operands are the same as that for `ARRAY_REF' and have the same 11405 meanings. The type of these expressions must be an array whose 11406 component type is the same as that of the first operand. The 11407 range of that array type determines the amount of data these 11408 expressions access. 11409 11410`TARGET_MEM_REF' 11411 These nodes represent memory accesses whose address directly map to 11412 an addressing mode of the target architecture. The first argument 11413 is `TMR_SYMBOL' and must be a `VAR_DECL' of an object with a fixed 11414 address. The second argument is `TMR_BASE' and the third one is 11415 `TMR_INDEX'. The fourth argument is `TMR_STEP' and must be an 11416 `INTEGER_CST'. The fifth argument is `TMR_OFFSET' and must be an 11417 `INTEGER_CST'. Any of the arguments may be NULL if the 11418 appropriate component does not appear in the address. Address of 11419 the `TARGET_MEM_REF' is determined in the following way. 11420 11421 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 11422 11423 The sixth argument is the reference to the original memory access, 11424 which is preserved for the purposes of the RTL alias analysis. 11425 The seventh argument is a tag representing the results of tree 11426 level alias analysis. 11427 11428`ADDR_EXPR' 11429 These nodes are used to represent the address of an object. (These 11430 expressions will always have pointer or reference type.) The 11431 operand may be another expression, or it may be a declaration. 11432 11433 As an extension, GCC allows users to take the address of a label. 11434 In this case, the operand of the `ADDR_EXPR' will be a 11435 `LABEL_DECL'. The type of such an expression is `void*'. 11436 11437 If the object addressed is not an lvalue, a temporary is created, 11438 and the address of the temporary is used. 11439 11440`INDIRECT_REF' 11441 These nodes are used to represent the object pointed to by a 11442 pointer. The operand is the pointer being dereferenced; it will 11443 always have pointer or reference type. 11444 11445`COMPONENT_REF' 11446 These nodes represent non-static data member accesses. The first 11447 operand is the object (rather than a pointer to it); the second 11448 operand is the `FIELD_DECL' for the data member. The third 11449 operand represents the byte offset of the field, but should not be 11450 used directly; call `component_ref_field_offset' instead. 11451 11452 11453 11454File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 11455 1145611.6.3 Unary and Binary Expressions 11457----------------------------------- 11458 11459`NEGATE_EXPR' 11460 These nodes represent unary negation of the single operand, for 11461 both integer and floating-point types. The type of negation can be 11462 determined by looking at the type of the expression. 11463 11464 The behavior of this operation on signed arithmetic overflow is 11465 controlled by the `flag_wrapv' and `flag_trapv' variables. 11466 11467`ABS_EXPR' 11468 These nodes represent the absolute value of the single operand, for 11469 both integer and floating-point types. This is typically used to 11470 implement the `abs', `labs' and `llabs' builtins for integer 11471 types, and the `fabs', `fabsf' and `fabsl' builtins for floating 11472 point types. The type of abs operation can be determined by 11473 looking at the type of the expression. 11474 11475 This node is not used for complex types. To represent the modulus 11476 or complex abs of a complex value, use the `BUILT_IN_CABS', 11477 `BUILT_IN_CABSF' or `BUILT_IN_CABSL' builtins, as used to 11478 implement the C99 `cabs', `cabsf' and `cabsl' built-in functions. 11479 11480`BIT_NOT_EXPR' 11481 These nodes represent bitwise complement, and will always have 11482 integral type. The only operand is the value to be complemented. 11483 11484`TRUTH_NOT_EXPR' 11485 These nodes represent logical negation, and will always have 11486 integral (or boolean) type. The operand is the value being 11487 negated. The type of the operand and that of the result are 11488 always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 11489 11490`PREDECREMENT_EXPR' 11491`PREINCREMENT_EXPR' 11492`POSTDECREMENT_EXPR' 11493`POSTINCREMENT_EXPR' 11494 These nodes represent increment and decrement expressions. The 11495 value of the single operand is computed, and the operand 11496 incremented or decremented. In the case of `PREDECREMENT_EXPR' and 11497 `PREINCREMENT_EXPR', the value of the expression is the value 11498 resulting after the increment or decrement; in the case of 11499 `POSTDECREMENT_EXPR' and `POSTINCREMENT_EXPR' is the value before 11500 the increment or decrement occurs. The type of the operand, like 11501 that of the result, will be either integral, boolean, or 11502 floating-point. 11503 11504`FIX_TRUNC_EXPR' 11505 These nodes represent conversion of a floating-point value to an 11506 integer. The single operand will have a floating-point type, while 11507 the complete expression will have an integral (or boolean) type. 11508 The operand is rounded towards zero. 11509 11510`FLOAT_EXPR' 11511 These nodes represent conversion of an integral (or boolean) value 11512 to a floating-point value. The single operand will have integral 11513 type, while the complete expression will have a floating-point 11514 type. 11515 11516 FIXME: How is the operand supposed to be rounded? Is this 11517 dependent on `-mieee'? 11518 11519`COMPLEX_EXPR' 11520 These nodes are used to represent complex numbers constructed from 11521 two expressions of the same (integer or real) type. The first 11522 operand is the real part and the second operand is the imaginary 11523 part. 11524 11525`CONJ_EXPR' 11526 These nodes represent the conjugate of their operand. 11527 11528`REALPART_EXPR' 11529`IMAGPART_EXPR' 11530 These nodes represent respectively the real and the imaginary parts 11531 of complex numbers (their sole argument). 11532 11533`NON_LVALUE_EXPR' 11534 These nodes indicate that their one and only operand is not an 11535 lvalue. A back end can treat these identically to the single 11536 operand. 11537 11538`NOP_EXPR' 11539 These nodes are used to represent conversions that do not require 11540 any code-generation. For example, conversion of a `char*' to an 11541 `int*' does not require any code be generated; such a conversion is 11542 represented by a `NOP_EXPR'. The single operand is the expression 11543 to be converted. The conversion from a pointer to a reference is 11544 also represented with a `NOP_EXPR'. 11545 11546`CONVERT_EXPR' 11547 These nodes are similar to `NOP_EXPR's, but are used in those 11548 situations where code may need to be generated. For example, if an 11549 `int*' is converted to an `int' code may need to be generated on 11550 some platforms. These nodes are never used for C++-specific 11551 conversions, like conversions between pointers to different 11552 classes in an inheritance hierarchy. Any adjustments that need to 11553 be made in such cases are always indicated explicitly. Similarly, 11554 a user-defined conversion is never represented by a 11555 `CONVERT_EXPR'; instead, the function calls are made explicit. 11556 11557`FIXED_CONVERT_EXPR' 11558 These nodes are used to represent conversions that involve 11559 fixed-point values. For example, from a fixed-point value to 11560 another fixed-point value, from an integer to a fixed-point value, 11561 from a fixed-point value to an integer, from a floating-point 11562 value to a fixed-point value, or from a fixed-point value to a 11563 floating-point value. 11564 11565`LSHIFT_EXPR' 11566`RSHIFT_EXPR' 11567 These nodes represent left and right shifts, respectively. The 11568 first operand is the value to shift; it will always be of integral 11569 type. The second operand is an expression for the number of bits 11570 by which to shift. Right shift should be treated as arithmetic, 11571 i.e., the high-order bits should be zero-filled when the 11572 expression has unsigned type and filled with the sign bit when the 11573 expression has signed type. Note that the result is undefined if 11574 the second operand is larger than or equal to the first operand's 11575 type size. 11576 11577`BIT_IOR_EXPR' 11578`BIT_XOR_EXPR' 11579`BIT_AND_EXPR' 11580 These nodes represent bitwise inclusive or, bitwise exclusive or, 11581 and bitwise and, respectively. Both operands will always have 11582 integral type. 11583 11584`TRUTH_ANDIF_EXPR' 11585`TRUTH_ORIF_EXPR' 11586 These nodes represent logical "and" and logical "or", respectively. 11587 These operators are not strict; i.e., the second operand is 11588 evaluated only if the value of the expression is not determined by 11589 evaluation of the first operand. The type of the operands and 11590 that of the result are always of `BOOLEAN_TYPE' or `INTEGER_TYPE'. 11591 11592`TRUTH_AND_EXPR' 11593`TRUTH_OR_EXPR' 11594`TRUTH_XOR_EXPR' 11595 These nodes represent logical and, logical or, and logical 11596 exclusive or. They are strict; both arguments are always 11597 evaluated. There are no corresponding operators in C or C++, but 11598 the front end will sometimes generate these expressions anyhow, if 11599 it can tell that strictness does not matter. The type of the 11600 operands and that of the result are always of `BOOLEAN_TYPE' or 11601 `INTEGER_TYPE'. 11602 11603`POINTER_PLUS_EXPR' 11604 This node represents pointer arithmetic. The first operand is 11605 always a pointer/reference type. The second operand is always an 11606 unsigned integer type compatible with sizetype. This is the only 11607 binary arithmetic operand that can operate on pointer types. 11608 11609`PLUS_EXPR' 11610`MINUS_EXPR' 11611`MULT_EXPR' 11612 These nodes represent various binary arithmetic operations. 11613 Respectively, these operations are addition, subtraction (of the 11614 second operand from the first) and multiplication. Their operands 11615 may have either integral or floating type, but there will never be 11616 case in which one operand is of floating type and the other is of 11617 integral type. 11618 11619 The behavior of these operations on signed arithmetic overflow is 11620 controlled by the `flag_wrapv' and `flag_trapv' variables. 11621 11622`RDIV_EXPR' 11623 This node represents a floating point division operation. 11624 11625`TRUNC_DIV_EXPR' 11626`FLOOR_DIV_EXPR' 11627`CEIL_DIV_EXPR' 11628`ROUND_DIV_EXPR' 11629 These nodes represent integer division operations that return an 11630 integer result. `TRUNC_DIV_EXPR' rounds towards zero, 11631 `FLOOR_DIV_EXPR' rounds towards negative infinity, `CEIL_DIV_EXPR' 11632 rounds towards positive infinity and `ROUND_DIV_EXPR' rounds to 11633 the closest integer. Integer division in C and C++ is truncating, 11634 i.e. `TRUNC_DIV_EXPR'. 11635 11636 The behavior of these operations on signed arithmetic overflow, 11637 when dividing the minimum signed integer by minus one, is 11638 controlled by the `flag_wrapv' and `flag_trapv' variables. 11639 11640`TRUNC_MOD_EXPR' 11641`FLOOR_MOD_EXPR' 11642`CEIL_MOD_EXPR' 11643`ROUND_MOD_EXPR' 11644 These nodes represent the integer remainder or modulus operation. 11645 The integer modulus of two operands `a' and `b' is defined as `a - 11646 (a/b)*b' where the division calculated using the corresponding 11647 division operator. Hence for `TRUNC_MOD_EXPR' this definition 11648 assumes division using truncation towards zero, i.e. 11649 `TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 11650 division, i.e. `TRUNC_MOD_EXPR'. 11651 11652`EXACT_DIV_EXPR' 11653 The `EXACT_DIV_EXPR' code is used to represent integer divisions 11654 where the numerator is known to be an exact multiple of the 11655 denominator. This allows the backend to choose between the faster 11656 of `TRUNC_DIV_EXPR', `CEIL_DIV_EXPR' and `FLOOR_DIV_EXPR' for the 11657 current target. 11658 11659`LT_EXPR' 11660`LE_EXPR' 11661`GT_EXPR' 11662`GE_EXPR' 11663`EQ_EXPR' 11664`NE_EXPR' 11665 These nodes represent the less than, less than or equal to, greater 11666 than, greater than or equal to, equal, and not equal comparison 11667 operators. The first and second operand with either be both of 11668 integral type or both of floating type. The result type of these 11669 expressions will always be of integral or boolean type. These 11670 operations return the result type's zero value for false, and the 11671 result type's one value for true. 11672 11673 For floating point comparisons, if we honor IEEE NaNs and either 11674 operand is NaN, then `NE_EXPR' always returns true and the 11675 remaining operators always return false. On some targets, 11676 comparisons against an IEEE NaN, other than equality and 11677 inequality, may generate a floating point exception. 11678 11679`ORDERED_EXPR' 11680`UNORDERED_EXPR' 11681 These nodes represent non-trapping ordered and unordered comparison 11682 operators. These operations take two floating point operands and 11683 determine whether they are ordered or unordered relative to each 11684 other. If either operand is an IEEE NaN, their comparison is 11685 defined to be unordered, otherwise the comparison is defined to be 11686 ordered. The result type of these expressions will always be of 11687 integral or boolean type. These operations return the result 11688 type's zero value for false, and the result type's one value for 11689 true. 11690 11691`UNLT_EXPR' 11692`UNLE_EXPR' 11693`UNGT_EXPR' 11694`UNGE_EXPR' 11695`UNEQ_EXPR' 11696`LTGT_EXPR' 11697 These nodes represent the unordered comparison operators. These 11698 operations take two floating point operands and determine whether 11699 the operands are unordered or are less than, less than or equal to, 11700 greater than, greater than or equal to, or equal respectively. For 11701 example, `UNLT_EXPR' returns true if either operand is an IEEE NaN 11702 or the first operand is less than the second. With the possible 11703 exception of `LTGT_EXPR', all of these operations are guaranteed 11704 not to generate a floating point exception. The result type of 11705 these expressions will always be of integral or boolean type. 11706 These operations return the result type's zero value for false, 11707 and the result type's one value for true. 11708 11709`MODIFY_EXPR' 11710 These nodes represent assignment. The left-hand side is the first 11711 operand; the right-hand side is the second operand. The left-hand 11712 side will be a `VAR_DECL', `INDIRECT_REF', `COMPONENT_REF', or 11713 other lvalue. 11714 11715 These nodes are used to represent not only assignment with `=' but 11716 also compound assignments (like `+='), by reduction to `=' 11717 assignment. In other words, the representation for `i += 3' looks 11718 just like that for `i = i + 3'. 11719 11720`INIT_EXPR' 11721 These nodes are just like `MODIFY_EXPR', but are used only when a 11722 variable is initialized, rather than assigned to subsequently. 11723 This means that we can assume that the target of the 11724 initialization is not used in computing its own value; any 11725 reference to the lhs in computing the rhs is undefined. 11726 11727`COMPOUND_EXPR' 11728 These nodes represent comma-expressions. The first operand is an 11729 expression whose value is computed and thrown away prior to the 11730 evaluation of the second operand. The value of the entire 11731 expression is the value of the second operand. 11732 11733`COND_EXPR' 11734 These nodes represent `?:' expressions. The first operand is of 11735 boolean or integral type. If it evaluates to a nonzero value, the 11736 second operand should be evaluated, and returned as the value of 11737 the expression. Otherwise, the third operand is evaluated, and 11738 returned as the value of the expression. 11739 11740 The second operand must have the same type as the entire 11741 expression, unless it unconditionally throws an exception or calls 11742 a noreturn function, in which case it should have void type. The 11743 same constraints apply to the third operand. This allows array 11744 bounds checks to be represented conveniently as `(i >= 0 && i < 11745 10) ? i : abort()'. 11746 11747 As a GNU extension, the C language front-ends allow the second 11748 operand of the `?:' operator may be omitted in the source. For 11749 example, `x ? : 3' is equivalent to `x ? x : 3', assuming that `x' 11750 is an expression without side-effects. In the tree 11751 representation, however, the second operand is always present, 11752 possibly protected by `SAVE_EXPR' if the first argument does cause 11753 side-effects. 11754 11755`CALL_EXPR' 11756 These nodes are used to represent calls to functions, including 11757 non-static member functions. `CALL_EXPR's are implemented as 11758 expression nodes with a variable number of operands. Rather than 11759 using `TREE_OPERAND' to extract them, it is preferable to use the 11760 specialized accessor macros and functions that operate 11761 specifically on `CALL_EXPR' nodes. 11762 11763 `CALL_EXPR_FN' returns a pointer to the function to call; it is 11764 always an expression whose type is a `POINTER_TYPE'. 11765 11766 The number of arguments to the call is returned by 11767 `call_expr_nargs', while the arguments themselves can be accessed 11768 with the `CALL_EXPR_ARG' macro. The arguments are zero-indexed 11769 and numbered left-to-right. You can iterate over the arguments 11770 using `FOR_EACH_CALL_EXPR_ARG', as in: 11771 11772 tree call, arg; 11773 call_expr_arg_iterator iter; 11774 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 11775 /* arg is bound to successive arguments of call. */ 11776 ...; 11777 11778 For non-static member functions, there will be an operand 11779 corresponding to the `this' pointer. There will always be 11780 expressions corresponding to all of the arguments, even if the 11781 function is declared with default arguments and some arguments are 11782 not explicitly provided at the call sites. 11783 11784 `CALL_EXPR's also have a `CALL_EXPR_STATIC_CHAIN' operand that is 11785 used to implement nested functions. This operand is otherwise 11786 null. 11787 11788`CLEANUP_POINT_EXPR' 11789 These nodes represent full-expressions. The single operand is an 11790 expression to evaluate. Any destructor calls engendered by the 11791 creation of temporaries during the evaluation of that expression 11792 should be performed immediately after the expression is evaluated. 11793 11794`CONSTRUCTOR' 11795 These nodes represent the brace-enclosed initializers for a 11796 structure or array. The first operand is reserved for use by the 11797 back end. The second operand is a `TREE_LIST'. If the 11798 `TREE_TYPE' of the `CONSTRUCTOR' is a `RECORD_TYPE' or 11799 `UNION_TYPE', then the `TREE_PURPOSE' of each node in the 11800 `TREE_LIST' will be a `FIELD_DECL' and the `TREE_VALUE' of each 11801 node will be the expression used to initialize that field. 11802 11803 If the `TREE_TYPE' of the `CONSTRUCTOR' is an `ARRAY_TYPE', then 11804 the `TREE_PURPOSE' of each element in the `TREE_LIST' will be an 11805 `INTEGER_CST' or a `RANGE_EXPR' of two `INTEGER_CST's. A single 11806 `INTEGER_CST' indicates which element of the array (indexed from 11807 zero) is being assigned to. A `RANGE_EXPR' indicates an inclusive 11808 range of elements to initialize. In both cases the `TREE_VALUE' 11809 is the corresponding initializer. It is re-evaluated for each 11810 element of a `RANGE_EXPR'. If the `TREE_PURPOSE' is `NULL_TREE', 11811 then the initializer is for the next available array element. 11812 11813 In the front end, you should not depend on the fields appearing in 11814 any particular order. However, in the middle end, fields must 11815 appear in declaration order. You should not assume that all 11816 fields will be represented. Unrepresented fields will be set to 11817 zero. 11818 11819`COMPOUND_LITERAL_EXPR' 11820 These nodes represent ISO C99 compound literals. The 11821 `COMPOUND_LITERAL_EXPR_DECL_EXPR' is a `DECL_EXPR' containing an 11822 anonymous `VAR_DECL' for the unnamed object represented by the 11823 compound literal; the `DECL_INITIAL' of that `VAR_DECL' is a 11824 `CONSTRUCTOR' representing the brace-enclosed list of initializers 11825 in the compound literal. That anonymous `VAR_DECL' can also be 11826 accessed directly by the `COMPOUND_LITERAL_EXPR_DECL' macro. 11827 11828`SAVE_EXPR' 11829 A `SAVE_EXPR' represents an expression (possibly involving 11830 side-effects) that is used more than once. The side-effects should 11831 occur only the first time the expression is evaluated. Subsequent 11832 uses should just reuse the computed value. The first operand to 11833 the `SAVE_EXPR' is the expression to evaluate. The side-effects 11834 should be executed where the `SAVE_EXPR' is first encountered in a 11835 depth-first preorder traversal of the expression tree. 11836 11837`TARGET_EXPR' 11838 A `TARGET_EXPR' represents a temporary object. The first operand 11839 is a `VAR_DECL' for the temporary variable. The second operand is 11840 the initializer for the temporary. The initializer is evaluated 11841 and, if non-void, copied (bitwise) into the temporary. If the 11842 initializer is void, that means that it will perform the 11843 initialization itself. 11844 11845 Often, a `TARGET_EXPR' occurs on the right-hand side of an 11846 assignment, or as the second operand to a comma-expression which is 11847 itself the right-hand side of an assignment, etc. In this case, 11848 we say that the `TARGET_EXPR' is "normal"; otherwise, we say it is 11849 "orphaned". For a normal `TARGET_EXPR' the temporary variable 11850 should be treated as an alias for the left-hand side of the 11851 assignment, rather than as a new temporary variable. 11852 11853 The third operand to the `TARGET_EXPR', if present, is a 11854 cleanup-expression (i.e., destructor call) for the temporary. If 11855 this expression is orphaned, then this expression must be executed 11856 when the statement containing this expression is complete. These 11857 cleanups must always be executed in the order opposite to that in 11858 which they were encountered. Note that if a temporary is created 11859 on one branch of a conditional operator (i.e., in the second or 11860 third operand to a `COND_EXPR'), the cleanup must be run only if 11861 that branch is actually executed. 11862 11863`VA_ARG_EXPR' 11864 This node is used to implement support for the C/C++ variable 11865 argument-list mechanism. It represents expressions like `va_arg 11866 (ap, type)'. Its `TREE_TYPE' yields the tree representation for 11867 `type' and its sole argument yields the representation for `ap'. 11868 11869 11870 11871File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 11872 1187311.6.4 Vectors 11874-------------- 11875 11876`VEC_LSHIFT_EXPR' 11877`VEC_RSHIFT_EXPR' 11878 These nodes represent whole vector left and right shifts, 11879 respectively. The first operand is the vector to shift; it will 11880 always be of vector type. The second operand is an expression for 11881 the number of bits by which to shift. Note that the result is 11882 undefined if the second operand is larger than or equal to the 11883 first operand's type size. 11884 11885`VEC_WIDEN_MULT_HI_EXPR' 11886`VEC_WIDEN_MULT_LO_EXPR' 11887 These nodes represent widening vector multiplication of the high 11888 and low parts of the two input vectors, respectively. Their 11889 operands are vectors that contain the same number of elements 11890 (`N') of the same integral type. The result is a vector that 11891 contains half as many elements, of an integral type whose size is 11892 twice as wide. In the case of `VEC_WIDEN_MULT_HI_EXPR' the high 11893 `N/2' elements of the two vector are multiplied to produce the 11894 vector of `N/2' products. In the case of `VEC_WIDEN_MULT_LO_EXPR' 11895 the low `N/2' elements of the two vector are multiplied to produce 11896 the vector of `N/2' products. 11897 11898`VEC_UNPACK_HI_EXPR' 11899`VEC_UNPACK_LO_EXPR' 11900 These nodes represent unpacking of the high and low parts of the 11901 input vector, respectively. The single operand is a vector that 11902 contains `N' elements of the same integral or floating point type. 11903 The result is a vector that contains half as many elements, of an 11904 integral or floating point type whose size is twice as wide. In 11905 the case of `VEC_UNPACK_HI_EXPR' the high `N/2' elements of the 11906 vector are extracted and widened (promoted). In the case of 11907 `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the vector are 11908 extracted and widened (promoted). 11909 11910`VEC_UNPACK_FLOAT_HI_EXPR' 11911`VEC_UNPACK_FLOAT_LO_EXPR' 11912 These nodes represent unpacking of the high and low parts of the 11913 input vector, where the values are converted from fixed point to 11914 floating point. The single operand is a vector that contains `N' 11915 elements of the same integral type. The result is a vector that 11916 contains half as many elements of a floating point type whose size 11917 is twice as wide. In the case of `VEC_UNPACK_HI_EXPR' the high 11918 `N/2' elements of the vector are extracted, converted and widened. 11919 In the case of `VEC_UNPACK_LO_EXPR' the low `N/2' elements of the 11920 vector are extracted, converted and widened. 11921 11922`VEC_PACK_TRUNC_EXPR' 11923 This node represents packing of truncated elements of the two 11924 input vectors into the output vector. Input operands are vectors 11925 that contain the same number of elements of the same integral or 11926 floating point type. The result is a vector that contains twice 11927 as many elements of an integral or floating point type whose size 11928 is half as wide. The elements of the two vectors are demoted and 11929 merged (concatenated) to form the output vector. 11930 11931`VEC_PACK_SAT_EXPR' 11932 This node represents packing of elements of the two input vectors 11933 into the output vector using saturation. Input operands are 11934 vectors that contain the same number of elements of the same 11935 integral type. The result is a vector that contains twice as many 11936 elements of an integral type whose size is half as wide. The 11937 elements of the two vectors are demoted and merged (concatenated) 11938 to form the output vector. 11939 11940`VEC_PACK_FIX_TRUNC_EXPR' 11941 This node represents packing of elements of the two input vectors 11942 into the output vector, where the values are converted from 11943 floating point to fixed point. Input operands are vectors that 11944 contain the same number of elements of a floating point type. The 11945 result is a vector that contains twice as many elements of an 11946 integral type whose size is half as wide. The elements of the two 11947 vectors are merged (concatenated) to form the output vector. 11948 11949`VEC_EXTRACT_EVEN_EXPR' 11950`VEC_EXTRACT_ODD_EXPR' 11951 These nodes represent extracting of the even/odd elements of the 11952 two input vectors, respectively. Their operands and result are 11953 vectors that contain the same number of elements of the same type. 11954 11955`VEC_INTERLEAVE_HIGH_EXPR' 11956`VEC_INTERLEAVE_LOW_EXPR' 11957 These nodes represent merging and interleaving of the high/low 11958 elements of the two input vectors, respectively. The operands and 11959 the result are vectors that contain the same number of elements 11960 (`N') of the same type. In the case of 11961 `VEC_INTERLEAVE_HIGH_EXPR', the high `N/2' elements of the first 11962 input vector are interleaved with the high `N/2' elements of the 11963 second input vector. In the case of `VEC_INTERLEAVE_LOW_EXPR', the 11964 low `N/2' elements of the first input vector are interleaved with 11965 the low `N/2' elements of the second input vector. 11966 11967 11968 11969File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 11970 1197111.7 Statements 11972=============== 11973 11974Most statements in GIMPLE are assignment statements, represented by 11975`GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 11976a reference to a volatile object is converted into a `GIMPLE_ASSIGN'. 11977 11978 There are also several varieties of complex statements. 11979 11980* Menu: 11981 11982* Basic Statements:: 11983* Blocks:: 11984* Statement Sequences:: 11985* Empty Statements:: 11986* Jumps:: 11987* Cleanups:: 11988* OpenMP:: 11989 11990 11991File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 11992 1199311.7.1 Basic Statements 11994----------------------- 11995 11996`ASM_EXPR' 11997 Used to represent an inline assembly statement. For an inline 11998 assembly statement like: 11999 asm ("mov x, y"); 12000 The `ASM_STRING' macro will return a `STRING_CST' node for `"mov 12001 x, y"'. If the original statement made use of the 12002 extended-assembly syntax, then `ASM_OUTPUTS', `ASM_INPUTS', and 12003 `ASM_CLOBBERS' will be the outputs, inputs, and clobbers for the 12004 statement, represented as `STRING_CST' nodes. The 12005 extended-assembly syntax looks like: 12006 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 12007 The first string is the `ASM_STRING', containing the instruction 12008 template. The next two strings are the output and inputs, 12009 respectively; this statement has no clobbers. As this example 12010 indicates, "plain" assembly statements are merely a special case 12011 of extended assembly statements; they have no cv-qualifiers, 12012 outputs, inputs, or clobbers. All of the strings will be 12013 `NUL'-terminated, and will contain no embedded `NUL'-characters. 12014 12015 If the assembly statement is declared `volatile', or if the 12016 statement was not an extended assembly statement, and is therefore 12017 implicitly volatile, then the predicate `ASM_VOLATILE_P' will hold 12018 of the `ASM_EXPR'. 12019 12020`DECL_EXPR' 12021 Used to represent a local declaration. The `DECL_EXPR_DECL' macro 12022 can be used to obtain the entity declared. This declaration may 12023 be a `LABEL_DECL', indicating that the label declared is a local 12024 label. (As an extension, GCC allows the declaration of labels 12025 with scope.) In C, this declaration may be a `FUNCTION_DECL', 12026 indicating the use of the GCC nested function extension. For more 12027 information, *note Functions::. 12028 12029`LABEL_EXPR' 12030 Used to represent a label. The `LABEL_DECL' declared by this 12031 statement can be obtained with the `LABEL_EXPR_LABEL' macro. The 12032 `IDENTIFIER_NODE' giving the name of the label can be obtained from 12033 the `LABEL_DECL' with `DECL_NAME'. 12034 12035`GOTO_EXPR' 12036 Used to represent a `goto' statement. The `GOTO_DESTINATION' will 12037 usually be a `LABEL_DECL'. However, if the "computed goto" 12038 extension has been used, the `GOTO_DESTINATION' will be an 12039 arbitrary expression indicating the destination. This expression 12040 will always have pointer type. 12041 12042`RETURN_EXPR' 12043 Used to represent a `return' statement. Operand 0 represents the 12044 value to return. It should either be the `RESULT_DECL' for the 12045 containing function, or a `MODIFY_EXPR' or `INIT_EXPR' setting the 12046 function's `RESULT_DECL'. It will be `NULL_TREE' if the statement 12047 was just 12048 return; 12049 12050`LOOP_EXPR' 12051 These nodes represent "infinite" loops. The `LOOP_EXPR_BODY' 12052 represents the body of the loop. It should be executed forever, 12053 unless an `EXIT_EXPR' is encountered. 12054 12055`EXIT_EXPR' 12056 These nodes represent conditional exits from the nearest enclosing 12057 `LOOP_EXPR'. The single operand is the condition; if it is 12058 nonzero, then the loop should be exited. An `EXIT_EXPR' will only 12059 appear within a `LOOP_EXPR'. 12060 12061`SWITCH_STMT' 12062 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is 12063 the expression on which the switch is occurring. See the 12064 documentation for an `IF_STMT' for more information on the 12065 representation used for the condition. The `SWITCH_STMT_BODY' is 12066 the body of the switch statement. The `SWITCH_STMT_TYPE' is the 12067 original type of switch expression as given in the source, before 12068 any compiler conversions. 12069 12070`CASE_LABEL_EXPR' 12071 Use to represent a `case' label, range of `case' labels, or a 12072 `default' label. If `CASE_LOW' is `NULL_TREE', then this is a 12073 `default' label. Otherwise, if `CASE_HIGH' is `NULL_TREE', then 12074 this is an ordinary `case' label. In this case, `CASE_LOW' is an 12075 expression giving the value of the label. Both `CASE_LOW' and 12076 `CASE_HIGH' are `INTEGER_CST' nodes. These values will have the 12077 same type as the condition expression in the switch statement. 12078 12079 Otherwise, if both `CASE_LOW' and `CASE_HIGH' are defined, the 12080 statement is a range of case labels. Such statements originate 12081 with the extension that allows users to write things of the form: 12082 case 2 ... 5: 12083 The first value will be `CASE_LOW', while the second will be 12084 `CASE_HIGH'. 12085 12086 12087 12088File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 12089 1209011.7.2 Blocks 12091------------- 12092 12093Block scopes and the variables they declare in GENERIC are expressed 12094using the `BIND_EXPR' code, which in previous versions of GCC was 12095primarily used for the C statement-expression extension. 12096 12097 Variables in a block are collected into `BIND_EXPR_VARS' in 12098declaration order through their `TREE_CHAIN' field. Any runtime 12099initialization is moved out of `DECL_INITIAL' and into a statement in 12100the controlled block. When gimplifying from C or C++, this 12101initialization replaces the `DECL_STMT'. These variables will never 12102require cleanups. The scope of these variables is just the body 12103 12104 Variable-length arrays (VLAs) complicate this process, as their size 12105often refers to variables initialized earlier in the block. To handle 12106this, we currently split the block at that point, and move the VLA into 12107a new, inner `BIND_EXPR'. This strategy may change in the future. 12108 12109 A C++ program will usually contain more `BIND_EXPR's than there are 12110syntactic blocks in the source code, since several C++ constructs have 12111implicit scopes associated with them. On the other hand, although the 12112C++ front end uses pseudo-scopes to handle cleanups for objects with 12113destructors, these don't translate into the GIMPLE form; multiple 12114declarations at the same level use the same `BIND_EXPR'. 12115 12116 12117File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 12118 1211911.7.3 Statement Sequences 12120-------------------------- 12121 12122Multiple statements at the same nesting level are collected into a 12123`STATEMENT_LIST'. Statement lists are modified and traversed using the 12124interface in `tree-iterator.h'. 12125 12126 12127File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 12128 1212911.7.4 Empty Statements 12130----------------------- 12131 12132Whenever possible, statements with no effect are discarded. But if 12133they are nested within another construct which cannot be discarded for 12134some reason, they are instead replaced with an empty statement, 12135generated by `build_empty_stmt'. Initially, all empty statements were 12136shared, after the pattern of the Java front end, but this caused a lot 12137of trouble in practice. 12138 12139 An empty statement is represented as `(void)0'. 12140 12141 12142File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 12143 1214411.7.5 Jumps 12145------------ 12146 12147Other jumps are expressed by either `GOTO_EXPR' or `RETURN_EXPR'. 12148 12149 The operand of a `GOTO_EXPR' must be either a label or a variable 12150containing the address to jump to. 12151 12152 The operand of a `RETURN_EXPR' is either `NULL_TREE', `RESULT_DECL', 12153or a `MODIFY_EXPR' which sets the return value. It would be nice to 12154move the `MODIFY_EXPR' into a separate statement, but the special 12155return semantics in `expand_return' make that difficult. It may still 12156happen in the future, perhaps by moving most of that logic into 12157`expand_assignment'. 12158 12159 12160File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 12161 1216211.7.6 Cleanups 12163--------------- 12164 12165Destructors for local C++ objects and similar dynamic cleanups are 12166represented in GIMPLE by a `TRY_FINALLY_EXPR'. `TRY_FINALLY_EXPR' has 12167two operands, both of which are a sequence of statements to execute. 12168The first sequence is executed. When it completes the second sequence 12169is executed. 12170 12171 The first sequence may complete in the following ways: 12172 12173 1. Execute the last statement in the sequence and fall off the end. 12174 12175 2. Execute a goto statement (`GOTO_EXPR') to an ordinary label 12176 outside the sequence. 12177 12178 3. Execute a return statement (`RETURN_EXPR'). 12179 12180 4. Throw an exception. This is currently not explicitly represented 12181 in GIMPLE. 12182 12183 12184 The second sequence is not executed if the first sequence completes by 12185calling `setjmp' or `exit' or any other function that does not return. 12186The second sequence is also not executed if the first sequence 12187completes via a non-local goto or a computed goto (in general the 12188compiler does not know whether such a goto statement exits the first 12189sequence or not, so we assume that it doesn't). 12190 12191 After the second sequence is executed, if it completes normally by 12192falling off the end, execution continues wherever the first sequence 12193would have continued, by falling off the end, or doing a goto, etc. 12194 12195 `TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 12196to appear on every edge out of the controlled block; this reduces the 12197freedom to move code across these edges. Therefore, the EH lowering 12198pass which runs before most of the optimization passes eliminates these 12199expressions by explicitly adding the cleanup to each edge. Rethrowing 12200the exception is represented using `RESX_EXPR'. 12201 12202 12203File: gccint.info, Node: OpenMP, Prev: Cleanups, Up: Statements 12204 1220511.7.7 OpenMP 12206------------- 12207 12208All the statements starting with `OMP_' represent directives and 12209clauses used by the OpenMP API `http://www.openmp.org/'. 12210 12211`OMP_PARALLEL' 12212 Represents `#pragma omp parallel [clause1 ... clauseN]'. It has 12213 four operands: 12214 12215 Operand `OMP_PARALLEL_BODY' is valid while in GENERIC and High 12216 GIMPLE forms. It contains the body of code to be executed by all 12217 the threads. During GIMPLE lowering, this operand becomes `NULL' 12218 and the body is emitted linearly after `OMP_PARALLEL'. 12219 12220 Operand `OMP_PARALLEL_CLAUSES' is the list of clauses associated 12221 with the directive. 12222 12223 Operand `OMP_PARALLEL_FN' is created by `pass_lower_omp', it 12224 contains the `FUNCTION_DECL' for the function that will contain 12225 the body of the parallel region. 12226 12227 Operand `OMP_PARALLEL_DATA_ARG' is also created by 12228 `pass_lower_omp'. If there are shared variables to be communicated 12229 to the children threads, this operand will contain the `VAR_DECL' 12230 that contains all the shared values and variables. 12231 12232`OMP_FOR' 12233 Represents `#pragma omp for [clause1 ... clauseN]'. It has 5 12234 operands: 12235 12236 Operand `OMP_FOR_BODY' contains the loop body. 12237 12238 Operand `OMP_FOR_CLAUSES' is the list of clauses associated with 12239 the directive. 12240 12241 Operand `OMP_FOR_INIT' is the loop initialization code of the form 12242 `VAR = N1'. 12243 12244 Operand `OMP_FOR_COND' is the loop conditional expression of the 12245 form `VAR {<,>,<=,>=} N2'. 12246 12247 Operand `OMP_FOR_INCR' is the loop index increment of the form 12248 `VAR {+=,-=} INCR'. 12249 12250 Operand `OMP_FOR_PRE_BODY' contains side-effect code from operands 12251 `OMP_FOR_INIT', `OMP_FOR_COND' and `OMP_FOR_INC'. These 12252 side-effects are part of the `OMP_FOR' block but must be evaluated 12253 before the start of loop body. 12254 12255 The loop index variable `VAR' must be a signed integer variable, 12256 which is implicitly private to each thread. Bounds `N1' and `N2' 12257 and the increment expression `INCR' are required to be loop 12258 invariant integer expressions that are evaluated without any 12259 synchronization. The evaluation order, frequency of evaluation and 12260 side-effects are unspecified by the standard. 12261 12262`OMP_SECTIONS' 12263 Represents `#pragma omp sections [clause1 ... clauseN]'. 12264 12265 Operand `OMP_SECTIONS_BODY' contains the sections body, which in 12266 turn contains a set of `OMP_SECTION' nodes for each of the 12267 concurrent sections delimited by `#pragma omp section'. 12268 12269 Operand `OMP_SECTIONS_CLAUSES' is the list of clauses associated 12270 with the directive. 12271 12272`OMP_SECTION' 12273 Section delimiter for `OMP_SECTIONS'. 12274 12275`OMP_SINGLE' 12276 Represents `#pragma omp single'. 12277 12278 Operand `OMP_SINGLE_BODY' contains the body of code to be executed 12279 by a single thread. 12280 12281 Operand `OMP_SINGLE_CLAUSES' is the list of clauses associated 12282 with the directive. 12283 12284`OMP_MASTER' 12285 Represents `#pragma omp master'. 12286 12287 Operand `OMP_MASTER_BODY' contains the body of code to be executed 12288 by the master thread. 12289 12290`OMP_ORDERED' 12291 Represents `#pragma omp ordered'. 12292 12293 Operand `OMP_ORDERED_BODY' contains the body of code to be 12294 executed in the sequential order dictated by the loop index 12295 variable. 12296 12297`OMP_CRITICAL' 12298 Represents `#pragma omp critical [name]'. 12299 12300 Operand `OMP_CRITICAL_BODY' is the critical section. 12301 12302 Operand `OMP_CRITICAL_NAME' is an optional identifier to label the 12303 critical section. 12304 12305`OMP_RETURN' 12306 This does not represent any OpenMP directive, it is an artificial 12307 marker to indicate the end of the body of an OpenMP. It is used by 12308 the flow graph (`tree-cfg.c') and OpenMP region building code 12309 (`omp-low.c'). 12310 12311`OMP_CONTINUE' 12312 Similarly, this instruction does not represent an OpenMP 12313 directive, it is used by `OMP_FOR' and `OMP_SECTIONS' to mark the 12314 place where the code needs to loop to the next iteration (in the 12315 case of `OMP_FOR') or the next section (in the case of 12316 `OMP_SECTIONS'). 12317 12318 In some cases, `OMP_CONTINUE' is placed right before `OMP_RETURN'. 12319 But if there are cleanups that need to occur right after the 12320 looping body, it will be emitted between `OMP_CONTINUE' and 12321 `OMP_RETURN'. 12322 12323`OMP_ATOMIC' 12324 Represents `#pragma omp atomic'. 12325 12326 Operand 0 is the address at which the atomic operation is to be 12327 performed. 12328 12329 Operand 1 is the expression to evaluate. The gimplifier tries 12330 three alternative code generation strategies. Whenever possible, 12331 an atomic update built-in is used. If that fails, a 12332 compare-and-swap loop is attempted. If that also fails, a regular 12333 critical section around the expression is used. 12334 12335`OMP_CLAUSE' 12336 Represents clauses associated with one of the `OMP_' directives. 12337 Clauses are represented by separate sub-codes defined in `tree.h'. 12338 Clauses codes can be one of: `OMP_CLAUSE_PRIVATE', 12339 `OMP_CLAUSE_SHARED', `OMP_CLAUSE_FIRSTPRIVATE', 12340 `OMP_CLAUSE_LASTPRIVATE', `OMP_CLAUSE_COPYIN', 12341 `OMP_CLAUSE_COPYPRIVATE', `OMP_CLAUSE_IF', 12342 `OMP_CLAUSE_NUM_THREADS', `OMP_CLAUSE_SCHEDULE', 12343 `OMP_CLAUSE_NOWAIT', `OMP_CLAUSE_ORDERED', `OMP_CLAUSE_DEFAULT', 12344 and `OMP_CLAUSE_REDUCTION'. Each code represents the 12345 corresponding OpenMP clause. 12346 12347 Clauses associated with the same directive are chained together 12348 via `OMP_CLAUSE_CHAIN'. Those clauses that accept a list of 12349 variables are restricted to exactly one, accessed with 12350 `OMP_CLAUSE_VAR'. Therefore, multiple variables under the same 12351 clause `C' need to be represented as multiple `C' clauses chained 12352 together. This facilitates adding new clauses during compilation. 12353 12354 12355 12356File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 12357 1235811.8 Functions 12359============== 12360 12361A function is represented by a `FUNCTION_DECL' node. It stores the 12362basic pieces of the function such as body, parameters, and return type 12363as well as information on the surrounding context, visibility, and 12364linkage. 12365 12366* Menu: 12367 12368* Function Basics:: Function names, body, and parameters. 12369* Function Properties:: Context, linkage, etc. 12370 12371 12372File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 12373 1237411.8.1 Function Basics 12375---------------------- 12376 12377A function has four core parts: the name, the parameters, the result, 12378and the body. The following macros and functions access these parts of 12379a `FUNCTION_DECL' as well as other basic features: 12380`DECL_NAME' 12381 This macro returns the unqualified name of the function, as an 12382 `IDENTIFIER_NODE'. For an instantiation of a function template, 12383 the `DECL_NAME' is the unqualified name of the template, not 12384 something like `f<int>'. The value of `DECL_NAME' is undefined 12385 when used on a constructor, destructor, overloaded operator, or 12386 type-conversion operator, or any function that is implicitly 12387 generated by the compiler. See below for macros that can be used 12388 to distinguish these cases. 12389 12390`DECL_ASSEMBLER_NAME' 12391 This macro returns the mangled name of the function, also an 12392 `IDENTIFIER_NODE'. This name does not contain leading underscores 12393 on systems that prefix all identifiers with underscores. The 12394 mangled name is computed in the same way on all platforms; if 12395 special processing is required to deal with the object file format 12396 used on a particular platform, it is the responsibility of the 12397 back end to perform those modifications. (Of course, the back end 12398 should not modify `DECL_ASSEMBLER_NAME' itself.) 12399 12400 Using `DECL_ASSEMBLER_NAME' will cause additional memory to be 12401 allocated (for the mangled name of the entity) so it should be used 12402 only when emitting assembly code. It should not be used within the 12403 optimizers to determine whether or not two declarations are the 12404 same, even though some of the existing optimizers do use it in 12405 that way. These uses will be removed over time. 12406 12407`DECL_ARGUMENTS' 12408 This macro returns the `PARM_DECL' for the first argument to the 12409 function. Subsequent `PARM_DECL' nodes can be obtained by 12410 following the `TREE_CHAIN' links. 12411 12412`DECL_RESULT' 12413 This macro returns the `RESULT_DECL' for the function. 12414 12415`DECL_SAVED_TREE' 12416 This macro returns the complete body of the function. 12417 12418`TREE_TYPE' 12419 This macro returns the `FUNCTION_TYPE' or `METHOD_TYPE' for the 12420 function. 12421 12422`DECL_INITIAL' 12423 A function that has a definition in the current translation unit 12424 will have a non-`NULL' `DECL_INITIAL'. However, back ends should 12425 not make use of the particular value given by `DECL_INITIAL'. 12426 12427 It should contain a tree of `BLOCK' nodes that mirrors the scopes 12428 that variables are bound in the function. Each block contains a 12429 list of decls declared in a basic block, a pointer to a chain of 12430 blocks at the next lower scope level, then a pointer to the next 12431 block at the same level and a backpointer to the parent `BLOCK' or 12432 `FUNCTION_DECL'. So given a function as follows: 12433 12434 void foo() 12435 { 12436 int a; 12437 { 12438 int b; 12439 } 12440 int c; 12441 } 12442 12443 you would get the following: 12444 12445 tree foo = FUNCTION_DECL; 12446 tree decl_a = VAR_DECL; 12447 tree decl_b = VAR_DECL; 12448 tree decl_c = VAR_DECL; 12449 tree block_a = BLOCK; 12450 tree block_b = BLOCK; 12451 tree block_c = BLOCK; 12452 BLOCK_VARS(block_a) = decl_a; 12453 BLOCK_SUBBLOCKS(block_a) = block_b; 12454 BLOCK_CHAIN(block_a) = block_c; 12455 BLOCK_SUPERCONTEXT(block_a) = foo; 12456 BLOCK_VARS(block_b) = decl_b; 12457 BLOCK_SUPERCONTEXT(block_b) = block_a; 12458 BLOCK_VARS(block_c) = decl_c; 12459 BLOCK_SUPERCONTEXT(block_c) = foo; 12460 DECL_INITIAL(foo) = block_a; 12461 12462 12463 12464File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 12465 1246611.8.2 Function Properties 12467-------------------------- 12468 12469To determine the scope of a function, you can use the `DECL_CONTEXT' 12470macro. This macro will return the class (either a `RECORD_TYPE' or a 12471`UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function 12472is a member. For a virtual function, this macro returns the class in 12473which the function was actually defined, not the base class in which 12474the virtual declaration occurred. 12475 12476 In C, the `DECL_CONTEXT' for a function maybe another function. This 12477representation indicates that the GNU nested function extension is in 12478use. For details on the semantics of nested functions, see the GCC 12479Manual. The nested function can refer to local variables in its 12480containing function. Such references are not explicitly marked in the 12481tree structure; back ends must look at the `DECL_CONTEXT' for the 12482referenced `VAR_DECL'. If the `DECL_CONTEXT' for the referenced 12483`VAR_DECL' is not the same as the function currently being processed, 12484and neither `DECL_EXTERNAL' nor `TREE_STATIC' hold, then the reference 12485is to a local variable in a containing function, and the back end must 12486take appropriate action. 12487 12488`DECL_EXTERNAL' 12489 This predicate holds if the function is undefined. 12490 12491`TREE_PUBLIC' 12492 This predicate holds if the function has external linkage. 12493 12494`TREE_STATIC' 12495 This predicate holds if the function has been defined. 12496 12497`TREE_THIS_VOLATILE' 12498 This predicate holds if the function does not return normally. 12499 12500`TREE_READONLY' 12501 This predicate holds if the function can only read its arguments. 12502 12503`DECL_PURE_P' 12504 This predicate holds if the function can only read its arguments, 12505 but may also read global memory. 12506 12507`DECL_VIRTUAL_P' 12508 This predicate holds if the function is virtual. 12509 12510`DECL_ARTIFICIAL' 12511 This macro holds if the function was implicitly generated by the 12512 compiler, rather than explicitly declared. In addition to 12513 implicitly generated class member functions, this macro holds for 12514 the special functions created to implement static initialization 12515 and destruction, to compute run-time type information, and so 12516 forth. 12517 12518`DECL_FUNCTION_SPECIFIC_TARGET' 12519 This macro returns a tree node that holds the target options that 12520 are to be used to compile this particular function or `NULL_TREE' 12521 if the function is to be compiled with the target options 12522 specified on the command line. 12523 12524`DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 12525 This macro returns a tree node that holds the optimization options 12526 that are to be used to compile this particular function or 12527 `NULL_TREE' if the function is to be compiled with the 12528 optimization options specified on the command line. 12529 12530 1253111.8.2.1 Statements 12532................... 12533 12534There are tree nodes corresponding to all of the source-level statement 12535constructs, used within the C and C++ frontends. These are enumerated 12536here, together with a list of the various macros that can be used to 12537obtain information about them. There are a few macros that can be used 12538with all statements: 12539 12540 12541File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 12542 1254311.9 Language-dependent trees 12544============================= 12545 12546Front ends may wish to keep some state associated with various GENERIC 12547trees while parsing. To support this, trees provide a set of flags 12548that may be used by the front end. They are accessed using 12549`TREE_LANG_FLAG_n' where `n' is currently 0 through 6. 12550 12551 If necessary, a front end can use some language-dependent tree codes 12552in its GENERIC representation, so long as it provides a hook for 12553converting them to GIMPLE and doesn't expect them to work with any 12554(hypothetical) optimizers that run before the conversion to GIMPLE. The 12555intermediate representation used while parsing C and C++ looks very 12556little like GENERIC, but the C and C++ gimplifier hooks are perfectly 12557happy to take it as input and spit out GIMPLE. 12558 12559 12560File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC 12561 1256211.10 C and C++ Trees 12563===================== 12564 12565This section documents the internal representation used by GCC to 12566represent C and C++ source programs. When presented with a C or C++ 12567source program, GCC parses the program, performs semantic analysis 12568(including the generation of error messages), and then produces the 12569internal representation described here. This representation contains a 12570complete representation for the entire translation unit provided as 12571input to the front end. This representation is then typically processed 12572by a code-generator in order to produce machine code, but could also be 12573used in the creation of source browsers, intelligent editors, automatic 12574documentation generators, interpreters, and any other programs needing 12575the ability to process C or C++ code. 12576 12577 This section explains the internal representation. In particular, it 12578documents the internal representation for C and C++ source constructs, 12579and the macros, functions, and variables that can be used to access 12580these constructs. The C++ representation is largely a superset of the 12581representation used in the C front end. There is only one construct 12582used in C that does not appear in the C++ front end and that is the GNU 12583"nested function" extension. Many of the macros documented here do not 12584apply in C because the corresponding language constructs do not appear 12585in C. 12586 12587 The C and C++ front ends generate a mix of GENERIC trees and ones 12588specific to C and C++. These language-specific trees are higher-level 12589constructs than the ones in GENERIC to make the parser's job easier. 12590This section describes those trees that aren't part of GENERIC as well 12591as aspects of GENERIC trees that are treated in a language-specific 12592manner. 12593 12594 If you are developing a "back end", be it is a code-generator or some 12595other tool, that uses this representation, you may occasionally find 12596that you need to ask questions not easily answered by the functions and 12597macros available here. If that situation occurs, it is quite likely 12598that GCC already supports the functionality you desire, but that the 12599interface is simply not documented here. In that case, you should ask 12600the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting 12601the functionality you require. Similarly, if you find yourself writing 12602functions that do not deal directly with your back end, but instead 12603might be useful to other people using the GCC front end, you should 12604submit your patches for inclusion in GCC. 12605 12606* Menu: 12607 12608* Types for C++:: Fundamental and aggregate types. 12609* Namespaces:: Namespaces. 12610* Classes:: Classes. 12611* Functions for C++:: Overloading and accessors for C++. 12612* Statements for C++:: Statements specific to C and C++. 12613* C++ Expressions:: From `typeid' to `throw'. 12614 12615 12616File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 12617 1261811.10.1 Types for C++ 12619--------------------- 12620 12621In C++, an array type is not qualified; rather the type of the array 12622elements is qualified. This situation is reflected in the intermediate 12623representation. The macros described here will always examine the 12624qualification of the underlying element type when applied to an array 12625type. (If the element type is itself an array, then the recursion 12626continues until a non-array type is found, and the qualification of this 12627type is examined.) So, for example, `CP_TYPE_CONST_P' will hold of the 12628type `const int ()[7]', denoting an array of seven `int's. 12629 12630 The following functions and macros deal with cv-qualification of types: 12631`CP_TYPE_QUALS' 12632 This macro returns the set of type qualifiers applied to this type. 12633 This value is `TYPE_UNQUALIFIED' if no qualifiers have been 12634 applied. The `TYPE_QUAL_CONST' bit is set if the type is 12635 `const'-qualified. The `TYPE_QUAL_VOLATILE' bit is set if the 12636 type is `volatile'-qualified. The `TYPE_QUAL_RESTRICT' bit is set 12637 if the type is `restrict'-qualified. 12638 12639`CP_TYPE_CONST_P' 12640 This macro holds if the type is `const'-qualified. 12641 12642`CP_TYPE_VOLATILE_P' 12643 This macro holds if the type is `volatile'-qualified. 12644 12645`CP_TYPE_RESTRICT_P' 12646 This macro holds if the type is `restrict'-qualified. 12647 12648`CP_TYPE_CONST_NON_VOLATILE_P' 12649 This predicate holds for a type that is `const'-qualified, but 12650 _not_ `volatile'-qualified; other cv-qualifiers are ignored as 12651 well: only the `const'-ness is tested. 12652 12653 12654 A few other macros and functions are usable with all types: 12655`TYPE_SIZE' 12656 The number of bits required to represent the type, represented as 12657 an `INTEGER_CST'. For an incomplete type, `TYPE_SIZE' will be 12658 `NULL_TREE'. 12659 12660`TYPE_ALIGN' 12661 The alignment of the type, in bits, represented as an `int'. 12662 12663`TYPE_NAME' 12664 This macro returns a declaration (in the form of a `TYPE_DECL') for 12665 the type. (Note this macro does _not_ return an 12666 `IDENTIFIER_NODE', as you might expect, given its name!) You can 12667 look at the `DECL_NAME' of the `TYPE_DECL' to obtain the actual 12668 name of the type. The `TYPE_NAME' will be `NULL_TREE' for a type 12669 that is not a built-in type, the result of a typedef, or a named 12670 class type. 12671 12672`CP_INTEGRAL_TYPE' 12673 This predicate holds if the type is an integral type. Notice that 12674 in C++, enumerations are _not_ integral types. 12675 12676`ARITHMETIC_TYPE_P' 12677 This predicate holds if the type is an integral type (in the C++ 12678 sense) or a floating point type. 12679 12680`CLASS_TYPE_P' 12681 This predicate holds for a class-type. 12682 12683`TYPE_BUILT_IN' 12684 This predicate holds for a built-in type. 12685 12686`TYPE_PTRMEM_P' 12687 This predicate holds if the type is a pointer to data member. 12688 12689`TYPE_PTR_P' 12690 This predicate holds if the type is a pointer type, and the 12691 pointee is not a data member. 12692 12693`TYPE_PTRFN_P' 12694 This predicate holds for a pointer to function type. 12695 12696`TYPE_PTROB_P' 12697 This predicate holds for a pointer to object type. Note however 12698 that it does not hold for the generic pointer to object type `void 12699 *'. You may use `TYPE_PTROBV_P' to test for a pointer to object 12700 type as well as `void *'. 12701 12702 12703 The table below describes types specific to C and C++ as well as 12704language-dependent info about GENERIC types. 12705 12706`POINTER_TYPE' 12707 Used to represent pointer types, and pointer to data member types. 12708 If `TREE_TYPE' is a pointer to data member type, then 12709 `TYPE_PTRMEM_P' will hold. For a pointer to data member type of 12710 the form `T X::*', `TYPE_PTRMEM_CLASS_TYPE' will be the type `X', 12711 while `TYPE_PTRMEM_POINTED_TO_TYPE' will be the type `T'. 12712 12713`RECORD_TYPE' 12714 Used to represent `struct' and `class' types in C and C++. If 12715 `TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 12716 type. In that case, the `TYPE_PTRMEMFUNC_FN_TYPE' is a 12717 `POINTER_TYPE' pointing to a `METHOD_TYPE'. The `METHOD_TYPE' is 12718 the type of a function pointed to by the pointer-to-member 12719 function. If `TYPE_PTRMEMFUNC_P' does not hold, this type is a 12720 class type. For more information, see *note Classes::. 12721 12722`UNKNOWN_TYPE' 12723 This node is used to represent a type the knowledge of which is 12724 insufficient for a sound processing. 12725 12726`TYPENAME_TYPE' 12727 Used to represent a construct of the form `typename T::A'. The 12728 `TYPE_CONTEXT' is `T'; the `TYPE_NAME' is an `IDENTIFIER_NODE' for 12729 `A'. If the type is specified via a template-id, then 12730 `TYPENAME_TYPE_FULLNAME' yields a `TEMPLATE_ID_EXPR'. The 12731 `TREE_TYPE' is non-`NULL' if the node is implicitly generated in 12732 support for the implicit typename extension; in which case the 12733 `TREE_TYPE' is a type node for the base-class. 12734 12735`TYPEOF_TYPE' 12736 Used to represent the `__typeof__' extension. The `TYPE_FIELDS' 12737 is the expression the type of which is being represented. 12738 12739 12740 12741File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 12742 1274311.10.2 Namespaces 12744------------------ 12745 12746The root of the entire intermediate representation is the variable 12747`global_namespace'. This is the namespace specified with `::' in C++ 12748source code. All other namespaces, types, variables, functions, and so 12749forth can be found starting with this namespace. 12750 12751 However, except for the fact that it is distinguished as the root of 12752the representation, the global namespace is no different from any other 12753namespace. Thus, in what follows, we describe namespaces generally, 12754rather than the global namespace in particular. 12755 12756 A namespace is represented by a `NAMESPACE_DECL' node. 12757 12758 The following macros and functions can be used on a `NAMESPACE_DECL': 12759 12760`DECL_NAME' 12761 This macro is used to obtain the `IDENTIFIER_NODE' corresponding to 12762 the unqualified name of the name of the namespace (*note 12763 Identifiers::). The name of the global namespace is `::', even 12764 though in C++ the global namespace is unnamed. However, you 12765 should use comparison with `global_namespace', rather than 12766 `DECL_NAME' to determine whether or not a namespace is the global 12767 one. An unnamed namespace will have a `DECL_NAME' equal to 12768 `anonymous_namespace_name'. Within a single translation unit, all 12769 unnamed namespaces will have the same name. 12770 12771`DECL_CONTEXT' 12772 This macro returns the enclosing namespace. The `DECL_CONTEXT' for 12773 the `global_namespace' is `NULL_TREE'. 12774 12775`DECL_NAMESPACE_ALIAS' 12776 If this declaration is for a namespace alias, then 12777 `DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 12778 alias. 12779 12780 Do not attempt to use `cp_namespace_decls' for a namespace which is 12781 an alias. Instead, follow `DECL_NAMESPACE_ALIAS' links until you 12782 reach an ordinary, non-alias, namespace, and call 12783 `cp_namespace_decls' there. 12784 12785`DECL_NAMESPACE_STD_P' 12786 This predicate holds if the namespace is the special `::std' 12787 namespace. 12788 12789`cp_namespace_decls' 12790 This function will return the declarations contained in the 12791 namespace, including types, overloaded functions, other 12792 namespaces, and so forth. If there are no declarations, this 12793 function will return `NULL_TREE'. The declarations are connected 12794 through their `TREE_CHAIN' fields. 12795 12796 Although most entries on this list will be declarations, 12797 `TREE_LIST' nodes may also appear. In this case, the `TREE_VALUE' 12798 will be an `OVERLOAD'. The value of the `TREE_PURPOSE' is 12799 unspecified; back ends should ignore this value. As with the 12800 other kinds of declarations returned by `cp_namespace_decls', the 12801 `TREE_CHAIN' will point to the next declaration in this list. 12802 12803 For more information on the kinds of declarations that can occur 12804 on this list, *Note Declarations::. Some declarations will not 12805 appear on this list. In particular, no `FIELD_DECL', 12806 `LABEL_DECL', or `PARM_DECL' nodes will appear here. 12807 12808 This function cannot be used with namespaces that have 12809 `DECL_NAMESPACE_ALIAS' set. 12810 12811 12812 12813File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 12814 1281511.10.3 Classes 12816--------------- 12817 12818Besides namespaces, the other high-level scoping construct in C++ is the 12819class. (Throughout this manual the term "class" is used to mean the 12820types referred to in the ANSI/ISO C++ Standard as classes; these include 12821types defined with the `class', `struct', and `union' keywords.) 12822 12823 A class type is represented by either a `RECORD_TYPE' or a 12824`UNION_TYPE'. A class declared with the `union' tag is represented by 12825a `UNION_TYPE', while classes declared with either the `struct' or the 12826`class' tag are represented by `RECORD_TYPE's. You can use the 12827`CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 12828type is a `class' as opposed to a `struct'. This macro will be true 12829only for classes declared with the `class' tag. 12830 12831 Almost all non-function members are available on the `TYPE_FIELDS' 12832list. Given one member, the next can be found by following the 12833`TREE_CHAIN'. You should not depend in any way on the order in which 12834fields appear on this list. All nodes on this list will be `DECL' 12835nodes. A `FIELD_DECL' is used to represent a non-static data member, a 12836`VAR_DECL' is used to represent a static data member, and a `TYPE_DECL' 12837is used to represent a type. Note that the `CONST_DECL' for an 12838enumeration constant will appear on this list, if the enumeration type 12839was declared in the class. (Of course, the `TYPE_DECL' for the 12840enumeration type will appear here as well.) There are no entries for 12841base classes on this list. In particular, there is no `FIELD_DECL' for 12842the "base-class portion" of an object. 12843 12844 The `TYPE_VFIELD' is a compiler-generated field used to point to 12845virtual function tables. It may or may not appear on the `TYPE_FIELDS' 12846list. However, back ends should handle the `TYPE_VFIELD' just like all 12847the entries on the `TYPE_FIELDS' list. 12848 12849 The function members are available on the `TYPE_METHODS' list. Again, 12850subsequent members are found by following the `TREE_CHAIN' field. If a 12851function is overloaded, each of the overloaded functions appears; no 12852`OVERLOAD' nodes appear on the `TYPE_METHODS' list. Implicitly 12853declared functions (including default constructors, copy constructors, 12854assignment operators, and destructors) will appear on this list as well. 12855 12856 Every class has an associated "binfo", which can be obtained with 12857`TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 12858given by `TYPE_BINFO' is the degenerate case, whereby every class is 12859considered to be its own base-class. The base binfos for a particular 12860binfo are held in a vector, whose length is obtained with 12861`BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 12862`BINFO_BASE_BINFO' and `BINFO_BASE_ITERATE'. To add a new binfo, use 12863`BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 12864`BINFO_BASE_BINFOS', but normally you do not need to use that. The 12865class type associated with a binfo is given by `BINFO_TYPE'. It is not 12866always the case that `BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 12867and qualified types. Neither is it the case that `TYPE_BINFO 12868(BINFO_TYPE (y))' is the same binfo as `y'. The reason is that if `y' 12869is a binfo representing a base-class `B' of a derived class `D', then 12870`BINFO_TYPE (y)' will be `B', and `TYPE_BINFO (BINFO_TYPE (y))' will be 12871`B' as its own base-class, rather than as a base-class of `D'. 12872 12873 The access to a base type can be found with `BINFO_BASE_ACCESS'. This 12874will produce `access_public_node', `access_private_node' or 12875`access_protected_node'. If bases are always public, 12876`BINFO_BASE_ACCESSES' may be `NULL'. 12877 12878 `BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 12879virtually or not. The other flags, `BINFO_MARKED_P' and `BINFO_FLAG_1' 12880to `BINFO_FLAG_6' can be used for language specific use. 12881 12882 The following macros can be used on a tree node representing a 12883class-type. 12884 12885`LOCAL_CLASS_P' 12886 This predicate holds if the class is local class _i.e._ declared 12887 inside a function body. 12888 12889`TYPE_POLYMORPHIC_P' 12890 This predicate holds if the class has at least one virtual function 12891 (declared or inherited). 12892 12893`TYPE_HAS_DEFAULT_CONSTRUCTOR' 12894 This predicate holds whenever its argument represents a class-type 12895 with default constructor. 12896 12897`CLASSTYPE_HAS_MUTABLE' 12898`TYPE_HAS_MUTABLE_P' 12899 These predicates hold for a class-type having a mutable data 12900 member. 12901 12902`CLASSTYPE_NON_POD_P' 12903 This predicate holds only for class-types that are not PODs. 12904 12905`TYPE_HAS_NEW_OPERATOR' 12906 This predicate holds for a class-type that defines `operator new'. 12907 12908`TYPE_HAS_ARRAY_NEW_OPERATOR' 12909 This predicate holds for a class-type for which `operator new[]' 12910 is defined. 12911 12912`TYPE_OVERLOADS_CALL_EXPR' 12913 This predicate holds for class-type for which the function call 12914 `operator()' is overloaded. 12915 12916`TYPE_OVERLOADS_ARRAY_REF' 12917 This predicate holds for a class-type that overloads `operator[]' 12918 12919`TYPE_OVERLOADS_ARROW' 12920 This predicate holds for a class-type for which `operator->' is 12921 overloaded. 12922 12923 12924 12925File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 12926 1292711.10.4 Functions for C++ 12928------------------------- 12929 12930A function is represented by a `FUNCTION_DECL' node. A set of 12931overloaded functions is sometimes represented by an `OVERLOAD' node. 12932 12933 An `OVERLOAD' node is not a declaration, so none of the `DECL_' macros 12934should be used on an `OVERLOAD'. An `OVERLOAD' node is similar to a 12935`TREE_LIST'. Use `OVL_CURRENT' to get the function associated with an 12936`OVERLOAD' node; use `OVL_NEXT' to get the next `OVERLOAD' node in the 12937list of overloaded functions. The macros `OVL_CURRENT' and `OVL_NEXT' 12938are actually polymorphic; you can use them to work with `FUNCTION_DECL' 12939nodes as well as with overloads. In the case of a `FUNCTION_DECL', 12940`OVL_CURRENT' will always return the function itself, and `OVL_NEXT' 12941will always be `NULL_TREE'. 12942 12943 To determine the scope of a function, you can use the `DECL_CONTEXT' 12944macro. This macro will return the class (either a `RECORD_TYPE' or a 12945`UNION_TYPE') or namespace (a `NAMESPACE_DECL') of which the function 12946is a member. For a virtual function, this macro returns the class in 12947which the function was actually defined, not the base class in which 12948the virtual declaration occurred. 12949 12950 If a friend function is defined in a class scope, the 12951`DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 12952it was defined. For example, in 12953 class C { friend void f() {} }; 12954 the `DECL_CONTEXT' for `f' will be the `global_namespace', but the 12955`DECL_FRIEND_CONTEXT' will be the `RECORD_TYPE' for `C'. 12956 12957 The following macros and functions can be used on a `FUNCTION_DECL': 12958`DECL_MAIN_P' 12959 This predicate holds for a function that is the program entry point 12960 `::code'. 12961 12962`DECL_LOCAL_FUNCTION_P' 12963 This predicate holds if the function was declared at block scope, 12964 even though it has a global scope. 12965 12966`DECL_ANTICIPATED' 12967 This predicate holds if the function is a built-in function but its 12968 prototype is not yet explicitly declared. 12969 12970`DECL_EXTERN_C_FUNCTION_P' 12971 This predicate holds if the function is declared as an ``extern 12972 "C"'' function. 12973 12974`DECL_LINKONCE_P' 12975 This macro holds if multiple copies of this function may be 12976 emitted in various translation units. It is the responsibility of 12977 the linker to merge the various copies. Template instantiations 12978 are the most common example of functions for which 12979 `DECL_LINKONCE_P' holds; G++ instantiates needed templates in all 12980 translation units which require them, and then relies on the 12981 linker to remove duplicate instantiations. 12982 12983 FIXME: This macro is not yet implemented. 12984 12985`DECL_FUNCTION_MEMBER_P' 12986 This macro holds if the function is a member of a class, rather 12987 than a member of a namespace. 12988 12989`DECL_STATIC_FUNCTION_P' 12990 This predicate holds if the function a static member function. 12991 12992`DECL_NONSTATIC_MEMBER_FUNCTION_P' 12993 This macro holds for a non-static member function. 12994 12995`DECL_CONST_MEMFUNC_P' 12996 This predicate holds for a `const'-member function. 12997 12998`DECL_VOLATILE_MEMFUNC_P' 12999 This predicate holds for a `volatile'-member function. 13000 13001`DECL_CONSTRUCTOR_P' 13002 This macro holds if the function is a constructor. 13003 13004`DECL_NONCONVERTING_P' 13005 This predicate holds if the constructor is a non-converting 13006 constructor. 13007 13008`DECL_COMPLETE_CONSTRUCTOR_P' 13009 This predicate holds for a function which is a constructor for an 13010 object of a complete type. 13011 13012`DECL_BASE_CONSTRUCTOR_P' 13013 This predicate holds for a function which is a constructor for a 13014 base class sub-object. 13015 13016`DECL_COPY_CONSTRUCTOR_P' 13017 This predicate holds for a function which is a copy-constructor. 13018 13019`DECL_DESTRUCTOR_P' 13020 This macro holds if the function is a destructor. 13021 13022`DECL_COMPLETE_DESTRUCTOR_P' 13023 This predicate holds if the function is the destructor for an 13024 object a complete type. 13025 13026`DECL_OVERLOADED_OPERATOR_P' 13027 This macro holds if the function is an overloaded operator. 13028 13029`DECL_CONV_FN_P' 13030 This macro holds if the function is a type-conversion operator. 13031 13032`DECL_GLOBAL_CTOR_P' 13033 This predicate holds if the function is a file-scope initialization 13034 function. 13035 13036`DECL_GLOBAL_DTOR_P' 13037 This predicate holds if the function is a file-scope finalization 13038 function. 13039 13040`DECL_THUNK_P' 13041 This predicate holds if the function is a thunk. 13042 13043 These functions represent stub code that adjusts the `this' pointer 13044 and then jumps to another function. When the jumped-to function 13045 returns, control is transferred directly to the caller, without 13046 returning to the thunk. The first parameter to the thunk is 13047 always the `this' pointer; the thunk should add `THUNK_DELTA' to 13048 this value. (The `THUNK_DELTA' is an `int', not an `INTEGER_CST'.) 13049 13050 Then, if `THUNK_VCALL_OFFSET' (an `INTEGER_CST') is nonzero the 13051 adjusted `this' pointer must be adjusted again. The complete 13052 calculation is given by the following pseudo-code: 13053 13054 this += THUNK_DELTA 13055 if (THUNK_VCALL_OFFSET) 13056 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 13057 13058 Finally, the thunk should jump to the location given by 13059 `DECL_INITIAL'; this will always be an expression for the address 13060 of a function. 13061 13062`DECL_NON_THUNK_FUNCTION_P' 13063 This predicate holds if the function is _not_ a thunk function. 13064 13065`GLOBAL_INIT_PRIORITY' 13066 If either `DECL_GLOBAL_CTOR_P' or `DECL_GLOBAL_DTOR_P' holds, then 13067 this gives the initialization priority for the function. The 13068 linker will arrange that all functions for which 13069 `DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 13070 before `main' is called. When the program exits, all functions for 13071 which `DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 13072 13073`TYPE_RAISES_EXCEPTIONS' 13074 This macro returns the list of exceptions that a (member-)function 13075 can raise. The returned list, if non `NULL', is comprised of nodes 13076 whose `TREE_VALUE' represents a type. 13077 13078`TYPE_NOTHROW_P' 13079 This predicate holds when the exception-specification of its 13080 arguments is of the form ``()''. 13081 13082`DECL_ARRAY_DELETE_OPERATOR_P' 13083 This predicate holds if the function an overloaded `operator 13084 delete[]'. 13085 13086 13087 13088File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 13089 1309011.10.5 Statements for C++ 13091-------------------------- 13092 13093A function that has a definition in the current translation unit will 13094have a non-`NULL' `DECL_INITIAL'. However, back ends should not make 13095use of the particular value given by `DECL_INITIAL'. 13096 13097 The `DECL_SAVED_TREE' macro will give the complete body of the 13098function. 13099 1310011.10.5.1 Statements 13101.................... 13102 13103There are tree nodes corresponding to all of the source-level statement 13104constructs, used within the C and C++ frontends. These are enumerated 13105here, together with a list of the various macros that can be used to 13106obtain information about them. There are a few macros that can be used 13107with all statements: 13108 13109`STMT_IS_FULL_EXPR_P' 13110 In C++, statements normally constitute "full expressions"; 13111 temporaries created during a statement are destroyed when the 13112 statement is complete. However, G++ sometimes represents 13113 expressions by statements; these statements will not have 13114 `STMT_IS_FULL_EXPR_P' set. Temporaries created during such 13115 statements should be destroyed when the innermost enclosing 13116 statement with `STMT_IS_FULL_EXPR_P' set is exited. 13117 13118 13119 Here is the list of the various statement nodes, and the macros used to 13120access them. This documentation describes the use of these nodes in 13121non-template functions (including instantiations of template functions). 13122In template functions, the same nodes are used, but sometimes in 13123slightly different ways. 13124 13125 Many of the statements have substatements. For example, a `while' 13126loop will have a body, which is itself a statement. If the substatement 13127is `NULL_TREE', it is considered equivalent to a statement consisting 13128of a single `;', i.e., an expression statement in which the expression 13129has been omitted. A substatement may in fact be a list of statements, 13130connected via their `TREE_CHAIN's. So, you should always process the 13131statement tree by looping over substatements, like this: 13132 void process_stmt (stmt) 13133 tree stmt; 13134 { 13135 while (stmt) 13136 { 13137 switch (TREE_CODE (stmt)) 13138 { 13139 case IF_STMT: 13140 process_stmt (THEN_CLAUSE (stmt)); 13141 /* More processing here. */ 13142 break; 13143 13144 ... 13145 } 13146 13147 stmt = TREE_CHAIN (stmt); 13148 } 13149 } 13150 In other words, while the `then' clause of an `if' statement in C++ 13151can be only one statement (although that one statement may be a 13152compound statement), the intermediate representation will sometimes use 13153several statements chained together. 13154 13155`BREAK_STMT' 13156 Used to represent a `break' statement. There are no additional 13157 fields. 13158 13159`CLEANUP_STMT' 13160 Used to represent an action that should take place upon exit from 13161 the enclosing scope. Typically, these actions are calls to 13162 destructors for local objects, but back ends cannot rely on this 13163 fact. If these nodes are in fact representing such destructors, 13164 `CLEANUP_DECL' will be the `VAR_DECL' destroyed. Otherwise, 13165 `CLEANUP_DECL' will be `NULL_TREE'. In any case, the 13166 `CLEANUP_EXPR' is the expression to execute. The cleanups 13167 executed on exit from a scope should be run in the reverse order 13168 of the order in which the associated `CLEANUP_STMT's were 13169 encountered. 13170 13171`CONTINUE_STMT' 13172 Used to represent a `continue' statement. There are no additional 13173 fields. 13174 13175`CTOR_STMT' 13176 Used to mark the beginning (if `CTOR_BEGIN_P' holds) or end (if 13177 `CTOR_END_P' holds of the main body of a constructor. See also 13178 `SUBOBJECT' for more information on how to use these nodes. 13179 13180`DO_STMT' 13181 Used to represent a `do' loop. The body of the loop is given by 13182 `DO_BODY' while the termination condition for the loop is given by 13183 `DO_COND'. The condition for a `do'-statement is always an 13184 expression. 13185 13186`EMPTY_CLASS_EXPR' 13187 Used to represent a temporary object of a class with no data whose 13188 address is never taken. (All such objects are interchangeable.) 13189 The `TREE_TYPE' represents the type of the object. 13190 13191`EXPR_STMT' 13192 Used to represent an expression statement. Use `EXPR_STMT_EXPR' to 13193 obtain the expression. 13194 13195`FOR_STMT' 13196 Used to represent a `for' statement. The `FOR_INIT_STMT' is the 13197 initialization statement for the loop. The `FOR_COND' is the 13198 termination condition. The `FOR_EXPR' is the expression executed 13199 right before the `FOR_COND' on each loop iteration; often, this 13200 expression increments a counter. The body of the loop is given by 13201 `FOR_BODY'. Note that `FOR_INIT_STMT' and `FOR_BODY' return 13202 statements, while `FOR_COND' and `FOR_EXPR' return expressions. 13203 13204`HANDLER' 13205 Used to represent a C++ `catch' block. The `HANDLER_TYPE' is the 13206 type of exception that will be caught by this handler; it is equal 13207 (by pointer equality) to `NULL' if this handler is for all types. 13208 `HANDLER_PARMS' is the `DECL_STMT' for the catch parameter, and 13209 `HANDLER_BODY' is the code for the block itself. 13210 13211`IF_STMT' 13212 Used to represent an `if' statement. The `IF_COND' is the 13213 expression. 13214 13215 If the condition is a `TREE_LIST', then the `TREE_PURPOSE' is a 13216 statement (usually a `DECL_STMT'). Each time the condition is 13217 evaluated, the statement should be executed. Then, the 13218 `TREE_VALUE' should be used as the conditional expression itself. 13219 This representation is used to handle C++ code like this: 13220 13221 C++ distinguishes between this and `COND_EXPR' for handling 13222 templates. 13223 13224 if (int i = 7) ... 13225 13226 where there is a new local variable (or variables) declared within 13227 the condition. 13228 13229 The `THEN_CLAUSE' represents the statement given by the `then' 13230 condition, while the `ELSE_CLAUSE' represents the statement given 13231 by the `else' condition. 13232 13233`SUBOBJECT' 13234 In a constructor, these nodes are used to mark the point at which a 13235 subobject of `this' is fully constructed. If, after this point, an 13236 exception is thrown before a `CTOR_STMT' with `CTOR_END_P' set is 13237 encountered, the `SUBOBJECT_CLEANUP' must be executed. The 13238 cleanups must be executed in the reverse order in which they 13239 appear. 13240 13241`SWITCH_STMT' 13242 Used to represent a `switch' statement. The `SWITCH_STMT_COND' is 13243 the expression on which the switch is occurring. See the 13244 documentation for an `IF_STMT' for more information on the 13245 representation used for the condition. The `SWITCH_STMT_BODY' is 13246 the body of the switch statement. The `SWITCH_STMT_TYPE' is the 13247 original type of switch expression as given in the source, before 13248 any compiler conversions. 13249 13250`TRY_BLOCK' 13251 Used to represent a `try' block. The body of the try block is 13252 given by `TRY_STMTS'. Each of the catch blocks is a `HANDLER' 13253 node. The first handler is given by `TRY_HANDLERS'. Subsequent 13254 handlers are obtained by following the `TREE_CHAIN' link from one 13255 handler to the next. The body of the handler is given by 13256 `HANDLER_BODY'. 13257 13258 If `CLEANUP_P' holds of the `TRY_BLOCK', then the `TRY_HANDLERS' 13259 will not be a `HANDLER' node. Instead, it will be an expression 13260 that should be executed if an exception is thrown in the try 13261 block. It must rethrow the exception after executing that code. 13262 And, if an exception is thrown while the expression is executing, 13263 `terminate' must be called. 13264 13265`USING_STMT' 13266 Used to represent a `using' directive. The namespace is given by 13267 `USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 13268 is needed inside template functions, to implement using directives 13269 during instantiation. 13270 13271`WHILE_STMT' 13272 Used to represent a `while' loop. The `WHILE_COND' is the 13273 termination condition for the loop. See the documentation for an 13274 `IF_STMT' for more information on the representation used for the 13275 condition. 13276 13277 The `WHILE_BODY' is the body of the loop. 13278 13279 13280 13281File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 13282 1328311.10.6 C++ Expressions 13284----------------------- 13285 13286This section describes expressions specific to the C and C++ front ends. 13287 13288`TYPEID_EXPR' 13289 Used to represent a `typeid' expression. 13290 13291`NEW_EXPR' 13292`VEC_NEW_EXPR' 13293 Used to represent a call to `new' and `new[]' respectively. 13294 13295`DELETE_EXPR' 13296`VEC_DELETE_EXPR' 13297 Used to represent a call to `delete' and `delete[]' respectively. 13298 13299`MEMBER_REF' 13300 Represents a reference to a member of a class. 13301 13302`THROW_EXPR' 13303 Represents an instance of `throw' in the program. Operand 0, 13304 which is the expression to throw, may be `NULL_TREE'. 13305 13306`AGGR_INIT_EXPR' 13307 An `AGGR_INIT_EXPR' represents the initialization as the return 13308 value of a function call, or as the result of a constructor. An 13309 `AGGR_INIT_EXPR' will only appear as a full-expression, or as the 13310 second operand of a `TARGET_EXPR'. `AGGR_INIT_EXPR's have a 13311 representation similar to that of `CALL_EXPR's. You can use the 13312 `AGGR_INIT_EXPR_FN' and `AGGR_INIT_EXPR_ARG' macros to access the 13313 function to call and the arguments to pass. 13314 13315 If `AGGR_INIT_VIA_CTOR_P' holds of the `AGGR_INIT_EXPR', then the 13316 initialization is via a constructor call. The address of the 13317 `AGGR_INIT_EXPR_SLOT' operand, which is always a `VAR_DECL', is 13318 taken, and this value replaces the first argument in the argument 13319 list. 13320 13321 In either case, the expression is void. 13322 13323 13324 13325File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC 13326 1332711.11 Java Trees 13328================ 13329 13330 13331File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 13332 1333312 GIMPLE 13334********* 13335 13336GIMPLE is a three-address representation derived from GENERIC by 13337breaking down GENERIC expressions into tuples of no more than 3 13338operands (with some exceptions like function calls). GIMPLE was 13339heavily influenced by the SIMPLE IL used by the McCAT compiler project 13340at McGill University, though we have made some different choices. For 13341one thing, SIMPLE doesn't support `goto'. 13342 13343 Temporaries are introduced to hold intermediate values needed to 13344compute complex expressions. Additionally, all the control structures 13345used in GENERIC are lowered into conditional jumps, lexical scopes are 13346removed and exception regions are converted into an on the side 13347exception region tree. 13348 13349 The compiler pass which converts GENERIC into GIMPLE is referred to as 13350the `gimplifier'. The gimplifier works recursively, generating GIMPLE 13351tuples out of the original GENERIC expressions. 13352 13353 One of the early implementation strategies used for the GIMPLE 13354representation was to use the same internal data structures used by 13355front ends to represent parse trees. This simplified implementation 13356because we could leverage existing functionality and interfaces. 13357However, GIMPLE is a much more restrictive representation than abstract 13358syntax trees (AST), therefore it does not require the full structural 13359complexity provided by the main tree data structure. 13360 13361 The GENERIC representation of a function is stored in the 13362`DECL_SAVED_TREE' field of the associated `FUNCTION_DECL' tree node. 13363It is converted to GIMPLE by a call to `gimplify_function_tree'. 13364 13365 If a front end wants to include language-specific tree codes in the 13366tree representation which it provides to the back end, it must provide a 13367definition of `LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 13368front end trees to GIMPLE. Usually such a hook will involve much of 13369the same code for expanding front end trees to RTL. This function can 13370return fully lowered GIMPLE, or it can return GENERIC trees and let the 13371main gimplifier lower them the rest of the way; this is often simpler. 13372GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 13373of the IL before the pass `pass_lower_cf'. High GIMPLE contains some 13374container statements like lexical scopes (represented by `GIMPLE_BIND') 13375and nested expressions (e.g., `GIMPLE_TRY'), while "Low GIMPLE" exposes 13376all of the implicit jumps for control and exception expressions 13377directly in the IL and EH region trees. 13378 13379 The C and C++ front ends currently convert directly from front end 13380trees to GIMPLE, and hand that off to the back end rather than first 13381converting to GENERIC. Their gimplifier hooks know about all the 13382`_STMT' nodes and how to convert them to GENERIC forms. There was some 13383work done on a genericization pass which would run first, but the 13384existence of `STMT_EXPR' meant that in order to convert all of the C 13385statements into GENERIC equivalents would involve walking the entire 13386tree anyway, so it was simpler to lower all the way. This might change 13387in the future if someone writes an optimization pass which would work 13388better with higher-level trees, but currently the optimizers all expect 13389GIMPLE. 13390 13391 You can request to dump a C-like representation of the GIMPLE form 13392with the flag `-fdump-tree-gimple'. 13393 13394* Menu: 13395 13396* Tuple representation:: 13397* GIMPLE instruction set:: 13398* GIMPLE Exception Handling:: 13399* Temporaries:: 13400* Operands:: 13401* Manipulating GIMPLE statements:: 13402* Tuple specific accessors:: 13403* GIMPLE sequences:: 13404* Sequence iterators:: 13405* Adding a new GIMPLE statement code:: 13406* Statement and operand traversals:: 13407 13408 13409File: gccint.info, Node: Tuple representation, Next: GIMPLE instruction set, Up: GIMPLE 13410 1341112.1 Tuple representation 13412========================= 13413 13414GIMPLE instructions are tuples of variable size divided in two groups: 13415a header describing the instruction and its locations, and a variable 13416length body with all the operands. Tuples are organized into a 13417hierarchy with 3 main classes of tuples. 13418 1341912.1.1 `gimple_statement_base' (gsbase) 13420--------------------------------------- 13421 13422This is the root of the hierarchy, it holds basic information needed by 13423most GIMPLE statements. There are some fields that may not be relevant 13424to every GIMPLE statement, but those were moved into the base structure 13425to take advantage of holes left by other fields (thus making the 13426structure more compact). The structure takes 4 words (32 bytes) on 64 13427bit hosts: 13428 13429Field Size (bits) 13430`code' 8 13431`subcode' 16 13432`no_warning' 1 13433`visited' 1 13434`nontemporal_move' 1 13435`plf' 2 13436`modified' 1 13437`has_volatile_ops' 1 13438`references_memory_p' 1 13439`uid' 32 13440`location' 32 13441`num_ops' 32 13442`bb' 64 13443`block' 63 13444Total size 32 bytes 13445 13446 * `code' Main identifier for a GIMPLE instruction. 13447 13448 * `subcode' Used to distinguish different variants of the same basic 13449 instruction or provide flags applicable to a given code. The 13450 `subcode' flags field has different uses depending on the code of 13451 the instruction, but mostly it distinguishes instructions of the 13452 same family. The most prominent use of this field is in 13453 assignments, where subcode indicates the operation done on the RHS 13454 of the assignment. For example, a = b + c is encoded as 13455 `GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 13456 13457 * `no_warning' Bitflag to indicate whether a warning has already 13458 been issued on this statement. 13459 13460 * `visited' General purpose "visited" marker. Set and cleared by 13461 each pass when needed. 13462 13463 * `nontemporal_move' Bitflag used in assignments that represent 13464 non-temporal moves. Although this bitflag is only used in 13465 assignments, it was moved into the base to take advantage of the 13466 bit holes left by the previous fields. 13467 13468 * `plf' Pass Local Flags. This 2-bit mask can be used as general 13469 purpose markers by any pass. Passes are responsible for clearing 13470 and setting these two flags accordingly. 13471 13472 * `modified' Bitflag to indicate whether the statement has been 13473 modified. Used mainly by the operand scanner to determine when to 13474 re-scan a statement for operands. 13475 13476 * `has_volatile_ops' Bitflag to indicate whether this statement 13477 contains operands that have been marked volatile. 13478 13479 * `references_memory_p' Bitflag to indicate whether this statement 13480 contains memory references (i.e., its operands are either global 13481 variables, or pointer dereferences or anything that must reside in 13482 memory). 13483 13484 * `uid' This is an unsigned integer used by passes that want to 13485 assign IDs to every statement. These IDs must be assigned and used 13486 by each pass. 13487 13488 * `location' This is a `location_t' identifier to specify source code 13489 location for this statement. It is inherited from the front end. 13490 13491 * `num_ops' Number of operands that this statement has. This 13492 specifies the size of the operand vector embedded in the tuple. 13493 Only used in some tuples, but it is declared in the base tuple to 13494 take advantage of the 32-bit hole left by the previous fields. 13495 13496 * `bb' Basic block holding the instruction. 13497 13498 * `block' Lexical block holding this statement. Also used for debug 13499 information generation. 13500 1350112.1.2 `gimple_statement_with_ops' 13502---------------------------------- 13503 13504This tuple is actually split in two: `gimple_statement_with_ops_base' 13505and `gimple_statement_with_ops'. This is needed to accommodate the way 13506the operand vector is allocated. The operand vector is defined to be an 13507array of 1 element. So, to allocate a dynamic number of operands, the 13508memory allocator (`gimple_alloc') simply allocates enough memory to 13509hold the structure itself plus `N - 1' operands which run "off the end" 13510of the structure. For example, to allocate space for a tuple with 3 13511operands, `gimple_alloc' reserves `sizeof (struct 13512gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 13513 13514 On the other hand, several fields in this tuple need to be shared with 13515the `gimple_statement_with_memory_ops' tuple. So, these common fields 13516are placed in `gimple_statement_with_ops_base' which is then inherited 13517from the other two tuples. 13518 13519`gsbase' 256 13520`addresses_taken' 64 13521`def_ops' 64 13522`use_ops' 64 13523`op' `num_ops' * 64 13524Total size 56 + 8 * `num_ops' bytes 13525 13526 * `gsbase' Inherited from `struct gimple_statement_base'. 13527 13528 * `addresses_taken' Bitmap holding the UIDs of all the `VAR_DECL's 13529 whose addresses are taken by this statement. For example, a 13530 statement of the form `p = &b' will have the UID for symbol `b' in 13531 this set. 13532 13533 * `def_ops' Array of pointers into the operand array indicating all 13534 the slots that contain a variable written-to by the statement. 13535 This array is also used for immediate use chaining. Note that it 13536 would be possible to not rely on this array, but the changes 13537 required to implement this are pretty invasive. 13538 13539 * `use_ops' Similar to `def_ops' but for variables read by the 13540 statement. 13541 13542 * `op' Array of trees with `num_ops' slots. 13543 1354412.1.3 `gimple_statement_with_memory_ops' 13545----------------------------------------- 13546 13547This tuple is essentially identical to `gimple_statement_with_ops', 13548except that it contains 4 additional fields to hold vectors related 13549memory stores and loads. Similar to the previous case, the structure 13550is split in two to accommodate for the operand vector 13551(`gimple_statement_with_memory_ops_base' and 13552`gimple_statement_with_memory_ops'). 13553 13554Field Size (bits) 13555`gsbase' 256 13556`addresses_taken' 64 13557`def_ops' 64 13558`use_ops' 64 13559`vdef_ops' 64 13560`vuse_ops' 64 13561`stores' 64 13562`loads' 64 13563`op' `num_ops' * 64 13564Total size 88 + 8 * `num_ops' bytes 13565 13566 * `vdef_ops' Similar to `def_ops' but for `VDEF' operators. There is 13567 one entry per memory symbol written by this statement. This is 13568 used to maintain the memory SSA use-def and def-def chains. 13569 13570 * `vuse_ops' Similar to `use_ops' but for `VUSE' operators. There is 13571 one entry per memory symbol loaded by this statement. This is used 13572 to maintain the memory SSA use-def chains. 13573 13574 * `stores' Bitset with all the UIDs for the symbols written-to by the 13575 statement. This is different than `vdef_ops' in that all the 13576 affected symbols are mentioned in this set. If memory 13577 partitioning is enabled, the `vdef_ops' vector will refer to memory 13578 partitions. Furthermore, no SSA information is stored in this set. 13579 13580 * `loads' Similar to `stores', but for memory loads. (Note that there 13581 is some amount of redundancy here, it should be possible to reduce 13582 memory utilization further by removing these sets). 13583 13584 All the other tuples are defined in terms of these three basic ones. 13585Each tuple will add some fields. The main gimple type is defined to be 13586the union of all these structures (`GTY' markers elided for clarity): 13587 13588 union gimple_statement_d 13589 { 13590 struct gimple_statement_base gsbase; 13591 struct gimple_statement_with_ops gsops; 13592 struct gimple_statement_with_memory_ops gsmem; 13593 struct gimple_statement_omp omp; 13594 struct gimple_statement_bind gimple_bind; 13595 struct gimple_statement_catch gimple_catch; 13596 struct gimple_statement_eh_filter gimple_eh_filter; 13597 struct gimple_statement_phi gimple_phi; 13598 struct gimple_statement_resx gimple_resx; 13599 struct gimple_statement_try gimple_try; 13600 struct gimple_statement_wce gimple_wce; 13601 struct gimple_statement_asm gimple_asm; 13602 struct gimple_statement_omp_critical gimple_omp_critical; 13603 struct gimple_statement_omp_for gimple_omp_for; 13604 struct gimple_statement_omp_parallel gimple_omp_parallel; 13605 struct gimple_statement_omp_task gimple_omp_task; 13606 struct gimple_statement_omp_sections gimple_omp_sections; 13607 struct gimple_statement_omp_single gimple_omp_single; 13608 struct gimple_statement_omp_continue gimple_omp_continue; 13609 struct gimple_statement_omp_atomic_load gimple_omp_atomic_load; 13610 struct gimple_statement_omp_atomic_store gimple_omp_atomic_store; 13611 }; 13612 13613 13614File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Tuple representation, Up: GIMPLE 13615 1361612.2 GIMPLE instruction set 13617=========================== 13618 13619The following table briefly describes the GIMPLE instruction set. 13620 13621Instruction High GIMPLE Low GIMPLE 13622`GIMPLE_ASM' x x 13623`GIMPLE_ASSIGN' x x 13624`GIMPLE_BIND' x 13625`GIMPLE_CALL' x x 13626`GIMPLE_CATCH' x 13627`GIMPLE_COND' x x 13628`GIMPLE_DEBUG' x x 13629`GIMPLE_EH_FILTER' x 13630`GIMPLE_GOTO' x x 13631`GIMPLE_LABEL' x x 13632`GIMPLE_NOP' x x 13633`GIMPLE_OMP_ATOMIC_LOAD' x x 13634`GIMPLE_OMP_ATOMIC_STORE' x x 13635`GIMPLE_OMP_CONTINUE' x x 13636`GIMPLE_OMP_CRITICAL' x x 13637`GIMPLE_OMP_FOR' x x 13638`GIMPLE_OMP_MASTER' x x 13639`GIMPLE_OMP_ORDERED' x x 13640`GIMPLE_OMP_PARALLEL' x x 13641`GIMPLE_OMP_RETURN' x x 13642`GIMPLE_OMP_SECTION' x x 13643`GIMPLE_OMP_SECTIONS' x x 13644`GIMPLE_OMP_SECTIONS_SWITCH' x x 13645`GIMPLE_OMP_SINGLE' x x 13646`GIMPLE_PHI' x 13647`GIMPLE_RESX' x 13648`GIMPLE_RETURN' x x 13649`GIMPLE_SWITCH' x x 13650`GIMPLE_TRY' x 13651 13652 13653File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 13654 1365512.3 Exception Handling 13656======================= 13657 13658Other exception handling constructs are represented using 13659`GIMPLE_TRY_CATCH'. `GIMPLE_TRY_CATCH' has two operands. The first 13660operand is a sequence of statements to execute. If executing these 13661statements does not throw an exception, then the second operand is 13662ignored. Otherwise, if an exception is thrown, then the second operand 13663of the `GIMPLE_TRY_CATCH' is checked. The second operand may have the 13664following forms: 13665 13666 1. A sequence of statements to execute. When an exception occurs, 13667 these statements are executed, and then the exception is rethrown. 13668 13669 2. A sequence of `GIMPLE_CATCH' statements. Each `GIMPLE_CATCH' has 13670 a list of applicable exception types and handler code. If the 13671 thrown exception matches one of the caught types, the associated 13672 handler code is executed. If the handler code falls off the 13673 bottom, execution continues after the original `GIMPLE_TRY_CATCH'. 13674 13675 3. A `GIMPLE_EH_FILTER' statement. This has a list of permitted 13676 exception types, and code to handle a match failure. If the 13677 thrown exception does not match one of the allowed types, the 13678 associated match failure code is executed. If the thrown exception 13679 does match, it continues unwinding the stack looking for the next 13680 handler. 13681 13682 13683 Currently throwing an exception is not directly represented in GIMPLE, 13684since it is implemented by calling a function. At some point in the 13685future we will want to add some way to express that the call will throw 13686an exception of a known type. 13687 13688 Just before running the optimizers, the compiler lowers the high-level 13689EH constructs above into a set of `goto's, magic labels, and EH 13690regions. Continuing to unwind at the end of a cleanup is represented 13691with a `GIMPLE_RESX'. 13692 13693 13694File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 13695 1369612.4 Temporaries 13697================ 13698 13699When gimplification encounters a subexpression that is too complex, it 13700creates a new temporary variable to hold the value of the 13701subexpression, and adds a new statement to initialize it before the 13702current statement. These special temporaries are known as `expression 13703temporaries', and are allocated using `get_formal_tmp_var'. The 13704compiler tries to always evaluate identical expressions into the same 13705temporary, to simplify elimination of redundant calculations. 13706 13707 We can only use expression temporaries when we know that it will not 13708be reevaluated before its value is used, and that it will not be 13709otherwise modified(1). Other temporaries can be allocated using 13710`get_initialized_tmp_var' or `create_tmp_var'. 13711 13712 Currently, an expression like `a = b + 5' is not reduced any further. 13713We tried converting it to something like 13714 T1 = b + 5; 13715 a = T1; 13716 but this bloated the representation for minimal benefit. However, a 13717variable which must live in memory cannot appear in an expression; its 13718value is explicitly loaded into a temporary first. Similarly, storing 13719the value of an expression to a memory variable goes through a 13720temporary. 13721 13722 ---------- Footnotes ---------- 13723 13724 (1) These restrictions are derived from those in Morgan 4.8. 13725 13726 13727File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 13728 1372912.5 Operands 13730============= 13731 13732In general, expressions in GIMPLE consist of an operation and the 13733appropriate number of simple operands; these operands must either be a 13734GIMPLE rvalue (`is_gimple_val'), i.e. a constant or a register 13735variable. More complex operands are factored out into temporaries, so 13736that 13737 a = b + c + d 13738 becomes 13739 T1 = b + c; 13740 a = T1 + d; 13741 13742 The same rule holds for arguments to a `GIMPLE_CALL'. 13743 13744 The target of an assignment is usually a variable, but can also be an 13745`INDIRECT_REF' or a compound lvalue as described below. 13746 13747* Menu: 13748 13749* Compound Expressions:: 13750* Compound Lvalues:: 13751* Conditional Expressions:: 13752* Logical Operators:: 13753 13754 13755File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 13756 1375712.5.1 Compound Expressions 13758--------------------------- 13759 13760The left-hand side of a C comma expression is simply moved into a 13761separate statement. 13762 13763 13764File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 13765 1376612.5.2 Compound Lvalues 13767----------------------- 13768 13769Currently compound lvalues involving array and structure field 13770references are not broken down; an expression like `a.b[2] = 42' is not 13771reduced any further (though complex array subscripts are). This 13772restriction is a workaround for limitations in later optimizers; if we 13773were to convert this to 13774 13775 T1 = &a.b; 13776 T1[2] = 42; 13777 13778 alias analysis would not remember that the reference to `T1[2]' came 13779by way of `a.b', so it would think that the assignment could alias 13780another member of `a'; this broke `struct-alias-1.c'. Future optimizer 13781improvements may make this limitation unnecessary. 13782 13783 13784File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 13785 1378612.5.3 Conditional Expressions 13787------------------------------ 13788 13789A C `?:' expression is converted into an `if' statement with each 13790branch assigning to the same temporary. So, 13791 13792 a = b ? c : d; 13793 becomes 13794 if (b == 1) 13795 T1 = c; 13796 else 13797 T1 = d; 13798 a = T1; 13799 13800 The GIMPLE level if-conversion pass re-introduces `?:' expression, if 13801appropriate. It is used to vectorize loops with conditions using vector 13802conditional operations. 13803 13804 Note that in GIMPLE, `if' statements are represented using 13805`GIMPLE_COND', as described below. 13806 13807 13808File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 13809 1381012.5.4 Logical Operators 13811------------------------ 13812 13813Except when they appear in the condition operand of a `GIMPLE_COND', 13814logical `and' and `or' operators are simplified as follows: `a = b && 13815c' becomes 13816 13817 T1 = (bool)b; 13818 if (T1 == true) 13819 T1 = (bool)c; 13820 a = T1; 13821 13822 Note that `T1' in this example cannot be an expression temporary, 13823because it has two different assignments. 13824 1382512.5.5 Manipulating operands 13826---------------------------- 13827 13828All gimple operands are of type `tree'. But only certain types of 13829trees are allowed to be used as operand tuples. Basic validation is 13830controlled by the function `get_gimple_rhs_class', which given a tree 13831code, returns an `enum' with the following values of type `enum 13832gimple_rhs_class' 13833 13834 * `GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 13835 13836 * `GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 13837 13838 * `GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 13839 13840 * `GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 13841 split into simpler operands (for instance, `SSA_NAME', `VAR_DECL', 13842 `COMPONENT_REF', etc). 13843 13844 This operand class also acts as an escape hatch for tree nodes 13845 that may be flattened out into the operand vector, but would need 13846 more than two slots on the RHS. For instance, a `COND_EXPR' 13847 expression of the form `(a op b) ? x : y' could be flattened out 13848 on the operand vector using 4 slots, but it would also require 13849 additional processing to distinguish `c = a op b' from `c = a op b 13850 ? x : y'. Something similar occurs with `ASSERT_EXPR'. In time, 13851 these special case tree expressions should be flattened into the 13852 operand vector. 13853 13854 For tree nodes in the categories `GIMPLE_BINARY_RHS' and 13855`GIMPLE_UNARY_RHS', they cannot be stored inside tuples directly. They 13856first need to be flattened and separated into individual components. 13857For instance, given the GENERIC expression 13858 13859 a = b + c 13860 13861 its tree representation is: 13862 13863 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 13864 13865 In this case, the GIMPLE form for this statement is logically 13866identical to its GENERIC form but in GIMPLE, the `PLUS_EXPR' on the RHS 13867of the assignment is not represented as a tree, instead the two 13868operands are taken out of the `PLUS_EXPR' sub-tree and flattened into 13869the GIMPLE tuple as follows: 13870 13871 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 13872 1387312.5.6 Operand vector allocation 13874-------------------------------- 13875 13876The operand vector is stored at the bottom of the three tuple 13877structures that accept operands. This means, that depending on the code 13878of a given statement, its operand vector will be at different offsets 13879from the base of the structure. To access tuple operands use the 13880following accessors 13881 13882 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 13883 Returns the number of operands in statement G. 13884 13885 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 13886 Returns operand `I' from statement `G'. 13887 13888 -- GIMPLE function: tree *gimple_ops (gimple g) 13889 Returns a pointer into the operand vector for statement `G'. This 13890 is computed using an internal table called `gimple_ops_offset_'[]. 13891 This table is indexed by the gimple code of `G'. 13892 13893 When the compiler is built, this table is filled-in using the 13894 sizes of the structures used by each statement code defined in 13895 gimple.def. Since the operand vector is at the bottom of the 13896 structure, for a gimple code `C' the offset is computed as sizeof 13897 (struct-of `C') - sizeof (tree). 13898 13899 This mechanism adds one memory indirection to every access when 13900 using `gimple_op'(), if this becomes a bottleneck, a pass can 13901 choose to memoize the result from `gimple_ops'() and use that to 13902 access the operands. 13903 1390412.5.7 Operand validation 13905------------------------- 13906 13907When adding a new operand to a gimple statement, the operand will be 13908validated according to what each tuple accepts in its operand vector. 13909These predicates are called by the `gimple_<name>_set_...()'. Each 13910tuple will use one of the following predicates (Note, this list is not 13911exhaustive): 13912 13913 -- GIMPLE function: is_gimple_operand (tree t) 13914 This is the most permissive of the predicates. It essentially 13915 checks whether t has a `gimple_rhs_class' of `GIMPLE_SINGLE_RHS'. 13916 13917 -- GIMPLE function: is_gimple_val (tree t) 13918 Returns true if t is a "GIMPLE value", which are all the 13919 non-addressable stack variables (variables for which 13920 `is_gimple_reg' returns true) and constants (expressions for which 13921 `is_gimple_min_invariant' returns true). 13922 13923 -- GIMPLE function: is_gimple_addressable (tree t) 13924 Returns true if t is a symbol or memory reference whose address 13925 can be taken. 13926 13927 -- GIMPLE function: is_gimple_asm_val (tree t) 13928 Similar to `is_gimple_val' but it also accepts hard registers. 13929 13930 -- GIMPLE function: is_gimple_call_addr (tree t) 13931 Return true if t is a valid expression to use as the function 13932 called by a `GIMPLE_CALL'. 13933 13934 -- GIMPLE function: is_gimple_constant (tree t) 13935 Return true if t is a valid gimple constant. 13936 13937 -- GIMPLE function: is_gimple_min_invariant (tree t) 13938 Return true if t is a valid minimal invariant. This is different 13939 from constants, in that the specific value of t may not be known 13940 at compile time, but it is known that it doesn't change (e.g., the 13941 address of a function local variable). 13942 13943 -- GIMPLE function: is_gimple_min_invariant_address (tree t) 13944 Return true if t is an `ADDR_EXPR' that does not change once a 13945 function is running. 13946 13947 -- GIMPLE function: is_gimple_ip_invariant (tree t) 13948 Return true if t is an interprocedural invariant. This means that 13949 t is a valid invariant in all functions (e.g. it can be an address 13950 of a global variable but not of a local one). 13951 13952 -- GIMPLE function: is_gimple_ip_invariant_address (tree t) 13953 Return true if t is an `ADDR_EXPR' that does not change once the 13954 program is running (and which is valid in all functions). 13955 1395612.5.8 Statement validation 13957--------------------------- 13958 13959 -- GIMPLE function: is_gimple_assign (gimple g) 13960 Return true if the code of g is `GIMPLE_ASSIGN'. 13961 13962 -- GIMPLE function: is_gimple_call (gimple g) 13963 Return true if the code of g is `GIMPLE_CALL'. 13964 13965 -- GIMPLE function: is_gimple_debug (gimple g) 13966 Return true if the code of g is `GIMPLE_DEBUG'. 13967 13968 -- GIMPLE function: gimple_assign_cast_p (gimple g) 13969 Return true if g is a `GIMPLE_ASSIGN' that performs a type cast 13970 operation. 13971 13972 -- GIMPLE function: gimple_debug_bind_p (gimple g) 13973 Return true if g is a `GIMPLE_DEBUG' that binds the value of an 13974 expression to a variable. 13975 13976 13977File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 13978 1397912.6 Manipulating GIMPLE statements 13980=================================== 13981 13982This section documents all the functions available to handle each of 13983the GIMPLE instructions. 13984 1398512.6.1 Common accessors 13986----------------------- 13987 13988The following are common accessors for gimple statements. 13989 13990 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 13991 Return the code for statement `G'. 13992 13993 -- GIMPLE function: basic_block gimple_bb (gimple g) 13994 Return the basic block to which statement `G' belongs to. 13995 13996 -- GIMPLE function: tree gimple_block (gimple g) 13997 Return the lexical scope block holding statement `G'. 13998 13999 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 14000 Return the type of the main expression computed by `STMT'. Return 14001 `void_type_node' if `STMT' computes nothing. This will only return 14002 something meaningful for `GIMPLE_ASSIGN', `GIMPLE_COND' and 14003 `GIMPLE_CALL'. For all other tuple codes, it will return 14004 `void_type_node'. 14005 14006 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 14007 Return the tree code for the expression computed by `STMT'. This 14008 is only meaningful for `GIMPLE_CALL', `GIMPLE_ASSIGN' and 14009 `GIMPLE_COND'. If `STMT' is `GIMPLE_CALL', it will return 14010 `CALL_EXPR'. For `GIMPLE_COND', it returns the code of the 14011 comparison predicate. For `GIMPLE_ASSIGN' it returns the code of 14012 the operation performed by the `RHS' of the assignment. 14013 14014 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 14015 Set the lexical scope block of `G' to `BLOCK'. 14016 14017 -- GIMPLE function: location_t gimple_locus (gimple g) 14018 Return locus information for statement `G'. 14019 14020 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 14021 Set locus information for statement `G'. 14022 14023 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 14024 Return true if `G' does not have locus information. 14025 14026 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 14027 Return true if no warnings should be emitted for statement `STMT'. 14028 14029 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 14030 visited_p) 14031 Set the visited status on statement `STMT' to `VISITED_P'. 14032 14033 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 14034 Return the visited status on statement `STMT'. 14035 14036 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 14037 plf, bool val_p) 14038 Set pass local flag `PLF' on statement `STMT' to `VAL_P'. 14039 14040 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum 14041 plf_mask plf) 14042 Return the value of pass local flag `PLF' on statement `STMT'. 14043 14044 -- GIMPLE function: bool gimple_has_ops (gimple g) 14045 Return true if statement `G' has register or memory operands. 14046 14047 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 14048 Return true if statement `G' has memory operands. 14049 14050 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 14051 Return the number of operands for statement `G'. 14052 14053 -- GIMPLE function: tree *gimple_ops (gimple g) 14054 Return the array of operands for statement `G'. 14055 14056 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 14057 Return operand `I' for statement `G'. 14058 14059 -- GIMPLE function: tree *gimple_op_ptr (gimple g, unsigned i) 14060 Return a pointer to operand `I' for statement `G'. 14061 14062 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 14063 Set operand `I' of statement `G' to `OP'. 14064 14065 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 14066 Return the set of symbols that have had their address taken by 14067 `STMT'. 14068 14069 -- GIMPLE function: struct def_optype_d *gimple_def_ops (gimple g) 14070 Return the set of `DEF' operands for statement `G'. 14071 14072 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 14073 def_optype_d *def) 14074 Set `DEF' to be the set of `DEF' operands for statement `G'. 14075 14076 -- GIMPLE function: struct use_optype_d *gimple_use_ops (gimple g) 14077 Return the set of `USE' operands for statement `G'. 14078 14079 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 14080 use_optype_d *use) 14081 Set `USE' to be the set of `USE' operands for statement `G'. 14082 14083 -- GIMPLE function: struct voptype_d *gimple_vuse_ops (gimple g) 14084 Return the set of `VUSE' operands for statement `G'. 14085 14086 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 14087 voptype_d *ops) 14088 Set `OPS' to be the set of `VUSE' operands for statement `G'. 14089 14090 -- GIMPLE function: struct voptype_d *gimple_vdef_ops (gimple g) 14091 Return the set of `VDEF' operands for statement `G'. 14092 14093 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 14094 voptype_d *ops) 14095 Set `OPS' to be the set of `VDEF' operands for statement `G'. 14096 14097 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 14098 Return the set of symbols loaded by statement `G'. Each element of 14099 the set is the `DECL_UID' of the corresponding symbol. 14100 14101 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 14102 Return the set of symbols stored by statement `G'. Each element of 14103 the set is the `DECL_UID' of the corresponding symbol. 14104 14105 -- GIMPLE function: bool gimple_modified_p (gimple g) 14106 Return true if statement `G' has operands and the modified field 14107 has been set. 14108 14109 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 14110 Return true if statement `STMT' contains volatile operands. 14111 14112 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, 14113 bool volatilep) 14114 Return true if statement `STMT' contains volatile operands. 14115 14116 -- GIMPLE function: void update_stmt (gimple s) 14117 Mark statement `S' as modified, and update it. 14118 14119 -- GIMPLE function: void update_stmt_if_modified (gimple s) 14120 Update statement `S' if it has been marked modified. 14121 14122 -- GIMPLE function: gimple gimple_copy (gimple stmt) 14123 Return a deep copy of statement `STMT'. 14124 14125 14126File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 14127 1412812.7 Tuple specific accessors 14129============================= 14130 14131* Menu: 14132 14133* `GIMPLE_ASM':: 14134* `GIMPLE_ASSIGN':: 14135* `GIMPLE_BIND':: 14136* `GIMPLE_CALL':: 14137* `GIMPLE_CATCH':: 14138* `GIMPLE_COND':: 14139* `GIMPLE_DEBUG':: 14140* `GIMPLE_EH_FILTER':: 14141* `GIMPLE_LABEL':: 14142* `GIMPLE_NOP':: 14143* `GIMPLE_OMP_ATOMIC_LOAD':: 14144* `GIMPLE_OMP_ATOMIC_STORE':: 14145* `GIMPLE_OMP_CONTINUE':: 14146* `GIMPLE_OMP_CRITICAL':: 14147* `GIMPLE_OMP_FOR':: 14148* `GIMPLE_OMP_MASTER':: 14149* `GIMPLE_OMP_ORDERED':: 14150* `GIMPLE_OMP_PARALLEL':: 14151* `GIMPLE_OMP_RETURN':: 14152* `GIMPLE_OMP_SECTION':: 14153* `GIMPLE_OMP_SECTIONS':: 14154* `GIMPLE_OMP_SINGLE':: 14155* `GIMPLE_PHI':: 14156* `GIMPLE_RESX':: 14157* `GIMPLE_RETURN':: 14158* `GIMPLE_SWITCH':: 14159* `GIMPLE_TRY':: 14160* `GIMPLE_WITH_CLEANUP_EXPR':: 14161 14162 14163File: gccint.info, Node: `GIMPLE_ASM', Next: `GIMPLE_ASSIGN', Up: Tuple specific accessors 14164 1416512.7.1 `GIMPLE_ASM' 14166------------------- 14167 14168 -- GIMPLE function: gimple gimple_build_asm (const char *string, 14169 ninputs, noutputs, nclobbers, ...) 14170 Build a `GIMPLE_ASM' statement. This statement is used for 14171 building in-line assembly constructs. `STRING' is the assembly 14172 code. `NINPUT' is the number of register inputs. `NOUTPUT' is the 14173 number of register outputs. `NCLOBBERS' is the number of clobbered 14174 registers. The rest of the arguments trees for each input, 14175 output, and clobbered registers. 14176 14177 -- GIMPLE function: gimple gimple_build_asm_vec (const char *, 14178 VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *) 14179 Identical to gimple_build_asm, but the arguments are passed in 14180 VECs. 14181 14182 -- GIMPLE function: gimple_asm_ninputs (gimple g) 14183 Return the number of input operands for `GIMPLE_ASM' `G'. 14184 14185 -- GIMPLE function: gimple_asm_noutputs (gimple g) 14186 Return the number of output operands for `GIMPLE_ASM' `G'. 14187 14188 -- GIMPLE function: gimple_asm_nclobbers (gimple g) 14189 Return the number of clobber operands for `GIMPLE_ASM' `G'. 14190 14191 -- GIMPLE function: tree gimple_asm_input_op (gimple g, unsigned index) 14192 Return input operand `INDEX' of `GIMPLE_ASM' `G'. 14193 14194 -- GIMPLE function: void gimple_asm_set_input_op (gimple g, unsigned 14195 index, tree in_op) 14196 Set `IN_OP' to be input operand `INDEX' in `GIMPLE_ASM' `G'. 14197 14198 -- GIMPLE function: tree gimple_asm_output_op (gimple g, unsigned 14199 index) 14200 Return output operand `INDEX' of `GIMPLE_ASM' `G'. 14201 14202 -- GIMPLE function: void gimple_asm_set_output_op (gimple g, unsigned 14203 index, tree out_op) 14204 Set `OUT_OP' to be output operand `INDEX' in `GIMPLE_ASM' `G'. 14205 14206 -- GIMPLE function: tree gimple_asm_clobber_op (gimple g, unsigned 14207 index) 14208 Return clobber operand `INDEX' of `GIMPLE_ASM' `G'. 14209 14210 -- GIMPLE function: void gimple_asm_set_clobber_op (gimple g, unsigned 14211 index, tree clobber_op) 14212 Set `CLOBBER_OP' to be clobber operand `INDEX' in `GIMPLE_ASM' `G'. 14213 14214 -- GIMPLE function: const char *gimple_asm_string (gimple g) 14215 Return the string representing the assembly instruction in 14216 `GIMPLE_ASM' `G'. 14217 14218 -- GIMPLE function: bool gimple_asm_volatile_p (gimple g) 14219 Return true if `G' is an asm statement marked volatile. 14220 14221 -- GIMPLE function: void gimple_asm_set_volatile (gimple g) 14222 Mark asm statement `G' as volatile. 14223 14224 -- GIMPLE function: void gimple_asm_clear_volatile (gimple g) 14225 Remove volatile marker from asm statement `G'. 14226 14227 14228File: gccint.info, Node: `GIMPLE_ASSIGN', Next: `GIMPLE_BIND', Prev: `GIMPLE_ASM', Up: Tuple specific accessors 14229 1423012.7.2 `GIMPLE_ASSIGN' 14231---------------------- 14232 14233 -- GIMPLE function: gimple gimple_build_assign (tree lhs, tree rhs) 14234 Build a `GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 14235 passed in lhs. The right-hand side can be either a unary or 14236 binary tree expression. The expression tree rhs will be flattened 14237 and its operands assigned to the corresponding operand slots in 14238 the new statement. This function is useful when you already have 14239 a tree expression that you want to convert into a tuple. However, 14240 try to avoid building expression trees for the sole purpose of 14241 calling this function. If you already have the operands in 14242 separate trees, it is better to use `gimple_build_assign_with_ops'. 14243 14244 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 14245 gimple_seq *seq_p) 14246 Build a new `GIMPLE_ASSIGN' tuple and append it to the end of 14247 `*SEQ_P'. 14248 14249 `DST'/`SRC' are the destination and source respectively. You can pass 14250ungimplified trees in `DST' or `SRC', in which case they will be 14251converted to a gimple operand if necessary. 14252 14253 This function returns the newly created `GIMPLE_ASSIGN' tuple. 14254 14255 -- GIMPLE function: gimple gimple_build_assign_with_ops (enum 14256 tree_code subcode, tree lhs, tree op1, tree op2) 14257 This function is similar to `gimple_build_assign', but is used to 14258 build a `GIMPLE_ASSIGN' statement when the operands of the 14259 right-hand side of the assignment are already split into different 14260 operands. 14261 14262 The left-hand side is an lvalue passed in lhs. Subcode is the 14263 `tree_code' for the right-hand side of the assignment. Op1 and op2 14264 are the operands. If op2 is null, subcode must be a `tree_code' 14265 for a unary expression. 14266 14267 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 14268 Return the code of the expression computed on the `RHS' of 14269 assignment statement `G'. 14270 14271 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 14272 (gimple g) 14273 Return the gimple rhs class of the code for the expression 14274 computed on the rhs of assignment statement `G'. This will never 14275 return `GIMPLE_INVALID_RHS'. 14276 14277 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 14278 Return the `LHS' of assignment statement `G'. 14279 14280 -- GIMPLE function: tree *gimple_assign_lhs_ptr (gimple g) 14281 Return a pointer to the `LHS' of assignment statement `G'. 14282 14283 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 14284 Return the first operand on the `RHS' of assignment statement `G'. 14285 14286 -- GIMPLE function: tree *gimple_assign_rhs1_ptr (gimple g) 14287 Return the address of the first operand on the `RHS' of assignment 14288 statement `G'. 14289 14290 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 14291 Return the second operand on the `RHS' of assignment statement `G'. 14292 14293 -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g) 14294 Return the address of the second operand on the `RHS' of assignment 14295 statement `G'. 14296 14297 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 14298 Set `LHS' to be the `LHS' operand of assignment statement `G'. 14299 14300 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 14301 Set `RHS' to be the first operand on the `RHS' of assignment 14302 statement `G'. 14303 14304 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 14305 Return the second operand on the `RHS' of assignment statement `G'. 14306 14307 -- GIMPLE function: tree *gimple_assign_rhs2_ptr (gimple g) 14308 Return a pointer to the second operand on the `RHS' of assignment 14309 statement `G'. 14310 14311 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 14312 Set `RHS' to be the second operand on the `RHS' of assignment 14313 statement `G'. 14314 14315 -- GIMPLE function: bool gimple_assign_cast_p (gimple s) 14316 Return true if `S' is a type-cast assignment. 14317 14318 14319File: gccint.info, Node: `GIMPLE_BIND', Next: `GIMPLE_CALL', Prev: `GIMPLE_ASSIGN', Up: Tuple specific accessors 14320 1432112.7.3 `GIMPLE_BIND' 14322-------------------- 14323 14324 -- GIMPLE function: gimple gimple_build_bind (tree vars, gimple_seq 14325 body) 14326 Build a `GIMPLE_BIND' statement with a list of variables in `VARS' 14327 and a body of statements in sequence `BODY'. 14328 14329 -- GIMPLE function: tree gimple_bind_vars (gimple g) 14330 Return the variables declared in the `GIMPLE_BIND' statement `G'. 14331 14332 -- GIMPLE function: void gimple_bind_set_vars (gimple g, tree vars) 14333 Set `VARS' to be the set of variables declared in the `GIMPLE_BIND' 14334 statement `G'. 14335 14336 -- GIMPLE function: void gimple_bind_append_vars (gimple g, tree vars) 14337 Append `VARS' to the set of variables declared in the `GIMPLE_BIND' 14338 statement `G'. 14339 14340 -- GIMPLE function: gimple_seq gimple_bind_body (gimple g) 14341 Return the GIMPLE sequence contained in the `GIMPLE_BIND' statement 14342 `G'. 14343 14344 -- GIMPLE function: void gimple_bind_set_body (gimple g, gimple_seq 14345 seq) 14346 Set `SEQ' to be sequence contained in the `GIMPLE_BIND' statement 14347 `G'. 14348 14349 -- GIMPLE function: void gimple_bind_add_stmt (gimple gs, gimple stmt) 14350 Append a statement to the end of a `GIMPLE_BIND''s body. 14351 14352 -- GIMPLE function: void gimple_bind_add_seq (gimple gs, gimple_seq 14353 seq) 14354 Append a sequence of statements to the end of a `GIMPLE_BIND''s 14355 body. 14356 14357 -- GIMPLE function: tree gimple_bind_block (gimple g) 14358 Return the `TREE_BLOCK' node associated with `GIMPLE_BIND' 14359 statement `G'. This is analogous to the `BIND_EXPR_BLOCK' field in 14360 trees. 14361 14362 -- GIMPLE function: void gimple_bind_set_block (gimple g, tree block) 14363 Set `BLOCK' to be the `TREE_BLOCK' node associated with 14364 `GIMPLE_BIND' statement `G'. 14365 14366 14367File: gccint.info, Node: `GIMPLE_CALL', Next: `GIMPLE_CATCH', Prev: `GIMPLE_BIND', Up: Tuple specific accessors 14368 1436912.7.4 `GIMPLE_CALL' 14370-------------------- 14371 14372 -- GIMPLE function: gimple gimple_build_call (tree fn, unsigned nargs, 14373 ...) 14374 Build a `GIMPLE_CALL' statement to function `FN'. The argument 14375 `FN' must be either a `FUNCTION_DECL' or a gimple call address as 14376 determined by `is_gimple_call_addr'. `NARGS' are the number of 14377 arguments. The rest of the arguments follow the argument `NARGS', 14378 and must be trees that are valid as rvalues in gimple (i.e., each 14379 operand is validated with `is_gimple_operand'). 14380 14381 -- GIMPLE function: gimple gimple_build_call_from_tree (tree call_expr) 14382 Build a `GIMPLE_CALL' from a `CALL_EXPR' node. The arguments and 14383 the function are taken from the expression directly. This routine 14384 assumes that `call_expr' is already in GIMPLE form. That is, its 14385 operands are GIMPLE values and the function call needs no further 14386 simplification. All the call flags in `call_expr' are copied over 14387 to the new `GIMPLE_CALL'. 14388 14389 -- GIMPLE function: gimple gimple_build_call_vec (tree fn, `VEC'(tree, 14390 heap) *args) 14391 Identical to `gimple_build_call' but the arguments are stored in a 14392 `VEC'(). 14393 14394 -- GIMPLE function: tree gimple_call_lhs (gimple g) 14395 Return the `LHS' of call statement `G'. 14396 14397 -- GIMPLE function: tree *gimple_call_lhs_ptr (gimple g) 14398 Return a pointer to the `LHS' of call statement `G'. 14399 14400 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 14401 Set `LHS' to be the `LHS' operand of call statement `G'. 14402 14403 -- GIMPLE function: tree gimple_call_fn (gimple g) 14404 Return the tree node representing the function called by call 14405 statement `G'. 14406 14407 -- GIMPLE function: void gimple_call_set_fn (gimple g, tree fn) 14408 Set `FN' to be the function called by call statement `G'. This has 14409 to be a gimple value specifying the address of the called function. 14410 14411 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 14412 If a given `GIMPLE_CALL''s callee is a `FUNCTION_DECL', return it. 14413 Otherwise return `NULL'. This function is analogous to 14414 `get_callee_fndecl' in `GENERIC'. 14415 14416 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 14417 Set the called function to `FNDECL'. 14418 14419 -- GIMPLE function: tree gimple_call_return_type (gimple g) 14420 Return the type returned by call statement `G'. 14421 14422 -- GIMPLE function: tree gimple_call_chain (gimple g) 14423 Return the static chain for call statement `G'. 14424 14425 -- GIMPLE function: void gimple_call_set_chain (gimple g, tree chain) 14426 Set `CHAIN' to be the static chain for call statement `G'. 14427 14428 -- GIMPLE function: gimple_call_num_args (gimple g) 14429 Return the number of arguments used by call statement `G'. 14430 14431 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 14432 Return the argument at position `INDEX' for call statement `G'. 14433 The first argument is 0. 14434 14435 -- GIMPLE function: tree *gimple_call_arg_ptr (gimple g, unsigned 14436 index) 14437 Return a pointer to the argument at position `INDEX' for call 14438 statement `G'. 14439 14440 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned 14441 index, tree arg) 14442 Set `ARG' to be the argument at position `INDEX' for call statement 14443 `G'. 14444 14445 -- GIMPLE function: void gimple_call_set_tail (gimple s) 14446 Mark call statement `S' as being a tail call (i.e., a call just 14447 before the exit of a function). These calls are candidate for tail 14448 call optimization. 14449 14450 -- GIMPLE function: bool gimple_call_tail_p (gimple s) 14451 Return true if `GIMPLE_CALL' `S' is marked as a tail call. 14452 14453 -- GIMPLE function: void gimple_call_mark_uninlinable (gimple s) 14454 Mark `GIMPLE_CALL' `S' as being uninlinable. 14455 14456 -- GIMPLE function: bool gimple_call_cannot_inline_p (gimple s) 14457 Return true if `GIMPLE_CALL' `S' cannot be inlined. 14458 14459 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 14460 Return true if `S' is a noreturn call. 14461 14462 -- GIMPLE function: gimple gimple_call_copy_skip_args (gimple stmt, 14463 bitmap args_to_skip) 14464 Build a `GIMPLE_CALL' identical to `STMT' but skipping the 14465 arguments in the positions marked by the set `ARGS_TO_SKIP'. 14466 14467 14468File: gccint.info, Node: `GIMPLE_CATCH', Next: `GIMPLE_COND', Prev: `GIMPLE_CALL', Up: Tuple specific accessors 14469 1447012.7.5 `GIMPLE_CATCH' 14471--------------------- 14472 14473 -- GIMPLE function: gimple gimple_build_catch (tree types, gimple_seq 14474 handler) 14475 Build a `GIMPLE_CATCH' statement. `TYPES' are the tree types this 14476 catch handles. `HANDLER' is a sequence of statements with the code 14477 for the handler. 14478 14479 -- GIMPLE function: tree gimple_catch_types (gimple g) 14480 Return the types handled by `GIMPLE_CATCH' statement `G'. 14481 14482 -- GIMPLE function: tree *gimple_catch_types_ptr (gimple g) 14483 Return a pointer to the types handled by `GIMPLE_CATCH' statement 14484 `G'. 14485 14486 -- GIMPLE function: gimple_seq gimple_catch_handler (gimple g) 14487 Return the GIMPLE sequence representing the body of the handler of 14488 `GIMPLE_CATCH' statement `G'. 14489 14490 -- GIMPLE function: void gimple_catch_set_types (gimple g, tree t) 14491 Set `T' to be the set of types handled by `GIMPLE_CATCH' `G'. 14492 14493 -- GIMPLE function: void gimple_catch_set_handler (gimple g, 14494 gimple_seq handler) 14495 Set `HANDLER' to be the body of `GIMPLE_CATCH' `G'. 14496 14497 14498File: gccint.info, Node: `GIMPLE_COND', Next: `GIMPLE_DEBUG', Prev: `GIMPLE_CATCH', Up: Tuple specific accessors 14499 1450012.7.6 `GIMPLE_COND' 14501-------------------- 14502 14503 -- GIMPLE function: gimple gimple_build_cond (enum tree_code 14504 pred_code, tree lhs, tree rhs, tree t_label, tree f_label) 14505 Build a `GIMPLE_COND' statement. `A' `GIMPLE_COND' statement 14506 compares `LHS' and `RHS' and if the condition in `PRED_CODE' is 14507 true, jump to the label in `t_label', otherwise jump to the label 14508 in `f_label'. `PRED_CODE' are relational operator tree codes like 14509 `EQ_EXPR', `LT_EXPR', `LE_EXPR', `NE_EXPR', etc. 14510 14511 -- GIMPLE function: gimple gimple_build_cond_from_tree (tree cond, 14512 tree t_label, tree f_label) 14513 Build a `GIMPLE_COND' statement from the conditional expression 14514 tree `COND'. `T_LABEL' and `F_LABEL' are as in 14515 `gimple_build_cond'. 14516 14517 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 14518 Return the code of the predicate computed by conditional statement 14519 `G'. 14520 14521 -- GIMPLE function: void gimple_cond_set_code (gimple g, enum 14522 tree_code code) 14523 Set `CODE' to be the predicate code for the conditional statement 14524 `G'. 14525 14526 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 14527 Return the `LHS' of the predicate computed by conditional statement 14528 `G'. 14529 14530 -- GIMPLE function: void gimple_cond_set_lhs (gimple g, tree lhs) 14531 Set `LHS' to be the `LHS' operand of the predicate computed by 14532 conditional statement `G'. 14533 14534 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 14535 Return the `RHS' operand of the predicate computed by conditional 14536 `G'. 14537 14538 -- GIMPLE function: void gimple_cond_set_rhs (gimple g, tree rhs) 14539 Set `RHS' to be the `RHS' operand of the predicate computed by 14540 conditional statement `G'. 14541 14542 -- GIMPLE function: tree gimple_cond_true_label (gimple g) 14543 Return the label used by conditional statement `G' when its 14544 predicate evaluates to true. 14545 14546 -- GIMPLE function: void gimple_cond_set_true_label (gimple g, tree 14547 label) 14548 Set `LABEL' to be the label used by conditional statement `G' when 14549 its predicate evaluates to true. 14550 14551 -- GIMPLE function: void gimple_cond_set_false_label (gimple g, tree 14552 label) 14553 Set `LABEL' to be the label used by conditional statement `G' when 14554 its predicate evaluates to false. 14555 14556 -- GIMPLE function: tree gimple_cond_false_label (gimple g) 14557 Return the label used by conditional statement `G' when its 14558 predicate evaluates to false. 14559 14560 -- GIMPLE function: void gimple_cond_make_false (gimple g) 14561 Set the conditional `COND_STMT' to be of the form 'if (1 == 0)'. 14562 14563 -- GIMPLE function: void gimple_cond_make_true (gimple g) 14564 Set the conditional `COND_STMT' to be of the form 'if (1 == 1)'. 14565 14566 14567File: gccint.info, Node: `GIMPLE_DEBUG', Next: `GIMPLE_EH_FILTER', Prev: `GIMPLE_COND', Up: Tuple specific accessors 14568 1456912.7.7 `GIMPLE_DEBUG' 14570--------------------- 14571 14572 -- GIMPLE function: gimple gimple_build_debug_bind (tree var, tree 14573 value, gimple stmt) 14574 Build a `GIMPLE_DEBUG' statement with `GIMPLE_DEBUG_BIND' of 14575 `subcode'. The effect of this statement is to tell debug 14576 information generation machinery that the value of user variable 14577 `var' is given by `value' at that point, and to remain with that 14578 value until `var' runs out of scope, a dynamically-subsequent 14579 debug bind statement overrides the binding, or conflicting values 14580 reach a control flow merge point. Even if components of the 14581 `value' expression change afterwards, the variable is supposed to 14582 retain the same value, though not necessarily the same location. 14583 14584 It is expected that `var' be most often a tree for automatic user 14585 variables (`VAR_DECL' or `PARM_DECL') that satisfy the 14586 requirements for gimple registers, but it may also be a tree for a 14587 scalarized component of a user variable (`ARRAY_REF', 14588 `COMPONENT_REF'), or a debug temporary (`DEBUG_EXPR_DECL'). 14589 14590 As for `value', it can be an arbitrary tree expression, but it is 14591 recommended that it be in a suitable form for a gimple assignment 14592 `RHS'. It is not expected that user variables that could appear 14593 as `var' ever appear in `value', because in the latter we'd have 14594 their `SSA_NAME's instead, but even if they were not in SSA form, 14595 user variables appearing in `value' are to be regarded as part of 14596 the executable code space, whereas those in `var' are to be 14597 regarded as part of the source code space. There is no way to 14598 refer to the value bound to a user variable within a `value' 14599 expression. 14600 14601 If `value' is `GIMPLE_DEBUG_BIND_NOVALUE', debug information 14602 generation machinery is informed that the variable `var' is 14603 unbound, i.e., that its value is indeterminate, which sometimes 14604 means it is really unavailable, and other times that the compiler 14605 could not keep track of it. 14606 14607 Block and location information for the newly-created stmt are 14608 taken from `stmt', if given. 14609 14610 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 14611 Return the user variable VAR that is bound at `stmt'. 14612 14613 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 14614 Return the value expression that is bound to a user variable at 14615 `stmt'. 14616 14617 -- GIMPLE function: tree *gimple_debug_bind_get_value_ptr (gimple stmt) 14618 Return a pointer to the value expression that is bound to a user 14619 variable at `stmt'. 14620 14621 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 14622 var) 14623 Modify the user variable bound at `stmt' to VAR. 14624 14625 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, 14626 tree var) 14627 Modify the value bound to the user variable bound at `stmt' to 14628 VALUE. 14629 14630 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 14631 Modify the value bound to the user variable bound at `stmt' so 14632 that the variable becomes unbound. 14633 14634 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 14635 Return `TRUE' if `stmt' binds a user variable to a value, and 14636 `FALSE' if it unbinds the variable. 14637 14638 14639File: gccint.info, Node: `GIMPLE_EH_FILTER', Next: `GIMPLE_LABEL', Prev: `GIMPLE_DEBUG', Up: Tuple specific accessors 14640 1464112.7.8 `GIMPLE_EH_FILTER' 14642------------------------- 14643 14644 -- GIMPLE function: gimple gimple_build_eh_filter (tree types, 14645 gimple_seq failure) 14646 Build a `GIMPLE_EH_FILTER' statement. `TYPES' are the filter's 14647 types. `FAILURE' is a sequence with the filter's failure action. 14648 14649 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 14650 Return the types handled by `GIMPLE_EH_FILTER' statement `G'. 14651 14652 -- GIMPLE function: tree *gimple_eh_filter_types_ptr (gimple g) 14653 Return a pointer to the types handled by `GIMPLE_EH_FILTER' 14654 statement `G'. 14655 14656 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 14657 Return the sequence of statement to execute when `GIMPLE_EH_FILTER' 14658 statement fails. 14659 14660 -- GIMPLE function: void gimple_eh_filter_set_types (gimple g, tree 14661 types) 14662 Set `TYPES' to be the set of types handled by `GIMPLE_EH_FILTER' 14663 `G'. 14664 14665 -- GIMPLE function: void gimple_eh_filter_set_failure (gimple g, 14666 gimple_seq failure) 14667 Set `FAILURE' to be the sequence of statements to execute on 14668 failure for `GIMPLE_EH_FILTER' `G'. 14669 14670 -- GIMPLE function: bool gimple_eh_filter_must_not_throw (gimple g) 14671 Return the `EH_FILTER_MUST_NOT_THROW' flag. 14672 14673 -- GIMPLE function: void gimple_eh_filter_set_must_not_throw (gimple 14674 g, bool mntp) 14675 Set the `EH_FILTER_MUST_NOT_THROW' flag. 14676 14677 14678File: gccint.info, Node: `GIMPLE_LABEL', Next: `GIMPLE_NOP', Prev: `GIMPLE_EH_FILTER', Up: Tuple specific accessors 14679 1468012.7.9 `GIMPLE_LABEL' 14681--------------------- 14682 14683 -- GIMPLE function: gimple gimple_build_label (tree label) 14684 Build a `GIMPLE_LABEL' statement with corresponding to the tree 14685 label, `LABEL'. 14686 14687 -- GIMPLE function: tree gimple_label_label (gimple g) 14688 Return the `LABEL_DECL' node used by `GIMPLE_LABEL' statement `G'. 14689 14690 -- GIMPLE function: void gimple_label_set_label (gimple g, tree label) 14691 Set `LABEL' to be the `LABEL_DECL' node used by `GIMPLE_LABEL' 14692 statement `G'. 14693 14694 -- GIMPLE function: gimple gimple_build_goto (tree dest) 14695 Build a `GIMPLE_GOTO' statement to label `DEST'. 14696 14697 -- GIMPLE function: tree gimple_goto_dest (gimple g) 14698 Return the destination of the unconditional jump `G'. 14699 14700 -- GIMPLE function: void gimple_goto_set_dest (gimple g, tree dest) 14701 Set `DEST' to be the destination of the unconditional jump `G'. 14702 14703 14704File: gccint.info, Node: `GIMPLE_NOP', Next: `GIMPLE_OMP_ATOMIC_LOAD', Prev: `GIMPLE_LABEL', Up: Tuple specific accessors 14705 1470612.7.10 `GIMPLE_NOP' 14707-------------------- 14708 14709 -- GIMPLE function: gimple gimple_build_nop (void) 14710 Build a `GIMPLE_NOP' statement. 14711 14712 -- GIMPLE function: bool gimple_nop_p (gimple g) 14713 Returns `TRUE' if statement `G' is a `GIMPLE_NOP'. 14714 14715 14716File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_LOAD', Next: `GIMPLE_OMP_ATOMIC_STORE', Prev: `GIMPLE_NOP', Up: Tuple specific accessors 14717 1471812.7.11 `GIMPLE_OMP_ATOMIC_LOAD' 14719-------------------------------- 14720 14721 -- GIMPLE function: gimple gimple_build_omp_atomic_load (tree lhs, 14722 tree rhs) 14723 Build a `GIMPLE_OMP_ATOMIC_LOAD' statement. `LHS' is the left-hand 14724 side of the assignment. `RHS' is the right-hand side of the 14725 assignment. 14726 14727 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs (gimple g, 14728 tree lhs) 14729 Set the `LHS' of an atomic load. 14730 14731 -- GIMPLE function: tree gimple_omp_atomic_load_lhs (gimple g) 14732 Get the `LHS' of an atomic load. 14733 14734 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs (gimple g, 14735 tree rhs) 14736 Set the `RHS' of an atomic set. 14737 14738 -- GIMPLE function: tree gimple_omp_atomic_load_rhs (gimple g) 14739 Get the `RHS' of an atomic set. 14740 14741 14742File: gccint.info, Node: `GIMPLE_OMP_ATOMIC_STORE', Next: `GIMPLE_OMP_CONTINUE', Prev: `GIMPLE_OMP_ATOMIC_LOAD', Up: Tuple specific accessors 14743 1474412.7.12 `GIMPLE_OMP_ATOMIC_STORE' 14745--------------------------------- 14746 14747 -- GIMPLE function: gimple gimple_build_omp_atomic_store (tree val) 14748 Build a `GIMPLE_OMP_ATOMIC_STORE' statement. `VAL' is the value to 14749 be stored. 14750 14751 -- GIMPLE function: void gimple_omp_atomic_store_set_val (gimple g, 14752 tree val) 14753 Set the value being stored in an atomic store. 14754 14755 -- GIMPLE function: tree gimple_omp_atomic_store_val (gimple g) 14756 Return the value being stored in an atomic store. 14757 14758 14759File: gccint.info, Node: `GIMPLE_OMP_CONTINUE', Next: `GIMPLE_OMP_CRITICAL', Prev: `GIMPLE_OMP_ATOMIC_STORE', Up: Tuple specific accessors 14760 1476112.7.13 `GIMPLE_OMP_CONTINUE' 14762----------------------------- 14763 14764 -- GIMPLE function: gimple gimple_build_omp_continue (tree 14765 control_def, tree control_use) 14766 Build a `GIMPLE_OMP_CONTINUE' statement. `CONTROL_DEF' is the 14767 definition of the control variable. `CONTROL_USE' is the use of 14768 the control variable. 14769 14770 -- GIMPLE function: tree gimple_omp_continue_control_def (gimple s) 14771 Return the definition of the control variable on a 14772 `GIMPLE_OMP_CONTINUE' in `S'. 14773 14774 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr (gimple s) 14775 Same as above, but return the pointer. 14776 14777 -- GIMPLE function: tree gimple_omp_continue_set_control_def (gimple s) 14778 Set the control variable definition for a `GIMPLE_OMP_CONTINUE' 14779 statement in `S'. 14780 14781 -- GIMPLE function: tree gimple_omp_continue_control_use (gimple s) 14782 Return the use of the control variable on a `GIMPLE_OMP_CONTINUE' 14783 in `S'. 14784 14785 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr (gimple s) 14786 Same as above, but return the pointer. 14787 14788 -- GIMPLE function: tree gimple_omp_continue_set_control_use (gimple s) 14789 Set the control variable use for a `GIMPLE_OMP_CONTINUE' statement 14790 in `S'. 14791 14792 14793File: gccint.info, Node: `GIMPLE_OMP_CRITICAL', Next: `GIMPLE_OMP_FOR', Prev: `GIMPLE_OMP_CONTINUE', Up: Tuple specific accessors 14794 1479512.7.14 `GIMPLE_OMP_CRITICAL' 14796----------------------------- 14797 14798 -- GIMPLE function: gimple gimple_build_omp_critical (gimple_seq body, 14799 tree name) 14800 Build a `GIMPLE_OMP_CRITICAL' statement. `BODY' is the sequence of 14801 statements for which only one thread can execute. `NAME' is an 14802 optional identifier for this critical block. 14803 14804 -- GIMPLE function: tree gimple_omp_critical_name (gimple g) 14805 Return the name associated with `OMP_CRITICAL' statement `G'. 14806 14807 -- GIMPLE function: tree *gimple_omp_critical_name_ptr (gimple g) 14808 Return a pointer to the name associated with `OMP' critical 14809 statement `G'. 14810 14811 -- GIMPLE function: void gimple_omp_critical_set_name (gimple g, tree 14812 name) 14813 Set `NAME' to be the name associated with `OMP' critical statement 14814 `G'. 14815 14816 14817File: gccint.info, Node: `GIMPLE_OMP_FOR', Next: `GIMPLE_OMP_MASTER', Prev: `GIMPLE_OMP_CRITICAL', Up: Tuple specific accessors 14818 1481912.7.15 `GIMPLE_OMP_FOR' 14820------------------------ 14821 14822 -- GIMPLE function: gimple gimple_build_omp_for (gimple_seq body, tree 14823 clauses, tree index, tree initial, tree final, tree incr, 14824 gimple_seq pre_body, enum tree_code omp_for_cond) 14825 Build a `GIMPLE_OMP_FOR' statement. `BODY' is sequence of 14826 statements inside the for loop. `CLAUSES', are any of the `OMP' 14827 loop construct's clauses: private, firstprivate, lastprivate, 14828 reductions, ordered, schedule, and nowait. `PRE_BODY' is the 14829 sequence of statements that are loop invariant. `INDEX' is the 14830 index variable. `INITIAL' is the initial value of `INDEX'. 14831 `FINAL' is final value of `INDEX'. OMP_FOR_COND is the predicate 14832 used to compare `INDEX' and `FINAL'. `INCR' is the increment 14833 expression. 14834 14835 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 14836 Return the clauses associated with `OMP_FOR' `G'. 14837 14838 -- GIMPLE function: tree *gimple_omp_for_clauses_ptr (gimple g) 14839 Return a pointer to the `OMP_FOR' `G'. 14840 14841 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 14842 clauses) 14843 Set `CLAUSES' to be the list of clauses associated with `OMP_FOR' 14844 `G'. 14845 14846 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 14847 Return the index variable for `OMP_FOR' `G'. 14848 14849 -- GIMPLE function: tree *gimple_omp_for_index_ptr (gimple g) 14850 Return a pointer to the index variable for `OMP_FOR' `G'. 14851 14852 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 14853 index) 14854 Set `INDEX' to be the index variable for `OMP_FOR' `G'. 14855 14856 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 14857 Return the initial value for `OMP_FOR' `G'. 14858 14859 -- GIMPLE function: tree *gimple_omp_for_initial_ptr (gimple g) 14860 Return a pointer to the initial value for `OMP_FOR' `G'. 14861 14862 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 14863 initial) 14864 Set `INITIAL' to be the initial value for `OMP_FOR' `G'. 14865 14866 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 14867 Return the final value for `OMP_FOR' `G'. 14868 14869 -- GIMPLE function: tree *gimple_omp_for_final_ptr (gimple g) 14870 turn a pointer to the final value for `OMP_FOR' `G'. 14871 14872 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 14873 final) 14874 Set `FINAL' to be the final value for `OMP_FOR' `G'. 14875 14876 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 14877 Return the increment value for `OMP_FOR' `G'. 14878 14879 -- GIMPLE function: tree *gimple_omp_for_incr_ptr (gimple g) 14880 Return a pointer to the increment value for `OMP_FOR' `G'. 14881 14882 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 14883 Set `INCR' to be the increment value for `OMP_FOR' `G'. 14884 14885 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 14886 Return the sequence of statements to execute before the `OMP_FOR' 14887 statement `G' starts. 14888 14889 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 14890 gimple_seq pre_body) 14891 Set `PRE_BODY' to be the sequence of statements to execute before 14892 the `OMP_FOR' statement `G' starts. 14893 14894 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 14895 tree_code cond) 14896 Set `COND' to be the condition code for `OMP_FOR' `G'. 14897 14898 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 14899 Return the condition code associated with `OMP_FOR' `G'. 14900 14901 14902File: gccint.info, Node: `GIMPLE_OMP_MASTER', Next: `GIMPLE_OMP_ORDERED', Prev: `GIMPLE_OMP_FOR', Up: Tuple specific accessors 14903 1490412.7.16 `GIMPLE_OMP_MASTER' 14905--------------------------- 14906 14907 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 14908 Build a `GIMPLE_OMP_MASTER' statement. `BODY' is the sequence of 14909 statements to be executed by just the master. 14910 14911 14912File: gccint.info, Node: `GIMPLE_OMP_ORDERED', Next: `GIMPLE_OMP_PARALLEL', Prev: `GIMPLE_OMP_MASTER', Up: Tuple specific accessors 14913 1491412.7.17 `GIMPLE_OMP_ORDERED' 14915---------------------------- 14916 14917 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 14918 Build a `GIMPLE_OMP_ORDERED' statement. 14919 14920 `BODY' is the sequence of statements inside a loop that will executed 14921in sequence. 14922 14923 14924File: gccint.info, Node: `GIMPLE_OMP_PARALLEL', Next: `GIMPLE_OMP_RETURN', Prev: `GIMPLE_OMP_ORDERED', Up: Tuple specific accessors 14925 1492612.7.18 `GIMPLE_OMP_PARALLEL' 14927----------------------------- 14928 14929 -- GIMPLE function: gimple gimple_build_omp_parallel (gimple_seq body, 14930 tree clauses, tree child_fn, tree data_arg) 14931 Build a `GIMPLE_OMP_PARALLEL' statement. 14932 14933 `BODY' is sequence of statements which are executed in parallel. 14934`CLAUSES', are the `OMP' parallel construct's clauses. `CHILD_FN' is 14935the function created for the parallel threads to execute. `DATA_ARG' 14936are the shared data argument(s). 14937 14938 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 14939 Return true if `OMP' parallel statement `G' has the 14940 `GF_OMP_PARALLEL_COMBINED' flag set. 14941 14942 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 14943 Set the `GF_OMP_PARALLEL_COMBINED' field in `OMP' parallel 14944 statement `G'. 14945 14946 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 14947 Return the body for the `OMP' statement `G'. 14948 14949 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 14950 body) 14951 Set `BODY' to be the body for the `OMP' statement `G'. 14952 14953 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 14954 Return the clauses associated with `OMP_PARALLEL' `G'. 14955 14956 -- GIMPLE function: tree *gimple_omp_parallel_clauses_ptr (gimple g) 14957 Return a pointer to the clauses associated with `OMP_PARALLEL' `G'. 14958 14959 -- GIMPLE function: void gimple_omp_parallel_set_clauses (gimple g, 14960 tree clauses) 14961 Set `CLAUSES' to be the list of clauses associated with 14962 `OMP_PARALLEL' `G'. 14963 14964 -- GIMPLE function: tree gimple_omp_parallel_child_fn (gimple g) 14965 Return the child function used to hold the body of `OMP_PARALLEL' 14966 `G'. 14967 14968 -- GIMPLE function: tree *gimple_omp_parallel_child_fn_ptr (gimple g) 14969 Return a pointer to the child function used to hold the body of 14970 `OMP_PARALLEL' `G'. 14971 14972 -- GIMPLE function: void gimple_omp_parallel_set_child_fn (gimple g, 14973 tree child_fn) 14974 Set `CHILD_FN' to be the child function for `OMP_PARALLEL' `G'. 14975 14976 -- GIMPLE function: tree gimple_omp_parallel_data_arg (gimple g) 14977 Return the artificial argument used to send variables and values 14978 from the parent to the children threads in `OMP_PARALLEL' `G'. 14979 14980 -- GIMPLE function: tree *gimple_omp_parallel_data_arg_ptr (gimple g) 14981 Return a pointer to the data argument for `OMP_PARALLEL' `G'. 14982 14983 -- GIMPLE function: void gimple_omp_parallel_set_data_arg (gimple g, 14984 tree data_arg) 14985 Set `DATA_ARG' to be the data argument for `OMP_PARALLEL' `G'. 14986 14987 -- GIMPLE function: bool is_gimple_omp (gimple stmt) 14988 Returns true when the gimple statement `STMT' is any of the OpenMP 14989 types. 14990 14991 14992File: gccint.info, Node: `GIMPLE_OMP_RETURN', Next: `GIMPLE_OMP_SECTION', Prev: `GIMPLE_OMP_PARALLEL', Up: Tuple specific accessors 14993 1499412.7.19 `GIMPLE_OMP_RETURN' 14995--------------------------- 14996 14997 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 14998 Build a `GIMPLE_OMP_RETURN' statement. `WAIT_P' is true if this is 14999 a non-waiting return. 15000 15001 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 15002 Set the nowait flag on `GIMPLE_OMP_RETURN' statement `S'. 15003 15004 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 15005 Return true if `OMP' return statement `G' has the 15006 `GF_OMP_RETURN_NOWAIT' flag set. 15007 15008 15009File: gccint.info, Node: `GIMPLE_OMP_SECTION', Next: `GIMPLE_OMP_SECTIONS', Prev: `GIMPLE_OMP_RETURN', Up: Tuple specific accessors 15010 1501112.7.20 `GIMPLE_OMP_SECTION' 15012---------------------------- 15013 15014 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 15015 Build a `GIMPLE_OMP_SECTION' statement for a sections statement. 15016 15017 `BODY' is the sequence of statements in the section. 15018 15019 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 15020 Return true if `OMP' section statement `G' has the 15021 `GF_OMP_SECTION_LAST' flag set. 15022 15023 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 15024 Set the `GF_OMP_SECTION_LAST' flag on `G'. 15025 15026 15027File: gccint.info, Node: `GIMPLE_OMP_SECTIONS', Next: `GIMPLE_OMP_SINGLE', Prev: `GIMPLE_OMP_SECTION', Up: Tuple specific accessors 15028 1502912.7.21 `GIMPLE_OMP_SECTIONS' 15030----------------------------- 15031 15032 -- GIMPLE function: gimple gimple_build_omp_sections (gimple_seq body, 15033 tree clauses) 15034 Build a `GIMPLE_OMP_SECTIONS' statement. `BODY' is a sequence of 15035 section statements. `CLAUSES' are any of the `OMP' sections 15036 construct's clauses: private, firstprivate, lastprivate, 15037 reduction, and nowait. 15038 15039 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 15040 Build a `GIMPLE_OMP_SECTIONS_SWITCH' statement. 15041 15042 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 15043 Return the control variable associated with the 15044 `GIMPLE_OMP_SECTIONS' in `G'. 15045 15046 -- GIMPLE function: tree *gimple_omp_sections_control_ptr (gimple g) 15047 Return a pointer to the clauses associated with the 15048 `GIMPLE_OMP_SECTIONS' in `G'. 15049 15050 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 15051 tree control) 15052 Set `CONTROL' to be the set of clauses associated with the 15053 `GIMPLE_OMP_SECTIONS' in `G'. 15054 15055 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 15056 Return the clauses associated with `OMP_SECTIONS' `G'. 15057 15058 -- GIMPLE function: tree *gimple_omp_sections_clauses_ptr (gimple g) 15059 Return a pointer to the clauses associated with `OMP_SECTIONS' `G'. 15060 15061 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 15062 tree clauses) 15063 Set `CLAUSES' to be the set of clauses associated with 15064 `OMP_SECTIONS' `G'. 15065 15066 15067File: gccint.info, Node: `GIMPLE_OMP_SINGLE', Next: `GIMPLE_PHI', Prev: `GIMPLE_OMP_SECTIONS', Up: Tuple specific accessors 15068 1506912.7.22 `GIMPLE_OMP_SINGLE' 15070--------------------------- 15071 15072 -- GIMPLE function: gimple gimple_build_omp_single (gimple_seq body, 15073 tree clauses) 15074 Build a `GIMPLE_OMP_SINGLE' statement. `BODY' is the sequence of 15075 statements that will be executed once. `CLAUSES' are any of the 15076 `OMP' single construct's clauses: private, firstprivate, 15077 copyprivate, nowait. 15078 15079 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 15080 Return the clauses associated with `OMP_SINGLE' `G'. 15081 15082 -- GIMPLE function: tree *gimple_omp_single_clauses_ptr (gimple g) 15083 Return a pointer to the clauses associated with `OMP_SINGLE' `G'. 15084 15085 -- GIMPLE function: void gimple_omp_single_set_clauses (gimple g, tree 15086 clauses) 15087 Set `CLAUSES' to be the clauses associated with `OMP_SINGLE' `G'. 15088 15089 15090File: gccint.info, Node: `GIMPLE_PHI', Next: `GIMPLE_RESX', Prev: `GIMPLE_OMP_SINGLE', Up: Tuple specific accessors 15091 1509212.7.23 `GIMPLE_PHI' 15093-------------------- 15094 15095 -- GIMPLE function: gimple make_phi_node (tree var, int len) 15096 Build a `PHI' node with len argument slots for variable var. 15097 15098 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 15099 Return the maximum number of arguments supported by `GIMPLE_PHI' 15100 `G'. 15101 15102 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 15103 Return the number of arguments in `GIMPLE_PHI' `G'. This must 15104 always be exactly the number of incoming edges for the basic block 15105 holding `G'. 15106 15107 -- GIMPLE function: tree gimple_phi_result (gimple g) 15108 Return the `SSA' name created by `GIMPLE_PHI' `G'. 15109 15110 -- GIMPLE function: tree *gimple_phi_result_ptr (gimple g) 15111 Return a pointer to the `SSA' name created by `GIMPLE_PHI' `G'. 15112 15113 -- GIMPLE function: void gimple_phi_set_result (gimple g, tree result) 15114 Set `RESULT' to be the `SSA' name created by `GIMPLE_PHI' `G'. 15115 15116 -- GIMPLE function: struct phi_arg_d *gimple_phi_arg (gimple g, index) 15117 Return the `PHI' argument corresponding to incoming edge `INDEX' 15118 for `GIMPLE_PHI' `G'. 15119 15120 -- GIMPLE function: void gimple_phi_set_arg (gimple g, index, struct 15121 phi_arg_d * phiarg) 15122 Set `PHIARG' to be the argument corresponding to incoming edge 15123 `INDEX' for `GIMPLE_PHI' `G'. 15124 15125 15126File: gccint.info, Node: `GIMPLE_RESX', Next: `GIMPLE_RETURN', Prev: `GIMPLE_PHI', Up: Tuple specific accessors 15127 1512812.7.24 `GIMPLE_RESX' 15129--------------------- 15130 15131 -- GIMPLE function: gimple gimple_build_resx (int region) 15132 Build a `GIMPLE_RESX' statement which is a statement. This 15133 statement is a placeholder for _Unwind_Resume before we know if a 15134 function call or a branch is needed. `REGION' is the exception 15135 region from which control is flowing. 15136 15137 -- GIMPLE function: int gimple_resx_region (gimple g) 15138 Return the region number for `GIMPLE_RESX' `G'. 15139 15140 -- GIMPLE function: void gimple_resx_set_region (gimple g, int region) 15141 Set `REGION' to be the region number for `GIMPLE_RESX' `G'. 15142 15143 15144File: gccint.info, Node: `GIMPLE_RETURN', Next: `GIMPLE_SWITCH', Prev: `GIMPLE_RESX', Up: Tuple specific accessors 15145 1514612.7.25 `GIMPLE_RETURN' 15147----------------------- 15148 15149 -- GIMPLE function: gimple gimple_build_return (tree retval) 15150 Build a `GIMPLE_RETURN' statement whose return value is retval. 15151 15152 -- GIMPLE function: tree gimple_return_retval (gimple g) 15153 Return the return value for `GIMPLE_RETURN' `G'. 15154 15155 -- GIMPLE function: void gimple_return_set_retval (gimple g, tree 15156 retval) 15157 Set `RETVAL' to be the return value for `GIMPLE_RETURN' `G'. 15158 15159 15160File: gccint.info, Node: `GIMPLE_SWITCH', Next: `GIMPLE_TRY', Prev: `GIMPLE_RETURN', Up: Tuple specific accessors 15161 1516212.7.26 `GIMPLE_SWITCH' 15163----------------------- 15164 15165 -- GIMPLE function: gimple gimple_build_switch ( nlabels, tree index, 15166 tree default_label, ...) 15167 Build a `GIMPLE_SWITCH' statement. `NLABELS' are the number of 15168 labels excluding the default label. The default label is passed 15169 in `DEFAULT_LABEL'. The rest of the arguments are trees 15170 representing the labels. Each label is a tree of code 15171 `CASE_LABEL_EXPR'. 15172 15173 -- GIMPLE function: gimple gimple_build_switch_vec (tree index, tree 15174 default_label, `VEC'(tree,heap) *args) 15175 This function is an alternate way of building `GIMPLE_SWITCH' 15176 statements. `INDEX' and `DEFAULT_LABEL' are as in 15177 gimple_build_switch. `ARGS' is a vector of `CASE_LABEL_EXPR' trees 15178 that contain the labels. 15179 15180 -- GIMPLE function: unsigned gimple_switch_num_labels (gimple g) 15181 Return the number of labels associated with the switch statement 15182 `G'. 15183 15184 -- GIMPLE function: void gimple_switch_set_num_labels (gimple g, 15185 unsigned nlabels) 15186 Set `NLABELS' to be the number of labels for the switch statement 15187 `G'. 15188 15189 -- GIMPLE function: tree gimple_switch_index (gimple g) 15190 Return the index variable used by the switch statement `G'. 15191 15192 -- GIMPLE function: void gimple_switch_set_index (gimple g, tree index) 15193 Set `INDEX' to be the index variable for switch statement `G'. 15194 15195 -- GIMPLE function: tree gimple_switch_label (gimple g, unsigned index) 15196 Return the label numbered `INDEX'. The default label is 0, followed 15197 by any labels in a switch statement. 15198 15199 -- GIMPLE function: void gimple_switch_set_label (gimple g, unsigned 15200 index, tree label) 15201 Set the label number `INDEX' to `LABEL'. 0 is always the default 15202 label. 15203 15204 -- GIMPLE function: tree gimple_switch_default_label (gimple g) 15205 Return the default label for a switch statement. 15206 15207 -- GIMPLE function: void gimple_switch_set_default_label (gimple g, 15208 tree label) 15209 Set the default label for a switch statement. 15210 15211 15212File: gccint.info, Node: `GIMPLE_TRY', Next: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_SWITCH', Up: Tuple specific accessors 15213 1521412.7.27 `GIMPLE_TRY' 15215-------------------- 15216 15217 -- GIMPLE function: gimple gimple_build_try (gimple_seq eval, 15218 gimple_seq cleanup, unsigned int kind) 15219 Build a `GIMPLE_TRY' statement. `EVAL' is a sequence with the 15220 expression to evaluate. `CLEANUP' is a sequence of statements to 15221 run at clean-up time. `KIND' is the enumeration value 15222 `GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 15223 or `GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 15224 construct. 15225 15226 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 15227 Return the kind of try block represented by `GIMPLE_TRY' `G'. This 15228 is either `GIMPLE_TRY_CATCH' or `GIMPLE_TRY_FINALLY'. 15229 15230 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 15231 Return the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15232 15233 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 15234 Return the sequence of statements used as the body for `GIMPLE_TRY' 15235 `G'. 15236 15237 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 15238 Return the sequence of statements used as the cleanup body for 15239 `GIMPLE_TRY' `G'. 15240 15241 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 15242 bool catch_is_cleanup) 15243 Set the `GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 15244 15245 -- GIMPLE function: void gimple_try_set_eval (gimple g, gimple_seq 15246 eval) 15247 Set `EVAL' to be the sequence of statements to use as the body for 15248 `GIMPLE_TRY' `G'. 15249 15250 -- GIMPLE function: void gimple_try_set_cleanup (gimple g, gimple_seq 15251 cleanup) 15252 Set `CLEANUP' to be the sequence of statements to use as the 15253 cleanup body for `GIMPLE_TRY' `G'. 15254 15255 15256File: gccint.info, Node: `GIMPLE_WITH_CLEANUP_EXPR', Prev: `GIMPLE_TRY', Up: Tuple specific accessors 15257 1525812.7.28 `GIMPLE_WITH_CLEANUP_EXPR' 15259---------------------------------- 15260 15261 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 15262 Build a `GIMPLE_WITH_CLEANUP_EXPR' statement. `CLEANUP' is the 15263 clean-up expression. 15264 15265 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 15266 Return the cleanup sequence for cleanup statement `G'. 15267 15268 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 15269 cleanup) 15270 Set `CLEANUP' to be the cleanup sequence for `G'. 15271 15272 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 15273 Return the `CLEANUP_EH_ONLY' flag for a `WCE' tuple. 15274 15275 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, 15276 bool eh_only_p) 15277 Set the `CLEANUP_EH_ONLY' flag for a `WCE' tuple. 15278 15279 15280File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 15281 1528212.8 GIMPLE sequences 15283===================== 15284 15285GIMPLE sequences are the tuple equivalent of `STATEMENT_LIST''s used in 15286`GENERIC'. They are used to chain statements together, and when used 15287in conjunction with sequence iterators, provide a framework for 15288iterating through statements. 15289 15290 GIMPLE sequences are of type struct `gimple_sequence', but are more 15291commonly passed by reference to functions dealing with sequences. The 15292type for a sequence pointer is `gimple_seq' which is the same as struct 15293`gimple_sequence' *. When declaring a local sequence, you can define a 15294local variable of type struct `gimple_sequence'. When declaring a 15295sequence allocated on the garbage collected heap, use the function 15296`gimple_seq_alloc' documented below. 15297 15298 There are convenience functions for iterating through sequences in the 15299section entitled Sequence Iterators. 15300 15301 Below is a list of functions to manipulate and query sequences. 15302 15303 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 15304 g) 15305 Link a gimple statement to the end of the sequence *`SEQ' if `G' is 15306 not `NULL'. If *`SEQ' is `NULL', allocate a sequence before 15307 linking. 15308 15309 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 15310 gimple_seq src) 15311 Append sequence `SRC' to the end of sequence *`DEST' if `SRC' is 15312 not `NULL'. If *`DEST' is `NULL', allocate a new sequence before 15313 appending. 15314 15315 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 15316 Perform a deep copy of sequence `SRC' and return the result. 15317 15318 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 15319 Reverse the order of the statements in the sequence `SEQ'. Return 15320 `SEQ'. 15321 15322 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 15323 Return the first statement in sequence `S'. 15324 15325 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 15326 Return the last statement in sequence `S'. 15327 15328 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 15329 last) 15330 Set the last statement in sequence `S' to the statement in `LAST'. 15331 15332 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 15333 first) 15334 Set the first statement in sequence `S' to the statement in 15335 `FIRST'. 15336 15337 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 15338 Initialize sequence `S' to an empty sequence. 15339 15340 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 15341 Allocate a new sequence in the garbage collected store and return 15342 it. 15343 15344 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 15345 src) 15346 Copy the sequence `SRC' into the sequence `DEST'. 15347 15348 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 15349 Return true if the sequence `S' is empty. 15350 15351 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 15352 Returns the sequence of statements in `BB'. 15353 15354 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 15355 Sets the sequence of statements in `BB' to `SEQ'. 15356 15357 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 15358 Determine whether `SEQ' contains exactly one statement. 15359 15360 15361File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 15362 1536312.9 Sequence iterators 15364======================= 15365 15366Sequence iterators are convenience constructs for iterating through 15367statements in a sequence. Given a sequence `SEQ', here is a typical 15368use of gimple sequence iterators: 15369 15370 gimple_stmt_iterator gsi; 15371 15372 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 15373 { 15374 gimple g = gsi_stmt (gsi); 15375 /* Do something with gimple statement `G'. */ 15376 } 15377 15378 Backward iterations are possible: 15379 15380 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 15381 15382 Forward and backward iterations on basic blocks are possible with 15383`gsi_start_bb' and `gsi_last_bb'. 15384 15385 In the documentation below we sometimes refer to enum 15386`gsi_iterator_update'. The valid options for this enumeration are: 15387 15388 * `GSI_NEW_STMT' Only valid when a single statement is added. Move 15389 the iterator to it. 15390 15391 * `GSI_SAME_STMT' Leave the iterator at the same statement. 15392 15393 * `GSI_CONTINUE_LINKING' Move iterator to whatever position is 15394 suitable for linking other statements in the same direction. 15395 15396 Below is a list of the functions used to manipulate and use statement 15397iterators. 15398 15399 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 15400 Return a new iterator pointing to the sequence `SEQ''s first 15401 statement. If `SEQ' is empty, the iterator's basic block is 15402 `NULL'. Use `gsi_start_bb' instead when the iterator needs to 15403 always have the correct basic block set. 15404 15405 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 15406 Return a new iterator pointing to the first statement in basic 15407 block `BB'. 15408 15409 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 15410 Return a new iterator initially pointing to the last statement of 15411 sequence `SEQ'. If `SEQ' is empty, the iterator's basic block is 15412 `NULL'. Use `gsi_last_bb' instead when the iterator needs to 15413 always have the correct basic block set. 15414 15415 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 15416 Return a new iterator pointing to the last statement in basic 15417 block `BB'. 15418 15419 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 15420 Return `TRUE' if at the end of `I'. 15421 15422 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 15423 Return `TRUE' if we're one statement before the end of `I'. 15424 15425 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 15426 Advance the iterator to the next gimple statement. 15427 15428 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 15429 Advance the iterator to the previous gimple statement. 15430 15431 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 15432 Return the current stmt. 15433 15434 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 15435 bb) 15436 Return a block statement iterator that points to the first 15437 non-label statement in block `BB'. 15438 15439 -- GIMPLE function: gimple *gsi_stmt_ptr (gimple_stmt_iterator *i) 15440 Return a pointer to the current stmt. 15441 15442 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 15443 Return the basic block associated with this iterator. 15444 15445 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 15446 Return the sequence associated with this iterator. 15447 15448 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 15449 remove_eh_info) 15450 Remove the current stmt from the sequence. The iterator is 15451 updated to point to the next statement. When `REMOVE_EH_INFO' is 15452 true we remove the statement pointed to by iterator `I' from the 15453 `EH' tables. Otherwise we do not modify the `EH' tables. 15454 Generally, `REMOVE_EH_INFO' should be true when the statement is 15455 going to be removed from the `IL' and not reinserted elsewhere. 15456 15457 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 15458 gimple_seq seq, enum gsi_iterator_update mode) 15459 Links the sequence of statements `SEQ' before the statement pointed 15460 by iterator `I'. `MODE' indicates what to do with the iterator 15461 after insertion (see `enum gsi_iterator_update' above). 15462 15463 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 15464 gimple g, enum gsi_iterator_update mode) 15465 Links statement `G' before the statement pointed-to by iterator 15466 `I'. Updates iterator `I' according to `MODE'. 15467 15468 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 15469 gimple_seq seq, enum gsi_iterator_update mode) 15470 Links sequence `SEQ' after the statement pointed-to by iterator 15471 `I'. `MODE' is as in `gsi_insert_after'. 15472 15473 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 15474 gimple g, enum gsi_iterator_update mode) 15475 Links statement `G' after the statement pointed-to by iterator `I'. 15476 `MODE' is as in `gsi_insert_after'. 15477 15478 -- GIMPLE function: gimple_seq gsi_split_seq_after 15479 (gimple_stmt_iterator i) 15480 Move all statements in the sequence after `I' to a new sequence. 15481 Return this new sequence. 15482 15483 -- GIMPLE function: gimple_seq gsi_split_seq_before 15484 (gimple_stmt_iterator *i) 15485 Move all statements in the sequence before `I' to a new sequence. 15486 Return this new sequence. 15487 15488 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 15489 stmt, bool update_eh_info) 15490 Replace the statement pointed-to by `I' to `STMT'. If 15491 `UPDATE_EH_INFO' is true, the exception handling information of 15492 the original statement is moved to the new statement. 15493 15494 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 15495 gimple stmt, enum gsi_iterator_update mode) 15496 Insert statement `STMT' before the statement pointed-to by iterator 15497 `I', update `STMT''s basic block and scan it for new operands. 15498 `MODE' specifies how to update iterator `I' after insertion (see 15499 enum `gsi_iterator_update'). 15500 15501 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 15502 *i, gimple_seq seq, enum gsi_iterator_update mode) 15503 Like `gsi_insert_before', but for all the statements in `SEQ'. 15504 15505 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 15506 gimple stmt, enum gsi_iterator_update mode) 15507 Insert statement `STMT' after the statement pointed-to by iterator 15508 `I', update `STMT''s basic block and scan it for new operands. 15509 `MODE' specifies how to update iterator `I' after insertion (see 15510 enum `gsi_iterator_update'). 15511 15512 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator 15513 *i, gimple_seq seq, enum gsi_iterator_update mode) 15514 Like `gsi_insert_after', but for all the statements in `SEQ'. 15515 15516 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 15517 Finds iterator for `STMT'. 15518 15519 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 15520 gimple_stmt_iterator *to) 15521 Move the statement at `FROM' so it comes right after the statement 15522 at `TO'. 15523 15524 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 15525 gimple_stmt_iterator *to) 15526 Move the statement at `FROM' so it comes right before the statement 15527 at `TO'. 15528 15529 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 15530 *from, basic_block bb) 15531 Move the statement at `FROM' to the end of basic block `BB'. 15532 15533 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 15534 Add `STMT' to the pending list of edge `E'. No actual insertion is 15535 made until a call to `gsi_commit_edge_inserts'() is made. 15536 15537 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 15538 seq) 15539 Add the sequence of statements in `SEQ' to the pending list of edge 15540 `E'. No actual insertion is made until a call to 15541 `gsi_commit_edge_inserts'() is made. 15542 15543 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 15544 gimple stmt) 15545 Similar to `gsi_insert_on_edge'+`gsi_commit_edge_inserts'. If a 15546 new block has to be created, it is returned. 15547 15548 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 15549 basic_block *new_bb) 15550 Commit insertions pending at edge `E'. If a new block is created, 15551 set `NEW_BB' to this block, otherwise set it to `NULL'. 15552 15553 -- GIMPLE function: void gsi_commit_edge_inserts (void) 15554 This routine will commit all pending edge insertions, creating any 15555 new basic blocks which are necessary. 15556 15557 15558File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 15559 1556012.10 Adding a new GIMPLE statement code 15561======================================== 15562 15563The first step in adding a new GIMPLE statement code, is modifying the 15564file `gimple.def', which contains all the GIMPLE codes. Then you must 15565add a corresponding structure, and an entry in `union 15566gimple_statement_d', both of which are located in `gimple.h'. This in 15567turn, will require you to add a corresponding `GTY' tag in 15568`gsstruct.def', and code to handle this tag in `gss_for_code' which is 15569located in `gimple.c'. 15570 15571 In order for the garbage collector to know the size of the structure 15572you created in `gimple.h', you need to add a case to handle your new 15573GIMPLE statement in `gimple_size' which is located in `gimple.c'. 15574 15575 You will probably want to create a function to build the new gimple 15576statement in `gimple.c'. The function should be called 15577`gimple_build_<`NEW_TUPLE_NAME'>', and should return the new tuple of 15578type gimple. 15579 15580 If your new statement requires accessors for any members or operands 15581it may have, put simple inline accessors in `gimple.h' and any 15582non-trivial accessors in `gimple.c' with a corresponding prototype in 15583`gimple.h'. 15584 15585 15586File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 15587 1558812.11 Statement and operand traversals 15589====================================== 15590 15591There are two functions available for walking statements and sequences: 15592`walk_gimple_stmt' and `walk_gimple_seq', accordingly, and a third 15593function for walking the operands in a statement: `walk_gimple_op'. 15594 15595 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 15596 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 15597 walk_stmt_info *wi) 15598 This function is used to walk the current statement in `GSI', 15599 optionally using traversal state stored in `WI'. If `WI' is 15600 `NULL', no state is kept during the traversal. 15601 15602 The callback `CALLBACK_STMT' is called. If `CALLBACK_STMT' returns 15603 true, it means that the callback function has handled all the 15604 operands of the statement and it is not necessary to walk its 15605 operands. 15606 15607 If `CALLBACK_STMT' is `NULL' or it returns false, `CALLBACK_OP' is 15608 called on each operand of the statement via `walk_gimple_op'. If 15609 `walk_gimple_op' returns non-`NULL' for any operand, the remaining 15610 operands are not scanned. 15611 15612 The return value is that returned by the last call to 15613 `walk_gimple_op', or `NULL_TREE' if no `CALLBACK_OP' is specified. 15614 15615 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 15616 callback_op, struct walk_stmt_info *wi) 15617 Use this function to walk the operands of statement `STMT'. Every 15618 operand is walked via `walk_tree' with optional state information 15619 in `WI'. 15620 15621 `CALLBACK_OP' is called on each operand of `STMT' via `walk_tree'. 15622 Additional parameters to `walk_tree' must be stored in `WI'. For 15623 each operand `OP', `walk_tree' is called as: 15624 15625 walk_tree (&`OP', `CALLBACK_OP', `WI', `WI'- `PSET') 15626 15627 If `CALLBACK_OP' returns non-`NULL' for an operand, the remaining 15628 operands are not scanned. The return value is that returned by 15629 the last call to `walk_tree', or `NULL_TREE' if no `CALLBACK_OP' is 15630 specified. 15631 15632 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 15633 callback_stmt, walk_tree_fn callback_op, struct 15634 walk_stmt_info *wi) 15635 This function walks all the statements in the sequence `SEQ' 15636 calling `walk_gimple_stmt' on each one. `WI' is as in 15637 `walk_gimple_stmt'. If `walk_gimple_stmt' returns non-`NULL', the 15638 walk is stopped and the value returned. Otherwise, all the 15639 statements are walked and `NULL_TREE' returned. 15640 15641 15642File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top 15643 1564413 Analysis and Optimization of GIMPLE tuples 15645********************************************* 15646 15647GCC uses three main intermediate languages to represent the program 15648during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 15649language-independent representation generated by each front end. It is 15650used to serve as an interface between the parser and optimizer. 15651GENERIC is a common representation that is able to represent programs 15652written in all the languages supported by GCC. 15653 15654 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 15655target and language independent optimizations (e.g., inlining, constant 15656propagation, tail call elimination, redundancy elimination, etc). Much 15657like GENERIC, GIMPLE is a language independent, tree based 15658representation. However, it differs from GENERIC in that the GIMPLE 15659grammar is more restrictive: expressions contain no more than 3 15660operands (except function calls), it has no control flow structures and 15661expressions with side-effects are only allowed on the right hand side 15662of assignments. See the chapter describing GENERIC and GIMPLE for more 15663details. 15664 15665 This chapter describes the data structures and functions used in the 15666GIMPLE optimizers (also known as "tree optimizers" or "middle end"). 15667In particular, it focuses on all the macros, data structures, functions 15668and programming constructs needed to implement optimization passes for 15669GIMPLE. 15670 15671* Menu: 15672 15673* Annotations:: Attributes for variables. 15674* SSA Operands:: SSA names referenced by GIMPLE statements. 15675* SSA:: Static Single Assignment representation. 15676* Alias analysis:: Representing aliased loads and stores. 15677* Memory model:: Memory model used by the middle-end. 15678 15679 15680File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 15681 1568213.1 Annotations 15683================ 15684 15685The optimizers need to associate attributes with variables during the 15686optimization process. For instance, we need to know whether a variable 15687has aliases. All these attributes are stored in data structures called 15688annotations which are then linked to the field `ann' in `struct 15689tree_common'. 15690 15691 Presently, we define annotations for variables (`var_ann_t'). 15692Annotations are defined and documented in `tree-flow.h'. 15693 15694 15695File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 15696 1569713.2 SSA Operands 15698================= 15699 15700Almost every GIMPLE statement will contain a reference to a variable or 15701memory location. Since statements come in different shapes and sizes, 15702their operands are going to be located at various spots inside the 15703statement's tree. To facilitate access to the statement's operands, 15704they are organized into lists associated inside each statement's 15705annotation. Each element in an operand list is a pointer to a 15706`VAR_DECL', `PARM_DECL' or `SSA_NAME' tree node. This provides a very 15707convenient way of examining and replacing operands. 15708 15709 Data flow analysis and optimization is done on all tree nodes 15710representing variables. Any node for which `SSA_VAR_P' returns nonzero 15711is considered when scanning statement operands. However, not all 15712`SSA_VAR_P' variables are processed in the same way. For the purposes 15713of optimization, we need to distinguish between references to local 15714scalar variables and references to globals, statics, structures, 15715arrays, aliased variables, etc. The reason is simple, the compiler can 15716gather complete data flow information for a local scalar. On the other 15717hand, a global variable may be modified by a function call, it may not 15718be possible to keep track of all the elements of an array or the fields 15719of a structure, etc. 15720 15721 The operand scanner gathers two kinds of operands: "real" and 15722"virtual". An operand for which `is_gimple_reg' returns true is 15723considered real, otherwise it is a virtual operand. We also 15724distinguish between uses and definitions. An operand is used if its 15725value is loaded by the statement (e.g., the operand at the RHS of an 15726assignment). If the statement assigns a new value to the operand, the 15727operand is considered a definition (e.g., the operand at the LHS of an 15728assignment). 15729 15730 Virtual and real operands also have very different data flow 15731properties. Real operands are unambiguous references to the full 15732object that they represent. For instance, given 15733 15734 { 15735 int a, b; 15736 a = b 15737 } 15738 15739 Since `a' and `b' are non-aliased locals, the statement `a = b' will 15740have one real definition and one real use because variable `a' is 15741completely modified with the contents of variable `b'. Real definition 15742are also known as "killing definitions". Similarly, the use of `b' 15743reads all its bits. 15744 15745 In contrast, virtual operands are used with variables that can have a 15746partial or ambiguous reference. This includes structures, arrays, 15747globals, and aliased variables. In these cases, we have two types of 15748definitions. For globals, structures, and arrays, we can determine from 15749a statement whether a variable of these types has a killing definition. 15750If the variable does, then the statement is marked as having a "must 15751definition" of that variable. However, if a statement is only defining 15752a part of the variable (i.e. a field in a structure), or if we know 15753that a statement might define the variable but we cannot say for sure, 15754then we mark that statement as having a "may definition". For 15755instance, given 15756 15757 { 15758 int a, b, *p; 15759 15760 if (...) 15761 p = &a; 15762 else 15763 p = &b; 15764 *p = 5; 15765 return *p; 15766 } 15767 15768 The assignment `*p = 5' may be a definition of `a' or `b'. If we 15769cannot determine statically where `p' is pointing to at the time of the 15770store operation, we create virtual definitions to mark that statement 15771as a potential definition site for `a' and `b'. Memory loads are 15772similarly marked with virtual use operands. Virtual operands are shown 15773in tree dumps right before the statement that contains them. To 15774request a tree dump with virtual operands, use the `-vops' option to 15775`-fdump-tree': 15776 15777 { 15778 int a, b, *p; 15779 15780 if (...) 15781 p = &a; 15782 else 15783 p = &b; 15784 # a = VDEF <a> 15785 # b = VDEF <b> 15786 *p = 5; 15787 15788 # VUSE <a> 15789 # VUSE <b> 15790 return *p; 15791 } 15792 15793 Notice that `VDEF' operands have two copies of the referenced 15794variable. This indicates that this is not a killing definition of that 15795variable. In this case we refer to it as a "may definition" or 15796"aliased store". The presence of the second copy of the variable in 15797the `VDEF' operand will become important when the function is converted 15798into SSA form. This will be used to link all the non-killing 15799definitions to prevent optimizations from making incorrect assumptions 15800about them. 15801 15802 Operands are updated as soon as the statement is finished via a call 15803to `update_stmt'. If statement elements are changed via `SET_USE' or 15804`SET_DEF', then no further action is required (i.e., those macros take 15805care of updating the statement). If changes are made by manipulating 15806the statement's tree directly, then a call must be made to 15807`update_stmt' when complete. Calling one of the `bsi_insert' routines 15808or `bsi_replace' performs an implicit call to `update_stmt'. 15809 1581013.2.1 Operand Iterators And Access Routines 15811-------------------------------------------- 15812 15813Operands are collected by `tree-ssa-operands.c'. They are stored 15814inside each statement's annotation and can be accessed through either 15815the operand iterators or an access routine. 15816 15817 The following access routines are available for examining operands: 15818 15819 1. `SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 15820 NULL unless there is exactly one operand matching the specified 15821 flags. If there is exactly one operand, the operand is returned 15822 as either a `tree', `def_operand_p', or `use_operand_p'. 15823 15824 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 15825 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 15826 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 15827 15828 2. `ZERO_SSA_OPERANDS': This macro returns true if there are no 15829 operands matching the specified flags. 15830 15831 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 15832 return; 15833 15834 3. `NUM_SSA_OPERANDS': This macro Returns the number of operands 15835 matching 'flags'. This actually executes a loop to perform the 15836 count, so only use this if it is really needed. 15837 15838 int count = NUM_SSA_OPERANDS (stmt, flags) 15839 15840 If you wish to iterate over some or all operands, use the 15841`FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 15842all the operands for a statement: 15843 15844 void 15845 print_ops (tree stmt) 15846 { 15847 ssa_op_iter; 15848 tree var; 15849 15850 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 15851 print_generic_expr (stderr, var, TDF_SLIM); 15852 } 15853 15854 How to choose the appropriate iterator: 15855 15856 1. Determine whether you are need to see the operand pointers, or 15857 just the trees, and choose the appropriate macro: 15858 15859 Need Macro: 15860 ---- ------- 15861 use_operand_p FOR_EACH_SSA_USE_OPERAND 15862 def_operand_p FOR_EACH_SSA_DEF_OPERAND 15863 tree FOR_EACH_SSA_TREE_OPERAND 15864 15865 2. You need to declare a variable of the type you are interested in, 15866 and an ssa_op_iter structure which serves as the loop controlling 15867 variable. 15868 15869 3. Determine which operands you wish to use, and specify the flags of 15870 those you are interested in. They are documented in 15871 `tree-ssa-operands.h': 15872 15873 #define SSA_OP_USE 0x01 /* Real USE operands. */ 15874 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 15875 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 15876 #define SSA_OP_VMAYUSE 0x08 /* USE portion of VDEFS. */ 15877 #define SSA_OP_VDEF 0x10 /* DEF portion of VDEFS. */ 15878 15879 /* These are commonly grouped operand flags. */ 15880 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) 15881 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 15882 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 15883 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 15884 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 15885 15886 So if you want to look at the use pointers for all the `USE' and 15887`VUSE' operands, you would do something like: 15888 15889 use_operand_p use_p; 15890 ssa_op_iter iter; 15891 15892 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 15893 { 15894 process_use_ptr (use_p); 15895 } 15896 15897 The `TREE' macro is basically the same as the `USE' and `DEF' macros, 15898only with the use or def dereferenced via `USE_FROM_PTR (use_p)' and 15899`DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use 15900and defs flags can be mixed. 15901 15902 tree var; 15903 ssa_op_iter iter; 15904 15905 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 15906 { 15907 print_generic_expr (stderr, var, TDF_SLIM); 15908 } 15909 15910 `VDEF's are broken into two flags, one for the `DEF' portion 15911(`SSA_OP_VDEF') and one for the USE portion (`SSA_OP_VMAYUSE'). If all 15912you want to look at are the `VDEF's together, there is a fourth 15913iterator macro for this, which returns both a def_operand_p and a 15914use_operand_p for each `VDEF' in the statement. Note that you don't 15915need any flags for this one. 15916 15917 use_operand_p use_p; 15918 def_operand_p def_p; 15919 ssa_op_iter iter; 15920 15921 FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) 15922 { 15923 my_code; 15924 } 15925 15926 There are many examples in the code as well, as well as the 15927documentation in `tree-ssa-operands.h'. 15928 15929 There are also a couple of variants on the stmt iterators regarding PHI 15930nodes. 15931 15932 `FOR_EACH_PHI_ARG' Works exactly like `FOR_EACH_SSA_USE_OPERAND', 15933except it works over `PHI' arguments instead of statement operands. 15934 15935 /* Look at every virtual PHI use. */ 15936 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 15937 { 15938 my_code; 15939 } 15940 15941 /* Look at every real PHI use. */ 15942 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 15943 my_code; 15944 15945 /* Look at every PHI use. */ 15946 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 15947 my_code; 15948 15949 `FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 15950`FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 15951statement or a `PHI' node. These should be used when it is appropriate 15952but they are not quite as efficient as the individual `FOR_EACH_PHI' 15953and `FOR_EACH_SSA' routines. 15954 15955 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 15956 { 15957 my_code; 15958 } 15959 15960 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 15961 { 15962 my_code; 15963 } 15964 1596513.2.2 Immediate Uses 15966--------------------- 15967 15968Immediate use information is now always available. Using the immediate 15969use iterators, you may examine every use of any `SSA_NAME'. For 15970instance, to change each use of `ssa_var' to `ssa_var2' and call 15971fold_stmt on each stmt after that is done: 15972 15973 use_operand_p imm_use_p; 15974 imm_use_iterator iterator; 15975 tree ssa_var, stmt; 15976 15977 15978 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 15979 { 15980 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 15981 SET_USE (imm_use_p, ssa_var_2); 15982 fold_stmt (stmt); 15983 } 15984 15985 There are 2 iterators which can be used. `FOR_EACH_IMM_USE_FAST' is 15986used when the immediate uses are not changed, i.e., you are looking at 15987the uses, but not setting them. 15988 15989 If they do get changed, then care must be taken that things are not 15990changed under the iterators, so use the `FOR_EACH_IMM_USE_STMT' and 15991`FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 15992sanity of the use list by moving all the uses for a statement into a 15993controlled position, and then iterating over those uses. Then the 15994optimization can manipulate the stmt when all the uses have been 15995processed. This is a little slower than the FAST version since it adds 15996a placeholder element and must sort through the list a bit for each 15997statement. This placeholder element must be also be removed if the 15998loop is terminated early. The macro `BREAK_FROM_IMM_USE_SAFE' is 15999provided to do this : 16000 16001 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 16002 { 16003 if (stmt == last_stmt) 16004 BREAK_FROM_SAFE_IMM_USE (iter); 16005 16006 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 16007 SET_USE (imm_use_p, ssa_var_2); 16008 fold_stmt (stmt); 16009 } 16010 16011 There are checks in `verify_ssa' which verify that the immediate use 16012list is up to date, as well as checking that an optimization didn't 16013break from the loop without using this macro. It is safe to simply 16014'break'; from a `FOR_EACH_IMM_USE_FAST' traverse. 16015 16016 Some useful functions and macros: 16017 1. `has_zero_uses (ssa_var)' : Returns true if there are no uses of 16018 `ssa_var'. 16019 16020 2. `has_single_use (ssa_var)' : Returns true if there is only a 16021 single use of `ssa_var'. 16022 16023 3. `single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 16024 Returns true if there is only a single use of `ssa_var', and also 16025 returns the use pointer and statement it occurs in, in the second 16026 and third parameters. 16027 16028 4. `num_imm_uses (ssa_var)' : Returns the number of immediate uses of 16029 `ssa_var'. It is better not to use this if possible since it simply 16030 utilizes a loop to count the uses. 16031 16032 5. `PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a `PHI' 16033 node, return the index number for the use. An assert is triggered 16034 if the use isn't located in a `PHI' node. 16035 16036 6. `USE_STMT (use_p)' : Return the statement a use occurs in. 16037 16038 Note that uses are not put into an immediate use list until their 16039statement is actually inserted into the instruction stream via a 16040`bsi_*' routine. 16041 16042 It is also still possible to utilize lazy updating of statements, but 16043this should be used only when absolutely required. Both alias analysis 16044and the dominator optimizations currently do this. 16045 16046 When lazy updating is being used, the immediate use information is out 16047of date and cannot be used reliably. Lazy updating is achieved by 16048simply marking statements modified via calls to `mark_stmt_modified' 16049instead of `update_stmt'. When lazy updating is no longer required, 16050all the modified statements must have `update_stmt' called in order to 16051bring them up to date. This must be done before the optimization is 16052finished, or `verify_ssa' will trigger an abort. 16053 16054 This is done with a simple loop over the instruction stream: 16055 block_stmt_iterator bsi; 16056 basic_block bb; 16057 FOR_EACH_BB (bb) 16058 { 16059 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 16060 update_stmt_if_modified (bsi_stmt (bsi)); 16061 } 16062 16063 16064File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 16065 1606613.3 Static Single Assignment 16067============================= 16068 16069Most of the tree optimizers rely on the data flow information provided 16070by the Static Single Assignment (SSA) form. We implement the SSA form 16071as described in `R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 16072Zadeck. Efficiently Computing Static Single Assignment Form and the 16073Control Dependence Graph. ACM Transactions on Programming Languages 16074and Systems, 13(4):451-490, October 1991'. 16075 16076 The SSA form is based on the premise that program variables are 16077assigned in exactly one location in the program. Multiple assignments 16078to the same variable create new versions of that variable. Naturally, 16079actual programs are seldom in SSA form initially because variables tend 16080to be assigned multiple times. The compiler modifies the program 16081representation so that every time a variable is assigned in the code, a 16082new version of the variable is created. Different versions of the same 16083variable are distinguished by subscripting the variable name with its 16084version number. Variables used in the right-hand side of expressions 16085are renamed so that their version number matches that of the most 16086recent assignment. 16087 16088 We represent variable versions using `SSA_NAME' nodes. The renaming 16089process in `tree-ssa.c' wraps every real and virtual operand with an 16090`SSA_NAME' node which contains the version number and the statement 16091that created the `SSA_NAME'. Only definitions and virtual definitions 16092may create new `SSA_NAME' nodes. 16093 16094 Sometimes, flow of control makes it impossible to determine the most 16095recent version of a variable. In these cases, the compiler inserts an 16096artificial definition for that variable called "PHI function" or "PHI 16097node". This new definition merges all the incoming versions of the 16098variable to create a new name for it. For instance, 16099 16100 if (...) 16101 a_1 = 5; 16102 else if (...) 16103 a_2 = 2; 16104 else 16105 a_3 = 13; 16106 16107 # a_4 = PHI <a_1, a_2, a_3> 16108 return a_4; 16109 16110 Since it is not possible to determine which of the three branches will 16111be taken at runtime, we don't know which of `a_1', `a_2' or `a_3' to 16112use at the return statement. So, the SSA renamer creates a new version 16113`a_4' which is assigned the result of "merging" `a_1', `a_2' and `a_3'. 16114Hence, PHI nodes mean "one of these operands. I don't know which". 16115 16116 The following macros can be used to examine PHI nodes 16117 16118 -- Macro: PHI_RESULT (PHI) 16119 Returns the `SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 16120 16121 -- Macro: PHI_NUM_ARGS (PHI) 16122 Returns the number of arguments in PHI. This number is exactly 16123 the number of incoming edges to the basic block holding PHI. 16124 16125 -- Macro: PHI_ARG_ELT (PHI, I) 16126 Returns a tuple representing the Ith argument of PHI. Each 16127 element of this tuple contains an `SSA_NAME' VAR and the incoming 16128 edge through which VAR flows. 16129 16130 -- Macro: PHI_ARG_EDGE (PHI, I) 16131 Returns the incoming edge for the Ith argument of PHI. 16132 16133 -- Macro: PHI_ARG_DEF (PHI, I) 16134 Returns the `SSA_NAME' for the Ith argument of PHI. 16135 1613613.3.1 Preserving the SSA form 16137------------------------------ 16138 16139Some optimization passes make changes to the function that invalidate 16140the SSA property. This can happen when a pass has added new symbols or 16141changed the program so that variables that were previously aliased 16142aren't anymore. Whenever something like this happens, the affected 16143symbols must be renamed into SSA form again. Transformations that emit 16144new code or replicate existing statements will also need to update the 16145SSA form. 16146 16147 Since GCC implements two different SSA forms for register and virtual 16148variables, keeping the SSA form up to date depends on whether you are 16149updating register or virtual names. In both cases, the general idea 16150behind incremental SSA updates is similar: when new SSA names are 16151created, they typically are meant to replace other existing names in 16152the program. 16153 16154 For instance, given the following code: 16155 16156 1 L0: 16157 2 x_1 = PHI (0, x_5) 16158 3 if (x_1 < 10) 16159 4 if (x_1 > 7) 16160 5 y_2 = 0 16161 6 else 16162 7 y_3 = x_1 + x_7 16163 8 endif 16164 9 x_5 = x_1 + 1 16165 10 goto L0; 16166 11 endif 16167 16168 Suppose that we insert new names `x_10' and `x_11' (lines `4' and `8'). 16169 16170 1 L0: 16171 2 x_1 = PHI (0, x_5) 16172 3 if (x_1 < 10) 16173 4 x_10 = ... 16174 5 if (x_1 > 7) 16175 6 y_2 = 0 16176 7 else 16177 8 x_11 = ... 16178 9 y_3 = x_1 + x_7 16179 10 endif 16180 11 x_5 = x_1 + 1 16181 12 goto L0; 16182 13 endif 16183 16184 We want to replace all the uses of `x_1' with the new definitions of 16185`x_10' and `x_11'. Note that the only uses that should be replaced are 16186those at lines `5', `9' and `11'. Also, the use of `x_7' at line `9' 16187should _not_ be replaced (this is why we cannot just mark symbol `x' for 16188renaming). 16189 16190 Additionally, we may need to insert a PHI node at line `11' because 16191that is a merge point for `x_10' and `x_11'. So the use of `x_1' at 16192line `11' will be replaced with the new PHI node. The insertion of PHI 16193nodes is optional. They are not strictly necessary to preserve the SSA 16194form, and depending on what the caller inserted, they may not even be 16195useful for the optimizers. 16196 16197 Updating the SSA form is a two step process. First, the pass has to 16198identify which names need to be updated and/or which symbols need to be 16199renamed into SSA form for the first time. When new names are 16200introduced to replace existing names in the program, the mapping 16201between the old and the new names are registered by calling 16202`register_new_name_mapping' (note that if your pass creates new code by 16203duplicating basic blocks, the call to `tree_duplicate_bb' will set up 16204the necessary mappings automatically). On the other hand, if your pass 16205exposes a new symbol that should be put in SSA form for the first time, 16206the new symbol should be registered with `mark_sym_for_renaming'. 16207 16208 After the replacement mappings have been registered and new symbols 16209marked for renaming, a call to `update_ssa' makes the registered 16210changes. This can be done with an explicit call or by creating `TODO' 16211flags in the `tree_opt_pass' structure for your pass. There are 16212several `TODO' flags that control the behavior of `update_ssa': 16213 16214 * `TODO_update_ssa'. Update the SSA form inserting PHI nodes for 16215 newly exposed symbols and virtual names marked for updating. When 16216 updating real names, only insert PHI nodes for a real name `O_j' 16217 in blocks reached by all the new and old definitions for `O_j'. 16218 If the iterated dominance frontier for `O_j' is not pruned, we may 16219 end up inserting PHI nodes in blocks that have one or more edges 16220 with no incoming definition for `O_j'. This would lead to 16221 uninitialized warnings for `O_j''s symbol. 16222 16223 * `TODO_update_ssa_no_phi'. Update the SSA form without inserting 16224 any new PHI nodes at all. This is used by passes that have either 16225 inserted all the PHI nodes themselves or passes that need only to 16226 patch use-def and def-def chains for virtuals (e.g., DCE). 16227 16228 * `TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 16229 needed. No pruning of the IDF is done. This is used by passes 16230 that need the PHI nodes for `O_j' even if it means that some 16231 arguments will come from the default definition of `O_j''s symbol 16232 (e.g., `pass_linear_transform'). 16233 16234 WARNING: If you need to use this flag, chances are that your pass 16235 may be doing something wrong. Inserting PHI nodes for an old name 16236 where not all edges carry a new replacement may lead to silent 16237 codegen errors or spurious uninitialized warnings. 16238 16239 * `TODO_update_ssa_only_virtuals'. Passes that update the SSA form 16240 on their own may want to delegate the updating of virtual names to 16241 the generic updater. Since FUD chains are easier to maintain, 16242 this simplifies the work they need to do. NOTE: If this flag is 16243 used, any OLD->NEW mappings for real names are explicitly 16244 destroyed and only the symbols marked for renaming are processed. 16245 1624613.3.2 Preserving the virtual SSA form 16247-------------------------------------- 16248 16249The virtual SSA form is harder to preserve than the non-virtual SSA form 16250mainly because the set of virtual operands for a statement may change at 16251what some would consider unexpected times. In general, statement 16252modifications should be bracketed between calls to `push_stmt_changes' 16253and `pop_stmt_changes'. For example, 16254 16255 munge_stmt (tree stmt) 16256 { 16257 push_stmt_changes (&stmt); 16258 ... rewrite STMT ... 16259 pop_stmt_changes (&stmt); 16260 } 16261 16262 The call to `push_stmt_changes' saves the current state of the 16263statement operands and the call to `pop_stmt_changes' compares the 16264saved state with the current one and does the appropriate symbol 16265marking for the SSA renamer. 16266 16267 It is possible to modify several statements at a time, provided that 16268`push_stmt_changes' and `pop_stmt_changes' are called in LIFO order, as 16269when processing a stack of statements. 16270 16271 Additionally, if the pass discovers that it did not need to make 16272changes to the statement after calling `push_stmt_changes', it can 16273simply discard the topmost change buffer by calling 16274`discard_stmt_changes'. This will avoid the expensive operand re-scan 16275operation and the buffer comparison that determines if symbols need to 16276be marked for renaming. 16277 1627813.3.3 Examining `SSA_NAME' nodes 16279--------------------------------- 16280 16281The following macros can be used to examine `SSA_NAME' nodes 16282 16283 -- Macro: SSA_NAME_DEF_STMT (VAR) 16284 Returns the statement S that creates the `SSA_NAME' VAR. If S is 16285 an empty statement (i.e., `IS_EMPTY_STMT (S)' returns `true'), it 16286 means that the first reference to this variable is a USE or a VUSE. 16287 16288 -- Macro: SSA_NAME_VERSION (VAR) 16289 Returns the version number of the `SSA_NAME' object VAR. 16290 1629113.3.4 Walking use-def chains 16292----------------------------- 16293 16294 -- Tree SSA function: void walk_use_def_chains (VAR, FN, DATA) 16295 Walks use-def chains starting at the `SSA_NAME' node VAR. Calls 16296 function FN at each reaching definition found. Function FN takes 16297 three arguments: VAR, its defining statement (DEF_STMT) and a 16298 generic pointer to whatever state information that FN may want to 16299 maintain (DATA). Function FN is able to stop the walk by 16300 returning `true', otherwise in order to continue the walk, FN 16301 should return `false'. 16302 16303 Note, that if DEF_STMT is a `PHI' node, the semantics are slightly 16304 different. For each argument ARG of the PHI node, this function 16305 will: 16306 16307 1. Walk the use-def chains for ARG. 16308 16309 2. Call `FN (ARG, PHI, DATA)'. 16310 16311 Note how the first argument to FN is no longer the original 16312 variable VAR, but the PHI argument currently being examined. If 16313 FN wants to get at VAR, it should call `PHI_RESULT' (PHI). 16314 1631513.3.5 Walking the dominator tree 16316--------------------------------- 16317 16318 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 16319 This function walks the dominator tree for the current CFG calling 16320 a set of callback functions defined in STRUCT DOM_WALK_DATA in 16321 `domwalk.h'. The call back functions you need to define give you 16322 hooks to execute custom code at various points during traversal: 16323 16324 1. Once to initialize any local data needed while processing BB 16325 and its children. This local data is pushed into an internal 16326 stack which is automatically pushed and popped as the walker 16327 traverses the dominator tree. 16328 16329 2. Once before traversing all the statements in the BB. 16330 16331 3. Once for every statement inside BB. 16332 16333 4. Once after traversing all the statements and before recursing 16334 into BB's dominator children. 16335 16336 5. It then recurses into all the dominator children of BB. 16337 16338 6. After recursing into all the dominator children of BB it can, 16339 optionally, traverse every statement in BB again (i.e., 16340 repeating steps 2 and 3). 16341 16342 7. Once after walking the statements in BB and BB's dominator 16343 children. At this stage, the block local data stack is 16344 popped. 16345 16346 16347File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 16348 1634913.4 Alias analysis 16350=================== 16351 16352Alias analysis in GIMPLE SSA form consists of two pieces. First the 16353virtual SSA web ties conflicting memory accesses and provides a SSA 16354use-def chain and SSA immediate-use chains for walking possibly 16355dependent memory accesses. Second an alias-oracle can be queried to 16356disambiguate explicit and implicit memory references. 16357 16358 1. Memory SSA form. 16359 16360 All statements that may use memory have exactly one accompanied 16361 use of a virtual SSA name that represents the state of memory at 16362 the given point in the IL. 16363 16364 All statements that may define memory have exactly one accompanied 16365 definition of a virtual SSA name using the previous state of memory 16366 and defining the new state of memory after the given point in the 16367 IL. 16368 16369 int i; 16370 int foo (void) 16371 { 16372 # .MEM_3 = VDEF <.MEM_2(D)> 16373 i = 1; 16374 # VUSE <.MEM_3> 16375 return i; 16376 } 16377 16378 The virtual SSA names in this case are `.MEM_2(D)' and `.MEM_3'. 16379 The store to the global variable `i' defines `.MEM_3' invalidating 16380 `.MEM_2(D)'. The load from `i' uses that new state `.MEM_3'. 16381 16382 The virtual SSA web serves as constraints to SSA optimizers 16383 preventing illegitimate code-motion and optimization. It also 16384 provides a way to walk related memory statements. 16385 16386 2. Points-to and escape analysis. 16387 16388 Points-to analysis builds a set of constraints from the GIMPLE SSA 16389 IL representing all pointer operations and facts we do or do not 16390 know about pointers. Solving this set of constraints yields a 16391 conservatively correct solution for each pointer variable in the 16392 program (though we are only interested in SSA name pointers) as to 16393 what it may possibly point to. 16394 16395 This points-to solution for a given SSA name pointer is stored in 16396 the `pt_solution' sub-structure of the `SSA_NAME_PTR_INFO' record. 16397 The following accessor functions are available: 16398 16399 * `pt_solution_includes' 16400 16401 * `pt_solutions_intersect' 16402 16403 Points-to analysis also computes the solution for two special set 16404 of pointers, `ESCAPED' and `CALLUSED'. Those represent all memory 16405 that has escaped the scope of analysis or that is used by pure or 16406 nested const calls. 16407 16408 3. Type-based alias analysis 16409 16410 Type-based alias analysis is frontend dependent though generic 16411 support is provided by the middle-end in `alias.c'. TBAA code is 16412 used by both tree optimizers and RTL optimizers. 16413 16414 Every language that wishes to perform language-specific alias 16415 analysis should define a function that computes, given a `tree' 16416 node, an alias set for the node. Nodes in different alias sets 16417 are not allowed to alias. For an example, see the C front-end 16418 function `c_get_alias_set'. 16419 16420 4. Tree alias-oracle 16421 16422 The tree alias-oracle provides means to disambiguate two memory 16423 references and memory references against statements. The following 16424 queries are available: 16425 16426 * `refs_may_alias_p' 16427 16428 * `ref_maybe_used_by_stmt_p' 16429 16430 * `stmt_may_clobber_ref_p' 16431 16432 In addition to those two kind of statement walkers are available 16433 walking statements related to a reference ref. 16434 `walk_non_aliased_vuses' walks over dominating memory defining 16435 statements and calls back if the statement does not clobber ref 16436 providing the non-aliased VUSE. The walk stops at the first 16437 clobbering statement or if asked to. `walk_aliased_vdefs' walks 16438 over dominating memory defining statements and calls back on each 16439 statement clobbering ref providing its aliasing VDEF. The walk 16440 stops if asked to. 16441 16442 16443 16444File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 16445 1644613.5 Memory model 16447================= 16448 16449The memory model used by the middle-end models that of the C/C++ 16450languages. The middle-end has the notion of an effective type of a 16451memory region which is used for type-based alias analysis. 16452 16453 The following is a refinement of ISO C99 6.5/6, clarifying the block 16454copy case to follow common sense and extending the concept of a dynamic 16455effective type to objects with a declared type as required for C++. 16456 16457 The effective type of an object for an access to its stored value is 16458 the declared type of the object or the effective type determined by 16459 a previous store to it. If a value is stored into an object through 16460 an lvalue having a type that is not a character type, then the 16461 type of the lvalue becomes the effective type of the object for that 16462 access and for subsequent accesses that do not modify the stored value. 16463 If a value is copied into an object using `memcpy' or `memmove', 16464 or is copied as an array of character type, then the effective type 16465 of the modified object for that access and for subsequent accesses that 16466 do not modify the value is undetermined. For all other accesses to an 16467 object, the effective type of the object is simply the type of the 16468 lvalue used for the access. 16469 16470 16471File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top 16472 1647314 Analysis and Representation of Loops 16474*************************************** 16475 16476GCC provides extensive infrastructure for work with natural loops, i.e., 16477strongly connected components of CFG with only one entry block. This 16478chapter describes representation of loops in GCC, both on GIMPLE and in 16479RTL, as well as the interfaces to loop-related analyses (induction 16480variable analysis and number of iterations analysis). 16481 16482* Menu: 16483 16484* Loop representation:: Representation and analysis of loops. 16485* Loop querying:: Getting information about loops. 16486* Loop manipulation:: Loop manipulation functions. 16487* LCSSA:: Loop-closed SSA form. 16488* Scalar evolutions:: Induction variables on GIMPLE. 16489* loop-iv:: Induction variables on RTL. 16490* Number of iterations:: Number of iterations analysis. 16491* Dependency analysis:: Data dependency analysis. 16492* Lambda:: Linear loop transformations framework. 16493* Omega:: A solver for linear programming problems. 16494 16495 16496File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 16497 1649814.1 Loop representation 16499======================== 16500 16501This chapter describes the representation of loops in GCC, and functions 16502that can be used to build, modify and analyze this representation. Most 16503of the interfaces and data structures are declared in `cfgloop.h'. At 16504the moment, loop structures are analyzed and this information is 16505updated only by the optimization passes that deal with loops, but some 16506efforts are being made to make it available throughout most of the 16507optimization passes. 16508 16509 In general, a natural loop has one entry block (header) and possibly 16510several back edges (latches) leading to the header from the inside of 16511the loop. Loops with several latches may appear if several loops share 16512a single header, or if there is a branching in the middle of the loop. 16513The representation of loops in GCC however allows only loops with a 16514single latch. During loop analysis, headers of such loops are split and 16515forwarder blocks are created in order to disambiguate their structures. 16516Heuristic based on profile information and structure of the induction 16517variables in the loops is used to determine whether the latches 16518correspond to sub-loops or to control flow in a single loop. This means 16519that the analysis sometimes changes the CFG, and if you run it in the 16520middle of an optimization pass, you must be able to deal with the new 16521blocks. You may avoid CFG changes by passing 16522`LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 16523however that most other loop manipulation functions will not work 16524correctly for loops with multiple latch edges (the functions that only 16525query membership of blocks to loops and subloop relationships, or 16526enumerate and test loop exits, can be expected to work). 16527 16528 Body of the loop is the set of blocks that are dominated by its header, 16529and reachable from its latch against the direction of edges in CFG. The 16530loops are organized in a containment hierarchy (tree) such that all the 16531loops immediately contained inside loop L are the children of L in the 16532tree. This tree is represented by the `struct loops' structure. The 16533root of this tree is a fake loop that contains all blocks in the 16534function. Each of the loops is represented in a `struct loop' 16535structure. Each loop is assigned an index (`num' field of the `struct 16536loop' structure), and the pointer to the loop is stored in the 16537corresponding field of the `larray' vector in the loops structure. The 16538indices do not have to be continuous, there may be empty (`NULL') 16539entries in the `larray' created by deleting loops. Also, there is no 16540guarantee on the relative order of a loop and its subloops in the 16541numbering. The index of a loop never changes. 16542 16543 The entries of the `larray' field should not be accessed directly. 16544The function `get_loop' returns the loop description for a loop with 16545the given index. `number_of_loops' function returns number of loops in 16546the function. To traverse all loops, use `FOR_EACH_LOOP' macro. The 16547`flags' argument of the macro is used to determine the direction of 16548traversal and the set of loops visited. Each loop is guaranteed to be 16549visited exactly once, regardless of the changes to the loop tree, and 16550the loops may be removed during the traversal. The newly created loops 16551are never traversed, if they need to be visited, this must be done 16552separately after their creation. The `FOR_EACH_LOOP' macro allocates 16553temporary variables. If the `FOR_EACH_LOOP' loop were ended using 16554break or goto, they would not be released; `FOR_EACH_LOOP_BREAK' macro 16555must be used instead. 16556 16557 Each basic block contains the reference to the innermost loop it 16558belongs to (`loop_father'). For this reason, it is only possible to 16559have one `struct loops' structure initialized at the same time for each 16560CFG. The global variable `current_loops' contains the `struct loops' 16561structure. Many of the loop manipulation functions assume that 16562dominance information is up-to-date. 16563 16564 The loops are analyzed through `loop_optimizer_init' function. The 16565argument of this function is a set of flags represented in an integer 16566bitmask. These flags specify what other properties of the loop 16567structures should be calculated/enforced and preserved later: 16568 16569 * `LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 16570 to CFG will be performed in the loop analysis, in particular, 16571 loops with multiple latch edges will not be disambiguated. If a 16572 loop has multiple latches, its latch block is set to NULL. Most of 16573 the loop manipulation functions will not work for loops in this 16574 shape. No other flags that require CFG changes can be passed to 16575 loop_optimizer_init. 16576 16577 * `LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a 16578 way that each loop has only one entry edge, and additionally, the 16579 source block of this entry edge has only one successor. This 16580 creates a natural place where the code can be moved out of the 16581 loop, and ensures that the entry edge of the loop leads from its 16582 immediate super-loop. 16583 16584 * `LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 16585 the latch block of each loop to have only one successor. This 16586 ensures that the latch of the loop does not belong to any of its 16587 sub-loops, and makes manipulation with the loops significantly 16588 easier. Most of the loop manipulation functions assume that the 16589 loops are in this shape. Note that with this flag, the "normal" 16590 loop without any control flow inside and with one exit consists of 16591 two basic blocks. 16592 16593 * `LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 16594 the strongly connected components that are not natural loops (have 16595 more than one entry block) are marked with `BB_IRREDUCIBLE_LOOP' 16596 and `EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 16597 and edges that belong to natural loops that are in such an 16598 irreducible region (but it is set for the entry and exit edges of 16599 such a loop, if they lead to/from this region). 16600 16601 * `LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 16602 updated for each loop. This makes some functions (e.g., 16603 `get_loop_exit_edges') more efficient. Some functions (e.g., 16604 `single_exit') can be used only if the lists of exits are recorded. 16605 16606 These properties may also be computed/enforced later, using functions 16607`create_preheaders', `force_single_succ_latches', 16608`mark_irreducible_loops' and `record_loop_exits'. 16609 16610 The memory occupied by the loops structures should be freed with 16611`loop_optimizer_finalize' function. 16612 16613 The CFG manipulation functions in general do not update loop 16614structures. Specialized versions that additionally do so are provided 16615for the most common tasks. On GIMPLE, `cleanup_tree_cfg_loop' function 16616can be used to cleanup CFG while updating the loops structures if 16617`current_loops' is set. 16618 16619 16620File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 16621 1662214.2 Loop querying 16623================== 16624 16625The functions to query the information about loops are declared in 16626`cfgloop.h'. Some of the information can be taken directly from the 16627structures. `loop_father' field of each basic block contains the 16628innermost loop to that the block belongs. The most useful fields of 16629loop structure (that are kept up-to-date at all times) are: 16630 16631 * `header', `latch': Header and latch basic blocks of the loop. 16632 16633 * `num_nodes': Number of basic blocks in the loop (including the 16634 basic blocks of the sub-loops). 16635 16636 * `depth': The depth of the loop in the loops tree, i.e., the number 16637 of super-loops of the loop. 16638 16639 * `outer', `inner', `next': The super-loop, the first sub-loop, and 16640 the sibling of the loop in the loops tree. 16641 16642 There are other fields in the loop structures, many of them used only 16643by some of the passes, or not updated during CFG changes; in general, 16644they should not be accessed directly. 16645 16646 The most important functions to query loop structures are: 16647 16648 * `flow_loops_dump': Dumps the information about loops to a file. 16649 16650 * `verify_loop_structure': Checks consistency of the loop structures. 16651 16652 * `loop_latch_edge': Returns the latch edge of a loop. 16653 16654 * `loop_preheader_edge': If loops have preheaders, returns the 16655 preheader edge of a loop. 16656 16657 * `flow_loop_nested_p': Tests whether loop is a sub-loop of another 16658 loop. 16659 16660 * `flow_bb_inside_loop_p': Tests whether a basic block belongs to a 16661 loop (including its sub-loops). 16662 16663 * `find_common_loop': Finds the common super-loop of two loops. 16664 16665 * `superloop_at_depth': Returns the super-loop of a loop with the 16666 given depth. 16667 16668 * `tree_num_loop_insns', `num_loop_insns': Estimates the number of 16669 insns in the loop, on GIMPLE and on RTL. 16670 16671 * `loop_exit_edge_p': Tests whether edge is an exit from a loop. 16672 16673 * `mark_loop_exit_edges': Marks all exit edges of all loops with 16674 `EDGE_LOOP_EXIT' flag. 16675 16676 * `get_loop_body', `get_loop_body_in_dom_order', 16677 `get_loop_body_in_bfs_order': Enumerates the basic blocks in the 16678 loop in depth-first search order in reversed CFG, ordered by 16679 dominance relation, and breath-first search order, respectively. 16680 16681 * `single_exit': Returns the single exit edge of the loop, or `NULL' 16682 if the loop has more than one exit. You can only use this 16683 function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 16684 16685 * `get_loop_exit_edges': Enumerates the exit edges of a loop. 16686 16687 * `just_once_each_iteration_p': Returns true if the basic block is 16688 executed exactly once during each iteration of a loop (that is, it 16689 does not belong to a sub-loop, and it dominates the latch of the 16690 loop). 16691 16692 16693File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 16694 1669514.3 Loop manipulation 16696====================== 16697 16698The loops tree can be manipulated using the following functions: 16699 16700 * `flow_loop_tree_node_add': Adds a node to the tree. 16701 16702 * `flow_loop_tree_node_remove': Removes a node from the tree. 16703 16704 * `add_bb_to_loop': Adds a basic block to a loop. 16705 16706 * `remove_bb_from_loops': Removes a basic block from loops. 16707 16708 Most low-level CFG functions update loops automatically. The following 16709functions handle some more complicated cases of CFG manipulations: 16710 16711 * `remove_path': Removes an edge and all blocks it dominates. 16712 16713 * `split_loop_exit_edge': Splits exit edge of the loop, ensuring 16714 that PHI node arguments remain in the loop (this ensures that 16715 loop-closed SSA form is preserved). Only useful on GIMPLE. 16716 16717 Finally, there are some higher-level loop transformations implemented. 16718While some of them are written so that they should work on non-innermost 16719loops, they are mostly untested in that case, and at the moment, they 16720are only reliable for the innermost loops: 16721 16722 * `create_iv': Creates a new induction variable. Only works on 16723 GIMPLE. `standard_iv_increment_position' can be used to find a 16724 suitable place for the iv increment. 16725 16726 * `duplicate_loop_to_header_edge', 16727 `tree_duplicate_loop_to_header_edge': These functions (on RTL and 16728 on GIMPLE) duplicate the body of the loop prescribed number of 16729 times on one of the edges entering loop header, thus performing 16730 either loop unrolling or loop peeling. `can_duplicate_loop_p' 16731 (`can_unroll_loop_p' on GIMPLE) must be true for the duplicated 16732 loop. 16733 16734 * `loop_version', `tree_ssa_loop_version': These function create a 16735 copy of a loop, and a branch before them that selects one of them 16736 depending on the prescribed condition. This is useful for 16737 optimizations that need to verify some assumptions in runtime (one 16738 of the copies of the loop is usually left unchanged, while the 16739 other one is transformed in some way). 16740 16741 * `tree_unroll_loop': Unrolls the loop, including peeling the extra 16742 iterations to make the number of iterations divisible by unroll 16743 factor, updating the exit condition, and removing the exits that 16744 now cannot be taken. Works only on GIMPLE. 16745 16746 16747File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 16748 1674914.4 Loop-closed SSA form 16750========================= 16751 16752Throughout the loop optimizations on tree level, one extra condition is 16753enforced on the SSA form: No SSA name is used outside of the loop in 16754that it is defined. The SSA form satisfying this condition is called 16755"loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 16756created at the exits of the loops for the SSA names that are used 16757outside of them. Only the real operands (not virtual SSA names) are 16758held in LCSSA, in order to save memory. 16759 16760 There are various benefits of LCSSA: 16761 16762 * Many optimizations (value range analysis, final value replacement) 16763 are interested in the values that are defined in the loop and used 16764 outside of it, i.e., exactly those for that we create new PHI 16765 nodes. 16766 16767 * In induction variable analysis, it is not necessary to specify the 16768 loop in that the analysis should be performed - the scalar 16769 evolution analysis always returns the results with respect to the 16770 loop in that the SSA name is defined. 16771 16772 * It makes updating of SSA form during loop transformations simpler. 16773 Without LCSSA, operations like loop unrolling may force creation 16774 of PHI nodes arbitrarily far from the loop, while in LCSSA, the 16775 SSA form can be updated locally. However, since we only keep real 16776 operands in LCSSA, we cannot use this advantage (we could have 16777 local updating of real operands, but it is not much more efficient 16778 than to use generic SSA form updating for it as well; the amount 16779 of changes to SSA is the same). 16780 16781 However, it also means LCSSA must be updated. This is usually 16782straightforward, unless you create a new value in loop and use it 16783outside, or unless you manipulate loop exit edges (functions are 16784provided to make these manipulations simple). 16785`rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, 16786and `verify_loop_closed_ssa' to check that the invariant of LCSSA is 16787preserved. 16788 16789 16790File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 16791 1679214.5 Scalar evolutions 16793====================== 16794 16795Scalar evolutions (SCEV) are used to represent results of induction 16796variable analysis on GIMPLE. They enable us to represent variables with 16797complicated behavior in a simple and consistent way (we only use it to 16798express values of polynomial induction variables, but it is possible to 16799extend it). The interfaces to SCEV analysis are declared in 16800`tree-scalar-evolution.h'. To use scalar evolutions analysis, 16801`scev_initialize' must be used. To stop using SCEV, `scev_finalize' 16802should be used. SCEV analysis caches results in order to save time and 16803memory. This cache however is made invalid by most of the loop 16804transformations, including removal of code. If such a transformation 16805is performed, `scev_reset' must be called to clean the caches. 16806 16807 Given an SSA name, its behavior in loops can be analyzed using the 16808`analyze_scalar_evolution' function. The returned SCEV however does 16809not have to be fully analyzed and it may contain references to other 16810SSA names defined in the loop. To resolve these (potentially 16811recursive) references, `instantiate_parameters' or `resolve_mixers' 16812functions must be used. `instantiate_parameters' is useful when you 16813use the results of SCEV only for some analysis, and when you work with 16814whole nest of loops at once. It will try replacing all SSA names by 16815their SCEV in all loops, including the super-loops of the current loop, 16816thus providing a complete information about the behavior of the 16817variable in the loop nest. `resolve_mixers' is useful if you work with 16818only one loop at a time, and if you possibly need to create code based 16819on the value of the induction variable. It will only resolve the SSA 16820names defined in the current loop, leaving the SSA names defined 16821outside unchanged, even if their evolution in the outer loops is known. 16822 16823 The SCEV is a normal tree expression, except for the fact that it may 16824contain several special tree nodes. One of them is `SCEV_NOT_KNOWN', 16825used for SSA names whose value cannot be expressed. The other one is 16826`POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 16827and loop (both base and step may contain further polynomial chrecs). 16828Type of the expression and of base and step must be the same. A 16829variable has evolution `POLYNOMIAL_CHREC(base, step, loop)' if it is 16830(in the specified loop) equivalent to `x_1' in the following example 16831 16832 while (...) 16833 { 16834 x_1 = phi (base, x_2); 16835 x_2 = x_1 + step; 16836 } 16837 16838 Note that this includes the language restrictions on the operations. 16839For example, if we compile C code and `x' has signed type, then the 16840overflow in addition would cause undefined behavior, and we may assume 16841that this does not happen. Hence, the value with this SCEV cannot 16842overflow (which restricts the number of iterations of such a loop). 16843 16844 In many cases, one wants to restrict the attention just to affine 16845induction variables. In this case, the extra expressive power of SCEV 16846is not useful, and may complicate the optimizations. In this case, 16847`simple_iv' function may be used to analyze a value - the result is a 16848loop-invariant base and step. 16849 16850 16851File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 16852 1685314.6 IV analysis on RTL 16854======================= 16855 16856The induction variable on RTL is simple and only allows analysis of 16857affine induction variables, and only in one loop at once. The interface 16858is declared in `cfgloop.h'. Before analyzing induction variables in a 16859loop L, `iv_analysis_loop_init' function must be called on L. After 16860the analysis (possibly calling `iv_analysis_loop_init' for several 16861loops) is finished, `iv_analysis_done' should be called. The following 16862functions can be used to access the results of the analysis: 16863 16864 * `iv_analyze': Analyzes a single register used in the given insn. 16865 If no use of the register in this insn is found, the following 16866 insns are scanned, so that this function can be called on the insn 16867 returned by get_condition. 16868 16869 * `iv_analyze_result': Analyzes result of the assignment in the 16870 given insn. 16871 16872 * `iv_analyze_expr': Analyzes a more complicated expression. All 16873 its operands are analyzed by `iv_analyze', and hence they must be 16874 used in the specified insn or one of the following insns. 16875 16876 The description of the induction variable is provided in `struct 16877rtx_iv'. In order to handle subregs, the representation is a bit 16878complicated; if the value of the `extend' field is not `UNKNOWN', the 16879value of the induction variable in the i-th iteration is 16880 16881 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 16882 16883 with the following exception: if `first_special' is true, then the 16884value in the first iteration (when `i' is zero) is `delta + mult * 16885base'. However, if `extend' is equal to `UNKNOWN', then 16886`first_special' must be false, `delta' 0, `mult' 1 and the value in the 16887i-th iteration is 16888 16889 subreg_{mode} (base + i * step) 16890 16891 The function `get_iv_value' can be used to perform these calculations. 16892 16893 16894File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 16895 1689614.7 Number of iterations analysis 16897================================== 16898 16899Both on GIMPLE and on RTL, there are functions available to determine 16900the number of iterations of a loop, with a similar interface. The 16901number of iterations of a loop in GCC is defined as the number of 16902executions of the loop latch. In many cases, it is not possible to 16903determine the number of iterations unconditionally - the determined 16904number is correct only if some assumptions are satisfied. The analysis 16905tries to verify these conditions using the information contained in the 16906program; if it fails, the conditions are returned together with the 16907result. The following information and conditions are provided by the 16908analysis: 16909 16910 * `assumptions': If this condition is false, the rest of the 16911 information is invalid. 16912 16913 * `noloop_assumptions' on RTL, `may_be_zero' on GIMPLE: If this 16914 condition is true, the loop exits in the first iteration. 16915 16916 * `infinite': If this condition is true, the loop is infinite. This 16917 condition is only available on RTL. On GIMPLE, conditions for 16918 finiteness of the loop are included in `assumptions'. 16919 16920 * `niter_expr' on RTL, `niter' on GIMPLE: The expression that gives 16921 number of iterations. The number of iterations is defined as the 16922 number of executions of the loop latch. 16923 16924 Both on GIMPLE and on RTL, it necessary for the induction variable 16925analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 16926On GIMPLE, the results are stored to `struct tree_niter_desc' 16927structure. Number of iterations before the loop is exited through a 16928given exit can be determined using `number_of_iterations_exit' 16929function. On RTL, the results are returned in `struct niter_desc' 16930structure. The corresponding function is named `check_simple_exit'. 16931There are also functions that pass through all the exits of a loop and 16932try to find one with easy to determine number of iterations - 16933`find_loop_niter' on GIMPLE and `find_simple_exit' on RTL. Finally, 16934there are functions that provide the same information, but additionally 16935cache it, so that repeated calls to number of iterations are not so 16936costly - `number_of_latch_executions' on GIMPLE and 16937`get_simple_loop_desc' on RTL. 16938 16939 Note that some of these functions may behave slightly differently than 16940others - some of them return only the expression for the number of 16941iterations, and fail if there are some assumptions. The function 16942`number_of_latch_executions' works only for single-exit loops. The 16943function `number_of_cond_exit_executions' can be used to determine 16944number of executions of the exit condition of a single-exit loop (i.e., 16945the `number_of_latch_executions' increased by one). 16946 16947 16948File: gccint.info, Node: Dependency analysis, Next: Lambda, Prev: Number of iterations, Up: Loop Analysis and Representation 16949 1695014.8 Data Dependency Analysis 16951============================= 16952 16953The code for the data dependence analysis can be found in 16954`tree-data-ref.c' and its interface and data structures are described 16955in `tree-data-ref.h'. The function that computes the data dependences 16956for all the array and pointer references for a given loop is 16957`compute_data_dependences_for_loop'. This function is currently used 16958by the linear loop transform and the vectorization passes. Before 16959calling this function, one has to allocate two vectors: a first vector 16960will contain the set of data references that are contained in the 16961analyzed loop body, and the second vector will contain the dependence 16962relations between the data references. Thus if the vector of data 16963references is of size `n', the vector containing the dependence 16964relations will contain `n*n' elements. However if the analyzed loop 16965contains side effects, such as calls that potentially can interfere 16966with the data references in the current analyzed loop, the analysis 16967stops while scanning the loop body for data references, and inserts a 16968single `chrec_dont_know' in the dependence relation array. 16969 16970 The data references are discovered in a particular order during the 16971scanning of the loop body: the loop body is analyzed in execution order, 16972and the data references of each statement are pushed at the end of the 16973data reference array. Two data references syntactically occur in the 16974program in the same order as in the array of data references. This 16975syntactic order is important in some classical data dependence tests, 16976and mapping this order to the elements of this array avoids costly 16977queries to the loop body representation. 16978 16979 Three types of data references are currently handled: ARRAY_REF, 16980INDIRECT_REF and COMPONENT_REF. The data structure for the data 16981reference is `data_reference', where `data_reference_p' is a name of a 16982pointer to the data reference structure. The structure contains the 16983following elements: 16984 16985 * `base_object_info': Provides information about the base object of 16986 the data reference and its access functions. These access functions 16987 represent the evolution of the data reference in the loop relative 16988 to its base, in keeping with the classical meaning of the data 16989 reference access function for the support of arrays. For example, 16990 for a reference `a.b[i][j]', the base object is `a.b' and the 16991 access functions, one for each array subscript, are: `{i_init, + 16992 i_step}_1, {j_init, +, j_step}_2'. 16993 16994 * `first_location_in_loop': Provides information about the first 16995 location accessed by the data reference in the loop and about the 16996 access function used to represent evolution relative to this 16997 location. This data is used to support pointers, and is not used 16998 for arrays (for which we have base objects). Pointer accesses are 16999 represented as a one-dimensional access that starts from the first 17000 location accessed in the loop. For example: 17001 17002 for1 i 17003 for2 j 17004 *((int *)p + i + j) = a[i][j]; 17005 17006 The access function of the pointer access is `{0, + 4B}_for2' 17007 relative to `p + i'. The access functions of the array are 17008 `{i_init, + i_step}_for1' and `{j_init, +, j_step}_for2' relative 17009 to `a'. 17010 17011 Usually, the object the pointer refers to is either unknown, or we 17012 can't prove that the access is confined to the boundaries of a 17013 certain object. 17014 17015 Two data references can be compared only if at least one of these 17016 two representations has all its fields filled for both data 17017 references. 17018 17019 The current strategy for data dependence tests is as follows: If 17020 both `a' and `b' are represented as arrays, compare 17021 `a.base_object' and `b.base_object'; if they are equal, apply 17022 dependence tests (use access functions based on base_objects). 17023 Else if both `a' and `b' are represented as pointers, compare 17024 `a.first_location' and `b.first_location'; if they are equal, 17025 apply dependence tests (use access functions based on first 17026 location). However, if `a' and `b' are represented differently, 17027 only try to prove that the bases are definitely different. 17028 17029 * Aliasing information. 17030 17031 * Alignment information. 17032 17033 The structure describing the relation between two data references is 17034`data_dependence_relation' and the shorter name for a pointer to such a 17035structure is `ddr_p'. This structure contains: 17036 17037 * a pointer to each data reference, 17038 17039 * a tree node `are_dependent' that is set to `chrec_known' if the 17040 analysis has proved that there is no dependence between these two 17041 data references, `chrec_dont_know' if the analysis was not able to 17042 determine any useful result and potentially there could exist a 17043 dependence between these data references, and `are_dependent' is 17044 set to `NULL_TREE' if there exist a dependence relation between the 17045 data references, and the description of this dependence relation is 17046 given in the `subscripts', `dir_vects', and `dist_vects' arrays, 17047 17048 * a boolean that determines whether the dependence relation can be 17049 represented by a classical distance vector, 17050 17051 * an array `subscripts' that contains a description of each 17052 subscript of the data references. Given two array accesses a 17053 subscript is the tuple composed of the access functions for a given 17054 dimension. For example, given `A[f1][f2][f3]' and 17055 `B[g1][g2][g3]', there are three subscripts: `(f1, g1), (f2, g2), 17056 (f3, g3)'. 17057 17058 * two arrays `dir_vects' and `dist_vects' that contain classical 17059 representations of the data dependences under the form of 17060 direction and distance dependence vectors, 17061 17062 * an array of loops `loop_nest' that contains the loops to which the 17063 distance and direction vectors refer to. 17064 17065 Several functions for pretty printing the information extracted by the 17066data dependence analysis are available: `dump_ddrs' prints with a 17067maximum verbosity the details of a data dependence relations array, 17068`dump_dist_dir_vectors' prints only the classical distance and 17069direction vectors for a data dependence relations array, and 17070`dump_data_references' prints the details of the data references 17071contained in a data reference array. 17072 17073 17074File: gccint.info, Node: Lambda, Next: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation 17075 1707614.9 Linear loop transformations framework 17077========================================== 17078 17079Lambda is a framework that allows transformations of loops using 17080non-singular matrix based transformations of the iteration space and 17081loop bounds. This allows compositions of skewing, scaling, interchange, 17082and reversal transformations. These transformations are often used to 17083improve cache behavior or remove inner loop dependencies to allow 17084parallelization and vectorization to take place. 17085 17086 To perform these transformations, Lambda requires that the loopnest be 17087converted into an internal form that can be matrix transformed easily. 17088To do this conversion, the function `gcc_loopnest_to_lambda_loopnest' 17089is provided. If the loop cannot be transformed using lambda, this 17090function will return NULL. 17091 17092 Once a `lambda_loopnest' is obtained from the conversion function, it 17093can be transformed by using `lambda_loopnest_transform', which takes a 17094transformation matrix to apply. Note that it is up to the caller to 17095verify that the transformation matrix is legal to apply to the loop 17096(dependence respecting, etc). Lambda simply applies whatever matrix it 17097is told to provide. It can be extended to make legal matrices out of 17098any non-singular matrix, but this is not currently implemented. 17099Legality of a matrix for a given loopnest can be verified using 17100`lambda_transform_legal_p'. 17101 17102 Given a transformed loopnest, conversion back into gcc IR is done by 17103`lambda_loopnest_to_gcc_loopnest'. This function will modify the loops 17104so that they match the transformed loopnest. 17105 17106 17107File: gccint.info, Node: Omega, Prev: Lambda, Up: Loop Analysis and Representation 17108 1710914.10 Omega a solver for linear programming problems 17110==================================================== 17111 17112The data dependence analysis contains several solvers triggered 17113sequentially from the less complex ones to the more sophisticated. For 17114ensuring the consistency of the results of these solvers, a data 17115dependence check pass has been implemented based on two different 17116solvers. The second method that has been integrated to GCC is based on 17117the Omega dependence solver, written in the 1990's by William Pugh and 17118David Wonnacott. Data dependence tests can be formulated using a 17119subset of the Presburger arithmetics that can be translated to linear 17120constraint systems. These linear constraint systems can then be solved 17121using the Omega solver. 17122 17123 The Omega solver is using Fourier-Motzkin's algorithm for variable 17124elimination: a linear constraint system containing `n' variables is 17125reduced to a linear constraint system with `n-1' variables. The Omega 17126solver can also be used for solving other problems that can be 17127expressed under the form of a system of linear equalities and 17128inequalities. The Omega solver is known to have an exponential worst 17129case, also known under the name of "omega nightmare" in the literature, 17130but in practice, the omega test is known to be efficient for the common 17131data dependence tests. 17132 17133 The interface used by the Omega solver for describing the linear 17134programming problems is described in `omega.h', and the solver is 17135`omega_solve_problem'. 17136 17137 17138File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top 17139 1714015 Control Flow Graph 17141********************* 17142 17143A control flow graph (CFG) is a data structure built on top of the 17144intermediate code representation (the RTL or `tree' instruction stream) 17145abstracting the control flow behavior of a function that is being 17146compiled. The CFG is a directed graph where the vertices represent 17147basic blocks and edges represent possible transfer of control flow from 17148one basic block to another. The data structures used to represent the 17149control flow graph are defined in `basic-block.h'. 17150 17151* Menu: 17152 17153* Basic Blocks:: The definition and representation of basic blocks. 17154* Edges:: Types of edges and their representation. 17155* Profile information:: Representation of frequencies and probabilities. 17156* Maintaining the CFG:: Keeping the control flow graph and up to date. 17157* Liveness information:: Using and maintaining liveness information. 17158 17159 17160File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 17161 1716215.1 Basic Blocks 17163================= 17164 17165A basic block is a straight-line sequence of code with only one entry 17166point and only one exit. In GCC, basic blocks are represented using 17167the `basic_block' data type. 17168 17169 Two pointer members of the `basic_block' structure are the pointers 17170`next_bb' and `prev_bb'. These are used to keep doubly linked chain of 17171basic blocks in the same order as the underlying instruction stream. 17172The chain of basic blocks is updated transparently by the provided API 17173for manipulating the CFG. The macro `FOR_EACH_BB' can be used to visit 17174all the basic blocks in lexicographical order. Dominator traversals 17175are also possible using `walk_dominator_tree'. Given two basic blocks 17176A and B, block A dominates block B if A is _always_ executed before B. 17177 17178 The `BASIC_BLOCK' array contains all basic blocks in an unspecified 17179order. Each `basic_block' structure has a field that holds a unique 17180integer identifier `index' that is the index of the block in the 17181`BASIC_BLOCK' array. The total number of basic blocks in the function 17182is `n_basic_blocks'. Both the basic block indices and the total number 17183of basic blocks may vary during the compilation process, as passes 17184reorder, create, duplicate, and destroy basic blocks. The index for 17185any block should never be greater than `last_basic_block'. 17186 17187 Special basic blocks represent possible entry and exit points of a 17188function. These blocks are called `ENTRY_BLOCK_PTR' and 17189`EXIT_BLOCK_PTR'. These blocks do not contain any code, and are not 17190elements of the `BASIC_BLOCK' array. Therefore they have been assigned 17191unique, negative index numbers. 17192 17193 Each `basic_block' also contains pointers to the first instruction 17194(the "head") and the last instruction (the "tail") or "end" of the 17195instruction stream contained in a basic block. In fact, since the 17196`basic_block' data type is used to represent blocks in both major 17197intermediate representations of GCC (`tree' and RTL), there are 17198pointers to the head and end of a basic block for both representations. 17199 17200 For RTL, these pointers are `rtx head, end'. In the RTL function 17201representation, the head pointer always points either to a 17202`NOTE_INSN_BASIC_BLOCK' or to a `CODE_LABEL', if present. In the RTL 17203representation of a function, the instruction stream contains not only 17204the "real" instructions, but also "notes". Any function that moves or 17205duplicates the basic blocks needs to take care of updating of these 17206notes. Many of these notes expect that the instruction stream consists 17207of linear regions, making such updates difficult. The 17208`NOTE_INSN_BASIC_BLOCK' note is the only kind of note that may appear 17209in the instruction stream contained in a basic block. The instruction 17210stream of a basic block always follows a `NOTE_INSN_BASIC_BLOCK', but 17211zero or more `CODE_LABEL' nodes can precede the block note. A basic 17212block ends by control flow instruction or last instruction before 17213following `CODE_LABEL' or `NOTE_INSN_BASIC_BLOCK'. A `CODE_LABEL' 17214cannot appear in the instruction stream of a basic block. 17215 17216 In addition to notes, the jump table vectors are also represented as 17217"pseudo-instructions" inside the insn stream. These vectors never 17218appear in the basic block and should always be placed just after the 17219table jump instructions referencing them. After removing the 17220table-jump it is often difficult to eliminate the code computing the 17221address and referencing the vector, so cleaning up these vectors is 17222postponed until after liveness analysis. Thus the jump table vectors 17223may appear in the insn stream unreferenced and without any purpose. 17224Before any edge is made "fall-thru", the existence of such construct in 17225the way needs to be checked by calling `can_fallthru' function. 17226 17227 For the `tree' representation, the head and end of the basic block are 17228being pointed to by the `stmt_list' field, but this special `tree' 17229should never be referenced directly. Instead, at the tree level 17230abstract containers and iterators are used to access statements and 17231expressions in basic blocks. These iterators are called "block 17232statement iterators" (BSIs). Grep for `^bsi' in the various `tree-*' 17233files. The following snippet will pretty-print all the statements of 17234the program in the GIMPLE representation. 17235 17236 FOR_EACH_BB (bb) 17237 { 17238 block_stmt_iterator si; 17239 17240 for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si)) 17241 { 17242 tree stmt = bsi_stmt (si); 17243 print_generic_stmt (stderr, stmt, 0); 17244 } 17245 } 17246 17247 17248File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 17249 1725015.2 Edges 17251========== 17252 17253Edges represent possible control flow transfers from the end of some 17254basic block A to the head of another basic block B. We say that A is a 17255predecessor of B, and B is a successor of A. Edges are represented in 17256GCC with the `edge' data type. Each `edge' acts as a link between two 17257basic blocks: the `src' member of an edge points to the predecessor 17258basic block of the `dest' basic block. The members `preds' and `succs' 17259of the `basic_block' data type point to type-safe vectors of edges to 17260the predecessors and successors of the block. 17261 17262 When walking the edges in an edge vector, "edge iterators" should be 17263used. Edge iterators are constructed using the `edge_iterator' data 17264structure and several methods are available to operate on them: 17265 17266`ei_start' 17267 This function initializes an `edge_iterator' that points to the 17268 first edge in a vector of edges. 17269 17270`ei_last' 17271 This function initializes an `edge_iterator' that points to the 17272 last edge in a vector of edges. 17273 17274`ei_end_p' 17275 This predicate is `true' if an `edge_iterator' represents the last 17276 edge in an edge vector. 17277 17278`ei_one_before_end_p' 17279 This predicate is `true' if an `edge_iterator' represents the 17280 second last edge in an edge vector. 17281 17282`ei_next' 17283 This function takes a pointer to an `edge_iterator' and makes it 17284 point to the next edge in the sequence. 17285 17286`ei_prev' 17287 This function takes a pointer to an `edge_iterator' and makes it 17288 point to the previous edge in the sequence. 17289 17290`ei_edge' 17291 This function returns the `edge' currently pointed to by an 17292 `edge_iterator'. 17293 17294`ei_safe_safe' 17295 This function returns the `edge' currently pointed to by an 17296 `edge_iterator', but returns `NULL' if the iterator is pointing at 17297 the end of the sequence. This function has been provided for 17298 existing code makes the assumption that a `NULL' edge indicates 17299 the end of the sequence. 17300 17301 17302 The convenience macro `FOR_EACH_EDGE' can be used to visit all of the 17303edges in a sequence of predecessor or successor edges. It must not be 17304used when an element might be removed during the traversal, otherwise 17305elements will be missed. Here is an example of how to use the macro: 17306 17307 edge e; 17308 edge_iterator ei; 17309 17310 FOR_EACH_EDGE (e, ei, bb->succs) 17311 { 17312 if (e->flags & EDGE_FALLTHRU) 17313 break; 17314 } 17315 17316 There are various reasons why control flow may transfer from one block 17317to another. One possibility is that some instruction, for example a 17318`CODE_LABEL', in a linearized instruction stream just always starts a 17319new basic block. In this case a "fall-thru" edge links the basic block 17320to the first following basic block. But there are several other 17321reasons why edges may be created. The `flags' field of the `edge' data 17322type is used to store information about the type of edge we are dealing 17323with. Each edge is of one of the following types: 17324 17325_jump_ 17326 No type flags are set for edges corresponding to jump instructions. 17327 These edges are used for unconditional or conditional jumps and in 17328 RTL also for table jumps. They are the easiest to manipulate as 17329 they may be freely redirected when the flow graph is not in SSA 17330 form. 17331 17332_fall-thru_ 17333 Fall-thru edges are present in case where the basic block may 17334 continue execution to the following one without branching. These 17335 edges have the `EDGE_FALLTHRU' flag set. Unlike other types of 17336 edges, these edges must come into the basic block immediately 17337 following in the instruction stream. The function 17338 `force_nonfallthru' is available to insert an unconditional jump 17339 in the case that redirection is needed. Note that this may 17340 require creation of a new basic block. 17341 17342_exception handling_ 17343 Exception handling edges represent possible control transfers from 17344 a trapping instruction to an exception handler. The definition of 17345 "trapping" varies. In C++, only function calls can throw, but for 17346 Java, exceptions like division by zero or segmentation fault are 17347 defined and thus each instruction possibly throwing this kind of 17348 exception needs to be handled as control flow instruction. 17349 Exception edges have the `EDGE_ABNORMAL' and `EDGE_EH' flags set. 17350 17351 When updating the instruction stream it is easy to change possibly 17352 trapping instruction to non-trapping, by simply removing the 17353 exception edge. The opposite conversion is difficult, but should 17354 not happen anyway. The edges can be eliminated via 17355 `purge_dead_edges' call. 17356 17357 In the RTL representation, the destination of an exception edge is 17358 specified by `REG_EH_REGION' note attached to the insn. In case 17359 of a trapping call the `EDGE_ABNORMAL_CALL' flag is set too. In 17360 the `tree' representation, this extra flag is not set. 17361 17362 In the RTL representation, the predicate `may_trap_p' may be used 17363 to check whether instruction still may trap or not. For the tree 17364 representation, the `tree_could_trap_p' predicate is available, 17365 but this predicate only checks for possible memory traps, as in 17366 dereferencing an invalid pointer location. 17367 17368_sibling calls_ 17369 Sibling calls or tail calls terminate the function in a 17370 non-standard way and thus an edge to the exit must be present. 17371 `EDGE_SIBCALL' and `EDGE_ABNORMAL' are set in such case. These 17372 edges only exist in the RTL representation. 17373 17374_computed jumps_ 17375 Computed jumps contain edges to all labels in the function 17376 referenced from the code. All those edges have `EDGE_ABNORMAL' 17377 flag set. The edges used to represent computed jumps often cause 17378 compile time performance problems, since functions consisting of 17379 many taken labels and many computed jumps may have _very_ dense 17380 flow graphs, so these edges need to be handled with special care. 17381 During the earlier stages of the compilation process, GCC tries to 17382 avoid such dense flow graphs by factoring computed jumps. For 17383 example, given the following series of jumps, 17384 17385 goto *x; 17386 [ ... ] 17387 17388 goto *x; 17389 [ ... ] 17390 17391 goto *x; 17392 [ ... ] 17393 17394 factoring the computed jumps results in the following code sequence 17395 which has a much simpler flow graph: 17396 17397 goto y; 17398 [ ... ] 17399 17400 goto y; 17401 [ ... ] 17402 17403 goto y; 17404 [ ... ] 17405 17406 y: 17407 goto *x; 17408 17409 However, the classic problem with this transformation is that it 17410 has a runtime cost in there resulting code: An extra jump. 17411 Therefore, the computed jumps are un-factored in the later passes 17412 of the compiler. Be aware of that when you work on passes in that 17413 area. There have been numerous examples already where the compile 17414 time for code with unfactored computed jumps caused some serious 17415 headaches. 17416 17417_nonlocal goto handlers_ 17418 GCC allows nested functions to return into caller using a `goto' 17419 to a label passed to as an argument to the callee. The labels 17420 passed to nested functions contain special code to cleanup after 17421 function call. Such sections of code are referred to as "nonlocal 17422 goto receivers". If a function contains such nonlocal goto 17423 receivers, an edge from the call to the label is created with the 17424 `EDGE_ABNORMAL' and `EDGE_ABNORMAL_CALL' flags set. 17425 17426_function entry points_ 17427 By definition, execution of function starts at basic block 0, so 17428 there is always an edge from the `ENTRY_BLOCK_PTR' to basic block 17429 0. There is no `tree' representation for alternate entry points at 17430 this moment. In RTL, alternate entry points are specified by 17431 `CODE_LABEL' with `LABEL_ALTERNATE_NAME' defined. This feature is 17432 currently used for multiple entry point prologues and is limited 17433 to post-reload passes only. This can be used by back-ends to emit 17434 alternate prologues for functions called from different contexts. 17435 In future full support for multiple entry functions defined by 17436 Fortran 90 needs to be implemented. 17437 17438_function exits_ 17439 In the pre-reload representation a function terminates after the 17440 last instruction in the insn chain and no explicit return 17441 instructions are used. This corresponds to the fall-thru edge 17442 into exit block. After reload, optimal RTL epilogues are used 17443 that use explicit (conditional) return instructions that are 17444 represented by edges with no flags set. 17445 17446 17447 17448File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 17449 1745015.3 Profile information 17451======================== 17452 17453In many cases a compiler must make a choice whether to trade speed in 17454one part of code for speed in another, or to trade code size for code 17455speed. In such cases it is useful to know information about how often 17456some given block will be executed. That is the purpose for maintaining 17457profile within the flow graph. GCC can handle profile information 17458obtained through "profile feedback", but it can also estimate branch 17459probabilities based on statics and heuristics. 17460 17461 The feedback based profile is produced by compiling the program with 17462instrumentation, executing it on a train run and reading the numbers of 17463executions of basic blocks and edges back to the compiler while 17464re-compiling the program to produce the final executable. This method 17465provides very accurate information about where a program spends most of 17466its time on the train run. Whether it matches the average run of 17467course depends on the choice of train data set, but several studies 17468have shown that the behavior of a program usually changes just 17469marginally over different data sets. 17470 17471 When profile feedback is not available, the compiler may be asked to 17472attempt to predict the behavior of each branch in the program using a 17473set of heuristics (see `predict.def' for details) and compute estimated 17474frequencies of each basic block by propagating the probabilities over 17475the graph. 17476 17477 Each `basic_block' contains two integer fields to represent profile 17478information: `frequency' and `count'. The `frequency' is an estimation 17479how often is basic block executed within a function. It is represented 17480as an integer scaled in the range from 0 to `BB_FREQ_BASE'. The most 17481frequently executed basic block in function is initially set to 17482`BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 17483During optimization, the frequency of the most frequent basic block can 17484both decrease (for instance by loop unrolling) or grow (for instance by 17485cross-jumping optimization), so scaling sometimes has to be performed 17486multiple times. 17487 17488 The `count' contains hard-counted numbers of execution measured during 17489training runs and is nonzero only when profile feedback is available. 17490This value is represented as the host's widest integer (typically a 64 17491bit integer) of the special type `gcov_type'. 17492 17493 Most optimization passes can use only the frequency information of a 17494basic block, but a few passes may want to know hard execution counts. 17495The frequencies should always match the counts after scaling, however 17496during updating of the profile information numerical error may 17497accumulate into quite large errors. 17498 17499 Each edge also contains a branch probability field: an integer in the 17500range from 0 to `REG_BR_PROB_BASE'. It represents probability of 17501passing control from the end of the `src' basic block to the `dest' 17502basic block, i.e. the probability that control will flow along this 17503edge. The `EDGE_FREQUENCY' macro is available to compute how 17504frequently a given edge is taken. There is a `count' field for each 17505edge as well, representing same information as for a basic block. 17506 17507 The basic block frequencies are not represented in the instruction 17508stream, but in the RTL representation the edge frequencies are 17509represented for conditional jumps (via the `REG_BR_PROB' macro) since 17510they are used when instructions are output to the assembly file and the 17511flow graph is no longer maintained. 17512 17513 The probability that control flow arrives via a given edge to its 17514destination basic block is called "reverse probability" and is not 17515directly represented, but it may be easily computed from frequencies of 17516basic blocks. 17517 17518 Updating profile information is a delicate task that can unfortunately 17519not be easily integrated with the CFG manipulation API. Many of the 17520functions and hooks to modify the CFG, such as 17521`redirect_edge_and_branch', do not have enough information to easily 17522update the profile, so updating it is in the majority of cases left up 17523to the caller. It is difficult to uncover bugs in the profile updating 17524code, because they manifest themselves only by producing worse code, 17525and checking profile consistency is not possible because of numeric 17526error accumulation. Hence special attention needs to be given to this 17527issue in each pass that modifies the CFG. 17528 17529 It is important to point out that `REG_BR_PROB_BASE' and 17530`BB_FREQ_BASE' are both set low enough to be possible to compute second 17531power of any frequency or probability in the flow graph, it is not 17532possible to even square the `count' field, as modern CPUs are fast 17533enough to execute $2^32$ operations quickly. 17534 17535 17536File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 17537 1753815.4 Maintaining the CFG 17539======================== 17540 17541An important task of each compiler pass is to keep both the control 17542flow graph and all profile information up-to-date. Reconstruction of 17543the control flow graph after each pass is not an option, since it may be 17544very expensive and lost profile information cannot be reconstructed at 17545all. 17546 17547 GCC has two major intermediate representations, and both use the 17548`basic_block' and `edge' data types to represent control flow. Both 17549representations share as much of the CFG maintenance code as possible. 17550For each representation, a set of "hooks" is defined so that each 17551representation can provide its own implementation of CFG manipulation 17552routines when necessary. These hooks are defined in `cfghooks.h'. 17553There are hooks for almost all common CFG manipulations, including 17554block splitting and merging, edge redirection and creating and deleting 17555basic blocks. These hooks should provide everything you need to 17556maintain and manipulate the CFG in both the RTL and `tree' 17557representation. 17558 17559 At the moment, the basic block boundaries are maintained transparently 17560when modifying instructions, so there rarely is a need to move them 17561manually (such as in case someone wants to output instruction outside 17562basic block explicitly). Often the CFG may be better viewed as 17563integral part of instruction chain, than structure built on the top of 17564it. However, in principle the control flow graph for the `tree' 17565representation is _not_ an integral part of the representation, in that 17566a function tree may be expanded without first building a flow graph 17567for the `tree' representation at all. This happens when compiling 17568without any `tree' optimization enabled. When the `tree' optimizations 17569are enabled and the instruction stream is rewritten in SSA form, the 17570CFG is very tightly coupled with the instruction stream. In 17571particular, statement insertion and removal has to be done with care. 17572In fact, the whole `tree' representation can not be easily used or 17573maintained without proper maintenance of the CFG simultaneously. 17574 17575 In the RTL representation, each instruction has a `BLOCK_FOR_INSN' 17576value that represents pointer to the basic block that contains the 17577instruction. In the `tree' representation, the function `bb_for_stmt' 17578returns a pointer to the basic block containing the queried statement. 17579 17580 When changes need to be applied to a function in its `tree' 17581representation, "block statement iterators" should be used. These 17582iterators provide an integrated abstraction of the flow graph and the 17583instruction stream. Block statement iterators are constructed using 17584the `block_stmt_iterator' data structure and several modifier are 17585available, including the following: 17586 17587`bsi_start' 17588 This function initializes a `block_stmt_iterator' that points to 17589 the first non-empty statement in a basic block. 17590 17591`bsi_last' 17592 This function initializes a `block_stmt_iterator' that points to 17593 the last statement in a basic block. 17594 17595`bsi_end_p' 17596 This predicate is `true' if a `block_stmt_iterator' represents the 17597 end of a basic block. 17598 17599`bsi_next' 17600 This function takes a `block_stmt_iterator' and makes it point to 17601 its successor. 17602 17603`bsi_prev' 17604 This function takes a `block_stmt_iterator' and makes it point to 17605 its predecessor. 17606 17607`bsi_insert_after' 17608 This function inserts a statement after the `block_stmt_iterator' 17609 passed in. The final parameter determines whether the statement 17610 iterator is updated to point to the newly inserted statement, or 17611 left pointing to the original statement. 17612 17613`bsi_insert_before' 17614 This function inserts a statement before the `block_stmt_iterator' 17615 passed in. The final parameter determines whether the statement 17616 iterator is updated to point to the newly inserted statement, or 17617 left pointing to the original statement. 17618 17619`bsi_remove' 17620 This function removes the `block_stmt_iterator' passed in and 17621 rechains the remaining statements in a basic block, if any. 17622 17623 In the RTL representation, the macros `BB_HEAD' and `BB_END' may be 17624used to get the head and end `rtx' of a basic block. No abstract 17625iterators are defined for traversing the insn chain, but you can just 17626use `NEXT_INSN' and `PREV_INSN' instead. *Note Insns::. 17627 17628 Usually a code manipulating pass simplifies the instruction stream and 17629the flow of control, possibly eliminating some edges. This may for 17630example happen when a conditional jump is replaced with an 17631unconditional jump, but also when simplifying possibly trapping 17632instruction to non-trapping while compiling Java. Updating of edges is 17633not transparent and each optimization pass is required to do so 17634manually. However only few cases occur in practice. The pass may call 17635`purge_dead_edges' on a given basic block to remove superfluous edges, 17636if any. 17637 17638 Another common scenario is redirection of branch instructions, but 17639this is best modeled as redirection of edges in the control flow graph 17640and thus use of `redirect_edge_and_branch' is preferred over more low 17641level functions, such as `redirect_jump' that operate on RTL chain 17642only. The CFG hooks defined in `cfghooks.h' should provide the 17643complete API required for manipulating and maintaining the CFG. 17644 17645 It is also possible that a pass has to insert control flow instruction 17646into the middle of a basic block, thus creating an entry point in the 17647middle of the basic block, which is impossible by definition: The block 17648must be split to make sure it only has one entry point, i.e. the head 17649of the basic block. The CFG hook `split_block' may be used when an 17650instruction in the middle of a basic block has to become the target of 17651a jump or branch instruction. 17652 17653 For a global optimizer, a common operation is to split edges in the 17654flow graph and insert instructions on them. In the RTL representation, 17655this can be easily done using the `insert_insn_on_edge' function that 17656emits an instruction "on the edge", caching it for a later 17657`commit_edge_insertions' call that will take care of moving the 17658inserted instructions off the edge into the instruction stream 17659contained in a basic block. This includes the creation of new basic 17660blocks where needed. In the `tree' representation, the equivalent 17661functions are `bsi_insert_on_edge' which inserts a block statement 17662iterator on an edge, and `bsi_commit_edge_inserts' which flushes the 17663instruction to actual instruction stream. 17664 17665 While debugging the optimization pass, a `verify_flow_info' function 17666may be useful to find bugs in the control flow graph updating code. 17667 17668 Note that at present, the representation of control flow in the `tree' 17669representation is discarded before expanding to RTL. Long term the CFG 17670should be maintained and "expanded" to the RTL representation along 17671with the function `tree' itself. 17672 17673 17674File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 17675 1767615.5 Liveness information 17677========================= 17678 17679Liveness information is useful to determine whether some register is 17680"live" at given point of program, i.e. that it contains a value that 17681may be used at a later point in the program. This information is used, 17682for instance, during register allocation, as the pseudo registers only 17683need to be assigned to a unique hard register or to a stack slot if 17684they are live. The hard registers and stack slots may be freely reused 17685for other values when a register is dead. 17686 17687 Liveness information is available in the back end starting with 17688`pass_df_initialize' and ending with `pass_df_finish'. Three flavors 17689of live analysis are available: With `LR', it is possible to determine 17690at any point `P' in the function if the register may be used on some 17691path from `P' to the end of the function. With `UR', it is possible to 17692determine if there is a path from the beginning of the function to `P' 17693that defines the variable. `LIVE' is the intersection of the `LR' and 17694`UR' and a variable is live at `P' if there is both an assignment that 17695reaches it from the beginning of the function and a use that can be 17696reached on some path from `P' to the end of the function. 17697 17698 In general `LIVE' is the most useful of the three. The macros 17699`DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 17700macros take a basic block number and return a bitmap that is indexed by 17701the register number. This information is only guaranteed to be up to 17702date after calls are made to `df_analyze'. See the file `df-core.c' 17703for details on using the dataflow. 17704 17705 The liveness information is stored partly in the RTL instruction stream 17706and partly in the flow graph. Local information is stored in the 17707instruction stream: Each instruction may contain `REG_DEAD' notes 17708representing that the value of a given register is no longer needed, or 17709`REG_UNUSED' notes representing that the value computed by the 17710instruction is never used. The second is useful for instructions 17711computing multiple values at once. 17712 17713 17714File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 17715 1771616 Machine Descriptions 17717*********************** 17718 17719A machine description has two parts: a file of instruction patterns 17720(`.md' file) and a C header file of macro definitions. 17721 17722 The `.md' file for a target machine contains a pattern for each 17723instruction that the target machine supports (or at least each 17724instruction that is worth telling the compiler about). It may also 17725contain comments. A semicolon causes the rest of the line to be a 17726comment, unless the semicolon is inside a quoted string. 17727 17728 See the next chapter for information on the C header file. 17729 17730* Menu: 17731 17732* Overview:: How the machine description is used. 17733* Patterns:: How to write instruction patterns. 17734* Example:: An explained example of a `define_insn' pattern. 17735* RTL Template:: The RTL template defines what insns match a pattern. 17736* Output Template:: The output template says how to make assembler code 17737 from such an insn. 17738* Output Statement:: For more generality, write C code to output 17739 the assembler code. 17740* Predicates:: Controlling what kinds of operands can be used 17741 for an insn. 17742* Constraints:: Fine-tuning operand selection. 17743* Standard Names:: Names mark patterns to use for code generation. 17744* Pattern Ordering:: When the order of patterns makes a difference. 17745* Dependent Patterns:: Having one pattern may make you need another. 17746* Jump Patterns:: Special considerations for patterns for jump insns. 17747* Looping Patterns:: How to define patterns for special looping insns. 17748* Insn Canonicalizations::Canonicalization of Instructions 17749* Expander Definitions::Generating a sequence of several RTL insns 17750 for a standard operation. 17751* Insn Splitting:: Splitting Instructions into Multiple Instructions. 17752* Including Patterns:: Including Patterns in Machine Descriptions. 17753* Peephole Definitions::Defining machine-specific peephole optimizations. 17754* Insn Attributes:: Specifying the value of attributes for generated insns. 17755* Conditional Execution::Generating `define_insn' patterns for 17756 predication. 17757* Constant Definitions::Defining symbolic constants that can be used in the 17758 md file. 17759* Iterators:: Using iterators to generate patterns from a template. 17760 17761 17762File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 17763 1776416.1 Overview of How the Machine Description is Used 17765==================================================== 17766 17767There are three main conversions that happen in the compiler: 17768 17769 1. The front end reads the source code and builds a parse tree. 17770 17771 2. The parse tree is used to generate an RTL insn list based on named 17772 instruction patterns. 17773 17774 3. The insn list is matched against the RTL templates to produce 17775 assembler code. 17776 17777 17778 For the generate pass, only the names of the insns matter, from either 17779a named `define_insn' or a `define_expand'. The compiler will choose 17780the pattern with the right name and apply the operands according to the 17781documentation later in this chapter, without regard for the RTL 17782template or operand constraints. Note that the names the compiler looks 17783for are hard-coded in the compiler--it will ignore unnamed patterns and 17784patterns with names it doesn't know about, but if you don't provide a 17785named pattern it needs, it will abort. 17786 17787 If a `define_insn' is used, the template given is inserted into the 17788insn list. If a `define_expand' is used, one of three things happens, 17789based on the condition logic. The condition logic may manually create 17790new insns for the insn list, say via `emit_insn()', and invoke `DONE'. 17791For certain named patterns, it may invoke `FAIL' to tell the compiler 17792to use an alternate way of performing that task. If it invokes neither 17793`DONE' nor `FAIL', the template given in the pattern is inserted, as if 17794the `define_expand' were a `define_insn'. 17795 17796 Once the insn list is generated, various optimization passes convert, 17797replace, and rearrange the insns in the insn list. This is where the 17798`define_split' and `define_peephole' patterns get used, for example. 17799 17800 Finally, the insn list's RTL is matched up with the RTL templates in 17801the `define_insn' patterns, and those patterns are used to emit the 17802final assembly code. For this purpose, each named `define_insn' acts 17803like it's unnamed, since the names are ignored. 17804 17805 17806File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 17807 1780816.2 Everything about Instruction Patterns 17809========================================== 17810 17811Each instruction pattern contains an incomplete RTL expression, with 17812pieces to be filled in later, operand constraints that restrict how the 17813pieces can be filled in, and an output pattern or C code to generate 17814the assembler output, all wrapped up in a `define_insn' expression. 17815 17816 A `define_insn' is an RTL expression containing four or five operands: 17817 17818 1. An optional name. The presence of a name indicate that this 17819 instruction pattern can perform a certain standard job for the 17820 RTL-generation pass of the compiler. This pass knows certain 17821 names and will use the instruction patterns with those names, if 17822 the names are defined in the machine description. 17823 17824 The absence of a name is indicated by writing an empty string 17825 where the name should go. Nameless instruction patterns are never 17826 used for generating RTL code, but they may permit several simpler 17827 insns to be combined later on. 17828 17829 Names that are not thus known and used in RTL-generation have no 17830 effect; they are equivalent to no name at all. 17831 17832 For the purpose of debugging the compiler, you may also specify a 17833 name beginning with the `*' character. Such a name is used only 17834 for identifying the instruction in RTL dumps; it is entirely 17835 equivalent to having a nameless pattern for all other purposes. 17836 17837 2. The "RTL template" (*note RTL Template::) is a vector of incomplete 17838 RTL expressions which show what the instruction should look like. 17839 It is incomplete because it may contain `match_operand', 17840 `match_operator', and `match_dup' expressions that stand for 17841 operands of the instruction. 17842 17843 If the vector has only one element, that element is the template 17844 for the instruction pattern. If the vector has multiple elements, 17845 then the instruction pattern is a `parallel' expression containing 17846 the elements described. 17847 17848 3. A condition. This is a string which contains a C expression that 17849 is the final test to decide whether an insn body matches this 17850 pattern. 17851 17852 For a named pattern, the condition (if present) may not depend on 17853 the data in the insn being matched, but only the 17854 target-machine-type flags. The compiler needs to test these 17855 conditions during initialization in order to learn exactly which 17856 named instructions are available in a particular run. 17857 17858 For nameless patterns, the condition is applied only when matching 17859 an individual insn, and only after the insn has matched the 17860 pattern's recognition template. The insn's operands may be found 17861 in the vector `operands'. For an insn where the condition has 17862 once matched, it can't be used to control register allocation, for 17863 example by excluding certain hard registers or hard register 17864 combinations. 17865 17866 4. The "output template": a string that says how to output matching 17867 insns as assembler code. `%' in this string specifies where to 17868 substitute the value of an operand. *Note Output Template::. 17869 17870 When simple substitution isn't general enough, you can specify a 17871 piece of C code to compute the output. *Note Output Statement::. 17872 17873 5. Optionally, a vector containing the values of attributes for insns 17874 matching this pattern. *Note Insn Attributes::. 17875 17876 17877File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 17878 1787916.3 Example of `define_insn' 17880============================= 17881 17882Here is an actual example of an instruction pattern, for the 1788368000/68020. 17884 17885 (define_insn "tstsi" 17886 [(set (cc0) 17887 (match_operand:SI 0 "general_operand" "rm"))] 17888 "" 17889 "* 17890 { 17891 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 17892 return \"tstl %0\"; 17893 return \"cmpl #0,%0\"; 17894 }") 17895 17896This can also be written using braced strings: 17897 17898 (define_insn "tstsi" 17899 [(set (cc0) 17900 (match_operand:SI 0 "general_operand" "rm"))] 17901 "" 17902 { 17903 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 17904 return "tstl %0"; 17905 return "cmpl #0,%0"; 17906 }) 17907 17908 This is an instruction that sets the condition codes based on the 17909value of a general operand. It has no condition, so any insn whose RTL 17910description has the form shown may be handled according to this 17911pattern. The name `tstsi' means "test a `SImode' value" and tells the 17912RTL generation pass that, when it is necessary to test such a value, an 17913insn to do so can be constructed using this pattern. 17914 17915 The output control string is a piece of C code which chooses which 17916output template to return based on the kind of operand and the specific 17917type of CPU for which code is being generated. 17918 17919 `"rm"' is an operand constraint. Its meaning is explained below. 17920 17921 17922File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 17923 1792416.4 RTL Template 17925================= 17926 17927The RTL template is used to define which insns match the particular 17928pattern and how to find their operands. For named patterns, the RTL 17929template also says how to construct an insn from specified operands. 17930 17931 Construction involves substituting specified operands into a copy of 17932the template. Matching involves determining the values that serve as 17933the operands in the insn being matched. Both of these activities are 17934controlled by special expression types that direct matching and 17935substitution of the operands. 17936 17937`(match_operand:M N PREDICATE CONSTRAINT)' 17938 This expression is a placeholder for operand number N of the insn. 17939 When constructing an insn, operand number N will be substituted at 17940 this point. When matching an insn, whatever appears at this 17941 position in the insn will be taken as operand number N; but it 17942 must satisfy PREDICATE or this instruction pattern will not match 17943 at all. 17944 17945 Operand numbers must be chosen consecutively counting from zero in 17946 each instruction pattern. There may be only one `match_operand' 17947 expression in the pattern for each operand number. Usually 17948 operands are numbered in the order of appearance in `match_operand' 17949 expressions. In the case of a `define_expand', any operand numbers 17950 used only in `match_dup' expressions have higher values than all 17951 other operand numbers. 17952 17953 PREDICATE is a string that is the name of a function that accepts 17954 two arguments, an expression and a machine mode. *Note 17955 Predicates::. During matching, the function will be called with 17956 the putative operand as the expression and M as the mode argument 17957 (if M is not specified, `VOIDmode' will be used, which normally 17958 causes PREDICATE to accept any mode). If it returns zero, this 17959 instruction pattern fails to match. PREDICATE may be an empty 17960 string; then it means no test is to be done on the operand, so 17961 anything which occurs in this position is valid. 17962 17963 Most of the time, PREDICATE will reject modes other than M--but 17964 not always. For example, the predicate `address_operand' uses M 17965 as the mode of memory ref that the address should be valid for. 17966 Many predicates accept `const_int' nodes even though their mode is 17967 `VOIDmode'. 17968 17969 CONSTRAINT controls reloading and the choice of the best register 17970 class to use for a value, as explained later (*note Constraints::). 17971 If the constraint would be an empty string, it can be omitted. 17972 17973 People are often unclear on the difference between the constraint 17974 and the predicate. The predicate helps decide whether a given 17975 insn matches the pattern. The constraint plays no role in this 17976 decision; instead, it controls various decisions in the case of an 17977 insn which does match. 17978 17979`(match_scratch:M N CONSTRAINT)' 17980 This expression is also a placeholder for operand number N and 17981 indicates that operand must be a `scratch' or `reg' expression. 17982 17983 When matching patterns, this is equivalent to 17984 17985 (match_operand:M N "scratch_operand" PRED) 17986 17987 but, when generating RTL, it produces a (`scratch':M) expression. 17988 17989 If the last few expressions in a `parallel' are `clobber' 17990 expressions whose operands are either a hard register or 17991 `match_scratch', the combiner can add or delete them when 17992 necessary. *Note Side Effects::. 17993 17994`(match_dup N)' 17995 This expression is also a placeholder for operand number N. It is 17996 used when the operand needs to appear more than once in the insn. 17997 17998 In construction, `match_dup' acts just like `match_operand': the 17999 operand is substituted into the insn being constructed. But in 18000 matching, `match_dup' behaves differently. It assumes that operand 18001 number N has already been determined by a `match_operand' 18002 appearing earlier in the recognition template, and it matches only 18003 an identical-looking expression. 18004 18005 Note that `match_dup' should not be used to tell the compiler that 18006 a particular register is being used for two operands (example: 18007 `add' that adds one register to another; the second register is 18008 both an input operand and the output operand). Use a matching 18009 constraint (*note Simple Constraints::) for those. `match_dup' is 18010 for the cases where one operand is used in two places in the 18011 template, such as an instruction that computes both a quotient and 18012 a remainder, where the opcode takes two input operands but the RTL 18013 template has to refer to each of those twice; once for the 18014 quotient pattern and once for the remainder pattern. 18015 18016`(match_operator:M N PREDICATE [OPERANDS...])' 18017 This pattern is a kind of placeholder for a variable RTL expression 18018 code. 18019 18020 When constructing an insn, it stands for an RTL expression whose 18021 expression code is taken from that of operand N, and whose 18022 operands are constructed from the patterns OPERANDS. 18023 18024 When matching an expression, it matches an expression if the 18025 function PREDICATE returns nonzero on that expression _and_ the 18026 patterns OPERANDS match the operands of the expression. 18027 18028 Suppose that the function `commutative_operator' is defined as 18029 follows, to match any expression whose operator is one of the 18030 commutative arithmetic operators of RTL and whose mode is MODE: 18031 18032 int 18033 commutative_integer_operator (x, mode) 18034 rtx x; 18035 enum machine_mode mode; 18036 { 18037 enum rtx_code code = GET_CODE (x); 18038 if (GET_MODE (x) != mode) 18039 return 0; 18040 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 18041 || code == EQ || code == NE); 18042 } 18043 18044 Then the following pattern will match any RTL expression consisting 18045 of a commutative operator applied to two general operands: 18046 18047 (match_operator:SI 3 "commutative_operator" 18048 [(match_operand:SI 1 "general_operand" "g") 18049 (match_operand:SI 2 "general_operand" "g")]) 18050 18051 Here the vector `[OPERANDS...]' contains two patterns because the 18052 expressions to be matched all contain two operands. 18053 18054 When this pattern does match, the two operands of the commutative 18055 operator are recorded as operands 1 and 2 of the insn. (This is 18056 done by the two instances of `match_operand'.) Operand 3 of the 18057 insn will be the entire commutative expression: use `GET_CODE 18058 (operands[3])' to see which commutative operator was used. 18059 18060 The machine mode M of `match_operator' works like that of 18061 `match_operand': it is passed as the second argument to the 18062 predicate function, and that function is solely responsible for 18063 deciding whether the expression to be matched "has" that mode. 18064 18065 When constructing an insn, argument 3 of the gen-function will 18066 specify the operation (i.e. the expression code) for the 18067 expression to be made. It should be an RTL expression, whose 18068 expression code is copied into a new expression whose operands are 18069 arguments 1 and 2 of the gen-function. The subexpressions of 18070 argument 3 are not used; only its expression code matters. 18071 18072 When `match_operator' is used in a pattern for matching an insn, 18073 it usually best if the operand number of the `match_operator' is 18074 higher than that of the actual operands of the insn. This improves 18075 register allocation because the register allocator often looks at 18076 operands 1 and 2 of insns to see if it can do register tying. 18077 18078 There is no way to specify constraints in `match_operator'. The 18079 operand of the insn which corresponds to the `match_operator' 18080 never has any constraints because it is never reloaded as a whole. 18081 However, if parts of its OPERANDS are matched by `match_operand' 18082 patterns, those parts may have constraints of their own. 18083 18084`(match_op_dup:M N[OPERANDS...])' 18085 Like `match_dup', except that it applies to operators instead of 18086 operands. When constructing an insn, operand number N will be 18087 substituted at this point. But in matching, `match_op_dup' behaves 18088 differently. It assumes that operand number N has already been 18089 determined by a `match_operator' appearing earlier in the 18090 recognition template, and it matches only an identical-looking 18091 expression. 18092 18093`(match_parallel N PREDICATE [SUBPAT...])' 18094 This pattern is a placeholder for an insn that consists of a 18095 `parallel' expression with a variable number of elements. This 18096 expression should only appear at the top level of an insn pattern. 18097 18098 When constructing an insn, operand number N will be substituted at 18099 this point. When matching an insn, it matches if the body of the 18100 insn is a `parallel' expression with at least as many elements as 18101 the vector of SUBPAT expressions in the `match_parallel', if each 18102 SUBPAT matches the corresponding element of the `parallel', _and_ 18103 the function PREDICATE returns nonzero on the `parallel' that is 18104 the body of the insn. It is the responsibility of the predicate 18105 to validate elements of the `parallel' beyond those listed in the 18106 `match_parallel'. 18107 18108 A typical use of `match_parallel' is to match load and store 18109 multiple expressions, which can contain a variable number of 18110 elements in a `parallel'. For example, 18111 18112 (define_insn "" 18113 [(match_parallel 0 "load_multiple_operation" 18114 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 18115 (match_operand:SI 2 "memory_operand" "m")) 18116 (use (reg:SI 179)) 18117 (clobber (reg:SI 179))])] 18118 "" 18119 "loadm 0,0,%1,%2") 18120 18121 This example comes from `a29k.md'. The function 18122 `load_multiple_operation' is defined in `a29k.c' and checks that 18123 subsequent elements in the `parallel' are the same as the `set' in 18124 the pattern, except that they are referencing subsequent registers 18125 and memory locations. 18126 18127 An insn that matches this pattern might look like: 18128 18129 (parallel 18130 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 18131 (use (reg:SI 179)) 18132 (clobber (reg:SI 179)) 18133 (set (reg:SI 21) 18134 (mem:SI (plus:SI (reg:SI 100) 18135 (const_int 4)))) 18136 (set (reg:SI 22) 18137 (mem:SI (plus:SI (reg:SI 100) 18138 (const_int 8))))]) 18139 18140`(match_par_dup N [SUBPAT...])' 18141 Like `match_op_dup', but for `match_parallel' instead of 18142 `match_operator'. 18143 18144 18145 18146File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 18147 1814816.5 Output Templates and Operand Substitution 18149============================================== 18150 18151The "output template" is a string which specifies how to output the 18152assembler code for an instruction pattern. Most of the template is a 18153fixed string which is output literally. The character `%' is used to 18154specify where to substitute an operand; it can also be used to identify 18155places where different variants of the assembler require different 18156syntax. 18157 18158 In the simplest case, a `%' followed by a digit N says to output 18159operand N at that point in the string. 18160 18161 `%' followed by a letter and a digit says to output an operand in an 18162alternate fashion. Four letters have standard, built-in meanings 18163described below. The machine description macro `PRINT_OPERAND' can 18164define additional letters with nonstandard meanings. 18165 18166 `%cDIGIT' can be used to substitute an operand that is a constant 18167value without the syntax that normally indicates an immediate operand. 18168 18169 `%nDIGIT' is like `%cDIGIT' except that the value of the constant is 18170negated before printing. 18171 18172 `%aDIGIT' can be used to substitute an operand as if it were a memory 18173reference, with the actual operand treated as the address. This may be 18174useful when outputting a "load address" instruction, because often the 18175assembler syntax for such an instruction requires you to write the 18176operand as if it were a memory reference. 18177 18178 `%lDIGIT' is used to substitute a `label_ref' into a jump instruction. 18179 18180 `%=' outputs a number which is unique to each instruction in the 18181entire compilation. This is useful for making local labels to be 18182referred to more than once in a single template that generates multiple 18183assembler instructions. 18184 18185 `%' followed by a punctuation character specifies a substitution that 18186does not use an operand. Only one case is standard: `%%' outputs a `%' 18187into the assembler code. Other nonstandard cases can be defined in the 18188`PRINT_OPERAND' macro. You must also define which punctuation 18189characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro. 18190 18191 The template may generate multiple assembler instructions. Write the 18192text for the instructions, with `\;' between them. 18193 18194 When the RTL contains two operands which are required by constraint to 18195match each other, the output template must refer only to the 18196lower-numbered operand. Matching operands are not always identical, 18197and the rest of the compiler arranges to put the proper RTL expression 18198for printing into the lower-numbered operand. 18199 18200 One use of nonstandard letters or punctuation following `%' is to 18201distinguish between different assembler languages for the same machine; 18202for example, Motorola syntax versus MIT syntax for the 68000. Motorola 18203syntax requires periods in most opcode names, while MIT syntax does 18204not. For example, the opcode `movel' in MIT syntax is `move.l' in 18205Motorola syntax. The same file of patterns is used for both kinds of 18206output syntax, but the character sequence `%.' is used in each place 18207where Motorola syntax wants a period. The `PRINT_OPERAND' macro for 18208Motorola syntax defines the sequence to output a period; the macro for 18209MIT syntax defines it to do nothing. 18210 18211 As a special case, a template consisting of the single character `#' 18212instructs the compiler to first split the insn, and then output the 18213resulting instructions separately. This helps eliminate redundancy in 18214the output templates. If you have a `define_insn' that needs to emit 18215multiple assembler instructions, and there is a matching `define_split' 18216already defined, then you can simply use `#' as the output template 18217instead of writing an output template that emits the multiple assembler 18218instructions. 18219 18220 If the macro `ASSEMBLER_DIALECT' is defined, you can use construct of 18221the form `{option0|option1|option2}' in the templates. These describe 18222multiple variants of assembler language syntax. *Note Instruction 18223Output::. 18224 18225 18226File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 18227 1822816.6 C Statements for Assembler Output 18229====================================== 18230 18231Often a single fixed template string cannot produce correct and 18232efficient assembler code for all the cases that are recognized by a 18233single instruction pattern. For example, the opcodes may depend on the 18234kinds of operands; or some unfortunate combinations of operands may 18235require extra machine instructions. 18236 18237 If the output control string starts with a `@', then it is actually a 18238series of templates, each on a separate line. (Blank lines and leading 18239spaces and tabs are ignored.) The templates correspond to the 18240pattern's constraint alternatives (*note Multi-Alternative::). For 18241example, if a target machine has a two-address add instruction `addr' 18242to add into a register and another `addm' to add a register to memory, 18243you might write this pattern: 18244 18245 (define_insn "addsi3" 18246 [(set (match_operand:SI 0 "general_operand" "=r,m") 18247 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 18248 (match_operand:SI 2 "general_operand" "g,r")))] 18249 "" 18250 "@ 18251 addr %2,%0 18252 addm %2,%0") 18253 18254 If the output control string starts with a `*', then it is not an 18255output template but rather a piece of C program that should compute a 18256template. It should execute a `return' statement to return the 18257template-string you want. Most such templates use C string literals, 18258which require doublequote characters to delimit them. To include these 18259doublequote characters in the string, prefix each one with `\'. 18260 18261 If the output control string is written as a brace block instead of a 18262double-quoted string, it is automatically assumed to be C code. In that 18263case, it is not necessary to put in a leading asterisk, or to escape the 18264doublequotes surrounding C string literals. 18265 18266 The operands may be found in the array `operands', whose C data type 18267is `rtx []'. 18268 18269 It is very common to select different ways of generating assembler code 18270based on whether an immediate operand is within a certain range. Be 18271careful when doing this, because the result of `INTVAL' is an integer 18272on the host machine. If the host machine has more bits in an `int' 18273than the target machine has in the mode in which the constant will be 18274used, then some of the bits you get from `INTVAL' will be superfluous. 18275For proper results, you must carefully disregard the values of those 18276bits. 18277 18278 It is possible to output an assembler instruction and then go on to 18279output or compute more of them, using the subroutine `output_asm_insn'. 18280This receives two arguments: a template-string and a vector of 18281operands. The vector may be `operands', or it may be another array of 18282`rtx' that you declare locally and initialize yourself. 18283 18284 When an insn pattern has multiple alternatives in its constraints, 18285often the appearance of the assembler code is determined mostly by 18286which alternative was matched. When this is so, the C code can test 18287the variable `which_alternative', which is the ordinal number of the 18288alternative that was actually satisfied (0 for the first, 1 for the 18289second alternative, etc.). 18290 18291 For example, suppose there are two opcodes for storing zero, `clrreg' 18292for registers and `clrmem' for memory locations. Here is how a pattern 18293could use `which_alternative' to choose between them: 18294 18295 (define_insn "" 18296 [(set (match_operand:SI 0 "general_operand" "=r,m") 18297 (const_int 0))] 18298 "" 18299 { 18300 return (which_alternative == 0 18301 ? "clrreg %0" : "clrmem %0"); 18302 }) 18303 18304 The example above, where the assembler code to generate was _solely_ 18305determined by the alternative, could also have been specified as 18306follows, having the output control string start with a `@': 18307 18308 (define_insn "" 18309 [(set (match_operand:SI 0 "general_operand" "=r,m") 18310 (const_int 0))] 18311 "" 18312 "@ 18313 clrreg %0 18314 clrmem %0") 18315 18316 18317File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 18318 1831916.7 Predicates 18320=============== 18321 18322A predicate determines whether a `match_operand' or `match_operator' 18323expression matches, and therefore whether the surrounding instruction 18324pattern will be used for that combination of operands. GCC has a 18325number of machine-independent predicates, and you can define 18326machine-specific predicates as needed. By convention, predicates used 18327with `match_operand' have names that end in `_operand', and those used 18328with `match_operator' have names that end in `_operator'. 18329 18330 All predicates are Boolean functions (in the mathematical sense) of 18331two arguments: the RTL expression that is being considered at that 18332position in the instruction pattern, and the machine mode that the 18333`match_operand' or `match_operator' specifies. In this section, the 18334first argument is called OP and the second argument MODE. Predicates 18335can be called from C as ordinary two-argument functions; this can be 18336useful in output templates or other machine-specific code. 18337 18338 Operand predicates can allow operands that are not actually acceptable 18339to the hardware, as long as the constraints give reload the ability to 18340fix them up (*note Constraints::). However, GCC will usually generate 18341better code if the predicates specify the requirements of the machine 18342instructions as closely as possible. Reload cannot fix up operands 18343that must be constants ("immediate operands"); you must use a predicate 18344that allows only constants, or else enforce the requirement in the 18345extra condition. 18346 18347 Most predicates handle their MODE argument in a uniform manner. If 18348MODE is `VOIDmode' (unspecified), then OP can have any mode. If MODE 18349is anything else, then OP must have the same mode, unless OP is a 18350`CONST_INT' or integer `CONST_DOUBLE'. These RTL expressions always 18351have `VOIDmode', so it would be counterproductive to check that their 18352mode matches. Instead, predicates that accept `CONST_INT' and/or 18353integer `CONST_DOUBLE' check that the value stored in the constant will 18354fit in the requested mode. 18355 18356 Predicates with this behavior are called "normal". `genrecog' can 18357optimize the instruction recognizer based on knowledge of how normal 18358predicates treat modes. It can also diagnose certain kinds of common 18359errors in the use of normal predicates; for instance, it is almost 18360always an error to use a normal predicate without specifying a mode. 18361 18362 Predicates that do something different with their MODE argument are 18363called "special". The generic predicates `address_operand' and 18364`pmode_register_operand' are special predicates. `genrecog' does not 18365do any optimizations or diagnosis when special predicates are used. 18366 18367* Menu: 18368 18369* Machine-Independent Predicates:: Predicates available to all back ends. 18370* Defining Predicates:: How to write machine-specific predicate 18371 functions. 18372 18373 18374File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 18375 1837616.7.1 Machine-Independent Predicates 18377------------------------------------- 18378 18379These are the generic predicates available to all back ends. They are 18380defined in `recog.c'. The first category of predicates allow only 18381constant, or "immediate", operands. 18382 18383 -- Function: immediate_operand 18384 This predicate allows any sort of constant that fits in MODE. It 18385 is an appropriate choice for instructions that take operands that 18386 must be constant. 18387 18388 -- Function: const_int_operand 18389 This predicate allows any `CONST_INT' expression that fits in 18390 MODE. It is an appropriate choice for an immediate operand that 18391 does not allow a symbol or label. 18392 18393 -- Function: const_double_operand 18394 This predicate accepts any `CONST_DOUBLE' expression that has 18395 exactly MODE. If MODE is `VOIDmode', it will also accept 18396 `CONST_INT'. It is intended for immediate floating point 18397 constants. 18398 18399The second category of predicates allow only some kind of machine 18400register. 18401 18402 -- Function: register_operand 18403 This predicate allows any `REG' or `SUBREG' expression that is 18404 valid for MODE. It is often suitable for arithmetic instruction 18405 operands on a RISC machine. 18406 18407 -- Function: pmode_register_operand 18408 This is a slight variant on `register_operand' which works around 18409 a limitation in the machine-description reader. 18410 18411 (match_operand N "pmode_register_operand" CONSTRAINT) 18412 18413 means exactly what 18414 18415 (match_operand:P N "register_operand" CONSTRAINT) 18416 18417 would mean, if the machine-description reader accepted `:P' mode 18418 suffixes. Unfortunately, it cannot, because `Pmode' is an alias 18419 for some other mode, and might vary with machine-specific options. 18420 *Note Misc::. 18421 18422 -- Function: scratch_operand 18423 This predicate allows hard registers and `SCRATCH' expressions, 18424 but not pseudo-registers. It is used internally by 18425 `match_scratch'; it should not be used directly. 18426 18427The third category of predicates allow only some kind of memory 18428reference. 18429 18430 -- Function: memory_operand 18431 This predicate allows any valid reference to a quantity of mode 18432 MODE in memory, as determined by the weak form of 18433 `GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 18434 18435 -- Function: address_operand 18436 This predicate is a little unusual; it allows any operand that is a 18437 valid expression for the _address_ of a quantity of mode MODE, 18438 again determined by the weak form of `GO_IF_LEGITIMATE_ADDRESS'. 18439 To first order, if `(mem:MODE (EXP))' is acceptable to 18440 `memory_operand', then EXP is acceptable to `address_operand'. 18441 Note that EXP does not necessarily have the mode MODE. 18442 18443 -- Function: indirect_operand 18444 This is a stricter form of `memory_operand' which allows only 18445 memory references with a `general_operand' as the address 18446 expression. New uses of this predicate are discouraged, because 18447 `general_operand' is very permissive, so it's hard to tell what an 18448 `indirect_operand' does or does not allow. If a target has 18449 different requirements for memory operands for different 18450 instructions, it is better to define target-specific predicates 18451 which enforce the hardware's requirements explicitly. 18452 18453 -- Function: push_operand 18454 This predicate allows a memory reference suitable for pushing a 18455 value onto the stack. This will be a `MEM' which refers to 18456 `stack_pointer_rtx', with a side-effect in its address expression 18457 (*note Incdec::); which one is determined by the `STACK_PUSH_CODE' 18458 macro (*note Frame Layout::). 18459 18460 -- Function: pop_operand 18461 This predicate allows a memory reference suitable for popping a 18462 value off the stack. Again, this will be a `MEM' referring to 18463 `stack_pointer_rtx', with a side-effect in its address expression. 18464 However, this time `STACK_POP_CODE' is expected. 18465 18466The fourth category of predicates allow some combination of the above 18467operands. 18468 18469 -- Function: nonmemory_operand 18470 This predicate allows any immediate or register operand valid for 18471 MODE. 18472 18473 -- Function: nonimmediate_operand 18474 This predicate allows any register or memory operand valid for 18475 MODE. 18476 18477 -- Function: general_operand 18478 This predicate allows any immediate, register, or memory operand 18479 valid for MODE. 18480 18481Finally, there are two generic operator predicates. 18482 18483 -- Function: comparison_operator 18484 This predicate matches any expression which performs an arithmetic 18485 comparison in MODE; that is, `COMPARISON_P' is true for the 18486 expression code. 18487 18488 -- Function: ordered_comparison_operator 18489 This predicate matches any expression which performs an arithmetic 18490 comparison in MODE and whose expression code is valid for integer 18491 modes; that is, the expression code will be one of `eq', `ne', 18492 `lt', `ltu', `le', `leu', `gt', `gtu', `ge', `geu'. 18493 18494 18495File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 18496 1849716.7.2 Defining Machine-Specific Predicates 18498------------------------------------------- 18499 18500Many machines have requirements for their operands that cannot be 18501expressed precisely using the generic predicates. You can define 18502additional predicates using `define_predicate' and 18503`define_special_predicate' expressions. These expressions have three 18504operands: 18505 18506 * The name of the predicate, as it will be referred to in 18507 `match_operand' or `match_operator' expressions. 18508 18509 * An RTL expression which evaluates to true if the predicate allows 18510 the operand OP, false if it does not. This expression can only use 18511 the following RTL codes: 18512 18513 `MATCH_OPERAND' 18514 When written inside a predicate expression, a `MATCH_OPERAND' 18515 expression evaluates to true if the predicate it names would 18516 allow OP. The operand number and constraint are ignored. 18517 Due to limitations in `genrecog', you can only refer to 18518 generic predicates and predicates that have already been 18519 defined. 18520 18521 `MATCH_CODE' 18522 This expression evaluates to true if OP or a specified 18523 subexpression of OP has one of a given list of RTX codes. 18524 18525 The first operand of this expression is a string constant 18526 containing a comma-separated list of RTX code names (in lower 18527 case). These are the codes for which the `MATCH_CODE' will 18528 be true. 18529 18530 The second operand is a string constant which indicates what 18531 subexpression of OP to examine. If it is absent or the empty 18532 string, OP itself is examined. Otherwise, the string constant 18533 must be a sequence of digits and/or lowercase letters. Each 18534 character indicates a subexpression to extract from the 18535 current expression; for the first character this is OP, for 18536 the second and subsequent characters it is the result of the 18537 previous character. A digit N extracts `XEXP (E, N)'; a 18538 letter L extracts `XVECEXP (E, 0, N)' where N is the 18539 alphabetic ordinal of L (0 for `a', 1 for 'b', and so on). 18540 The `MATCH_CODE' then examines the RTX code of the 18541 subexpression extracted by the complete string. It is not 18542 possible to extract components of an `rtvec' that is not at 18543 position 0 within its RTX object. 18544 18545 `MATCH_TEST' 18546 This expression has one operand, a string constant containing 18547 a C expression. The predicate's arguments, OP and MODE, are 18548 available with those names in the C expression. The 18549 `MATCH_TEST' evaluates to true if the C expression evaluates 18550 to a nonzero value. `MATCH_TEST' expressions must not have 18551 side effects. 18552 18553 `AND' 18554 `IOR' 18555 `NOT' 18556 `IF_THEN_ELSE' 18557 The basic `MATCH_' expressions can be combined using these 18558 logical operators, which have the semantics of the C operators 18559 `&&', `||', `!', and `? :' respectively. As in Common Lisp, 18560 you may give an `AND' or `IOR' expression an arbitrary number 18561 of arguments; this has exactly the same effect as writing a 18562 chain of two-argument `AND' or `IOR' expressions. 18563 18564 * An optional block of C code, which should execute `return true' if 18565 the predicate is found to match and `return false' if it does not. 18566 It must not have any side effects. The predicate arguments, OP 18567 and MODE, are available with those names. 18568 18569 If a code block is present in a predicate definition, then the RTL 18570 expression must evaluate to true _and_ the code block must execute 18571 `return true' for the predicate to allow the operand. The RTL 18572 expression is evaluated first; do not re-check anything in the 18573 code block that was checked in the RTL expression. 18574 18575 The program `genrecog' scans `define_predicate' and 18576`define_special_predicate' expressions to determine which RTX codes are 18577possibly allowed. You should always make this explicit in the RTL 18578predicate expression, using `MATCH_OPERAND' and `MATCH_CODE'. 18579 18580 Here is an example of a simple predicate definition, from the IA64 18581machine description: 18582 18583 ;; True if OP is a `SYMBOL_REF' which refers to the sdata section. 18584 (define_predicate "small_addr_symbolic_operand" 18585 (and (match_code "symbol_ref") 18586 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 18587 18588And here is another, showing the use of the C block. 18589 18590 ;; True if OP is a register operand that is (or could be) a GR reg. 18591 (define_predicate "gr_register_operand" 18592 (match_operand 0 "register_operand") 18593 { 18594 unsigned int regno; 18595 if (GET_CODE (op) == SUBREG) 18596 op = SUBREG_REG (op); 18597 18598 regno = REGNO (op); 18599 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 18600 }) 18601 18602 Predicates written with `define_predicate' automatically include a 18603test that MODE is `VOIDmode', or OP has the same mode as MODE, or OP is 18604a `CONST_INT' or `CONST_DOUBLE'. They do _not_ check specifically for 18605integer `CONST_DOUBLE', nor do they test that the value of either kind 18606of constant fits in the requested mode. This is because 18607target-specific predicates that take constants usually have to do more 18608stringent value checks anyway. If you need the exact same treatment of 18609`CONST_INT' or `CONST_DOUBLE' that the generic predicates provide, use 18610a `MATCH_OPERAND' subexpression to call `const_int_operand', 18611`const_double_operand', or `immediate_operand'. 18612 18613 Predicates written with `define_special_predicate' do not get any 18614automatic mode checks, and are treated as having special mode handling 18615by `genrecog'. 18616 18617 The program `genpreds' is responsible for generating code to test 18618predicates. It also writes a header file containing function 18619declarations for all machine-specific predicates. It is not necessary 18620to declare these predicates in `CPU-protos.h'. 18621 18622 18623File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 18624 1862516.8 Operand Constraints 18626======================== 18627 18628Each `match_operand' in an instruction pattern can specify constraints 18629for the operands allowed. The constraints allow you to fine-tune 18630matching within the set of operands allowed by the predicate. 18631 18632 Constraints can say whether an operand may be in a register, and which 18633kinds of register; whether the operand can be a memory reference, and 18634which kinds of address; whether the operand may be an immediate 18635constant, and which possible values it may have. Constraints can also 18636require two operands to match. 18637 18638* Menu: 18639 18640* Simple Constraints:: Basic use of constraints. 18641* Multi-Alternative:: When an insn has two alternative constraint-patterns. 18642* Class Preferences:: Constraints guide which hard register to put things in. 18643* Modifiers:: More precise control over effects of constraints. 18644* Disable Insn Alternatives:: Disable insn alternatives using the `enabled' attribute. 18645* Machine Constraints:: Existing constraints for some particular machines. 18646* Define Constraints:: How to define machine-specific constraints. 18647* C Constraint Interface:: How to test constraints from C code. 18648 18649 18650File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 18651 1865216.8.1 Simple Constraints 18653------------------------- 18654 18655The simplest kind of constraint is a string full of letters, each of 18656which describes one kind of operand that is permitted. Here are the 18657letters that are allowed: 18658 18659whitespace 18660 Whitespace characters are ignored and can be inserted at any 18661 position except the first. This enables each alternative for 18662 different operands to be visually aligned in the machine 18663 description even if they have different number of constraints and 18664 modifiers. 18665 18666`m' 18667 A memory operand is allowed, with any kind of address that the 18668 machine supports in general. Note that the letter used for the 18669 general memory constraint can be re-defined by a back end using 18670 the `TARGET_MEM_CONSTRAINT' macro. 18671 18672`o' 18673 A memory operand is allowed, but only if the address is 18674 "offsettable". This means that adding a small integer (actually, 18675 the width in bytes of the operand, as determined by its machine 18676 mode) may be added to the address and the result is also a valid 18677 memory address. 18678 18679 For example, an address which is constant is offsettable; so is an 18680 address that is the sum of a register and a constant (as long as a 18681 slightly larger constant is also within the range of 18682 address-offsets supported by the machine); but an autoincrement or 18683 autodecrement address is not offsettable. More complicated 18684 indirect/indexed addresses may or may not be offsettable depending 18685 on the other addressing modes that the machine supports. 18686 18687 Note that in an output operand which can be matched by another 18688 operand, the constraint letter `o' is valid only when accompanied 18689 by both `<' (if the target machine has predecrement addressing) 18690 and `>' (if the target machine has preincrement addressing). 18691 18692`V' 18693 A memory operand that is not offsettable. In other words, 18694 anything that would fit the `m' constraint but not the `o' 18695 constraint. 18696 18697`<' 18698 A memory operand with autodecrement addressing (either 18699 predecrement or postdecrement) is allowed. 18700 18701`>' 18702 A memory operand with autoincrement addressing (either 18703 preincrement or postincrement) is allowed. 18704 18705`r' 18706 A register operand is allowed provided that it is in a general 18707 register. 18708 18709`i' 18710 An immediate integer operand (one with constant value) is allowed. 18711 This includes symbolic constants whose values will be known only at 18712 assembly time or later. 18713 18714`n' 18715 An immediate integer operand with a known numeric value is allowed. 18716 Many systems cannot support assembly-time constants for operands 18717 less than a word wide. Constraints for these operands should use 18718 `n' rather than `i'. 18719 18720`I', `J', `K', ... `P' 18721 Other letters in the range `I' through `P' may be defined in a 18722 machine-dependent fashion to permit immediate integer operands with 18723 explicit integer values in specified ranges. For example, on the 18724 68000, `I' is defined to stand for the range of values 1 to 8. 18725 This is the range permitted as a shift count in the shift 18726 instructions. 18727 18728`E' 18729 An immediate floating operand (expression code `const_double') is 18730 allowed, but only if the target floating point format is the same 18731 as that of the host machine (on which the compiler is running). 18732 18733`F' 18734 An immediate floating operand (expression code `const_double' or 18735 `const_vector') is allowed. 18736 18737`G', `H' 18738 `G' and `H' may be defined in a machine-dependent fashion to 18739 permit immediate floating operands in particular ranges of values. 18740 18741`s' 18742 An immediate integer operand whose value is not an explicit 18743 integer is allowed. 18744 18745 This might appear strange; if an insn allows a constant operand 18746 with a value not known at compile time, it certainly must allow 18747 any known value. So why use `s' instead of `i'? Sometimes it 18748 allows better code to be generated. 18749 18750 For example, on the 68000 in a fullword instruction it is possible 18751 to use an immediate operand; but if the immediate value is between 18752 -128 and 127, better code results from loading the value into a 18753 register and using the register. This is because the load into 18754 the register can be done with a `moveq' instruction. We arrange 18755 for this to happen by defining the letter `K' to mean "any integer 18756 outside the range -128 to 127", and then specifying `Ks' in the 18757 operand constraints. 18758 18759`g' 18760 Any register, memory or immediate integer operand is allowed, 18761 except for registers that are not general registers. 18762 18763`X' 18764 Any operand whatsoever is allowed, even if it does not satisfy 18765 `general_operand'. This is normally used in the constraint of a 18766 `match_scratch' when certain alternatives will not actually 18767 require a scratch register. 18768 18769`0', `1', `2', ... `9' 18770 An operand that matches the specified operand number is allowed. 18771 If a digit is used together with letters within the same 18772 alternative, the digit should come last. 18773 18774 This number is allowed to be more than a single digit. If multiple 18775 digits are encountered consecutively, they are interpreted as a 18776 single decimal integer. There is scant chance for ambiguity, 18777 since to-date it has never been desirable that `10' be interpreted 18778 as matching either operand 1 _or_ operand 0. Should this be 18779 desired, one can use multiple alternatives instead. 18780 18781 This is called a "matching constraint" and what it really means is 18782 that the assembler has only a single operand that fills two roles 18783 considered separate in the RTL insn. For example, an add insn has 18784 two input operands and one output operand in the RTL, but on most 18785 CISC machines an add instruction really has only two operands, one 18786 of them an input-output operand: 18787 18788 addl #35,r12 18789 18790 Matching constraints are used in these circumstances. More 18791 precisely, the two operands that match must include one input-only 18792 operand and one output-only operand. Moreover, the digit must be a 18793 smaller number than the number of the operand that uses it in the 18794 constraint. 18795 18796 For operands to match in a particular case usually means that they 18797 are identical-looking RTL expressions. But in a few special cases 18798 specific kinds of dissimilarity are allowed. For example, `*x' as 18799 an input operand will match `*x++' as an output operand. For 18800 proper results in such cases, the output template should always 18801 use the output-operand's number when printing the operand. 18802 18803`p' 18804 An operand that is a valid memory address is allowed. This is for 18805 "load address" and "push address" instructions. 18806 18807 `p' in the constraint must be accompanied by `address_operand' as 18808 the predicate in the `match_operand'. This predicate interprets 18809 the mode specified in the `match_operand' as the mode of the memory 18810 reference for which the address would be valid. 18811 18812OTHER-LETTERS 18813 Other letters can be defined in machine-dependent fashion to stand 18814 for particular classes of registers or other arbitrary operand 18815 types. `d', `a' and `f' are defined on the 68000/68020 to stand 18816 for data, address and floating point registers. 18817 18818 In order to have valid assembler code, each operand must satisfy its 18819constraint. But a failure to do so does not prevent the pattern from 18820applying to an insn. Instead, it directs the compiler to modify the 18821code so that the constraint will be satisfied. Usually this is done by 18822copying an operand into a register. 18823 18824 Contrast, therefore, the two instruction patterns that follow: 18825 18826 (define_insn "" 18827 [(set (match_operand:SI 0 "general_operand" "=r") 18828 (plus:SI (match_dup 0) 18829 (match_operand:SI 1 "general_operand" "r")))] 18830 "" 18831 "...") 18832 18833which has two operands, one of which must appear in two places, and 18834 18835 (define_insn "" 18836 [(set (match_operand:SI 0 "general_operand" "=r") 18837 (plus:SI (match_operand:SI 1 "general_operand" "0") 18838 (match_operand:SI 2 "general_operand" "r")))] 18839 "" 18840 "...") 18841 18842which has three operands, two of which are required by a constraint to 18843be identical. If we are considering an insn of the form 18844 18845 (insn N PREV NEXT 18846 (set (reg:SI 3) 18847 (plus:SI (reg:SI 6) (reg:SI 109))) 18848 ...) 18849 18850the first pattern would not apply at all, because this insn does not 18851contain two identical subexpressions in the right place. The pattern 18852would say, "That does not look like an add instruction; try other 18853patterns". The second pattern would say, "Yes, that's an add 18854instruction, but there is something wrong with it". It would direct 18855the reload pass of the compiler to generate additional insns to make 18856the constraint true. The results might look like this: 18857 18858 (insn N2 PREV N 18859 (set (reg:SI 3) (reg:SI 6)) 18860 ...) 18861 18862 (insn N N2 NEXT 18863 (set (reg:SI 3) 18864 (plus:SI (reg:SI 3) (reg:SI 109))) 18865 ...) 18866 18867 It is up to you to make sure that each operand, in each pattern, has 18868constraints that can handle any RTL expression that could be present for 18869that operand. (When multiple alternatives are in use, each pattern 18870must, for each possible combination of operand expressions, have at 18871least one alternative which can handle that combination of operands.) 18872The constraints don't need to _allow_ any possible operand--when this is 18873the case, they do not constrain--but they must at least point the way to 18874reloading any possible operand so that it will fit. 18875 18876 * If the constraint accepts whatever operands the predicate permits, 18877 there is no problem: reloading is never necessary for this operand. 18878 18879 For example, an operand whose constraints permit everything except 18880 registers is safe provided its predicate rejects registers. 18881 18882 An operand whose predicate accepts only constant values is safe 18883 provided its constraints include the letter `i'. If any possible 18884 constant value is accepted, then nothing less than `i' will do; if 18885 the predicate is more selective, then the constraints may also be 18886 more selective. 18887 18888 * Any operand expression can be reloaded by copying it into a 18889 register. So if an operand's constraints allow some kind of 18890 register, it is certain to be safe. It need not permit all 18891 classes of registers; the compiler knows how to copy a register 18892 into another register of the proper class in order to make an 18893 instruction valid. 18894 18895 * A nonoffsettable memory reference can be reloaded by copying the 18896 address into a register. So if the constraint uses the letter 18897 `o', all memory references are taken care of. 18898 18899 * A constant operand can be reloaded by allocating space in memory to 18900 hold it as preinitialized data. Then the memory reference can be 18901 used in place of the constant. So if the constraint uses the 18902 letters `o' or `m', constant operands are not a problem. 18903 18904 * If the constraint permits a constant and a pseudo register used in 18905 an insn was not allocated to a hard register and is equivalent to 18906 a constant, the register will be replaced with the constant. If 18907 the predicate does not permit a constant and the insn is 18908 re-recognized for some reason, the compiler will crash. Thus the 18909 predicate must always recognize any objects allowed by the 18910 constraint. 18911 18912 If the operand's predicate can recognize registers, but the constraint 18913does not permit them, it can make the compiler crash. When this 18914operand happens to be a register, the reload pass will be stymied, 18915because it does not know how to copy a register temporarily into memory. 18916 18917 If the predicate accepts a unary operator, the constraint applies to 18918the operand. For example, the MIPS processor at ISA level 3 supports an 18919instruction which adds two registers in `SImode' to produce a `DImode' 18920result, but only if the registers are correctly sign extended. This 18921predicate for the input operands accepts a `sign_extend' of an `SImode' 18922register. Write the constraint to indicate the type of register that 18923is required for the operand of the `sign_extend'. 18924 18925 18926File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 18927 1892816.8.2 Multiple Alternative Constraints 18929--------------------------------------- 18930 18931Sometimes a single instruction has multiple alternative sets of possible 18932operands. For example, on the 68000, a logical-or instruction can 18933combine register or an immediate value into memory, or it can combine 18934any kind of operand into a register; but it cannot combine one memory 18935location into another. 18936 18937 These constraints are represented as multiple alternatives. An 18938alternative can be described by a series of letters for each operand. 18939The overall constraint for an operand is made from the letters for this 18940operand from the first alternative, a comma, the letters for this 18941operand from the second alternative, a comma, and so on until the last 18942alternative. Here is how it is done for fullword logical-or on the 1894368000: 18944 18945 (define_insn "iorsi3" 18946 [(set (match_operand:SI 0 "general_operand" "=m,d") 18947 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 18948 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 18949 ...) 18950 18951 The first alternative has `m' (memory) for operand 0, `0' for operand 189521 (meaning it must match operand 0), and `dKs' for operand 2. The 18953second alternative has `d' (data register) for operand 0, `0' for 18954operand 1, and `dmKs' for operand 2. The `=' and `%' in the 18955constraints apply to all the alternatives; their meaning is explained 18956in the next section (*note Class Preferences::). 18957 18958 If all the operands fit any one alternative, the instruction is valid. 18959Otherwise, for each alternative, the compiler counts how many 18960instructions must be added to copy the operands so that that 18961alternative applies. The alternative requiring the least copying is 18962chosen. If two alternatives need the same amount of copying, the one 18963that comes first is chosen. These choices can be altered with the `?' 18964and `!' characters: 18965 18966`?' 18967 Disparage slightly the alternative that the `?' appears in, as a 18968 choice when no alternative applies exactly. The compiler regards 18969 this alternative as one unit more costly for each `?' that appears 18970 in it. 18971 18972`!' 18973 Disparage severely the alternative that the `!' appears in. This 18974 alternative can still be used if it fits without reloading, but if 18975 reloading is needed, some other alternative will be used. 18976 18977 When an insn pattern has multiple alternatives in its constraints, 18978often the appearance of the assembler code is determined mostly by which 18979alternative was matched. When this is so, the C code for writing the 18980assembler code can use the variable `which_alternative', which is the 18981ordinal number of the alternative that was actually satisfied (0 for 18982the first, 1 for the second alternative, etc.). *Note Output 18983Statement::. 18984 18985 18986File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 18987 1898816.8.3 Register Class Preferences 18989--------------------------------- 18990 18991The operand constraints have another function: they enable the compiler 18992to decide which kind of hardware register a pseudo register is best 18993allocated to. The compiler examines the constraints that apply to the 18994insns that use the pseudo register, looking for the machine-dependent 18995letters such as `d' and `a' that specify classes of registers. The 18996pseudo register is put in whichever class gets the most "votes". The 18997constraint letters `g' and `r' also vote: they vote in favor of a 18998general register. The machine description says which registers are 18999considered general. 19000 19001 Of course, on some machines all registers are equivalent, and no 19002register classes are defined. Then none of this complexity is relevant. 19003 19004 19005File: gccint.info, Node: Modifiers, Next: Disable Insn Alternatives, Prev: Class Preferences, Up: Constraints 19006 1900716.8.4 Constraint Modifier Characters 19008------------------------------------- 19009 19010Here are constraint modifier characters. 19011 19012`=' 19013 Means that this operand is write-only for this instruction: the 19014 previous value is discarded and replaced by output data. 19015 19016`+' 19017 Means that this operand is both read and written by the 19018 instruction. 19019 19020 When the compiler fixes up the operands to satisfy the constraints, 19021 it needs to know which operands are inputs to the instruction and 19022 which are outputs from it. `=' identifies an output; `+' 19023 identifies an operand that is both input and output; all other 19024 operands are assumed to be input only. 19025 19026 If you specify `=' or `+' in a constraint, you put it in the first 19027 character of the constraint string. 19028 19029`&' 19030 Means (in a particular alternative) that this operand is an 19031 "earlyclobber" operand, which is modified before the instruction is 19032 finished using the input operands. Therefore, this operand may 19033 not lie in a register that is used as an input operand or as part 19034 of any memory address. 19035 19036 `&' applies only to the alternative in which it is written. In 19037 constraints with multiple alternatives, sometimes one alternative 19038 requires `&' while others do not. See, for example, the `movdf' 19039 insn of the 68000. 19040 19041 An input operand can be tied to an earlyclobber operand if its only 19042 use as an input occurs before the early result is written. Adding 19043 alternatives of this form often allows GCC to produce better code 19044 when only some of the inputs can be affected by the earlyclobber. 19045 See, for example, the `mulsi3' insn of the ARM. 19046 19047 `&' does not obviate the need to write `='. 19048 19049`%' 19050 Declares the instruction to be commutative for this operand and the 19051 following operand. This means that the compiler may interchange 19052 the two operands if that is the cheapest way to make all operands 19053 fit the constraints. This is often used in patterns for addition 19054 instructions that really have only two operands: the result must 19055 go in one of the arguments. Here for example, is how the 68000 19056 halfword-add instruction is defined: 19057 19058 (define_insn "addhi3" 19059 [(set (match_operand:HI 0 "general_operand" "=m,r") 19060 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 19061 (match_operand:HI 2 "general_operand" "di,g")))] 19062 ...) 19063 GCC can only handle one commutative pair in an asm; if you use 19064 more, the compiler may fail. Note that you need not use the 19065 modifier if the two alternatives are strictly identical; this 19066 would only waste time in the reload pass. The modifier is not 19067 operational after register allocation, so the result of 19068 `define_peephole2' and `define_split's performed after reload 19069 cannot rely on `%' to make the intended insn match. 19070 19071`#' 19072 Says that all following characters, up to the next comma, are to be 19073 ignored as a constraint. They are significant only for choosing 19074 register preferences. 19075 19076`*' 19077 Says that the following character should be ignored when choosing 19078 register preferences. `*' has no effect on the meaning of the 19079 constraint as a constraint, and no effect on reloading. 19080 19081 Here is an example: the 68000 has an instruction to sign-extend a 19082 halfword in a data register, and can also sign-extend a value by 19083 copying it into an address register. While either kind of 19084 register is acceptable, the constraints on an address-register 19085 destination are less strict, so it is best if register allocation 19086 makes an address register its goal. Therefore, `*' is used so 19087 that the `d' constraint letter (for data register) is ignored when 19088 computing register preferences. 19089 19090 (define_insn "extendhisi2" 19091 [(set (match_operand:SI 0 "general_operand" "=*d,a") 19092 (sign_extend:SI 19093 (match_operand:HI 1 "general_operand" "0,g")))] 19094 ...) 19095 19096 19097File: gccint.info, Node: Machine Constraints, Next: Define Constraints, Prev: Disable Insn Alternatives, Up: Constraints 19098 1909916.8.5 Constraints for Particular Machines 19100------------------------------------------ 19101 19102Whenever possible, you should use the general-purpose constraint letters 19103in `asm' arguments, since they will convey meaning more readily to 19104people reading your code. Failing that, use the constraint letters 19105that usually have very similar meanings across architectures. The most 19106commonly used constraints are `m' and `r' (for memory and 19107general-purpose registers respectively; *note Simple Constraints::), and 19108`I', usually the letter indicating the most common immediate-constant 19109format. 19110 19111 Each architecture defines additional constraints. These constraints 19112are used by the compiler itself for instruction generation, as well as 19113for `asm' statements; therefore, some of the constraints are not 19114particularly useful for `asm'. Here is a summary of some of the 19115machine-dependent constraints available on some particular machines; it 19116includes both constraints that are useful for `asm' and constraints 19117that aren't. The compiler source file mentioned in the table heading 19118for each architecture is the definitive reference for the meanings of 19119that architecture's constraints. 19120 19121_ARM family--`config/arm/arm.h'_ 19122 19123 `f' 19124 Floating-point register 19125 19126 `w' 19127 VFP floating-point register 19128 19129 `F' 19130 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 19131 4.0, 5.0 or 10.0 19132 19133 `G' 19134 Floating-point constant that would satisfy the constraint `F' 19135 if it were negated 19136 19137 `I' 19138 Integer that is valid as an immediate operand in a data 19139 processing instruction. That is, an integer in the range 0 19140 to 255 rotated by a multiple of 2 19141 19142 `J' 19143 Integer in the range -4095 to 4095 19144 19145 `K' 19146 Integer that satisfies constraint `I' when inverted (ones 19147 complement) 19148 19149 `L' 19150 Integer that satisfies constraint `I' when negated (twos 19151 complement) 19152 19153 `M' 19154 Integer in the range 0 to 32 19155 19156 `Q' 19157 A memory reference where the exact address is in a single 19158 register (``m'' is preferable for `asm' statements) 19159 19160 `R' 19161 An item in the constant pool 19162 19163 `S' 19164 A symbol in the text segment of the current file 19165 19166 `Uv' 19167 A memory reference suitable for VFP load/store insns 19168 (reg+constant offset) 19169 19170 `Uy' 19171 A memory reference suitable for iWMMXt load/store 19172 instructions. 19173 19174 `Uq' 19175 A memory reference suitable for the ARMv4 ldrsb instruction. 19176 19177_AVR family--`config/avr/constraints.md'_ 19178 19179 `l' 19180 Registers from r0 to r15 19181 19182 `a' 19183 Registers from r16 to r23 19184 19185 `d' 19186 Registers from r16 to r31 19187 19188 `w' 19189 Registers from r24 to r31. These registers can be used in 19190 `adiw' command 19191 19192 `e' 19193 Pointer register (r26-r31) 19194 19195 `b' 19196 Base pointer register (r28-r31) 19197 19198 `q' 19199 Stack pointer register (SPH:SPL) 19200 19201 `t' 19202 Temporary register r0 19203 19204 `x' 19205 Register pair X (r27:r26) 19206 19207 `y' 19208 Register pair Y (r29:r28) 19209 19210 `z' 19211 Register pair Z (r31:r30) 19212 19213 `I' 19214 Constant greater than -1, less than 64 19215 19216 `J' 19217 Constant greater than -64, less than 1 19218 19219 `K' 19220 Constant integer 2 19221 19222 `L' 19223 Constant integer 0 19224 19225 `M' 19226 Constant that fits in 8 bits 19227 19228 `N' 19229 Constant integer -1 19230 19231 `O' 19232 Constant integer 8, 16, or 24 19233 19234 `P' 19235 Constant integer 1 19236 19237 `G' 19238 A floating point constant 0.0 19239 19240 `R' 19241 Integer constant in the range -6 ... 5. 19242 19243 `Q' 19244 A memory address based on Y or Z pointer with displacement. 19245 19246_CRX Architecture--`config/crx/crx.h'_ 19247 19248 `b' 19249 Registers from r0 to r14 (registers without stack pointer) 19250 19251 `l' 19252 Register r16 (64-bit accumulator lo register) 19253 19254 `h' 19255 Register r17 (64-bit accumulator hi register) 19256 19257 `k' 19258 Register pair r16-r17. (64-bit accumulator lo-hi pair) 19259 19260 `I' 19261 Constant that fits in 3 bits 19262 19263 `J' 19264 Constant that fits in 4 bits 19265 19266 `K' 19267 Constant that fits in 5 bits 19268 19269 `L' 19270 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 19271 19272 `G' 19273 Floating point constant that is legal for store immediate 19274 19275_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 19276 19277 `a' 19278 General register 1 19279 19280 `f' 19281 Floating point register 19282 19283 `q' 19284 Shift amount register 19285 19286 `x' 19287 Floating point register (deprecated) 19288 19289 `y' 19290 Upper floating point register (32-bit), floating point 19291 register (64-bit) 19292 19293 `Z' 19294 Any register 19295 19296 `I' 19297 Signed 11-bit integer constant 19298 19299 `J' 19300 Signed 14-bit integer constant 19301 19302 `K' 19303 Integer constant that can be deposited with a `zdepi' 19304 instruction 19305 19306 `L' 19307 Signed 5-bit integer constant 19308 19309 `M' 19310 Integer constant 0 19311 19312 `N' 19313 Integer constant that can be loaded with a `ldil' instruction 19314 19315 `O' 19316 Integer constant whose value plus one is a power of 2 19317 19318 `P' 19319 Integer constant that can be used for `and' operations in 19320 `depi' and `extru' instructions 19321 19322 `S' 19323 Integer constant 31 19324 19325 `U' 19326 Integer constant 63 19327 19328 `G' 19329 Floating-point constant 0.0 19330 19331 `A' 19332 A `lo_sum' data-linkage-table memory operand 19333 19334 `Q' 19335 A memory operand that can be used as the destination operand 19336 of an integer store instruction 19337 19338 `R' 19339 A scaled or unscaled indexed memory operand 19340 19341 `T' 19342 A memory operand for floating-point loads and stores 19343 19344 `W' 19345 A register indirect memory operand 19346 19347_picoChip family--`picochip.h'_ 19348 19349 `k' 19350 Stack register. 19351 19352 `f' 19353 Pointer register. A register which can be used to access 19354 memory without supplying an offset. Any other register can 19355 be used to access memory, but will need a constant offset. 19356 In the case of the offset being zero, it is more efficient to 19357 use a pointer register, since this reduces code size. 19358 19359 `t' 19360 A twin register. A register which may be paired with an 19361 adjacent register to create a 32-bit register. 19362 19363 `a' 19364 Any absolute memory address (e.g., symbolic constant, symbolic 19365 constant + offset). 19366 19367 `I' 19368 4-bit signed integer. 19369 19370 `J' 19371 4-bit unsigned integer. 19372 19373 `K' 19374 8-bit signed integer. 19375 19376 `M' 19377 Any constant whose absolute value is no greater than 4-bits. 19378 19379 `N' 19380 10-bit signed integer 19381 19382 `O' 19383 16-bit signed integer. 19384 19385 19386_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 19387 19388 `b' 19389 Address base register 19390 19391 `d' 19392 Floating point register (containing 64-bit value) 19393 19394 `f' 19395 Floating point register (containing 32-bit value) 19396 19397 `v' 19398 Altivec vector register 19399 19400 `wd' 19401 VSX vector register to hold vector double data 19402 19403 `wf' 19404 VSX vector register to hold vector float data 19405 19406 `ws' 19407 VSX vector register to hold scalar float data 19408 19409 `wa' 19410 Any VSX register 19411 19412 `h' 19413 `MQ', `CTR', or `LINK' register 19414 19415 `q' 19416 `MQ' register 19417 19418 `c' 19419 `CTR' register 19420 19421 `l' 19422 `LINK' register 19423 19424 `x' 19425 `CR' register (condition register) number 0 19426 19427 `y' 19428 `CR' register (condition register) 19429 19430 `z' 19431 `FPMEM' stack memory for FPR-GPR transfers 19432 19433 `I' 19434 Signed 16-bit constant 19435 19436 `J' 19437 Unsigned 16-bit constant shifted left 16 bits (use `L' 19438 instead for `SImode' constants) 19439 19440 `K' 19441 Unsigned 16-bit constant 19442 19443 `L' 19444 Signed 16-bit constant shifted left 16 bits 19445 19446 `M' 19447 Constant larger than 31 19448 19449 `N' 19450 Exact power of 2 19451 19452 `O' 19453 Zero 19454 19455 `P' 19456 Constant whose negation is a signed 16-bit constant 19457 19458 `G' 19459 Floating point constant that can be loaded into a register 19460 with one instruction per word 19461 19462 `H' 19463 Integer/Floating point constant that can be loaded into a 19464 register using three instructions 19465 19466 `m' 19467 Memory operand. Note that on PowerPC targets, `m' can include 19468 addresses that update the base register. It is therefore 19469 only safe to use `m' in an `asm' statement if that `asm' 19470 statement accesses the operand exactly once. The `asm' 19471 statement must also use `%U<OPNO>' as a placeholder for the 19472 "update" flag in the corresponding load or store instruction. 19473 For example: 19474 19475 asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val)); 19476 19477 is correct but: 19478 19479 asm ("st %1,%0" : "=m" (mem) : "r" (val)); 19480 19481 is not. Use `es' rather than `m' if you don't want the base 19482 register to be updated. 19483 19484 `es' 19485 A "stable" memory operand; that is, one which does not 19486 include any automodification of the base register. Unlike 19487 `m', this constraint can be used in `asm' statements that 19488 might access the operand several times, or that might not 19489 access it at all. 19490 19491 `Q' 19492 Memory operand that is an offset from a register (it is 19493 usually better to use `m' or `es' in `asm' statements) 19494 19495 `Z' 19496 Memory operand that is an indexed or indirect from a register 19497 (it is usually better to use `m' or `es' in `asm' statements) 19498 19499 `R' 19500 AIX TOC entry 19501 19502 `a' 19503 Address operand that is an indexed or indirect from a 19504 register (`p' is preferable for `asm' statements) 19505 19506 `S' 19507 Constant suitable as a 64-bit mask operand 19508 19509 `T' 19510 Constant suitable as a 32-bit mask operand 19511 19512 `U' 19513 System V Release 4 small data area reference 19514 19515 `t' 19516 AND masks that can be performed by two rldic{l, r} 19517 instructions 19518 19519 `W' 19520 Vector constant that does not require memory 19521 19522 `j' 19523 Vector constant that is all zeros. 19524 19525 19526_Intel 386--`config/i386/constraints.md'_ 19527 19528 `R' 19529 Legacy register--the eight integer registers available on all 19530 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 19531 19532 `q' 19533 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 19534 `c', and `d'; in 64-bit mode, any integer register. 19535 19536 `Q' 19537 Any register accessible as `Rh': `a', `b', `c', and `d'. 19538 19539 `l' 19540 Any register that can be used as the index in a base+index 19541 memory access: that is, any general register except the stack 19542 pointer. 19543 19544 `a' 19545 The `a' register. 19546 19547 `b' 19548 The `b' register. 19549 19550 `c' 19551 The `c' register. 19552 19553 `d' 19554 The `d' register. 19555 19556 `S' 19557 The `si' register. 19558 19559 `D' 19560 The `di' register. 19561 19562 `A' 19563 The `a' and `d' registers, as a pair (for instructions that 19564 return half the result in one and half in the other). 19565 19566 `f' 19567 Any 80387 floating-point (stack) register. 19568 19569 `t' 19570 Top of 80387 floating-point stack (`%st(0)'). 19571 19572 `u' 19573 Second from top of 80387 floating-point stack (`%st(1)'). 19574 19575 `y' 19576 Any MMX register. 19577 19578 `x' 19579 Any SSE register. 19580 19581 `Yz' 19582 First SSE register (`%xmm0'). 19583 19584 `Y2' 19585 Any SSE register, when SSE2 is enabled. 19586 19587 `Yi' 19588 Any SSE register, when SSE2 and inter-unit moves are enabled. 19589 19590 `Ym' 19591 Any MMX register, when inter-unit moves are enabled. 19592 19593 `I' 19594 Integer constant in the range 0 ... 31, for 32-bit shifts. 19595 19596 `J' 19597 Integer constant in the range 0 ... 63, for 64-bit shifts. 19598 19599 `K' 19600 Signed 8-bit integer constant. 19601 19602 `L' 19603 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 19604 19605 `M' 19606 0, 1, 2, or 3 (shifts for the `lea' instruction). 19607 19608 `N' 19609 Unsigned 8-bit integer constant (for `in' and `out' 19610 instructions). 19611 19612 `O' 19613 Integer constant in the range 0 ... 127, for 128-bit shifts. 19614 19615 `G' 19616 Standard 80387 floating point constant. 19617 19618 `C' 19619 Standard SSE floating point constant. 19620 19621 `e' 19622 32-bit signed integer constant, or a symbolic reference known 19623 to fit that range (for immediate operands in sign-extending 19624 x86-64 instructions). 19625 19626 `Z' 19627 32-bit unsigned integer constant, or a symbolic reference 19628 known to fit that range (for immediate operands in 19629 zero-extending x86-64 instructions). 19630 19631 19632_Intel IA-64--`config/ia64/ia64.h'_ 19633 19634 `a' 19635 General register `r0' to `r3' for `addl' instruction 19636 19637 `b' 19638 Branch register 19639 19640 `c' 19641 Predicate register (`c' as in "conditional") 19642 19643 `d' 19644 Application register residing in M-unit 19645 19646 `e' 19647 Application register residing in I-unit 19648 19649 `f' 19650 Floating-point register 19651 19652 `m' 19653 Memory operand. Remember that `m' allows postincrement and 19654 postdecrement which require printing with `%Pn' on IA-64. 19655 Use `S' to disallow postincrement and postdecrement. 19656 19657 `G' 19658 Floating-point constant 0.0 or 1.0 19659 19660 `I' 19661 14-bit signed integer constant 19662 19663 `J' 19664 22-bit signed integer constant 19665 19666 `K' 19667 8-bit signed integer constant for logical instructions 19668 19669 `L' 19670 8-bit adjusted signed integer constant for compare pseudo-ops 19671 19672 `M' 19673 6-bit unsigned integer constant for shift counts 19674 19675 `N' 19676 9-bit signed integer constant for load and store 19677 postincrements 19678 19679 `O' 19680 The constant zero 19681 19682 `P' 19683 0 or -1 for `dep' instruction 19684 19685 `Q' 19686 Non-volatile memory for floating-point loads and stores 19687 19688 `R' 19689 Integer constant in the range 1 to 4 for `shladd' instruction 19690 19691 `S' 19692 Memory operand except postincrement and postdecrement 19693 19694_FRV--`config/frv/frv.h'_ 19695 19696 `a' 19697 Register in the class `ACC_REGS' (`acc0' to `acc7'). 19698 19699 `b' 19700 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 19701 19702 `c' 19703 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 19704 to `icc3'). 19705 19706 `d' 19707 Register in the class `GPR_REGS' (`gr0' to `gr63'). 19708 19709 `e' 19710 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 19711 registers are excluded not in the class but through the use 19712 of a machine mode larger than 4 bytes. 19713 19714 `f' 19715 Register in the class `FPR_REGS' (`fr0' to `fr63'). 19716 19717 `h' 19718 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 19719 registers are excluded not in the class but through the use 19720 of a machine mode larger than 4 bytes. 19721 19722 `l' 19723 Register in the class `LR_REG' (the `lr' register). 19724 19725 `q' 19726 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 19727 Register numbers not divisible by 4 are excluded not in the 19728 class but through the use of a machine mode larger than 8 19729 bytes. 19730 19731 `t' 19732 Register in the class `ICC_REGS' (`icc0' to `icc3'). 19733 19734 `u' 19735 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 19736 19737 `v' 19738 Register in the class `ICR_REGS' (`cc4' to `cc7'). 19739 19740 `w' 19741 Register in the class `FCR_REGS' (`cc0' to `cc3'). 19742 19743 `x' 19744 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 19745 Register numbers not divisible by 4 are excluded not in the 19746 class but through the use of a machine mode larger than 8 19747 bytes. 19748 19749 `z' 19750 Register in the class `SPR_REGS' (`lcr' and `lr'). 19751 19752 `A' 19753 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 19754 19755 `B' 19756 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 19757 19758 `C' 19759 Register in the class `CR_REGS' (`cc0' to `cc7'). 19760 19761 `G' 19762 Floating point constant zero 19763 19764 `I' 19765 6-bit signed integer constant 19766 19767 `J' 19768 10-bit signed integer constant 19769 19770 `L' 19771 16-bit signed integer constant 19772 19773 `M' 19774 16-bit unsigned integer constant 19775 19776 `N' 19777 12-bit signed integer constant that is negative--i.e. in the 19778 range of -2048 to -1 19779 19780 `O' 19781 Constant zero 19782 19783 `P' 19784 12-bit signed integer constant that is greater than 19785 zero--i.e. in the range of 1 to 2047. 19786 19787 19788_Blackfin family--`config/bfin/constraints.md'_ 19789 19790 `a' 19791 P register 19792 19793 `d' 19794 D register 19795 19796 `z' 19797 A call clobbered P register. 19798 19799 `qN' 19800 A single register. If N is in the range 0 to 7, the 19801 corresponding D register. If it is `A', then the register P0. 19802 19803 `D' 19804 Even-numbered D register 19805 19806 `W' 19807 Odd-numbered D register 19808 19809 `e' 19810 Accumulator register. 19811 19812 `A' 19813 Even-numbered accumulator register. 19814 19815 `B' 19816 Odd-numbered accumulator register. 19817 19818 `b' 19819 I register 19820 19821 `v' 19822 B register 19823 19824 `f' 19825 M register 19826 19827 `c' 19828 Registers used for circular buffering, i.e. I, B, or L 19829 registers. 19830 19831 `C' 19832 The CC register. 19833 19834 `t' 19835 LT0 or LT1. 19836 19837 `k' 19838 LC0 or LC1. 19839 19840 `u' 19841 LB0 or LB1. 19842 19843 `x' 19844 Any D, P, B, M, I or L register. 19845 19846 `y' 19847 Additional registers typically used only in prologues and 19848 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 19849 USP. 19850 19851 `w' 19852 Any register except accumulators or CC. 19853 19854 `Ksh' 19855 Signed 16 bit integer (in the range -32768 to 32767) 19856 19857 `Kuh' 19858 Unsigned 16 bit integer (in the range 0 to 65535) 19859 19860 `Ks7' 19861 Signed 7 bit integer (in the range -64 to 63) 19862 19863 `Ku7' 19864 Unsigned 7 bit integer (in the range 0 to 127) 19865 19866 `Ku5' 19867 Unsigned 5 bit integer (in the range 0 to 31) 19868 19869 `Ks4' 19870 Signed 4 bit integer (in the range -8 to 7) 19871 19872 `Ks3' 19873 Signed 3 bit integer (in the range -3 to 4) 19874 19875 `Ku3' 19876 Unsigned 3 bit integer (in the range 0 to 7) 19877 19878 `PN' 19879 Constant N, where N is a single-digit constant in the range 0 19880 to 4. 19881 19882 `PA' 19883 An integer equal to one of the MACFLAG_XXX constants that is 19884 suitable for use with either accumulator. 19885 19886 `PB' 19887 An integer equal to one of the MACFLAG_XXX constants that is 19888 suitable for use only with accumulator A1. 19889 19890 `M1' 19891 Constant 255. 19892 19893 `M2' 19894 Constant 65535. 19895 19896 `J' 19897 An integer constant with exactly a single bit set. 19898 19899 `L' 19900 An integer constant with all bits set except exactly one. 19901 19902 `H' 19903 19904 `Q' 19905 Any SYMBOL_REF. 19906 19907_M32C--`config/m32c/m32c.c'_ 19908 19909 `Rsp' 19910 `Rfb' 19911 `Rsb' 19912 `$sp', `$fb', `$sb'. 19913 19914 `Rcr' 19915 Any control register, when they're 16 bits wide (nothing if 19916 control registers are 24 bits wide) 19917 19918 `Rcl' 19919 Any control register, when they're 24 bits wide. 19920 19921 `R0w' 19922 `R1w' 19923 `R2w' 19924 `R3w' 19925 $r0, $r1, $r2, $r3. 19926 19927 `R02' 19928 $r0 or $r2, or $r2r0 for 32 bit values. 19929 19930 `R13' 19931 $r1 or $r3, or $r3r1 for 32 bit values. 19932 19933 `Rdi' 19934 A register that can hold a 64 bit value. 19935 19936 `Rhl' 19937 $r0 or $r1 (registers with addressable high/low bytes) 19938 19939 `R23' 19940 $r2 or $r3 19941 19942 `Raa' 19943 Address registers 19944 19945 `Raw' 19946 Address registers when they're 16 bits wide. 19947 19948 `Ral' 19949 Address registers when they're 24 bits wide. 19950 19951 `Rqi' 19952 Registers that can hold QI values. 19953 19954 `Rad' 19955 Registers that can be used with displacements ($a0, $a1, $sb). 19956 19957 `Rsi' 19958 Registers that can hold 32 bit values. 19959 19960 `Rhi' 19961 Registers that can hold 16 bit values. 19962 19963 `Rhc' 19964 Registers chat can hold 16 bit values, including all control 19965 registers. 19966 19967 `Rra' 19968 $r0 through R1, plus $a0 and $a1. 19969 19970 `Rfl' 19971 The flags register. 19972 19973 `Rmm' 19974 The memory-based pseudo-registers $mem0 through $mem15. 19975 19976 `Rpi' 19977 Registers that can hold pointers (16 bit registers for r8c, 19978 m16c; 24 bit registers for m32cm, m32c). 19979 19980 `Rpa' 19981 Matches multiple registers in a PARALLEL to form a larger 19982 register. Used to match function return values. 19983 19984 `Is3' 19985 -8 ... 7 19986 19987 `IS1' 19988 -128 ... 127 19989 19990 `IS2' 19991 -32768 ... 32767 19992 19993 `IU2' 19994 0 ... 65535 19995 19996 `In4' 19997 -8 ... -1 or 1 ... 8 19998 19999 `In5' 20000 -16 ... -1 or 1 ... 16 20001 20002 `In6' 20003 -32 ... -1 or 1 ... 32 20004 20005 `IM2' 20006 -65536 ... -1 20007 20008 `Ilb' 20009 An 8 bit value with exactly one bit set. 20010 20011 `Ilw' 20012 A 16 bit value with exactly one bit set. 20013 20014 `Sd' 20015 The common src/dest memory addressing modes. 20016 20017 `Sa' 20018 Memory addressed using $a0 or $a1. 20019 20020 `Si' 20021 Memory addressed with immediate addresses. 20022 20023 `Ss' 20024 Memory addressed using the stack pointer ($sp). 20025 20026 `Sf' 20027 Memory addressed using the frame base register ($fb). 20028 20029 `Ss' 20030 Memory addressed using the small base register ($sb). 20031 20032 `S1' 20033 $r1h 20034 20035_MeP--`config/mep/constraints.md'_ 20036 20037 `a' 20038 The $sp register. 20039 20040 `b' 20041 The $tp register. 20042 20043 `c' 20044 Any control register. 20045 20046 `d' 20047 Either the $hi or the $lo register. 20048 20049 `em' 20050 Coprocessor registers that can be directly loaded ($c0-$c15). 20051 20052 `ex' 20053 Coprocessor registers that can be moved to each other. 20054 20055 `er' 20056 Coprocessor registers that can be moved to core registers. 20057 20058 `h' 20059 The $hi register. 20060 20061 `j' 20062 The $rpc register. 20063 20064 `l' 20065 The $lo register. 20066 20067 `t' 20068 Registers which can be used in $tp-relative addressing. 20069 20070 `v' 20071 The $gp register. 20072 20073 `x' 20074 The coprocessor registers. 20075 20076 `y' 20077 The coprocessor control registers. 20078 20079 `z' 20080 The $0 register. 20081 20082 `A' 20083 User-defined register set A. 20084 20085 `B' 20086 User-defined register set B. 20087 20088 `C' 20089 User-defined register set C. 20090 20091 `D' 20092 User-defined register set D. 20093 20094 `I' 20095 Offsets for $gp-rel addressing. 20096 20097 `J' 20098 Constants that can be used directly with boolean insns. 20099 20100 `K' 20101 Constants that can be moved directly to registers. 20102 20103 `L' 20104 Small constants that can be added to registers. 20105 20106 `M' 20107 Long shift counts. 20108 20109 `N' 20110 Small constants that can be compared to registers. 20111 20112 `O' 20113 Constants that can be loaded into the top half of registers. 20114 20115 `S' 20116 Signed 8-bit immediates. 20117 20118 `T' 20119 Symbols encoded for $tp-rel or $gp-rel addressing. 20120 20121 `U' 20122 Non-constant addresses for loading/saving coprocessor 20123 registers. 20124 20125 `W' 20126 The top half of a symbol's value. 20127 20128 `Y' 20129 A register indirect address without offset. 20130 20131 `Z' 20132 Symbolic references to the control bus. 20133 20134 20135_MIPS--`config/mips/constraints.md'_ 20136 20137 `d' 20138 An address register. This is equivalent to `r' unless 20139 generating MIPS16 code. 20140 20141 `f' 20142 A floating-point register (if available). 20143 20144 `h' 20145 Formerly the `hi' register. This constraint is no longer 20146 supported. 20147 20148 `l' 20149 The `lo' register. Use this register to store values that are 20150 no bigger than a word. 20151 20152 `x' 20153 The concatenated `hi' and `lo' registers. Use this register 20154 to store doubleword values. 20155 20156 `c' 20157 A register suitable for use in an indirect jump. This will 20158 always be `$25' for `-mabicalls'. 20159 20160 `v' 20161 Register `$3'. Do not use this constraint in new code; it is 20162 retained only for compatibility with glibc. 20163 20164 `y' 20165 Equivalent to `r'; retained for backwards compatibility. 20166 20167 `z' 20168 A floating-point condition code register. 20169 20170 `I' 20171 A signed 16-bit constant (for arithmetic instructions). 20172 20173 `J' 20174 Integer zero. 20175 20176 `K' 20177 An unsigned 16-bit constant (for logic instructions). 20178 20179 `L' 20180 A signed 32-bit constant in which the lower 16 bits are zero. 20181 Such constants can be loaded using `lui'. 20182 20183 `M' 20184 A constant that cannot be loaded using `lui', `addiu' or 20185 `ori'. 20186 20187 `N' 20188 A constant in the range -65535 to -1 (inclusive). 20189 20190 `O' 20191 A signed 15-bit constant. 20192 20193 `P' 20194 A constant in the range 1 to 65535 (inclusive). 20195 20196 `G' 20197 Floating-point zero. 20198 20199 `R' 20200 An address that can be used in a non-macro load or store. 20201 20202_Motorola 680x0--`config/m68k/constraints.md'_ 20203 20204 `a' 20205 Address register 20206 20207 `d' 20208 Data register 20209 20210 `f' 20211 68881 floating-point register, if available 20212 20213 `I' 20214 Integer in the range 1 to 8 20215 20216 `J' 20217 16-bit signed number 20218 20219 `K' 20220 Signed number whose magnitude is greater than 0x80 20221 20222 `L' 20223 Integer in the range -8 to -1 20224 20225 `M' 20226 Signed number whose magnitude is greater than 0x100 20227 20228 `N' 20229 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20230 20231 `O' 20232 16 (for rotate using swap) 20233 20234 `P' 20235 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20236 20237 `R' 20238 Numbers that mov3q can handle 20239 20240 `G' 20241 Floating point constant that is not a 68881 constant 20242 20243 `S' 20244 Operands that satisfy 'm' when -mpcrel is in effect 20245 20246 `T' 20247 Operands that satisfy 's' when -mpcrel is not in effect 20248 20249 `Q' 20250 Address register indirect addressing mode 20251 20252 `U' 20253 Register offset addressing 20254 20255 `W' 20256 const_call_operand 20257 20258 `Cs' 20259 symbol_ref or const 20260 20261 `Ci' 20262 const_int 20263 20264 `C0' 20265 const_int 0 20266 20267 `Cj' 20268 Range of signed numbers that don't fit in 16 bits 20269 20270 `Cmvq' 20271 Integers valid for mvq 20272 20273 `Capsw' 20274 Integers valid for a moveq followed by a swap 20275 20276 `Cmvz' 20277 Integers valid for mvz 20278 20279 `Cmvs' 20280 Integers valid for mvs 20281 20282 `Ap' 20283 push_operand 20284 20285 `Ac' 20286 Non-register operands allowed in clr 20287 20288 20289_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 20290 20291 `a' 20292 Register `a' 20293 20294 `b' 20295 Register `b' 20296 20297 `d' 20298 Register `d' 20299 20300 `q' 20301 An 8-bit register 20302 20303 `t' 20304 Temporary soft register _.tmp 20305 20306 `u' 20307 A soft register _.d1 to _.d31 20308 20309 `w' 20310 Stack pointer register 20311 20312 `x' 20313 Register `x' 20314 20315 `y' 20316 Register `y' 20317 20318 `z' 20319 Pseudo register `z' (replaced by `x' or `y' at the end) 20320 20321 `A' 20322 An address register: x, y or z 20323 20324 `B' 20325 An address register: x or y 20326 20327 `D' 20328 Register pair (x:d) to form a 32-bit value 20329 20330 `L' 20331 Constants in the range -65536 to 65535 20332 20333 `M' 20334 Constants whose 16-bit low part is zero 20335 20336 `N' 20337 Constant integer 1 or -1 20338 20339 `O' 20340 Constant integer 16 20341 20342 `P' 20343 Constants in the range -8 to 2 20344 20345 20346_Moxie--`config/moxie/constraints.md'_ 20347 20348 `A' 20349 An absolute address 20350 20351 `B' 20352 An offset address 20353 20354 `W' 20355 A register indirect memory operand 20356 20357 `I' 20358 A constant in the range of 0 to 255. 20359 20360 `N' 20361 A constant in the range of 0 to -255. 20362 20363 20364_RX--`config/rx/constraints.md'_ 20365 20366 `Q' 20367 An address which does not involve register indirect 20368 addressing or pre/post increment/decrement addressing. 20369 20370 `Symbol' 20371 A symbol reference. 20372 20373 `Int08' 20374 A constant in the range -256 to 255, inclusive. 20375 20376 `Sint08' 20377 A constant in the range -128 to 127, inclusive. 20378 20379 `Sint16' 20380 A constant in the range -32768 to 32767, inclusive. 20381 20382 `Sint24' 20383 A constant in the range -8388608 to 8388607, inclusive. 20384 20385 `Uint04' 20386 A constant in the range 0 to 15, inclusive. 20387 20388 20389_SPARC--`config/sparc/sparc.h'_ 20390 20391 `f' 20392 Floating-point register on the SPARC-V8 architecture and 20393 lower floating-point register on the SPARC-V9 architecture. 20394 20395 `e' 20396 Floating-point register. It is equivalent to `f' on the 20397 SPARC-V8 architecture and contains both lower and upper 20398 floating-point registers on the SPARC-V9 architecture. 20399 20400 `c' 20401 Floating-point condition code register. 20402 20403 `d' 20404 Lower floating-point register. It is only valid on the 20405 SPARC-V9 architecture when the Visual Instruction Set is 20406 available. 20407 20408 `b' 20409 Floating-point register. It is only valid on the SPARC-V9 20410 architecture when the Visual Instruction Set is available. 20411 20412 `h' 20413 64-bit global or out register for the SPARC-V8+ architecture. 20414 20415 `D' 20416 A vector constant 20417 20418 `I' 20419 Signed 13-bit constant 20420 20421 `J' 20422 Zero 20423 20424 `K' 20425 32-bit constant with the low 12 bits clear (a constant that 20426 can be loaded with the `sethi' instruction) 20427 20428 `L' 20429 A constant in the range supported by `movcc' instructions 20430 20431 `M' 20432 A constant in the range supported by `movrcc' instructions 20433 20434 `N' 20435 Same as `K', except that it verifies that bits that are not 20436 in the lower 32-bit range are all zero. Must be used instead 20437 of `K' for modes wider than `SImode' 20438 20439 `O' 20440 The constant 4096 20441 20442 `G' 20443 Floating-point zero 20444 20445 `H' 20446 Signed 13-bit constant, sign-extended to 32 or 64 bits 20447 20448 `Q' 20449 Floating-point constant whose integral representation can be 20450 moved into an integer register using a single sethi 20451 instruction 20452 20453 `R' 20454 Floating-point constant whose integral representation can be 20455 moved into an integer register using a single mov instruction 20456 20457 `S' 20458 Floating-point constant whose integral representation can be 20459 moved into an integer register using a high/lo_sum 20460 instruction sequence 20461 20462 `T' 20463 Memory address aligned to an 8-byte boundary 20464 20465 `U' 20466 Even register 20467 20468 `W' 20469 Memory address for `e' constraint registers 20470 20471 `Y' 20472 Vector zero 20473 20474 20475_SPU--`config/spu/spu.h'_ 20476 20477 `a' 20478 An immediate which can be loaded with the il/ila/ilh/ilhu 20479 instructions. const_int is treated as a 64 bit value. 20480 20481 `c' 20482 An immediate for and/xor/or instructions. const_int is 20483 treated as a 64 bit value. 20484 20485 `d' 20486 An immediate for the `iohl' instruction. const_int is 20487 treated as a 64 bit value. 20488 20489 `f' 20490 An immediate which can be loaded with `fsmbi'. 20491 20492 `A' 20493 An immediate which can be loaded with the il/ila/ilh/ilhu 20494 instructions. const_int is treated as a 32 bit value. 20495 20496 `B' 20497 An immediate for most arithmetic instructions. const_int is 20498 treated as a 32 bit value. 20499 20500 `C' 20501 An immediate for and/xor/or instructions. const_int is 20502 treated as a 32 bit value. 20503 20504 `D' 20505 An immediate for the `iohl' instruction. const_int is 20506 treated as a 32 bit value. 20507 20508 `I' 20509 A constant in the range [-64, 63] for shift/rotate 20510 instructions. 20511 20512 `J' 20513 An unsigned 7-bit constant for conversion/nop/channel 20514 instructions. 20515 20516 `K' 20517 A signed 10-bit constant for most arithmetic instructions. 20518 20519 `M' 20520 A signed 16 bit immediate for `stop'. 20521 20522 `N' 20523 An unsigned 16-bit constant for `iohl' and `fsmbi'. 20524 20525 `O' 20526 An unsigned 7-bit constant whose 3 least significant bits are 20527 0. 20528 20529 `P' 20530 An unsigned 3-bit constant for 16-byte rotates and shifts 20531 20532 `R' 20533 Call operand, reg, for indirect calls 20534 20535 `S' 20536 Call operand, symbol, for relative calls. 20537 20538 `T' 20539 Call operand, const_int, for absolute calls. 20540 20541 `U' 20542 An immediate which can be loaded with the il/ila/ilh/ilhu 20543 instructions. const_int is sign extended to 128 bit. 20544 20545 `W' 20546 An immediate for shift and rotate instructions. const_int is 20547 treated as a 32 bit value. 20548 20549 `Y' 20550 An immediate for and/xor/or instructions. const_int is sign 20551 extended as a 128 bit. 20552 20553 `Z' 20554 An immediate for the `iohl' instruction. const_int is sign 20555 extended to 128 bit. 20556 20557 20558_S/390 and zSeries--`config/s390/s390.h'_ 20559 20560 `a' 20561 Address register (general purpose register except r0) 20562 20563 `c' 20564 Condition code register 20565 20566 `d' 20567 Data register (arbitrary general purpose register) 20568 20569 `f' 20570 Floating-point register 20571 20572 `I' 20573 Unsigned 8-bit constant (0-255) 20574 20575 `J' 20576 Unsigned 12-bit constant (0-4095) 20577 20578 `K' 20579 Signed 16-bit constant (-32768-32767) 20580 20581 `L' 20582 Value appropriate as displacement. 20583 `(0..4095)' 20584 for short displacement 20585 20586 `(-524288..524287)' 20587 for long displacement 20588 20589 `M' 20590 Constant integer with a value of 0x7fffffff. 20591 20592 `N' 20593 Multiple letter constraint followed by 4 parameter letters. 20594 `0..9:' 20595 number of the part counting from most to least 20596 significant 20597 20598 `H,Q:' 20599 mode of the part 20600 20601 `D,S,H:' 20602 mode of the containing operand 20603 20604 `0,F:' 20605 value of the other parts (F--all bits set) 20606 The constraint matches if the specified part of a constant 20607 has a value different from its other parts. 20608 20609 `Q' 20610 Memory reference without index register and with short 20611 displacement. 20612 20613 `R' 20614 Memory reference with index register and short displacement. 20615 20616 `S' 20617 Memory reference without index register but with long 20618 displacement. 20619 20620 `T' 20621 Memory reference with index register and long displacement. 20622 20623 `U' 20624 Pointer with short displacement. 20625 20626 `W' 20627 Pointer with long displacement. 20628 20629 `Y' 20630 Shift count operand. 20631 20632 20633_Score family--`config/score/score.h'_ 20634 20635 `d' 20636 Registers from r0 to r32. 20637 20638 `e' 20639 Registers from r0 to r16. 20640 20641 `t' 20642 r8--r11 or r22--r27 registers. 20643 20644 `h' 20645 hi register. 20646 20647 `l' 20648 lo register. 20649 20650 `x' 20651 hi + lo register. 20652 20653 `q' 20654 cnt register. 20655 20656 `y' 20657 lcb register. 20658 20659 `z' 20660 scb register. 20661 20662 `a' 20663 cnt + lcb + scb register. 20664 20665 `c' 20666 cr0--cr15 register. 20667 20668 `b' 20669 cp1 registers. 20670 20671 `f' 20672 cp2 registers. 20673 20674 `i' 20675 cp3 registers. 20676 20677 `j' 20678 cp1 + cp2 + cp3 registers. 20679 20680 `I' 20681 High 16-bit constant (32-bit constant with 16 LSBs zero). 20682 20683 `J' 20684 Unsigned 5 bit integer (in the range 0 to 31). 20685 20686 `K' 20687 Unsigned 16 bit integer (in the range 0 to 65535). 20688 20689 `L' 20690 Signed 16 bit integer (in the range -32768 to 32767). 20691 20692 `M' 20693 Unsigned 14 bit integer (in the range 0 to 16383). 20694 20695 `N' 20696 Signed 14 bit integer (in the range -8192 to 8191). 20697 20698 `Z' 20699 Any SYMBOL_REF. 20700 20701_Xstormy16--`config/stormy16/stormy16.h'_ 20702 20703 `a' 20704 Register r0. 20705 20706 `b' 20707 Register r1. 20708 20709 `c' 20710 Register r2. 20711 20712 `d' 20713 Register r8. 20714 20715 `e' 20716 Registers r0 through r7. 20717 20718 `t' 20719 Registers r0 and r1. 20720 20721 `y' 20722 The carry register. 20723 20724 `z' 20725 Registers r8 and r9. 20726 20727 `I' 20728 A constant between 0 and 3 inclusive. 20729 20730 `J' 20731 A constant that has exactly one bit set. 20732 20733 `K' 20734 A constant that has exactly one bit clear. 20735 20736 `L' 20737 A constant between 0 and 255 inclusive. 20738 20739 `M' 20740 A constant between -255 and 0 inclusive. 20741 20742 `N' 20743 A constant between -3 and 0 inclusive. 20744 20745 `O' 20746 A constant between 1 and 4 inclusive. 20747 20748 `P' 20749 A constant between -4 and -1 inclusive. 20750 20751 `Q' 20752 A memory reference that is a stack push. 20753 20754 `R' 20755 A memory reference that is a stack pop. 20756 20757 `S' 20758 A memory reference that refers to a constant address of known 20759 value. 20760 20761 `T' 20762 The register indicated by Rx (not implemented yet). 20763 20764 `U' 20765 A constant that is not between 2 and 15 inclusive. 20766 20767 `Z' 20768 The constant 0. 20769 20770 20771_Xtensa--`config/xtensa/constraints.md'_ 20772 20773 `a' 20774 General-purpose 32-bit register 20775 20776 `b' 20777 One-bit boolean register 20778 20779 `A' 20780 MAC16 40-bit accumulator register 20781 20782 `I' 20783 Signed 12-bit integer constant, for use in MOVI instructions 20784 20785 `J' 20786 Signed 8-bit integer constant, for use in ADDI instructions 20787 20788 `K' 20789 Integer constant valid for BccI instructions 20790 20791 `L' 20792 Unsigned constant valid for BccUI instructions 20793 20794 20795 20796 20797File: gccint.info, Node: Disable Insn Alternatives, Next: Machine Constraints, Prev: Modifiers, Up: Constraints 20798 2079916.8.6 Disable insn alternatives using the `enabled' attribute 20800-------------------------------------------------------------- 20801 20802The `enabled' insn attribute may be used to disable certain insn 20803alternatives for machine-specific reasons. This is useful when adding 20804new instructions to an existing pattern which are only available for 20805certain cpu architecture levels as specified with the `-march=' option. 20806 20807 If an insn alternative is disabled, then it will never be used. The 20808compiler treats the constraints for the disabled alternative as 20809unsatisfiable. 20810 20811 In order to make use of the `enabled' attribute a back end has to add 20812in the machine description files: 20813 20814 1. A definition of the `enabled' insn attribute. The attribute is 20815 defined as usual using the `define_attr' command. This definition 20816 should be based on other insn attributes and/or target flags. The 20817 `enabled' attribute is a numeric attribute and should evaluate to 20818 `(const_int 1)' for an enabled alternative and to `(const_int 0)' 20819 otherwise. 20820 20821 2. A definition of another insn attribute used to describe for what 20822 reason an insn alternative might be available or not. E.g. 20823 `cpu_facility' as in the example below. 20824 20825 3. An assignment for the second attribute to each insn definition 20826 combining instructions which are not all available under the same 20827 circumstances. (Note: It obviously only makes sense for 20828 definitions with more than one alternative. Otherwise the insn 20829 pattern should be disabled or enabled using the insn condition.) 20830 20831 E.g. the following two patterns could easily be merged using the 20832`enabled' attribute: 20833 20834 20835 (define_insn "*movdi_old" 20836 [(set (match_operand:DI 0 "register_operand" "=d") 20837 (match_operand:DI 1 "register_operand" " d"))] 20838 "!TARGET_NEW" 20839 "lgr %0,%1") 20840 20841 (define_insn "*movdi_new" 20842 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 20843 (match_operand:DI 1 "register_operand" " d,d,f"))] 20844 "TARGET_NEW" 20845 "@ 20846 lgr %0,%1 20847 ldgr %0,%1 20848 lgdr %0,%1") 20849 20850 to: 20851 20852 20853 (define_insn "*movdi_combined" 20854 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 20855 (match_operand:DI 1 "register_operand" " d,d,f"))] 20856 "" 20857 "@ 20858 lgr %0,%1 20859 ldgr %0,%1 20860 lgdr %0,%1" 20861 [(set_attr "cpu_facility" "*,new,new")]) 20862 20863 with the `enabled' attribute defined like this: 20864 20865 20866 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 20867 20868 (define_attr "enabled" "" 20869 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 20870 (and (eq_attr "cpu_facility" "new") 20871 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 20872 (const_int 1)] 20873 (const_int 0))) 20874 20875 20876File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Machine Constraints, Up: Constraints 20877 2087816.8.7 Defining Machine-Specific Constraints 20879-------------------------------------------- 20880 20881Machine-specific constraints fall into two categories: register and 20882non-register constraints. Within the latter category, constraints 20883which allow subsets of all possible memory or address operands should 20884be specially marked, to give `reload' more information. 20885 20886 Machine-specific constraints can be given names of arbitrary length, 20887but they must be entirely composed of letters, digits, underscores 20888(`_'), and angle brackets (`< >'). Like C identifiers, they must begin 20889with a letter or underscore. 20890 20891 In order to avoid ambiguity in operand constraint strings, no 20892constraint can have a name that begins with any other constraint's 20893name. For example, if `x' is defined as a constraint name, `xy' may 20894not be, and vice versa. As a consequence of this rule, no constraint 20895may begin with one of the generic constraint letters: `E F V X g i m n 20896o p r s'. 20897 20898 Register constraints correspond directly to register classes. *Note 20899Register Classes::. There is thus not much flexibility in their 20900definitions. 20901 20902 -- MD Expression: define_register_constraint name regclass docstring 20903 All three arguments are string constants. NAME is the name of the 20904 constraint, as it will appear in `match_operand' expressions. If 20905 NAME is a multi-letter constraint its length shall be the same for 20906 all constraints starting with the same letter. REGCLASS can be 20907 either the name of the corresponding register class (*note 20908 Register Classes::), or a C expression which evaluates to the 20909 appropriate register class. If it is an expression, it must have 20910 no side effects, and it cannot look at the operand. The usual use 20911 of expressions is to map some register constraints to `NO_REGS' 20912 when the register class is not available on a given 20913 subarchitecture. 20914 20915 DOCSTRING is a sentence documenting the meaning of the constraint. 20916 Docstrings are explained further below. 20917 20918 Non-register constraints are more like predicates: the constraint 20919definition gives a Boolean expression which indicates whether the 20920constraint matches. 20921 20922 -- MD Expression: define_constraint name docstring exp 20923 The NAME and DOCSTRING arguments are the same as for 20924 `define_register_constraint', but note that the docstring comes 20925 immediately after the name for these expressions. EXP is an RTL 20926 expression, obeying the same rules as the RTL expressions in 20927 predicate definitions. *Note Defining Predicates::, for details. 20928 If it evaluates true, the constraint matches; if it evaluates 20929 false, it doesn't. Constraint expressions should indicate which 20930 RTL codes they might match, just like predicate expressions. 20931 20932 `match_test' C expressions have access to the following variables: 20933 20934 OP 20935 The RTL object defining the operand. 20936 20937 MODE 20938 The machine mode of OP. 20939 20940 IVAL 20941 `INTVAL (OP)', if OP is a `const_int'. 20942 20943 HVAL 20944 `CONST_DOUBLE_HIGH (OP)', if OP is an integer `const_double'. 20945 20946 LVAL 20947 `CONST_DOUBLE_LOW (OP)', if OP is an integer `const_double'. 20948 20949 RVAL 20950 `CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 20951 `const_double'. 20952 20953 The *VAL variables should only be used once another piece of the 20954 expression has verified that OP is the appropriate kind of RTL 20955 object. 20956 20957 Most non-register constraints should be defined with 20958`define_constraint'. The remaining two definition expressions are only 20959appropriate for constraints that should be handled specially by 20960`reload' if they fail to match. 20961 20962 -- MD Expression: define_memory_constraint name docstring exp 20963 Use this expression for constraints that match a subset of all 20964 memory operands: that is, `reload' can make them match by 20965 converting the operand to the form `(mem (reg X))', where X is a 20966 base register (from the register class specified by 20967 `BASE_REG_CLASS', *note Register Classes::). 20968 20969 For example, on the S/390, some instructions do not accept 20970 arbitrary memory references, but only those that do not make use 20971 of an index register. The constraint letter `Q' is defined to 20972 represent a memory address of this type. If `Q' is defined with 20973 `define_memory_constraint', a `Q' constraint can handle any memory 20974 operand, because `reload' knows it can simply copy the memory 20975 address into a base register if required. This is analogous to 20976 the way an `o' constraint can handle any memory operand. 20977 20978 The syntax and semantics are otherwise identical to 20979 `define_constraint'. 20980 20981 -- MD Expression: define_address_constraint name docstring exp 20982 Use this expression for constraints that match a subset of all 20983 address operands: that is, `reload' can make the constraint match 20984 by converting the operand to the form `(reg X)', again with X a 20985 base register. 20986 20987 Constraints defined with `define_address_constraint' can only be 20988 used with the `address_operand' predicate, or machine-specific 20989 predicates that work the same way. They are treated analogously to 20990 the generic `p' constraint. 20991 20992 The syntax and semantics are otherwise identical to 20993 `define_constraint'. 20994 20995 For historical reasons, names beginning with the letters `G H' are 20996reserved for constraints that match only `const_double's, and names 20997beginning with the letters `I J K L M N O P' are reserved for 20998constraints that match only `const_int's. This may change in the 20999future. For the time being, constraints with these names must be 21000written in a stylized form, so that `genpreds' can tell you did it 21001correctly: 21002 21003 (define_constraint "[GHIJKLMNOP]..." 21004 "DOC..." 21005 (and (match_code "const_int") ; `const_double' for G/H 21006 CONDITION...)) ; usually a `match_test' 21007 21008 It is fine to use names beginning with other letters for constraints 21009that match `const_double's or `const_int's. 21010 21011 Each docstring in a constraint definition should be one or more 21012complete sentences, marked up in Texinfo format. _They are currently 21013unused._ In the future they will be copied into the GCC manual, in 21014*note Machine Constraints::, replacing the hand-maintained tables 21015currently found in that section. Also, in the future the compiler may 21016use this to give more helpful diagnostics when poor choice of `asm' 21017constraints causes a reload failure. 21018 21019 If you put the pseudo-Texinfo directive `@internal' at the beginning 21020of a docstring, then (in the future) it will appear only in the 21021internals manual's version of the machine-specific constraint tables. 21022Use this for constraints that should not appear in `asm' statements. 21023 21024 21025File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 21026 2102716.8.8 Testing constraints from C 21028--------------------------------- 21029 21030It is occasionally useful to test a constraint from C code rather than 21031implicitly via the constraint string in a `match_operand'. The 21032generated file `tm_p.h' declares a few interfaces for working with 21033machine-specific constraints. None of these interfaces work with the 21034generic constraints described in *note Simple Constraints::. This may 21035change in the future. 21036 21037 *Warning:* `tm_p.h' may declare other functions that operate on 21038constraints, besides the ones documented here. Do not use those 21039functions from machine-dependent code. They exist to implement the old 21040constraint interface that machine-independent components of the 21041compiler still expect. They will change or disappear in the future. 21042 21043 Some valid constraint names are not valid C identifiers, so there is a 21044mangling scheme for referring to them from C. Constraint names that do 21045not contain angle brackets or underscores are left unchanged. 21046Underscores are doubled, each `<' is replaced with `_l', and each `>' 21047with `_g'. Here are some examples: 21048 21049 *Original* *Mangled* 21050 `x' `x' 21051 `P42x' `P42x' 21052 `P4_x' `P4__x' 21053 `P4>x' `P4_gx' 21054 `P4>>' `P4_g_g' 21055 `P4_g>' `P4__g_g' 21056 21057 Throughout this section, the variable C is either a constraint in the 21058abstract sense, or a constant from `enum constraint_num'; the variable 21059M is a mangled constraint name (usually as part of a larger identifier). 21060 21061 -- Enum: constraint_num 21062 For each machine-specific constraint, there is a corresponding 21063 enumeration constant: `CONSTRAINT_' plus the mangled name of the 21064 constraint. Functions that take an `enum constraint_num' as an 21065 argument expect one of these constants. 21066 21067 Machine-independent constraints do not have associated constants. 21068 This may change in the future. 21069 21070 -- Function: inline bool satisfies_constraint_M (rtx EXP) 21071 For each machine-specific, non-register constraint M, there is one 21072 of these functions; it returns `true' if EXP satisfies the 21073 constraint. These functions are only visible if `rtl.h' was 21074 included before `tm_p.h'. 21075 21076 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 21077 C) 21078 Like the `satisfies_constraint_M' functions, but the constraint to 21079 test is given as an argument, C. If C specifies a register 21080 constraint, this function will always return `false'. 21081 21082 -- Function: enum reg_class regclass_for_constraint (enum 21083 constraint_num C) 21084 Returns the register class associated with C. If C is not a 21085 register constraint, or those registers are not available for the 21086 currently selected subtarget, returns `NO_REGS'. 21087 21088 Here is an example use of `satisfies_constraint_M'. In peephole 21089optimizations (*note Peephole Definitions::), operand constraint 21090strings are ignored, so if there are relevant constraints, they must be 21091tested in the C condition. In the example, the optimization is applied 21092if operand 2 does _not_ satisfy the `K' constraint. (This is a 21093simplified version of a peephole definition from the i386 machine 21094description.) 21095 21096 (define_peephole2 21097 [(match_scratch:SI 3 "r") 21098 (set (match_operand:SI 0 "register_operand" "") 21099 (mult:SI (match_operand:SI 1 "memory_operand" "") 21100 (match_operand:SI 2 "immediate_operand" "")))] 21101 21102 "!satisfies_constraint_K (operands[2])" 21103 21104 [(set (match_dup 3) (match_dup 1)) 21105 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 21106 21107 "") 21108 21109 21110File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 21111 2111216.9 Standard Pattern Names For Generation 21113========================================== 21114 21115Here is a table of the instruction names that are meaningful in the RTL 21116generation pass of the compiler. Giving one of these names to an 21117instruction pattern tells the RTL generation pass that it can use the 21118pattern to accomplish a certain task. 21119 21120`movM' 21121 Here M stands for a two-letter machine mode name, in lowercase. 21122 This instruction pattern moves data with that machine mode from 21123 operand 1 to operand 0. For example, `movsi' moves full-word data. 21124 21125 If operand 0 is a `subreg' with mode M of a register whose own 21126 mode is wider than M, the effect of this instruction is to store 21127 the specified value in the part of the register that corresponds 21128 to mode M. Bits outside of M, but which are within the same 21129 target word as the `subreg' are undefined. Bits which are outside 21130 the target word are left unchanged. 21131 21132 This class of patterns is special in several ways. First of all, 21133 each of these names up to and including full word size _must_ be 21134 defined, because there is no other way to copy a datum from one 21135 place to another. If there are patterns accepting operands in 21136 larger modes, `movM' must be defined for integer modes of those 21137 sizes. 21138 21139 Second, these patterns are not used solely in the RTL generation 21140 pass. Even the reload pass can generate move insns to copy values 21141 from stack slots into temporary registers. When it does so, one 21142 of the operands is a hard register and the other is an operand 21143 that can need to be reloaded into a register. 21144 21145 Therefore, when given such a pair of operands, the pattern must 21146 generate RTL which needs no reloading and needs no temporary 21147 registers--no registers other than the operands. For example, if 21148 you support the pattern with a `define_expand', then in such a 21149 case the `define_expand' mustn't call `force_reg' or any other such 21150 function which might generate new pseudo registers. 21151 21152 This requirement exists even for subword modes on a RISC machine 21153 where fetching those modes from memory normally requires several 21154 insns and some temporary registers. 21155 21156 During reload a memory reference with an invalid address may be 21157 passed as an operand. Such an address will be replaced with a 21158 valid address later in the reload pass. In this case, nothing may 21159 be done with the address except to use it as it stands. If it is 21160 copied, it will not be replaced with a valid address. No attempt 21161 should be made to make such an address into a valid address and no 21162 routine (such as `change_address') that will do so may be called. 21163 Note that `general_operand' will fail when applied to such an 21164 address. 21165 21166 The global variable `reload_in_progress' (which must be explicitly 21167 declared if required) can be used to determine whether such special 21168 handling is required. 21169 21170 The variety of operands that have reloads depends on the rest of 21171 the machine description, but typically on a RISC machine these can 21172 only be pseudo registers that did not get hard registers, while on 21173 other machines explicit memory references will get optional 21174 reloads. 21175 21176 If a scratch register is required to move an object to or from 21177 memory, it can be allocated using `gen_reg_rtx' prior to life 21178 analysis. 21179 21180 If there are cases which need scratch registers during or after 21181 reload, you must provide an appropriate secondary_reload target 21182 hook. 21183 21184 The macro `can_create_pseudo_p' can be used to determine if it is 21185 unsafe to create new pseudo registers. If this variable is 21186 nonzero, then it is unsafe to call `gen_reg_rtx' to allocate a new 21187 pseudo. 21188 21189 The constraints on a `movM' must permit moving any hard register 21190 to any other hard register provided that `HARD_REGNO_MODE_OK' 21191 permits mode M in both registers and `REGISTER_MOVE_COST' applied 21192 to their classes returns a value of 2. 21193 21194 It is obligatory to support floating point `movM' instructions 21195 into and out of any registers that can hold fixed point values, 21196 because unions and structures (which have modes `SImode' or 21197 `DImode') can be in those registers and they may have floating 21198 point members. 21199 21200 There may also be a need to support fixed point `movM' 21201 instructions in and out of floating point registers. 21202 Unfortunately, I have forgotten why this was so, and I don't know 21203 whether it is still true. If `HARD_REGNO_MODE_OK' rejects fixed 21204 point values in floating point registers, then the constraints of 21205 the fixed point `movM' instructions must be designed to avoid ever 21206 trying to reload into a floating point register. 21207 21208`reload_inM' 21209`reload_outM' 21210 These named patterns have been obsoleted by the target hook 21211 `secondary_reload'. 21212 21213 Like `movM', but used when a scratch register is required to move 21214 between operand 0 and operand 1. Operand 2 describes the scratch 21215 register. See the discussion of the `SECONDARY_RELOAD_CLASS' 21216 macro in *note Register Classes::. 21217 21218 There are special restrictions on the form of the `match_operand's 21219 used in these patterns. First, only the predicate for the reload 21220 operand is examined, i.e., `reload_in' examines operand 1, but not 21221 the predicates for operand 0 or 2. Second, there may be only one 21222 alternative in the constraints. Third, only a single register 21223 class letter may be used for the constraint; subsequent constraint 21224 letters are ignored. As a special exception, an empty constraint 21225 string matches the `ALL_REGS' register class. This may relieve 21226 ports of the burden of defining an `ALL_REGS' constraint letter 21227 just for these patterns. 21228 21229`movstrictM' 21230 Like `movM' except that if operand 0 is a `subreg' with mode M of 21231 a register whose natural mode is wider, the `movstrictM' 21232 instruction is guaranteed not to alter any of the register except 21233 the part which belongs to mode M. 21234 21235`movmisalignM' 21236 This variant of a move pattern is designed to load or store a value 21237 from a memory address that is not naturally aligned for its mode. 21238 For a store, the memory will be in operand 0; for a load, the 21239 memory will be in operand 1. The other operand is guaranteed not 21240 to be a memory, so that it's easy to tell whether this is a load 21241 or store. 21242 21243 This pattern is used by the autovectorizer, and when expanding a 21244 `MISALIGNED_INDIRECT_REF' expression. 21245 21246`load_multiple' 21247 Load several consecutive memory locations into consecutive 21248 registers. Operand 0 is the first of the consecutive registers, 21249 operand 1 is the first memory location, and operand 2 is a 21250 constant: the number of consecutive registers. 21251 21252 Define this only if the target machine really has such an 21253 instruction; do not define this if the most efficient way of 21254 loading consecutive registers from memory is to do them one at a 21255 time. 21256 21257 On some machines, there are restrictions as to which consecutive 21258 registers can be stored into memory, such as particular starting or 21259 ending register numbers or only a range of valid counts. For those 21260 machines, use a `define_expand' (*note Expander Definitions::) and 21261 make the pattern fail if the restrictions are not met. 21262 21263 Write the generated insn as a `parallel' with elements being a 21264 `set' of one register from the appropriate memory location (you may 21265 also need `use' or `clobber' elements). Use a `match_parallel' 21266 (*note RTL Template::) to recognize the insn. See `rs6000.md' for 21267 examples of the use of this insn pattern. 21268 21269`store_multiple' 21270 Similar to `load_multiple', but store several consecutive registers 21271 into consecutive memory locations. Operand 0 is the first of the 21272 consecutive memory locations, operand 1 is the first register, and 21273 operand 2 is a constant: the number of consecutive registers. 21274 21275`vec_setM' 21276 Set given field in the vector value. Operand 0 is the vector to 21277 modify, operand 1 is new value of field and operand 2 specify the 21278 field index. 21279 21280`vec_extractM' 21281 Extract given field from the vector value. Operand 1 is the 21282 vector, operand 2 specify field index and operand 0 place to store 21283 value into. 21284 21285`vec_extract_evenM' 21286 Extract even elements from the input vectors (operand 1 and 21287 operand 2). The even elements of operand 2 are concatenated to 21288 the even elements of operand 1 in their original order. The result 21289 is stored in operand 0. The output and input vectors should have 21290 the same modes. 21291 21292`vec_extract_oddM' 21293 Extract odd elements from the input vectors (operand 1 and operand 21294 2). The odd elements of operand 2 are concatenated to the odd 21295 elements of operand 1 in their original order. The result is 21296 stored in operand 0. The output and input vectors should have the 21297 same modes. 21298 21299`vec_interleave_highM' 21300 Merge high elements of the two input vectors into the output 21301 vector. The output and input vectors should have the same modes 21302 (`N' elements). The high `N/2' elements of the first input vector 21303 are interleaved with the high `N/2' elements of the second input 21304 vector. 21305 21306`vec_interleave_lowM' 21307 Merge low elements of the two input vectors into the output 21308 vector. The output and input vectors should have the same modes 21309 (`N' elements). The low `N/2' elements of the first input vector 21310 are interleaved with the low `N/2' elements of the second input 21311 vector. 21312 21313`vec_initM' 21314 Initialize the vector to given values. Operand 0 is the vector to 21315 initialize and operand 1 is parallel containing values for 21316 individual fields. 21317 21318`pushM1' 21319 Output a push instruction. Operand 0 is value to push. Used only 21320 when `PUSH_ROUNDING' is defined. For historical reason, this 21321 pattern may be missing and in such case an `mov' expander is used 21322 instead, with a `MEM' expression forming the push operation. The 21323 `mov' expander method is deprecated. 21324 21325`addM3' 21326 Add operand 2 and operand 1, storing the result in operand 0. All 21327 operands must have mode M. This can be used even on two-address 21328 machines, by means of constraints requiring operands 1 and 0 to be 21329 the same location. 21330 21331`ssaddM3', `usaddM3' 21332 21333`subM3', `sssubM3', `ussubM3' 21334 21335`mulM3', `ssmulM3', `usmulM3' 21336`divM3', `ssdivM3' 21337`udivM3', `usdivM3' 21338`modM3', `umodM3' 21339`uminM3', `umaxM3' 21340`andM3', `iorM3', `xorM3' 21341 Similar, for other arithmetic operations. 21342 21343`sminM3', `smaxM3' 21344 Signed minimum and maximum operations. When used with floating 21345 point, if both operands are zeros, or if either operand is `NaN', 21346 then it is unspecified which of the two operands is returned as 21347 the result. 21348 21349`reduc_smin_M', `reduc_smax_M' 21350 Find the signed minimum/maximum of the elements of a vector. The 21351 vector is operand 1, and the scalar result is stored in the least 21352 significant bits of operand 0 (also a vector). The output and 21353 input vector should have the same modes. 21354 21355`reduc_umin_M', `reduc_umax_M' 21356 Find the unsigned minimum/maximum of the elements of a vector. The 21357 vector is operand 1, and the scalar result is stored in the least 21358 significant bits of operand 0 (also a vector). The output and 21359 input vector should have the same modes. 21360 21361`reduc_splus_M' 21362 Compute the sum of the signed elements of a vector. The vector is 21363 operand 1, and the scalar result is stored in the least 21364 significant bits of operand 0 (also a vector). The output and 21365 input vector should have the same modes. 21366 21367`reduc_uplus_M' 21368 Compute the sum of the unsigned elements of a vector. The vector 21369 is operand 1, and the scalar result is stored in the least 21370 significant bits of operand 0 (also a vector). The output and 21371 input vector should have the same modes. 21372 21373`sdot_prodM' 21374 21375`udot_prodM' 21376 Compute the sum of the products of two signed/unsigned elements. 21377 Operand 1 and operand 2 are of the same mode. Their product, which 21378 is of a wider mode, is computed and added to operand 3. Operand 3 21379 is of a mode equal or wider than the mode of the product. The 21380 result is placed in operand 0, which is of the same mode as 21381 operand 3. 21382 21383`ssum_widenM3' 21384 21385`usum_widenM3' 21386 Operands 0 and 2 are of the same mode, which is wider than the 21387 mode of operand 1. Add operand 1 to operand 2 and place the 21388 widened result in operand 0. (This is used express accumulation of 21389 elements into an accumulator of a wider mode.) 21390 21391`vec_shl_M', `vec_shr_M' 21392 Whole vector left/right shift in bits. Operand 1 is a vector to 21393 be shifted. Operand 2 is an integer shift amount in bits. 21394 Operand 0 is where the resulting shifted vector is stored. The 21395 output and input vectors should have the same modes. 21396 21397`vec_pack_trunc_M' 21398 Narrow (demote) and merge the elements of two vectors. Operands 1 21399 and 2 are vectors of the same mode having N integral or floating 21400 point elements of size S. Operand 0 is the resulting vector in 21401 which 2*N elements of size N/2 are concatenated after narrowing 21402 them down using truncation. 21403 21404`vec_pack_ssat_M', `vec_pack_usat_M' 21405 Narrow (demote) and merge the elements of two vectors. Operands 1 21406 and 2 are vectors of the same mode having N integral elements of 21407 size S. Operand 0 is the resulting vector in which the elements 21408 of the two input vectors are concatenated after narrowing them 21409 down using signed/unsigned saturating arithmetic. 21410 21411`vec_pack_sfix_trunc_M', `vec_pack_ufix_trunc_M' 21412 Narrow, convert to signed/unsigned integral type and merge the 21413 elements of two vectors. Operands 1 and 2 are vectors of the same 21414 mode having N floating point elements of size S. Operand 0 is the 21415 resulting vector in which 2*N elements of size N/2 are 21416 concatenated. 21417 21418`vec_unpacks_hi_M', `vec_unpacks_lo_M' 21419 Extract and widen (promote) the high/low part of a vector of signed 21420 integral or floating point elements. The input vector (operand 1) 21421 has N elements of size S. Widen (promote) the high/low elements 21422 of the vector using signed or floating point extension and place 21423 the resulting N/2 values of size 2*S in the output vector (operand 21424 0). 21425 21426`vec_unpacku_hi_M', `vec_unpacku_lo_M' 21427 Extract and widen (promote) the high/low part of a vector of 21428 unsigned integral elements. The input vector (operand 1) has N 21429 elements of size S. Widen (promote) the high/low elements of the 21430 vector using zero extension and place the resulting N/2 values of 21431 size 2*S in the output vector (operand 0). 21432 21433`vec_unpacks_float_hi_M', `vec_unpacks_float_lo_M' 21434`vec_unpacku_float_hi_M', `vec_unpacku_float_lo_M' 21435 Extract, convert to floating point type and widen the high/low 21436 part of a vector of signed/unsigned integral elements. The input 21437 vector (operand 1) has N elements of size S. Convert the high/low 21438 elements of the vector using floating point conversion and place 21439 the resulting N/2 values of size 2*S in the output vector (operand 21440 0). 21441 21442`vec_widen_umult_hi_M', `vec_widen_umult_lo_M' 21443`vec_widen_smult_hi_M', `vec_widen_smult_lo_M' 21444 Signed/Unsigned widening multiplication. The two inputs (operands 21445 1 and 2) are vectors with N signed/unsigned elements of size S. 21446 Multiply the high/low elements of the two vectors, and put the N/2 21447 products of size 2*S in the output vector (operand 0). 21448 21449`mulhisi3' 21450 Multiply operands 1 and 2, which have mode `HImode', and store a 21451 `SImode' product in operand 0. 21452 21453`mulqihi3', `mulsidi3' 21454 Similar widening-multiplication instructions of other widths. 21455 21456`umulqihi3', `umulhisi3', `umulsidi3' 21457 Similar widening-multiplication instructions that do unsigned 21458 multiplication. 21459 21460`usmulqihi3', `usmulhisi3', `usmulsidi3' 21461 Similar widening-multiplication instructions that interpret the 21462 first operand as unsigned and the second operand as signed, then 21463 do a signed multiplication. 21464 21465`smulM3_highpart' 21466 Perform a signed multiplication of operands 1 and 2, which have 21467 mode M, and store the most significant half of the product in 21468 operand 0. The least significant half of the product is discarded. 21469 21470`umulM3_highpart' 21471 Similar, but the multiplication is unsigned. 21472 21473`maddMN4' 21474 Multiply operands 1 and 2, sign-extend them to mode N, add operand 21475 3, and store the result in operand 0. Operands 1 and 2 have mode 21476 M and operands 0 and 3 have mode N. Both modes must be integer or 21477 fixed-point modes and N must be twice the size of M. 21478 21479 In other words, `maddMN4' is like `mulMN3' except that it also 21480 adds operand 3. 21481 21482 These instructions are not allowed to `FAIL'. 21483 21484`umaddMN4' 21485 Like `maddMN4', but zero-extend the multiplication operands 21486 instead of sign-extending them. 21487 21488`ssmaddMN4' 21489 Like `maddMN4', but all involved operations must be 21490 signed-saturating. 21491 21492`usmaddMN4' 21493 Like `umaddMN4', but all involved operations must be 21494 unsigned-saturating. 21495 21496`msubMN4' 21497 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 21498 result from operand 3, and store the result in operand 0. 21499 Operands 1 and 2 have mode M and operands 0 and 3 have mode N. 21500 Both modes must be integer or fixed-point modes and N must be twice 21501 the size of M. 21502 21503 In other words, `msubMN4' is like `mulMN3' except that it also 21504 subtracts the result from operand 3. 21505 21506 These instructions are not allowed to `FAIL'. 21507 21508`umsubMN4' 21509 Like `msubMN4', but zero-extend the multiplication operands 21510 instead of sign-extending them. 21511 21512`ssmsubMN4' 21513 Like `msubMN4', but all involved operations must be 21514 signed-saturating. 21515 21516`usmsubMN4' 21517 Like `umsubMN4', but all involved operations must be 21518 unsigned-saturating. 21519 21520`divmodM4' 21521 Signed division that produces both a quotient and a remainder. 21522 Operand 1 is divided by operand 2 to produce a quotient stored in 21523 operand 0 and a remainder stored in operand 3. 21524 21525 For machines with an instruction that produces both a quotient and 21526 a remainder, provide a pattern for `divmodM4' but do not provide 21527 patterns for `divM3' and `modM3'. This allows optimization in the 21528 relatively common case when both the quotient and remainder are 21529 computed. 21530 21531 If an instruction that just produces a quotient or just a remainder 21532 exists and is more efficient than the instruction that produces 21533 both, write the output routine of `divmodM4' to call 21534 `find_reg_note' and look for a `REG_UNUSED' note on the quotient 21535 or remainder and generate the appropriate instruction. 21536 21537`udivmodM4' 21538 Similar, but does unsigned division. 21539 21540`ashlM3', `ssashlM3', `usashlM3' 21541 Arithmetic-shift operand 1 left by a number of bits specified by 21542 operand 2, and store the result in operand 0. Here M is the mode 21543 of operand 0 and operand 1; operand 2's mode is specified by the 21544 instruction pattern, and the compiler will convert the operand to 21545 that mode before generating the instruction. The meaning of 21546 out-of-range shift counts can optionally be specified by 21547 `TARGET_SHIFT_TRUNCATION_MASK'. *Note 21548 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 21549 21550`ashrM3', `lshrM3', `rotlM3', `rotrM3' 21551 Other shift and rotate instructions, analogous to the `ashlM3' 21552 instructions. Operand 2 is always a scalar type. 21553 21554`vashlM3', `vashrM3', `vlshrM3', `vrotlM3', `vrotrM3' 21555 Vector shift and rotate instructions that take vectors as operand 2 21556 instead of a scalar type. 21557 21558`negM2', `ssnegM2', `usnegM2' 21559 Negate operand 1 and store the result in operand 0. 21560 21561`absM2' 21562 Store the absolute value of operand 1 into operand 0. 21563 21564`sqrtM2' 21565 Store the square root of operand 1 into operand 0. 21566 21567 The `sqrt' built-in function of C always uses the mode which 21568 corresponds to the C data type `double' and the `sqrtf' built-in 21569 function uses the mode which corresponds to the C data type 21570 `float'. 21571 21572`fmodM3' 21573 Store the remainder of dividing operand 1 by operand 2 into 21574 operand 0, rounded towards zero to an integer. 21575 21576 The `fmod' built-in function of C always uses the mode which 21577 corresponds to the C data type `double' and the `fmodf' built-in 21578 function uses the mode which corresponds to the C data type 21579 `float'. 21580 21581`remainderM3' 21582 Store the remainder of dividing operand 1 by operand 2 into 21583 operand 0, rounded to the nearest integer. 21584 21585 The `remainder' built-in function of C always uses the mode which 21586 corresponds to the C data type `double' and the `remainderf' 21587 built-in function uses the mode which corresponds to the C data 21588 type `float'. 21589 21590`cosM2' 21591 Store the cosine of operand 1 into operand 0. 21592 21593 The `cos' built-in function of C always uses the mode which 21594 corresponds to the C data type `double' and the `cosf' built-in 21595 function uses the mode which corresponds to the C data type 21596 `float'. 21597 21598`sinM2' 21599 Store the sine of operand 1 into operand 0. 21600 21601 The `sin' built-in function of C always uses the mode which 21602 corresponds to the C data type `double' and the `sinf' built-in 21603 function uses the mode which corresponds to the C data type 21604 `float'. 21605 21606`expM2' 21607 Store the exponential of operand 1 into operand 0. 21608 21609 The `exp' built-in function of C always uses the mode which 21610 corresponds to the C data type `double' and the `expf' built-in 21611 function uses the mode which corresponds to the C data type 21612 `float'. 21613 21614`logM2' 21615 Store the natural logarithm of operand 1 into operand 0. 21616 21617 The `log' built-in function of C always uses the mode which 21618 corresponds to the C data type `double' and the `logf' built-in 21619 function uses the mode which corresponds to the C data type 21620 `float'. 21621 21622`powM3' 21623 Store the value of operand 1 raised to the exponent operand 2 into 21624 operand 0. 21625 21626 The `pow' built-in function of C always uses the mode which 21627 corresponds to the C data type `double' and the `powf' built-in 21628 function uses the mode which corresponds to the C data type 21629 `float'. 21630 21631`atan2M3' 21632 Store the arc tangent (inverse tangent) of operand 1 divided by 21633 operand 2 into operand 0, using the signs of both arguments to 21634 determine the quadrant of the result. 21635 21636 The `atan2' built-in function of C always uses the mode which 21637 corresponds to the C data type `double' and the `atan2f' built-in 21638 function uses the mode which corresponds to the C data type 21639 `float'. 21640 21641`floorM2' 21642 Store the largest integral value not greater than argument. 21643 21644 The `floor' built-in function of C always uses the mode which 21645 corresponds to the C data type `double' and the `floorf' built-in 21646 function uses the mode which corresponds to the C data type 21647 `float'. 21648 21649`btruncM2' 21650 Store the argument rounded to integer towards zero. 21651 21652 The `trunc' built-in function of C always uses the mode which 21653 corresponds to the C data type `double' and the `truncf' built-in 21654 function uses the mode which corresponds to the C data type 21655 `float'. 21656 21657`roundM2' 21658 Store the argument rounded to integer away from zero. 21659 21660 The `round' built-in function of C always uses the mode which 21661 corresponds to the C data type `double' and the `roundf' built-in 21662 function uses the mode which corresponds to the C data type 21663 `float'. 21664 21665`ceilM2' 21666 Store the argument rounded to integer away from zero. 21667 21668 The `ceil' built-in function of C always uses the mode which 21669 corresponds to the C data type `double' and the `ceilf' built-in 21670 function uses the mode which corresponds to the C data type 21671 `float'. 21672 21673`nearbyintM2' 21674 Store the argument rounded according to the default rounding mode 21675 21676 The `nearbyint' built-in function of C always uses the mode which 21677 corresponds to the C data type `double' and the `nearbyintf' 21678 built-in function uses the mode which corresponds to the C data 21679 type `float'. 21680 21681`rintM2' 21682 Store the argument rounded according to the default rounding mode 21683 and raise the inexact exception when the result differs in value 21684 from the argument 21685 21686 The `rint' built-in function of C always uses the mode which 21687 corresponds to the C data type `double' and the `rintf' built-in 21688 function uses the mode which corresponds to the C data type 21689 `float'. 21690 21691`lrintMN2' 21692 Convert operand 1 (valid for floating point mode M) to fixed point 21693 mode N as a signed number according to the current rounding mode 21694 and store in operand 0 (which has mode N). 21695 21696`lroundM2' 21697 Convert operand 1 (valid for floating point mode M) to fixed point 21698 mode N as a signed number rounding to nearest and away from zero 21699 and store in operand 0 (which has mode N). 21700 21701`lfloorM2' 21702 Convert operand 1 (valid for floating point mode M) to fixed point 21703 mode N as a signed number rounding down and store in operand 0 21704 (which has mode N). 21705 21706`lceilM2' 21707 Convert operand 1 (valid for floating point mode M) to fixed point 21708 mode N as a signed number rounding up and store in operand 0 21709 (which has mode N). 21710 21711`copysignM3' 21712 Store a value with the magnitude of operand 1 and the sign of 21713 operand 2 into operand 0. 21714 21715 The `copysign' built-in function of C always uses the mode which 21716 corresponds to the C data type `double' and the `copysignf' 21717 built-in function uses the mode which corresponds to the C data 21718 type `float'. 21719 21720`ffsM2' 21721 Store into operand 0 one plus the index of the least significant 21722 1-bit of operand 1. If operand 1 is zero, store zero. M is the 21723 mode of operand 0; operand 1's mode is specified by the instruction 21724 pattern, and the compiler will convert the operand to that mode 21725 before generating the instruction. 21726 21727 The `ffs' built-in function of C always uses the mode which 21728 corresponds to the C data type `int'. 21729 21730`clzM2' 21731 Store into operand 0 the number of leading 0-bits in X, starting 21732 at the most significant bit position. If X is 0, the 21733 `CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 21734 result is undefined or has a useful value. M is the mode of 21735 operand 0; operand 1's mode is specified by the instruction 21736 pattern, and the compiler will convert the operand to that mode 21737 before generating the instruction. 21738 21739`ctzM2' 21740 Store into operand 0 the number of trailing 0-bits in X, starting 21741 at the least significant bit position. If X is 0, the 21742 `CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 21743 result is undefined or has a useful value. M is the mode of 21744 operand 0; operand 1's mode is specified by the instruction 21745 pattern, and the compiler will convert the operand to that mode 21746 before generating the instruction. 21747 21748`popcountM2' 21749 Store into operand 0 the number of 1-bits in X. M is the mode of 21750 operand 0; operand 1's mode is specified by the instruction 21751 pattern, and the compiler will convert the operand to that mode 21752 before generating the instruction. 21753 21754`parityM2' 21755 Store into operand 0 the parity of X, i.e. the number of 1-bits in 21756 X modulo 2. M is the mode of operand 0; operand 1's mode is 21757 specified by the instruction pattern, and the compiler will convert 21758 the operand to that mode before generating the instruction. 21759 21760`one_cmplM2' 21761 Store the bitwise-complement of operand 1 into operand 0. 21762 21763`movmemM' 21764 Block move instruction. The destination and source blocks of 21765 memory are the first two operands, and both are `mem:BLK's with an 21766 address in mode `Pmode'. 21767 21768 The number of bytes to move is the third operand, in mode M. 21769 Usually, you specify `word_mode' for M. However, if you can 21770 generate better code knowing the range of valid lengths is smaller 21771 than those representable in a full word, you should provide a 21772 pattern with a mode corresponding to the range of values you can 21773 handle efficiently (e.g., `QImode' for values in the range 0-127; 21774 note we avoid numbers that appear negative) and also a pattern 21775 with `word_mode'. 21776 21777 The fourth operand is the known shared alignment of the source and 21778 destination, in the form of a `const_int' rtx. Thus, if the 21779 compiler knows that both source and destination are word-aligned, 21780 it may provide the value 4 for this operand. 21781 21782 Optional operands 5 and 6 specify expected alignment and size of 21783 block respectively. The expected alignment differs from alignment 21784 in operand 4 in a way that the blocks are not required to be 21785 aligned according to it in all cases. This expected alignment is 21786 also in bytes, just like operand 4. Expected size, when unknown, 21787 is set to `(const_int -1)'. 21788 21789 Descriptions of multiple `movmemM' patterns can only be beneficial 21790 if the patterns for smaller modes have fewer restrictions on their 21791 first, second and fourth operands. Note that the mode M in 21792 `movmemM' does not impose any restriction on the mode of 21793 individually moved data units in the block. 21794 21795 These patterns need not give special consideration to the 21796 possibility that the source and destination strings might overlap. 21797 21798`movstr' 21799 String copy instruction, with `stpcpy' semantics. Operand 0 is an 21800 output operand in mode `Pmode'. The addresses of the destination 21801 and source strings are operands 1 and 2, and both are `mem:BLK's 21802 with addresses in mode `Pmode'. The execution of the expansion of 21803 this pattern should store in operand 0 the address in which the 21804 `NUL' terminator was stored in the destination string. 21805 21806`setmemM' 21807 Block set instruction. The destination string is the first 21808 operand, given as a `mem:BLK' whose address is in mode `Pmode'. 21809 The number of bytes to set is the second operand, in mode M. The 21810 value to initialize the memory with is the third operand. Targets 21811 that only support the clearing of memory should reject any value 21812 that is not the constant 0. See `movmemM' for a discussion of the 21813 choice of mode. 21814 21815 The fourth operand is the known alignment of the destination, in 21816 the form of a `const_int' rtx. Thus, if the compiler knows that 21817 the destination is word-aligned, it may provide the value 4 for 21818 this operand. 21819 21820 Optional operands 5 and 6 specify expected alignment and size of 21821 block respectively. The expected alignment differs from alignment 21822 in operand 4 in a way that the blocks are not required to be 21823 aligned according to it in all cases. This expected alignment is 21824 also in bytes, just like operand 4. Expected size, when unknown, 21825 is set to `(const_int -1)'. 21826 21827 The use for multiple `setmemM' is as for `movmemM'. 21828 21829`cmpstrnM' 21830 String compare instruction, with five operands. Operand 0 is the 21831 output; it has mode M. The remaining four operands are like the 21832 operands of `movmemM'. The two memory blocks specified are 21833 compared byte by byte in lexicographic order starting at the 21834 beginning of each string. The instruction is not allowed to 21835 prefetch more than one byte at a time since either string may end 21836 in the first byte and reading past that may access an invalid page 21837 or segment and cause a fault. The comparison terminates early if 21838 the fetched bytes are different or if they are equal to zero. The 21839 effect of the instruction is to store a value in operand 0 whose 21840 sign indicates the result of the comparison. 21841 21842`cmpstrM' 21843 String compare instruction, without known maximum length. Operand 21844 0 is the output; it has mode M. The second and third operand are 21845 the blocks of memory to be compared; both are `mem:BLK' with an 21846 address in mode `Pmode'. 21847 21848 The fourth operand is the known shared alignment of the source and 21849 destination, in the form of a `const_int' rtx. Thus, if the 21850 compiler knows that both source and destination are word-aligned, 21851 it may provide the value 4 for this operand. 21852 21853 The two memory blocks specified are compared byte by byte in 21854 lexicographic order starting at the beginning of each string. The 21855 instruction is not allowed to prefetch more than one byte at a 21856 time since either string may end in the first byte and reading 21857 past that may access an invalid page or segment and cause a fault. 21858 The comparison will terminate when the fetched bytes are different 21859 or if they are equal to zero. The effect of the instruction is to 21860 store a value in operand 0 whose sign indicates the result of the 21861 comparison. 21862 21863`cmpmemM' 21864 Block compare instruction, with five operands like the operands of 21865 `cmpstrM'. The two memory blocks specified are compared byte by 21866 byte in lexicographic order starting at the beginning of each 21867 block. Unlike `cmpstrM' the instruction can prefetch any bytes in 21868 the two memory blocks. Also unlike `cmpstrM' the comparison will 21869 not stop if both bytes are zero. The effect of the instruction is 21870 to store a value in operand 0 whose sign indicates the result of 21871 the comparison. 21872 21873`strlenM' 21874 Compute the length of a string, with three operands. Operand 0 is 21875 the result (of mode M), operand 1 is a `mem' referring to the 21876 first character of the string, operand 2 is the character to 21877 search for (normally zero), and operand 3 is a constant describing 21878 the known alignment of the beginning of the string. 21879 21880`floatMN2' 21881 Convert signed integer operand 1 (valid for fixed point mode M) to 21882 floating point mode N and store in operand 0 (which has mode N). 21883 21884`floatunsMN2' 21885 Convert unsigned integer operand 1 (valid for fixed point mode M) 21886 to floating point mode N and store in operand 0 (which has mode N). 21887 21888`fixMN2' 21889 Convert operand 1 (valid for floating point mode M) to fixed point 21890 mode N as a signed number and store in operand 0 (which has mode 21891 N). This instruction's result is defined only when the value of 21892 operand 1 is an integer. 21893 21894 If the machine description defines this pattern, it also needs to 21895 define the `ftrunc' pattern. 21896 21897`fixunsMN2' 21898 Convert operand 1 (valid for floating point mode M) to fixed point 21899 mode N as an unsigned number and store in operand 0 (which has 21900 mode N). This instruction's result is defined only when the value 21901 of operand 1 is an integer. 21902 21903`ftruncM2' 21904 Convert operand 1 (valid for floating point mode M) to an integer 21905 value, still represented in floating point mode M, and store it in 21906 operand 0 (valid for floating point mode M). 21907 21908`fix_truncMN2' 21909 Like `fixMN2' but works for any floating point value of mode M by 21910 converting the value to an integer. 21911 21912`fixuns_truncMN2' 21913 Like `fixunsMN2' but works for any floating point value of mode M 21914 by converting the value to an integer. 21915 21916`truncMN2' 21917 Truncate operand 1 (valid for mode M) to mode N and store in 21918 operand 0 (which has mode N). Both modes must be fixed point or 21919 both floating point. 21920 21921`extendMN2' 21922 Sign-extend operand 1 (valid for mode M) to mode N and store in 21923 operand 0 (which has mode N). Both modes must be fixed point or 21924 both floating point. 21925 21926`zero_extendMN2' 21927 Zero-extend operand 1 (valid for mode M) to mode N and store in 21928 operand 0 (which has mode N). Both modes must be fixed point. 21929 21930`fractMN2' 21931 Convert operand 1 of mode M to mode N and store in operand 0 21932 (which has mode N). Mode M and mode N could be fixed-point to 21933 fixed-point, signed integer to fixed-point, fixed-point to signed 21934 integer, floating-point to fixed-point, or fixed-point to 21935 floating-point. When overflows or underflows happen, the results 21936 are undefined. 21937 21938`satfractMN2' 21939 Convert operand 1 of mode M to mode N and store in operand 0 21940 (which has mode N). Mode M and mode N could be fixed-point to 21941 fixed-point, signed integer to fixed-point, or floating-point to 21942 fixed-point. When overflows or underflows happen, the instruction 21943 saturates the results to the maximum or the minimum. 21944 21945`fractunsMN2' 21946 Convert operand 1 of mode M to mode N and store in operand 0 21947 (which has mode N). Mode M and mode N could be unsigned integer 21948 to fixed-point, or fixed-point to unsigned integer. When 21949 overflows or underflows happen, the results are undefined. 21950 21951`satfractunsMN2' 21952 Convert unsigned integer operand 1 of mode M to fixed-point mode N 21953 and store in operand 0 (which has mode N). When overflows or 21954 underflows happen, the instruction saturates the results to the 21955 maximum or the minimum. 21956 21957`extv' 21958 Extract a bit-field from operand 1 (a register or memory operand), 21959 where operand 2 specifies the width in bits and operand 3 the 21960 starting bit, and store it in operand 0. Operand 0 must have mode 21961 `word_mode'. Operand 1 may have mode `byte_mode' or `word_mode'; 21962 often `word_mode' is allowed only for registers. Operands 2 and 3 21963 must be valid for `word_mode'. 21964 21965 The RTL generation pass generates this instruction only with 21966 constants for operands 2 and 3 and the constant is never zero for 21967 operand 2. 21968 21969 The bit-field value is sign-extended to a full word integer before 21970 it is stored in operand 0. 21971 21972`extzv' 21973 Like `extv' except that the bit-field value is zero-extended. 21974 21975`insv' 21976 Store operand 3 (which must be valid for `word_mode') into a 21977 bit-field in operand 0, where operand 1 specifies the width in 21978 bits and operand 2 the starting bit. Operand 0 may have mode 21979 `byte_mode' or `word_mode'; often `word_mode' is allowed only for 21980 registers. Operands 1 and 2 must be valid for `word_mode'. 21981 21982 The RTL generation pass generates this instruction only with 21983 constants for operands 1 and 2 and the constant is never zero for 21984 operand 1. 21985 21986`movMODEcc' 21987 Conditionally move operand 2 or operand 3 into operand 0 according 21988 to the comparison in operand 1. If the comparison is true, 21989 operand 2 is moved into operand 0, otherwise operand 3 is moved. 21990 21991 The mode of the operands being compared need not be the same as 21992 the operands being moved. Some machines, sparc64 for example, 21993 have instructions that conditionally move an integer value based 21994 on the floating point condition codes and vice versa. 21995 21996 If the machine does not have conditional move instructions, do not 21997 define these patterns. 21998 21999`addMODEcc' 22000 Similar to `movMODEcc' but for conditional addition. Conditionally 22001 move operand 2 or (operands 2 + operand 3) into operand 0 22002 according to the comparison in operand 1. If the comparison is 22003 true, operand 2 is moved into operand 0, otherwise (operand 2 + 22004 operand 3) is moved. 22005 22006`cstoreMODE4' 22007 Store zero or nonzero in operand 0 according to whether a 22008 comparison is true. Operand 1 is a comparison operator. Operand 22009 2 and operand 3 are the first and second operand of the 22010 comparison, respectively. You specify the mode that operand 0 22011 must have when you write the `match_operand' expression. The 22012 compiler automatically sees which mode you have used and supplies 22013 an operand of that mode. 22014 22015 The value stored for a true condition must have 1 as its low bit, 22016 or else must be negative. Otherwise the instruction is not 22017 suitable and you should omit it from the machine description. You 22018 describe to the compiler exactly which value is stored by defining 22019 the macro `STORE_FLAG_VALUE' (*note Misc::). If a description 22020 cannot be found that can be used for all the `sCOND' patterns, you 22021 should omit those operations from the machine description. 22022 22023 These operations may fail, but should do so only in relatively 22024 uncommon cases; if they would fail for common cases involving 22025 integer comparisons, it is best to omit these patterns. 22026 22027 If these operations are omitted, the compiler will usually 22028 generate code that copies the constant one to the target and 22029 branches around an assignment of zero to the target. If this code 22030 is more efficient than the potential instructions used for the 22031 `cstoreMODE4' pattern followed by those required to convert the 22032 result into a 1 or a zero in `SImode', you should omit the 22033 `cstoreMODE4' operations from the machine description. 22034 22035`cbranchMODE4' 22036 Conditional branch instruction combined with a compare instruction. 22037 Operand 0 is a comparison operator. Operand 1 and operand 2 are 22038 the first and second operands of the comparison, respectively. 22039 Operand 3 is a `label_ref' that refers to the label to jump to. 22040 22041`jump' 22042 A jump inside a function; an unconditional branch. Operand 0 is 22043 the `label_ref' of the label to jump to. This pattern name is 22044 mandatory on all machines. 22045 22046`call' 22047 Subroutine call instruction returning no value. Operand 0 is the 22048 function to call; operand 1 is the number of bytes of arguments 22049 pushed as a `const_int'; operand 2 is the number of registers used 22050 as operands. 22051 22052 On most machines, operand 2 is not actually stored into the RTL 22053 pattern. It is supplied for the sake of some RISC machines which 22054 need to put this information into the assembler code; they can put 22055 it in the RTL instead of operand 1. 22056 22057 Operand 0 should be a `mem' RTX whose address is the address of the 22058 function. Note, however, that this address can be a `symbol_ref' 22059 expression even if it would not be a legitimate memory address on 22060 the target machine. If it is also not a valid argument for a call 22061 instruction, the pattern for this operation should be a 22062 `define_expand' (*note Expander Definitions::) that places the 22063 address into a register and uses that register in the call 22064 instruction. 22065 22066`call_value' 22067 Subroutine call instruction returning a value. Operand 0 is the 22068 hard register in which the value is returned. There are three more 22069 operands, the same as the three operands of the `call' instruction 22070 (but with numbers increased by one). 22071 22072 Subroutines that return `BLKmode' objects use the `call' insn. 22073 22074`call_pop', `call_value_pop' 22075 Similar to `call' and `call_value', except used if defined and if 22076 `RETURN_POPS_ARGS' is nonzero. They should emit a `parallel' that 22077 contains both the function call and a `set' to indicate the 22078 adjustment made to the frame pointer. 22079 22080 For machines where `RETURN_POPS_ARGS' can be nonzero, the use of 22081 these patterns increases the number of functions for which the 22082 frame pointer can be eliminated, if desired. 22083 22084`untyped_call' 22085 Subroutine call instruction returning a value of any type. 22086 Operand 0 is the function to call; operand 1 is a memory location 22087 where the result of calling the function is to be stored; operand 22088 2 is a `parallel' expression where each element is a `set' 22089 expression that indicates the saving of a function return value 22090 into the result block. 22091 22092 This instruction pattern should be defined to support 22093 `__builtin_apply' on machines where special instructions are needed 22094 to call a subroutine with arbitrary arguments or to save the value 22095 returned. This instruction pattern is required on machines that 22096 have multiple registers that can hold a return value (i.e. 22097 `FUNCTION_VALUE_REGNO_P' is true for more than one register). 22098 22099`return' 22100 Subroutine return instruction. This instruction pattern name 22101 should be defined only if a single instruction can do all the work 22102 of returning from a function. 22103 22104 Like the `movM' patterns, this pattern is also used after the RTL 22105 generation phase. In this case it is to support machines where 22106 multiple instructions are usually needed to return from a 22107 function, but some class of functions only requires one 22108 instruction to implement a return. Normally, the applicable 22109 functions are those which do not need to save any registers or 22110 allocate stack space. 22111 22112 For such machines, the condition specified in this pattern should 22113 only be true when `reload_completed' is nonzero and the function's 22114 epilogue would only be a single instruction. For machines with 22115 register windows, the routine `leaf_function_p' may be used to 22116 determine if a register window push is required. 22117 22118 Machines that have conditional return instructions should define 22119 patterns such as 22120 22121 (define_insn "" 22122 [(set (pc) 22123 (if_then_else (match_operator 22124 0 "comparison_operator" 22125 [(cc0) (const_int 0)]) 22126 (return) 22127 (pc)))] 22128 "CONDITION" 22129 "...") 22130 22131 where CONDITION would normally be the same condition specified on 22132 the named `return' pattern. 22133 22134`untyped_return' 22135 Untyped subroutine return instruction. This instruction pattern 22136 should be defined to support `__builtin_return' on machines where 22137 special instructions are needed to return a value of any type. 22138 22139 Operand 0 is a memory location where the result of calling a 22140 function with `__builtin_apply' is stored; operand 1 is a 22141 `parallel' expression where each element is a `set' expression 22142 that indicates the restoring of a function return value from the 22143 result block. 22144 22145`nop' 22146 No-op instruction. This instruction pattern name should always be 22147 defined to output a no-op in assembler code. `(const_int 0)' will 22148 do as an RTL pattern. 22149 22150`indirect_jump' 22151 An instruction to jump to an address which is operand zero. This 22152 pattern name is mandatory on all machines. 22153 22154`casesi' 22155 Instruction to jump through a dispatch table, including bounds 22156 checking. This instruction takes five operands: 22157 22158 1. The index to dispatch on, which has mode `SImode'. 22159 22160 2. The lower bound for indices in the table, an integer constant. 22161 22162 3. The total range of indices in the table--the largest index 22163 minus the smallest one (both inclusive). 22164 22165 4. A label that precedes the table itself. 22166 22167 5. A label to jump to if the index has a value outside the 22168 bounds. 22169 22170 The table is an `addr_vec' or `addr_diff_vec' inside of a 22171 `jump_insn'. The number of elements in the table is one plus the 22172 difference between the upper bound and the lower bound. 22173 22174`tablejump' 22175 Instruction to jump to a variable address. This is a low-level 22176 capability which can be used to implement a dispatch table when 22177 there is no `casesi' pattern. 22178 22179 This pattern requires two operands: the address or offset, and a 22180 label which should immediately precede the jump table. If the 22181 macro `CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 22182 the first operand is an offset which counts from the address of 22183 the table; otherwise, it is an absolute address to jump to. In 22184 either case, the first operand has mode `Pmode'. 22185 22186 The `tablejump' insn is always the last insn before the jump table 22187 it uses. Its assembler code normally has no need to use the 22188 second operand, but you should incorporate it in the RTL pattern so 22189 that the jump optimizer will not delete the table as unreachable 22190 code. 22191 22192`decrement_and_branch_until_zero' 22193 Conditional branch instruction that decrements a register and 22194 jumps if the register is nonzero. Operand 0 is the register to 22195 decrement and test; operand 1 is the label to jump to if the 22196 register is nonzero. *Note Looping Patterns::. 22197 22198 This optional instruction pattern is only used by the combiner, 22199 typically for loops reversed by the loop optimizer when strength 22200 reduction is enabled. 22201 22202`doloop_end' 22203 Conditional branch instruction that decrements a register and 22204 jumps if the register is nonzero. This instruction takes five 22205 operands: Operand 0 is the register to decrement and test; operand 22206 1 is the number of loop iterations as a `const_int' or 22207 `const0_rtx' if this cannot be determined until run-time; operand 22208 2 is the actual or estimated maximum number of iterations as a 22209 `const_int'; operand 3 is the number of enclosed loops as a 22210 `const_int' (an innermost loop has a value of 1); operand 4 is the 22211 label to jump to if the register is nonzero. *Note Looping 22212 Patterns::. 22213 22214 This optional instruction pattern should be defined for machines 22215 with low-overhead looping instructions as the loop optimizer will 22216 try to modify suitable loops to utilize it. If nested 22217 low-overhead looping is not supported, use a `define_expand' 22218 (*note Expander Definitions::) and make the pattern fail if 22219 operand 3 is not `const1_rtx'. Similarly, if the actual or 22220 estimated maximum number of iterations is too large for this 22221 instruction, make it fail. 22222 22223`doloop_begin' 22224 Companion instruction to `doloop_end' required for machines that 22225 need to perform some initialization, such as loading special 22226 registers used by a low-overhead looping instruction. If 22227 initialization insns do not always need to be emitted, use a 22228 `define_expand' (*note Expander Definitions::) and make it fail. 22229 22230`canonicalize_funcptr_for_compare' 22231 Canonicalize the function pointer in operand 1 and store the result 22232 into operand 0. 22233 22234 Operand 0 is always a `reg' and has mode `Pmode'; operand 1 may be 22235 a `reg', `mem', `symbol_ref', `const_int', etc and also has mode 22236 `Pmode'. 22237 22238 Canonicalization of a function pointer usually involves computing 22239 the address of the function which would be called if the function 22240 pointer were used in an indirect call. 22241 22242 Only define this pattern if function pointers on the target machine 22243 can have different values but still call the same function when 22244 used in an indirect call. 22245 22246`save_stack_block' 22247`save_stack_function' 22248`save_stack_nonlocal' 22249`restore_stack_block' 22250`restore_stack_function' 22251`restore_stack_nonlocal' 22252 Most machines save and restore the stack pointer by copying it to 22253 or from an object of mode `Pmode'. Do not define these patterns on 22254 such machines. 22255 22256 Some machines require special handling for stack pointer saves and 22257 restores. On those machines, define the patterns corresponding to 22258 the non-standard cases by using a `define_expand' (*note Expander 22259 Definitions::) that produces the required insns. The three types 22260 of saves and restores are: 22261 22262 1. `save_stack_block' saves the stack pointer at the start of a 22263 block that allocates a variable-sized object, and 22264 `restore_stack_block' restores the stack pointer when the 22265 block is exited. 22266 22267 2. `save_stack_function' and `restore_stack_function' do a 22268 similar job for the outermost block of a function and are 22269 used when the function allocates variable-sized objects or 22270 calls `alloca'. Only the epilogue uses the restored stack 22271 pointer, allowing a simpler save or restore sequence on some 22272 machines. 22273 22274 3. `save_stack_nonlocal' is used in functions that contain labels 22275 branched to by nested functions. It saves the stack pointer 22276 in such a way that the inner function can use 22277 `restore_stack_nonlocal' to restore the stack pointer. The 22278 compiler generates code to restore the frame and argument 22279 pointer registers, but some machines require saving and 22280 restoring additional data such as register window information 22281 or stack backchains. Place insns in these patterns to save 22282 and restore any such required data. 22283 22284 When saving the stack pointer, operand 0 is the save area and 22285 operand 1 is the stack pointer. The mode used to allocate the 22286 save area defaults to `Pmode' but you can override that choice by 22287 defining the `STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 22288 You must specify an integral mode, or `VOIDmode' if no save area 22289 is needed for a particular type of save (either because no save is 22290 needed or because a machine-specific save area can be used). 22291 Operand 0 is the stack pointer and operand 1 is the save area for 22292 restore operations. If `save_stack_block' is defined, operand 0 22293 must not be `VOIDmode' since these saves can be arbitrarily nested. 22294 22295 A save area is a `mem' that is at a constant offset from 22296 `virtual_stack_vars_rtx' when the stack pointer is saved for use by 22297 nonlocal gotos and a `reg' in the other two cases. 22298 22299`allocate_stack' 22300 Subtract (or add if `STACK_GROWS_DOWNWARD' is undefined) operand 1 22301 from the stack pointer to create space for dynamically allocated 22302 data. 22303 22304 Store the resultant pointer to this space into operand 0. If you 22305 are allocating space from the main stack, do this by emitting a 22306 move insn to copy `virtual_stack_dynamic_rtx' to operand 0. If 22307 you are allocating the space elsewhere, generate code to copy the 22308 location of the space to operand 0. In the latter case, you must 22309 ensure this space gets freed when the corresponding space on the 22310 main stack is free. 22311 22312 Do not define this pattern if all that must be done is the 22313 subtraction. Some machines require other operations such as stack 22314 probes or maintaining the back chain. Define this pattern to emit 22315 those operations in addition to updating the stack pointer. 22316 22317`check_stack' 22318 If stack checking (*note Stack Checking::) cannot be done on your 22319 system by probing the stack, define this pattern to perform the 22320 needed check and signal an error if the stack has overflowed. The 22321 single operand is the address in the stack farthest from the 22322 current stack pointer that you need to validate. Normally, on 22323 platforms where this pattern is needed, you would obtain the stack 22324 limit from a global or thread-specific variable or register. 22325 22326`probe_stack' 22327 If stack checking (*note Stack Checking::) can be done on your 22328 system by probing the stack but doing it with a "store zero" 22329 instruction is not valid or optimal, define this pattern to do the 22330 probing differently and signal an error if the stack has 22331 overflowed. The single operand is the memory reference in the 22332 stack that needs to be probed. 22333 22334`nonlocal_goto' 22335 Emit code to generate a non-local goto, e.g., a jump from one 22336 function to a label in an outer function. This pattern has four 22337 arguments, each representing a value to be used in the jump. The 22338 first argument is to be loaded into the frame pointer, the second 22339 is the address to branch to (code to dispatch to the actual label), 22340 the third is the address of a location where the stack is saved, 22341 and the last is the address of the label, to be placed in the 22342 location for the incoming static chain. 22343 22344 On most machines you need not define this pattern, since GCC will 22345 already generate the correct code, which is to load the frame 22346 pointer and static chain, restore the stack (using the 22347 `restore_stack_nonlocal' pattern, if defined), and jump indirectly 22348 to the dispatcher. You need only define this pattern if this code 22349 will not work on your machine. 22350 22351`nonlocal_goto_receiver' 22352 This pattern, if defined, contains code needed at the target of a 22353 nonlocal goto after the code already generated by GCC. You will 22354 not normally need to define this pattern. A typical reason why 22355 you might need this pattern is if some value, such as a pointer to 22356 a global table, must be restored when the frame pointer is 22357 restored. Note that a nonlocal goto only occurs within a 22358 unit-of-translation, so a global table pointer that is shared by 22359 all functions of a given module need not be restored. There are 22360 no arguments. 22361 22362`exception_receiver' 22363 This pattern, if defined, contains code needed at the site of an 22364 exception handler that isn't needed at the site of a nonlocal 22365 goto. You will not normally need to define this pattern. A 22366 typical reason why you might need this pattern is if some value, 22367 such as a pointer to a global table, must be restored after 22368 control flow is branched to the handler of an exception. There 22369 are no arguments. 22370 22371`builtin_setjmp_setup' 22372 This pattern, if defined, contains additional code needed to 22373 initialize the `jmp_buf'. You will not normally need to define 22374 this pattern. A typical reason why you might need this pattern is 22375 if some value, such as a pointer to a global table, must be 22376 restored. Though it is preferred that the pointer value be 22377 recalculated if possible (given the address of a label for 22378 instance). The single argument is a pointer to the `jmp_buf'. 22379 Note that the buffer is five words long and that the first three 22380 are normally used by the generic mechanism. 22381 22382`builtin_setjmp_receiver' 22383 This pattern, if defined, contains code needed at the site of a 22384 built-in setjmp that isn't needed at the site of a nonlocal goto. 22385 You will not normally need to define this pattern. A typical 22386 reason why you might need this pattern is if some value, such as a 22387 pointer to a global table, must be restored. It takes one 22388 argument, which is the label to which builtin_longjmp transfered 22389 control; this pattern may be emitted at a small offset from that 22390 label. 22391 22392`builtin_longjmp' 22393 This pattern, if defined, performs the entire action of the 22394 longjmp. You will not normally need to define this pattern unless 22395 you also define `builtin_setjmp_setup'. The single argument is a 22396 pointer to the `jmp_buf'. 22397 22398`eh_return' 22399 This pattern, if defined, affects the way `__builtin_eh_return', 22400 and thence the call frame exception handling library routines, are 22401 built. It is intended to handle non-trivial actions needed along 22402 the abnormal return path. 22403 22404 The address of the exception handler to which the function should 22405 return is passed as operand to this pattern. It will normally 22406 need to copied by the pattern to some special register or memory 22407 location. If the pattern needs to determine the location of the 22408 target call frame in order to do so, it may use 22409 `EH_RETURN_STACKADJ_RTX', if defined; it will have already been 22410 assigned. 22411 22412 If this pattern is not defined, the default action will be to 22413 simply copy the return address to `EH_RETURN_HANDLER_RTX'. Either 22414 that macro or this pattern needs to be defined if call frame 22415 exception handling is to be used. 22416 22417`prologue' 22418 This pattern, if defined, emits RTL for entry to a function. The 22419 function entry is responsible for setting up the stack frame, 22420 initializing the frame pointer register, saving callee saved 22421 registers, etc. 22422 22423 Using a prologue pattern is generally preferred over defining 22424 `TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 22425 prologue. 22426 22427 The `prologue' pattern is particularly useful for targets which 22428 perform instruction scheduling. 22429 22430`epilogue' 22431 This pattern emits RTL for exit from a function. The function 22432 exit is responsible for deallocating the stack frame, restoring 22433 callee saved registers and emitting the return instruction. 22434 22435 Using an epilogue pattern is generally preferred over defining 22436 `TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 22437 epilogue. 22438 22439 The `epilogue' pattern is particularly useful for targets which 22440 perform instruction scheduling or which have delay slots for their 22441 return instruction. 22442 22443`sibcall_epilogue' 22444 This pattern, if defined, emits RTL for exit from a function 22445 without the final branch back to the calling function. This 22446 pattern will be emitted before any sibling call (aka tail call) 22447 sites. 22448 22449 The `sibcall_epilogue' pattern must not clobber any arguments used 22450 for parameter passing or any stack slots for arguments passed to 22451 the current function. 22452 22453`trap' 22454 This pattern, if defined, signals an error, typically by causing 22455 some kind of signal to be raised. Among other places, it is used 22456 by the Java front end to signal `invalid array index' exceptions. 22457 22458`ctrapMM4' 22459 Conditional trap instruction. Operand 0 is a piece of RTL which 22460 performs a comparison, and operands 1 and 2 are the arms of the 22461 comparison. Operand 3 is the trap code, an integer. 22462 22463 A typical `ctrap' pattern looks like 22464 22465 (define_insn "ctrapsi4" 22466 [(trap_if (match_operator 0 "trap_operator" 22467 [(match_operand 1 "register_operand") 22468 (match_operand 2 "immediate_operand")]) 22469 (match_operand 3 "const_int_operand" "i"))] 22470 "" 22471 "...") 22472 22473`prefetch' 22474 This pattern, if defined, emits code for a non-faulting data 22475 prefetch instruction. Operand 0 is the address of the memory to 22476 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 22477 for a write to the memory address, or a constant 0 otherwise. 22478 Operand 2 is the expected degree of temporal locality of the data 22479 and is a value between 0 and 3, inclusive; 0 means that the data 22480 has no temporal locality, so it need not be left in the cache 22481 after the access; 3 means that the data has a high degree of 22482 temporal locality and should be left in all levels of cache 22483 possible; 1 and 2 mean, respectively, a low or moderate degree of 22484 temporal locality. 22485 22486 Targets that do not support write prefetches or locality hints can 22487 ignore the values of operands 1 and 2. 22488 22489`blockage' 22490 This pattern defines a pseudo insn that prevents the instruction 22491 scheduler from moving instructions across the boundary defined by 22492 the blockage insn. Normally an UNSPEC_VOLATILE pattern. 22493 22494`memory_barrier' 22495 If the target memory model is not fully synchronous, then this 22496 pattern should be defined to an instruction that orders both loads 22497 and stores before the instruction with respect to loads and stores 22498 after the instruction. This pattern has no operands. 22499 22500`sync_compare_and_swapMODE' 22501 This pattern, if defined, emits code for an atomic compare-and-swap 22502 operation. Operand 1 is the memory on which the atomic operation 22503 is performed. Operand 2 is the "old" value to be compared against 22504 the current contents of the memory location. Operand 3 is the 22505 "new" value to store in the memory if the compare succeeds. 22506 Operand 0 is the result of the operation; it should contain the 22507 contents of the memory before the operation. If the compare 22508 succeeds, this should obviously be a copy of operand 2. 22509 22510 This pattern must show that both operand 0 and operand 1 are 22511 modified. 22512 22513 This pattern must issue any memory barrier instructions such that 22514 all memory operations before the atomic operation occur before the 22515 atomic operation and all memory operations after the atomic 22516 operation occur after the atomic operation. 22517 22518 For targets where the success or failure of the compare-and-swap 22519 operation is available via the status flags, it is possible to 22520 avoid a separate compare operation and issue the subsequent branch 22521 or store-flag operation immediately after the compare-and-swap. 22522 To this end, GCC will look for a `MODE_CC' set in the output of 22523 `sync_compare_and_swapMODE'; if the machine description includes 22524 such a set, the target should also define special `cbranchcc4' 22525 and/or `cstorecc4' instructions. GCC will then be able to take 22526 the destination of the `MODE_CC' set and pass it to the 22527 `cbranchcc4' or `cstorecc4' pattern as the first operand of the 22528 comparison (the second will be `(const_int 0)'). 22529 22530`sync_addMODE', `sync_subMODE' 22531`sync_iorMODE', `sync_andMODE' 22532`sync_xorMODE', `sync_nandMODE' 22533 These patterns emit code for an atomic operation on memory. 22534 Operand 0 is the memory on which the atomic operation is performed. 22535 Operand 1 is the second operand to the binary operator. 22536 22537 This pattern must issue any memory barrier instructions such that 22538 all memory operations before the atomic operation occur before the 22539 atomic operation and all memory operations after the atomic 22540 operation occur after the atomic operation. 22541 22542 If these patterns are not defined, the operation will be 22543 constructed from a compare-and-swap operation, if defined. 22544 22545`sync_old_addMODE', `sync_old_subMODE' 22546`sync_old_iorMODE', `sync_old_andMODE' 22547`sync_old_xorMODE', `sync_old_nandMODE' 22548 These patterns are emit code for an atomic operation on memory, 22549 and return the value that the memory contained before the 22550 operation. Operand 0 is the result value, operand 1 is the memory 22551 on which the atomic operation is performed, and operand 2 is the 22552 second operand to the binary operator. 22553 22554 This pattern must issue any memory barrier instructions such that 22555 all memory operations before the atomic operation occur before the 22556 atomic operation and all memory operations after the atomic 22557 operation occur after the atomic operation. 22558 22559 If these patterns are not defined, the operation will be 22560 constructed from a compare-and-swap operation, if defined. 22561 22562`sync_new_addMODE', `sync_new_subMODE' 22563`sync_new_iorMODE', `sync_new_andMODE' 22564`sync_new_xorMODE', `sync_new_nandMODE' 22565 These patterns are like their `sync_old_OP' counterparts, except 22566 that they return the value that exists in the memory location 22567 after the operation, rather than before the operation. 22568 22569`sync_lock_test_and_setMODE' 22570 This pattern takes two forms, based on the capabilities of the 22571 target. In either case, operand 0 is the result of the operand, 22572 operand 1 is the memory on which the atomic operation is 22573 performed, and operand 2 is the value to set in the lock. 22574 22575 In the ideal case, this operation is an atomic exchange operation, 22576 in which the previous value in memory operand is copied into the 22577 result operand, and the value operand is stored in the memory 22578 operand. 22579 22580 For less capable targets, any value operand that is not the 22581 constant 1 should be rejected with `FAIL'. In this case the 22582 target may use an atomic test-and-set bit operation. The result 22583 operand should contain 1 if the bit was previously set and 0 if 22584 the bit was previously clear. The true contents of the memory 22585 operand are implementation defined. 22586 22587 This pattern must issue any memory barrier instructions such that 22588 the pattern as a whole acts as an acquire barrier, that is all 22589 memory operations after the pattern do not occur until the lock is 22590 acquired. 22591 22592 If this pattern is not defined, the operation will be constructed 22593 from a compare-and-swap operation, if defined. 22594 22595`sync_lock_releaseMODE' 22596 This pattern, if defined, releases a lock set by 22597 `sync_lock_test_and_setMODE'. Operand 0 is the memory that 22598 contains the lock; operand 1 is the value to store in the lock. 22599 22600 If the target doesn't implement full semantics for 22601 `sync_lock_test_and_setMODE', any value operand which is not the 22602 constant 0 should be rejected with `FAIL', and the true contents 22603 of the memory operand are implementation defined. 22604 22605 This pattern must issue any memory barrier instructions such that 22606 the pattern as a whole acts as a release barrier, that is the lock 22607 is released only after all previous memory operations have 22608 completed. 22609 22610 If this pattern is not defined, then a `memory_barrier' pattern 22611 will be emitted, followed by a store of the value to the memory 22612 operand. 22613 22614`stack_protect_set' 22615 This pattern, if defined, moves a `Pmode' value from the memory in 22616 operand 1 to the memory in operand 0 without leaving the value in 22617 a register afterward. This is to avoid leaking the value some 22618 place that an attacker might use to rewrite the stack guard slot 22619 after having clobbered it. 22620 22621 If this pattern is not defined, then a plain move pattern is 22622 generated. 22623 22624`stack_protect_test' 22625 This pattern, if defined, compares a `Pmode' value from the memory 22626 in operand 1 with the memory in operand 0 without leaving the 22627 value in a register afterward and branches to operand 2 if the 22628 values weren't equal. 22629 22630 If this pattern is not defined, then a plain compare pattern and 22631 conditional branch pattern is used. 22632 22633`clear_cache' 22634 This pattern, if defined, flushes the instruction cache for a 22635 region of memory. The region is bounded to by the Pmode pointers 22636 in operand 0 inclusive and operand 1 exclusive. 22637 22638 If this pattern is not defined, a call to the library function 22639 `__clear_cache' is used. 22640 22641 22642 22643File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 22644 2264516.10 When the Order of Patterns Matters 22646======================================== 22647 22648Sometimes an insn can match more than one instruction pattern. Then the 22649pattern that appears first in the machine description is the one used. 22650Therefore, more specific patterns (patterns that will match fewer 22651things) and faster instructions (those that will produce better code 22652when they do match) should usually go first in the description. 22653 22654 In some cases the effect of ordering the patterns can be used to hide 22655a pattern when it is not valid. For example, the 68000 has an 22656instruction for converting a fullword to floating point and another for 22657converting a byte to floating point. An instruction converting an 22658integer to floating point could match either one. We put the pattern 22659to convert the fullword first to make sure that one will be used rather 22660than the other. (Otherwise a large integer might be generated as a 22661single-byte immediate quantity, which would not work.) Instead of 22662using this pattern ordering it would be possible to make the pattern 22663for convert-a-byte smart enough to deal properly with any constant 22664value. 22665 22666 22667File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 22668 2266916.11 Interdependence of Patterns 22670================================= 22671 22672In some cases machines support instructions identical except for the 22673machine mode of one or more operands. For example, there may be 22674"sign-extend halfword" and "sign-extend byte" instructions whose 22675patterns are 22676 22677 (set (match_operand:SI 0 ...) 22678 (extend:SI (match_operand:HI 1 ...))) 22679 22680 (set (match_operand:SI 0 ...) 22681 (extend:SI (match_operand:QI 1 ...))) 22682 22683Constant integers do not specify a machine mode, so an instruction to 22684extend a constant value could match either pattern. The pattern it 22685actually will match is the one that appears first in the file. For 22686correct results, this must be the one for the widest possible mode 22687(`HImode', here). If the pattern matches the `QImode' instruction, the 22688results will be incorrect if the constant value does not actually fit 22689that mode. 22690 22691 Such instructions to extend constants are rarely generated because 22692they are optimized away, but they do occasionally happen in nonoptimized 22693compilations. 22694 22695 If a constraint in a pattern allows a constant, the reload pass may 22696replace a register with a constant permitted by the constraint in some 22697cases. Similarly for memory references. Because of this substitution, 22698you should not provide separate patterns for increment and decrement 22699instructions. Instead, they should be generated from the same pattern 22700that supports register-register add insns by examining the operands and 22701generating the appropriate machine instruction. 22702 22703 22704File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 22705 2270616.12 Defining Jump Instruction Patterns 22707======================================== 22708 22709GCC does not assume anything about how the machine realizes jumps. The 22710machine description should define a single pattern, usually a 22711`define_expand', which expands to all the required insns. 22712 22713 Usually, this would be a comparison insn to set the condition code and 22714a separate branch insn testing the condition code and branching or not 22715according to its value. For many machines, however, separating 22716compares and branches is limiting, which is why the more flexible 22717approach with one `define_expand' is used in GCC. The machine 22718description becomes clearer for architectures that have 22719compare-and-branch instructions but no condition code. It also works 22720better when different sets of comparison operators are supported by 22721different kinds of conditional branches (e.g. integer vs. 22722floating-point), or by conditional branches with respect to conditional 22723stores. 22724 22725 Two separate insns are always used if the machine description 22726represents a condition code register using the legacy RTL expression 22727`(cc0)', and on most machines that use a separate condition code 22728register (*note Condition Code::). For machines that use `(cc0)', in 22729fact, the set and use of the condition code must be separate and 22730adjacent(1), thus allowing flags in `cc_status' to be used (*note 22731Condition Code::) and so that the comparison and branch insns could be 22732located from each other by using the functions `prev_cc0_setter' and 22733`next_cc0_user'. 22734 22735 Even in this case having a single entry point for conditional branches 22736is advantageous, because it handles equally well the case where a single 22737comparison instruction records the results of both signed and unsigned 22738comparison of the given operands (with the branch insns coming in 22739distinct signed and unsigned flavors) as in the x86 or SPARC, and the 22740case where there are distinct signed and unsigned compare instructions 22741and only one set of conditional branch instructions as in the PowerPC. 22742 22743 ---------- Footnotes ---------- 22744 22745 (1) `note' insns can separate them, though. 22746 22747 22748File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 22749 2275016.13 Defining Looping Instruction Patterns 22751=========================================== 22752 22753Some machines have special jump instructions that can be utilized to 22754make loops more efficient. A common example is the 68000 `dbra' 22755instruction which performs a decrement of a register and a branch if the 22756result was greater than zero. Other machines, in particular digital 22757signal processors (DSPs), have special block repeat instructions to 22758provide low-overhead loop support. For example, the TI TMS320C3x/C4x 22759DSPs have a block repeat instruction that loads special registers to 22760mark the top and end of a loop and to count the number of loop 22761iterations. This avoids the need for fetching and executing a 22762`dbra'-like instruction and avoids pipeline stalls associated with the 22763jump. 22764 22765 GCC has three special named patterns to support low overhead looping. 22766They are `decrement_and_branch_until_zero', `doloop_begin', and 22767`doloop_end'. The first pattern, `decrement_and_branch_until_zero', is 22768not emitted during RTL generation but may be emitted during the 22769instruction combination phase. This requires the assistance of the 22770loop optimizer, using information collected during strength reduction, 22771to reverse a loop to count down to zero. Some targets also require the 22772loop optimizer to add a `REG_NONNEG' note to indicate that the 22773iteration count is always positive. This is needed if the target 22774performs a signed loop termination test. For example, the 68000 uses a 22775pattern similar to the following for its `dbra' instruction: 22776 22777 (define_insn "decrement_and_branch_until_zero" 22778 [(set (pc) 22779 (if_then_else 22780 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 22781 (const_int -1)) 22782 (const_int 0)) 22783 (label_ref (match_operand 1 "" "")) 22784 (pc))) 22785 (set (match_dup 0) 22786 (plus:SI (match_dup 0) 22787 (const_int -1)))] 22788 "find_reg_note (insn, REG_NONNEG, 0)" 22789 "...") 22790 22791 Note that since the insn is both a jump insn and has an output, it must 22792deal with its own reloads, hence the `m' constraints. Also note that 22793since this insn is generated by the instruction combination phase 22794combining two sequential insns together into an implicit parallel insn, 22795the iteration counter needs to be biased by the same amount as the 22796decrement operation, in this case -1. Note that the following similar 22797pattern will not be matched by the combiner. 22798 22799 (define_insn "decrement_and_branch_until_zero" 22800 [(set (pc) 22801 (if_then_else 22802 (ge (match_operand:SI 0 "general_operand" "+d*am") 22803 (const_int 1)) 22804 (label_ref (match_operand 1 "" "")) 22805 (pc))) 22806 (set (match_dup 0) 22807 (plus:SI (match_dup 0) 22808 (const_int -1)))] 22809 "find_reg_note (insn, REG_NONNEG, 0)" 22810 "...") 22811 22812 The other two special looping patterns, `doloop_begin' and 22813`doloop_end', are emitted by the loop optimizer for certain 22814well-behaved loops with a finite number of loop iterations using 22815information collected during strength reduction. 22816 22817 The `doloop_end' pattern describes the actual looping instruction (or 22818the implicit looping operation) and the `doloop_begin' pattern is an 22819optional companion pattern that can be used for initialization needed 22820for some low-overhead looping instructions. 22821 22822 Note that some machines require the actual looping instruction to be 22823emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 22824the true RTL for a looping instruction at the top of the loop can cause 22825problems with flow analysis. So instead, a dummy `doloop' insn is 22826emitted at the end of the loop. The machine dependent reorg pass checks 22827for the presence of this `doloop' insn and then searches back to the 22828top of the loop, where it inserts the true looping insn (provided there 22829are no instructions in the loop which would cause problems). Any 22830additional labels can be emitted at this point. In addition, if the 22831desired special iteration counter register was not allocated, this 22832machine dependent reorg pass could emit a traditional compare and jump 22833instruction pair. 22834 22835 The essential difference between the `decrement_and_branch_until_zero' 22836and the `doloop_end' patterns is that the loop optimizer allocates an 22837additional pseudo register for the latter as an iteration counter. 22838This pseudo register cannot be used within the loop (i.e., general 22839induction variables cannot be derived from it), however, in many cases 22840the loop induction variable may become redundant and removed by the 22841flow pass. 22842 22843 22844File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 22845 2284616.14 Canonicalization of Instructions 22847====================================== 22848 22849There are often cases where multiple RTL expressions could represent an 22850operation performed by a single machine instruction. This situation is 22851most commonly encountered with logical, branch, and multiply-accumulate 22852instructions. In such cases, the compiler attempts to convert these 22853multiple RTL expressions into a single canonical form to reduce the 22854number of insn patterns required. 22855 22856 In addition to algebraic simplifications, following canonicalizations 22857are performed: 22858 22859 * For commutative and comparison operators, a constant is always 22860 made the second operand. If a machine only supports a constant as 22861 the second operand, only patterns that match a constant in the 22862 second operand need be supplied. 22863 22864 * For associative operators, a sequence of operators will always 22865 chain to the left; for instance, only the left operand of an 22866 integer `plus' can itself be a `plus'. `and', `ior', `xor', 22867 `plus', `mult', `smin', `smax', `umin', and `umax' are associative 22868 when applied to integers, and sometimes to floating-point. 22869 22870 * For these operators, if only one operand is a `neg', `not', 22871 `mult', `plus', or `minus' expression, it will be the first 22872 operand. 22873 22874 * In combinations of `neg', `mult', `plus', and `minus', the `neg' 22875 operations (if any) will be moved inside the operations as far as 22876 possible. For instance, `(neg (mult A B))' is canonicalized as 22877 `(mult (neg A) B)', but `(plus (mult (neg B) C) A)' is 22878 canonicalized as `(minus A (mult B C))'. 22879 22880 * For the `compare' operator, a constant is always the second operand 22881 if the first argument is a condition code register or `(cc0)'. 22882 22883 * An operand of `neg', `not', `mult', `plus', or `minus' is made the 22884 first operand under the same conditions as above. 22885 22886 * `(ltu (plus A B) B)' is converted to `(ltu (plus A B) A)'. 22887 Likewise with `geu' instead of `ltu'. 22888 22889 * `(minus X (const_int N))' is converted to `(plus X (const_int 22890 -N))'. 22891 22892 * Within address computations (i.e., inside `mem'), a left shift is 22893 converted into the appropriate multiplication by a power of two. 22894 22895 * De Morgan's Law is used to move bitwise negation inside a bitwise 22896 logical-and or logical-or operation. If this results in only one 22897 operand being a `not' expression, it will be the first one. 22898 22899 A machine that has an instruction that performs a bitwise 22900 logical-and of one operand with the bitwise negation of the other 22901 should specify the pattern for that instruction as 22902 22903 (define_insn "" 22904 [(set (match_operand:M 0 ...) 22905 (and:M (not:M (match_operand:M 1 ...)) 22906 (match_operand:M 2 ...)))] 22907 "..." 22908 "...") 22909 22910 Similarly, a pattern for a "NAND" instruction should be written 22911 22912 (define_insn "" 22913 [(set (match_operand:M 0 ...) 22914 (ior:M (not:M (match_operand:M 1 ...)) 22915 (not:M (match_operand:M 2 ...))))] 22916 "..." 22917 "...") 22918 22919 In both cases, it is not necessary to include patterns for the many 22920 logically equivalent RTL expressions. 22921 22922 * The only possible RTL expressions involving both bitwise 22923 exclusive-or and bitwise negation are `(xor:M X Y)' and `(not:M 22924 (xor:M X Y))'. 22925 22926 * The sum of three items, one of which is a constant, will only 22927 appear in the form 22928 22929 (plus:M (plus:M X Y) CONSTANT) 22930 22931 * Equality comparisons of a group of bits (usually a single bit) 22932 with zero will be written using `zero_extract' rather than the 22933 equivalent `and' or `sign_extract' operations. 22934 22935 22936 Further canonicalization rules are defined in the function 22937`commutative_operand_precedence' in `gcc/rtlanal.c'. 22938 22939 22940File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 22941 2294216.15 Defining RTL Sequences for Code Generation 22943================================================ 22944 22945On some target machines, some standard pattern names for RTL generation 22946cannot be handled with single insn, but a sequence of RTL insns can 22947represent them. For these target machines, you can write a 22948`define_expand' to specify how to generate the sequence of RTL. 22949 22950 A `define_expand' is an RTL expression that looks almost like a 22951`define_insn'; but, unlike the latter, a `define_expand' is used only 22952for RTL generation and it can produce more than one RTL insn. 22953 22954 A `define_expand' RTX has four operands: 22955 22956 * The name. Each `define_expand' must have a name, since the only 22957 use for it is to refer to it by name. 22958 22959 * The RTL template. This is a vector of RTL expressions representing 22960 a sequence of separate instructions. Unlike `define_insn', there 22961 is no implicit surrounding `PARALLEL'. 22962 22963 * The condition, a string containing a C expression. This 22964 expression is used to express how the availability of this pattern 22965 depends on subclasses of target machine, selected by command-line 22966 options when GCC is run. This is just like the condition of a 22967 `define_insn' that has a standard name. Therefore, the condition 22968 (if present) may not depend on the data in the insn being matched, 22969 but only the target-machine-type flags. The compiler needs to 22970 test these conditions during initialization in order to learn 22971 exactly which named instructions are available in a particular run. 22972 22973 * The preparation statements, a string containing zero or more C 22974 statements which are to be executed before RTL code is generated 22975 from the RTL template. 22976 22977 Usually these statements prepare temporary registers for use as 22978 internal operands in the RTL template, but they can also generate 22979 RTL insns directly by calling routines such as `emit_insn', etc. 22980 Any such insns precede the ones that come from the RTL template. 22981 22982 Every RTL insn emitted by a `define_expand' must match some 22983`define_insn' in the machine description. Otherwise, the compiler will 22984crash when trying to generate code for the insn or trying to optimize 22985it. 22986 22987 The RTL template, in addition to controlling generation of RTL insns, 22988also describes the operands that need to be specified when this pattern 22989is used. In particular, it gives a predicate for each operand. 22990 22991 A true operand, which needs to be specified in order to generate RTL 22992from the pattern, should be described with a `match_operand' in its 22993first occurrence in the RTL template. This enters information on the 22994operand's predicate into the tables that record such things. GCC uses 22995the information to preload the operand into a register if that is 22996required for valid RTL code. If the operand is referred to more than 22997once, subsequent references should use `match_dup'. 22998 22999 The RTL template may also refer to internal "operands" which are 23000temporary registers or labels used only within the sequence made by the 23001`define_expand'. Internal operands are substituted into the RTL 23002template with `match_dup', never with `match_operand'. The values of 23003the internal operands are not passed in as arguments by the compiler 23004when it requests use of this pattern. Instead, they are computed 23005within the pattern, in the preparation statements. These statements 23006compute the values and store them into the appropriate elements of 23007`operands' so that `match_dup' can find them. 23008 23009 There are two special macros defined for use in the preparation 23010statements: `DONE' and `FAIL'. Use them with a following semicolon, as 23011a statement. 23012 23013`DONE' 23014 Use the `DONE' macro to end RTL generation for the pattern. The 23015 only RTL insns resulting from the pattern on this occasion will be 23016 those already emitted by explicit calls to `emit_insn' within the 23017 preparation statements; the RTL template will not be generated. 23018 23019`FAIL' 23020 Make the pattern fail on this occasion. When a pattern fails, it 23021 means that the pattern was not truly available. The calling 23022 routines in the compiler will try other strategies for code 23023 generation using other patterns. 23024 23025 Failure is currently supported only for binary (addition, 23026 multiplication, shifting, etc.) and bit-field (`extv', `extzv', 23027 and `insv') operations. 23028 23029 If the preparation falls through (invokes neither `DONE' nor `FAIL'), 23030then the `define_expand' acts like a `define_insn' in that the RTL 23031template is used to generate the insn. 23032 23033 The RTL template is not used for matching, only for generating the 23034initial insn list. If the preparation statement always invokes `DONE' 23035or `FAIL', the RTL template may be reduced to a simple list of 23036operands, such as this example: 23037 23038 (define_expand "addsi3" 23039 [(match_operand:SI 0 "register_operand" "") 23040 (match_operand:SI 1 "register_operand" "") 23041 (match_operand:SI 2 "register_operand" "")] 23042 "" 23043 " 23044 { 23045 handle_add (operands[0], operands[1], operands[2]); 23046 DONE; 23047 }") 23048 23049 Here is an example, the definition of left-shift for the SPUR chip: 23050 23051 (define_expand "ashlsi3" 23052 [(set (match_operand:SI 0 "register_operand" "") 23053 (ashift:SI 23054 (match_operand:SI 1 "register_operand" "") 23055 (match_operand:SI 2 "nonmemory_operand" "")))] 23056 "" 23057 " 23058 23059 { 23060 if (GET_CODE (operands[2]) != CONST_INT 23061 || (unsigned) INTVAL (operands[2]) > 3) 23062 FAIL; 23063 }") 23064 23065This example uses `define_expand' so that it can generate an RTL insn 23066for shifting when the shift-count is in the supported range of 0 to 3 23067but fail in other cases where machine insns aren't available. When it 23068fails, the compiler tries another strategy using different patterns 23069(such as, a library call). 23070 23071 If the compiler were able to handle nontrivial condition-strings in 23072patterns with names, then it would be possible to use a `define_insn' 23073in that case. Here is another case (zero-extension on the 68000) which 23074makes more use of the power of `define_expand': 23075 23076 (define_expand "zero_extendhisi2" 23077 [(set (match_operand:SI 0 "general_operand" "") 23078 (const_int 0)) 23079 (set (strict_low_part 23080 (subreg:HI 23081 (match_dup 0) 23082 0)) 23083 (match_operand:HI 1 "general_operand" ""))] 23084 "" 23085 "operands[1] = make_safe_from (operands[1], operands[0]);") 23086 23087Here two RTL insns are generated, one to clear the entire output operand 23088and the other to copy the input operand into its low half. This 23089sequence is incorrect if the input operand refers to [the old value of] 23090the output operand, so the preparation statement makes sure this isn't 23091so. The function `make_safe_from' copies the `operands[1]' into a 23092temporary register if it refers to `operands[0]'. It does this by 23093emitting another RTL insn. 23094 23095 Finally, a third example shows the use of an internal operand. 23096Zero-extension on the SPUR chip is done by `and'-ing the result against 23097a halfword mask. But this mask cannot be represented by a `const_int' 23098because the constant value is too large to be legitimate on this 23099machine. So it must be copied into a register with `force_reg' and 23100then the register used in the `and'. 23101 23102 (define_expand "zero_extendhisi2" 23103 [(set (match_operand:SI 0 "register_operand" "") 23104 (and:SI (subreg:SI 23105 (match_operand:HI 1 "register_operand" "") 23106 0) 23107 (match_dup 2)))] 23108 "" 23109 "operands[2] 23110 = force_reg (SImode, GEN_INT (65535)); ") 23111 23112 _Note:_ If the `define_expand' is used to serve a standard binary or 23113unary arithmetic operation or a bit-field operation, then the last insn 23114it generates must not be a `code_label', `barrier' or `note'. It must 23115be an `insn', `jump_insn' or `call_insn'. If you don't need a real insn 23116at the end, emit an insn to copy the result of the operation into 23117itself. Such an insn will generate no code, but it can avoid problems 23118in the compiler. 23119 23120 23121File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 23122 2312316.16 Defining How to Split Instructions 23124======================================== 23125 23126There are two cases where you should specify how to split a pattern 23127into multiple insns. On machines that have instructions requiring 23128delay slots (*note Delay Slots::) or that have instructions whose 23129output is not available for multiple cycles (*note Processor pipeline 23130description::), the compiler phases that optimize these cases need to 23131be able to move insns into one-instruction delay slots. However, some 23132insns may generate more than one machine instruction. These insns 23133cannot be placed into a delay slot. 23134 23135 Often you can rewrite the single insn as a list of individual insns, 23136each corresponding to one machine instruction. The disadvantage of 23137doing so is that it will cause the compilation to be slower and require 23138more space. If the resulting insns are too complex, it may also 23139suppress some optimizations. The compiler splits the insn if there is a 23140reason to believe that it might improve instruction or delay slot 23141scheduling. 23142 23143 The insn combiner phase also splits putative insns. If three insns are 23144merged into one insn with a complex expression that cannot be matched by 23145some `define_insn' pattern, the combiner phase attempts to split the 23146complex pattern into two insns that are recognized. Usually it can 23147break the complex pattern into two patterns by splitting out some 23148subexpression. However, in some other cases, such as performing an 23149addition of a large constant in two insns on a RISC machine, the way to 23150split the addition into two insns is machine-dependent. 23151 23152 The `define_split' definition tells the compiler how to split a 23153complex insn into several simpler insns. It looks like this: 23154 23155 (define_split 23156 [INSN-PATTERN] 23157 "CONDITION" 23158 [NEW-INSN-PATTERN-1 23159 NEW-INSN-PATTERN-2 23160 ...] 23161 "PREPARATION-STATEMENTS") 23162 23163 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 23164final condition to be tested, as in a `define_insn'. When an insn 23165matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 23166in the insn list with the insns given by NEW-INSN-PATTERN-1, 23167NEW-INSN-PATTERN-2, etc. 23168 23169 The PREPARATION-STATEMENTS are similar to those statements that are 23170specified for `define_expand' (*note Expander Definitions::) and are 23171executed before the new RTL is generated to prepare for the generated 23172code or emit some insns whose pattern is not fixed. Unlike those in 23173`define_expand', however, these statements must not generate any new 23174pseudo-registers. Once reload has completed, they also must not 23175allocate any space in the stack frame. 23176 23177 Patterns are matched against INSN-PATTERN in two different 23178circumstances. If an insn needs to be split for delay slot scheduling 23179or insn scheduling, the insn is already known to be valid, which means 23180that it must have been matched by some `define_insn' and, if 23181`reload_completed' is nonzero, is known to satisfy the constraints of 23182that `define_insn'. In that case, the new insn patterns must also be 23183insns that are matched by some `define_insn' and, if `reload_completed' 23184is nonzero, must also satisfy the constraints of those definitions. 23185 23186 As an example of this usage of `define_split', consider the following 23187example from `a29k.md', which splits a `sign_extend' from `HImode' to 23188`SImode' into a pair of shift insns: 23189 23190 (define_split 23191 [(set (match_operand:SI 0 "gen_reg_operand" "") 23192 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 23193 "" 23194 [(set (match_dup 0) 23195 (ashift:SI (match_dup 1) 23196 (const_int 16))) 23197 (set (match_dup 0) 23198 (ashiftrt:SI (match_dup 0) 23199 (const_int 16)))] 23200 " 23201 { operands[1] = gen_lowpart (SImode, operands[1]); }") 23202 23203 When the combiner phase tries to split an insn pattern, it is always 23204the case that the pattern is _not_ matched by any `define_insn'. The 23205combiner pass first tries to split a single `set' expression and then 23206the same `set' expression inside a `parallel', but followed by a 23207`clobber' of a pseudo-reg to use as a scratch register. In these 23208cases, the combiner expects exactly two new insn patterns to be 23209generated. It will verify that these patterns match some `define_insn' 23210definitions, so you need not do this test in the `define_split' (of 23211course, there is no point in writing a `define_split' that will never 23212produce insns that match). 23213 23214 Here is an example of this use of `define_split', taken from 23215`rs6000.md': 23216 23217 (define_split 23218 [(set (match_operand:SI 0 "gen_reg_operand" "") 23219 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 23220 (match_operand:SI 2 "non_add_cint_operand" "")))] 23221 "" 23222 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 23223 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 23224 " 23225 { 23226 int low = INTVAL (operands[2]) & 0xffff; 23227 int high = (unsigned) INTVAL (operands[2]) >> 16; 23228 23229 if (low & 0x8000) 23230 high++, low |= 0xffff0000; 23231 23232 operands[3] = GEN_INT (high << 16); 23233 operands[4] = GEN_INT (low); 23234 }") 23235 23236 Here the predicate `non_add_cint_operand' matches any `const_int' that 23237is _not_ a valid operand of a single add insn. The add with the 23238smaller displacement is written so that it can be substituted into the 23239address of a subsequent operation. 23240 23241 An example that uses a scratch register, from the same file, generates 23242an equality comparison of a register and a large constant: 23243 23244 (define_split 23245 [(set (match_operand:CC 0 "cc_reg_operand" "") 23246 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 23247 (match_operand:SI 2 "non_short_cint_operand" ""))) 23248 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 23249 "find_single_use (operands[0], insn, 0) 23250 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 23251 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 23252 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 23253 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 23254 " 23255 { 23256 /* Get the constant we are comparing against, C, and see what it 23257 looks like sign-extended to 16 bits. Then see what constant 23258 could be XOR'ed with C to get the sign-extended value. */ 23259 23260 int c = INTVAL (operands[2]); 23261 int sextc = (c << 16) >> 16; 23262 int xorv = c ^ sextc; 23263 23264 operands[4] = GEN_INT (xorv); 23265 operands[5] = GEN_INT (sextc); 23266 }") 23267 23268 To avoid confusion, don't write a single `define_split' that accepts 23269some insns that match some `define_insn' as well as some insns that 23270don't. Instead, write two separate `define_split' definitions, one for 23271the insns that are valid and one for the insns that are not valid. 23272 23273 The splitter is allowed to split jump instructions into sequence of 23274jumps or create new jumps in while splitting non-jump instructions. As 23275the central flowgraph and branch prediction information needs to be 23276updated, several restriction apply. 23277 23278 Splitting of jump instruction into sequence that over by another jump 23279instruction is always valid, as compiler expect identical behavior of 23280new jump. When new sequence contains multiple jump instructions or new 23281labels, more assistance is needed. Splitter is required to create only 23282unconditional jumps, or simple conditional jump instructions. 23283Additionally it must attach a `REG_BR_PROB' note to each conditional 23284jump. A global variable `split_branch_probability' holds the 23285probability of the original branch in case it was a simple conditional 23286jump, -1 otherwise. To simplify recomputing of edge frequencies, the 23287new sequence is required to have only forward jumps to the newly 23288created labels. 23289 23290 For the common case where the pattern of a define_split exactly 23291matches the pattern of a define_insn, use `define_insn_and_split'. It 23292looks like this: 23293 23294 (define_insn_and_split 23295 [INSN-PATTERN] 23296 "CONDITION" 23297 "OUTPUT-TEMPLATE" 23298 "SPLIT-CONDITION" 23299 [NEW-INSN-PATTERN-1 23300 NEW-INSN-PATTERN-2 23301 ...] 23302 "PREPARATION-STATEMENTS" 23303 [INSN-ATTRIBUTES]) 23304 23305 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 23306as in `define_insn'. The NEW-INSN-PATTERN vector and the 23307PREPARATION-STATEMENTS are used as in a `define_split'. The 23308SPLIT-CONDITION is also used as in `define_split', with the additional 23309behavior that if the condition starts with `&&', the condition used for 23310the split will be the constructed as a logical "and" of the split 23311condition with the insn condition. For example, from i386.md: 23312 23313 (define_insn_and_split "zero_extendhisi2_and" 23314 [(set (match_operand:SI 0 "register_operand" "=r") 23315 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 23316 (clobber (reg:CC 17))] 23317 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 23318 "#" 23319 "&& reload_completed" 23320 [(parallel [(set (match_dup 0) 23321 (and:SI (match_dup 0) (const_int 65535))) 23322 (clobber (reg:CC 17))])] 23323 "" 23324 [(set_attr "type" "alu1")]) 23325 23326 In this case, the actual split condition will be 23327`TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 23328 23329 The `define_insn_and_split' construction provides exactly the same 23330functionality as two separate `define_insn' and `define_split' 23331patterns. It exists for compactness, and as a maintenance tool to 23332prevent having to ensure the two patterns' templates match. 23333 23334 23335File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 23336 2333716.17 Including Patterns in Machine Descriptions. 23338================================================= 23339 23340The `include' pattern tells the compiler tools where to look for 23341patterns that are in files other than in the file `.md'. This is used 23342only at build time and there is no preprocessing allowed. 23343 23344 It looks like: 23345 23346 23347 (include 23348 PATHNAME) 23349 23350 For example: 23351 23352 23353 (include "filestuff") 23354 23355 Where PATHNAME is a string that specifies the location of the file, 23356specifies the include file to be in `gcc/config/target/filestuff'. The 23357directory `gcc/config/target' is regarded as the default directory. 23358 23359 Machine descriptions may be split up into smaller more manageable 23360subsections and placed into subdirectories. 23361 23362 By specifying: 23363 23364 23365 (include "BOGUS/filestuff") 23366 23367 the include file is specified to be in 23368`gcc/config/TARGET/BOGUS/filestuff'. 23369 23370 Specifying an absolute path for the include file such as; 23371 23372 (include "/u2/BOGUS/filestuff") 23373 is permitted but is not encouraged. 23374 2337516.17.1 RTL Generation Tool Options for Directory Search 23376-------------------------------------------------------- 23377 23378The `-IDIR' option specifies directories to search for machine 23379descriptions. For example: 23380 23381 23382 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 23383 23384 Add the directory DIR to the head of the list of directories to be 23385searched for header files. This can be used to override a system 23386machine definition file, substituting your own version, since these 23387directories are searched before the default machine description file 23388directories. If you use more than one `-I' option, the directories are 23389scanned in left-to-right order; the standard default directory come 23390after. 23391 23392 23393File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 23394 2339516.18 Machine-Specific Peephole Optimizers 23396========================================== 23397 23398In addition to instruction patterns the `md' file may contain 23399definitions of machine-specific peephole optimizations. 23400 23401 The combiner does not notice certain peephole optimizations when the 23402data flow in the program does not suggest that it should try them. For 23403example, sometimes two consecutive insns related in purpose can be 23404combined even though the second one does not appear to use a register 23405computed in the first one. A machine-specific peephole optimizer can 23406detect such opportunities. 23407 23408 There are two forms of peephole definitions that may be used. The 23409original `define_peephole' is run at assembly output time to match 23410insns and substitute assembly text. Use of `define_peephole' is 23411deprecated. 23412 23413 A newer `define_peephole2' matches insns and substitutes new insns. 23414The `peephole2' pass is run after register allocation but before 23415scheduling, which may result in much better code for targets that do 23416scheduling. 23417 23418* Menu: 23419 23420* define_peephole:: RTL to Text Peephole Optimizers 23421* define_peephole2:: RTL to RTL Peephole Optimizers 23422 23423 23424File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 23425 2342616.18.1 RTL to Text Peephole Optimizers 23427--------------------------------------- 23428 23429A definition looks like this: 23430 23431 (define_peephole 23432 [INSN-PATTERN-1 23433 INSN-PATTERN-2 23434 ...] 23435 "CONDITION" 23436 "TEMPLATE" 23437 "OPTIONAL-INSN-ATTRIBUTES") 23438 23439The last string operand may be omitted if you are not using any 23440machine-specific information in this machine description. If present, 23441it must obey the same rules as in a `define_insn'. 23442 23443 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 23444consecutive insns. The optimization applies to a sequence of insns when 23445INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 23446and so on. 23447 23448 Each of the insns matched by a peephole must also match a 23449`define_insn'. Peepholes are checked only at the last stage just 23450before code generation, and only optionally. Therefore, any insn which 23451would match a peephole but no `define_insn' will cause a crash in code 23452generation in an unoptimized compilation, or at various optimization 23453stages. 23454 23455 The operands of the insns are matched with `match_operands', 23456`match_operator', and `match_dup', as usual. What is not usual is that 23457the operand numbers apply to all the insn patterns in the definition. 23458So, you can check for identical operands in two insns by using 23459`match_operand' in one insn and `match_dup' in the other. 23460 23461 The operand constraints used in `match_operand' patterns do not have 23462any direct effect on the applicability of the peephole, but they will 23463be validated afterward, so make sure your constraints are general enough 23464to apply whenever the peephole matches. If the peephole matches but 23465the constraints are not satisfied, the compiler will crash. 23466 23467 It is safe to omit constraints in all the operands of the peephole; or 23468you can write constraints which serve as a double-check on the criteria 23469previously tested. 23470 23471 Once a sequence of insns matches the patterns, the CONDITION is 23472checked. This is a C expression which makes the final decision whether 23473to perform the optimization (we do so if the expression is nonzero). If 23474CONDITION is omitted (in other words, the string is empty) then the 23475optimization is applied to every sequence of insns that matches the 23476patterns. 23477 23478 The defined peephole optimizations are applied after register 23479allocation is complete. Therefore, the peephole definition can check 23480which operands have ended up in which kinds of registers, just by 23481looking at the operands. 23482 23483 The way to refer to the operands in CONDITION is to write 23484`operands[I]' for operand number I (as matched by `(match_operand I 23485...)'). Use the variable `insn' to refer to the last of the insns 23486being matched; use `prev_active_insn' to find the preceding insns. 23487 23488 When optimizing computations with intermediate results, you can use 23489CONDITION to match only when the intermediate results are not used 23490elsewhere. Use the C expression `dead_or_set_p (INSN, OP)', where INSN 23491is the insn in which you expect the value to be used for the last time 23492(from the value of `insn', together with use of `prev_nonnote_insn'), 23493and OP is the intermediate value (from `operands[I]'). 23494 23495 Applying the optimization means replacing the sequence of insns with 23496one new insn. The TEMPLATE controls ultimate output of assembler code 23497for this combined insn. It works exactly like the template of a 23498`define_insn'. Operand numbers in this template are the same ones used 23499in matching the original sequence of insns. 23500 23501 The result of a defined peephole optimizer does not need to match any 23502of the insn patterns in the machine description; it does not even have 23503an opportunity to match them. The peephole optimizer definition itself 23504serves as the insn pattern to control how the insn is output. 23505 23506 Defined peephole optimizers are run as assembler code is being output, 23507so the insns they produce are never combined or rearranged in any way. 23508 23509 Here is an example, taken from the 68000 machine description: 23510 23511 (define_peephole 23512 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 23513 (set (match_operand:DF 0 "register_operand" "=f") 23514 (match_operand:DF 1 "register_operand" "ad"))] 23515 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 23516 { 23517 rtx xoperands[2]; 23518 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 23519 #ifdef MOTOROLA 23520 output_asm_insn ("move.l %1,(sp)", xoperands); 23521 output_asm_insn ("move.l %1,-(sp)", operands); 23522 return "fmove.d (sp)+,%0"; 23523 #else 23524 output_asm_insn ("movel %1,sp@", xoperands); 23525 output_asm_insn ("movel %1,sp@-", operands); 23526 return "fmoved sp@+,%0"; 23527 #endif 23528 }) 23529 23530 The effect of this optimization is to change 23531 23532 jbsr _foobar 23533 addql #4,sp 23534 movel d1,sp@- 23535 movel d0,sp@- 23536 fmoved sp@+,fp0 23537 23538into 23539 23540 jbsr _foobar 23541 movel d1,sp@ 23542 movel d0,sp@- 23543 fmoved sp@+,fp0 23544 23545 INSN-PATTERN-1 and so on look _almost_ like the second operand of 23546`define_insn'. There is one important difference: the second operand 23547of `define_insn' consists of one or more RTX's enclosed in square 23548brackets. Usually, there is only one: then the same action can be 23549written as an element of a `define_peephole'. But when there are 23550multiple actions in a `define_insn', they are implicitly enclosed in a 23551`parallel'. Then you must explicitly write the `parallel', and the 23552square brackets within it, in the `define_peephole'. Thus, if an insn 23553pattern looks like this, 23554 23555 (define_insn "divmodsi4" 23556 [(set (match_operand:SI 0 "general_operand" "=d") 23557 (div:SI (match_operand:SI 1 "general_operand" "0") 23558 (match_operand:SI 2 "general_operand" "dmsK"))) 23559 (set (match_operand:SI 3 "general_operand" "=d") 23560 (mod:SI (match_dup 1) (match_dup 2)))] 23561 "TARGET_68020" 23562 "divsl%.l %2,%3:%0") 23563 23564then the way to mention this insn in a peephole is as follows: 23565 23566 (define_peephole 23567 [... 23568 (parallel 23569 [(set (match_operand:SI 0 "general_operand" "=d") 23570 (div:SI (match_operand:SI 1 "general_operand" "0") 23571 (match_operand:SI 2 "general_operand" "dmsK"))) 23572 (set (match_operand:SI 3 "general_operand" "=d") 23573 (mod:SI (match_dup 1) (match_dup 2)))]) 23574 ...] 23575 ...) 23576 23577 23578File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 23579 2358016.18.2 RTL to RTL Peephole Optimizers 23581-------------------------------------- 23582 23583The `define_peephole2' definition tells the compiler how to substitute 23584one sequence of instructions for another sequence, what additional 23585scratch registers may be needed and what their lifetimes must be. 23586 23587 (define_peephole2 23588 [INSN-PATTERN-1 23589 INSN-PATTERN-2 23590 ...] 23591 "CONDITION" 23592 [NEW-INSN-PATTERN-1 23593 NEW-INSN-PATTERN-2 23594 ...] 23595 "PREPARATION-STATEMENTS") 23596 23597 The definition is almost identical to `define_split' (*note Insn 23598Splitting::) except that the pattern to match is not a single 23599instruction, but a sequence of instructions. 23600 23601 It is possible to request additional scratch registers for use in the 23602output template. If appropriate registers are not free, the pattern 23603will simply not match. 23604 23605 Scratch registers are requested with a `match_scratch' pattern at the 23606top level of the input pattern. The allocated register (initially) will 23607be dead at the point requested within the original sequence. If the 23608scratch is used at more than a single point, a `match_dup' pattern at 23609the top level of the input pattern marks the last position in the input 23610sequence at which the register must be available. 23611 23612 Here is an example from the IA-32 machine description: 23613 23614 (define_peephole2 23615 [(match_scratch:SI 2 "r") 23616 (parallel [(set (match_operand:SI 0 "register_operand" "") 23617 (match_operator:SI 3 "arith_or_logical_operator" 23618 [(match_dup 0) 23619 (match_operand:SI 1 "memory_operand" "")])) 23620 (clobber (reg:CC 17))])] 23621 "! optimize_size && ! TARGET_READ_MODIFY" 23622 [(set (match_dup 2) (match_dup 1)) 23623 (parallel [(set (match_dup 0) 23624 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 23625 (clobber (reg:CC 17))])] 23626 "") 23627 23628This pattern tries to split a load from its use in the hopes that we'll 23629be able to schedule around the memory load latency. It allocates a 23630single `SImode' register of class `GENERAL_REGS' (`"r"') that needs to 23631be live only at the point just before the arithmetic. 23632 23633 A real example requiring extended scratch lifetimes is harder to come 23634by, so here's a silly made-up example: 23635 23636 (define_peephole2 23637 [(match_scratch:SI 4 "r") 23638 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 23639 (set (match_operand:SI 2 "" "") (match_dup 1)) 23640 (match_dup 4) 23641 (set (match_operand:SI 3 "" "") (match_dup 1))] 23642 "/* determine 1 does not overlap 0 and 2 */" 23643 [(set (match_dup 4) (match_dup 1)) 23644 (set (match_dup 0) (match_dup 4)) 23645 (set (match_dup 2) (match_dup 4))] 23646 (set (match_dup 3) (match_dup 4))] 23647 "") 23648 23649If we had not added the `(match_dup 4)' in the middle of the input 23650sequence, it might have been the case that the register we chose at the 23651beginning of the sequence is killed by the first or second `set'. 23652 23653 23654File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 23655 2365616.19 Instruction Attributes 23657============================ 23658 23659In addition to describing the instruction supported by the target 23660machine, the `md' file also defines a group of "attributes" and a set of 23661values for each. Every generated insn is assigned a value for each 23662attribute. One possible attribute would be the effect that the insn 23663has on the machine's condition code. This attribute can then be used 23664by `NOTICE_UPDATE_CC' to track the condition codes. 23665 23666* Menu: 23667 23668* Defining Attributes:: Specifying attributes and their values. 23669* Expressions:: Valid expressions for attribute values. 23670* Tagging Insns:: Assigning attribute values to insns. 23671* Attr Example:: An example of assigning attributes. 23672* Insn Lengths:: Computing the length of insns. 23673* Constant Attributes:: Defining attributes that are constant. 23674* Delay Slots:: Defining delay slots required for a machine. 23675* Processor pipeline description:: Specifying information for insn scheduling. 23676 23677 23678File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 23679 2368016.19.1 Defining Attributes and their Values 23681-------------------------------------------- 23682 23683The `define_attr' expression is used to define each attribute required 23684by the target machine. It looks like: 23685 23686 (define_attr NAME LIST-OF-VALUES DEFAULT) 23687 23688 NAME is a string specifying the name of the attribute being defined. 23689 23690 LIST-OF-VALUES is either a string that specifies a comma-separated 23691list of values that can be assigned to the attribute, or a null string 23692to indicate that the attribute takes numeric values. 23693 23694 DEFAULT is an attribute expression that gives the value of this 23695attribute for insns that match patterns whose definition does not 23696include an explicit value for this attribute. *Note Attr Example::, 23697for more information on the handling of defaults. *Note Constant 23698Attributes::, for information on attributes that do not depend on any 23699particular insn. 23700 23701 For each defined attribute, a number of definitions are written to the 23702`insn-attr.h' file. For cases where an explicit set of values is 23703specified for an attribute, the following are defined: 23704 23705 * A `#define' is written for the symbol `HAVE_ATTR_NAME'. 23706 23707 * An enumerated class is defined for `attr_NAME' with elements of 23708 the form `UPPER-NAME_UPPER-VALUE' where the attribute name and 23709 value are first converted to uppercase. 23710 23711 * A function `get_attr_NAME' is defined that is passed an insn and 23712 returns the attribute value for that insn. 23713 23714 For example, if the following is present in the `md' file: 23715 23716 (define_attr "type" "branch,fp,load,store,arith" ...) 23717 23718the following lines will be written to the file `insn-attr.h'. 23719 23720 #define HAVE_ATTR_type 23721 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 23722 TYPE_STORE, TYPE_ARITH}; 23723 extern enum attr_type get_attr_type (); 23724 23725 If the attribute takes numeric values, no `enum' type will be defined 23726and the function to obtain the attribute's value will return `int'. 23727 23728 There are attributes which are tied to a specific meaning. These 23729attributes are not free to use for other purposes: 23730 23731`length' 23732 The `length' attribute is used to calculate the length of emitted 23733 code chunks. This is especially important when verifying branch 23734 distances. *Note Insn Lengths::. 23735 23736`enabled' 23737 The `enabled' attribute can be defined to prevent certain 23738 alternatives of an insn definition from being used during code 23739 generation. *Note Disable Insn Alternatives::. 23740 23741 23742 23743File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 23744 2374516.19.2 Attribute Expressions 23746----------------------------- 23747 23748RTL expressions used to define attributes use the codes described above 23749plus a few specific to attribute definitions, to be discussed below. 23750Attribute value expressions must have one of the following forms: 23751 23752`(const_int I)' 23753 The integer I specifies the value of a numeric attribute. I must 23754 be non-negative. 23755 23756 The value of a numeric attribute can be specified either with a 23757 `const_int', or as an integer represented as a string in 23758 `const_string', `eq_attr' (see below), `attr', `symbol_ref', 23759 simple arithmetic expressions, and `set_attr' overrides on 23760 specific instructions (*note Tagging Insns::). 23761 23762`(const_string VALUE)' 23763 The string VALUE specifies a constant attribute value. If VALUE 23764 is specified as `"*"', it means that the default value of the 23765 attribute is to be used for the insn containing this expression. 23766 `"*"' obviously cannot be used in the DEFAULT expression of a 23767 `define_attr'. 23768 23769 If the attribute whose value is being specified is numeric, VALUE 23770 must be a string containing a non-negative integer (normally 23771 `const_int' would be used in this case). Otherwise, it must 23772 contain one of the valid values for the attribute. 23773 23774`(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 23775 TEST specifies an attribute test, whose format is defined below. 23776 The value of this expression is TRUE-VALUE if TEST is true, 23777 otherwise it is FALSE-VALUE. 23778 23779`(cond [TEST1 VALUE1 ...] DEFAULT)' 23780 The first operand of this expression is a vector containing an even 23781 number of expressions and consisting of pairs of TEST and VALUE 23782 expressions. The value of the `cond' expression is that of the 23783 VALUE corresponding to the first true TEST expression. If none of 23784 the TEST expressions are true, the value of the `cond' expression 23785 is that of the DEFAULT expression. 23786 23787 TEST expressions can have one of the following forms: 23788 23789`(const_int I)' 23790 This test is true if I is nonzero and false otherwise. 23791 23792`(not TEST)' 23793`(ior TEST1 TEST2)' 23794`(and TEST1 TEST2)' 23795 These tests are true if the indicated logical function is true. 23796 23797`(match_operand:M N PRED CONSTRAINTS)' 23798 This test is true if operand N of the insn whose attribute value 23799 is being determined has mode M (this part of the test is ignored 23800 if M is `VOIDmode') and the function specified by the string PRED 23801 returns a nonzero value when passed operand N and mode M (this 23802 part of the test is ignored if PRED is the null string). 23803 23804 The CONSTRAINTS operand is ignored and should be the null string. 23805 23806`(le ARITH1 ARITH2)' 23807`(leu ARITH1 ARITH2)' 23808`(lt ARITH1 ARITH2)' 23809`(ltu ARITH1 ARITH2)' 23810`(gt ARITH1 ARITH2)' 23811`(gtu ARITH1 ARITH2)' 23812`(ge ARITH1 ARITH2)' 23813`(geu ARITH1 ARITH2)' 23814`(ne ARITH1 ARITH2)' 23815`(eq ARITH1 ARITH2)' 23816 These tests are true if the indicated comparison of the two 23817 arithmetic expressions is true. Arithmetic expressions are formed 23818 with `plus', `minus', `mult', `div', `mod', `abs', `neg', `and', 23819 `ior', `xor', `not', `ashift', `lshiftrt', and `ashiftrt' 23820 expressions. 23821 23822 `const_int' and `symbol_ref' are always valid terms (*note Insn 23823 Lengths::,for additional forms). `symbol_ref' is a string 23824 denoting a C expression that yields an `int' when evaluated by the 23825 `get_attr_...' routine. It should normally be a global variable. 23826 23827`(eq_attr NAME VALUE)' 23828 NAME is a string specifying the name of an attribute. 23829 23830 VALUE is a string that is either a valid value for attribute NAME, 23831 a comma-separated list of values, or `!' followed by a value or 23832 list. If VALUE does not begin with a `!', this test is true if 23833 the value of the NAME attribute of the current insn is in the list 23834 specified by VALUE. If VALUE begins with a `!', this test is true 23835 if the attribute's value is _not_ in the specified list. 23836 23837 For example, 23838 23839 (eq_attr "type" "load,store") 23840 23841 is equivalent to 23842 23843 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 23844 23845 If NAME specifies an attribute of `alternative', it refers to the 23846 value of the compiler variable `which_alternative' (*note Output 23847 Statement::) and the values must be small integers. For example, 23848 23849 (eq_attr "alternative" "2,3") 23850 23851 is equivalent to 23852 23853 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 23854 (eq (symbol_ref "which_alternative") (const_int 3))) 23855 23856 Note that, for most attributes, an `eq_attr' test is simplified in 23857 cases where the value of the attribute being tested is known for 23858 all insns matching a particular pattern. This is by far the most 23859 common case. 23860 23861`(attr_flag NAME)' 23862 The value of an `attr_flag' expression is true if the flag 23863 specified by NAME is true for the `insn' currently being scheduled. 23864 23865 NAME is a string specifying one of a fixed set of flags to test. 23866 Test the flags `forward' and `backward' to determine the direction 23867 of a conditional branch. Test the flags `very_likely', `likely', 23868 `very_unlikely', and `unlikely' to determine if a conditional 23869 branch is expected to be taken. 23870 23871 If the `very_likely' flag is true, then the `likely' flag is also 23872 true. Likewise for the `very_unlikely' and `unlikely' flags. 23873 23874 This example describes a conditional branch delay slot which can 23875 be nullified for forward branches that are taken (annul-true) or 23876 for backward branches which are not taken (annul-false). 23877 23878 (define_delay (eq_attr "type" "cbranch") 23879 [(eq_attr "in_branch_delay" "true") 23880 (and (eq_attr "in_branch_delay" "true") 23881 (attr_flag "forward")) 23882 (and (eq_attr "in_branch_delay" "true") 23883 (attr_flag "backward"))]) 23884 23885 The `forward' and `backward' flags are false if the current `insn' 23886 being scheduled is not a conditional branch. 23887 23888 The `very_likely' and `likely' flags are true if the `insn' being 23889 scheduled is not a conditional branch. The `very_unlikely' and 23890 `unlikely' flags are false if the `insn' being scheduled is not a 23891 conditional branch. 23892 23893 `attr_flag' is only used during delay slot scheduling and has no 23894 meaning to other passes of the compiler. 23895 23896`(attr NAME)' 23897 The value of another attribute is returned. This is most useful 23898 for numeric attributes, as `eq_attr' and `attr_flag' produce more 23899 efficient code for non-numeric attributes. 23900 23901 23902File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 23903 2390416.19.3 Assigning Attribute Values to Insns 23905------------------------------------------- 23906 23907The value assigned to an attribute of an insn is primarily determined by 23908which pattern is matched by that insn (or which `define_peephole' 23909generated it). Every `define_insn' and `define_peephole' can have an 23910optional last argument to specify the values of attributes for matching 23911insns. The value of any attribute not specified in a particular insn 23912is set to the default value for that attribute, as specified in its 23913`define_attr'. Extensive use of default values for attributes permits 23914the specification of the values for only one or two attributes in the 23915definition of most insn patterns, as seen in the example in the next 23916section. 23917 23918 The optional last argument of `define_insn' and `define_peephole' is a 23919vector of expressions, each of which defines the value for a single 23920attribute. The most general way of assigning an attribute's value is 23921to use a `set' expression whose first operand is an `attr' expression 23922giving the name of the attribute being set. The second operand of the 23923`set' is an attribute expression (*note Expressions::) giving the value 23924of the attribute. 23925 23926 When the attribute value depends on the `alternative' attribute (i.e., 23927which is the applicable alternative in the constraint of the insn), the 23928`set_attr_alternative' expression can be used. It allows the 23929specification of a vector of attribute expressions, one for each 23930alternative. 23931 23932 When the generality of arbitrary attribute expressions is not required, 23933the simpler `set_attr' expression can be used, which allows specifying 23934a string giving either a single attribute value or a list of attribute 23935values, one for each alternative. 23936 23937 The form of each of the above specifications is shown below. In each 23938case, NAME is a string specifying the attribute to be set. 23939 23940`(set_attr NAME VALUE-STRING)' 23941 VALUE-STRING is either a string giving the desired attribute value, 23942 or a string containing a comma-separated list giving the values for 23943 succeeding alternatives. The number of elements must match the 23944 number of alternatives in the constraint of the insn pattern. 23945 23946 Note that it may be useful to specify `*' for some alternative, in 23947 which case the attribute will assume its default value for insns 23948 matching that alternative. 23949 23950`(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 23951 Depending on the alternative of the insn, the value will be one of 23952 the specified values. This is a shorthand for using a `cond' with 23953 tests on the `alternative' attribute. 23954 23955`(set (attr NAME) VALUE)' 23956 The first operand of this `set' must be the special RTL expression 23957 `attr', whose sole operand is a string giving the name of the 23958 attribute being set. VALUE is the value of the attribute. 23959 23960 The following shows three different ways of representing the same 23961attribute value specification: 23962 23963 (set_attr "type" "load,store,arith") 23964 23965 (set_attr_alternative "type" 23966 [(const_string "load") (const_string "store") 23967 (const_string "arith")]) 23968 23969 (set (attr "type") 23970 (cond [(eq_attr "alternative" "1") (const_string "load") 23971 (eq_attr "alternative" "2") (const_string "store")] 23972 (const_string "arith"))) 23973 23974 The `define_asm_attributes' expression provides a mechanism to specify 23975the attributes assigned to insns produced from an `asm' statement. It 23976has the form: 23977 23978 (define_asm_attributes [ATTR-SETS]) 23979 23980where ATTR-SETS is specified the same as for both the `define_insn' and 23981the `define_peephole' expressions. 23982 23983 These values will typically be the "worst case" attribute values. For 23984example, they might indicate that the condition code will be clobbered. 23985 23986 A specification for a `length' attribute is handled specially. The 23987way to compute the length of an `asm' insn is to multiply the length 23988specified in the expression `define_asm_attributes' by the number of 23989machine instructions specified in the `asm' statement, determined by 23990counting the number of semicolons and newlines in the string. 23991Therefore, the value of the `length' attribute specified in a 23992`define_asm_attributes' should be the maximum possible length of a 23993single machine instruction. 23994 23995 23996File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 23997 2399816.19.4 Example of Attribute Specifications 23999------------------------------------------- 24000 24001The judicious use of defaulting is important in the efficient use of 24002insn attributes. Typically, insns are divided into "types" and an 24003attribute, customarily called `type', is used to represent this value. 24004This attribute is normally used only to define the default value for 24005other attributes. An example will clarify this usage. 24006 24007 Assume we have a RISC machine with a condition code and in which only 24008full-word operations are performed in registers. Let us assume that we 24009can divide all insns into loads, stores, (integer) arithmetic 24010operations, floating point operations, and branches. 24011 24012 Here we will concern ourselves with determining the effect of an insn 24013on the condition code and will limit ourselves to the following possible 24014effects: The condition code can be set unpredictably (clobbered), not 24015be changed, be set to agree with the results of the operation, or only 24016changed if the item previously set into the condition code has been 24017modified. 24018 24019 Here is part of a sample `md' file for such a machine: 24020 24021 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 24022 24023 (define_attr "cc" "clobber,unchanged,set,change0" 24024 (cond [(eq_attr "type" "load") 24025 (const_string "change0") 24026 (eq_attr "type" "store,branch") 24027 (const_string "unchanged") 24028 (eq_attr "type" "arith") 24029 (if_then_else (match_operand:SI 0 "" "") 24030 (const_string "set") 24031 (const_string "clobber"))] 24032 (const_string "clobber"))) 24033 24034 (define_insn "" 24035 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 24036 (match_operand:SI 1 "general_operand" "r,m,r"))] 24037 "" 24038 "@ 24039 move %0,%1 24040 load %0,%1 24041 store %0,%1" 24042 [(set_attr "type" "arith,load,store")]) 24043 24044 Note that we assume in the above example that arithmetic operations 24045performed on quantities smaller than a machine word clobber the 24046condition code since they will set the condition code to a value 24047corresponding to the full-word result. 24048 24049 24050File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 24051 2405216.19.5 Computing the Length of an Insn 24053--------------------------------------- 24054 24055For many machines, multiple types of branch instructions are provided, 24056each for different length branch displacements. In most cases, the 24057assembler will choose the correct instruction to use. However, when 24058the assembler cannot do so, GCC can when a special attribute, the 24059`length' attribute, is defined. This attribute must be defined to have 24060numeric values by specifying a null string in its `define_attr'. 24061 24062 In the case of the `length' attribute, two additional forms of 24063arithmetic terms are allowed in test expressions: 24064 24065`(match_dup N)' 24066 This refers to the address of operand N of the current insn, which 24067 must be a `label_ref'. 24068 24069`(pc)' 24070 This refers to the address of the _current_ insn. It might have 24071 been more consistent with other usage to make this the address of 24072 the _next_ insn but this would be confusing because the length of 24073 the current insn is to be computed. 24074 24075 For normal insns, the length will be determined by value of the 24076`length' attribute. In the case of `addr_vec' and `addr_diff_vec' insn 24077patterns, the length is computed as the number of vectors multiplied by 24078the size of each vector. 24079 24080 Lengths are measured in addressable storage units (bytes). 24081 24082 The following macros can be used to refine the length computation: 24083 24084`ADJUST_INSN_LENGTH (INSN, LENGTH)' 24085 If defined, modifies the length assigned to instruction INSN as a 24086 function of the context in which it is used. LENGTH is an lvalue 24087 that contains the initially computed length of the insn and should 24088 be updated with the correct length of the insn. 24089 24090 This macro will normally not be required. A case in which it is 24091 required is the ROMP. On this machine, the size of an `addr_vec' 24092 insn must be increased by two to compensate for the fact that 24093 alignment may be required. 24094 24095 The routine that returns `get_attr_length' (the value of the `length' 24096attribute) can be used by the output routine to determine the form of 24097the branch instruction to be written, as the example below illustrates. 24098 24099 As an example of the specification of variable-length branches, 24100consider the IBM 360. If we adopt the convention that a register will 24101be set to the starting address of a function, we can jump to labels 24102within 4k of the start using a four-byte instruction. Otherwise, we 24103need a six-byte sequence to load the address from memory and then 24104branch to it. 24105 24106 On such a machine, a pattern for a branch instruction might be 24107specified as follows: 24108 24109 (define_insn "jump" 24110 [(set (pc) 24111 (label_ref (match_operand 0 "" "")))] 24112 "" 24113 { 24114 return (get_attr_length (insn) == 4 24115 ? "b %l0" : "l r15,=a(%l0); br r15"); 24116 } 24117 [(set (attr "length") 24118 (if_then_else (lt (match_dup 0) (const_int 4096)) 24119 (const_int 4) 24120 (const_int 6)))]) 24121 24122 24123File: gccint.info, Node: Constant Attributes, Next: Delay Slots, Prev: Insn Lengths, Up: Insn Attributes 24124 2412516.19.6 Constant Attributes 24126--------------------------- 24127 24128A special form of `define_attr', where the expression for the default 24129value is a `const' expression, indicates an attribute that is constant 24130for a given run of the compiler. Constant attributes may be used to 24131specify which variety of processor is used. For example, 24132 24133 (define_attr "cpu" "m88100,m88110,m88000" 24134 (const 24135 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 24136 (symbol_ref "TARGET_88110") (const_string "m88110")] 24137 (const_string "m88000")))) 24138 24139 (define_attr "memory" "fast,slow" 24140 (const 24141 (if_then_else (symbol_ref "TARGET_FAST_MEM") 24142 (const_string "fast") 24143 (const_string "slow")))) 24144 24145 The routine generated for constant attributes has no parameters as it 24146does not depend on any particular insn. RTL expressions used to define 24147the value of a constant attribute may use the `symbol_ref' form, but 24148may not use either the `match_operand' form or `eq_attr' forms 24149involving insn attributes. 24150 24151 24152File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Constant Attributes, Up: Insn Attributes 24153 2415416.19.7 Delay Slot Scheduling 24155----------------------------- 24156 24157The insn attribute mechanism can be used to specify the requirements for 24158delay slots, if any, on a target machine. An instruction is said to 24159require a "delay slot" if some instructions that are physically after 24160the instruction are executed as if they were located before it. 24161Classic examples are branch and call instructions, which often execute 24162the following instruction before the branch or call is performed. 24163 24164 On some machines, conditional branch instructions can optionally 24165"annul" instructions in the delay slot. This means that the 24166instruction will not be executed for certain branch outcomes. Both 24167instructions that annul if the branch is true and instructions that 24168annul if the branch is false are supported. 24169 24170 Delay slot scheduling differs from instruction scheduling in that 24171determining whether an instruction needs a delay slot is dependent only 24172on the type of instruction being generated, not on data flow between the 24173instructions. See the next section for a discussion of data-dependent 24174instruction scheduling. 24175 24176 The requirement of an insn needing one or more delay slots is indicated 24177via the `define_delay' expression. It has the following form: 24178 24179 (define_delay TEST 24180 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 24181 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 24182 ...]) 24183 24184 TEST is an attribute test that indicates whether this `define_delay' 24185applies to a particular insn. If so, the number of required delay 24186slots is determined by the length of the vector specified as the second 24187argument. An insn placed in delay slot N must satisfy attribute test 24188DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 24189may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 24190specifies which insns in the delay slot may be annulled if the branch 24191is false. If annulling is not supported for that delay slot, `(nil)' 24192should be coded. 24193 24194 For example, in the common case where branch and call insns require a 24195single delay slot, which may contain any insn other than a branch or 24196call, the following would be placed in the `md' file: 24197 24198 (define_delay (eq_attr "type" "branch,call") 24199 [(eq_attr "type" "!branch,call") (nil) (nil)]) 24200 24201 Multiple `define_delay' expressions may be specified. In this case, 24202each such expression specifies different delay slot requirements and 24203there must be no insn for which tests in two `define_delay' expressions 24204are both true. 24205 24206 For example, if we have a machine that requires one delay slot for 24207branches but two for calls, no delay slot can contain a branch or call 24208insn, and any valid insn in the delay slot for the branch can be 24209annulled if the branch is true, we might represent this as follows: 24210 24211 (define_delay (eq_attr "type" "branch") 24212 [(eq_attr "type" "!branch,call") 24213 (eq_attr "type" "!branch,call") 24214 (nil)]) 24215 24216 (define_delay (eq_attr "type" "call") 24217 [(eq_attr "type" "!branch,call") (nil) (nil) 24218 (eq_attr "type" "!branch,call") (nil) (nil)]) 24219 24220 24221File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 24222 2422316.19.8 Specifying processor pipeline description 24224------------------------------------------------- 24225 24226To achieve better performance, most modern processors (super-pipelined, 24227superscalar RISC, and VLIW processors) have many "functional units" on 24228which several instructions can be executed simultaneously. An 24229instruction starts execution if its issue conditions are satisfied. If 24230not, the instruction is stalled until its conditions are satisfied. 24231Such "interlock (pipeline) delay" causes interruption of the fetching 24232of successor instructions (or demands nop instructions, e.g. for some 24233MIPS processors). 24234 24235 There are two major kinds of interlock delays in modern processors. 24236The first one is a data dependence delay determining "instruction 24237latency time". The instruction execution is not started until all 24238source data have been evaluated by prior instructions (there are more 24239complex cases when the instruction execution starts even when the data 24240are not available but will be ready in given time after the instruction 24241execution start). Taking the data dependence delays into account is 24242simple. The data dependence (true, output, and anti-dependence) delay 24243between two instructions is given by a constant. In most cases this 24244approach is adequate. The second kind of interlock delays is a 24245reservation delay. The reservation delay means that two instructions 24246under execution will be in need of shared processors resources, i.e. 24247buses, internal registers, and/or functional units, which are reserved 24248for some time. Taking this kind of delay into account is complex 24249especially for modern RISC processors. 24250 24251 The task of exploiting more processor parallelism is solved by an 24252instruction scheduler. For a better solution to this problem, the 24253instruction scheduler has to have an adequate description of the 24254processor parallelism (or "pipeline description"). GCC machine 24255descriptions describe processor parallelism and functional unit 24256reservations for groups of instructions with the aid of "regular 24257expressions". 24258 24259 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 24260figure out the possibility of the instruction issue by the processor on 24261a given simulated processor cycle. The pipeline hazard recognizer is 24262automatically generated from the processor pipeline description. The 24263pipeline hazard recognizer generated from the machine description is 24264based on a deterministic finite state automaton (DFA): the instruction 24265issue is possible if there is a transition from one automaton state to 24266another one. This algorithm is very fast, and furthermore, its speed 24267is not dependent on processor complexity(1). 24268 24269 The rest of this section describes the directives that constitute an 24270automaton-based processor pipeline description. The order of these 24271constructions within the machine description file is not important. 24272 24273 The following optional construction describes names of automata 24274generated and used for the pipeline hazards recognition. Sometimes the 24275generated finite state automaton used by the pipeline hazard recognizer 24276is large. If we use more than one automaton and bind functional units 24277to the automata, the total size of the automata is usually less than 24278the size of the single automaton. If there is no one such 24279construction, only one finite state automaton is generated. 24280 24281 (define_automaton AUTOMATA-NAMES) 24282 24283 AUTOMATA-NAMES is a string giving names of the automata. The names 24284are separated by commas. All the automata should have unique names. 24285The automaton name is used in the constructions `define_cpu_unit' and 24286`define_query_cpu_unit'. 24287 24288 Each processor functional unit used in the description of instruction 24289reservations should be described by the following construction. 24290 24291 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 24292 24293 UNIT-NAMES is a string giving the names of the functional units 24294separated by commas. Don't use name `nothing', it is reserved for 24295other goals. 24296 24297 AUTOMATON-NAME is a string giving the name of the automaton with which 24298the unit is bound. The automaton should be described in construction 24299`define_automaton'. You should give "automaton-name", if there is a 24300defined automaton. 24301 24302 The assignment of units to automata are constrained by the uses of the 24303units in insn reservations. The most important constraint is: if a 24304unit reservation is present on a particular cycle of an alternative for 24305an insn reservation, then some unit from the same automaton must be 24306present on the same cycle for the other alternatives of the insn 24307reservation. The rest of the constraints are mentioned in the 24308description of the subsequent constructions. 24309 24310 The following construction describes CPU functional units analogously 24311to `define_cpu_unit'. The reservation of such units can be queried for 24312an automaton state. The instruction scheduler never queries 24313reservation of functional units for given automaton state. So as a 24314rule, you don't need this construction. This construction could be 24315used for future code generation goals (e.g. to generate VLIW insn 24316templates). 24317 24318 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 24319 24320 UNIT-NAMES is a string giving names of the functional units separated 24321by commas. 24322 24323 AUTOMATON-NAME is a string giving the name of the automaton with which 24324the unit is bound. 24325 24326 The following construction is the major one to describe pipeline 24327characteristics of an instruction. 24328 24329 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 24330 CONDITION REGEXP) 24331 24332 DEFAULT_LATENCY is a number giving latency time of the instruction. 24333There is an important difference between the old description and the 24334automaton based pipeline description. The latency time is used for all 24335dependencies when we use the old description. In the automaton based 24336pipeline description, the given latency time is only used for true 24337dependencies. The cost of anti-dependencies is always zero and the 24338cost of output dependencies is the difference between latency times of 24339the producing and consuming insns (if the difference is negative, the 24340cost is considered to be zero). You can always change the default 24341costs for any description by using the target hook 24342`TARGET_SCHED_ADJUST_COST' (*note Scheduling::). 24343 24344 INSN-NAME is a string giving the internal name of the insn. The 24345internal names are used in constructions `define_bypass' and in the 24346automaton description file generated for debugging. The internal name 24347has nothing in common with the names in `define_insn'. It is a good 24348practice to use insn classes described in the processor manual. 24349 24350 CONDITION defines what RTL insns are described by this construction. 24351You should remember that you will be in trouble if CONDITION for two or 24352more different `define_insn_reservation' constructions is TRUE for an 24353insn. In this case what reservation will be used for the insn is not 24354defined. Such cases are not checked during generation of the pipeline 24355hazards recognizer because in general recognizing that two conditions 24356may have the same value is quite difficult (especially if the conditions 24357contain `symbol_ref'). It is also not checked during the pipeline 24358hazard recognizer work because it would slow down the recognizer 24359considerably. 24360 24361 REGEXP is a string describing the reservation of the cpu's functional 24362units by the instruction. The reservations are described by a regular 24363expression according to the following syntax: 24364 24365 regexp = regexp "," oneof 24366 | oneof 24367 24368 oneof = oneof "|" allof 24369 | allof 24370 24371 allof = allof "+" repeat 24372 | repeat 24373 24374 repeat = element "*" number 24375 | element 24376 24377 element = cpu_function_unit_name 24378 | reservation_name 24379 | result_name 24380 | "nothing" 24381 | "(" regexp ")" 24382 24383 * `,' is used for describing the start of the next cycle in the 24384 reservation. 24385 24386 * `|' is used for describing a reservation described by the first 24387 regular expression *or* a reservation described by the second 24388 regular expression *or* etc. 24389 24390 * `+' is used for describing a reservation described by the first 24391 regular expression *and* a reservation described by the second 24392 regular expression *and* etc. 24393 24394 * `*' is used for convenience and simply means a sequence in which 24395 the regular expression are repeated NUMBER times with cycle 24396 advancing (see `,'). 24397 24398 * `cpu_function_unit_name' denotes reservation of the named 24399 functional unit. 24400 24401 * `reservation_name' -- see description of construction 24402 `define_reservation'. 24403 24404 * `nothing' denotes no unit reservations. 24405 24406 Sometimes unit reservations for different insns contain common parts. 24407In such case, you can simplify the pipeline description by describing 24408the common part by the following construction 24409 24410 (define_reservation RESERVATION-NAME REGEXP) 24411 24412 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 24413names and reservation names are in the same name space. So the 24414reservation names should be different from the functional unit names 24415and can not be the reserved name `nothing'. 24416 24417 The following construction is used to describe exceptions in the 24418latency time for given instruction pair. This is so called bypasses. 24419 24420 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 24421 [GUARD]) 24422 24423 NUMBER defines when the result generated by the instructions given in 24424string OUT_INSN_NAMES will be ready for the instructions given in 24425string IN_INSN_NAMES. The instructions in the string are separated by 24426commas. 24427 24428 GUARD is an optional string giving the name of a C function which 24429defines an additional guard for the bypass. The function will get the 24430two insns as parameters. If the function returns zero the bypass will 24431be ignored for this case. The additional guard is necessary to 24432recognize complicated bypasses, e.g. when the consumer is only an 24433address of insn `store' (not a stored value). 24434 24435 If there are more one bypass with the same output and input insns, the 24436chosen bypass is the first bypass with a guard in description whose 24437guard function returns nonzero. If there is no such bypass, then 24438bypass without the guard function is chosen. 24439 24440 The following five constructions are usually used to describe VLIW 24441processors, or more precisely, to describe a placement of small 24442instructions into VLIW instruction slots. They can be used for RISC 24443processors, too. 24444 24445 (exclusion_set UNIT-NAMES UNIT-NAMES) 24446 (presence_set UNIT-NAMES PATTERNS) 24447 (final_presence_set UNIT-NAMES PATTERNS) 24448 (absence_set UNIT-NAMES PATTERNS) 24449 (final_absence_set UNIT-NAMES PATTERNS) 24450 24451 UNIT-NAMES is a string giving names of functional units separated by 24452commas. 24453 24454 PATTERNS is a string giving patterns of functional units separated by 24455comma. Currently pattern is one unit or units separated by 24456white-spaces. 24457 24458 The first construction (`exclusion_set') means that each functional 24459unit in the first string can not be reserved simultaneously with a unit 24460whose name is in the second string and vice versa. For example, the 24461construction is useful for describing processors (e.g. some SPARC 24462processors) with a fully pipelined floating point functional unit which 24463can execute simultaneously only single floating point insns or only 24464double floating point insns. 24465 24466 The second construction (`presence_set') means that each functional 24467unit in the first string can not be reserved unless at least one of 24468pattern of units whose names are in the second string is reserved. 24469This is an asymmetric relation. For example, it is useful for 24470description that VLIW `slot1' is reserved after `slot0' reservation. 24471We could describe it by the following construction 24472 24473 (presence_set "slot1" "slot0") 24474 24475 Or `slot1' is reserved only after `slot0' and unit `b0' reservation. 24476In this case we could write 24477 24478 (presence_set "slot1" "slot0 b0") 24479 24480 The third construction (`final_presence_set') is analogous to 24481`presence_set'. The difference between them is when checking is done. 24482When an instruction is issued in given automaton state reflecting all 24483current and planned unit reservations, the automaton state is changed. 24484The first state is a source state, the second one is a result state. 24485Checking for `presence_set' is done on the source state reservation, 24486checking for `final_presence_set' is done on the result reservation. 24487This construction is useful to describe a reservation which is actually 24488two subsequent reservations. For example, if we use 24489 24490 (presence_set "slot1" "slot0") 24491 24492 the following insn will be never issued (because `slot1' requires 24493`slot0' which is absent in the source state). 24494 24495 (define_reservation "insn_and_nop" "slot0 + slot1") 24496 24497 but it can be issued if we use analogous `final_presence_set'. 24498 24499 The forth construction (`absence_set') means that each functional unit 24500in the first string can be reserved only if each pattern of units whose 24501names are in the second string is not reserved. This is an asymmetric 24502relation (actually `exclusion_set' is analogous to this one but it is 24503symmetric). For example it might be useful in a VLIW description to 24504say that `slot0' cannot be reserved after either `slot1' or `slot2' 24505have been reserved. This can be described as: 24506 24507 (absence_set "slot0" "slot1, slot2") 24508 24509 Or `slot2' can not be reserved if `slot0' and unit `b0' are reserved 24510or `slot1' and unit `b1' are reserved. In this case we could write 24511 24512 (absence_set "slot2" "slot0 b0, slot1 b1") 24513 24514 All functional units mentioned in a set should belong to the same 24515automaton. 24516 24517 The last construction (`final_absence_set') is analogous to 24518`absence_set' but checking is done on the result (state) reservation. 24519See comments for `final_presence_set'. 24520 24521 You can control the generator of the pipeline hazard recognizer with 24522the following construction. 24523 24524 (automata_option OPTIONS) 24525 24526 OPTIONS is a string giving options which affect the generated code. 24527Currently there are the following options: 24528 24529 * "no-minimization" makes no minimization of the automaton. This is 24530 only worth to do when we are debugging the description and need to 24531 look more accurately at reservations of states. 24532 24533 * "time" means printing time statistics about the generation of 24534 automata. 24535 24536 * "stats" means printing statistics about the generated automata 24537 such as the number of DFA states, NDFA states and arcs. 24538 24539 * "v" means a generation of the file describing the result automata. 24540 The file has suffix `.dfa' and can be used for the description 24541 verification and debugging. 24542 24543 * "w" means a generation of warning instead of error for 24544 non-critical errors. 24545 24546 * "ndfa" makes nondeterministic finite state automata. This affects 24547 the treatment of operator `|' in the regular expressions. The 24548 usual treatment of the operator is to try the first alternative 24549 and, if the reservation is not possible, the second alternative. 24550 The nondeterministic treatment means trying all alternatives, some 24551 of them may be rejected by reservations in the subsequent insns. 24552 24553 * "progress" means output of a progress bar showing how many states 24554 were generated so far for automaton being processed. This is 24555 useful during debugging a DFA description. If you see too many 24556 generated states, you could interrupt the generator of the pipeline 24557 hazard recognizer and try to figure out a reason for generation of 24558 the huge automaton. 24559 24560 As an example, consider a superscalar RISC machine which can issue 24561three insns (two integer insns and one floating point insn) on the 24562cycle but can finish only two insns. To describe this, we define the 24563following functional units. 24564 24565 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 24566 (define_cpu_unit "port0, port1") 24567 24568 All simple integer insns can be executed in any integer pipeline and 24569their result is ready in two cycles. The simple integer insns are 24570issued into the first pipeline unless it is reserved, otherwise they 24571are issued into the second pipeline. Integer division and 24572multiplication insns can be executed only in the second integer 24573pipeline and their results are ready correspondingly in 8 and 4 cycles. 24574The integer division is not pipelined, i.e. the subsequent integer 24575division insn can not be issued until the current division insn 24576finished. Floating point insns are fully pipelined and their results 24577are ready in 3 cycles. Where the result of a floating point insn is 24578used by an integer insn, an additional delay of one cycle is incurred. 24579To describe all of this we could specify 24580 24581 (define_cpu_unit "div") 24582 24583 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 24584 "(i0_pipeline | i1_pipeline), (port0 | port1)") 24585 24586 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 24587 "i1_pipeline, nothing*2, (port0 | port1)") 24588 24589 (define_insn_reservation "div" 8 (eq_attr "type" "div") 24590 "i1_pipeline, div*7, div + (port0 | port1)") 24591 24592 (define_insn_reservation "float" 3 (eq_attr "type" "float") 24593 "f_pipeline, nothing, (port0 | port1)) 24594 24595 (define_bypass 4 "float" "simple,mult,div") 24596 24597 To simplify the description we could describe the following reservation 24598 24599 (define_reservation "finish" "port0|port1") 24600 24601 and use it in all `define_insn_reservation' as in the following 24602construction 24603 24604 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 24605 "(i0_pipeline | i1_pipeline), finish") 24606 24607 ---------- Footnotes ---------- 24608 24609 (1) However, the size of the automaton depends on processor 24610complexity. To limit this effect, machine descriptions can split 24611orthogonal parts of the machine description among several automata: but 24612then, since each of these must be stepped independently, this does 24613cause a small decrease in the algorithm's performance. 24614 24615 24616File: gccint.info, Node: Conditional Execution, Next: Constant Definitions, Prev: Insn Attributes, Up: Machine Desc 24617 2461816.20 Conditional Execution 24619=========================== 24620 24621A number of architectures provide for some form of conditional 24622execution, or predication. The hallmark of this feature is the ability 24623to nullify most of the instructions in the instruction set. When the 24624instruction set is large and not entirely symmetric, it can be quite 24625tedious to describe these forms directly in the `.md' file. An 24626alternative is the `define_cond_exec' template. 24627 24628 (define_cond_exec 24629 [PREDICATE-PATTERN] 24630 "CONDITION" 24631 "OUTPUT-TEMPLATE") 24632 24633 PREDICATE-PATTERN is the condition that must be true for the insn to 24634be executed at runtime and should match a relational operator. One can 24635use `match_operator' to match several relational operators at once. 24636Any `match_operand' operands must have no more than one alternative. 24637 24638 CONDITION is a C expression that must be true for the generated 24639pattern to match. 24640 24641 OUTPUT-TEMPLATE is a string similar to the `define_insn' output 24642template (*note Output Template::), except that the `*' and `@' special 24643cases do not apply. This is only useful if the assembly text for the 24644predicate is a simple prefix to the main insn. In order to handle the 24645general case, there is a global variable `current_insn_predicate' that 24646will contain the entire predicate if the current insn is predicated, 24647and will otherwise be `NULL'. 24648 24649 When `define_cond_exec' is used, an implicit reference to the 24650`predicable' instruction attribute is made. *Note Insn Attributes::. 24651This attribute must be boolean (i.e. have exactly two elements in its 24652LIST-OF-VALUES). Further, it must not be used with complex 24653expressions. That is, the default and all uses in the insns must be a 24654simple constant, not dependent on the alternative or anything else. 24655 24656 For each `define_insn' for which the `predicable' attribute is true, a 24657new `define_insn' pattern will be generated that matches a predicated 24658version of the instruction. For example, 24659 24660 (define_insn "addsi" 24661 [(set (match_operand:SI 0 "register_operand" "r") 24662 (plus:SI (match_operand:SI 1 "register_operand" "r") 24663 (match_operand:SI 2 "register_operand" "r")))] 24664 "TEST1" 24665 "add %2,%1,%0") 24666 24667 (define_cond_exec 24668 [(ne (match_operand:CC 0 "register_operand" "c") 24669 (const_int 0))] 24670 "TEST2" 24671 "(%0)") 24672 24673generates a new pattern 24674 24675 (define_insn "" 24676 [(cond_exec 24677 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 24678 (set (match_operand:SI 0 "register_operand" "r") 24679 (plus:SI (match_operand:SI 1 "register_operand" "r") 24680 (match_operand:SI 2 "register_operand" "r"))))] 24681 "(TEST2) && (TEST1)" 24682 "(%3) add %2,%1,%0") 24683 24684 24685File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Conditional Execution, Up: Machine Desc 24686 2468716.21 Constant Definitions 24688========================== 24689 24690Using literal constants inside instruction patterns reduces legibility 24691and can be a maintenance problem. 24692 24693 To overcome this problem, you may use the `define_constants' 24694expression. It contains a vector of name-value pairs. From that point 24695on, wherever any of the names appears in the MD file, it is as if the 24696corresponding value had been written instead. You may use 24697`define_constants' multiple times; each appearance adds more constants 24698to the table. It is an error to redefine a constant with a different 24699value. 24700 24701 To come back to the a29k load multiple example, instead of 24702 24703 (define_insn "" 24704 [(match_parallel 0 "load_multiple_operation" 24705 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 24706 (match_operand:SI 2 "memory_operand" "m")) 24707 (use (reg:SI 179)) 24708 (clobber (reg:SI 179))])] 24709 "" 24710 "loadm 0,0,%1,%2") 24711 24712 You could write: 24713 24714 (define_constants [ 24715 (R_BP 177) 24716 (R_FC 178) 24717 (R_CR 179) 24718 (R_Q 180) 24719 ]) 24720 24721 (define_insn "" 24722 [(match_parallel 0 "load_multiple_operation" 24723 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 24724 (match_operand:SI 2 "memory_operand" "m")) 24725 (use (reg:SI R_CR)) 24726 (clobber (reg:SI R_CR))])] 24727 "" 24728 "loadm 0,0,%1,%2") 24729 24730 The constants that are defined with a define_constant are also output 24731in the insn-codes.h header file as #defines. 24732 24733 24734File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 24735 2473616.22 Iterators 24737=============== 24738 24739Ports often need to define similar patterns for more than one machine 24740mode or for more than one rtx code. GCC provides some simple iterator 24741facilities to make this process easier. 24742 24743* Menu: 24744 24745* Mode Iterators:: Generating variations of patterns for different modes. 24746* Code Iterators:: Doing the same for codes. 24747 24748 24749File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 24750 2475116.22.1 Mode Iterators 24752---------------------- 24753 24754Ports often need to define similar patterns for two or more different 24755modes. For example: 24756 24757 * If a processor has hardware support for both single and double 24758 floating-point arithmetic, the `SFmode' patterns tend to be very 24759 similar to the `DFmode' ones. 24760 24761 * If a port uses `SImode' pointers in one configuration and `DImode' 24762 pointers in another, it will usually have very similar `SImode' 24763 and `DImode' patterns for manipulating pointers. 24764 24765 Mode iterators allow several patterns to be instantiated from one 24766`.md' file template. They can be used with any type of rtx-based 24767construct, such as a `define_insn', `define_split', or 24768`define_peephole2'. 24769 24770* Menu: 24771 24772* Defining Mode Iterators:: Defining a new mode iterator. 24773* Substitutions:: Combining mode iterators with substitutions 24774* Examples:: Examples 24775 24776 24777File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 24778 2477916.22.1.1 Defining Mode Iterators 24780................................. 24781 24782The syntax for defining a mode iterator is: 24783 24784 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 24785 24786 This allows subsequent `.md' file constructs to use the mode suffix 24787`:NAME'. Every construct that does so will be expanded N times, once 24788with every use of `:NAME' replaced by `:MODE1', once with every use 24789replaced by `:MODE2', and so on. In the expansion for a particular 24790MODEI, every C condition will also require that CONDI be true. 24791 24792 For example: 24793 24794 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 24795 24796 defines a new mode suffix `:P'. Every construct that uses `:P' will 24797be expanded twice, once with every `:P' replaced by `:SI' and once with 24798every `:P' replaced by `:DI'. The `:SI' version will only apply if 24799`Pmode == SImode' and the `:DI' version will only apply if `Pmode == 24800DImode'. 24801 24802 As with other `.md' conditions, an empty string is treated as "always 24803true". `(MODE "")' can also be abbreviated to `MODE'. For example: 24804 24805 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 24806 24807 means that the `:DI' expansion only applies if `TARGET_64BIT' but that 24808the `:SI' expansion has no such constraint. 24809 24810 Iterators are applied in the order they are defined. This can be 24811significant if two iterators are used in a construct that requires 24812substitutions. *Note Substitutions::. 24813 24814 24815File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 24816 2481716.22.1.2 Substitution in Mode Iterators 24818........................................ 24819 24820If an `.md' file construct uses mode iterators, each version of the 24821construct will often need slightly different strings or modes. For 24822example: 24823 24824 * When a `define_expand' defines several `addM3' patterns (*note 24825 Standard Names::), each expander will need to use the appropriate 24826 mode name for M. 24827 24828 * When a `define_insn' defines several instruction patterns, each 24829 instruction will often use a different assembler mnemonic. 24830 24831 * When a `define_insn' requires operands with different modes, using 24832 an iterator for one of the operand modes usually requires a 24833 specific mode for the other operand(s). 24834 24835 GCC supports such variations through a system of "mode attributes". 24836There are two standard attributes: `mode', which is the name of the 24837mode in lower case, and `MODE', which is the same thing in upper case. 24838You can define other attributes using: 24839 24840 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 24841 24842 where NAME is the name of the attribute and VALUEI is the value 24843associated with MODEI. 24844 24845 When GCC replaces some :ITERATOR with :MODE, it will scan each string 24846and mode in the pattern for sequences of the form `<ITERATOR:ATTR>', 24847where ATTR is the name of a mode attribute. If the attribute is 24848defined for MODE, the whole `<...>' sequence will be replaced by the 24849appropriate attribute value. 24850 24851 For example, suppose an `.md' file has: 24852 24853 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 24854 (define_mode_attr load [(SI "lw") (DI "ld")]) 24855 24856 If one of the patterns that uses `:P' contains the string 24857`"<P:load>\t%0,%1"', the `SI' version of that pattern will use 24858`"lw\t%0,%1"' and the `DI' version will use `"ld\t%0,%1"'. 24859 24860 Here is an example of using an attribute for a mode: 24861 24862 (define_mode_iterator LONG [SI DI]) 24863 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 24864 (define_insn ... 24865 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 24866 24867 The `ITERATOR:' prefix may be omitted, in which case the substitution 24868will be attempted for every iterator expansion. 24869 24870 24871File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 24872 2487316.22.1.3 Mode Iterator Examples 24874................................ 24875 24876Here is an example from the MIPS port. It defines the following modes 24877and attributes (among others): 24878 24879 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 24880 (define_mode_attr d [(SI "") (DI "d")]) 24881 24882 and uses the following template to define both `subsi3' and `subdi3': 24883 24884 (define_insn "sub<mode>3" 24885 [(set (match_operand:GPR 0 "register_operand" "=d") 24886 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 24887 (match_operand:GPR 2 "register_operand" "d")))] 24888 "" 24889 "<d>subu\t%0,%1,%2" 24890 [(set_attr "type" "arith") 24891 (set_attr "mode" "<MODE>")]) 24892 24893 This is exactly equivalent to: 24894 24895 (define_insn "subsi3" 24896 [(set (match_operand:SI 0 "register_operand" "=d") 24897 (minus:SI (match_operand:SI 1 "register_operand" "d") 24898 (match_operand:SI 2 "register_operand" "d")))] 24899 "" 24900 "subu\t%0,%1,%2" 24901 [(set_attr "type" "arith") 24902 (set_attr "mode" "SI")]) 24903 24904 (define_insn "subdi3" 24905 [(set (match_operand:DI 0 "register_operand" "=d") 24906 (minus:DI (match_operand:DI 1 "register_operand" "d") 24907 (match_operand:DI 2 "register_operand" "d")))] 24908 "" 24909 "dsubu\t%0,%1,%2" 24910 [(set_attr "type" "arith") 24911 (set_attr "mode" "DI")]) 24912 24913 24914File: gccint.info, Node: Code Iterators, Prev: Mode Iterators, Up: Iterators 24915 2491616.22.2 Code Iterators 24917---------------------- 24918 24919Code iterators operate in a similar way to mode iterators. *Note Mode 24920Iterators::. 24921 24922 The construct: 24923 24924 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 24925 24926 defines a pseudo rtx code NAME that can be instantiated as CODEI if 24927condition CONDI is true. Each CODEI must have the same rtx format. 24928*Note RTL Classes::. 24929 24930 As with mode iterators, each pattern that uses NAME will be expanded N 24931times, once with all uses of NAME replaced by CODE1, once with all uses 24932replaced by CODE2, and so on. *Note Defining Mode Iterators::. 24933 24934 It is possible to define attributes for codes as well as for modes. 24935There are two standard code attributes: `code', the name of the code in 24936lower case, and `CODE', the name of the code in upper case. Other 24937attributes are defined using: 24938 24939 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 24940 24941 Here's an example of code iterators in action, taken from the MIPS 24942port: 24943 24944 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 24945 eq ne gt ge lt le gtu geu ltu leu]) 24946 24947 (define_expand "b<code>" 24948 [(set (pc) 24949 (if_then_else (any_cond:CC (cc0) 24950 (const_int 0)) 24951 (label_ref (match_operand 0 "")) 24952 (pc)))] 24953 "" 24954 { 24955 gen_conditional_branch (operands, <CODE>); 24956 DONE; 24957 }) 24958 24959 This is equivalent to: 24960 24961 (define_expand "bunordered" 24962 [(set (pc) 24963 (if_then_else (unordered:CC (cc0) 24964 (const_int 0)) 24965 (label_ref (match_operand 0 "")) 24966 (pc)))] 24967 "" 24968 { 24969 gen_conditional_branch (operands, UNORDERED); 24970 DONE; 24971 }) 24972 24973 (define_expand "bordered" 24974 [(set (pc) 24975 (if_then_else (ordered:CC (cc0) 24976 (const_int 0)) 24977 (label_ref (match_operand 0 "")) 24978 (pc)))] 24979 "" 24980 { 24981 gen_conditional_branch (operands, ORDERED); 24982 DONE; 24983 }) 24984 24985 ... 24986 24987 24988File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 24989 2499017 Target Description Macros and Functions 24991****************************************** 24992 24993In addition to the file `MACHINE.md', a machine description includes a 24994C header file conventionally given the name `MACHINE.h' and a C source 24995file named `MACHINE.c'. The header file defines numerous macros that 24996convey the information about the target machine that does not fit into 24997the scheme of the `.md' file. The file `tm.h' should be a link to 24998`MACHINE.h'. The header file `config.h' includes `tm.h' and most 24999compiler source files include `config.h'. The source file defines a 25000variable `targetm', which is a structure containing pointers to 25001functions and data relating to the target machine. `MACHINE.c' should 25002also contain their definitions, if they are not defined elsewhere in 25003GCC, and other functions called through the macros defined in the `.h' 25004file. 25005 25006* Menu: 25007 25008* Target Structure:: The `targetm' variable. 25009* Driver:: Controlling how the driver runs the compilation passes. 25010* Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'. 25011* Per-Function Data:: Defining data structures for per-function information. 25012* Storage Layout:: Defining sizes and alignments of data. 25013* Type Layout:: Defining sizes and properties of basic user data types. 25014* Registers:: Naming and describing the hardware registers. 25015* Register Classes:: Defining the classes of hardware registers. 25016* Old Constraints:: The old way to define machine-specific constraints. 25017* Stack and Calling:: Defining which way the stack grows and by how much. 25018* Varargs:: Defining the varargs macros. 25019* Trampolines:: Code set up at run time to enter a nested function. 25020* Library Calls:: Controlling how library routines are implicitly called. 25021* Addressing Modes:: Defining addressing modes valid for memory operands. 25022* Anchored Addresses:: Defining how `-fsection-anchors' should work. 25023* Condition Code:: Defining how insns update the condition code. 25024* Costs:: Defining relative costs of different operations. 25025* Scheduling:: Adjusting the behavior of the instruction scheduler. 25026* Sections:: Dividing storage into text, data, and other sections. 25027* PIC:: Macros for position independent code. 25028* Assembler Format:: Defining how to write insns and pseudo-ops to output. 25029* Debugging Info:: Defining the format of debugging output. 25030* Floating Point:: Handling floating point for cross-compilers. 25031* Mode Switching:: Insertion of mode-switching instructions. 25032* Target Attributes:: Defining target-specific uses of `__attribute__'. 25033* Emulated TLS:: Emulated TLS support. 25034* MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 25035* PCH Target:: Validity checking for precompiled headers. 25036* C++ ABI:: Controlling C++ ABI changes. 25037* Named Address Spaces:: Adding support for named address spaces 25038* Misc:: Everything else. 25039 25040 25041File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 25042 2504317.1 The Global `targetm' Variable 25044================================== 25045 25046 -- Variable: struct gcc_target targetm 25047 The target `.c' file must define the global `targetm' variable 25048 which contains pointers to functions and data relating to the 25049 target machine. The variable is declared in `target.h'; 25050 `target-def.h' defines the macro `TARGET_INITIALIZER' which is 25051 used to initialize the variable, and macros for the default 25052 initializers for elements of the structure. The `.c' file should 25053 override those macros for which the default definition is 25054 inappropriate. For example: 25055 #include "target.h" 25056 #include "target-def.h" 25057 25058 /* Initialize the GCC target structure. */ 25059 25060 #undef TARGET_COMP_TYPE_ATTRIBUTES 25061 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 25062 25063 struct gcc_target targetm = TARGET_INITIALIZER; 25064 25065Where a macro should be defined in the `.c' file in this manner to form 25066part of the `targetm' structure, it is documented below as a "Target 25067Hook" with a prototype. Many macros will change in future from being 25068defined in the `.h' file to being part of the `targetm' structure. 25069 25070 25071File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 25072 2507317.2 Controlling the Compilation Driver, `gcc' 25074============================================== 25075 25076You can control the compilation driver. 25077 25078 -- Macro: SWITCH_TAKES_ARG (CHAR) 25079 A C expression which determines whether the option `-CHAR' takes 25080 arguments. The value should be the number of arguments that 25081 option takes-zero, for many options. 25082 25083 By default, this macro is defined as `DEFAULT_SWITCH_TAKES_ARG', 25084 which handles the standard options properly. You need not define 25085 `SWITCH_TAKES_ARG' unless you wish to add additional options which 25086 take arguments. Any redefinition should call 25087 `DEFAULT_SWITCH_TAKES_ARG' and then check for additional options. 25088 25089 -- Macro: WORD_SWITCH_TAKES_ARG (NAME) 25090 A C expression which determines whether the option `-NAME' takes 25091 arguments. The value should be the number of arguments that 25092 option takes-zero, for many options. This macro rather than 25093 `SWITCH_TAKES_ARG' is used for multi-character option names. 25094 25095 By default, this macro is defined as 25096 `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options 25097 properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you 25098 wish to add additional options which take arguments. Any 25099 redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then 25100 check for additional options. 25101 25102 -- Macro: SWITCH_CURTAILS_COMPILATION (CHAR) 25103 A C expression which determines whether the option `-CHAR' stops 25104 compilation before the generation of an executable. The value is 25105 boolean, nonzero if the option does stop an executable from being 25106 generated, zero otherwise. 25107 25108 By default, this macro is defined as 25109 `DEFAULT_SWITCH_CURTAILS_COMPILATION', which handles the standard 25110 options properly. You need not define 25111 `SWITCH_CURTAILS_COMPILATION' unless you wish to add additional 25112 options which affect the generation of an executable. Any 25113 redefinition should call `DEFAULT_SWITCH_CURTAILS_COMPILATION' and 25114 then check for additional options. 25115 25116 -- Macro: SWITCHES_NEED_SPACES 25117 A string-valued C expression which enumerates the options for which 25118 the linker needs a space between the option and its argument. 25119 25120 If this macro is not defined, the default value is `""'. 25121 25122 -- Macro: TARGET_OPTION_TRANSLATE_TABLE 25123 If defined, a list of pairs of strings, the first of which is a 25124 potential command line target to the `gcc' driver program, and the 25125 second of which is a space-separated (tabs and other whitespace 25126 are not supported) list of options with which to replace the first 25127 option. The target defining this list is responsible for assuring 25128 that the results are valid. Replacement options may not be the 25129 `--opt' style, they must be the `-opt' style. It is the intention 25130 of this macro to provide a mechanism for substitution that affects 25131 the multilibs chosen, such as one option that enables many 25132 options, some of which select multilibs. Example nonsensical 25133 definition, where `-malt-abi', `-EB', and `-mspoo' cause different 25134 multilibs to be chosen: 25135 25136 #define TARGET_OPTION_TRANSLATE_TABLE \ 25137 { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \ 25138 { "-compat", "-EB -malign=4 -mspoo" } 25139 25140 -- Macro: DRIVER_SELF_SPECS 25141 A list of specs for the driver itself. It should be a suitable 25142 initializer for an array of strings, with no surrounding braces. 25143 25144 The driver applies these specs to its own command line between 25145 loading default `specs' files (but not command-line specified 25146 ones) and choosing the multilib directory or running any 25147 subcommands. It applies them in the order given, so each spec can 25148 depend on the options added by earlier ones. It is also possible 25149 to remove options using `%<OPTION' in the usual way. 25150 25151 This macro can be useful when a port has several interdependent 25152 target options. It provides a way of standardizing the command 25153 line so that the other specs are easier to write. 25154 25155 Do not define this macro if it does not need to do anything. 25156 25157 -- Macro: OPTION_DEFAULT_SPECS 25158 A list of specs used to support configure-time default options 25159 (i.e. `--with' options) in the driver. It should be a suitable 25160 initializer for an array of structures, each containing two 25161 strings, without the outermost pair of surrounding braces. 25162 25163 The first item in the pair is the name of the default. This must 25164 match the code in `config.gcc' for the target. The second item is 25165 a spec to apply if a default with this name was specified. The 25166 string `%(VALUE)' in the spec will be replaced by the value of the 25167 default everywhere it occurs. 25168 25169 The driver will apply these specs to its own command line between 25170 loading default `specs' files and processing `DRIVER_SELF_SPECS', 25171 using the same mechanism as `DRIVER_SELF_SPECS'. 25172 25173 Do not define this macro if it does not need to do anything. 25174 25175 -- Macro: CPP_SPEC 25176 A C string constant that tells the GCC driver program options to 25177 pass to CPP. It can also specify how to translate options you 25178 give to GCC into options for GCC to pass to the CPP. 25179 25180 Do not define this macro if it does not need to do anything. 25181 25182 -- Macro: CPLUSPLUS_CPP_SPEC 25183 This macro is just like `CPP_SPEC', but is used for C++, rather 25184 than C. If you do not define this macro, then the value of 25185 `CPP_SPEC' (if any) will be used instead. 25186 25187 -- Macro: CC1_SPEC 25188 A C string constant that tells the GCC driver program options to 25189 pass to `cc1', `cc1plus', `f771', and the other language front 25190 ends. It can also specify how to translate options you give to 25191 GCC into options for GCC to pass to front ends. 25192 25193 Do not define this macro if it does not need to do anything. 25194 25195 -- Macro: CC1PLUS_SPEC 25196 A C string constant that tells the GCC driver program options to 25197 pass to `cc1plus'. It can also specify how to translate options 25198 you give to GCC into options for GCC to pass to the `cc1plus'. 25199 25200 Do not define this macro if it does not need to do anything. Note 25201 that everything defined in CC1_SPEC is already passed to `cc1plus' 25202 so there is no need to duplicate the contents of CC1_SPEC in 25203 CC1PLUS_SPEC. 25204 25205 -- Macro: ASM_SPEC 25206 A C string constant that tells the GCC driver program options to 25207 pass to the assembler. It can also specify how to translate 25208 options you give to GCC into options for GCC to pass to the 25209 assembler. See the file `sun3.h' for an example of this. 25210 25211 Do not define this macro if it does not need to do anything. 25212 25213 -- Macro: ASM_FINAL_SPEC 25214 A C string constant that tells the GCC driver program how to run 25215 any programs which cleanup after the normal assembler. Normally, 25216 this is not needed. See the file `mips.h' for an example of this. 25217 25218 Do not define this macro if it does not need to do anything. 25219 25220 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 25221 Define this macro, with no value, if the driver should give the 25222 assembler an argument consisting of a single dash, `-', to 25223 instruct it to read from its standard input (which will be a pipe 25224 connected to the output of the compiler proper). This argument is 25225 given after any `-o' option specifying the name of the output file. 25226 25227 If you do not define this macro, the assembler is assumed to read 25228 its standard input if given no non-option arguments. If your 25229 assembler cannot read standard input at all, use a `%{pipe:%e}' 25230 construct; see `mips.h' for instance. 25231 25232 -- Macro: LINK_SPEC 25233 A C string constant that tells the GCC driver program options to 25234 pass to the linker. It can also specify how to translate options 25235 you give to GCC into options for GCC to pass to the linker. 25236 25237 Do not define this macro if it does not need to do anything. 25238 25239 -- Macro: LIB_SPEC 25240 Another C string constant used much like `LINK_SPEC'. The 25241 difference between the two is that `LIB_SPEC' is used at the end 25242 of the command given to the linker. 25243 25244 If this macro is not defined, a default is provided that loads the 25245 standard C library from the usual place. See `gcc.c'. 25246 25247 -- Macro: LIBGCC_SPEC 25248 Another C string constant that tells the GCC driver program how 25249 and when to place a reference to `libgcc.a' into the linker 25250 command line. This constant is placed both before and after the 25251 value of `LIB_SPEC'. 25252 25253 If this macro is not defined, the GCC driver provides a default 25254 that passes the string `-lgcc' to the linker. 25255 25256 -- Macro: REAL_LIBGCC_SPEC 25257 By default, if `ENABLE_SHARED_LIBGCC' is defined, the 25258 `LIBGCC_SPEC' is not directly used by the driver program but is 25259 instead modified to refer to different versions of `libgcc.a' 25260 depending on the values of the command line flags `-static', 25261 `-shared', `-static-libgcc', and `-shared-libgcc'. On targets 25262 where these modifications are inappropriate, define 25263 `REAL_LIBGCC_SPEC' instead. `REAL_LIBGCC_SPEC' tells the driver 25264 how to place a reference to `libgcc' on the link command line, 25265 but, unlike `LIBGCC_SPEC', it is used unmodified. 25266 25267 -- Macro: USE_LD_AS_NEEDED 25268 A macro that controls the modifications to `LIBGCC_SPEC' mentioned 25269 in `REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 25270 uses -as-needed and the shared libgcc in place of the static 25271 exception handler library, when linking without any of `-static', 25272 `-static-libgcc', or `-shared-libgcc'. 25273 25274 -- Macro: LINK_EH_SPEC 25275 If defined, this C string constant is added to `LINK_SPEC'. When 25276 `USE_LD_AS_NEEDED' is zero or undefined, it also affects the 25277 modifications to `LIBGCC_SPEC' mentioned in `REAL_LIBGCC_SPEC'. 25278 25279 -- Macro: STARTFILE_SPEC 25280 Another C string constant used much like `LINK_SPEC'. The 25281 difference between the two is that `STARTFILE_SPEC' is used at the 25282 very beginning of the command given to the linker. 25283 25284 If this macro is not defined, a default is provided that loads the 25285 standard C startup file from the usual place. See `gcc.c'. 25286 25287 -- Macro: ENDFILE_SPEC 25288 Another C string constant used much like `LINK_SPEC'. The 25289 difference between the two is that `ENDFILE_SPEC' is used at the 25290 very end of the command given to the linker. 25291 25292 Do not define this macro if it does not need to do anything. 25293 25294 -- Macro: THREAD_MODEL_SPEC 25295 GCC `-v' will print the thread model GCC was configured to use. 25296 However, this doesn't work on platforms that are multilibbed on 25297 thread models, such as AIX 4.3. On such platforms, define 25298 `THREAD_MODEL_SPEC' such that it evaluates to a string without 25299 blanks that names one of the recognized thread models. `%*', the 25300 default value of this macro, will expand to the value of 25301 `thread_file' set in `config.gcc'. 25302 25303 -- Macro: SYSROOT_SUFFIX_SPEC 25304 Define this macro to add a suffix to the target sysroot when GCC is 25305 configured with a sysroot. This will cause GCC to search for 25306 usr/lib, et al, within sysroot+suffix. 25307 25308 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 25309 Define this macro to add a headers_suffix to the target sysroot 25310 when GCC is configured with a sysroot. This will cause GCC to 25311 pass the updated sysroot+headers_suffix to CPP, causing it to 25312 search for usr/include, et al, within sysroot+headers_suffix. 25313 25314 -- Macro: EXTRA_SPECS 25315 Define this macro to provide additional specifications to put in 25316 the `specs' file that can be used in various specifications like 25317 `CC1_SPEC'. 25318 25319 The definition should be an initializer for an array of structures, 25320 containing a string constant, that defines the specification name, 25321 and a string constant that provides the specification. 25322 25323 Do not define this macro if it does not need to do anything. 25324 25325 `EXTRA_SPECS' is useful when an architecture contains several 25326 related targets, which have various `..._SPECS' which are similar 25327 to each other, and the maintainer would like one central place to 25328 keep these definitions. 25329 25330 For example, the PowerPC System V.4 targets use `EXTRA_SPECS' to 25331 define either `_CALL_SYSV' when the System V calling sequence is 25332 used or `_CALL_AIX' when the older AIX-based calling sequence is 25333 used. 25334 25335 The `config/rs6000/rs6000.h' target file defines: 25336 25337 #define EXTRA_SPECS \ 25338 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 25339 25340 #define CPP_SYS_DEFAULT "" 25341 25342 The `config/rs6000/sysv.h' target file defines: 25343 #undef CPP_SPEC 25344 #define CPP_SPEC \ 25345 "%{posix: -D_POSIX_SOURCE } \ 25346 %{mcall-sysv: -D_CALL_SYSV } \ 25347 %{!mcall-sysv: %(cpp_sysv_default) } \ 25348 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 25349 25350 #undef CPP_SYSV_DEFAULT 25351 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 25352 25353 while the `config/rs6000/eabiaix.h' target file defines 25354 `CPP_SYSV_DEFAULT' as: 25355 25356 #undef CPP_SYSV_DEFAULT 25357 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 25358 25359 -- Macro: LINK_LIBGCC_SPECIAL_1 25360 Define this macro if the driver program should find the library 25361 `libgcc.a'. If you do not define this macro, the driver program 25362 will pass the argument `-lgcc' to tell the linker to do the search. 25363 25364 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 25365 The sequence in which libgcc and libc are specified to the linker. 25366 By default this is `%G %L %G'. 25367 25368 -- Macro: LINK_COMMAND_SPEC 25369 A C string constant giving the complete command line need to 25370 execute the linker. When you do this, you will need to update 25371 your port each time a change is made to the link command line 25372 within `gcc.c'. Therefore, define this macro only if you need to 25373 completely redefine the command line for invoking the linker and 25374 there is no other way to accomplish the effect you need. 25375 Overriding this macro may be avoidable by overriding 25376 `LINK_GCC_C_SEQUENCE_SPEC' instead. 25377 25378 -- Macro: LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 25379 A nonzero value causes `collect2' to remove duplicate 25380 `-LDIRECTORY' search directories from linking commands. Do not 25381 give it a nonzero value if removing duplicate search directories 25382 changes the linker's semantics. 25383 25384 -- Macro: MULTILIB_DEFAULTS 25385 Define this macro as a C expression for the initializer of an 25386 array of string to tell the driver program which options are 25387 defaults for this target and thus do not need to be handled 25388 specially when using `MULTILIB_OPTIONS'. 25389 25390 Do not define this macro if `MULTILIB_OPTIONS' is not defined in 25391 the target makefile fragment or if none of the options listed in 25392 `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 25393 25394 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 25395 Define this macro to tell `gcc' that it should only translate a 25396 `-B' prefix into a `-L' linker option if the prefix indicates an 25397 absolute file name. 25398 25399 -- Macro: MD_EXEC_PREFIX 25400 If defined, this macro is an additional prefix to try after 25401 `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the 25402 `-b' option is used, or the compiler is built as a cross compiler. 25403 If you define `MD_EXEC_PREFIX', then be sure to add it to the list 25404 of directories used to find the assembler in `configure.in'. 25405 25406 -- Macro: STANDARD_STARTFILE_PREFIX 25407 Define this macro as a C string constant if you wish to override 25408 the standard choice of `libdir' as the default prefix to try when 25409 searching for startup files such as `crt0.o'. 25410 `STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 25411 built as a cross compiler. 25412 25413 -- Macro: STANDARD_STARTFILE_PREFIX_1 25414 Define this macro as a C string constant if you wish to override 25415 the standard choice of `/lib' as a prefix to try after the default 25416 prefix when searching for startup files such as `crt0.o'. 25417 `STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 25418 built as a cross compiler. 25419 25420 -- Macro: STANDARD_STARTFILE_PREFIX_2 25421 Define this macro as a C string constant if you wish to override 25422 the standard choice of `/lib' as yet another prefix to try after 25423 the default prefix when searching for startup files such as 25424 `crt0.o'. `STANDARD_STARTFILE_PREFIX_2' is not searched when the 25425 compiler is built as a cross compiler. 25426 25427 -- Macro: MD_STARTFILE_PREFIX 25428 If defined, this macro supplies an additional prefix to try after 25429 the standard prefixes. `MD_EXEC_PREFIX' is not searched when the 25430 `-b' option is used, or when the compiler is built as a cross 25431 compiler. 25432 25433 -- Macro: MD_STARTFILE_PREFIX_1 25434 If defined, this macro supplies yet another prefix to try after the 25435 standard prefixes. It is not searched when the `-b' option is 25436 used, or when the compiler is built as a cross compiler. 25437 25438 -- Macro: INIT_ENVIRONMENT 25439 Define this macro as a C string constant if you wish to set 25440 environment variables for programs called by the driver, such as 25441 the assembler and loader. The driver passes the value of this 25442 macro to `putenv' to initialize the necessary environment 25443 variables. 25444 25445 -- Macro: LOCAL_INCLUDE_DIR 25446 Define this macro as a C string constant if you wish to override 25447 the standard choice of `/usr/local/include' as the default prefix 25448 to try when searching for local header files. `LOCAL_INCLUDE_DIR' 25449 comes before `SYSTEM_INCLUDE_DIR' in the search order. 25450 25451 Cross compilers do not search either `/usr/local/include' or its 25452 replacement. 25453 25454 -- Macro: MODIFY_TARGET_NAME 25455 Define this macro if you wish to define command-line switches that 25456 modify the default target name. 25457 25458 For each switch, you can include a string to be appended to the 25459 first part of the configuration name or a string to be deleted 25460 from the configuration name, if present. The definition should be 25461 an initializer for an array of structures. Each array element 25462 should have three elements: the switch name (a string constant, 25463 including the initial dash), one of the enumeration codes `ADD' or 25464 `DELETE' to indicate whether the string should be inserted or 25465 deleted, and the string to be inserted or deleted (a string 25466 constant). 25467 25468 For example, on a machine where `64' at the end of the 25469 configuration name denotes a 64-bit target and you want the `-32' 25470 and `-64' switches to select between 32- and 64-bit targets, you 25471 would code 25472 25473 #define MODIFY_TARGET_NAME \ 25474 { { "-32", DELETE, "64"}, \ 25475 {"-64", ADD, "64"}} 25476 25477 -- Macro: SYSTEM_INCLUDE_DIR 25478 Define this macro as a C string constant if you wish to specify a 25479 system-specific directory to search for header files before the 25480 standard directory. `SYSTEM_INCLUDE_DIR' comes before 25481 `STANDARD_INCLUDE_DIR' in the search order. 25482 25483 Cross compilers do not use this macro and do not search the 25484 directory specified. 25485 25486 -- Macro: STANDARD_INCLUDE_DIR 25487 Define this macro as a C string constant if you wish to override 25488 the standard choice of `/usr/include' as the default prefix to try 25489 when searching for header files. 25490 25491 Cross compilers ignore this macro and do not search either 25492 `/usr/include' or its replacement. 25493 25494 -- Macro: STANDARD_INCLUDE_COMPONENT 25495 The "component" corresponding to `STANDARD_INCLUDE_DIR'. See 25496 `INCLUDE_DEFAULTS', below, for the description of components. If 25497 you do not define this macro, no component is used. 25498 25499 -- Macro: INCLUDE_DEFAULTS 25500 Define this macro if you wish to override the entire default 25501 search path for include files. For a native compiler, the default 25502 search path usually consists of `GCC_INCLUDE_DIR', 25503 `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR', 25504 `GPLUSPLUS_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition, 25505 `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are defined 25506 automatically by `Makefile', and specify private search areas for 25507 GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used only for C++ 25508 programs. 25509 25510 The definition should be an initializer for an array of structures. 25511 Each array element should have four elements: the directory name (a 25512 string constant), the component name (also a string constant), a 25513 flag for C++-only directories, and a flag showing that the 25514 includes in the directory don't need to be wrapped in `extern `C'' 25515 when compiling C++. Mark the end of the array with a null element. 25516 25517 The component name denotes what GNU package the include file is 25518 part of, if any, in all uppercase letters. For example, it might 25519 be `GCC' or `BINUTILS'. If the package is part of a 25520 vendor-supplied operating system, code the component name as `0'. 25521 25522 For example, here is the definition used for VAX/VMS: 25523 25524 #define INCLUDE_DEFAULTS \ 25525 { \ 25526 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 25527 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 25528 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 25529 { ".", 0, 0, 0}, \ 25530 { 0, 0, 0, 0} \ 25531 } 25532 25533 Here is the order of prefixes tried for exec files: 25534 25535 1. Any prefixes specified by the user with `-B'. 25536 25537 2. The environment variable `GCC_EXEC_PREFIX' or, if `GCC_EXEC_PREFIX' 25538 is not set and the compiler has not been installed in the 25539 configure-time PREFIX, the location in which the compiler has 25540 actually been installed. 25541 25542 3. The directories specified by the environment variable 25543 `COMPILER_PATH'. 25544 25545 4. The macro `STANDARD_EXEC_PREFIX', if the compiler has been 25546 installed in the configured-time PREFIX. 25547 25548 5. The location `/usr/libexec/gcc/', but only if this is a native 25549 compiler. 25550 25551 6. The location `/usr/lib/gcc/', but only if this is a native 25552 compiler. 25553 25554 7. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 25555 native compiler. 25556 25557 Here is the order of prefixes tried for startfiles: 25558 25559 1. Any prefixes specified by the user with `-B'. 25560 25561 2. The environment variable `GCC_EXEC_PREFIX' or its automatically 25562 determined value based on the installed toolchain location. 25563 25564 3. The directories specified by the environment variable 25565 `LIBRARY_PATH' (or port-specific name; native only, cross 25566 compilers do not use this). 25567 25568 4. The macro `STANDARD_EXEC_PREFIX', but only if the toolchain is 25569 installed in the configured PREFIX or this is a native compiler. 25570 25571 5. The location `/usr/lib/gcc/', but only if this is a native 25572 compiler. 25573 25574 6. The macro `MD_EXEC_PREFIX', if defined, but only if this is a 25575 native compiler. 25576 25577 7. The macro `MD_STARTFILE_PREFIX', if defined, but only if this is a 25578 native compiler, or we have a target system root. 25579 25580 8. The macro `MD_STARTFILE_PREFIX_1', if defined, but only if this is 25581 a native compiler, or we have a target system root. 25582 25583 9. The macro `STANDARD_STARTFILE_PREFIX', with any sysroot 25584 modifications. If this path is relative it will be prefixed by 25585 `GCC_EXEC_PREFIX' and the machine suffix or `STANDARD_EXEC_PREFIX' 25586 and the machine suffix. 25587 25588 10. The macro `STANDARD_STARTFILE_PREFIX_1', but only if this is a 25589 native compiler, or we have a target system root. The default for 25590 this macro is `/lib/'. 25591 25592 11. The macro `STANDARD_STARTFILE_PREFIX_2', but only if this is a 25593 native compiler, or we have a target system root. The default for 25594 this macro is `/usr/lib/'. 25595 25596 25597File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 25598 2559917.3 Run-time Target Specification 25600================================== 25601 25602Here are run-time target specifications. 25603 25604 -- Macro: TARGET_CPU_CPP_BUILTINS () 25605 This function-like macro expands to a block of code that defines 25606 built-in preprocessor macros and assertions for the target CPU, 25607 using the functions `builtin_define', `builtin_define_std' and 25608 `builtin_assert'. When the front end calls this macro it provides 25609 a trailing semicolon, and since it has finished command line 25610 option processing your code can use those results freely. 25611 25612 `builtin_assert' takes a string in the form you pass to the 25613 command-line option `-A', such as `cpu=mips', and creates the 25614 assertion. `builtin_define' takes a string in the form accepted 25615 by option `-D' and unconditionally defines the macro. 25616 25617 `builtin_define_std' takes a string representing the name of an 25618 object-like macro. If it doesn't lie in the user's namespace, 25619 `builtin_define_std' defines it unconditionally. Otherwise, it 25620 defines a version with two leading underscores, and another version 25621 with two leading and trailing underscores, and defines the original 25622 only if an ISO standard was not requested on the command line. For 25623 example, passing `unix' defines `__unix', `__unix__' and possibly 25624 `unix'; passing `_mips' defines `__mips', `__mips__' and possibly 25625 `_mips', and passing `_ABI64' defines only `_ABI64'. 25626 25627 You can also test for the C dialect being compiled. The variable 25628 `c_language' is set to one of `clk_c', `clk_cplusplus' or 25629 `clk_objective_c'. Note that if we are preprocessing assembler, 25630 this variable will be `clk_c' but the function-like macro 25631 `preprocessing_asm_p()' will return true, so you might want to 25632 check for that first. If you need to check for strict ANSI, the 25633 variable `flag_iso' can be used. The function-like macro 25634 `preprocessing_trad_p()' can be used to check for traditional 25635 preprocessing. 25636 25637 -- Macro: TARGET_OS_CPP_BUILTINS () 25638 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 25639 and is used for the target operating system instead. 25640 25641 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 25642 Similarly to `TARGET_CPU_CPP_BUILTINS' but this macro is optional 25643 and is used for the target object format. `elfos.h' uses this 25644 macro to define `__ELF__', so you probably do not need to define 25645 it yourself. 25646 25647 -- Variable: extern int target_flags 25648 This variable is declared in `options.h', which is included before 25649 any target-specific headers. 25650 25651 -- Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 25652 This variable specifies the initial value of `target_flags'. Its 25653 default setting is 0. 25654 25655 -- Target Hook: bool TARGET_HANDLE_OPTION (size_t CODE, const char 25656 *ARG, int VALUE) 25657 This hook is called whenever the user specifies one of the 25658 target-specific options described by the `.opt' definition files 25659 (*note Options::). It has the opportunity to do some 25660 option-specific processing and should return true if the option is 25661 valid. The default definition does nothing but return true. 25662 25663 CODE specifies the `OPT_NAME' enumeration value associated with 25664 the selected option; NAME is just a rendering of the option name 25665 in which non-alphanumeric characters are replaced by underscores. 25666 ARG specifies the string argument and is null if no argument was 25667 given. If the option is flagged as a `UInteger' (*note Option 25668 properties::), VALUE is the numeric value of the argument. 25669 Otherwise VALUE is 1 if the positive form of the option was used 25670 and 0 if the "no-" form was. 25671 25672 -- Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 25673 *ARG, int VALUE) 25674 This target hook is called whenever the user specifies one of the 25675 target-specific C language family options described by the `.opt' 25676 definition files(*note Options::). It has the opportunity to do 25677 some option-specific processing and should return true if the 25678 option is valid. The arguments are like for 25679 `TARGET_HANDLE_OPTION'. The default definition does nothing but 25680 return false. 25681 25682 In general, you should use `TARGET_HANDLE_OPTION' to handle 25683 options. However, if processing an option requires routines that 25684 are only available in the C (and related language) front ends, 25685 then you should use `TARGET_HANDLE_C_OPTION' instead. 25686 25687 -- Macro: TARGET_VERSION 25688 This macro is a C statement to print on `stderr' a string 25689 describing the particular machine description choice. Every 25690 machine description should define `TARGET_VERSION'. For example: 25691 25692 #ifdef MOTOROLA 25693 #define TARGET_VERSION \ 25694 fprintf (stderr, " (68k, Motorola syntax)"); 25695 #else 25696 #define TARGET_VERSION \ 25697 fprintf (stderr, " (68k, MIT syntax)"); 25698 #endif 25699 25700 -- Macro: OVERRIDE_OPTIONS 25701 Sometimes certain combinations of command options do not make 25702 sense on a particular target machine. You can define a macro 25703 `OVERRIDE_OPTIONS' to take account of this. This macro, if 25704 defined, is executed once just after all the command options have 25705 been parsed. 25706 25707 Don't use this macro to turn on various extra optimizations for 25708 `-O'. That is what `OPTIMIZATION_OPTIONS' is for. 25709 25710 If you need to do something whenever the optimization level is 25711 changed via the optimize attribute or pragma, see 25712 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 25713 25714 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 25715 This target function is similar to the macro `OVERRIDE_OPTIONS' 25716 but is called when the optimize level is changed via an attribute 25717 or pragma or when it is reset at the end of the code affected by 25718 the attribute or pragma. It is not called at the beginning of 25719 compilation when `OVERRIDE_OPTIONS' is called so if you want to 25720 perform these actions then, you should have `OVERRIDE_OPTIONS' call 25721 `TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 25722 25723 -- Macro: C_COMMON_OVERRIDE_OPTIONS 25724 This is similar to `OVERRIDE_OPTIONS' but is only used in the C 25725 language frontends (C, Objective-C, C++, Objective-C++) and so can 25726 be used to alter option flag variables which only exist in those 25727 frontends. 25728 25729 -- Macro: OPTIMIZATION_OPTIONS (LEVEL, SIZE) 25730 Some machines may desire to change what optimizations are 25731 performed for various optimization levels. This macro, if 25732 defined, is executed once just after the optimization level is 25733 determined and before the remainder of the command options have 25734 been parsed. Values set in this macro are used as the default 25735 values for the other command line options. 25736 25737 LEVEL is the optimization level specified; 2 if `-O2' is 25738 specified, 1 if `-O' is specified, and 0 if neither is specified. 25739 25740 SIZE is nonzero if `-Os' is specified and zero otherwise. 25741 25742 This macro is run once at program startup and when the optimization 25743 options are changed via `#pragma GCC optimize' or by using the 25744 `optimize' attribute. 25745 25746 *Do not examine `write_symbols' in this macro!* The debugging 25747 options are not supposed to alter the generated code. 25748 25749 -- Target Hook: void TARGET_HELP (void) 25750 This hook is called in response to the user invoking 25751 `--target-help' on the command line. It gives the target a chance 25752 to display extra information on the target specific command line 25753 options found in its `.opt' file. 25754 25755 -- Macro: CAN_DEBUG_WITHOUT_FP 25756 Define this macro if debugging can be performed even without a 25757 frame pointer. If this macro is defined, GCC will turn on the 25758 `-fomit-frame-pointer' option whenever `-O' is specified. 25759 25760 25761File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 25762 2576317.4 Defining data structures for per-function information. 25764=========================================================== 25765 25766If the target needs to store information on a per-function basis, GCC 25767provides a macro and a couple of variables to allow this. Note, just 25768using statics to store the information is a bad idea, since GCC supports 25769nested functions, so you can be halfway through encoding one function 25770when another one comes along. 25771 25772 GCC defines a data structure called `struct function' which contains 25773all of the data specific to an individual function. This structure 25774contains a field called `machine' whose type is `struct 25775machine_function *', which can be used by targets to point to their own 25776specific data. 25777 25778 If a target needs per-function specific data it should define the type 25779`struct machine_function' and also the macro `INIT_EXPANDERS'. This 25780macro should be used to initialize the function pointer 25781`init_machine_status'. This pointer is explained below. 25782 25783 One typical use of per-function, target specific data is to create an 25784RTX to hold the register containing the function's return address. This 25785RTX can then be used to implement the `__builtin_return_address' 25786function, for level 0. 25787 25788 Note--earlier implementations of GCC used a single data area to hold 25789all of the per-function information. Thus when processing of a nested 25790function began the old per-function data had to be pushed onto a stack, 25791and when the processing was finished, it had to be popped off the 25792stack. GCC used to provide function pointers called 25793`save_machine_status' and `restore_machine_status' to handle the saving 25794and restoring of the target specific information. Since the single 25795data area approach is no longer used, these pointers are no longer 25796supported. 25797 25798 -- Macro: INIT_EXPANDERS 25799 Macro called to initialize any target specific information. This 25800 macro is called once per function, before generation of any RTL 25801 has begun. The intention of this macro is to allow the 25802 initialization of the function pointer `init_machine_status'. 25803 25804 -- Variable: void (*)(struct function *) init_machine_status 25805 If this function pointer is non-`NULL' it will be called once per 25806 function, before function compilation starts, in order to allow the 25807 target to perform any target specific initialization of the 25808 `struct function' structure. It is intended that this would be 25809 used to initialize the `machine' of that structure. 25810 25811 `struct machine_function' structures are expected to be freed by 25812 GC. Generally, any memory that they reference must be allocated 25813 by using `ggc_alloc', including the structure itself. 25814 25815 25816File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 25817 2581817.5 Storage Layout 25819=================== 25820 25821Note that the definitions of the macros in this table which are sizes or 25822alignments measured in bits do not need to be constant. They can be C 25823expressions that refer to static variables, such as the `target_flags'. 25824*Note Run-time Target::. 25825 25826 -- Macro: BITS_BIG_ENDIAN 25827 Define this macro to have the value 1 if the most significant bit 25828 in a byte has the lowest number; otherwise define it to have the 25829 value zero. This means that bit-field instructions count from the 25830 most significant bit. If the machine has no bit-field 25831 instructions, then this must still be defined, but it doesn't 25832 matter which value it is defined to. This macro need not be a 25833 constant. 25834 25835 This macro does not affect the way structure fields are packed into 25836 bytes or words; that is controlled by `BYTES_BIG_ENDIAN'. 25837 25838 -- Macro: BYTES_BIG_ENDIAN 25839 Define this macro to have the value 1 if the most significant byte 25840 in a word has the lowest number. This macro need not be a 25841 constant. 25842 25843 -- Macro: WORDS_BIG_ENDIAN 25844 Define this macro to have the value 1 if, in a multiword object, 25845 the most significant word has the lowest number. This applies to 25846 both memory locations and registers; GCC fundamentally assumes 25847 that the order of words in memory is the same as the order in 25848 registers. This macro need not be a constant. 25849 25850 -- Macro: LIBGCC2_WORDS_BIG_ENDIAN 25851 Define this macro if `WORDS_BIG_ENDIAN' is not constant. This 25852 must be a constant value with the same meaning as 25853 `WORDS_BIG_ENDIAN', which will be used only when compiling 25854 `libgcc2.c'. Typically the value will be set based on 25855 preprocessor defines. 25856 25857 -- Macro: FLOAT_WORDS_BIG_ENDIAN 25858 Define this macro to have the value 1 if `DFmode', `XFmode' or 25859 `TFmode' floating point numbers are stored in memory with the word 25860 containing the sign bit at the lowest address; otherwise define it 25861 to have the value 0. This macro need not be a constant. 25862 25863 You need not define this macro if the ordering is the same as for 25864 multi-word integers. 25865 25866 -- Macro: BITS_PER_UNIT 25867 Define this macro to be the number of bits in an addressable 25868 storage unit (byte). If you do not define this macro the default 25869 is 8. 25870 25871 -- Macro: BITS_PER_WORD 25872 Number of bits in a word. If you do not define this macro, the 25873 default is `BITS_PER_UNIT * UNITS_PER_WORD'. 25874 25875 -- Macro: MAX_BITS_PER_WORD 25876 Maximum number of bits in a word. If this is undefined, the 25877 default is `BITS_PER_WORD'. Otherwise, it is the constant value 25878 that is the largest value that `BITS_PER_WORD' can have at 25879 run-time. 25880 25881 -- Macro: UNITS_PER_WORD 25882 Number of storage units in a word; normally the size of a 25883 general-purpose register, a power of two from 1 or 8. 25884 25885 -- Macro: MIN_UNITS_PER_WORD 25886 Minimum number of units in a word. If this is undefined, the 25887 default is `UNITS_PER_WORD'. Otherwise, it is the constant value 25888 that is the smallest value that `UNITS_PER_WORD' can have at 25889 run-time. 25890 25891 -- Macro: UNITS_PER_SIMD_WORD (MODE) 25892 Number of units in the vectors that the vectorizer can produce for 25893 scalar mode MODE. The default is equal to `UNITS_PER_WORD', 25894 because the vectorizer can do some transformations even in absence 25895 of specialized SIMD hardware. 25896 25897 -- Macro: POINTER_SIZE 25898 Width of a pointer, in bits. You must specify a value no wider 25899 than the width of `Pmode'. If it is not equal to the width of 25900 `Pmode', you must define `POINTERS_EXTEND_UNSIGNED'. If you do 25901 not specify a value the default is `BITS_PER_WORD'. 25902 25903 -- Macro: POINTERS_EXTEND_UNSIGNED 25904 A C expression that determines how pointers should be extended from 25905 `ptr_mode' to either `Pmode' or `word_mode'. It is greater than 25906 zero if pointers should be zero-extended, zero if they should be 25907 sign-extended, and negative if some other sort of conversion is 25908 needed. In the last case, the extension is done by the target's 25909 `ptr_extend' instruction. 25910 25911 You need not define this macro if the `ptr_mode', `Pmode' and 25912 `word_mode' are all the same width. 25913 25914 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 25915 A macro to update M and UNSIGNEDP when an object whose type is 25916 TYPE and which has the specified mode and signedness is to be 25917 stored in a register. This macro is only called when TYPE is a 25918 scalar type. 25919 25920 On most RISC machines, which only have operations that operate on 25921 a full register, define this macro to set M to `word_mode' if M is 25922 an integer mode narrower than `BITS_PER_WORD'. In most cases, 25923 only integer modes should be widened because wider-precision 25924 floating-point operations are usually more expensive than their 25925 narrower counterparts. 25926 25927 For most machines, the macro definition does not change UNSIGNEDP. 25928 However, some machines, have instructions that preferentially 25929 handle either signed or unsigned quantities of certain modes. For 25930 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 25931 instructions sign-extend the result to 64 bits. On such machines, 25932 set UNSIGNEDP according to which kind of extension is more 25933 efficient. 25934 25935 Do not define this macro if it would never modify M. 25936 25937 -- Target Hook: enum machine_mode TARGET_PROMOTE_FUNCTION_MODE 25938 (const_tree TYPE, enum machine_mode MODE, int *PUNSIGNEDP, 25939 const_tree FUNTYPE, int FOR_RETURN) 25940 Like `PROMOTE_MODE', but it is applied to outgoing function 25941 arguments or function return values. The target hook should 25942 return the new mode and possibly change `*PUNSIGNEDP' if the 25943 promotion should change signedness. This function is called only 25944 for scalar _or pointer_ types. 25945 25946 FOR_RETURN allows to distinguish the promotion of arguments and 25947 return values. If it is `1', a return value is being promoted and 25948 `TARGET_FUNCTION_VALUE' must perform the same promotions done here. 25949 If it is `2', the returned mode should be that of the register in 25950 which an incoming parameter is copied, or the outgoing result is 25951 computed; then the hook should return the same mode as 25952 `promote_mode', though the signedness may be different. 25953 25954 The default is to not promote arguments and return values. You can 25955 also define the hook to 25956 `default_promote_function_mode_always_promote' if you would like 25957 to apply the same rules given by `PROMOTE_MODE'. 25958 25959 -- Macro: PARM_BOUNDARY 25960 Normal alignment required for function parameters on the stack, in 25961 bits. All stack parameters receive at least this much alignment 25962 regardless of data type. On most machines, this is the same as the 25963 size of an integer. 25964 25965 -- Macro: STACK_BOUNDARY 25966 Define this macro to the minimum alignment enforced by hardware 25967 for the stack pointer on this machine. The definition is a C 25968 expression for the desired alignment (measured in bits). This 25969 value is used as a default if `PREFERRED_STACK_BOUNDARY' is not 25970 defined. On most machines, this should be the same as 25971 `PARM_BOUNDARY'. 25972 25973 -- Macro: PREFERRED_STACK_BOUNDARY 25974 Define this macro if you wish to preserve a certain alignment for 25975 the stack pointer, greater than what the hardware enforces. The 25976 definition is a C expression for the desired alignment (measured 25977 in bits). This macro must evaluate to a value equal to or larger 25978 than `STACK_BOUNDARY'. 25979 25980 -- Macro: INCOMING_STACK_BOUNDARY 25981 Define this macro if the incoming stack boundary may be different 25982 from `PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 25983 value equal to or larger than `STACK_BOUNDARY'. 25984 25985 -- Macro: FUNCTION_BOUNDARY 25986 Alignment required for a function entry point, in bits. 25987 25988 -- Macro: BIGGEST_ALIGNMENT 25989 Biggest alignment that any data type can require on this machine, 25990 in bits. Note that this is not the biggest alignment that is 25991 supported, just the biggest alignment that, when violated, may 25992 cause a fault. 25993 25994 -- Macro: MALLOC_ABI_ALIGNMENT 25995 Alignment, in bits, a C conformant malloc implementation has to 25996 provide. If not defined, the default value is `BITS_PER_WORD'. 25997 25998 -- Macro: ATTRIBUTE_ALIGNED_VALUE 25999 Alignment used by the `__attribute__ ((aligned))' construct. If 26000 not defined, the default value is `BIGGEST_ALIGNMENT'. 26001 26002 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 26003 If defined, the smallest alignment, in bits, that can be given to 26004 an object that can be referenced in one operation, without 26005 disturbing any nearby object. Normally, this is `BITS_PER_UNIT', 26006 but may be larger on machines that don't have byte or half-word 26007 store operations. 26008 26009 -- Macro: BIGGEST_FIELD_ALIGNMENT 26010 Biggest alignment that any structure or union field can require on 26011 this machine, in bits. If defined, this overrides 26012 `BIGGEST_ALIGNMENT' for structure and union fields only, unless 26013 the field alignment has been set by the `__attribute__ ((aligned 26014 (N)))' construct. 26015 26016 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 26017 An expression for the alignment of a structure field FIELD if the 26018 alignment computed in the usual way (including applying of 26019 `BIGGEST_ALIGNMENT' and `BIGGEST_FIELD_ALIGNMENT' to the 26020 alignment) is COMPUTED. It overrides alignment only if the field 26021 alignment has not been set by the `__attribute__ ((aligned (N)))' 26022 construct. 26023 26024 -- Macro: MAX_STACK_ALIGNMENT 26025 Biggest stack alignment guaranteed by the backend. Use this macro 26026 to specify the maximum alignment of a variable on stack. 26027 26028 If not defined, the default value is `STACK_BOUNDARY'. 26029 26030 26031 -- Macro: MAX_OFILE_ALIGNMENT 26032 Biggest alignment supported by the object file format of this 26033 machine. Use this macro to limit the alignment which can be 26034 specified using the `__attribute__ ((aligned (N)))' construct. If 26035 not defined, the default value is `BIGGEST_ALIGNMENT'. 26036 26037 On systems that use ELF, the default (in `config/elfos.h') is the 26038 largest supported 32-bit ELF section alignment representable on a 26039 32-bit host e.g. `(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)'. On 26040 32-bit ELF the largest supported section alignment in bits is 26041 `(0x80000000 * 8)', but this is not representable on 32-bit hosts. 26042 26043 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 26044 If defined, a C expression to compute the alignment for a variable 26045 in the static store. TYPE is the data type, and BASIC-ALIGN is 26046 the alignment that the object would ordinarily have. The value of 26047 this macro is used instead of that alignment to align the object. 26048 26049 If this macro is not defined, then BASIC-ALIGN is used. 26050 26051 One use of this macro is to increase alignment of medium-size data 26052 to make it all fit in fewer cache lines. Another is to cause 26053 character arrays to be word-aligned so that `strcpy' calls that 26054 copy constants to character arrays can be done inline. 26055 26056 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 26057 If defined, a C expression to compute the alignment given to a 26058 constant that is being placed in memory. CONSTANT is the constant 26059 and BASIC-ALIGN is the alignment that the object would ordinarily 26060 have. The value of this macro is used instead of that alignment to 26061 align the object. 26062 26063 If this macro is not defined, then BASIC-ALIGN is used. 26064 26065 The typical use of this macro is to increase alignment for string 26066 constants to be word aligned so that `strcpy' calls that copy 26067 constants can be done inline. 26068 26069 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 26070 If defined, a C expression to compute the alignment for a variable 26071 in the local store. TYPE is the data type, and BASIC-ALIGN is the 26072 alignment that the object would ordinarily have. The value of this 26073 macro is used instead of that alignment to align the object. 26074 26075 If this macro is not defined, then BASIC-ALIGN is used. 26076 26077 One use of this macro is to increase alignment of medium-size data 26078 to make it all fit in fewer cache lines. 26079 26080 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 26081 If defined, a C expression to compute the alignment for stack slot. 26082 TYPE is the data type, MODE is the widest mode available, and 26083 BASIC-ALIGN is the alignment that the slot would ordinarily have. 26084 The value of this macro is used instead of that alignment to align 26085 the slot. 26086 26087 If this macro is not defined, then BASIC-ALIGN is used when TYPE 26088 is `NULL'. Otherwise, `LOCAL_ALIGNMENT' will be used. 26089 26090 This macro is to set alignment of stack slot to the maximum 26091 alignment of all possible modes which the slot may have. 26092 26093 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 26094 If defined, a C expression to compute the alignment for a local 26095 variable DECL. 26096 26097 If this macro is not defined, then `LOCAL_ALIGNMENT (TREE_TYPE 26098 (DECL), DECL_ALIGN (DECL))' is used. 26099 26100 One use of this macro is to increase alignment of medium-size data 26101 to make it all fit in fewer cache lines. 26102 26103 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 26104 If defined, a C expression to compute the minimum required 26105 alignment for dynamic stack realignment purposes for EXP (a type 26106 or decl), MODE, assuming normal alignment ALIGN. 26107 26108 If this macro is not defined, then ALIGN will be used. 26109 26110 -- Macro: EMPTY_FIELD_BOUNDARY 26111 Alignment in bits to be given to a structure bit-field that 26112 follows an empty field such as `int : 0;'. 26113 26114 If `PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 26115 26116 -- Macro: STRUCTURE_SIZE_BOUNDARY 26117 Number of bits which any structure or union's size must be a 26118 multiple of. Each structure or union's size is rounded up to a 26119 multiple of this. 26120 26121 If you do not define this macro, the default is the same as 26122 `BITS_PER_UNIT'. 26123 26124 -- Macro: STRICT_ALIGNMENT 26125 Define this macro to be the value 1 if instructions will fail to 26126 work if given data not on the nominal alignment. If instructions 26127 will merely go slower in that case, define this macro as 0. 26128 26129 -- Macro: PCC_BITFIELD_TYPE_MATTERS 26130 Define this if you wish to imitate the way many other C compilers 26131 handle alignment of bit-fields and the structures that contain 26132 them. 26133 26134 The behavior is that the type written for a named bit-field (`int', 26135 `short', or other integer type) imposes an alignment for the entire 26136 structure, as if the structure really did contain an ordinary 26137 field of that type. In addition, the bit-field is placed within 26138 the structure so that it would fit within such a field, not 26139 crossing a boundary for it. 26140 26141 Thus, on most machines, a named bit-field whose type is written as 26142 `int' would not cross a four-byte boundary, and would force 26143 four-byte alignment for the whole structure. (The alignment used 26144 may not be four bytes; it is controlled by the other alignment 26145 parameters.) 26146 26147 An unnamed bit-field will not affect the alignment of the 26148 containing structure. 26149 26150 If the macro is defined, its definition should be a C expression; 26151 a nonzero value for the expression enables this behavior. 26152 26153 Note that if this macro is not defined, or its value is zero, some 26154 bit-fields may cross more than one alignment boundary. The 26155 compiler can support such references if there are `insv', `extv', 26156 and `extzv' insns that can directly reference memory. 26157 26158 The other known way of making bit-fields work is to define 26159 `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then 26160 every structure can be accessed with fullwords. 26161 26162 Unless the machine has bit-field instructions or you define 26163 `STRUCTURE_SIZE_BOUNDARY' that way, you must define 26164 `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 26165 26166 If your aim is to make GCC use the same conventions for laying out 26167 bit-fields as are used by another compiler, here is how to 26168 investigate what the other compiler does. Compile and run this 26169 program: 26170 26171 struct foo1 26172 { 26173 char x; 26174 char :0; 26175 char y; 26176 }; 26177 26178 struct foo2 26179 { 26180 char x; 26181 int :0; 26182 char y; 26183 }; 26184 26185 main () 26186 { 26187 printf ("Size of foo1 is %d\n", 26188 sizeof (struct foo1)); 26189 printf ("Size of foo2 is %d\n", 26190 sizeof (struct foo2)); 26191 exit (0); 26192 } 26193 26194 If this prints 2 and 5, then the compiler's behavior is what you 26195 would get from `PCC_BITFIELD_TYPE_MATTERS'. 26196 26197 -- Macro: BITFIELD_NBYTES_LIMITED 26198 Like `PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 26199 to aligning a bit-field within the structure. 26200 26201 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 26202 When `PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 26203 whether unnamed bitfields affect the alignment of the containing 26204 structure. The hook should return true if the structure should 26205 inherit the alignment requirements of an unnamed bitfield's type. 26206 26207 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 26208 This target hook should return `true' if accesses to volatile 26209 bitfields should use the narrowest mode possible. It should 26210 return `false' if these accesses should use the bitfield container 26211 type. 26212 26213 The default is `!TARGET_STRICT_ALIGN'. 26214 26215 -- Macro: MEMBER_TYPE_FORCES_BLK (FIELD, MODE) 26216 Return 1 if a structure or array containing FIELD should be 26217 accessed using `BLKMODE'. 26218 26219 If FIELD is the only field in the structure, MODE is its mode, 26220 otherwise MODE is VOIDmode. MODE is provided in the case where 26221 structures of one field would require the structure's mode to 26222 retain the field's mode. 26223 26224 Normally, this is not needed. 26225 26226 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 26227 Define this macro as an expression for the alignment of a type 26228 (given by TYPE as a tree node) if the alignment computed in the 26229 usual way is COMPUTED and the alignment explicitly specified was 26230 SPECIFIED. 26231 26232 The default is to use SPECIFIED if it is larger; otherwise, use 26233 the smaller of COMPUTED and `BIGGEST_ALIGNMENT' 26234 26235 -- Macro: MAX_FIXED_MODE_SIZE 26236 An integer expression for the size in bits of the largest integer 26237 machine mode that should actually be used. All integer machine 26238 modes of this size or smaller can be used for structures and 26239 unions with the appropriate sizes. If this macro is undefined, 26240 `GET_MODE_BITSIZE (DImode)' is assumed. 26241 26242 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 26243 If defined, an expression of type `enum machine_mode' that 26244 specifies the mode of the save area operand of a 26245 `save_stack_LEVEL' named pattern (*note Standard Names::). 26246 SAVE_LEVEL is one of `SAVE_BLOCK', `SAVE_FUNCTION', or 26247 `SAVE_NONLOCAL' and selects which of the three named patterns is 26248 having its mode specified. 26249 26250 You need not define this macro if it always returns `Pmode'. You 26251 would most commonly define this macro if the `save_stack_LEVEL' 26252 patterns need to support both a 32- and a 64-bit mode. 26253 26254 -- Macro: STACK_SIZE_MODE 26255 If defined, an expression of type `enum machine_mode' that 26256 specifies the mode of the size increment operand of an 26257 `allocate_stack' named pattern (*note Standard Names::). 26258 26259 You need not define this macro if it always returns `word_mode'. 26260 You would most commonly define this macro if the `allocate_stack' 26261 pattern needs to support both a 32- and a 64-bit mode. 26262 26263 -- Target Hook: enum machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 26264 This target hook should return the mode to be used for the return 26265 value of compare instructions expanded to libgcc calls. If not 26266 defined `word_mode' is returned which is the right choice for a 26267 majority of targets. 26268 26269 -- Target Hook: enum machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 26270 This target hook should return the mode to be used for the shift 26271 count operand of shift instructions expanded to libgcc calls. If 26272 not defined `word_mode' is returned which is the right choice for 26273 a majority of targets. 26274 26275 -- Target Hook: enum machine_mode TARGET_UNWIND_WORD_MODE (void) 26276 Return machine mode to be used for `_Unwind_Word' type. The 26277 default is to use `word_mode'. 26278 26279 -- Macro: ROUND_TOWARDS_ZERO 26280 If defined, this macro should be true if the prevailing rounding 26281 mode is towards zero. 26282 26283 Defining this macro only affects the way `libgcc.a' emulates 26284 floating-point arithmetic. 26285 26286 Not defining this macro is equivalent to returning zero. 26287 26288 -- Macro: LARGEST_EXPONENT_IS_NORMAL (SIZE) 26289 This macro should return true if floats with SIZE bits do not have 26290 a NaN or infinity representation, but use the largest exponent for 26291 normal numbers instead. 26292 26293 Defining this macro only affects the way `libgcc.a' emulates 26294 floating-point arithmetic. 26295 26296 The default definition of this macro returns false for all sizes. 26297 26298 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 26299 RECORD_TYPE) 26300 This target hook returns `true' if bit-fields in the given 26301 RECORD_TYPE are to be laid out following the rules of Microsoft 26302 Visual C/C++, namely: (i) a bit-field won't share the same storage 26303 unit with the previous bit-field if their underlying types have 26304 different sizes, and the bit-field will be aligned to the highest 26305 alignment of the underlying types of itself and of the previous 26306 bit-field; (ii) a zero-sized bit-field will affect the alignment of 26307 the whole enclosing structure, even if it is unnamed; except that 26308 (iii) a zero-sized bit-field will be disregarded unless it follows 26309 another bit-field of nonzero size. If this hook returns `true', 26310 other macros that control bit-field layout are ignored. 26311 26312 When a bit-field is inserted into a packed record, the whole size 26313 of the underlying type is used by one or more same-size adjacent 26314 bit-fields (that is, if its long:3, 32 bits is used in the record, 26315 and any additional adjacent long bit-fields are packed into the 26316 same chunk of 32 bits. However, if the size changes, a new field 26317 of that size is allocated). In an unpacked record, this is the 26318 same as using alignment, but not equivalent when packing. 26319 26320 If both MS bit-fields and `__attribute__((packed))' are used, the 26321 latter will take precedence. If `__attribute__((packed))' is used 26322 on a single field when MS bit-fields are in use, it will take 26323 precedence for that field, but the alignment of the rest of the 26324 structure may affect its placement. 26325 26326 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 26327 Returns true if the target supports decimal floating point. 26328 26329 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 26330 Returns true if the target supports fixed-point arithmetic. 26331 26332 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 26333 This hook is called just before expansion into rtl, allowing the 26334 target to perform additional initializations or analysis before 26335 the expansion. For example, the rs6000 port uses it to allocate a 26336 scratch stack slot for use in copying SDmode values between memory 26337 and floating point registers whenever the function being expanded 26338 has any SDmode usage. 26339 26340 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 26341 This hook allows the backend to perform additional instantiations 26342 on rtl that are not actually in any insns yet, but will be later. 26343 26344 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 26345 If your target defines any fundamental types, or any types your 26346 target uses should be mangled differently from the default, define 26347 this hook to return the appropriate encoding for these types as 26348 part of a C++ mangled name. The TYPE argument is the tree 26349 structure representing the type to be mangled. The hook may be 26350 applied to trees which are not target-specific fundamental types; 26351 it should return `NULL' for all such types, as well as arguments 26352 it does not recognize. If the return value is not `NULL', it must 26353 point to a statically-allocated string constant. 26354 26355 Target-specific fundamental types might be new fundamental types or 26356 qualified versions of ordinary fundamental types. Encode new 26357 fundamental types as `u N NAME', where NAME is the name used for 26358 the type in source code, and N is the length of NAME in decimal. 26359 Encode qualified versions of ordinary types as `U N NAME CODE', 26360 where NAME is the name used for the type qualifier in source code, 26361 N is the length of NAME as above, and CODE is the code used to 26362 represent the unqualified version of this type. (See 26363 `write_builtin_type' in `cp/mangle.c' for the list of codes.) In 26364 both cases the spaces are for clarity; do not include any spaces 26365 in your string. 26366 26367 This hook is applied to types prior to typedef resolution. If the 26368 mangled name for a particular type depends only on that type's 26369 main variant, you can perform typedef resolution yourself using 26370 `TYPE_MAIN_VARIANT' before mangling. 26371 26372 The default version of this hook always returns `NULL', which is 26373 appropriate for a target that does not define any new fundamental 26374 types. 26375 26376 26377File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 26378 2637917.6 Layout of Source Language Data Types 26380========================================= 26381 26382These macros define the sizes and other characteristics of the standard 26383basic data types used in programs being compiled. Unlike the macros in 26384the previous section, these apply to specific features of C and related 26385languages, rather than to fundamental aspects of storage layout. 26386 26387 -- Macro: INT_TYPE_SIZE 26388 A C expression for the size in bits of the type `int' on the 26389 target machine. If you don't define this, the default is one word. 26390 26391 -- Macro: SHORT_TYPE_SIZE 26392 A C expression for the size in bits of the type `short' on the 26393 target machine. If you don't define this, the default is half a 26394 word. (If this would be less than one storage unit, it is rounded 26395 up to one unit.) 26396 26397 -- Macro: LONG_TYPE_SIZE 26398 A C expression for the size in bits of the type `long' on the 26399 target machine. If you don't define this, the default is one word. 26400 26401 -- Macro: ADA_LONG_TYPE_SIZE 26402 On some machines, the size used for the Ada equivalent of the type 26403 `long' by a native Ada compiler differs from that used by C. In 26404 that situation, define this macro to be a C expression to be used 26405 for the size of that type. If you don't define this, the default 26406 is the value of `LONG_TYPE_SIZE'. 26407 26408 -- Macro: LONG_LONG_TYPE_SIZE 26409 A C expression for the size in bits of the type `long long' on the 26410 target machine. If you don't define this, the default is two 26411 words. If you want to support GNU Ada on your machine, the value 26412 of this macro must be at least 64. 26413 26414 -- Macro: CHAR_TYPE_SIZE 26415 A C expression for the size in bits of the type `char' on the 26416 target machine. If you don't define this, the default is 26417 `BITS_PER_UNIT'. 26418 26419 -- Macro: BOOL_TYPE_SIZE 26420 A C expression for the size in bits of the C++ type `bool' and C99 26421 type `_Bool' on the target machine. If you don't define this, and 26422 you probably shouldn't, the default is `CHAR_TYPE_SIZE'. 26423 26424 -- Macro: FLOAT_TYPE_SIZE 26425 A C expression for the size in bits of the type `float' on the 26426 target machine. If you don't define this, the default is one word. 26427 26428 -- Macro: DOUBLE_TYPE_SIZE 26429 A C expression for the size in bits of the type `double' on the 26430 target machine. If you don't define this, the default is two 26431 words. 26432 26433 -- Macro: LONG_DOUBLE_TYPE_SIZE 26434 A C expression for the size in bits of the type `long double' on 26435 the target machine. If you don't define this, the default is two 26436 words. 26437 26438 -- Macro: SHORT_FRACT_TYPE_SIZE 26439 A C expression for the size in bits of the type `short _Fract' on 26440 the target machine. If you don't define this, the default is 26441 `BITS_PER_UNIT'. 26442 26443 -- Macro: FRACT_TYPE_SIZE 26444 A C expression for the size in bits of the type `_Fract' on the 26445 target machine. If you don't define this, the default is 26446 `BITS_PER_UNIT * 2'. 26447 26448 -- Macro: LONG_FRACT_TYPE_SIZE 26449 A C expression for the size in bits of the type `long _Fract' on 26450 the target machine. If you don't define this, the default is 26451 `BITS_PER_UNIT * 4'. 26452 26453 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 26454 A C expression for the size in bits of the type `long long _Fract' 26455 on the target machine. If you don't define this, the default is 26456 `BITS_PER_UNIT * 8'. 26457 26458 -- Macro: SHORT_ACCUM_TYPE_SIZE 26459 A C expression for the size in bits of the type `short _Accum' on 26460 the target machine. If you don't define this, the default is 26461 `BITS_PER_UNIT * 2'. 26462 26463 -- Macro: ACCUM_TYPE_SIZE 26464 A C expression for the size in bits of the type `_Accum' on the 26465 target machine. If you don't define this, the default is 26466 `BITS_PER_UNIT * 4'. 26467 26468 -- Macro: LONG_ACCUM_TYPE_SIZE 26469 A C expression for the size in bits of the type `long _Accum' on 26470 the target machine. If you don't define this, the default is 26471 `BITS_PER_UNIT * 8'. 26472 26473 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 26474 A C expression for the size in bits of the type `long long _Accum' 26475 on the target machine. If you don't define this, the default is 26476 `BITS_PER_UNIT * 16'. 26477 26478 -- Macro: LIBGCC2_LONG_DOUBLE_TYPE_SIZE 26479 Define this macro if `LONG_DOUBLE_TYPE_SIZE' is not constant or if 26480 you want routines in `libgcc2.a' for a size other than 26481 `LONG_DOUBLE_TYPE_SIZE'. If you don't define this, the default is 26482 `LONG_DOUBLE_TYPE_SIZE'. 26483 26484 -- Macro: LIBGCC2_HAS_DF_MODE 26485 Define this macro if neither `LIBGCC2_DOUBLE_TYPE_SIZE' nor 26486 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is `DFmode' but you want `DFmode' 26487 routines in `libgcc2.a' anyway. If you don't define this and 26488 either `LIBGCC2_DOUBLE_TYPE_SIZE' or 26489 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64 then the default is 1, 26490 otherwise it is 0. 26491 26492 -- Macro: LIBGCC2_HAS_XF_MODE 26493 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 26494 `XFmode' but you want `XFmode' routines in `libgcc2.a' anyway. If 26495 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 80 26496 then the default is 1, otherwise it is 0. 26497 26498 -- Macro: LIBGCC2_HAS_TF_MODE 26499 Define this macro if `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is not 26500 `TFmode' but you want `TFmode' routines in `libgcc2.a' anyway. If 26501 you don't define this and `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 128 26502 then the default is 1, otherwise it is 0. 26503 26504 -- Macro: SF_SIZE 26505 -- Macro: DF_SIZE 26506 -- Macro: XF_SIZE 26507 -- Macro: TF_SIZE 26508 Define these macros to be the size in bits of the mantissa of 26509 `SFmode', `DFmode', `XFmode' and `TFmode' values, if the defaults 26510 in `libgcc2.h' are inappropriate. By default, `FLT_MANT_DIG' is 26511 used for `SF_SIZE', `LDBL_MANT_DIG' for `XF_SIZE' and `TF_SIZE', 26512 and `DBL_MANT_DIG' or `LDBL_MANT_DIG' for `DF_SIZE' according to 26513 whether `LIBGCC2_DOUBLE_TYPE_SIZE' or 26514 `LIBGCC2_LONG_DOUBLE_TYPE_SIZE' is 64. 26515 26516 -- Macro: TARGET_FLT_EVAL_METHOD 26517 A C expression for the value for `FLT_EVAL_METHOD' in `float.h', 26518 assuming, if applicable, that the floating-point control word is 26519 in its default state. If you do not define this macro the value of 26520 `FLT_EVAL_METHOD' will be zero. 26521 26522 -- Macro: WIDEST_HARDWARE_FP_SIZE 26523 A C expression for the size in bits of the widest floating-point 26524 format supported by the hardware. If you define this macro, you 26525 must specify a value less than or equal to the value of 26526 `LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 26527 value of `LONG_DOUBLE_TYPE_SIZE' is the default. 26528 26529 -- Macro: DEFAULT_SIGNED_CHAR 26530 An expression whose value is 1 or 0, according to whether the type 26531 `char' should be signed or unsigned by default. The user can 26532 always override this default with the options `-fsigned-char' and 26533 `-funsigned-char'. 26534 26535 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 26536 This target hook should return true if the compiler should give an 26537 `enum' type only as many bytes as it takes to represent the range 26538 of possible values of that type. It should return false if all 26539 `enum' types should be allocated like `int'. 26540 26541 The default is to return false. 26542 26543 -- Macro: SIZE_TYPE 26544 A C expression for a string describing the name of the data type 26545 to use for size values. The typedef name `size_t' is defined 26546 using the contents of the string. 26547 26548 The string can contain more than one keyword. If so, separate 26549 them with spaces, and write first any length keyword, then 26550 `unsigned' if appropriate, and finally `int'. The string must 26551 exactly match one of the data type names defined in the function 26552 `init_decl_processing' in the file `c-decl.c'. You may not omit 26553 `int' or change the order--that would cause the compiler to crash 26554 on startup. 26555 26556 If you don't define this macro, the default is `"long unsigned 26557 int"'. 26558 26559 -- Macro: PTRDIFF_TYPE 26560 A C expression for a string describing the name of the data type 26561 to use for the result of subtracting two pointers. The typedef 26562 name `ptrdiff_t' is defined using the contents of the string. See 26563 `SIZE_TYPE' above for more information. 26564 26565 If you don't define this macro, the default is `"long int"'. 26566 26567 -- Macro: WCHAR_TYPE 26568 A C expression for a string describing the name of the data type 26569 to use for wide characters. The typedef name `wchar_t' is defined 26570 using the contents of the string. See `SIZE_TYPE' above for more 26571 information. 26572 26573 If you don't define this macro, the default is `"int"'. 26574 26575 -- Macro: WCHAR_TYPE_SIZE 26576 A C expression for the size in bits of the data type for wide 26577 characters. This is used in `cpp', which cannot make use of 26578 `WCHAR_TYPE'. 26579 26580 -- Macro: WINT_TYPE 26581 A C expression for a string describing the name of the data type to 26582 use for wide characters passed to `printf' and returned from 26583 `getwc'. The typedef name `wint_t' is defined using the contents 26584 of the string. See `SIZE_TYPE' above for more information. 26585 26586 If you don't define this macro, the default is `"unsigned int"'. 26587 26588 -- Macro: INTMAX_TYPE 26589 A C expression for a string describing the name of the data type 26590 that can represent any value of any standard or extended signed 26591 integer type. The typedef name `intmax_t' is defined using the 26592 contents of the string. See `SIZE_TYPE' above for more 26593 information. 26594 26595 If you don't define this macro, the default is the first of 26596 `"int"', `"long int"', or `"long long int"' that has as much 26597 precision as `long long int'. 26598 26599 -- Macro: UINTMAX_TYPE 26600 A C expression for a string describing the name of the data type 26601 that can represent any value of any standard or extended unsigned 26602 integer type. The typedef name `uintmax_t' is defined using the 26603 contents of the string. See `SIZE_TYPE' above for more 26604 information. 26605 26606 If you don't define this macro, the default is the first of 26607 `"unsigned int"', `"long unsigned int"', or `"long long unsigned 26608 int"' that has as much precision as `long long unsigned int'. 26609 26610 -- Macro: SIG_ATOMIC_TYPE 26611 -- Macro: INT8_TYPE 26612 -- Macro: INT16_TYPE 26613 -- Macro: INT32_TYPE 26614 -- Macro: INT64_TYPE 26615 -- Macro: UINT8_TYPE 26616 -- Macro: UINT16_TYPE 26617 -- Macro: UINT32_TYPE 26618 -- Macro: UINT64_TYPE 26619 -- Macro: INT_LEAST8_TYPE 26620 -- Macro: INT_LEAST16_TYPE 26621 -- Macro: INT_LEAST32_TYPE 26622 -- Macro: INT_LEAST64_TYPE 26623 -- Macro: UINT_LEAST8_TYPE 26624 -- Macro: UINT_LEAST16_TYPE 26625 -- Macro: UINT_LEAST32_TYPE 26626 -- Macro: UINT_LEAST64_TYPE 26627 -- Macro: INT_FAST8_TYPE 26628 -- Macro: INT_FAST16_TYPE 26629 -- Macro: INT_FAST32_TYPE 26630 -- Macro: INT_FAST64_TYPE 26631 -- Macro: UINT_FAST8_TYPE 26632 -- Macro: UINT_FAST16_TYPE 26633 -- Macro: UINT_FAST32_TYPE 26634 -- Macro: UINT_FAST64_TYPE 26635 -- Macro: INTPTR_TYPE 26636 -- Macro: UINTPTR_TYPE 26637 C expressions for the standard types `sig_atomic_t', `int8_t', 26638 `int16_t', `int32_t', `int64_t', `uint8_t', `uint16_t', 26639 `uint32_t', `uint64_t', `int_least8_t', `int_least16_t', 26640 `int_least32_t', `int_least64_t', `uint_least8_t', 26641 `uint_least16_t', `uint_least32_t', `uint_least64_t', 26642 `int_fast8_t', `int_fast16_t', `int_fast32_t', `int_fast64_t', 26643 `uint_fast8_t', `uint_fast16_t', `uint_fast32_t', `uint_fast64_t', 26644 `intptr_t', and `uintptr_t'. See `SIZE_TYPE' above for more 26645 information. 26646 26647 If any of these macros evaluates to a null pointer, the 26648 corresponding type is not supported; if GCC is configured to 26649 provide `<stdint.h>' in such a case, the header provided may not 26650 conform to C99, depending on the type in question. The defaults 26651 for all of these macros are null pointers. 26652 26653 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 26654 The C++ compiler represents a pointer-to-member-function with a 26655 struct that looks like: 26656 26657 struct { 26658 union { 26659 void (*fn)(); 26660 ptrdiff_t vtable_index; 26661 }; 26662 ptrdiff_t delta; 26663 }; 26664 26665 The C++ compiler must use one bit to indicate whether the function 26666 that will be called through a pointer-to-member-function is 26667 virtual. Normally, we assume that the low-order bit of a function 26668 pointer must always be zero. Then, by ensuring that the 26669 vtable_index is odd, we can distinguish which variant of the union 26670 is in use. But, on some platforms function pointers can be odd, 26671 and so this doesn't work. In that case, we use the low-order bit 26672 of the `delta' field, and shift the remainder of the `delta' field 26673 to the left. 26674 26675 GCC will automatically make the right selection about where to 26676 store this bit using the `FUNCTION_BOUNDARY' setting for your 26677 platform. However, some platforms such as ARM/Thumb have 26678 `FUNCTION_BOUNDARY' set such that functions always start at even 26679 addresses, but the lowest bit of pointers to functions indicate 26680 whether the function at that address is in ARM or Thumb mode. If 26681 this is the case of your architecture, you should define this 26682 macro to `ptrmemfunc_vbit_in_delta'. 26683 26684 In general, you should not have to define this macro. On 26685 architectures in which function addresses are always even, 26686 according to `FUNCTION_BOUNDARY', GCC will automatically define 26687 this macro to `ptrmemfunc_vbit_in_pfn'. 26688 26689 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 26690 Normally, the C++ compiler uses function pointers in vtables. This 26691 macro allows the target to change to use "function descriptors" 26692 instead. Function descriptors are found on targets for whom a 26693 function pointer is actually a small data structure. Normally the 26694 data structure consists of the actual code address plus a data 26695 pointer to which the function's data is relative. 26696 26697 If vtables are used, the value of this macro should be the number 26698 of words that the function descriptor occupies. 26699 26700 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 26701 By default, the vtable entries are void pointers, the so the 26702 alignment is the same as pointer alignment. The value of this 26703 macro specifies the alignment of the vtable entry in bits. It 26704 should be defined only when special alignment is necessary. */ 26705 26706 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 26707 There are a few non-descriptor entries in the vtable at offsets 26708 below zero. If these entries must be padded (say, to preserve the 26709 alignment specified by `TARGET_VTABLE_ENTRY_ALIGN'), set this to 26710 the number of words in each data entry. 26711 26712 26713File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 26714 2671517.7 Register Usage 26716=================== 26717 26718This section explains how to describe what registers the target machine 26719has, and how (in general) they can be used. 26720 26721 The description of which registers a specific instruction can use is 26722done with register classes; see *note Register Classes::. For 26723information on using registers to access a stack frame, see *note Frame 26724Registers::. For passing values in registers, see *note Register 26725Arguments::. For returning values in registers, see *note Scalar 26726Return::. 26727 26728* Menu: 26729 26730* Register Basics:: Number and kinds of registers. 26731* Allocation Order:: Order in which registers are allocated. 26732* Values in Registers:: What kinds of values each reg can hold. 26733* Leaf Functions:: Renumbering registers for leaf functions. 26734* Stack Registers:: Handling a register stack such as 80387. 26735 26736 26737File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 26738 2673917.7.1 Basic Characteristics of Registers 26740----------------------------------------- 26741 26742Registers have various characteristics. 26743 26744 -- Macro: FIRST_PSEUDO_REGISTER 26745 Number of hardware registers known to the compiler. They receive 26746 numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first 26747 pseudo register's number really is assigned the number 26748 `FIRST_PSEUDO_REGISTER'. 26749 26750 -- Macro: FIXED_REGISTERS 26751 An initializer that says which registers are used for fixed 26752 purposes all throughout the compiled code and are therefore not 26753 available for general allocation. These would include the stack 26754 pointer, the frame pointer (except on machines where that can be 26755 used as a general register when no frame pointer is needed), the 26756 program counter on machines where that is considered one of the 26757 addressable registers, and any other numbered register with a 26758 standard use. 26759 26760 This information is expressed as a sequence of numbers, separated 26761 by commas and surrounded by braces. The Nth number is 1 if 26762 register N is fixed, 0 otherwise. 26763 26764 The table initialized from this macro, and the table initialized by 26765 the following one, may be overridden at run time either 26766 automatically, by the actions of the macro 26767 `CONDITIONAL_REGISTER_USAGE', or by the user with the command 26768 options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'. 26769 26770 -- Macro: CALL_USED_REGISTERS 26771 Like `FIXED_REGISTERS' but has 1 for each register that is 26772 clobbered (in general) by function calls as well as for fixed 26773 registers. This macro therefore identifies the registers that are 26774 not available for general allocation of values that must live 26775 across function calls. 26776 26777 If a register has 0 in `CALL_USED_REGISTERS', the compiler 26778 automatically saves it on function entry and restores it on 26779 function exit, if the register is used within the function. 26780 26781 -- Macro: CALL_REALLY_USED_REGISTERS 26782 Like `CALL_USED_REGISTERS' except this macro doesn't require that 26783 the entire set of `FIXED_REGISTERS' be included. 26784 (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS'). 26785 This macro is optional. If not specified, it defaults to the value 26786 of `CALL_USED_REGISTERS'. 26787 26788 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 26789 A C expression that is nonzero if it is not permissible to store a 26790 value of mode MODE in hard register number REGNO across a call 26791 without some part of it being clobbered. For most machines this 26792 macro need not be defined. It is only required for machines that 26793 do not preserve the entire contents of a register across a call. 26794 26795 -- Macro: CONDITIONAL_REGISTER_USAGE 26796 Zero or more C statements that may conditionally modify five 26797 variables `fixed_regs', `call_used_regs', `global_regs', 26798 `reg_names', and `reg_class_contents', to take into account any 26799 dependence of these register sets on target flags. The first three 26800 of these are of type `char []' (interpreted as Boolean vectors). 26801 `global_regs' is a `const char *[]', and `reg_class_contents' is a 26802 `HARD_REG_SET'. Before the macro is called, `fixed_regs', 26803 `call_used_regs', `reg_class_contents', and `reg_names' have been 26804 initialized from `FIXED_REGISTERS', `CALL_USED_REGISTERS', 26805 `REG_CLASS_CONTENTS', and `REGISTER_NAMES', respectively. 26806 `global_regs' has been cleared, and any `-ffixed-REG', 26807 `-fcall-used-REG' and `-fcall-saved-REG' command options have been 26808 applied. 26809 26810 You need not define this macro if it has no work to do. 26811 26812 If the usage of an entire class of registers depends on the target 26813 flags, you may indicate this to GCC by using this macro to modify 26814 `fixed_regs' and `call_used_regs' to 1 for each of the registers 26815 in the classes which should not be used by GCC. Also define the 26816 macro `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' to 26817 return `NO_REGS' if it is called with a letter for a class that 26818 shouldn't be used. 26819 26820 (However, if this class is not included in `GENERAL_REGS' and all 26821 of the insn patterns whose constraints permit this class are 26822 controlled by target switches, then GCC will automatically avoid 26823 using these registers when the target switches are opposed to 26824 them.) 26825 26826 -- Macro: INCOMING_REGNO (OUT) 26827 Define this macro if the target machine has register windows. 26828 This C expression returns the register number as seen by the 26829 called function corresponding to the register number OUT as seen 26830 by the calling function. Return OUT if register number OUT is not 26831 an outbound register. 26832 26833 -- Macro: OUTGOING_REGNO (IN) 26834 Define this macro if the target machine has register windows. 26835 This C expression returns the register number as seen by the 26836 calling function corresponding to the register number IN as seen 26837 by the called function. Return IN if register number IN is not an 26838 inbound register. 26839 26840 -- Macro: LOCAL_REGNO (REGNO) 26841 Define this macro if the target machine has register windows. 26842 This C expression returns true if the register is call-saved but 26843 is in the register window. Unlike most call-saved registers, such 26844 registers need not be explicitly restored on function exit or 26845 during non-local gotos. 26846 26847 -- Macro: PC_REGNUM 26848 If the program counter has a register number, define this as that 26849 register number. Otherwise, do not define it. 26850 26851 26852File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 26853 2685417.7.2 Order of Allocation of Registers 26855--------------------------------------- 26856 26857Registers are allocated in order. 26858 26859 -- Macro: REG_ALLOC_ORDER 26860 If defined, an initializer for a vector of integers, containing the 26861 numbers of hard registers in the order in which GCC should prefer 26862 to use them (from most preferred to least). 26863 26864 If this macro is not defined, registers are used lowest numbered 26865 first (all else being equal). 26866 26867 One use of this macro is on machines where the highest numbered 26868 registers must always be saved and the save-multiple-registers 26869 instruction supports only sequences of consecutive registers. On 26870 such machines, define `REG_ALLOC_ORDER' to be an initializer that 26871 lists the highest numbered allocable register first. 26872 26873 -- Macro: ORDER_REGS_FOR_LOCAL_ALLOC 26874 A C statement (sans semicolon) to choose the order in which to 26875 allocate hard registers for pseudo-registers local to a basic 26876 block. 26877 26878 Store the desired register order in the array `reg_alloc_order'. 26879 Element 0 should be the register to allocate first; element 1, the 26880 next register; and so on. 26881 26882 The macro body should not assume anything about the contents of 26883 `reg_alloc_order' before execution of the macro. 26884 26885 On most machines, it is not necessary to define this macro. 26886 26887 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 26888 In some case register allocation order is not enough for the 26889 Integrated Register Allocator (IRA) to generate a good code. If 26890 this macro is defined, it should return a floating point value 26891 based on REGNO. The cost of using REGNO for a pseudo will be 26892 increased by approximately the pseudo's usage frequency times the 26893 value returned by this macro. Not defining this macro is 26894 equivalent to having it always return `0.0'. 26895 26896 On most machines, it is not necessary to define this macro. 26897 26898 26899File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 26900 2690117.7.3 How Values Fit in Registers 26902---------------------------------- 26903 26904This section discusses the macros that describe which kinds of values 26905(specifically, which machine modes) each register can hold, and how many 26906consecutive registers are needed for a given mode. 26907 26908 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 26909 A C expression for the number of consecutive hard registers, 26910 starting at register number REGNO, required to hold a value of mode 26911 MODE. This macro must never return zero, even if a register 26912 cannot hold the requested mode - indicate that with 26913 HARD_REGNO_MODE_OK and/or CANNOT_CHANGE_MODE_CLASS instead. 26914 26915 On a machine where all registers are exactly one word, a suitable 26916 definition of this macro is 26917 26918 #define HARD_REGNO_NREGS(REGNO, MODE) \ 26919 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 26920 / UNITS_PER_WORD) 26921 26922 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 26923 A C expression that is nonzero if a value of mode MODE, stored in 26924 memory, ends with padding that causes it to take up more space than 26925 in registers starting at register number REGNO (as determined by 26926 multiplying GCC's notion of the size of the register when 26927 containing this mode by the number of registers returned by 26928 `HARD_REGNO_NREGS'). By default this is zero. 26929 26930 For example, if a floating-point value is stored in three 32-bit 26931 registers but takes up 128 bits in memory, then this would be 26932 nonzero. 26933 26934 This macros only needs to be defined if there are cases where 26935 `subreg_get_info' would otherwise wrongly determine that a 26936 `subreg' can be represented by an offset to the register number, 26937 when in fact such a `subreg' would contain some of the padding not 26938 stored in registers and so not be representable. 26939 26940 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 26941 For values of REGNO and MODE for which 26942 `HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 26943 returning the greater number of registers required to hold the 26944 value including any padding. In the example above, the value 26945 would be four. 26946 26947 -- Macro: REGMODE_NATURAL_SIZE (MODE) 26948 Define this macro if the natural size of registers that hold values 26949 of mode MODE is not the word size. It is a C expression that 26950 should give the natural size in bytes for the specified mode. It 26951 is used by the register allocator to try to optimize its results. 26952 This happens for example on SPARC 64-bit where the natural size of 26953 floating-point registers is still 32-bit. 26954 26955 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 26956 A C expression that is nonzero if it is permissible to store a 26957 value of mode MODE in hard register number REGNO (or in several 26958 registers starting with that one). For a machine where all 26959 registers are equivalent, a suitable definition is 26960 26961 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 26962 26963 You need not include code to check for the numbers of fixed 26964 registers, because the allocation mechanism considers them to be 26965 always occupied. 26966 26967 On some machines, double-precision values must be kept in even/odd 26968 register pairs. You can implement that by defining this macro to 26969 reject odd register numbers for such modes. 26970 26971 The minimum requirement for a mode to be OK in a register is that 26972 the `movMODE' instruction pattern support moves between the 26973 register and other hard register in the same class and that moving 26974 a value into the register and back out not alter it. 26975 26976 Since the same instruction used to move `word_mode' will work for 26977 all narrower integer modes, it is not necessary on any machine for 26978 `HARD_REGNO_MODE_OK' to distinguish between these modes, provided 26979 you define patterns `movhi', etc., to take advantage of this. This 26980 is useful because of the interaction between `HARD_REGNO_MODE_OK' 26981 and `MODES_TIEABLE_P'; it is very desirable for all integer modes 26982 to be tieable. 26983 26984 Many machines have special registers for floating point arithmetic. 26985 Often people assume that floating point machine modes are allowed 26986 only in floating point registers. This is not true. Any 26987 registers that can hold integers can safely _hold_ a floating 26988 point machine mode, whether or not floating arithmetic can be done 26989 on it in those registers. Integer move instructions can be used 26990 to move the values. 26991 26992 On some machines, though, the converse is true: fixed-point machine 26993 modes may not go in floating registers. This is true if the 26994 floating registers normalize any value stored in them, because 26995 storing a non-floating value there would garble it. In this case, 26996 `HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 26997 floating registers. But if the floating registers do not 26998 automatically normalize, if you can store any bit pattern in one 26999 and retrieve it unchanged without a trap, then any machine mode 27000 may go in a floating register, so you can define this macro to say 27001 so. 27002 27003 The primary significance of special floating registers is rather 27004 that they are the registers acceptable in floating point arithmetic 27005 instructions. However, this is of no concern to 27006 `HARD_REGNO_MODE_OK'. You handle it by writing the proper 27007 constraints for those instructions. 27008 27009 On some machines, the floating registers are especially slow to 27010 access, so that it is better to store a value in a stack frame 27011 than in such a register if floating point arithmetic is not being 27012 done. As long as the floating registers are not in class 27013 `GENERAL_REGS', they will not be used unless some pattern's 27014 constraint asks for one. 27015 27016 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 27017 A C expression that is nonzero if it is OK to rename a hard 27018 register FROM to another hard register TO. 27019 27020 One common use of this macro is to prevent renaming of a register 27021 to another register that is not saved by a prologue in an interrupt 27022 handler. 27023 27024 The default is always nonzero. 27025 27026 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 27027 A C expression that is nonzero if a value of mode MODE1 is 27028 accessible in mode MODE2 without copying. 27029 27030 If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, 27031 MODE2)' are always the same for any R, then `MODES_TIEABLE_P 27032 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 27033 should define this macro to return zero unless some other 27034 mechanism ensures the accessibility of the value in a narrower 27035 mode. 27036 27037 You should define this macro to return nonzero in as many cases as 27038 possible since doing so will allow GCC to perform better register 27039 allocation. 27040 27041 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 27042 This target hook should return `true' if it is OK to use a hard 27043 register REGNO as scratch reg in peephole2. 27044 27045 One common use of this macro is to prevent using of a register that 27046 is not saved by a prologue in an interrupt handler. 27047 27048 The default version of this hook always returns `true'. 27049 27050 -- Macro: AVOID_CCMODE_COPIES 27051 Define this macro if the compiler should avoid copies to/from 27052 `CCmode' registers. You should only define this macro if support 27053 for copying to/from `CCmode' is incomplete. 27054 27055 27056File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 27057 2705817.7.4 Handling Leaf Functions 27059------------------------------ 27060 27061On some machines, a leaf function (i.e., one which makes no calls) can 27062run more efficiently if it does not make its own register window. 27063Often this means it is required to receive its arguments in the 27064registers where they are passed by the caller, instead of the registers 27065where they would normally arrive. 27066 27067 The special treatment for leaf functions generally applies only when 27068other conditions are met; for example, often they may use only those 27069registers for its own variables and temporaries. We use the term "leaf 27070function" to mean a function that is suitable for this special 27071handling, so that functions with no calls are not necessarily "leaf 27072functions". 27073 27074 GCC assigns register numbers before it knows whether the function is 27075suitable for leaf function treatment. So it needs to renumber the 27076registers in order to output a leaf function. The following macros 27077accomplish this. 27078 27079 -- Macro: LEAF_REGISTERS 27080 Name of a char vector, indexed by hard register number, which 27081 contains 1 for a register that is allowable in a candidate for leaf 27082 function treatment. 27083 27084 If leaf function treatment involves renumbering the registers, 27085 then the registers marked here should be the ones before 27086 renumbering--those that GCC would ordinarily allocate. The 27087 registers which will actually be used in the assembler code, after 27088 renumbering, should not be marked with 1 in this vector. 27089 27090 Define this macro only if the target machine offers a way to 27091 optimize the treatment of leaf functions. 27092 27093 -- Macro: LEAF_REG_REMAP (REGNO) 27094 A C expression whose value is the register number to which REGNO 27095 should be renumbered, when a function is treated as a leaf 27096 function. 27097 27098 If REGNO is a register number which should not appear in a leaf 27099 function before renumbering, then the expression should yield -1, 27100 which will cause the compiler to abort. 27101 27102 Define this macro only if the target machine offers a way to 27103 optimize the treatment of leaf functions, and registers need to be 27104 renumbered to do this. 27105 27106 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' must 27107usually treat leaf functions specially. They can test the C variable 27108`current_function_is_leaf' which is nonzero for leaf functions. 27109`current_function_is_leaf' is set prior to local register allocation 27110and is valid for the remaining compiler passes. They can also test the 27111C variable `current_function_uses_only_leaf_regs' which is nonzero for 27112leaf functions which only use leaf registers. 27113`current_function_uses_only_leaf_regs' is valid after all passes that 27114modify the instructions have been run and is only useful if 27115`LEAF_REGISTERS' is defined. 27116 27117 27118File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 27119 2712017.7.5 Registers That Form a Stack 27121---------------------------------- 27122 27123There are special features to handle computers where some of the 27124"registers" form a stack. Stack registers are normally written by 27125pushing onto the stack, and are numbered relative to the top of the 27126stack. 27127 27128 Currently, GCC can only handle one group of stack-like registers, and 27129they must be consecutively numbered. Furthermore, the existing support 27130for stack-like registers is specific to the 80387 floating point 27131coprocessor. If you have a new architecture that uses stack-like 27132registers, you will need to do substantial work on `reg-stack.c' and 27133write your machine description to cooperate with it, as well as 27134defining these macros. 27135 27136 -- Macro: STACK_REGS 27137 Define this if the machine has any stack-like registers. 27138 27139 -- Macro: STACK_REG_COVER_CLASS 27140 This is a cover class containing the stack registers. Define this 27141 if the machine has any stack-like registers. 27142 27143 -- Macro: FIRST_STACK_REG 27144 The number of the first stack-like register. This one is the top 27145 of the stack. 27146 27147 -- Macro: LAST_STACK_REG 27148 The number of the last stack-like register. This one is the 27149 bottom of the stack. 27150 27151 27152File: gccint.info, Node: Register Classes, Next: Old Constraints, Prev: Registers, Up: Target Macros 27153 2715417.8 Register Classes 27155===================== 27156 27157On many machines, the numbered registers are not all equivalent. For 27158example, certain registers may not be allowed for indexed addressing; 27159certain registers may not be allowed in some instructions. These 27160machine restrictions are described to the compiler using "register 27161classes". 27162 27163 You define a number of register classes, giving each one a name and 27164saying which of the registers belong to it. Then you can specify 27165register classes that are allowed as operands to particular instruction 27166patterns. 27167 27168 In general, each register will belong to several classes. In fact, one 27169class must be named `ALL_REGS' and contain all the registers. Another 27170class must be named `NO_REGS' and contain no registers. Often the 27171union of two classes will be another class; however, this is not 27172required. 27173 27174 One of the classes must be named `GENERAL_REGS'. There is nothing 27175terribly special about the name, but the operand constraint letters `r' 27176and `g' specify this class. If `GENERAL_REGS' is the same as 27177`ALL_REGS', just define it as a macro which expands to `ALL_REGS'. 27178 27179 Order the classes so that if class X is contained in class Y then X 27180has a lower class number than Y. 27181 27182 The way classes other than `GENERAL_REGS' are specified in operand 27183constraints is through machine-dependent operand constraint letters. 27184You can define such letters to correspond to various classes, then use 27185them in operand constraints. 27186 27187 You should define a class for the union of two classes whenever some 27188instruction allows both classes. For example, if an instruction allows 27189either a floating point (coprocessor) register or a general register 27190for a certain operand, you should define a class `FLOAT_OR_GENERAL_REGS' 27191which includes both of them. Otherwise you will get suboptimal code. 27192 27193 You must also specify certain redundant information about the register 27194classes: for each class, which classes contain it and which ones are 27195contained in it; for each pair of classes, the largest class contained 27196in their union. 27197 27198 When a value occupying several consecutive registers is expected in a 27199certain class, all the registers used must belong to that class. 27200Therefore, register classes cannot be used to enforce a requirement for 27201a register pair to start with an even-numbered register. The way to 27202specify this requirement is with `HARD_REGNO_MODE_OK'. 27203 27204 Register classes used for input-operands of bitwise-and or shift 27205instructions have a special requirement: each such class must have, for 27206each fixed-point machine mode, a subclass whose registers can transfer 27207that mode to or from memory. For example, on some machines, the 27208operations for single-byte values (`QImode') are limited to certain 27209registers. When this is so, each register class that is used in a 27210bitwise-and or shift instruction must have a subclass consisting of 27211registers from which single-byte values can be loaded or stored. This 27212is so that `PREFERRED_RELOAD_CLASS' can always have a possible value to 27213return. 27214 27215 -- Data type: enum reg_class 27216 An enumerated type that must be defined with all the register 27217 class names as enumerated values. `NO_REGS' must be first. 27218 `ALL_REGS' must be the last register class, followed by one more 27219 enumerated value, `LIM_REG_CLASSES', which is not a register class 27220 but rather tells how many classes there are. 27221 27222 Each register class has a number, which is the value of casting 27223 the class name to type `int'. The number serves as an index in 27224 many of the tables described below. 27225 27226 -- Macro: N_REG_CLASSES 27227 The number of distinct register classes, defined as follows: 27228 27229 #define N_REG_CLASSES (int) LIM_REG_CLASSES 27230 27231 -- Macro: REG_CLASS_NAMES 27232 An initializer containing the names of the register classes as C 27233 string constants. These names are used in writing some of the 27234 debugging dumps. 27235 27236 -- Macro: REG_CLASS_CONTENTS 27237 An initializer containing the contents of the register classes, as 27238 integers which are bit masks. The Nth integer specifies the 27239 contents of class N. The way the integer MASK is interpreted is 27240 that register R is in the class if `MASK & (1 << R)' is 1. 27241 27242 When the machine has more than 32 registers, an integer does not 27243 suffice. Then the integers are replaced by sub-initializers, 27244 braced groupings containing several integers. Each 27245 sub-initializer must be suitable as an initializer for the type 27246 `HARD_REG_SET' which is defined in `hard-reg-set.h'. In this 27247 situation, the first integer in each sub-initializer corresponds to 27248 registers 0 through 31, the second integer to registers 32 through 27249 63, and so on. 27250 27251 -- Macro: REGNO_REG_CLASS (REGNO) 27252 A C expression whose value is a register class containing hard 27253 register REGNO. In general there is more than one such class; 27254 choose a class which is "minimal", meaning that no smaller class 27255 also contains the register. 27256 27257 -- Macro: BASE_REG_CLASS 27258 A macro whose definition is the name of the class to which a valid 27259 base register must belong. A base register is one used in an 27260 address which is the register value plus a displacement. 27261 27262 -- Macro: MODE_BASE_REG_CLASS (MODE) 27263 This is a variation of the `BASE_REG_CLASS' macro which allows the 27264 selection of a base register in a mode dependent manner. If MODE 27265 is VOIDmode then it should return the same value as 27266 `BASE_REG_CLASS'. 27267 27268 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 27269 A C expression whose value is the register class to which a valid 27270 base register must belong in order to be used in a base plus index 27271 register address. You should define this macro if base plus index 27272 addresses have different requirements than other base register 27273 uses. 27274 27275 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, OUTER_CODE, INDEX_CODE) 27276 A C expression whose value is the register class to which a valid 27277 base register must belong. OUTER_CODE and INDEX_CODE define the 27278 context in which the base register occurs. OUTER_CODE is the code 27279 of the immediately enclosing expression (`MEM' for the top level 27280 of an address, `ADDRESS' for something that occurs in an 27281 `address_operand'). INDEX_CODE is the code of the corresponding 27282 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise. 27283 27284 -- Macro: INDEX_REG_CLASS 27285 A macro whose definition is the name of the class to which a valid 27286 index register must belong. An index register is one used in an 27287 address where its value is either multiplied by a scale factor or 27288 added to another register (as well as added to a displacement). 27289 27290 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 27291 A C expression which is nonzero if register number NUM is suitable 27292 for use as a base register in operand addresses. Like 27293 `TARGET_LEGITIMATE_ADDRESS_P', this macro should also define a 27294 strict and a non-strict variant. Both variants behave the same 27295 for hard register; for pseudos, the strict variant will pass only 27296 those that have been allocated to a valid hard registers, while 27297 the non-strict variant will pass all pseudos. 27298 27299 Compiler source files that want to use the strict variant of this 27300 and other macros define the macro `REG_OK_STRICT'. You should use 27301 an `#ifdef REG_OK_STRICT' conditional to define the strict variant 27302 in that case and the non-strict variant otherwise. 27303 27304 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 27305 A C expression that is just like `REGNO_OK_FOR_BASE_P', except that 27306 that expression may examine the mode of the memory reference in 27307 MODE. You should define this macro if the mode of the memory 27308 reference affects whether a register may be used as a base 27309 register. If you define this macro, the compiler will use it 27310 instead of `REGNO_OK_FOR_BASE_P'. The mode may be `VOIDmode' for 27311 addresses that appear outside a `MEM', i.e., as an 27312 `address_operand'. 27313 27314 This macro also has strict and non-strict variants. 27315 27316 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 27317 A C expression which is nonzero if register number NUM is suitable 27318 for use as a base register in base plus index operand addresses, 27319 accessing memory in mode MODE. It may be either a suitable hard 27320 register or a pseudo register that has been allocated such a hard 27321 register. You should define this macro if base plus index 27322 addresses have different requirements than other base register 27323 uses. 27324 27325 Use of this macro is deprecated; please use the more general 27326 `REGNO_MODE_CODE_OK_FOR_BASE_P'. 27327 27328 This macro also has strict and non-strict variants. 27329 27330 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, OUTER_CODE, 27331 INDEX_CODE) 27332 A C expression that is just like `REGNO_MODE_OK_FOR_BASE_P', except 27333 that that expression may examine the context in which the register 27334 appears in the memory reference. OUTER_CODE is the code of the 27335 immediately enclosing expression (`MEM' if at the top level of the 27336 address, `ADDRESS' for something that occurs in an 27337 `address_operand'). INDEX_CODE is the code of the corresponding 27338 index expression if OUTER_CODE is `PLUS'; `SCRATCH' otherwise. 27339 The mode may be `VOIDmode' for addresses that appear outside a 27340 `MEM', i.e., as an `address_operand'. 27341 27342 This macro also has strict and non-strict variants. 27343 27344 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 27345 A C expression which is nonzero if register number NUM is suitable 27346 for use as an index register in operand addresses. It may be 27347 either a suitable hard register or a pseudo register that has been 27348 allocated such a hard register. 27349 27350 The difference between an index register and a base register is 27351 that the index register may be scaled. If an address involves the 27352 sum of two registers, neither one of them scaled, then either one 27353 may be labeled the "base" and the other the "index"; but whichever 27354 labeling is used must fit the machine's constraints of which 27355 registers may serve in each capacity. The compiler will try both 27356 labelings, looking for one that is valid, and will reload one or 27357 both registers only if neither labeling works. 27358 27359 This macro also has strict and non-strict variants. 27360 27361 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 27362 A C expression that places additional restrictions on the register 27363 class to use when it is necessary to copy value X into a register 27364 in class CLASS. The value is a register class; perhaps CLASS, or 27365 perhaps another, smaller class. On many machines, the following 27366 definition is safe: 27367 27368 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 27369 27370 Sometimes returning a more restrictive class makes better code. 27371 For example, on the 68000, when X is an integer constant that is 27372 in range for a `moveq' instruction, the value of this macro is 27373 always `DATA_REGS' as long as CLASS includes the data registers. 27374 Requiring a data register guarantees that a `moveq' will be used. 27375 27376 One case where `PREFERRED_RELOAD_CLASS' must not return CLASS is 27377 if X is a legitimate constant which cannot be loaded into some 27378 register class. By returning `NO_REGS' you can force X into a 27379 memory location. For example, rs6000 can load immediate values 27380 into general-purpose registers, but does not have an instruction 27381 for loading an immediate value into a floating-point register, so 27382 `PREFERRED_RELOAD_CLASS' returns `NO_REGS' when X is a 27383 floating-point constant. If the constant can't be loaded into any 27384 kind of register, code generation will be better if 27385 `LEGITIMATE_CONSTANT_P' makes the constant illegitimate instead of 27386 using `PREFERRED_RELOAD_CLASS'. 27387 27388 If an insn has pseudos in it after register allocation, reload 27389 will go through the alternatives and call repeatedly 27390 `PREFERRED_RELOAD_CLASS' to find the best one. Returning 27391 `NO_REGS', in this case, makes reload add a `!' in front of the 27392 constraint: the x86 back-end uses this feature to discourage usage 27393 of 387 registers when math is done in the SSE registers (and vice 27394 versa). 27395 27396 -- Macro: PREFERRED_OUTPUT_RELOAD_CLASS (X, CLASS) 27397 Like `PREFERRED_RELOAD_CLASS', but for output reloads instead of 27398 input reloads. If you don't define this macro, the default is to 27399 use CLASS, unchanged. 27400 27401 You can also use `PREFERRED_OUTPUT_RELOAD_CLASS' to discourage 27402 reload from using some alternatives, like `PREFERRED_RELOAD_CLASS'. 27403 27404 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 27405 A C expression that places additional restrictions on the register 27406 class to use when it is necessary to be able to hold a value of 27407 mode MODE in a reload register for which class CLASS would 27408 ordinarily be used. 27409 27410 Unlike `PREFERRED_RELOAD_CLASS', this macro should be used when 27411 there are certain modes that simply can't go in certain reload 27412 classes. 27413 27414 The value is a register class; perhaps CLASS, or perhaps another, 27415 smaller class. 27416 27417 Don't define this macro unless the target machine has limitations 27418 which require the macro to do something nontrivial. 27419 27420 -- Target Hook: enum reg_class TARGET_SECONDARY_RELOAD (bool IN_P, rtx 27421 X, enum reg_class RELOAD_CLASS, enum machine_mode 27422 RELOAD_MODE, secondary_reload_info *SRI) 27423 Many machines have some registers that cannot be copied directly 27424 to or from memory or even from other types of registers. An 27425 example is the `MQ' register, which on most machines, can only be 27426 copied to or from general registers, but not memory. Below, we 27427 shall be using the term 'intermediate register' when a move 27428 operation cannot be performed directly, but has to be done by 27429 copying the source into the intermediate register first, and then 27430 copying the intermediate register to the destination. An 27431 intermediate register always has the same mode as source and 27432 destination. Since it holds the actual value being copied, reload 27433 might apply optimizations to re-use an intermediate register and 27434 eliding the copy from the source when it can determine that the 27435 intermediate register still holds the required value. 27436 27437 Another kind of secondary reload is required on some machines which 27438 allow copying all registers to and from memory, but require a 27439 scratch register for stores to some memory locations (e.g., those 27440 with symbolic address on the RT, and those with certain symbolic 27441 address on the SPARC when compiling PIC). Scratch registers need 27442 not have the same mode as the value being copied, and usually hold 27443 a different value than that being copied. Special patterns in the 27444 md file are needed to describe how the copy is performed with the 27445 help of the scratch register; these patterns also describe the 27446 number, register class(es) and mode(s) of the scratch register(s). 27447 27448 In some cases, both an intermediate and a scratch register are 27449 required. 27450 27451 For input reloads, this target hook is called with nonzero IN_P, 27452 and X is an rtx that needs to be copied to a register of class 27453 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 27454 is called with zero IN_P, and a register of class RELOAD_CLASS 27455 needs to be copied to rtx X in RELOAD_MODE. 27456 27457 If copying a register of RELOAD_CLASS from/to X requires an 27458 intermediate register, the hook `secondary_reload' should return 27459 the register class required for this intermediate register. If no 27460 intermediate register is required, it should return NO_REGS. If 27461 more than one intermediate register is required, describe the one 27462 that is closest in the copy chain to the reload register. 27463 27464 If scratch registers are needed, you also have to describe how to 27465 perform the copy from/to the reload register to/from this closest 27466 intermediate register. Or if no intermediate register is 27467 required, but still a scratch register is needed, describe the 27468 copy from/to the reload register to/from the reload operand X. 27469 27470 You do this by setting `sri->icode' to the instruction code of a 27471 pattern in the md file which performs the move. Operands 0 and 1 27472 are the output and input of this copy, respectively. Operands 27473 from operand 2 onward are for scratch operands. These scratch 27474 operands must have a mode, and a single-register-class output 27475 constraint. 27476 27477 When an intermediate register is used, the `secondary_reload' hook 27478 will be called again to determine how to copy the intermediate 27479 register to/from the reload operand X, so your hook must also have 27480 code to handle the register class of the intermediate operand. 27481 27482 X might be a pseudo-register or a `subreg' of a pseudo-register, 27483 which could either be in a hard register or in memory. Use 27484 `true_regnum' to find out; it will return -1 if the pseudo is in 27485 memory and the hard register number if it is in a register. 27486 27487 Scratch operands in memory (constraint `"=m"' / `"=&m"') are 27488 currently not supported. For the time being, you will have to 27489 continue to use `SECONDARY_MEMORY_NEEDED' for that purpose. 27490 27491 `copy_cost' also uses this target hook to find out how values are 27492 copied. If you want it to include some extra cost for the need to 27493 allocate (a) scratch register(s), set `sri->extra_cost' to the 27494 additional cost. Or if two dependent moves are supposed to have a 27495 lower cost than the sum of the individual moves due to expected 27496 fortuitous scheduling and/or special forwarding logic, you can set 27497 `sri->extra_cost' to a negative amount. 27498 27499 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 27500 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 27501 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 27502 These macros are obsolete, new ports should use the target hook 27503 `TARGET_SECONDARY_RELOAD' instead. 27504 27505 These are obsolete macros, replaced by the 27506 `TARGET_SECONDARY_RELOAD' target hook. Older ports still define 27507 these macros to indicate to the reload phase that it may need to 27508 allocate at least one register for a reload in addition to the 27509 register to contain the data. Specifically, if copying X to a 27510 register CLASS in MODE requires an intermediate register, you were 27511 supposed to define `SECONDARY_INPUT_RELOAD_CLASS' to return the 27512 largest register class all of whose registers can be used as 27513 intermediate registers or scratch registers. 27514 27515 If copying a register CLASS in MODE to X requires an intermediate 27516 or scratch register, `SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 27517 to be defined be defined to return the largest register class 27518 required. If the requirements for input and output reloads were 27519 the same, the macro `SECONDARY_RELOAD_CLASS' should have been used 27520 instead of defining both macros identically. 27521 27522 The values returned by these macros are often `GENERAL_REGS'. 27523 Return `NO_REGS' if no spare register is needed; i.e., if X can be 27524 directly copied to or from a register of CLASS in MODE without 27525 requiring a scratch register. Do not define this macro if it 27526 would always return `NO_REGS'. 27527 27528 If a scratch register is required (either with or without an 27529 intermediate register), you were supposed to define patterns for 27530 `reload_inM' or `reload_outM', as required (*note Standard 27531 Names::. These patterns, which were normally implemented with a 27532 `define_expand', should be similar to the `movM' patterns, except 27533 that operand 2 is the scratch register. 27534 27535 These patterns need constraints for the reload register and scratch 27536 register that contain a single register class. If the original 27537 reload register (whose class is CLASS) can meet the constraint 27538 given in the pattern, the value returned by these macros is used 27539 for the class of the scratch register. Otherwise, two additional 27540 reload registers are required. Their classes are obtained from 27541 the constraints in the insn pattern. 27542 27543 X might be a pseudo-register or a `subreg' of a pseudo-register, 27544 which could either be in a hard register or in memory. Use 27545 `true_regnum' to find out; it will return -1 if the pseudo is in 27546 memory and the hard register number if it is in a register. 27547 27548 These macros should not be used in the case where a particular 27549 class of registers can only be copied to memory and not to another 27550 class of registers. In that case, secondary reload registers are 27551 not needed and would not be helpful. Instead, a stack location 27552 must be used to perform the copy and the `movM' pattern should use 27553 memory as an intermediate storage. This case often occurs between 27554 floating-point and general registers. 27555 27556 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 27557 Certain machines have the property that some registers cannot be 27558 copied to some other registers without using memory. Define this 27559 macro on those machines to be a C expression that is nonzero if 27560 objects of mode M in registers of CLASS1 can only be copied to 27561 registers of class CLASS2 by storing a register of CLASS1 into 27562 memory and loading that memory location into a register of CLASS2. 27563 27564 Do not define this macro if its value would always be zero. 27565 27566 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 27567 Normally when `SECONDARY_MEMORY_NEEDED' is defined, the compiler 27568 allocates a stack slot for a memory location needed for register 27569 copies. If this macro is defined, the compiler instead uses the 27570 memory location defined by this macro. 27571 27572 Do not define this macro if you do not define 27573 `SECONDARY_MEMORY_NEEDED'. 27574 27575 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 27576 When the compiler needs a secondary memory location to copy 27577 between two registers of mode MODE, it normally allocates 27578 sufficient memory to hold a quantity of `BITS_PER_WORD' bits and 27579 performs the store and load operations in a mode that many bits 27580 wide and whose class is the same as that of MODE. 27581 27582 This is right thing to do on most machines because it ensures that 27583 all bits of the register are copied and prevents accesses to the 27584 registers in a narrower mode, which some machines prohibit for 27585 floating-point registers. 27586 27587 However, this default behavior is not correct on some machines, 27588 such as the DEC Alpha, that store short integers in floating-point 27589 registers differently than in integer registers. On those 27590 machines, the default widening will not work correctly and you 27591 must define this macro to suppress that widening in some cases. 27592 See the file `alpha.h' for details. 27593 27594 Do not define this macro if you do not define 27595 `SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 27596 `BITS_PER_WORD' bits wide is correct for your machine. 27597 27598 -- Macro: SMALL_REGISTER_CLASSES 27599 On some machines, it is risky to let hard registers live across 27600 arbitrary insns. Typically, these machines have instructions that 27601 require values to be in specific registers (like an accumulator), 27602 and reload will fail if the required hard register is used for 27603 another purpose across such an insn. 27604 27605 Define `SMALL_REGISTER_CLASSES' to be an expression with a nonzero 27606 value on these machines. When this macro has a nonzero value, the 27607 compiler will try to minimize the lifetime of hard registers. 27608 27609 It is always safe to define this macro with a nonzero value, but 27610 if you unnecessarily define it, you will reduce the amount of 27611 optimizations that can be performed in some cases. If you do not 27612 define this macro with a nonzero value when it is required, the 27613 compiler will run out of spill registers and print a fatal error 27614 message. For most machines, you should not define this macro at 27615 all. 27616 27617 -- Macro: CLASS_LIKELY_SPILLED_P (CLASS) 27618 A C expression whose value is nonzero if pseudos that have been 27619 assigned to registers of class CLASS would likely be spilled 27620 because registers of CLASS are needed for spill registers. 27621 27622 The default value of this macro returns 1 if CLASS has exactly one 27623 register and zero otherwise. On most machines, this default 27624 should be used. Only define this macro to some other expression 27625 if pseudos allocated by `local-alloc.c' end up in memory because 27626 their hard registers were needed for spill registers. If this 27627 macro returns nonzero for those classes, those pseudos will only 27628 be allocated by `global.c', which knows how to reallocate the 27629 pseudo to another register. If there would not be another 27630 register available for reallocation, you should not change the 27631 definition of this macro since the only effect of such a 27632 definition would be to slow down register allocation. 27633 27634 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 27635 A C expression for the maximum number of consecutive registers of 27636 class CLASS needed to hold a value of mode MODE. 27637 27638 This is closely related to the macro `HARD_REGNO_NREGS'. In fact, 27639 the value of the macro `CLASS_MAX_NREGS (CLASS, MODE)' should be 27640 the maximum value of `HARD_REGNO_NREGS (REGNO, MODE)' for all 27641 REGNO values in the class CLASS. 27642 27643 This macro helps control the handling of multiple-word values in 27644 the reload pass. 27645 27646 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 27647 If defined, a C expression that returns nonzero for a CLASS for 27648 which a change from mode FROM to mode TO is invalid. 27649 27650 For the example, loading 32-bit integer or floating-point objects 27651 into floating-point registers on the Alpha extends them to 64 bits. 27652 Therefore loading a 64-bit object and then storing it as a 32-bit 27653 object does not store the low-order 32 bits, as would be the case 27654 for a normal register. Therefore, `alpha.h' defines 27655 `CANNOT_CHANGE_MODE_CLASS' as below: 27656 27657 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 27658 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 27659 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 27660 27661 -- Target Hook: const enum reg_class * TARGET_IRA_COVER_CLASSES (void) 27662 Return an array of cover classes for the Integrated Register 27663 Allocator (IRA). Cover classes are a set of non-intersecting 27664 register classes covering all hard registers used for register 27665 allocation purposes. If a move between two registers in the same 27666 cover class is possible, it should be cheaper than a load or store 27667 of the registers. The array is terminated by a `LIM_REG_CLASSES' 27668 element. 27669 27670 The order of cover classes in the array is important. If two 27671 classes have the same cost of usage for a pseudo, the class 27672 occurred first in the array is chosen for the pseudo. 27673 27674 This hook is called once at compiler startup, after the 27675 command-line options have been processed. It is then re-examined 27676 by every call to `target_reinit'. 27677 27678 The default implementation returns `IRA_COVER_CLASSES', if defined, 27679 otherwise there is no default implementation. You must define 27680 either this macro or `IRA_COVER_CLASSES' in order to use the 27681 integrated register allocator with Chaitin-Briggs coloring. If the 27682 macro is not defined, the only available coloring algorithm is 27683 Chow's priority coloring. 27684 27685 -- Macro: IRA_COVER_CLASSES 27686 See the documentation for `TARGET_IRA_COVER_CLASSES'. 27687 27688 27689File: gccint.info, Node: Old Constraints, Next: Stack and Calling, Prev: Register Classes, Up: Target Macros 27690 2769117.9 Obsolete Macros for Defining Constraints 27692============================================= 27693 27694Machine-specific constraints can be defined with these macros instead 27695of the machine description constructs described in *note Define 27696Constraints::. This mechanism is obsolete. New ports should not use 27697it; old ports should convert to the new mechanism. 27698 27699 -- Macro: CONSTRAINT_LEN (CHAR, STR) 27700 For the constraint at the start of STR, which starts with the 27701 letter C, return the length. This allows you to have register 27702 class / constant / extra constraints that are longer than a single 27703 letter; you don't need to define this macro if you can do with 27704 single-letter constraints only. The definition of this macro 27705 should use DEFAULT_CONSTRAINT_LEN for all the characters that you 27706 don't want to handle specially. There are some sanity checks in 27707 genoutput.c that check the constraint lengths for the md file, so 27708 you can also use this macro to help you while you are 27709 transitioning from a byzantine single-letter-constraint scheme: 27710 when you return a negative length for a constraint you want to 27711 re-use, genoutput will complain about every instance where it is 27712 used in the md file. 27713 27714 -- Macro: REG_CLASS_FROM_LETTER (CHAR) 27715 A C expression which defines the machine-dependent operand 27716 constraint letters for register classes. If CHAR is such a 27717 letter, the value should be the register class corresponding to 27718 it. Otherwise, the value should be `NO_REGS'. The register 27719 letter `r', corresponding to class `GENERAL_REGS', will not be 27720 passed to this macro; you do not need to handle it. 27721 27722 -- Macro: REG_CLASS_FROM_CONSTRAINT (CHAR, STR) 27723 Like `REG_CLASS_FROM_LETTER', but you also get the constraint 27724 string passed in STR, so that you can use suffixes to distinguish 27725 between different variants. 27726 27727 -- Macro: CONST_OK_FOR_LETTER_P (VALUE, C) 27728 A C expression that defines the machine-dependent operand 27729 constraint letters (`I', `J', `K', ... `P') that specify 27730 particular ranges of integer values. If C is one of those 27731 letters, the expression should check that VALUE, an integer, is in 27732 the appropriate range and return 1 if so, 0 otherwise. If C is 27733 not one of those letters, the value should be 0 regardless of 27734 VALUE. 27735 27736 -- Macro: CONST_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 27737 Like `CONST_OK_FOR_LETTER_P', but you also get the constraint 27738 string passed in STR, so that you can use suffixes to distinguish 27739 between different variants. 27740 27741 -- Macro: CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C) 27742 A C expression that defines the machine-dependent operand 27743 constraint letters that specify particular ranges of 27744 `const_double' values (`G' or `H'). 27745 27746 If C is one of those letters, the expression should check that 27747 VALUE, an RTX of code `const_double', is in the appropriate range 27748 and return 1 if so, 0 otherwise. If C is not one of those 27749 letters, the value should be 0 regardless of VALUE. 27750 27751 `const_double' is used for all floating-point constants and for 27752 `DImode' fixed-point constants. A given letter can accept either 27753 or both kinds of values. It can use `GET_MODE' to distinguish 27754 between these kinds. 27755 27756 -- Macro: CONST_DOUBLE_OK_FOR_CONSTRAINT_P (VALUE, C, STR) 27757 Like `CONST_DOUBLE_OK_FOR_LETTER_P', but you also get the 27758 constraint string passed in STR, so that you can use suffixes to 27759 distinguish between different variants. 27760 27761 -- Macro: EXTRA_CONSTRAINT (VALUE, C) 27762 A C expression that defines the optional machine-dependent 27763 constraint letters that can be used to segregate specific types of 27764 operands, usually memory references, for the target machine. Any 27765 letter that is not elsewhere defined and not matched by 27766 `REG_CLASS_FROM_LETTER' / `REG_CLASS_FROM_CONSTRAINT' may be used. 27767 Normally this macro will not be defined. 27768 27769 If it is required for a particular target machine, it should 27770 return 1 if VALUE corresponds to the operand type represented by 27771 the constraint letter C. If C is not defined as an extra 27772 constraint, the value returned should be 0 regardless of VALUE. 27773 27774 For example, on the ROMP, load instructions cannot have their 27775 output in r0 if the memory reference contains a symbolic address. 27776 Constraint letter `Q' is defined as representing a memory address 27777 that does _not_ contain a symbolic address. An alternative is 27778 specified with a `Q' constraint on the input and `r' on the 27779 output. The next alternative specifies `m' on the input and a 27780 register class that does not include r0 on the output. 27781 27782 -- Macro: EXTRA_CONSTRAINT_STR (VALUE, C, STR) 27783 Like `EXTRA_CONSTRAINT', but you also get the constraint string 27784 passed in STR, so that you can use suffixes to distinguish between 27785 different variants. 27786 27787 -- Macro: EXTRA_MEMORY_CONSTRAINT (C, STR) 27788 A C expression that defines the optional machine-dependent 27789 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT', 27790 that should be treated like memory constraints by the reload pass. 27791 27792 It should return 1 if the operand type represented by the 27793 constraint at the start of STR, the first letter of which is the 27794 letter C, comprises a subset of all memory references including 27795 all those whose address is simply a base register. This allows 27796 the reload pass to reload an operand, if it does not directly 27797 correspond to the operand type of C, by copying its address into a 27798 base register. 27799 27800 For example, on the S/390, some instructions do not accept 27801 arbitrary memory references, but only those that do not make use 27802 of an index register. The constraint letter `Q' is defined via 27803 `EXTRA_CONSTRAINT' as representing a memory address of this type. 27804 If the letter `Q' is marked as `EXTRA_MEMORY_CONSTRAINT', a `Q' 27805 constraint can handle any memory operand, because the reload pass 27806 knows it can be reloaded by copying the memory address into a base 27807 register if required. This is analogous to the way an `o' 27808 constraint can handle any memory operand. 27809 27810 -- Macro: EXTRA_ADDRESS_CONSTRAINT (C, STR) 27811 A C expression that defines the optional machine-dependent 27812 constraint letters, amongst those accepted by `EXTRA_CONSTRAINT' / 27813 `EXTRA_CONSTRAINT_STR', that should be treated like address 27814 constraints by the reload pass. 27815 27816 It should return 1 if the operand type represented by the 27817 constraint at the start of STR, which starts with the letter C, 27818 comprises a subset of all memory addresses including all those 27819 that consist of just a base register. This allows the reload pass 27820 to reload an operand, if it does not directly correspond to the 27821 operand type of STR, by copying it into a base register. 27822 27823 Any constraint marked as `EXTRA_ADDRESS_CONSTRAINT' can only be 27824 used with the `address_operand' predicate. It is treated 27825 analogously to the `p' constraint. 27826 27827 27828File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Old Constraints, Up: Target Macros 27829 2783017.10 Stack Layout and Calling Conventions 27831========================================== 27832 27833This describes the stack layout and calling conventions. 27834 27835* Menu: 27836 27837* Frame Layout:: 27838* Exception Handling:: 27839* Stack Checking:: 27840* Frame Registers:: 27841* Elimination:: 27842* Stack Arguments:: 27843* Register Arguments:: 27844* Scalar Return:: 27845* Aggregate Return:: 27846* Caller Saves:: 27847* Function Entry:: 27848* Profiling:: 27849* Tail Calls:: 27850* Stack Smashing Protection:: 27851 27852 27853File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 27854 2785517.10.1 Basic Stack Layout 27856-------------------------- 27857 27858Here is the basic stack layout. 27859 27860 -- Macro: STACK_GROWS_DOWNWARD 27861 Define this macro if pushing a word onto the stack moves the stack 27862 pointer to a smaller address. 27863 27864 When we say, "define this macro if ...", it means that the 27865 compiler checks this macro only with `#ifdef' so the precise 27866 definition used does not matter. 27867 27868 -- Macro: STACK_PUSH_CODE 27869 This macro defines the operation used when something is pushed on 27870 the stack. In RTL, a push operation will be `(set (mem 27871 (STACK_PUSH_CODE (reg sp))) ...)' 27872 27873 The choices are `PRE_DEC', `POST_DEC', `PRE_INC', and `POST_INC'. 27874 Which of these is correct depends on the stack direction and on 27875 whether the stack pointer points to the last item on the stack or 27876 whether it points to the space for the next item on the stack. 27877 27878 The default is `PRE_DEC' when `STACK_GROWS_DOWNWARD' is defined, 27879 which is almost always right, and `PRE_INC' otherwise, which is 27880 often wrong. 27881 27882 -- Macro: FRAME_GROWS_DOWNWARD 27883 Define this macro to nonzero value if the addresses of local 27884 variable slots are at negative offsets from the frame pointer. 27885 27886 -- Macro: ARGS_GROW_DOWNWARD 27887 Define this macro if successive arguments to a function occupy 27888 decreasing addresses on the stack. 27889 27890 -- Macro: STARTING_FRAME_OFFSET 27891 Offset from the frame pointer to the first local variable slot to 27892 be allocated. 27893 27894 If `FRAME_GROWS_DOWNWARD', find the next slot's offset by 27895 subtracting the first slot's length from `STARTING_FRAME_OFFSET'. 27896 Otherwise, it is found by adding the length of the first slot to 27897 the value `STARTING_FRAME_OFFSET'. 27898 27899 -- Macro: STACK_ALIGNMENT_NEEDED 27900 Define to zero to disable final alignment of the stack during 27901 reload. The nonzero default for this macro is suitable for most 27902 ports. 27903 27904 On ports where `STARTING_FRAME_OFFSET' is nonzero or where there 27905 is a register save block following the local block that doesn't 27906 require alignment to `STACK_BOUNDARY', it may be beneficial to 27907 disable stack alignment and do it in the backend. 27908 27909 -- Macro: STACK_POINTER_OFFSET 27910 Offset from the stack pointer register to the first location at 27911 which outgoing arguments are placed. If not specified, the 27912 default value of zero is used. This is the proper value for most 27913 machines. 27914 27915 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 27916 the first location at which outgoing arguments are placed. 27917 27918 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 27919 Offset from the argument pointer register to the first argument's 27920 address. On some machines it may depend on the data type of the 27921 function. 27922 27923 If `ARGS_GROW_DOWNWARD', this is the offset to the location above 27924 the first argument's address. 27925 27926 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 27927 Offset from the stack pointer register to an item dynamically 27928 allocated on the stack, e.g., by `alloca'. 27929 27930 The default value for this macro is `STACK_POINTER_OFFSET' plus the 27931 length of the outgoing arguments. The default is correct for most 27932 machines. See `function.c' for details. 27933 27934 -- Macro: INITIAL_FRAME_ADDRESS_RTX 27935 A C expression whose value is RTL representing the address of the 27936 initial stack frame. This address is passed to `RETURN_ADDR_RTX' 27937 and `DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 27938 reasonable default value will be used. Define this macro in order 27939 to make frame pointer elimination work in the presence of 27940 `__builtin_frame_address (count)' and `__builtin_return_address 27941 (count)' for `count' not equal to zero. 27942 27943 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 27944 A C expression whose value is RTL representing the address in a 27945 stack frame where the pointer to the caller's frame is stored. 27946 Assume that FRAMEADDR is an RTL expression for the address of the 27947 stack frame itself. 27948 27949 If you don't define this macro, the default is to return the value 27950 of FRAMEADDR--that is, the stack frame address is also the address 27951 of the stack word that points to the previous frame. 27952 27953 -- Macro: SETUP_FRAME_ADDRESSES 27954 If defined, a C expression that produces the machine-specific code 27955 to setup the stack so that arbitrary frames can be accessed. For 27956 example, on the SPARC, we must flush all of the register windows 27957 to the stack before we can access arbitrary stack frames. You 27958 will seldom need to define this macro. 27959 27960 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 27961 This target hook should return an rtx that is used to store the 27962 address of the current frame into the built in `setjmp' buffer. 27963 The default value, `virtual_stack_vars_rtx', is correct for most 27964 machines. One reason you may need to define this target hook is if 27965 `hard_frame_pointer_rtx' is the appropriate value on your machine. 27966 27967 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 27968 A C expression whose value is RTL representing the value of the 27969 frame address for the current frame. FRAMEADDR is the frame 27970 pointer of the current frame. This is used for 27971 __builtin_frame_address. You need only define this macro if the 27972 frame address is not the same as the frame pointer. Most machines 27973 do not need to define it. 27974 27975 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 27976 A C expression whose value is RTL representing the value of the 27977 return address for the frame COUNT steps up from the current 27978 frame, after the prologue. FRAMEADDR is the frame pointer of the 27979 COUNT frame, or the frame pointer of the COUNT - 1 frame if 27980 `RETURN_ADDR_IN_PREVIOUS_FRAME' is defined. 27981 27982 The value of the expression must always be the correct address when 27983 COUNT is zero, but may be `NULL_RTX' if there is no way to 27984 determine the return address of other frames. 27985 27986 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 27987 Define this if the return address of a particular stack frame is 27988 accessed from the frame pointer of the previous stack frame. 27989 27990 -- Macro: INCOMING_RETURN_ADDR_RTX 27991 A C expression whose value is RTL representing the location of the 27992 incoming return address at the beginning of any function, before 27993 the prologue. This RTL is either a `REG', indicating that the 27994 return value is saved in `REG', or a `MEM' representing a location 27995 in the stack. 27996 27997 You only need to define this macro if you want to support call 27998 frame debugging information like that provided by DWARF 2. 27999 28000 If this RTL is a `REG', you should also define 28001 `DWARF_FRAME_RETURN_COLUMN' to `DWARF_FRAME_REGNUM (REGNO)'. 28002 28003 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 28004 A C expression whose value is an integer giving a DWARF 2 column 28005 number that may be used as an alternative return column. The 28006 column must not correspond to any gcc hard register (that is, it 28007 must not be in the range of `DWARF_FRAME_REGNUM'). 28008 28009 This macro can be useful if `DWARF_FRAME_RETURN_COLUMN' is set to a 28010 general register, but an alternative column needs to be used for 28011 signal frames. Some targets have also used different frame return 28012 columns over time. 28013 28014 -- Macro: DWARF_ZERO_REG 28015 A C expression whose value is an integer giving a DWARF 2 register 28016 number that is considered to always have the value zero. This 28017 should only be defined if the target has an architected zero 28018 register, and someone decided it was a good idea to use that 28019 register number to terminate the stack backtrace. New ports 28020 should avoid this. 28021 28022 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 28023 *LABEL, rtx PATTERN, int INDEX) 28024 This target hook allows the backend to emit frame-related insns 28025 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 28026 debugging info engine will invoke it on insns of the form 28027 (set (reg) (unspec [...] UNSPEC_INDEX)) 28028 and 28029 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 28030 to let the backend emit the call frame instructions. LABEL is the 28031 CFI label attached to the insn, PATTERN is the pattern of the insn 28032 and INDEX is `UNSPEC_INDEX' or `UNSPECV_INDEX'. 28033 28034 -- Macro: INCOMING_FRAME_SP_OFFSET 28035 A C expression whose value is an integer giving the offset, in 28036 bytes, from the value of the stack pointer register to the top of 28037 the stack frame at the beginning of any function, before the 28038 prologue. The top of the frame is defined to be the value of the 28039 stack pointer in the previous frame, just before the call 28040 instruction. 28041 28042 You only need to define this macro if you want to support call 28043 frame debugging information like that provided by DWARF 2. 28044 28045 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 28046 A C expression whose value is an integer giving the offset, in 28047 bytes, from the argument pointer to the canonical frame address 28048 (cfa). The final value should coincide with that calculated by 28049 `INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 28050 during virtual register instantiation. 28051 28052 The default value for this macro is `FIRST_PARM_OFFSET (fundecl) + 28053 crtl->args.pretend_args_size', which is correct for most machines; 28054 in general, the arguments are found immediately before the stack 28055 frame. Note that this is not the case on some targets that save 28056 registers into the caller's frame, such as SPARC and rs6000, and 28057 so such targets need to define this macro. 28058 28059 You only need to define this macro if the default is incorrect, 28060 and you want to support call frame debugging information like that 28061 provided by DWARF 2. 28062 28063 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 28064 If defined, a C expression whose value is an integer giving the 28065 offset in bytes from the frame pointer to the canonical frame 28066 address (cfa). The final value should coincide with that 28067 calculated by `INCOMING_FRAME_SP_OFFSET'. 28068 28069 Normally the CFA is calculated as an offset from the argument 28070 pointer, via `ARG_POINTER_CFA_OFFSET', but if the argument pointer 28071 is variable due to the ABI, this may not be possible. If this 28072 macro is defined, it implies that the virtual register 28073 instantiation should be based on the frame pointer instead of the 28074 argument pointer. Only one of `FRAME_POINTER_CFA_OFFSET' and 28075 `ARG_POINTER_CFA_OFFSET' should be defined. 28076 28077 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 28078 If defined, a C expression whose value is an integer giving the 28079 offset in bytes from the canonical frame address (cfa) to the 28080 frame base used in DWARF 2 debug information. The default is 28081 zero. A different value may reduce the size of debug information 28082 on some ports. 28083 28084 28085File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 28086 2808717.10.2 Exception Handling Support 28088---------------------------------- 28089 28090 -- Macro: EH_RETURN_DATA_REGNO (N) 28091 A C expression whose value is the Nth register number used for 28092 data by exception handlers, or `INVALID_REGNUM' if fewer than N 28093 registers are usable. 28094 28095 The exception handling library routines communicate with the 28096 exception handlers via a set of agreed upon registers. Ideally 28097 these registers should be call-clobbered; it is possible to use 28098 call-saved registers, but may negatively impact code size. The 28099 target must support at least 2 data registers, but should define 4 28100 if there are enough free registers. 28101 28102 You must define this macro if you want to support call frame 28103 exception handling like that provided by DWARF 2. 28104 28105 -- Macro: EH_RETURN_STACKADJ_RTX 28106 A C expression whose value is RTL representing a location in which 28107 to store a stack adjustment to be applied before function return. 28108 This is used to unwind the stack to an exception handler's call 28109 frame. It will be assigned zero on code paths that return 28110 normally. 28111 28112 Typically this is a call-clobbered hard register that is otherwise 28113 untouched by the epilogue, but could also be a stack slot. 28114 28115 Do not define this macro if the stack pointer is saved and restored 28116 by the regular prolog and epilog code in the call frame itself; in 28117 this case, the exception handling library routines will update the 28118 stack location to be restored in place. Otherwise, you must define 28119 this macro if you want to support call frame exception handling 28120 like that provided by DWARF 2. 28121 28122 -- Macro: EH_RETURN_HANDLER_RTX 28123 A C expression whose value is RTL representing a location in which 28124 to store the address of an exception handler to which we should 28125 return. It will not be assigned on code paths that return 28126 normally. 28127 28128 Typically this is the location in the call frame at which the 28129 normal return address is stored. For targets that return by 28130 popping an address off the stack, this might be a memory address 28131 just below the _target_ call frame rather than inside the current 28132 call frame. If defined, `EH_RETURN_STACKADJ_RTX' will have already 28133 been assigned, so it may be used to calculate the location of the 28134 target call frame. 28135 28136 Some targets have more complex requirements than storing to an 28137 address calculable during initial code generation. In that case 28138 the `eh_return' instruction pattern should be used instead. 28139 28140 If you want to support call frame exception handling, you must 28141 define either this macro or the `eh_return' instruction pattern. 28142 28143 -- Macro: RETURN_ADDR_OFFSET 28144 If defined, an integer-valued C expression for which rtl will be 28145 generated to add it to the exception handler address before it is 28146 searched in the exception handling tables, and to subtract it 28147 again from the address before using it to return to the exception 28148 handler. 28149 28150 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 28151 This macro chooses the encoding of pointers embedded in the 28152 exception handling sections. If at all possible, this should be 28153 defined such that the exception handling section will not require 28154 dynamic relocations, and so may be read-only. 28155 28156 CODE is 0 for data, 1 for code labels, 2 for function pointers. 28157 GLOBAL is true if the symbol may be affected by dynamic 28158 relocations. The macro should return a combination of the 28159 `DW_EH_PE_*' defines as found in `dwarf2.h'. 28160 28161 If this macro is not defined, pointers will not be encoded but 28162 represented directly. 28163 28164 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 28165 ADDR, DONE) 28166 This macro allows the target to emit whatever special magic is 28167 required to represent the encoding chosen by 28168 `ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 28169 pc-relative and indirect encodings; this must be defined if the 28170 target uses text-relative or data-relative encodings. 28171 28172 This is a C statement that branches to DONE if the format was 28173 handled. ENCODING is the format chosen, SIZE is the number of 28174 bytes that the format occupies, ADDR is the `SYMBOL_REF' to be 28175 emitted. 28176 28177 -- Macro: MD_UNWIND_SUPPORT 28178 A string specifying a file to be #include'd in unwind-dw2.c. The 28179 file so included typically defines `MD_FALLBACK_FRAME_STATE_FOR'. 28180 28181 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 28182 This macro allows the target to add CPU and operating system 28183 specific code to the call-frame unwinder for use when there is no 28184 unwind data available. The most common reason to implement this 28185 macro is to unwind through signal frames. 28186 28187 This macro is called from `uw_frame_state_for' in `unwind-dw2.c', 28188 `unwind-dw2-xtensa.c' and `unwind-ia64.c'. CONTEXT is an 28189 `_Unwind_Context'; FS is an `_Unwind_FrameState'. Examine 28190 `context->ra' for the address of the code being executed and 28191 `context->cfa' for the stack pointer value. If the frame can be 28192 decoded, the register save addresses should be updated in FS and 28193 the macro should evaluate to `_URC_NO_REASON'. If the frame 28194 cannot be decoded, the macro should evaluate to 28195 `_URC_END_OF_STACK'. 28196 28197 For proper signal handling in Java this macro is accompanied by 28198 `MAKE_THROW_FRAME', defined in `libjava/include/*-signal.h' 28199 headers. 28200 28201 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 28202 This macro allows the target to add operating system specific code 28203 to the call-frame unwinder to handle the IA-64 `.unwabi' unwinding 28204 directive, usually used for signal or interrupt frames. 28205 28206 This macro is called from `uw_update_context' in `unwind-ia64.c'. 28207 CONTEXT is an `_Unwind_Context'; FS is an `_Unwind_FrameState'. 28208 Examine `fs->unwabi' for the abi and context in the `.unwabi' 28209 directive. If the `.unwabi' directive can be handled, the 28210 register save addresses should be updated in FS. 28211 28212 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 28213 A C expression that evaluates to true if the target requires unwind 28214 info to be given comdat linkage. Define it to be `1' if comdat 28215 linkage is necessary. The default is `0'. 28216 28217 28218File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 28219 2822017.10.3 Specifying How Stack Checking is Done 28221--------------------------------------------- 28222 28223GCC will check that stack references are within the boundaries of the 28224stack, if the option `-fstack-check' is specified, in one of three ways: 28225 28226 1. If the value of the `STACK_CHECK_BUILTIN' macro is nonzero, GCC 28227 will assume that you have arranged for full stack checking to be 28228 done at appropriate places in the configuration files. GCC will 28229 not do other special processing. 28230 28231 2. If `STACK_CHECK_BUILTIN' is zero and the value of the 28232 `STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume 28233 that you have arranged for static stack checking (checking of the 28234 static stack frame of functions) to be done at appropriate places 28235 in the configuration files. GCC will only emit code to do dynamic 28236 stack checking (checking on dynamic stack allocations) using the 28237 third approach below. 28238 28239 3. If neither of the above are true, GCC will generate code to 28240 periodically "probe" the stack pointer using the values of the 28241 macros defined below. 28242 28243 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 28244defined, GCC will change its allocation strategy for large objects if 28245the option `-fstack-check' is specified: they will always be allocated 28246dynamically if their size exceeds `STACK_CHECK_MAX_VAR_SIZE' bytes. 28247 28248 -- Macro: STACK_CHECK_BUILTIN 28249 A nonzero value if stack checking is done by the configuration 28250 files in a machine-dependent manner. You should define this macro 28251 if stack checking is required by the ABI of your machine or if you 28252 would like to do stack checking in some more efficient way than 28253 the generic approach. The default value of this macro is zero. 28254 28255 -- Macro: STACK_CHECK_STATIC_BUILTIN 28256 A nonzero value if static stack checking is done by the 28257 configuration files in a machine-dependent manner. You should 28258 define this macro if you would like to do static stack checking in 28259 some more efficient way than the generic approach. The default 28260 value of this macro is zero. 28261 28262 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 28263 An integer specifying the interval at which GCC must generate 28264 stack probe instructions, defined as 2 raised to this integer. 28265 You will normally define this macro so that the interval be no 28266 larger than the size of the "guard pages" at the end of a stack 28267 area. The default value of 12 (4096-byte interval) is suitable 28268 for most systems. 28269 28270 -- Macro: STACK_CHECK_MOVING_SP 28271 An integer which is nonzero if GCC should move the stack pointer 28272 page by page when doing probes. This can be necessary on systems 28273 where the stack pointer contains the bottom address of the memory 28274 area accessible to the executing thread at any point in time. In 28275 this situation an alternate signal stack is required in order to 28276 be able to recover from a stack overflow. The default value of 28277 this macro is zero. 28278 28279 -- Macro: STACK_CHECK_PROTECT 28280 The number of bytes of stack needed to recover from a stack 28281 overflow, for languages where such a recovery is supported. The 28282 default value of 75 words with the `setjmp'/`longjmp'-based 28283 exception handling mechanism and 8192 bytes with other exception 28284 handling mechanisms should be adequate for most machines. 28285 28286 The following macros are relevant only if neither STACK_CHECK_BUILTIN 28287nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 28288in the opposite case. 28289 28290 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 28291 The maximum size of a stack frame, in bytes. GCC will generate 28292 probe instructions in non-leaf functions to ensure at least this 28293 many bytes of stack are available. If a stack frame is larger 28294 than this size, stack checking will not be reliable and GCC will 28295 issue a warning. The default is chosen so that GCC only generates 28296 one instruction on most systems. You should normally not change 28297 the default value of this macro. 28298 28299 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 28300 GCC uses this value to generate the above warning message. It 28301 represents the amount of fixed frame used by a function, not 28302 including space for any callee-saved registers, temporaries and 28303 user variables. You need only specify an upper bound for this 28304 amount and will normally use the default of four words. 28305 28306 -- Macro: STACK_CHECK_MAX_VAR_SIZE 28307 The maximum size, in bytes, of an object that GCC will place in the 28308 fixed area of the stack frame when the user specifies 28309 `-fstack-check'. GCC computed the default from the values of the 28310 above macros and you will normally not need to override that 28311 default. 28312 28313 28314File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 28315 2831617.10.4 Registers That Address the Stack Frame 28317---------------------------------------------- 28318 28319This discusses registers that address the stack frame. 28320 28321 -- Macro: STACK_POINTER_REGNUM 28322 The register number of the stack pointer register, which must also 28323 be a fixed register according to `FIXED_REGISTERS'. On most 28324 machines, the hardware determines which register this is. 28325 28326 -- Macro: FRAME_POINTER_REGNUM 28327 The register number of the frame pointer register, which is used to 28328 access automatic variables in the stack frame. On some machines, 28329 the hardware determines which register this is. On other 28330 machines, you can choose any register you wish for this purpose. 28331 28332 -- Macro: HARD_FRAME_POINTER_REGNUM 28333 On some machines the offset between the frame pointer and starting 28334 offset of the automatic variables is not known until after register 28335 allocation has been done (for example, because the saved registers 28336 are between these two locations). On those machines, define 28337 `FRAME_POINTER_REGNUM' the number of a special, fixed register to 28338 be used internally until the offset is known, and define 28339 `HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 28340 used for the frame pointer. 28341 28342 You should define this macro only in the very rare circumstances 28343 when it is not possible to calculate the offset between the frame 28344 pointer and the automatic variables until after register 28345 allocation has been completed. When this macro is defined, you 28346 must also indicate in your definition of `ELIMINABLE_REGS' how to 28347 eliminate `FRAME_POINTER_REGNUM' into either 28348 `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'. 28349 28350 Do not define this macro if it would be the same as 28351 `FRAME_POINTER_REGNUM'. 28352 28353 -- Macro: ARG_POINTER_REGNUM 28354 The register number of the arg pointer register, which is used to 28355 access the function's argument list. On some machines, this is 28356 the same as the frame pointer register. On some machines, the 28357 hardware determines which register this is. On other machines, 28358 you can choose any register you wish for this purpose. If this is 28359 not the same register as the frame pointer register, then you must 28360 mark it as a fixed register according to `FIXED_REGISTERS', or 28361 arrange to be able to eliminate it (*note Elimination::). 28362 28363 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 28364 The register number of the return address pointer register, which 28365 is used to access the current function's return address from the 28366 stack. On some machines, the return address is not at a fixed 28367 offset from the frame pointer or stack pointer or argument 28368 pointer. This register can be defined to point to the return 28369 address on the stack, and then be converted by `ELIMINABLE_REGS' 28370 into either the frame pointer or stack pointer. 28371 28372 Do not define this macro unless there is no other way to get the 28373 return address from the stack. 28374 28375 -- Macro: STATIC_CHAIN_REGNUM 28376 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 28377 Register numbers used for passing a function's static chain 28378 pointer. If register windows are used, the register number as 28379 seen by the called function is `STATIC_CHAIN_INCOMING_REGNUM', 28380 while the register number as seen by the calling function is 28381 `STATIC_CHAIN_REGNUM'. If these registers are the same, 28382 `STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 28383 28384 The static chain register need not be a fixed register. 28385 28386 If the static chain is passed in memory, these macros should not be 28387 defined; instead, the `TARGET_STATIC_CHAIN' hook should be used. 28388 28389 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL, bool 28390 INCOMING_P) 28391 This hook replaces the use of `STATIC_CHAIN_REGNUM' et al for 28392 targets that may use different static chain locations for different 28393 nested functions. This may be required if the target has function 28394 attributes that affect the calling conventions of the function and 28395 those calling conventions use different static chain locations. 28396 28397 The default version of this hook uses `STATIC_CHAIN_REGNUM' et al. 28398 28399 If the static chain is passed in memory, this hook should be used 28400 to provide rtx giving `mem' expressions that denote where they are 28401 stored. Often the `mem' expression as seen by the caller will be 28402 at an offset from the stack pointer and the `mem' expression as 28403 seen by the callee will be at an offset from the frame pointer. The 28404 variables `stack_pointer_rtx', `frame_pointer_rtx', and 28405 `arg_pointer_rtx' will have been initialized and should be used to 28406 refer to those items. 28407 28408 -- Macro: DWARF_FRAME_REGISTERS 28409 This macro specifies the maximum number of hard registers that can 28410 be saved in a call frame. This is used to size data structures 28411 used in DWARF2 exception handling. 28412 28413 Prior to GCC 3.0, this macro was needed in order to establish a 28414 stable exception handling ABI in the face of adding new hard 28415 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 28416 insulated from changes in the number of hard registers. 28417 Nevertheless, this macro can still be used to reduce the runtime 28418 memory requirements of the exception handling routines, which can 28419 be substantial if the ISA contains a lot of registers that are not 28420 call-saved. 28421 28422 If this macro is not defined, it defaults to 28423 `FIRST_PSEUDO_REGISTER'. 28424 28425 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 28426 This macro is similar to `DWARF_FRAME_REGISTERS', but is provided 28427 for backward compatibility in pre GCC 3.0 compiled code. 28428 28429 If this macro is not defined, it defaults to 28430 `DWARF_FRAME_REGISTERS'. 28431 28432 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 28433 Define this macro if the target's representation for dwarf 28434 registers is different than the internal representation for unwind 28435 column. Given a dwarf register, this macro should return the 28436 internal unwind column number to use instead. 28437 28438 See the PowerPC's SPE target for an example. 28439 28440 -- Macro: DWARF_FRAME_REGNUM (REGNO) 28441 Define this macro if the target's representation for dwarf 28442 registers used in .eh_frame or .debug_frame is different from that 28443 used in other debug info sections. Given a GCC hard register 28444 number, this macro should return the .eh_frame register number. 28445 The default is `DBX_REGISTER_NUMBER (REGNO)'. 28446 28447 28448 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 28449 Define this macro to map register numbers held in the call frame 28450 info that GCC has collected using `DWARF_FRAME_REGNUM' to those 28451 that should be output in .debug_frame (`FOR_EH' is zero) and 28452 .eh_frame (`FOR_EH' is nonzero). The default is to return `REGNO'. 28453 28454 28455 28456File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 28457 2845817.10.5 Eliminating Frame Pointer and Arg Pointer 28459------------------------------------------------- 28460 28461This is about eliminating the frame pointer and arg pointer. 28462 28463 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 28464 This target hook should return `true' if a function must have and 28465 use a frame pointer. This target hook is called in the reload 28466 pass. If its return value is `true' the function will have a 28467 frame pointer. 28468 28469 This target hook can in principle examine the current function and 28470 decide according to the facts, but on most machines the constant 28471 `false' or the constant `true' suffices. Use `false' when the 28472 machine allows code to be generated with no frame pointer, and 28473 doing so saves some time or space. Use `true' when there is no 28474 possible advantage to avoiding a frame pointer. 28475 28476 In certain cases, the compiler does not know how to produce valid 28477 code without a frame pointer. The compiler recognizes those cases 28478 and automatically gives the function a frame pointer regardless of 28479 what `TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to 28480 worry about them. 28481 28482 In a function that does not require a frame pointer, the frame 28483 pointer register can be allocated for ordinary usage, unless you 28484 mark it as a fixed register. See `FIXED_REGISTERS' for more 28485 information. 28486 28487 Default return value is `false'. 28488 28489 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 28490 A C statement to store in the variable DEPTH-VAR the difference 28491 between the frame pointer and the stack pointer values immediately 28492 after the function prologue. The value would be computed from 28493 information such as the result of `get_frame_size ()' and the 28494 tables of registers `regs_ever_live' and `call_used_regs'. 28495 28496 If `ELIMINABLE_REGS' is defined, this macro will be not be used and 28497 need not be defined. Otherwise, it must be defined even if 28498 `TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case, 28499 you may set DEPTH-VAR to anything. 28500 28501 -- Macro: ELIMINABLE_REGS 28502 If defined, this macro specifies a table of register pairs used to 28503 eliminate unneeded registers that point into the stack frame. If 28504 it is not defined, the only elimination attempted by the compiler 28505 is to replace references to the frame pointer with references to 28506 the stack pointer. 28507 28508 The definition of this macro is a list of structure 28509 initializations, each of which specifies an original and 28510 replacement register. 28511 28512 On some machines, the position of the argument pointer is not 28513 known until the compilation is completed. In such a case, a 28514 separate hard register must be used for the argument pointer. 28515 This register can be eliminated by replacing it with either the 28516 frame pointer or the argument pointer, depending on whether or not 28517 the frame pointer has been eliminated. 28518 28519 In this case, you might specify: 28520 #define ELIMINABLE_REGS \ 28521 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 28522 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 28523 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 28524 28525 Note that the elimination of the argument pointer with the stack 28526 pointer is specified first since that is the preferred elimination. 28527 28528 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 28529 int TO_REG) 28530 This target hook should returns `true' if the compiler is allowed 28531 to try to replace register number FROM_REG with register number 28532 TO_REG. This target hook need only be defined if `ELIMINABLE_REGS' 28533 is defined, and will usually be `true', since most of the cases 28534 preventing register elimination are things that the compiler 28535 already knows about. 28536 28537 Default return value is `true'. 28538 28539 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 28540 This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It 28541 specifies the initial difference between the specified pair of 28542 registers. This macro must be defined if `ELIMINABLE_REGS' is 28543 defined. 28544 28545 28546File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 28547 2854817.10.6 Passing Function Arguments on the Stack 28549----------------------------------------------- 28550 28551The macros in this section control how arguments are passed on the 28552stack. See the following section for other macros that control passing 28553certain arguments in registers. 28554 28555 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 28556 This target hook returns `true' if an argument declared in a 28557 prototype as an integral type smaller than `int' should actually be 28558 passed as an `int'. In addition to avoiding errors in certain 28559 cases of mismatch, it also makes for better code on certain 28560 machines. The default is to not promote prototypes. 28561 28562 -- Macro: PUSH_ARGS 28563 A C expression. If nonzero, push insns will be used to pass 28564 outgoing arguments. If the target machine does not have a push 28565 instruction, set it to zero. That directs GCC to use an alternate 28566 strategy: to allocate the entire argument block and then store the 28567 arguments into it. When `PUSH_ARGS' is nonzero, `PUSH_ROUNDING' 28568 must be defined too. 28569 28570 -- Macro: PUSH_ARGS_REVERSED 28571 A C expression. If nonzero, function arguments will be evaluated 28572 from last to first, rather than from first to last. If this macro 28573 is not defined, it defaults to `PUSH_ARGS' on targets where the 28574 stack and args grow in opposite directions, and 0 otherwise. 28575 28576 -- Macro: PUSH_ROUNDING (NPUSHED) 28577 A C expression that is the number of bytes actually pushed onto the 28578 stack when an instruction attempts to push NPUSHED bytes. 28579 28580 On some machines, the definition 28581 28582 #define PUSH_ROUNDING(BYTES) (BYTES) 28583 28584 will suffice. But on other machines, instructions that appear to 28585 push one byte actually push two bytes in an attempt to maintain 28586 alignment. Then the definition should be 28587 28588 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 28589 28590 -- Macro: ACCUMULATE_OUTGOING_ARGS 28591 A C expression. If nonzero, the maximum amount of space required 28592 for outgoing arguments will be computed and placed into the 28593 variable `current_function_outgoing_args_size'. No space will be 28594 pushed onto the stack for each call; instead, the function 28595 prologue should increase the stack frame size by this amount. 28596 28597 Setting both `PUSH_ARGS' and `ACCUMULATE_OUTGOING_ARGS' is not 28598 proper. 28599 28600 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 28601 Define this macro if functions should assume that stack space has 28602 been allocated for arguments even when their values are passed in 28603 registers. 28604 28605 The value of this macro is the size, in bytes, of the area 28606 reserved for arguments passed in registers for the function 28607 represented by FNDECL, which can be zero if GCC is calling a 28608 library function. The argument FNDECL can be the FUNCTION_DECL, 28609 or the type itself of the function. 28610 28611 This space can be allocated by the caller, or be a part of the 28612 machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says 28613 which. 28614 28615 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 28616 Define this to a nonzero value if it is the responsibility of the 28617 caller to allocate the area reserved for arguments passed in 28618 registers when calling a function of FNTYPE. FNTYPE may be NULL 28619 if the function called is a library function. 28620 28621 If `ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 28622 whether the space for these arguments counts in the value of 28623 `current_function_outgoing_args_size'. 28624 28625 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 28626 Define this macro if `REG_PARM_STACK_SPACE' is defined, but the 28627 stack parameters don't skip the area specified by it. 28628 28629 Normally, when a parameter is not passed in registers, it is 28630 placed on the stack beyond the `REG_PARM_STACK_SPACE' area. 28631 Defining this macro suppresses this behavior and causes the 28632 parameter to be passed on the stack in its natural location. 28633 28634 -- Macro: RETURN_POPS_ARGS (FUNDECL, FUNTYPE, STACK-SIZE) 28635 A C expression that should indicate the number of bytes of its own 28636 arguments that a function pops on returning, or 0 if the function 28637 pops no arguments and the caller must therefore pop them all after 28638 the function returns. 28639 28640 FUNDECL is a C variable whose value is a tree node that describes 28641 the function in question. Normally it is a node of type 28642 `FUNCTION_DECL' that describes the declaration of the function. 28643 From this you can obtain the `DECL_ATTRIBUTES' of the function. 28644 28645 FUNTYPE is a C variable whose value is a tree node that describes 28646 the function in question. Normally it is a node of type 28647 `FUNCTION_TYPE' that describes the data type of the function. 28648 From this it is possible to obtain the data types of the value and 28649 arguments (if known). 28650 28651 When a call to a library function is being considered, FUNDECL 28652 will contain an identifier node for the library function. Thus, if 28653 you need to distinguish among various library functions, you can 28654 do so by their names. Note that "library function" in this 28655 context means a function used to perform arithmetic, whose name is 28656 known specially in the compiler and was not mentioned in the C 28657 code being compiled. 28658 28659 STACK-SIZE is the number of bytes of arguments passed on the 28660 stack. If a variable number of bytes is passed, it is zero, and 28661 argument popping will always be the responsibility of the calling 28662 function. 28663 28664 On the VAX, all functions always pop their arguments, so the 28665 definition of this macro is STACK-SIZE. On the 68000, using the 28666 standard calling convention, no functions pop their arguments, so 28667 the value of the macro is always 0 in this case. But an 28668 alternative calling convention is available in which functions 28669 that take a fixed number of arguments pop them but other functions 28670 (such as `printf') pop nothing (the caller pops all). When this 28671 convention is in use, FUNTYPE is examined to determine whether a 28672 function takes a fixed number of arguments. 28673 28674 -- Macro: CALL_POPS_ARGS (CUM) 28675 A C expression that should indicate the number of bytes a call 28676 sequence pops off the stack. It is added to the value of 28677 `RETURN_POPS_ARGS' when compiling a function call. 28678 28679 CUM is the variable in which all arguments to the called function 28680 have been accumulated. 28681 28682 On certain architectures, such as the SH5, a call trampoline is 28683 used that pops certain registers off the stack, depending on the 28684 arguments that have been passed to the function. Since this is a 28685 property of the call site, not of the called function, 28686 `RETURN_POPS_ARGS' is not appropriate. 28687 28688 28689File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 28690 2869117.10.7 Passing Arguments in Registers 28692-------------------------------------- 28693 28694This section describes the macros which let you control how various 28695types of arguments are passed in registers or how they are arranged in 28696the stack. 28697 28698 -- Macro: FUNCTION_ARG (CUM, MODE, TYPE, NAMED) 28699 A C expression that controls whether a function argument is passed 28700 in a register, and which register. 28701 28702 The arguments are CUM, which summarizes all the previous 28703 arguments; MODE, the machine mode of the argument; TYPE, the data 28704 type of the argument as a tree node or 0 if that is not known 28705 (which happens for C support library functions); and NAMED, which 28706 is 1 for an ordinary argument and 0 for nameless arguments that 28707 correspond to `...' in the called function's prototype. TYPE can 28708 be an incomplete type if a syntax error has previously occurred. 28709 28710 The value of the expression is usually either a `reg' RTX for the 28711 hard register in which to pass the argument, or zero to pass the 28712 argument on the stack. 28713 28714 For machines like the VAX and 68000, where normally all arguments 28715 are pushed, zero suffices as a definition. 28716 28717 The value of the expression can also be a `parallel' RTX. This is 28718 used when an argument is passed in multiple locations. The mode 28719 of the `parallel' should be the mode of the entire argument. The 28720 `parallel' holds any number of `expr_list' pairs; each one 28721 describes where part of the argument is passed. In each 28722 `expr_list' the first operand must be a `reg' RTX for the hard 28723 register in which to pass this part of the argument, and the mode 28724 of the register RTX indicates how large this part of the argument 28725 is. The second operand of the `expr_list' is a `const_int' which 28726 gives the offset in bytes into the entire argument of where this 28727 part starts. As a special exception the first `expr_list' in the 28728 `parallel' RTX may have a first operand of zero. This indicates 28729 that the entire argument is also stored on the stack. 28730 28731 The last time this macro is called, it is called with `MODE == 28732 VOIDmode', and its result is passed to the `call' or `call_value' 28733 pattern as operands 2 and 3 respectively. 28734 28735 The usual way to make the ISO library `stdarg.h' work on a machine 28736 where some arguments are usually passed in registers, is to cause 28737 nameless arguments to be passed on the stack instead. This is done 28738 by making `FUNCTION_ARG' return 0 whenever NAMED is 0. 28739 28740 You may use the hook `targetm.calls.must_pass_in_stack' in the 28741 definition of this macro to determine if this argument is of a 28742 type that must be passed in the stack. If `REG_PARM_STACK_SPACE' 28743 is not defined and `FUNCTION_ARG' returns nonzero for such an 28744 argument, the compiler will abort. If `REG_PARM_STACK_SPACE' is 28745 defined, the argument will be computed in the stack and then 28746 loaded into a register. 28747 28748 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (enum machine_mode 28749 MODE, const_tree TYPE) 28750 This target hook should return `true' if we should not pass TYPE 28751 solely in registers. The file `expr.h' defines a definition that 28752 is usually appropriate, refer to `expr.h' for additional 28753 documentation. 28754 28755 -- Macro: FUNCTION_INCOMING_ARG (CUM, MODE, TYPE, NAMED) 28756 Define this macro if the target machine has "register windows", so 28757 that the register in which a function sees an arguments is not 28758 necessarily the same as the one in which the caller passed the 28759 argument. 28760 28761 For such machines, `FUNCTION_ARG' computes the register in which 28762 the caller passes the value, and `FUNCTION_INCOMING_ARG' should be 28763 defined in a similar fashion to tell the function being called 28764 where the arguments will arrive. 28765 28766 If `FUNCTION_INCOMING_ARG' is not defined, `FUNCTION_ARG' serves 28767 both purposes. 28768 28769 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *CUM, 28770 enum machine_mode MODE, tree TYPE, bool NAMED) 28771 This target hook returns the number of bytes at the beginning of an 28772 argument that must be put in registers. The value must be zero for 28773 arguments that are passed entirely in registers or that are 28774 entirely pushed on the stack. 28775 28776 On some machines, certain arguments must be passed partially in 28777 registers and partially in memory. On these machines, typically 28778 the first few words of arguments are passed in registers, and the 28779 rest on the stack. If a multi-word argument (a `double' or a 28780 structure) crosses that boundary, its first few words must be 28781 passed in registers and the rest must be pushed. This macro tells 28782 the compiler when this occurs, and how many bytes should go in 28783 registers. 28784 28785 `FUNCTION_ARG' for these arguments should return the first 28786 register to be used by the caller for this argument; likewise 28787 `FUNCTION_INCOMING_ARG', for the called function. 28788 28789 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *CUM, 28790 enum machine_mode MODE, tree TYPE, bool NAMED) 28791 This target hook should return `true' if an argument at the 28792 position indicated by CUM should be passed by reference. This 28793 predicate is queried after target independent reasons for being 28794 passed by reference, such as `TREE_ADDRESSABLE (type)'. 28795 28796 If the hook returns true, a copy of that argument is made in 28797 memory and a pointer to the argument is passed instead of the 28798 argument itself. The pointer is passed in whatever way is 28799 appropriate for passing a pointer to that type. 28800 28801 -- Target Hook: bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *CUM, enum 28802 machine_mode MODE, const_tree TYPE, bool NAMED) 28803 The function argument described by the parameters to this hook is 28804 known to be passed by reference. The hook should return true if 28805 the function argument should be copied by the callee instead of 28806 copied by the caller. 28807 28808 For any argument for which the hook returns true, if it can be 28809 determined that the argument is not modified, then a copy need not 28810 be generated. 28811 28812 The default version of this hook always returns false. 28813 28814 -- Macro: CUMULATIVE_ARGS 28815 A C type for declaring a variable that is used as the first 28816 argument of `FUNCTION_ARG' and other related values. For some 28817 target machines, the type `int' suffices and can hold the number 28818 of bytes of argument so far. 28819 28820 There is no need to record in `CUMULATIVE_ARGS' anything about the 28821 arguments that have been passed on the stack. The compiler has 28822 other variables to keep track of that. For target machines on 28823 which all arguments are passed on the stack, there is no need to 28824 store anything in `CUMULATIVE_ARGS'; however, the data structure 28825 must exist and should not be empty, so use `int'. 28826 28827 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 28828 If defined, this macro is called before generating any code for a 28829 function, but after the CFUN descriptor for the function has been 28830 created. The back end may use this macro to update CFUN to 28831 reflect an ABI other than that which would normally be used by 28832 default. If the compiler is generating code for a 28833 compiler-generated function, FNDECL may be `NULL'. 28834 28835 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 28836 N_NAMED_ARGS) 28837 A C statement (sans semicolon) for initializing the variable CUM 28838 for the state at the beginning of the argument list. The variable 28839 has type `CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 28840 for the data type of the function which will receive the args, or 28841 0 if the args are to a compiler support library function. For 28842 direct calls that are not libcalls, FNDECL contain the declaration 28843 node of the function. FNDECL is also set when 28844 `INIT_CUMULATIVE_ARGS' is used to find arguments for the function 28845 being compiled. N_NAMED_ARGS is set to the number of named 28846 arguments, including a structure return address if it is passed as 28847 a parameter, when making a call. When processing incoming 28848 arguments, N_NAMED_ARGS is set to -1. 28849 28850 When processing a call to a compiler support library function, 28851 LIBNAME identifies which one. It is a `symbol_ref' rtx which 28852 contains the name of the function, as a string. LIBNAME is 0 when 28853 an ordinary C function call is being processed. Thus, each time 28854 this macro is called, either LIBNAME or FNTYPE is nonzero, but 28855 never both of them at once. 28856 28857 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 28858 Like `INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, 28859 it gets a `MODE' argument instead of FNTYPE, that would be `NULL'. 28860 INDIRECT would always be zero, too. If this macro is not defined, 28861 `INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 28862 28863 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 28864 Like `INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 28865 finding the arguments for the function being compiled. If this 28866 macro is undefined, `INIT_CUMULATIVE_ARGS' is used instead. 28867 28868 The value passed for LIBNAME is always 0, since library routines 28869 with special calling conventions are never compiled with GCC. The 28870 argument LIBNAME exists for symmetry with `INIT_CUMULATIVE_ARGS'. 28871 28872 -- Macro: FUNCTION_ARG_ADVANCE (CUM, MODE, TYPE, NAMED) 28873 A C statement (sans semicolon) to update the summarizer variable 28874 CUM to advance past an argument in the argument list. The values 28875 MODE, TYPE and NAMED describe that argument. Once this is done, 28876 the variable CUM is suitable for analyzing the _following_ 28877 argument with `FUNCTION_ARG', etc. 28878 28879 This macro need not do anything if the argument in question was 28880 passed on the stack. The compiler knows how to track the amount 28881 of stack space used for arguments without any special help. 28882 28883 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE) 28884 If defined, a C expression that is the number of bytes to add to 28885 the offset of the argument passed in memory. This is needed for 28886 the SPU, which passes `char' and `short' arguments in the preferred 28887 slot that is in the middle of the quad word instead of starting at 28888 the top. 28889 28890 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 28891 If defined, a C expression which determines whether, and in which 28892 direction, to pad out an argument with extra space. The value 28893 should be of type `enum direction': either `upward' to pad above 28894 the argument, `downward' to pad below, or `none' to inhibit 28895 padding. 28896 28897 The _amount_ of padding is always just enough to reach the next 28898 multiple of `FUNCTION_ARG_BOUNDARY'; this macro does not control 28899 it. 28900 28901 This macro has a default definition which is right for most 28902 systems. For little-endian machines, the default is to pad 28903 upward. For big-endian machines, the default is to pad downward 28904 for an argument of constant size shorter than an `int', and upward 28905 otherwise. 28906 28907 -- Macro: PAD_VARARGS_DOWN 28908 If defined, a C expression which determines whether the default 28909 implementation of va_arg will attempt to pad down before reading 28910 the next argument, if that argument is smaller than its aligned 28911 space as controlled by `PARM_BOUNDARY'. If this macro is not 28912 defined, all such arguments are padded down if `BYTES_BIG_ENDIAN' 28913 is true. 28914 28915 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 28916 Specify padding for the last element of a block move between 28917 registers and memory. FIRST is nonzero if this is the only 28918 element. Defining this macro allows better control of register 28919 function parameters on big-endian machines, without using 28920 `PARALLEL' rtl. In particular, `MUST_PASS_IN_STACK' need not test 28921 padding and mode of types in registers, as there is no longer a 28922 "wrong" part of a register; For example, a three byte aggregate 28923 may be passed in the high part of a register if so required. 28924 28925 -- Macro: FUNCTION_ARG_BOUNDARY (MODE, TYPE) 28926 If defined, a C expression that gives the alignment boundary, in 28927 bits, of an argument with the specified mode and type. If it is 28928 not defined, `PARM_BOUNDARY' is used for all arguments. 28929 28930 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 28931 A C expression that is nonzero if REGNO is the number of a hard 28932 register in which function arguments are sometimes passed. This 28933 does _not_ include implicit arguments such as the static chain and 28934 the structure-value address. On many machines, no registers can be 28935 used for this purpose since all function arguments are pushed on 28936 the stack. 28937 28938 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 28939 This hook should return true if parameter of type TYPE are passed 28940 as two scalar parameters. By default, GCC will attempt to pack 28941 complex arguments into the target's word size. Some ABIs require 28942 complex arguments to be split and treated as their individual 28943 components. For example, on AIX64, complex floats should be 28944 passed in a pair of floating point registers, even though a 28945 complex float would fit in one 64-bit floating point register. 28946 28947 The default value of this hook is `NULL', which is treated as 28948 always false. 28949 28950 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 28951 This hook returns a type node for `va_list' for the target. The 28952 default version of the hook returns `void*'. 28953 28954 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 28955 This hook returns the va_list type of the calling convention 28956 specified by FNDECL. The default version of this hook returns 28957 `va_list_type_node'. 28958 28959 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 28960 This hook returns the va_list type of the calling convention 28961 specified by the type of TYPE. If TYPE is not a valid va_list 28962 type, it returns `NULL_TREE'. 28963 28964 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 28965 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 28966 This hook performs target-specific gimplification of 28967 `VA_ARG_EXPR'. The first two parameters correspond to the 28968 arguments to `va_arg'; the latter two are as in 28969 `gimplify.c:gimplify_expr'. 28970 28971 -- Target Hook: bool TARGET_VALID_POINTER_MODE (enum machine_mode MODE) 28972 Define this to return nonzero if the port can handle pointers with 28973 machine mode MODE. The default version of this hook returns true 28974 for both `ptr_mode' and `Pmode'. 28975 28976 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (enum machine_mode 28977 MODE) 28978 Define this to return nonzero if the port is prepared to handle 28979 insns involving scalar mode MODE. For a scalar mode to be 28980 considered supported, all the basic arithmetic and comparisons 28981 must work. 28982 28983 The default version of this hook returns true for any mode 28984 required to handle the basic C types (as defined by the port). 28985 Included here are the double-word arithmetic supported by the code 28986 in `optabs.c'. 28987 28988 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (enum machine_mode 28989 MODE) 28990 Define this to return nonzero if the port is prepared to handle 28991 insns involving vector mode MODE. At the very least, it must have 28992 move patterns for this mode. 28993 28994 28995File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 28996 2899717.10.8 How Scalar Function Values Are Returned 28998----------------------------------------------- 28999 29000This section discusses the macros that control returning scalars as 29001values--values that can fit in registers. 29002 29003 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 29004 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 29005 Define this to return an RTX representing the place where a 29006 function returns or receives a value of data type RET_TYPE, a tree 29007 node representing a data type. FN_DECL_OR_TYPE is a tree node 29008 representing `FUNCTION_DECL' or `FUNCTION_TYPE' of a function 29009 being called. If OUTGOING is false, the hook should compute the 29010 register in which the caller will see the return value. 29011 Otherwise, the hook should return an RTX representing the place 29012 where a function returns a value. 29013 29014 On many machines, only `TYPE_MODE (RET_TYPE)' is relevant. 29015 (Actually, on most machines, scalar values are returned in the same 29016 place regardless of mode.) The value of the expression is usually 29017 a `reg' RTX for the hard register where the return value is stored. 29018 The value can also be a `parallel' RTX, if the return value is in 29019 multiple places. See `FUNCTION_ARG' for an explanation of the 29020 `parallel' form. Note that the callee will populate every 29021 location specified in the `parallel', but if the first element of 29022 the `parallel' contains the whole return value, callers will use 29023 that element as the canonical location and ignore the others. The 29024 m68k port uses this type of `parallel' to return pointers in both 29025 `%a0' (the canonical location) and `%d0'. 29026 29027 If `TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 29028 the same promotion rules specified in `PROMOTE_MODE' if VALTYPE is 29029 a scalar type. 29030 29031 If the precise function being called is known, FUNC is a tree node 29032 (`FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 29033 makes it possible to use a different value-returning convention 29034 for specific functions when all their calls are known. 29035 29036 Some target machines have "register windows" so that the register 29037 in which a function returns its value is not the same as the one 29038 in which the caller sees the value. For such machines, you should 29039 return different RTX depending on OUTGOING. 29040 29041 `TARGET_FUNCTION_VALUE' is not used for return values with 29042 aggregate data types, because these are returned in another way. 29043 See `TARGET_STRUCT_VALUE_RTX' and related macros, below. 29044 29045 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 29046 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a 29047 new target instead. 29048 29049 -- Macro: FUNCTION_OUTGOING_VALUE (VALTYPE, FUNC) 29050 This macro has been deprecated. Use `TARGET_FUNCTION_VALUE' for a 29051 new target instead. 29052 29053 -- Macro: LIBCALL_VALUE (MODE) 29054 A C expression to create an RTX representing the place where a 29055 library function returns a value of mode MODE. 29056 29057 Note that "library function" in this context means a compiler 29058 support routine, used to perform arithmetic, whose name is known 29059 specially by the compiler and was not mentioned in the C code being 29060 compiled. 29061 29062 -- Target Hook: rtx TARGET_LIBCALL_VALUE (enum machine_mode 29063 MODE, const_rtx FUN) Define this hook if the back-end needs to 29064 know the name of the libcall function in order to determine where 29065 the result should be returned. 29066 29067 The mode of the result is given by MODE and the name of the called 29068 library function is given by FUN. The hook should return an RTX 29069 representing the place where the library function result will be 29070 returned. 29071 29072 If this hook is not defined, then LIBCALL_VALUE will be used. 29073 29074 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 29075 A C expression that is nonzero if REGNO is the number of a hard 29076 register in which the values of called function may come back. 29077 29078 A register whose use for returning values is limited to serving as 29079 the second of a pair (for a value of type `double', say) need not 29080 be recognized by this macro. So for most machines, this definition 29081 suffices: 29082 29083 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 29084 29085 If the machine has register windows, so that the caller and the 29086 called function use different registers for the return value, this 29087 macro should recognize only the caller's register numbers. 29088 29089 -- Macro: TARGET_ENUM_VA_LIST (IDX, PNAME, PTYPE) 29090 This target macro is used in function `c_common_nodes_and_builtins' 29091 to iterate through the target specific builtin types for va_list. 29092 The variable IDX is used as iterator. PNAME has to be a pointer to 29093 a `const char *' and PTYPE a pointer to a `tree' typed variable. 29094 The arguments PNAME and PTYPE are used to store the result of this 29095 macro and are set to the name of the va_list builtin type and its 29096 internal type. If the return value of this macro is zero, then 29097 there is no more element. Otherwise the IDX should be increased 29098 for the next call of this macro to iterate through all types. 29099 29100 -- Macro: APPLY_RESULT_SIZE 29101 Define this macro if `untyped_call' and `untyped_return' need more 29102 space than is implied by `FUNCTION_VALUE_REGNO_P' for saving and 29103 restoring an arbitrary return value. 29104 29105 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 29106 This hook should return true if values of type TYPE are returned 29107 at the most significant end of a register (in other words, if they 29108 are padded at the least significant end). You can assume that TYPE 29109 is returned in a register; the caller is required to check this. 29110 29111 Note that the register provided by `TARGET_FUNCTION_VALUE' must be 29112 able to hold the complete return value. For example, if a 1-, 2- 29113 or 3-byte structure is returned at the most significant end of a 29114 4-byte register, `TARGET_FUNCTION_VALUE' should provide an 29115 `SImode' rtx. 29116 29117 29118File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 29119 2912017.10.9 How Large Values Are Returned 29121------------------------------------- 29122 29123When a function value's mode is `BLKmode' (and in some other cases), 29124the value is not returned according to `TARGET_FUNCTION_VALUE' (*note 29125Scalar Return::). Instead, the caller passes the address of a block of 29126memory in which the value should be stored. This address is called the 29127"structure value address". 29128 29129 This section describes how to control returning structure values in 29130memory. 29131 29132 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 29133 const_tree FNTYPE) 29134 This target hook should return a nonzero value to say to return the 29135 function value in memory, just as large structures are always 29136 returned. Here TYPE will be the data type of the value, and FNTYPE 29137 will be the type of the function doing the returning, or `NULL' for 29138 libcalls. 29139 29140 Note that values of mode `BLKmode' must be explicitly handled by 29141 this function. Also, the option `-fpcc-struct-return' takes 29142 effect regardless of this macro. On most systems, it is possible 29143 to leave the hook undefined; this causes a default definition to 29144 be used, whose value is the constant 1 for `BLKmode' values, and 0 29145 otherwise. 29146 29147 Do not use this hook to indicate that structures and unions should 29148 always be returned in memory. You should instead use 29149 `DEFAULT_PCC_STRUCT_RETURN' to indicate this. 29150 29151 -- Macro: DEFAULT_PCC_STRUCT_RETURN 29152 Define this macro to be 1 if all structure and union return values 29153 must be in memory. Since this results in slower code, this should 29154 be defined only if needed for compatibility with other compilers 29155 or with an ABI. If you define this macro to be 0, then the 29156 conventions used for structure and union return values are decided 29157 by the `TARGET_RETURN_IN_MEMORY' target hook. 29158 29159 If not defined, this defaults to the value 1. 29160 29161 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 29162 This target hook should return the location of the structure value 29163 address (normally a `mem' or `reg'), or 0 if the address is passed 29164 as an "invisible" first argument. Note that FNDECL may be `NULL', 29165 for libcalls. You do not need to define this target hook if the 29166 address is always passed as an "invisible" first argument. 29167 29168 On some architectures the place where the structure value address 29169 is found by the called function is not the same place that the 29170 caller put it. This can be due to register windows, or it could 29171 be because the function prologue moves it to a different place. 29172 INCOMING is `1' or `2' when the location is needed in the context 29173 of the called function, and `0' in the context of the caller. 29174 29175 If INCOMING is nonzero and the address is to be found on the 29176 stack, return a `mem' which refers to the frame pointer. If 29177 INCOMING is `2', the result is being used to fetch the structure 29178 value address at the beginning of a function. If you need to emit 29179 adjusting code, you should do it at this point. 29180 29181 -- Macro: PCC_STATIC_STRUCT_RETURN 29182 Define this macro if the usual system convention on the target 29183 machine for returning structures and unions is for the called 29184 function to return the address of a static variable containing the 29185 value. 29186 29187 Do not define this if the usual system convention is for the 29188 caller to pass an address to the subroutine. 29189 29190 This macro has effect in `-fpcc-struct-return' mode, but it does 29191 nothing when you use `-freg-struct-return' mode. 29192 29193 29194File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 29195 2919617.10.10 Caller-Saves Register Allocation 29197----------------------------------------- 29198 29199If you enable it, GCC can save registers around function calls. This 29200makes it possible to use call-clobbered registers to hold variables that 29201must live across calls. 29202 29203 -- Macro: CALLER_SAVE_PROFITABLE (REFS, CALLS) 29204 A C expression to determine whether it is worthwhile to consider 29205 placing a pseudo-register in a call-clobbered hard register and 29206 saving and restoring it around each function call. The expression 29207 should be 1 when this is worth doing, and 0 otherwise. 29208 29209 If you don't define this macro, a default is used which is good on 29210 most machines: `4 * CALLS < REFS'. 29211 29212 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 29213 A C expression specifying which mode is required for saving NREGS 29214 of a pseudo-register in call-clobbered hard register REGNO. If 29215 REGNO is unsuitable for caller save, `VOIDmode' should be 29216 returned. For most machines this macro need not be defined since 29217 GCC will select the smallest suitable mode. 29218 29219 29220File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 29221 2922217.10.11 Function Entry and Exit 29223-------------------------------- 29224 29225This section describes the macros that output function entry 29226("prologue") and exit ("epilogue") code. 29227 29228 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 29229 HOST_WIDE_INT SIZE) 29230 If defined, a function that outputs the assembler code for entry 29231 to a function. The prologue is responsible for setting up the 29232 stack frame, initializing the frame pointer register, saving 29233 registers that must be saved, and allocating SIZE additional bytes 29234 of storage for the local variables. SIZE is an integer. FILE is 29235 a stdio stream to which the assembler code should be output. 29236 29237 The label for the beginning of the function need not be output by 29238 this macro. That has already been done when the macro is run. 29239 29240 To determine which registers to save, the macro can refer to the 29241 array `regs_ever_live': element R is nonzero if hard register R is 29242 used anywhere within the function. This implies the function 29243 prologue should save register R, provided it is not one of the 29244 call-used registers. (`TARGET_ASM_FUNCTION_EPILOGUE' must 29245 likewise use `regs_ever_live'.) 29246 29247 On machines that have "register windows", the function entry code 29248 does not save on the stack the registers that are in the windows, 29249 even if they are supposed to be preserved by function calls; 29250 instead it takes appropriate steps to "push" the register stack, 29251 if any non-call-used registers are used in the function. 29252 29253 On machines where functions may or may not have frame-pointers, the 29254 function entry code must vary accordingly; it must set up the frame 29255 pointer if one is wanted, and not otherwise. To determine whether 29256 a frame pointer is in wanted, the macro can refer to the variable 29257 `frame_pointer_needed'. The variable's value will be 1 at run 29258 time in a function that needs a frame pointer. *Note 29259 Elimination::. 29260 29261 The function entry code is responsible for allocating any stack 29262 space required for the function. This stack space consists of the 29263 regions listed below. In most cases, these regions are allocated 29264 in the order listed, with the last listed region closest to the 29265 top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is 29266 defined, and the highest address if it is not defined). You can 29267 use a different order for a machine if doing so is more convenient 29268 or required for compatibility reasons. Except in cases where 29269 required by standard or by a debugger, there is no reason why the 29270 stack layout used by GCC need agree with that used by other 29271 compilers for a machine. 29272 29273 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 29274 If defined, a function that outputs assembler code at the end of a 29275 prologue. This should be used when the function prologue is being 29276 emitted as RTL, and you have some extra assembler that needs to be 29277 emitted. *Note prologue instruction pattern::. 29278 29279 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 29280 If defined, a function that outputs assembler code at the start of 29281 an epilogue. This should be used when the function epilogue is 29282 being emitted as RTL, and you have some extra assembler that needs 29283 to be emitted. *Note epilogue instruction pattern::. 29284 29285 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 29286 HOST_WIDE_INT SIZE) 29287 If defined, a function that outputs the assembler code for exit 29288 from a function. The epilogue is responsible for restoring the 29289 saved registers and stack pointer to their values when the 29290 function was called, and returning control to the caller. This 29291 macro takes the same arguments as the macro 29292 `TARGET_ASM_FUNCTION_PROLOGUE', and the registers to restore are 29293 determined from `regs_ever_live' and `CALL_USED_REGISTERS' in the 29294 same way. 29295 29296 On some machines, there is a single instruction that does all the 29297 work of returning from the function. On these machines, give that 29298 instruction the name `return' and do not define the macro 29299 `TARGET_ASM_FUNCTION_EPILOGUE' at all. 29300 29301 Do not define a pattern named `return' if you want the 29302 `TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 29303 switches to control whether return instructions or epilogues are 29304 used, define a `return' pattern with a validity condition that 29305 tests the target switches appropriately. If the `return' 29306 pattern's validity condition is false, epilogues will be used. 29307 29308 On machines where functions may or may not have frame-pointers, the 29309 function exit code must vary accordingly. Sometimes the code for 29310 these two cases is completely different. To determine whether a 29311 frame pointer is wanted, the macro can refer to the variable 29312 `frame_pointer_needed'. The variable's value will be 1 when 29313 compiling a function that needs a frame pointer. 29314 29315 Normally, `TARGET_ASM_FUNCTION_PROLOGUE' and 29316 `TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 29317 The C variable `current_function_is_leaf' is nonzero for such a 29318 function. *Note Leaf Functions::. 29319 29320 On some machines, some functions pop their arguments on exit while 29321 others leave that for the caller to do. For example, the 68020 29322 when given `-mrtd' pops arguments in functions that take a fixed 29323 number of arguments. 29324 29325 Your definition of the macro `RETURN_POPS_ARGS' decides which 29326 functions pop their own arguments. `TARGET_ASM_FUNCTION_EPILOGUE' 29327 needs to know what was decided. The number of bytes of the current 29328 function's arguments that this function should pop is available in 29329 `crtl->args.pops_args'. *Note Scalar Return::. 29330 29331 * A region of `current_function_pretend_args_size' bytes of 29332 uninitialized space just underneath the first argument arriving on 29333 the stack. (This may not be at the very start of the allocated 29334 stack region if the calling sequence has pushed anything else 29335 since pushing the stack arguments. But usually, on such machines, 29336 nothing else has been pushed yet, because the function prologue 29337 itself does all the pushing.) This region is used on machines 29338 where an argument may be passed partly in registers and partly in 29339 memory, and, in some cases to support the features in `<stdarg.h>'. 29340 29341 * An area of memory used to save certain registers used by the 29342 function. The size of this area, which may also include space for 29343 such things as the return address and pointers to previous stack 29344 frames, is machine-specific and usually depends on which registers 29345 have been used in the function. Machines with register windows 29346 often do not require a save area. 29347 29348 * A region of at least SIZE bytes, possibly rounded up to an 29349 allocation boundary, to contain the local variables of the 29350 function. On some machines, this region and the save area may 29351 occur in the opposite order, with the save area closer to the top 29352 of the stack. 29353 29354 * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a region of 29355 `current_function_outgoing_args_size' bytes to be used for outgoing 29356 argument lists of the function. *Note Stack Arguments::. 29357 29358 -- Macro: EXIT_IGNORE_STACK 29359 Define this macro as a C expression that is nonzero if the return 29360 instruction or the function epilogue ignores the value of the stack 29361 pointer; in other words, if it is safe to delete an instruction to 29362 adjust the stack pointer before a return from the function. The 29363 default is 0. 29364 29365 Note that this macro's value is relevant only for functions for 29366 which frame pointers are maintained. It is never safe to delete a 29367 final stack adjustment in a function that has no frame pointer, 29368 and the compiler knows this regardless of `EXIT_IGNORE_STACK'. 29369 29370 -- Macro: EPILOGUE_USES (REGNO) 29371 Define this macro as a C expression that is nonzero for registers 29372 that are used by the epilogue or the `return' pattern. The stack 29373 and frame pointer registers are already assumed to be used as 29374 needed. 29375 29376 -- Macro: EH_USES (REGNO) 29377 Define this macro as a C expression that is nonzero for registers 29378 that are used by the exception handling mechanism, and so should 29379 be considered live on entry to an exception edge. 29380 29381 -- Macro: DELAY_SLOTS_FOR_EPILOGUE 29382 Define this macro if the function epilogue contains delay slots to 29383 which instructions from the rest of the function can be "moved". 29384 The definition should be a C expression whose value is an integer 29385 representing the number of delay slots there. 29386 29387 -- Macro: ELIGIBLE_FOR_EPILOGUE_DELAY (INSN, N) 29388 A C expression that returns 1 if INSN can be placed in delay slot 29389 number N of the epilogue. 29390 29391 The argument N is an integer which identifies the delay slot now 29392 being considered (since different slots may have different rules of 29393 eligibility). It is never negative and is always less than the 29394 number of epilogue delay slots (what `DELAY_SLOTS_FOR_EPILOGUE' 29395 returns). If you reject a particular insn for a given delay slot, 29396 in principle, it may be reconsidered for a subsequent delay slot. 29397 Also, other insns may (at least in principle) be considered for 29398 the so far unfilled delay slot. 29399 29400 The insns accepted to fill the epilogue delay slots are put in an 29401 RTL list made with `insn_list' objects, stored in the variable 29402 `current_function_epilogue_delay_list'. The insn for the first 29403 delay slot comes first in the list. Your definition of the macro 29404 `TARGET_ASM_FUNCTION_EPILOGUE' should fill the delay slots by 29405 outputting the insns in this list, usually by calling 29406 `final_scan_insn'. 29407 29408 You need not define this macro if you did not define 29409 `DELAY_SLOTS_FOR_EPILOGUE'. 29410 29411 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 29412 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 29413 VCALL_OFFSET, tree FUNCTION) 29414 A function that outputs the assembler code for a thunk function, 29415 used to implement C++ virtual function calls with multiple 29416 inheritance. The thunk acts as a wrapper around a virtual 29417 function, adjusting the implicit object parameter before handing 29418 control off to the real function. 29419 29420 First, emit code to add the integer DELTA to the location that 29421 contains the incoming first argument. Assume that this argument 29422 contains a pointer, and is the one used to pass the `this' pointer 29423 in C++. This is the incoming argument _before_ the function 29424 prologue, e.g. `%o0' on a sparc. The addition must preserve the 29425 values of all other incoming arguments. 29426 29427 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 29428 be made after adding `delta'. In particular, if P is the adjusted 29429 pointer, the following adjustment should be made: 29430 29431 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 29432 29433 After the additions, emit code to jump to FUNCTION, which is a 29434 `FUNCTION_DECL'. This is a direct pure jump, not a call, and does 29435 not touch the return address. Hence returning from FUNCTION will 29436 return to whoever called the current `thunk'. 29437 29438 The effect must be as if FUNCTION had been called directly with 29439 the adjusted first argument. This macro is responsible for 29440 emitting all of the code for a thunk function; 29441 `TARGET_ASM_FUNCTION_PROLOGUE' and `TARGET_ASM_FUNCTION_EPILOGUE' 29442 are not invoked. 29443 29444 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 29445 been extracted from it.) It might possibly be useful on some 29446 targets, but probably not. 29447 29448 If you do not define this macro, the target-independent code in 29449 the C++ front end will generate a less efficient heavyweight thunk 29450 that calls FUNCTION instead of jumping to it. The generic 29451 approach does not support varargs. 29452 29453 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 29454 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT 29455 VCALL_OFFSET, const_tree FUNCTION) 29456 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would 29457 be able to output the assembler code for the thunk function 29458 specified by the arguments it is passed, and false otherwise. In 29459 the latter case, the generic approach will be used by the C++ 29460 front end, with the limitations previously exposed. 29461 29462 29463File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 29464 2946517.10.12 Generating Code for Profiling 29466-------------------------------------- 29467 29468These macros will help you generate code for profiling. 29469 29470 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 29471 A C statement or compound statement to output to FILE some 29472 assembler code to call the profiling subroutine `mcount'. 29473 29474 The details of how `mcount' expects to be called are determined by 29475 your operating system environment, not by GCC. To figure them out, 29476 compile a small program for profiling using the system's installed 29477 C compiler and look at the assembler code that results. 29478 29479 Older implementations of `mcount' expect the address of a counter 29480 variable to be loaded into some register. The name of this 29481 variable is `LP' followed by the number LABELNO, so you would 29482 generate the name using `LP%d' in a `fprintf'. 29483 29484 -- Macro: PROFILE_HOOK 29485 A C statement or compound statement to output to FILE some assembly 29486 code to call the profiling subroutine `mcount' even the target does 29487 not support profiling. 29488 29489 -- Macro: NO_PROFILE_COUNTERS 29490 Define this macro to be an expression with a nonzero value if the 29491 `mcount' subroutine on your system does not need a counter variable 29492 allocated for each function. This is true for almost all modern 29493 implementations. If you define this macro, you must not use the 29494 LABELNO argument to `FUNCTION_PROFILER'. 29495 29496 -- Macro: PROFILE_BEFORE_PROLOGUE 29497 Define this macro if the code for function profiling should come 29498 before the function prologue. Normally, the profiling code comes 29499 after. 29500 29501 29502File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 29503 2950417.10.13 Permitting tail calls 29505------------------------------ 29506 29507 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 29508 EXP) 29509 True if it is ok to do sibling call optimization for the specified 29510 call expression EXP. DECL will be the called function, or `NULL' 29511 if this is an indirect call. 29512 29513 It is not uncommon for limitations of calling conventions to 29514 prevent tail calls to functions outside the current unit of 29515 translation, or during PIC compilation. The hook is used to 29516 enforce these restrictions, as the `sibcall' md pattern can not 29517 fail, or fall over to a "normal" call. The criteria for 29518 successful sibling call optimization may vary greatly between 29519 different architectures. 29520 29521 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 29522 Add any hard registers to REGS that are live on entry to the 29523 function. This hook only needs to be defined to provide registers 29524 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 29525 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 29526 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, 29527 FRAME_POINTER_REGNUM, EH_USES, FRAME_POINTER_REGNUM, 29528 ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM. 29529 29530 29531File: gccint.info, Node: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling 29532 2953317.10.14 Stack smashing protection 29534---------------------------------- 29535 29536 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 29537 This hook returns a `DECL' node for the external variable to use 29538 for the stack protection guard. This variable is initialized by 29539 the runtime to some random value and is used to initialize the 29540 guard value that is placed at the top of the local stack frame. 29541 The type of this variable must be `ptr_type_node'. 29542 29543 The default version of this hook creates a variable called 29544 `__stack_chk_guard', which is normally defined in `libgcc2.c'. 29545 29546 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 29547 This hook returns a tree expression that alerts the runtime that 29548 the stack protect guard variable has been modified. This 29549 expression should involve a call to a `noreturn' function. 29550 29551 The default version of this hook invokes a function called 29552 `__stack_chk_fail', taking no arguments. This function is 29553 normally defined in `libgcc2.c'. 29554 29555 29556File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 29557 2955817.11 Implementing the Varargs Macros 29559===================================== 29560 29561GCC comes with an implementation of `<varargs.h>' and `<stdarg.h>' that 29562work without change on machines that pass arguments on the stack. 29563Other machines require their own implementations of varargs, and the 29564two machine independent header files must have conditionals to include 29565it. 29566 29567 ISO `<stdarg.h>' differs from traditional `<varargs.h>' mainly in the 29568calling convention for `va_start'. The traditional implementation 29569takes just one argument, which is the variable in which to store the 29570argument pointer. The ISO implementation of `va_start' takes an 29571additional second argument. The user is supposed to write the last 29572named argument of the function here. 29573 29574 However, `va_start' should not use this argument. The way to find the 29575end of the named arguments is with the built-in functions described 29576below. 29577 29578 -- Macro: __builtin_saveregs () 29579 Use this built-in function to save the argument registers in 29580 memory so that the varargs mechanism can access them. Both ISO 29581 and traditional versions of `va_start' must use 29582 `__builtin_saveregs', unless you use 29583 `TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 29584 29585 On some machines, `__builtin_saveregs' is open-coded under the 29586 control of the target hook `TARGET_EXPAND_BUILTIN_SAVEREGS'. On 29587 other machines, it calls a routine written in assembler language, 29588 found in `libgcc2.c'. 29589 29590 Code generated for the call to `__builtin_saveregs' appears at the 29591 beginning of the function, as opposed to where the call to 29592 `__builtin_saveregs' is written, regardless of what the code is. 29593 This is because the registers must be saved before the function 29594 starts to use them for its own purposes. 29595 29596 -- Macro: __builtin_args_info (CATEGORY) 29597 Use this built-in function to find the first anonymous arguments in 29598 registers. 29599 29600 In general, a machine may have several categories of registers 29601 used for arguments, each for a particular category of data types. 29602 (For example, on some machines, floating-point registers are used 29603 for floating-point arguments while other arguments are passed in 29604 the general registers.) To make non-varargs functions use the 29605 proper calling convention, you have defined the `CUMULATIVE_ARGS' 29606 data type to record how many registers in each category have been 29607 used so far 29608 29609 `__builtin_args_info' accesses the same data structure of type 29610 `CUMULATIVE_ARGS' after the ordinary argument layout is finished 29611 with it, with CATEGORY specifying which word to access. Thus, the 29612 value indicates the first unused register in a given category. 29613 29614 Normally, you would use `__builtin_args_info' in the implementation 29615 of `va_start', accessing each category just once and storing the 29616 value in the `va_list' object. This is because `va_list' will 29617 have to update the values, and there is no way to alter the values 29618 accessed by `__builtin_args_info'. 29619 29620 -- Macro: __builtin_next_arg (LASTARG) 29621 This is the equivalent of `__builtin_args_info', for stack 29622 arguments. It returns the address of the first anonymous stack 29623 argument, as type `void *'. If `ARGS_GROW_DOWNWARD', it returns 29624 the address of the location above the first anonymous stack 29625 argument. Use it in `va_start' to initialize the pointer for 29626 fetching arguments from the stack. Also use it in `va_start' to 29627 verify that the second parameter LASTARG is the last named argument 29628 of the current function. 29629 29630 -- Macro: __builtin_classify_type (OBJECT) 29631 Since each machine has its own conventions for which data types are 29632 passed in which kind of register, your implementation of `va_arg' 29633 has to embody these conventions. The easiest way to categorize the 29634 specified data type is to use `__builtin_classify_type' together 29635 with `sizeof' and `__alignof__'. 29636 29637 `__builtin_classify_type' ignores the value of OBJECT, considering 29638 only its data type. It returns an integer describing what kind of 29639 type that is--integer, floating, pointer, structure, and so on. 29640 29641 The file `typeclass.h' defines an enumeration that you can use to 29642 interpret the values of `__builtin_classify_type'. 29643 29644 These machine description macros help implement varargs: 29645 29646 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 29647 If defined, this hook produces the machine-specific code for a 29648 call to `__builtin_saveregs'. This code will be moved to the very 29649 beginning of the function, before any parameter access are made. 29650 The return value of this function should be an RTX that contains 29651 the value to use as the return of `__builtin_saveregs'. 29652 29653 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_ARGS 29654 *ARGS_SO_FAR, enum machine_mode MODE, tree TYPE, int 29655 *PRETEND_ARGS_SIZE, int SECOND_TIME) 29656 This target hook offers an alternative to using 29657 `__builtin_saveregs' and defining the hook 29658 `TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 29659 register arguments into the stack so that all the arguments appear 29660 to have been passed consecutively on the stack. Once this is 29661 done, you can use the standard implementation of varargs that 29662 works for machines that pass all their arguments on the stack. 29663 29664 The argument ARGS_SO_FAR points to the `CUMULATIVE_ARGS' data 29665 structure, containing the values that are obtained after 29666 processing the named arguments. The arguments MODE and TYPE 29667 describe the last named argument--its machine mode and its data 29668 type as a tree node. 29669 29670 The target hook should do two things: first, push onto the stack 29671 all the argument registers _not_ used for the named arguments, and 29672 second, store the size of the data thus pushed into the 29673 `int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 29674 that you store here will serve as additional offset for setting up 29675 the stack frame. 29676 29677 Because you must generate code to push the anonymous arguments at 29678 compile time without knowing their data types, 29679 `TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 29680 have just a single category of argument register and use it 29681 uniformly for all data types. 29682 29683 If the argument SECOND_TIME is nonzero, it means that the 29684 arguments of the function are being analyzed for the second time. 29685 This happens for an inline function, which is not actually 29686 compiled until the end of the source file. The hook 29687 `TARGET_SETUP_INCOMING_VARARGS' should not generate any 29688 instructions in this case. 29689 29690 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_ARGS 29691 *CA) 29692 Define this hook to return `true' if the location where a function 29693 argument is passed depends on whether or not it is a named 29694 argument. 29695 29696 This hook controls how the NAMED argument to `FUNCTION_ARG' is set 29697 for varargs and stdarg functions. If this hook returns `true', 29698 the NAMED argument is always true for named arguments, and false 29699 for unnamed arguments. If it returns `false', but 29700 `TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns `true', then all 29701 arguments are treated as named. Otherwise, all named arguments 29702 except the last are treated as named. 29703 29704 You need not define this hook if it always returns `false'. 29705 29706 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 29707 (CUMULATIVE_ARGS *CA) 29708 If you need to conditionally change ABIs so that one works with 29709 `TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 29710 `TARGET_SETUP_INCOMING_VARARGS' nor 29711 `TARGET_STRICT_ARGUMENT_NAMING' was defined, then define this hook 29712 to return `true' if `TARGET_SETUP_INCOMING_VARARGS' is used, 29713 `false' otherwise. Otherwise, you should not define this hook. 29714 29715 29716File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 29717 2971817.12 Trampolines for Nested Functions 29719====================================== 29720 29721A "trampoline" is a small piece of code that is created at run time 29722when the address of a nested function is taken. It normally resides on 29723the stack, in the stack frame of the containing function. These macros 29724tell GCC how to generate code to allocate and initialize a trampoline. 29725 29726 The instructions in the trampoline must do two things: load a constant 29727address into the static chain register, and jump to the real address of 29728the nested function. On CISC machines such as the m68k, this requires 29729two instructions, a move immediate and a jump. Then the two addresses 29730exist in the trampoline as word-long immediate operands. On RISC 29731machines, it is often necessary to load each address into a register in 29732two parts. Then pieces of each address form separate immediate 29733operands. 29734 29735 The code generated to initialize the trampoline must store the variable 29736parts--the static chain value and the function address--into the 29737immediate operands of the instructions. On a CISC machine, this is 29738simply a matter of copying each address to a memory reference at the 29739proper offset from the start of the trampoline. On a RISC machine, it 29740may be necessary to take out pieces of the address and store them 29741separately. 29742 29743 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 29744 This hook is called by `assemble_trampoline_template' to output, 29745 on the stream F, assembler code for a block of data that contains 29746 the constant parts of a trampoline. This code should not include a 29747 label--the label is taken care of automatically. 29748 29749 If you do not define this hook, it means no template is needed for 29750 the target. Do not define this hook on systems where the block 29751 move code to copy the trampoline into place would be larger than 29752 the code to generate it on the spot. 29753 29754 -- Macro: TRAMPOLINE_SECTION 29755 Return the section into which the trampoline template is to be 29756 placed (*note Sections::). The default value is 29757 `readonly_data_section'. 29758 29759 -- Macro: TRAMPOLINE_SIZE 29760 A C expression for the size in bytes of the trampoline, as an 29761 integer. 29762 29763 -- Macro: TRAMPOLINE_ALIGNMENT 29764 Alignment required for trampolines, in bits. 29765 29766 If you don't define this macro, the value of `FUNCTION_ALIGNMENT' 29767 is used for aligning trampolines. 29768 29769 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 29770 rtx STATIC_CHAIN) 29771 This hook is called to initialize a trampoline. M_TRAMP is an RTX 29772 for the memory block for the trampoline; FNDECL is the 29773 `FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX 29774 for the static chain value that should be passed to the function 29775 when it is called. 29776 29777 If the target defines `TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 29778 first thing this hook should do is emit a block move into M_TRAMP 29779 from the memory block returned by `assemble_trampoline_template'. 29780 Note that the block move need only cover the constant parts of the 29781 trampoline. If the target isolates the variable parts of the 29782 trampoline to the end, not all `TRAMPOLINE_SIZE' bytes need be 29783 copied. 29784 29785 If the target requires any other actions, such as flushing caches 29786 or enabling stack execution, these actions should be performed 29787 after initializing the trampoline proper. 29788 29789 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 29790 This hook should perform any machine-specific adjustment in the 29791 address of the trampoline. Its argument contains the address of 29792 the memory block that was passed to `TARGET_TRAMPOLINE_INIT'. In 29793 case the address to be used for a function call should be 29794 different from the address at which the template was stored, the 29795 different address should be returned; otherwise ADDR should be 29796 returned unchanged. If this hook is not defined, ADDR will be 29797 used for function calls. 29798 29799 Implementing trampolines is difficult on many machines because they 29800have separate instruction and data caches. Writing into a stack 29801location fails to clear the memory in the instruction cache, so when 29802the program jumps to that location, it executes the old contents. 29803 29804 Here are two possible solutions. One is to clear the relevant parts of 29805the instruction cache whenever a trampoline is set up. The other is to 29806make all trampolines identical, by having them jump to a standard 29807subroutine. The former technique makes trampoline execution faster; the 29808latter makes initialization faster. 29809 29810 To clear the instruction cache when a trampoline is initialized, define 29811the following macro. 29812 29813 -- Macro: CLEAR_INSN_CACHE (BEG, END) 29814 If defined, expands to a C expression clearing the _instruction 29815 cache_ in the specified interval. The definition of this macro 29816 would typically be a series of `asm' statements. Both BEG and END 29817 are both pointer expressions. 29818 29819 The operating system may also require the stack to be made executable 29820before calling the trampoline. To implement this requirement, define 29821the following macro. 29822 29823 -- Macro: ENABLE_EXECUTE_STACK 29824 Define this macro if certain operations must be performed before 29825 executing code located on the stack. The macro should expand to a 29826 series of C file-scope constructs (e.g. functions) and provide a 29827 unique entry point named `__enable_execute_stack'. The target is 29828 responsible for emitting calls to the entry point in the code, for 29829 example from the `TARGET_TRAMPOLINE_INIT' hook. 29830 29831 To use a standard subroutine, define the following macro. In addition, 29832you must make sure that the instructions in a trampoline fill an entire 29833cache line with identical instructions, or else ensure that the 29834beginning of the trampoline code is always aligned at the same point in 29835its cache line. Look in `m68k.h' as a guide. 29836 29837 -- Macro: TRANSFER_FROM_TRAMPOLINE 29838 Define this macro if trampolines need a special subroutine to do 29839 their work. The macro should expand to a series of `asm' 29840 statements which will be compiled with GCC. They go in a library 29841 function named `__transfer_from_trampoline'. 29842 29843 If you need to avoid executing the ordinary prologue code of a 29844 compiled C function when you jump to the subroutine, you can do so 29845 by placing a special label of your own in the assembler code. Use 29846 one `asm' statement to generate an assembler label, and another to 29847 make the label global. Then trampolines can use that label to 29848 jump directly to your special assembler code. 29849 29850 29851File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 29852 2985317.13 Implicit Calls to Library Routines 29854======================================== 29855 29856Here is an explanation of implicit calls to library routines. 29857 29858 -- Macro: DECLARE_LIBRARY_RENAMES 29859 This macro, if defined, should expand to a piece of C code that 29860 will get expanded when compiling functions for libgcc.a. It can 29861 be used to provide alternate names for GCC's internal library 29862 functions if there are ABI-mandated names that the compiler should 29863 provide. 29864 29865 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 29866 This hook should declare additional library routines or rename 29867 existing ones, using the functions `set_optab_libfunc' and 29868 `init_one_libfunc' defined in `optabs.c'. `init_optabs' calls 29869 this macro after initializing all the normal library routines. 29870 29871 The default is to do nothing. Most ports don't need to define 29872 this hook. 29873 29874 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 29875 This macro should return `true' if the library routine that 29876 implements the floating point comparison operator COMPARISON in 29877 mode MODE will return a boolean, and FALSE if it will return a 29878 tristate. 29879 29880 GCC's own floating point libraries return tristates from the 29881 comparison operators, so the default returns false always. Most 29882 ports don't need to define this macro. 29883 29884 -- Macro: TARGET_LIB_INT_CMP_BIASED 29885 This macro should evaluate to `true' if the integer comparison 29886 functions (like `__cmpdi2') return 0 to indicate that the first 29887 operand is smaller than the second, 1 to indicate that they are 29888 equal, and 2 to indicate that the first operand is greater than 29889 the second. If this macro evaluates to `false' the comparison 29890 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 29891 target uses the routines in `libgcc.a', you do not need to define 29892 this macro. 29893 29894 -- Macro: US_SOFTWARE_GOFAST 29895 Define this macro if your system C library uses the US Software 29896 GOFAST library to provide floating point emulation. 29897 29898 In addition to defining this macro, your architecture must set 29899 `TARGET_INIT_LIBFUNCS' to `gofast_maybe_init_libfuncs', or else 29900 call that function from its version of that hook. It is defined 29901 in `config/gofast.h', which must be included by your 29902 architecture's `CPU.c' file. See `sparc/sparc.c' for an example. 29903 29904 If this macro is defined, the 29905 `TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL' target hook must return 29906 false for `SFmode' and `DFmode' comparisons. 29907 29908 -- Macro: TARGET_EDOM 29909 The value of `EDOM' on the target machine, as a C integer constant 29910 expression. If you don't define this macro, GCC does not attempt 29911 to deposit the value of `EDOM' into `errno' directly. Look in 29912 `/usr/include/errno.h' to find the value of `EDOM' on your system. 29913 29914 If you do not define `TARGET_EDOM', then compiled code reports 29915 domain errors by calling the library function and letting it 29916 report the error. If mathematical functions on your system use 29917 `matherr' when there is an error, then you should leave 29918 `TARGET_EDOM' undefined so that `matherr' is used normally. 29919 29920 -- Macro: GEN_ERRNO_RTX 29921 Define this macro as a C expression to create an rtl expression 29922 that refers to the global "variable" `errno'. (On certain systems, 29923 `errno' may not actually be a variable.) If you don't define this 29924 macro, a reasonable default is used. 29925 29926 -- Macro: TARGET_C99_FUNCTIONS 29927 When this macro is nonzero, GCC will implicitly optimize `sin' 29928 calls into `sinf' and similarly for other functions defined by C99 29929 standard. The default is zero because a number of existing 29930 systems lack support for these functions in their runtime so this 29931 macro needs to be redefined to one on systems that do support the 29932 C99 runtime. 29933 29934 -- Macro: TARGET_HAS_SINCOS 29935 When this macro is nonzero, GCC will implicitly optimize calls to 29936 `sin' and `cos' with the same argument to a call to `sincos'. The 29937 default is zero. The target has to provide the following 29938 functions: 29939 void sincos(double x, double *sin, double *cos); 29940 void sincosf(float x, float *sin, float *cos); 29941 void sincosl(long double x, long double *sin, long double *cos); 29942 29943 -- Macro: NEXT_OBJC_RUNTIME 29944 Define this macro to generate code for Objective-C message sending 29945 using the calling convention of the NeXT system. This calling 29946 convention involves passing the object, the selector and the 29947 method arguments all at once to the method-lookup library function. 29948 29949 The default calling convention passes just the object and the 29950 selector to the lookup function, which returns a pointer to the 29951 method. 29952 29953 29954File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 29955 2995617.14 Addressing Modes 29957====================== 29958 29959This is about addressing modes. 29960 29961 -- Macro: HAVE_PRE_INCREMENT 29962 -- Macro: HAVE_PRE_DECREMENT 29963 -- Macro: HAVE_POST_INCREMENT 29964 -- Macro: HAVE_POST_DECREMENT 29965 A C expression that is nonzero if the machine supports 29966 pre-increment, pre-decrement, post-increment, or post-decrement 29967 addressing respectively. 29968 29969 -- Macro: HAVE_PRE_MODIFY_DISP 29970 -- Macro: HAVE_POST_MODIFY_DISP 29971 A C expression that is nonzero if the machine supports pre- or 29972 post-address side-effect generation involving constants other than 29973 the size of the memory operand. 29974 29975 -- Macro: HAVE_PRE_MODIFY_REG 29976 -- Macro: HAVE_POST_MODIFY_REG 29977 A C expression that is nonzero if the machine supports pre- or 29978 post-address side-effect generation involving a register 29979 displacement. 29980 29981 -- Macro: CONSTANT_ADDRESS_P (X) 29982 A C expression that is 1 if the RTX X is a constant which is a 29983 valid address. On most machines the default definition of 29984 `(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 29985 but a few machines are more restrictive as to which constant 29986 addresses are supported. 29987 29988 -- Macro: CONSTANT_P (X) 29989 `CONSTANT_P', which is defined by target-independent code, accepts 29990 integer-values expressions whose values are not explicitly known, 29991 such as `symbol_ref', `label_ref', and `high' expressions and 29992 `const' arithmetic expressions, in addition to `const_int' and 29993 `const_double' expressions. 29994 29995 -- Macro: MAX_REGS_PER_ADDRESS 29996 A number, the maximum number of registers that can appear in a 29997 valid memory address. Note that it is up to you to specify a 29998 value equal to the maximum number that 29999 `TARGET_LEGITIMATE_ADDRESS_P' would ever accept. 30000 30001 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (enum machine_mode 30002 MODE, rtx X, bool STRICT) 30003 A function that returns whether X (an RTX) is a legitimate memory 30004 address on the target machine for a memory operand of mode MODE. 30005 30006 Legitimate addresses are defined in two variants: a strict variant 30007 and a non-strict one. The STRICT parameter chooses which variant 30008 is desired by the caller. 30009 30010 The strict variant is used in the reload pass. It must be defined 30011 so that any pseudo-register that has not been allocated a hard 30012 register is considered a memory reference. This is because in 30013 contexts where some kind of register is required, a 30014 pseudo-register with no hard register must be rejected. For 30015 non-hard registers, the strict variant should look up the 30016 `reg_renumber' array; it should then proceed using the hard 30017 register number in the array, or treat the pseudo as a memory 30018 reference if the array holds `-1'. 30019 30020 The non-strict variant is used in other passes. It must be 30021 defined to accept all pseudo-registers in every context where some 30022 kind of register is required. 30023 30024 Normally, constant addresses which are the sum of a `symbol_ref' 30025 and an integer are stored inside a `const' RTX to mark them as 30026 constant. Therefore, there is no need to recognize such sums 30027 specifically as legitimate addresses. Normally you would simply 30028 recognize any `const' as legitimate. 30029 30030 Usually `PRINT_OPERAND_ADDRESS' is not prepared to handle constant 30031 sums that are not marked with `const'. It assumes that a naked 30032 `plus' indicates indexing. If so, then you _must_ reject such 30033 naked constant sums as illegitimate addresses, so that none of 30034 them will be given to `PRINT_OPERAND_ADDRESS'. 30035 30036 On some machines, whether a symbolic address is legitimate depends 30037 on the section that the address refers to. On these machines, 30038 define the target hook `TARGET_ENCODE_SECTION_INFO' to store the 30039 information into the `symbol_ref', and then check for it here. 30040 When you see a `const', you will have to look inside it to find the 30041 `symbol_ref' in order to determine the section. *Note Assembler 30042 Format::. 30043 30044 Some ports are still using a deprecated legacy substitute for this 30045 hook, the `GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 30046 syntax: 30047 30048 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 30049 30050 and should `goto LABEL' if the address X is a valid address on the 30051 target machine for a memory operand of mode MODE. Whether the 30052 strict or non-strict variants are desired is defined by the 30053 `REG_OK_STRICT' macro introduced earlier in this section. Using 30054 the hook is usually simpler because it limits the number of files 30055 that are recompiled when changes are made. 30056 30057 -- Macro: TARGET_MEM_CONSTRAINT 30058 A single character to be used instead of the default `'m'' 30059 character for general memory addresses. This defines the 30060 constraint letter which matches the memory addresses accepted by 30061 `TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 30062 support new address formats in your back end without changing the 30063 semantics of the `'m'' constraint. This is necessary in order to 30064 preserve functionality of inline assembly constructs using the 30065 `'m'' constraint. 30066 30067 -- Macro: FIND_BASE_TERM (X) 30068 A C expression to determine the base term of address X, or to 30069 provide a simplified version of X from which `alias.c' can easily 30070 find the base term. This macro is used in only two places: 30071 `find_base_value' and `find_base_term' in `alias.c'. 30072 30073 It is always safe for this macro to not be defined. It exists so 30074 that alias analysis can understand machine-dependent addresses. 30075 30076 The typical use of this macro is to handle addresses containing a 30077 label_ref or symbol_ref within an UNSPEC. 30078 30079 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, enum 30080 machine_mode MODE) 30081 This hook is given an invalid memory address X for an operand of 30082 mode MODE and should try to return a valid memory address. 30083 30084 X will always be the result of a call to `break_out_memory_refs', 30085 and OLDX will be the operand that was given to that function to 30086 produce X. 30087 30088 The code of the hook should not alter the substructure of X. If 30089 it transforms X into a more legitimate form, it should return the 30090 new X. 30091 30092 It is not necessary for this hook to come up with a legitimate 30093 address. The compiler has standard ways of doing so in all cases. 30094 In fact, it is safe to omit this hook or make it return X if it 30095 cannot find a valid way to legitimize the address. But often a 30096 machine-dependent strategy can generate better code. 30097 30098 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 30099 WIN) 30100 A C compound statement that attempts to replace X, which is an 30101 address that needs reloading, with a valid memory address for an 30102 operand of mode MODE. WIN will be a C statement label elsewhere 30103 in the code. It is not necessary to define this macro, but it 30104 might be useful for performance reasons. 30105 30106 For example, on the i386, it is sometimes possible to use a single 30107 reload register instead of two by reloading a sum of two pseudo 30108 registers into a register. On the other hand, for number of RISC 30109 processors offsets are limited so that often an intermediate 30110 address needs to be generated in order to address a stack slot. 30111 By defining `LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 30112 intermediate addresses generated for adjacent some stack slots can 30113 be made identical, and thus be shared. 30114 30115 _Note_: This macro should be used with caution. It is necessary 30116 to know something of how reload works in order to effectively use 30117 this, and it is quite easy to produce macros that build in too 30118 much knowledge of reload internals. 30119 30120 _Note_: This macro must be able to reload an address created by a 30121 previous invocation of this macro. If it fails to handle such 30122 addresses then the compiler may generate incorrect code or abort. 30123 30124 The macro definition should use `push_reload' to indicate parts 30125 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 30126 suitable to be passed unaltered to `push_reload'. 30127 30128 The code generated by this macro must not alter the substructure of 30129 X. If it transforms X into a more legitimate form, it should 30130 assign X (which will always be a C variable) a new value. This 30131 also applies to parts that you change indirectly by calling 30132 `push_reload'. 30133 30134 The macro definition may use `strict_memory_address_p' to test if 30135 the address has become legitimate. 30136 30137 If you want to change only a part of X, one standard way of doing 30138 this is to use `copy_rtx'. Note, however, that it unshares only a 30139 single level of rtl. Thus, if the part to be changed is not at the 30140 top level, you'll need to replace first the top level. It is not 30141 necessary for this macro to come up with a legitimate address; 30142 but often a machine-dependent strategy can generate better code. 30143 30144 -- Macro: GO_IF_MODE_DEPENDENT_ADDRESS (ADDR, LABEL) 30145 A C statement or compound statement with a conditional `goto 30146 LABEL;' executed if memory address X (an RTX) can have different 30147 meanings depending on the machine mode of the memory reference it 30148 is used for or if the address is valid for some modes but not 30149 others. 30150 30151 Autoincrement and autodecrement addresses typically have 30152 mode-dependent effects because the amount of the increment or 30153 decrement is the size of the operand being addressed. Some 30154 machines have other mode-dependent addresses. Many RISC machines 30155 have no mode-dependent addresses. 30156 30157 You may assume that ADDR is a valid address for the machine. 30158 30159 -- Macro: LEGITIMATE_CONSTANT_P (X) 30160 A C expression that is nonzero if X is a legitimate constant for 30161 an immediate operand on the target machine. You can assume that X 30162 satisfies `CONSTANT_P', so you need not check this. In fact, `1' 30163 is a suitable definition for this macro on machines where anything 30164 `CONSTANT_P' is valid. 30165 30166 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 30167 This hook is used to undo the possibly obfuscating effects of the 30168 `LEGITIMIZE_ADDRESS' and `LEGITIMIZE_RELOAD_ADDRESS' target 30169 macros. Some backend implementations of these macros wrap symbol 30170 references inside an `UNSPEC' rtx to represent PIC or similar 30171 addressing modes. This target hook allows GCC's optimizers to 30172 understand the semantics of these opaque `UNSPEC's by converting 30173 them back into their original form. 30174 30175 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (rtx X) 30176 This hook should return true if X is of a form that cannot (or 30177 should not) be spilled to the constant pool. The default version 30178 of this hook returns false. 30179 30180 The primary reason to define this hook is to prevent reload from 30181 deciding that a non-legitimate constant would be better reloaded 30182 from the constant pool instead of spilling and reloading a register 30183 holding the constant. This restriction is often true of addresses 30184 of TLS symbols for various targets. 30185 30186 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (enum 30187 machine_mode MODE, const_rtx X) 30188 This hook should return true if pool entries for constant X can be 30189 placed in an `object_block' structure. MODE is the mode of X. 30190 30191 The default version returns false for all constants. 30192 30193 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool 30194 MD_FN, bool SQRT) 30195 This hook should return the DECL of a function that implements 30196 reciprocal of the builtin function with builtin function code FN, 30197 or `NULL_TREE' if such a function is not available. MD_FN is true 30198 when FN is a code of a machine-dependent builtin function. When 30199 SQRT is true, additional optimizations that apply only to the 30200 reciprocal of a square root function are performed, and only 30201 reciprocals of `sqrt' function are valid. 30202 30203 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 30204 This hook should return the DECL of a function F that given an 30205 address ADDR as an argument returns a mask M that can be used to 30206 extract from two vectors the relevant data that resides in ADDR in 30207 case ADDR is not properly aligned. 30208 30209 The autovectorizer, when vectorizing a load operation from an 30210 address ADDR that may be unaligned, will generate two vector loads 30211 from the two aligned addresses around ADDR. It then generates a 30212 `REALIGN_LOAD' operation to extract the relevant data from the two 30213 loaded vectors. The first two arguments to `REALIGN_LOAD', V1 and 30214 V2, are the two vectors, each of size VS, and the third argument, 30215 OFF, defines how the data will be extracted from these two 30216 vectors: if OFF is 0, then the returned vector is V2; otherwise, 30217 the returned vector is composed from the last VS-OFF elements of 30218 V1 concatenated to the first OFF elements of V2. 30219 30220 If this hook is defined, the autovectorizer will generate a call 30221 to F (using the DECL tree that this hook returns) and will use the 30222 return value of F as the argument OFF to `REALIGN_LOAD'. 30223 Therefore, the mask M returned by F should comply with the 30224 semantics expected by `REALIGN_LOAD' described above. If this 30225 hook is not defined, then ADDR will be used as the argument OFF to 30226 `REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 30227 will be considered. 30228 30229 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree X) 30230 This hook should return the DECL of a function F that implements 30231 widening multiplication of the even elements of two input vectors 30232 of type X. 30233 30234 If this hook is defined, the autovectorizer will use it along with 30235 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD' target hook when 30236 vectorizing widening multiplication in cases that the order of the 30237 results does not have to be preserved (e.g. used only by a 30238 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms 30239 will be used. 30240 30241 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD (tree X) 30242 This hook should return the DECL of a function F that implements 30243 widening multiplication of the odd elements of two input vectors 30244 of type X. 30245 30246 If this hook is defined, the autovectorizer will use it along with 30247 the `TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN' target hook when 30248 vectorizing widening multiplication in cases that the order of the 30249 results does not have to be preserved (e.g. used only by a 30250 reduction computation). Otherwise, the `widen_mult_hi/lo' idioms 30251 will be used. 30252 30253 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (bool 30254 RUNTIME_TEST) 30255 Returns the cost to be added to the overhead involved with 30256 executing the vectorized version of a loop. 30257 30258 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 30259 (const_tree TYPE, bool IS_PACKED) 30260 Return true if vector alignment is reachable (by peeling N 30261 iterations) for the given type. 30262 30263 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VEC_PERM (tree TYPE, 30264 tree *MASK_ELEMENT_TYPE) 30265 Target builtin that implements vector permute. 30266 30267 -- Target Hook: bool TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK (tree 30268 VEC_TYPE, tree MASK) 30269 Return true if a vector created for `builtin_vec_perm' is valid. 30270 30271 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned 30272 CODE, tree TYPE) 30273 This hook should return the DECL of a function that implements 30274 conversion of the input vector of type TYPE. If TYPE is an 30275 integral type, the result of the conversion is a vector of 30276 floating-point type of the same size. If TYPE is a floating-point 30277 type, the result of the conversion is a vector of integral type of 30278 the same size. The value of CODE is one of the enumerators in 30279 `enum tree_code' and specifies how the conversion is to be applied 30280 (truncation, rounding, etc.). 30281 30282 If this hook is defined, the autovectorizer will use the 30283 `TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 30284 conversion. Otherwise, it will return `NULL_TREE'. 30285 30286 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION 30287 (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 30288 This hook should return the decl of a function that implements the 30289 vectorized variant of the builtin function with builtin function 30290 code CODE or `NULL_TREE' if such a function is not available. The 30291 value of FNDECL is the builtin function declaration. The return 30292 type of the vectorized function shall be of vector type 30293 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 30294 30295 -- Target Hook: bool TARGET_SUPPORT_VECTOR_MISALIGNMENT (enum 30296 machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool 30297 IS_PACKED) 30298 This hook should return true if the target supports misaligned 30299 vector store/load of a specific factor denoted in the MISALIGNMENT 30300 parameter. The vector store/load should be of machine mode MODE 30301 and the elements in the vectors should be of type TYPE. IS_PACKED 30302 parameter is true if the memory access is defined in a packed 30303 struct. 30304 30305 30306File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 30307 3030817.15 Anchored Addresses 30309======================== 30310 30311GCC usually addresses every static object as a separate entity. For 30312example, if we have: 30313 30314 static int a, b, c; 30315 int foo (void) { return a + b + c; } 30316 30317 the code for `foo' will usually calculate three separate symbolic 30318addresses: those of `a', `b' and `c'. On some targets, it would be 30319better to calculate just one symbolic address and access the three 30320variables relative to it. The equivalent pseudocode would be something 30321like: 30322 30323 int foo (void) 30324 { 30325 register int *xr = &x; 30326 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 30327 } 30328 30329 (which isn't valid C). We refer to shared addresses like `x' as 30330"section anchors". Their use is controlled by `-fsection-anchors'. 30331 30332 The hooks below describe the target properties that GCC needs to know 30333in order to make effective use of section anchors. It won't use 30334section anchors at all unless either `TARGET_MIN_ANCHOR_OFFSET' or 30335`TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 30336 30337 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 30338 The minimum offset that should be applied to a section anchor. On 30339 most targets, it should be the smallest offset that can be applied 30340 to a base register while still giving a legitimate address for 30341 every mode. The default value is 0. 30342 30343 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 30344 Like `TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) 30345 offset that should be applied to section anchors. The default 30346 value is 0. 30347 30348 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 30349 Write the assembly code to define section anchor X, which is a 30350 `SYMBOL_REF' for which `SYMBOL_REF_ANCHOR_P (X)' is true. The 30351 hook is called with the assembly output position set to the 30352 beginning of `SYMBOL_REF_BLOCK (X)'. 30353 30354 If `ASM_OUTPUT_DEF' is available, the hook's default definition 30355 uses it to define the symbol as `. + SYMBOL_REF_BLOCK_OFFSET (X)'. 30356 If `ASM_OUTPUT_DEF' is not available, the hook's default definition 30357 is `NULL', which disables the use of section anchors altogether. 30358 30359 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 30360 Return true if GCC should attempt to use anchors to access 30361 `SYMBOL_REF' X. You can assume `SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 30362 and `!SYMBOL_REF_ANCHOR_P (X)'. 30363 30364 The default version is correct for most targets, but you might 30365 need to intercept this hook to handle things like target-specific 30366 attributes or target-specific sections. 30367 30368 30369File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 30370 3037117.16 Condition Code Status 30372=========================== 30373 30374The macros in this section can be split in two families, according to 30375the two ways of representing condition codes in GCC. 30376 30377 The first representation is the so called `(cc0)' representation 30378(*note Jump Patterns::), where all instructions can have an implicit 30379clobber of the condition codes. The second is the condition code 30380register representation, which provides better schedulability for 30381architectures that do have a condition code register, but on which most 30382instructions do not affect it. The latter category includes most RISC 30383machines. 30384 30385 The implicit clobbering poses a strong restriction on the placement of 30386the definition and use of the condition code, which need to be in 30387adjacent insns for machines using `(cc0)'. This can prevent important 30388optimizations on some machines. For example, on the IBM RS/6000, there 30389is a delay for taken branches unless the condition code register is set 30390three instructions earlier than the conditional branch. The instruction 30391scheduler cannot perform this optimization if it is not permitted to 30392separate the definition and use of the condition code register. 30393 30394 For this reason, it is possible and suggested to use a register to 30395represent the condition code for new ports. If there is a specific 30396condition code register in the machine, use a hard register. If the 30397condition code or comparison result can be placed in any general 30398register, or if there are multiple condition registers, use a pseudo 30399register. Registers used to store the condition code value will 30400usually have a mode that is in class `MODE_CC'. 30401 30402 Alternatively, you can use `BImode' if the comparison operator is 30403specified already in the compare instruction. In this case, you are not 30404interested in most macros in this section. 30405 30406* Menu: 30407 30408* CC0 Condition Codes:: Old style representation of condition codes. 30409* MODE_CC Condition Codes:: Modern representation of condition codes. 30410* Cond. Exec. Macros:: Macros to control conditional execution. 30411 30412 30413File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 30414 3041517.16.1 Representation of condition codes using `(cc0)' 30416------------------------------------------------------- 30417 30418The file `conditions.h' defines a variable `cc_status' to describe how 30419the condition code was computed (in case the interpretation of the 30420condition code depends on the instruction that it was set by). This 30421variable contains the RTL expressions on which the condition code is 30422currently based, and several standard flags. 30423 30424 Sometimes additional machine-specific flags must be defined in the 30425machine description header file. It can also add additional 30426machine-specific information by defining `CC_STATUS_MDEP'. 30427 30428 -- Macro: CC_STATUS_MDEP 30429 C code for a data type which is used for declaring the `mdep' 30430 component of `cc_status'. It defaults to `int'. 30431 30432 This macro is not used on machines that do not use `cc0'. 30433 30434 -- Macro: CC_STATUS_MDEP_INIT 30435 A C expression to initialize the `mdep' field to "empty". The 30436 default definition does nothing, since most machines don't use the 30437 field anyway. If you want to use the field, you should probably 30438 define this macro to initialize it. 30439 30440 This macro is not used on machines that do not use `cc0'. 30441 30442 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 30443 A C compound statement to set the components of `cc_status' 30444 appropriately for an insn INSN whose body is EXP. It is this 30445 macro's responsibility to recognize insns that set the condition 30446 code as a byproduct of other activity as well as those that 30447 explicitly set `(cc0)'. 30448 30449 This macro is not used on machines that do not use `cc0'. 30450 30451 If there are insns that do not set the condition code but do alter 30452 other machine registers, this macro must check to see whether they 30453 invalidate the expressions that the condition code is recorded as 30454 reflecting. For example, on the 68000, insns that store in address 30455 registers do not set the condition code, which means that usually 30456 `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns. 30457 But suppose that the previous insn set the condition code based on 30458 location `a4@(102)' and the current insn stores a new value in 30459 `a4'. Although the condition code is not changed by this, it will 30460 no longer be true that it reflects the contents of `a4@(102)'. 30461 Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case 30462 to say that nothing is known about the condition code value. 30463 30464 The definition of `NOTICE_UPDATE_CC' must be prepared to deal with 30465 the results of peephole optimization: insns whose patterns are 30466 `parallel' RTXs containing various `reg', `mem' or constants which 30467 are just the operands. The RTL structure of these insns is not 30468 sufficient to indicate what the insns actually do. What 30469 `NOTICE_UPDATE_CC' should do when it sees one is just to run 30470 `CC_STATUS_INIT'. 30471 30472 A possible definition of `NOTICE_UPDATE_CC' is to call a function 30473 that looks at an attribute (*note Insn Attributes::) named, for 30474 example, `cc'. This avoids having detailed information about 30475 patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'. 30476 30477 30478File: gccint.info, Node: MODE_CC Condition Codes, Next: Cond. Exec. Macros, Prev: CC0 Condition Codes, Up: Condition Code 30479 3048017.16.2 Representation of condition codes using registers 30481--------------------------------------------------------- 30482 30483 -- Macro: SELECT_CC_MODE (OP, X, Y) 30484 On many machines, the condition code may be produced by other 30485 instructions than compares, for example the branch can use 30486 directly the condition code set by a subtract instruction. 30487 However, on some machines when the condition code is set this way 30488 some bits (such as the overflow bit) are not set in the same way 30489 as a test instruction, so that a different branch instruction must 30490 be used for some conditional branches. When this happens, use the 30491 machine mode of the condition code register to record different 30492 formats of the condition code register. Modes can also be used to 30493 record which compare instruction (e.g. a signed or an unsigned 30494 comparison) produced the condition codes. 30495 30496 If other modes than `CCmode' are required, add them to 30497 `MACHINE-modes.def' and define `SELECT_CC_MODE' to choose a mode 30498 given an operand of a compare. This is needed because the modes 30499 have to be chosen not only during RTL generation but also, for 30500 example, by instruction combination. The result of 30501 `SELECT_CC_MODE' should be consistent with the mode used in the 30502 patterns; for example to support the case of the add on the SPARC 30503 discussed above, we have the pattern 30504 30505 (define_insn "" 30506 [(set (reg:CC_NOOV 0) 30507 (compare:CC_NOOV 30508 (plus:SI (match_operand:SI 0 "register_operand" "%r") 30509 (match_operand:SI 1 "arith_operand" "rI")) 30510 (const_int 0)))] 30511 "" 30512 "...") 30513 30514 together with a `SELECT_CC_MODE' that returns `CC_NOOVmode' for 30515 comparisons whose argument is a `plus': 30516 30517 #define SELECT_CC_MODE(OP,X,Y) \ 30518 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 30519 ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode) \ 30520 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 30521 || GET_CODE (X) == NEG) \ 30522 ? CC_NOOVmode : CCmode)) 30523 30524 Another reason to use modes is to retain information on which 30525 operands were used by the comparison; see `REVERSIBLE_CC_MODE' 30526 later in this section. 30527 30528 You should define this macro if and only if you define extra CC 30529 modes in `MACHINE-modes.def'. 30530 30531 -- Macro: CANONICALIZE_COMPARISON (CODE, OP0, OP1) 30532 On some machines not all possible comparisons are defined, but you 30533 can convert an invalid comparison into a valid one. For example, 30534 the Alpha does not have a `GT' comparison, but you can use an `LT' 30535 comparison instead and swap the order of the operands. 30536 30537 On such machines, define this macro to be a C statement to do any 30538 required conversions. CODE is the initial comparison code and OP0 30539 and OP1 are the left and right operands of the comparison, 30540 respectively. You should modify CODE, OP0, and OP1 as required. 30541 30542 GCC will not assume that the comparison resulting from this macro 30543 is valid but will see if the resulting insn matches a pattern in 30544 the `md' file. 30545 30546 You need not define this macro if it would never change the 30547 comparison code or operands. 30548 30549 -- Macro: REVERSIBLE_CC_MODE (MODE) 30550 A C expression whose value is one if it is always safe to reverse a 30551 comparison whose mode is MODE. If `SELECT_CC_MODE' can ever 30552 return MODE for a floating-point inequality comparison, then 30553 `REVERSIBLE_CC_MODE (MODE)' must be zero. 30554 30555 You need not define this macro if it would always returns zero or 30556 if the floating-point format is anything other than 30557 `IEEE_FLOAT_FORMAT'. For example, here is the definition used on 30558 the SPARC, where floating-point inequality comparisons are always 30559 given `CCFPEmode': 30560 30561 #define REVERSIBLE_CC_MODE(MODE) ((MODE) != CCFPEmode) 30562 30563 -- Macro: REVERSE_CONDITION (CODE, MODE) 30564 A C expression whose value is reversed condition code of the CODE 30565 for comparison done in CC_MODE MODE. The macro is used only in 30566 case `REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 30567 case machine has some non-standard way how to reverse certain 30568 conditionals. For instance in case all floating point conditions 30569 are non-trapping, compiler may freely convert unordered compares 30570 to ordered one. Then definition may look like: 30571 30572 #define REVERSE_CONDITION(CODE, MODE) \ 30573 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 30574 : reverse_condition_maybe_unordered (CODE)) 30575 30576 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 30577 *P1, unsigned int *P2) 30578 On targets which do not use `(cc0)', and which use a hard register 30579 rather than a pseudo-register to hold condition codes, the regular 30580 CSE passes are often not able to identify cases in which the hard 30581 register is set to a common value. Use this hook to enable a 30582 small pass which optimizes such cases. This hook should return 30583 true to enable this pass, and it should set the integers to which 30584 its arguments point to the hard register numbers used for 30585 condition codes. When there is only one such register, as is true 30586 on most systems, the integer pointed to by P2 should be set to 30587 `INVALID_REGNUM'. 30588 30589 The default version of this hook returns false. 30590 30591 -- Target Hook: enum machine_mode TARGET_CC_MODES_COMPATIBLE (enum 30592 machine_mode M1, enum machine_mode M2) 30593 On targets which use multiple condition code modes in class 30594 `MODE_CC', it is sometimes the case that a comparison can be 30595 validly done in more than one mode. On such a system, define this 30596 target hook to take two mode arguments and to return a mode in 30597 which both comparisons may be validly done. If there is no such 30598 mode, return `VOIDmode'. 30599 30600 The default version of this hook checks whether the modes are the 30601 same. If they are, it returns that mode. If they are different, 30602 it returns `VOIDmode'. 30603 30604 30605File: gccint.info, Node: Cond. Exec. Macros, Prev: MODE_CC Condition Codes, Up: Condition Code 30606 3060717.16.3 Macros to control conditional execution 30608----------------------------------------------- 30609 30610There is one macro that may need to be defined for targets supporting 30611conditional execution, independent of how they represent conditional 30612branches. 30613 30614 -- Macro: REVERSE_CONDEXEC_PREDICATES_P (OP1, OP2) 30615 A C expression that returns true if the conditional execution 30616 predicate OP1, a comparison operation, is the inverse of OP2 and 30617 vice versa. Define this to return 0 if the target has conditional 30618 execution predicates that cannot be reversed safely. There is no 30619 need to validate that the arguments of op1 and op2 are the same, 30620 this is done separately. If no expansion is specified, this macro 30621 is defined as follows: 30622 30623 #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \ 30624 (GET_CODE ((x)) == reversed_comparison_code ((y), NULL)) 30625 30626 30627File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 30628 3062917.17 Describing Relative Costs of Operations 30630============================================= 30631 30632These macros let you describe the relative speed of various operations 30633on the target machine. 30634 30635 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 30636 A C expression for the cost of moving data of mode MODE from a 30637 register in class FROM to one in class TO. The classes are 30638 expressed using the enumeration values such as `GENERAL_REGS'. A 30639 value of 2 is the default; other values are interpreted relative to 30640 that. 30641 30642 It is not required that the cost always equal 2 when FROM is the 30643 same as TO; on some machines it is expensive to move between 30644 registers if they are not general registers. 30645 30646 If reload sees an insn consisting of a single `set' between two 30647 hard registers, and if `REGISTER_MOVE_COST' applied to their 30648 classes returns a value of 2, reload does not check to ensure that 30649 the constraints of the insn are met. Setting a cost of other than 30650 2 will allow reload to verify that the constraints are met. You 30651 should do this if the `movM' pattern's constraints do not allow 30652 such copying. 30653 30654 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 30655 A C expression for the cost of moving data of mode MODE between a 30656 register of class CLASS and memory; IN is zero if the value is to 30657 be written to memory, nonzero if it is to be read in. This cost 30658 is relative to those in `REGISTER_MOVE_COST'. If moving between 30659 registers and memory is more expensive than between two registers, 30660 you should define this macro to express the relative cost. 30661 30662 If you do not define this macro, GCC uses a default cost of 4 plus 30663 the cost of copying via a secondary reload register, if one is 30664 needed. If your machine requires a secondary reload register to 30665 copy between memory and a register of CLASS but the reload 30666 mechanism is more complex than copying via an intermediate, define 30667 this macro to reflect the actual cost of the move. 30668 30669 GCC defines the function `memory_move_secondary_cost' if secondary 30670 reloads are needed. It computes the costs due to copying via a 30671 secondary register. If your machine copies from memory using a 30672 secondary register in the conventional way but the default base 30673 value of 4 is not correct for your machine, define this macro to 30674 add some other value to the result of that function. The 30675 arguments to that function are the same as to this macro. 30676 30677 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 30678 A C expression for the cost of a branch instruction. A value of 1 30679 is the default; other values are interpreted relative to that. 30680 Parameter SPEED_P is true when the branch in question should be 30681 optimized for speed. When it is false, `BRANCH_COST' should be 30682 returning value optimal for code size rather then performance 30683 considerations. PREDICTABLE_P is true for well predictable 30684 branches. On many architectures the `BRANCH_COST' can be reduced 30685 then. 30686 30687 Here are additional macros which do not specify precise relative costs, 30688but only that certain actions are more expensive than GCC would 30689ordinarily expect. 30690 30691 -- Macro: SLOW_BYTE_ACCESS 30692 Define this macro as a C expression which is nonzero if accessing 30693 less than a word of memory (i.e. a `char' or a `short') is no 30694 faster than accessing a word of memory, i.e., if such access 30695 require more than one instruction or if there is no difference in 30696 cost between byte and (aligned) word loads. 30697 30698 When this macro is not defined, the compiler will access a field by 30699 finding the smallest containing object; when it is defined, a 30700 fullword load will be used if alignment permits. Unless bytes 30701 accesses are faster than word accesses, using word accesses is 30702 preferable since it may eliminate subsequent memory access if 30703 subsequent accesses occur to other fields in the same word of the 30704 structure, but to different bytes. 30705 30706 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 30707 Define this macro to be the value 1 if memory accesses described 30708 by the MODE and ALIGNMENT parameters have a cost many times greater 30709 than aligned accesses, for example if they are emulated in a trap 30710 handler. 30711 30712 When this macro is nonzero, the compiler will act as if 30713 `STRICT_ALIGNMENT' were nonzero when generating code for block 30714 moves. This can cause significantly more instructions to be 30715 produced. Therefore, do not set this macro nonzero if unaligned 30716 accesses only add a cycle or two to the time for a memory access. 30717 30718 If the value of this macro is always zero, it need not be defined. 30719 If this macro is defined, it should produce a nonzero value when 30720 `STRICT_ALIGNMENT' is nonzero. 30721 30722 -- Macro: MOVE_RATIO (SPEED) 30723 The threshold of number of scalar memory-to-memory move insns, 30724 _below_ which a sequence of insns should be generated instead of a 30725 string move insn or a library call. Increasing the value will 30726 always make code faster, but eventually incurs high cost in 30727 increased code size. 30728 30729 Note that on machines where the corresponding move insn is a 30730 `define_expand' that emits a sequence of insns, this macro counts 30731 the number of such sequences. 30732 30733 The parameter SPEED is true if the code is currently being 30734 optimized for speed rather than size. 30735 30736 If you don't define this, a reasonable default is used. 30737 30738 -- Macro: MOVE_BY_PIECES_P (SIZE, ALIGNMENT) 30739 A C expression used to determine whether `move_by_pieces' will be 30740 used to copy a chunk of memory, or whether some other block move 30741 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 30742 returns less than `MOVE_RATIO'. 30743 30744 -- Macro: MOVE_MAX_PIECES 30745 A C expression used by `move_by_pieces' to determine the largest 30746 unit a load or store used to copy memory is. Defaults to 30747 `MOVE_MAX'. 30748 30749 -- Macro: CLEAR_RATIO (SPEED) 30750 The threshold of number of scalar move insns, _below_ which a 30751 sequence of insns should be generated to clear memory instead of a 30752 string clear insn or a library call. Increasing the value will 30753 always make code faster, but eventually incurs high cost in 30754 increased code size. 30755 30756 The parameter SPEED is true if the code is currently being 30757 optimized for speed rather than size. 30758 30759 If you don't define this, a reasonable default is used. 30760 30761 -- Macro: CLEAR_BY_PIECES_P (SIZE, ALIGNMENT) 30762 A C expression used to determine whether `clear_by_pieces' will be 30763 used to clear a chunk of memory, or whether some other block clear 30764 mechanism will be used. Defaults to 1 if `move_by_pieces_ninsns' 30765 returns less than `CLEAR_RATIO'. 30766 30767 -- Macro: SET_RATIO (SPEED) 30768 The threshold of number of scalar move insns, _below_ which a 30769 sequence of insns should be generated to set memory to a constant 30770 value, instead of a block set insn or a library call. Increasing 30771 the value will always make code faster, but eventually incurs high 30772 cost in increased code size. 30773 30774 The parameter SPEED is true if the code is currently being 30775 optimized for speed rather than size. 30776 30777 If you don't define this, it defaults to the value of `MOVE_RATIO'. 30778 30779 -- Macro: SET_BY_PIECES_P (SIZE, ALIGNMENT) 30780 A C expression used to determine whether `store_by_pieces' will be 30781 used to set a chunk of memory to a constant value, or whether some 30782 other mechanism will be used. Used by `__builtin_memset' when 30783 storing values other than constant zero. Defaults to 1 if 30784 `move_by_pieces_ninsns' returns less than `SET_RATIO'. 30785 30786 -- Macro: STORE_BY_PIECES_P (SIZE, ALIGNMENT) 30787 A C expression used to determine whether `store_by_pieces' will be 30788 used to set a chunk of memory to a constant string value, or 30789 whether some other mechanism will be used. Used by 30790 `__builtin_strcpy' when called with a constant source string. 30791 Defaults to 1 if `move_by_pieces_ninsns' returns less than 30792 `MOVE_RATIO'. 30793 30794 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 30795 A C expression used to determine whether a load postincrement is a 30796 good thing to use for a given mode. Defaults to the value of 30797 `HAVE_POST_INCREMENT'. 30798 30799 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 30800 A C expression used to determine whether a load postdecrement is a 30801 good thing to use for a given mode. Defaults to the value of 30802 `HAVE_POST_DECREMENT'. 30803 30804 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 30805 A C expression used to determine whether a load preincrement is a 30806 good thing to use for a given mode. Defaults to the value of 30807 `HAVE_PRE_INCREMENT'. 30808 30809 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 30810 A C expression used to determine whether a load predecrement is a 30811 good thing to use for a given mode. Defaults to the value of 30812 `HAVE_PRE_DECREMENT'. 30813 30814 -- Macro: USE_STORE_POST_INCREMENT (MODE) 30815 A C expression used to determine whether a store postincrement is 30816 a good thing to use for a given mode. Defaults to the value of 30817 `HAVE_POST_INCREMENT'. 30818 30819 -- Macro: USE_STORE_POST_DECREMENT (MODE) 30820 A C expression used to determine whether a store postdecrement is 30821 a good thing to use for a given mode. Defaults to the value of 30822 `HAVE_POST_DECREMENT'. 30823 30824 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 30825 This macro is used to determine whether a store preincrement is a 30826 good thing to use for a given mode. Defaults to the value of 30827 `HAVE_PRE_INCREMENT'. 30828 30829 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 30830 This macro is used to determine whether a store predecrement is a 30831 good thing to use for a given mode. Defaults to the value of 30832 `HAVE_PRE_DECREMENT'. 30833 30834 -- Macro: NO_FUNCTION_CSE 30835 Define this macro if it is as good or better to call a constant 30836 function address than to call an address kept in a register. 30837 30838 -- Macro: RANGE_TEST_NON_SHORT_CIRCUIT 30839 Define this macro if a non-short-circuit operation produced by 30840 `fold_range_test ()' is optimal. This macro defaults to true if 30841 `BRANCH_COST' is greater than or equal to the value 2. 30842 30843 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int 30844 OUTER_CODE, int *TOTAL, bool SPEED) 30845 This target hook describes the relative costs of RTL expressions. 30846 30847 The cost may depend on the precise form of the expression, which is 30848 available for examination in X, and the rtx code of the expression 30849 in which it is contained, found in OUTER_CODE. CODE is the 30850 expression code--redundant, since it can be obtained with 30851 `GET_CODE (X)'. 30852 30853 In implementing this hook, you can use the construct 30854 `COSTS_N_INSNS (N)' to specify a cost equal to N fast instructions. 30855 30856 On entry to the hook, `*TOTAL' contains a default estimate for the 30857 cost of the expression. The hook should modify this value as 30858 necessary. Traditionally, the default costs are `COSTS_N_INSNS 30859 (5)' for multiplications, `COSTS_N_INSNS (7)' for division and 30860 modulus operations, and `COSTS_N_INSNS (1)' for all other 30861 operations. 30862 30863 When optimizing for code size, i.e. when `speed' is false, this 30864 target hook should be used to estimate the relative size cost of 30865 an expression, again relative to `COSTS_N_INSNS'. 30866 30867 The hook returns true when all subexpressions of X have been 30868 processed, and false when `rtx_cost' should recurse. 30869 30870 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, bool SPEED) 30871 This hook computes the cost of an addressing mode that contains 30872 ADDRESS. If not defined, the cost is computed from the ADDRESS 30873 expression and the `TARGET_RTX_COST' hook. 30874 30875 For most CISC machines, the default cost is a good approximation 30876 of the true cost of the addressing mode. However, on RISC 30877 machines, all instructions normally have the same length and 30878 execution time. Hence all addresses will have equal costs. 30879 30880 In cases where more than one form of an address is known, the form 30881 with the lowest cost will be used. If multiple forms have the 30882 same, lowest, cost, the one that is the most complex will be used. 30883 30884 For example, suppose an address that is equal to the sum of a 30885 register and a constant is used twice in the same basic block. 30886 When this macro is not defined, the address will be computed in a 30887 register and memory references will be indirect through that 30888 register. On machines where the cost of the addressing mode 30889 containing the sum is no higher than that of a simple indirect 30890 reference, this will produce an additional instruction and 30891 possibly require an additional register. Proper specification of 30892 this macro eliminates this overhead for such machines. 30893 30894 This hook is never called with an invalid address. 30895 30896 On machines where an address involving more than one register is as 30897 cheap as an address computation involving only one register, 30898 defining `TARGET_ADDRESS_COST' to reflect this can cause two 30899 registers to be live over a region of code where only one would 30900 have been if `TARGET_ADDRESS_COST' were not defined in that 30901 manner. This effect should be considered in the definition of 30902 this macro. Equivalent costs should probably only be given to 30903 addresses with different numbers of registers on machines with 30904 lots of registers. 30905 30906 30907File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 30908 3090917.18 Adjusting the Instruction Scheduler 30910========================================= 30911 30912The instruction scheduler may need a fair amount of machine-specific 30913adjustment in order to produce good code. GCC provides several target 30914hooks for this purpose. It is usually enough to define just a few of 30915them: try the first ones in this list first. 30916 30917 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 30918 This hook returns the maximum number of instructions that can ever 30919 issue at the same time on the target machine. The default is one. 30920 Although the insn scheduler can define itself the possibility of 30921 issue an insn on the same cycle, the value can serve as an 30922 additional constraint to issue insns on the same simulated 30923 processor cycle (see hooks `TARGET_SCHED_REORDER' and 30924 `TARGET_SCHED_REORDER2'). This value must be constant over the 30925 entire compilation. If you need it to vary depending on what the 30926 instructions are, you must use `TARGET_SCHED_VARIABLE_ISSUE'. 30927 30928 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 30929 VERBOSE, rtx INSN, int MORE) 30930 This hook is executed by the scheduler after it has scheduled an 30931 insn from the ready list. It should return the number of insns 30932 which can still be issued in the current cycle. The default is 30933 `MORE - 1' for insns other than `CLOBBER' and `USE', which 30934 normally are not counted against the issue rate. You should 30935 define this hook if some insns take more machine resources than 30936 others, so that fewer insns can follow them in the same cycle. 30937 FILE is either a null pointer, or a stdio stream to write any 30938 debug output to. VERBOSE is the verbose level provided by 30939 `-fsched-verbose-N'. INSN is the instruction that was scheduled. 30940 30941 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx INSN, rtx LINK, rtx 30942 DEP_INSN, int COST) 30943 This function corrects the value of COST based on the relationship 30944 between INSN and DEP_INSN through the dependence LINK. It should 30945 return the new value. The default is to make no adjustment to 30946 COST. This can be used for example to specify to the scheduler 30947 using the traditional pipeline description that an output- or 30948 anti-dependence does not incur the same cost as a data-dependence. 30949 If the scheduler using the automaton based pipeline description, 30950 the cost of anti-dependence is zero and the cost of 30951 output-dependence is maximum of one and the difference of latency 30952 times of the first and the second insns. If these values are not 30953 acceptable, you could use the hook to modify them too. See also 30954 *note Processor pipeline description::. 30955 30956 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx INSN, int 30957 PRIORITY) 30958 This hook adjusts the integer scheduling priority PRIORITY of 30959 INSN. It should return the new priority. Increase the priority to 30960 execute INSN earlier, reduce the priority to execute INSN later. 30961 Do not define this hook if you do not need to adjust the 30962 scheduling priorities of insns. 30963 30964 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, rtx 30965 *READY, int *N_READYP, int CLOCK) 30966 This hook is executed by the scheduler after it has scheduled the 30967 ready list, to allow the machine description to reorder it (for 30968 example to combine two small instructions together on `VLIW' 30969 machines). FILE is either a null pointer, or a stdio stream to 30970 write any debug output to. VERBOSE is the verbose level provided 30971 by `-fsched-verbose-N'. READY is a pointer to the ready list of 30972 instructions that are ready to be scheduled. N_READYP is a 30973 pointer to the number of elements in the ready list. The scheduler 30974 reads the ready list in reverse order, starting with 30975 READY[*N_READYP - 1] and going to READY[0]. CLOCK is the timer 30976 tick of the scheduler. You may modify the ready list and the 30977 number of ready insns. The return value is the number of insns 30978 that can issue this cycle; normally this is just `issue_rate'. 30979 See also `TARGET_SCHED_REORDER2'. 30980 30981 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 30982 rtx *READY, int *N_READYP, int CLOCK) 30983 Like `TARGET_SCHED_REORDER', but called at a different time. That 30984 function is called whenever the scheduler starts a new cycle. 30985 This one is called once per iteration over a cycle, immediately 30986 after `TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list 30987 and return the number of insns to be scheduled in the same cycle. 30988 Defining this hook can be useful if there are frequent situations 30989 where scheduling one insn causes other insns to become ready in 30990 the same cycle. These other insns can then be taken into account 30991 properly. 30992 30993 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx 30994 HEAD, rtx TAIL) 30995 This hook is called after evaluation forward dependencies of insns 30996 in chain given by two parameter values (HEAD and TAIL 30997 correspondingly) but before insns scheduling of the insn chain. 30998 For example, it can be used for better insn classification if it 30999 requires analysis of dependencies. This hook can use backward and 31000 forward dependencies of the insn scheduler because they are already 31001 calculated. 31002 31003 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 31004 MAX_READY) 31005 This hook is executed by the scheduler at the beginning of each 31006 block of instructions that are to be scheduled. FILE is either a 31007 null pointer, or a stdio stream to write any debug output to. 31008 VERBOSE is the verbose level provided by `-fsched-verbose-N'. 31009 MAX_READY is the maximum number of insns in the current scheduling 31010 region that can be live at the same time. This can be used to 31011 allocate scratch space if it is needed, e.g. by 31012 `TARGET_SCHED_REORDER'. 31013 31014 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 31015 This hook is executed by the scheduler at the end of each block of 31016 instructions that are to be scheduled. It can be used to perform 31017 cleanup of any actions done by the other scheduling hooks. FILE 31018 is either a null pointer, or a stdio stream to write any debug 31019 output to. VERBOSE is the verbose level provided by 31020 `-fsched-verbose-N'. 31021 31022 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int 31023 VERBOSE, int OLD_MAX_UID) 31024 This hook is executed by the scheduler after function level 31025 initializations. FILE is either a null pointer, or a stdio stream 31026 to write any debug output to. VERBOSE is the verbose level 31027 provided by `-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 31028 uid when scheduling begins. 31029 31030 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 31031 VERBOSE) 31032 This is the cleanup hook corresponding to 31033 `TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 31034 stdio stream to write any debug output to. VERBOSE is the verbose 31035 level provided by `-fsched-verbose-N'. 31036 31037 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 31038 The hook returns an RTL insn. The automaton state used in the 31039 pipeline hazard recognizer is changed as if the insn were scheduled 31040 when the new simulated processor cycle starts. Usage of the hook 31041 may simplify the automaton pipeline description for some VLIW 31042 processors. If the hook is defined, it is used only for the 31043 automaton based pipeline description. The default is not to 31044 change the state when the new simulated processor cycle starts. 31045 31046 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 31047 The hook can be used to initialize data used by the previous hook. 31048 31049 -- Target Hook: rtx TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 31050 The hook is analogous to `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 31051 to changed the state as if the insn were scheduled when the new 31052 simulated processor cycle finishes. 31053 31054 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 31055 The hook is analogous to `TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 31056 used to initialize data used by the previous hook. 31057 31058 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 31059 The hook to notify target that the current simulated cycle is 31060 about to finish. The hook is analogous to 31061 `TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 31062 more complicated situations - e.g., when advancing state on a 31063 single insn is not enough. 31064 31065 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 31066 The hook to notify target that new simulated cycle has just 31067 started. The hook is analogous to 31068 `TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 31069 more complicated situations - e.g., when advancing state on a 31070 single insn is not enough. 31071 31072 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 31073 (void) 31074 This hook controls better choosing an insn from the ready insn 31075 queue for the DFA-based insn scheduler. Usually the scheduler 31076 chooses the first insn from the queue. If the hook returns a 31077 positive value, an additional scheduler code tries all 31078 permutations of `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 31079 ()' subsequent ready insns to choose an insn whose issue will 31080 result in maximal number of issued insns on the same cycle. For 31081 the VLIW processor, the code could actually solve the problem of 31082 packing simple insns into the VLIW insn. Of course, if the rules 31083 of VLIW packing are described in the automaton. 31084 31085 This code also could be used for superscalar RISC processors. Let 31086 us consider a superscalar RISC processor with 3 pipelines. Some 31087 insns can be executed in pipelines A or B, some insns can be 31088 executed only in pipelines B or C, and one insn can be executed in 31089 pipeline B. The processor may issue the 1st insn into A and the 31090 2nd one into B. In this case, the 3rd insn will wait for freeing B 31091 until the next cycle. If the scheduler issues the 3rd insn the 31092 first, the processor could issue all 3 insns per cycle. 31093 31094 Actually this code demonstrates advantages of the automaton based 31095 pipeline hazard recognizer. We try quickly and easy many insn 31096 schedules to choose the best one. 31097 31098 The default is no multipass scheduling. 31099 31100 -- Target Hook: int 31101TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx INSN) 31102 This hook controls what insns from the ready insn queue will be 31103 considered for the multipass insn scheduling. If the hook returns 31104 zero for INSN, the insn will be not chosen to be issued. 31105 31106 The default is that any ready insns can be chosen to be issued. 31107 31108 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 31109 VERBOSE, rtx INSN, int LAST_CLOCK, int CLOCK, int *SORT_P) 31110 This hook is called by the insn scheduler before issuing INSN on 31111 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 31112 this processor cycle. Instead, the processor cycle is advanced. 31113 If *SORT_P is zero, the insn ready queue is not sorted on the new 31114 cycle start as usually. DUMP and VERBOSE specify the file and 31115 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 31116 are, respectively, the processor cycle on which the previous insn 31117 has been issued, and the current processor cycle. 31118 31119 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 31120 *_DEP, int COST, int DISTANCE) 31121 This hook is used to define which dependences are considered 31122 costly by the target, so costly that it is not advisable to 31123 schedule the insns that are involved in the dependence too close 31124 to one another. The parameters to this hook are as follows: The 31125 first parameter _DEP is the dependence being evaluated. The 31126 second parameter COST is the cost of the dependence as estimated 31127 by the scheduler, and the third parameter DISTANCE is the distance 31128 in cycles between the two insns. The hook returns `true' if 31129 considering the distance between the two insns the dependence 31130 between them is considered costly by the target, and `false' 31131 otherwise. 31132 31133 Defining this hook can be useful in multiple-issue out-of-order 31134 machines, where (a) it's practically hopeless to predict the 31135 actual data/resource delays, however: (b) there's a better chance 31136 to predict the actual grouping that will be formed, and (c) 31137 correctly emulating the grouping can be very important. In such 31138 targets one may want to allow issuing dependent insns closer to 31139 one another--i.e., closer than the dependence distance; however, 31140 not in cases of "costly dependences", which this hooks allows to 31141 define. 31142 31143 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 31144 This hook is called by the insn scheduler after emitting a new 31145 instruction to the instruction stream. The hook notifies a target 31146 backend to extend its per instruction data structures. 31147 31148 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 31149 Return a pointer to a store large enough to hold target scheduling 31150 context. 31151 31152 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 31153 CLEAN_P) 31154 Initialize store pointed to by TC to hold target scheduling 31155 context. It CLEAN_P is true then initialize TC as if scheduler is 31156 at the beginning of the block. Otherwise, copy the current 31157 context into TC. 31158 31159 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 31160 Copy target scheduling context pointed to by TC to the current 31161 context. 31162 31163 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 31164 Deallocate internal data in target scheduling context pointed to 31165 by TC. 31166 31167 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 31168 Deallocate a store for target scheduling context pointed to by TC. 31169 31170 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx INSN, int 31171 REQUEST, rtx *NEW_PAT) 31172 This hook is called by the insn scheduler when INSN has only 31173 speculative dependencies and therefore can be scheduled 31174 speculatively. The hook is used to check if the pattern of INSN 31175 has a speculative version and, in case of successful check, to 31176 generate that speculative pattern. The hook should return 1, if 31177 the instruction has a speculative form, or -1, if it doesn't. 31178 REQUEST describes the type of requested speculation. If the 31179 return value equals 1 then NEW_PAT is assigned the generated 31180 speculative pattern. 31181 31182 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (int DEP_STATUS) 31183 This hook is called by the insn scheduler during generation of 31184 recovery code for INSN. It should return `true', if the 31185 corresponding check instruction should branch to recovery code, or 31186 `false' otherwise. 31187 31188 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx INSN, rtx LABEL, 31189 int MUTATE_P) 31190 This hook is called by the insn scheduler to generate a pattern 31191 for recovery check instruction. If MUTATE_P is zero, then INSN is 31192 a speculative instruction for which the check should be generated. 31193 LABEL is either a label of a basic block, where recovery code 31194 should be emitted, or a null pointer, when requested check doesn't 31195 branch to recovery code (a simple check). If MUTATE_P is nonzero, 31196 then a pattern for a branchy check corresponding to a simple check 31197 denoted by INSN should be generated. In this case LABEL can't be 31198 null. 31199 31200 -- Target Hook: bool 31201TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC (const_rtx 31202 INSN) 31203 This hook is used as a workaround for 31204 `TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD' not being 31205 called on the first instruction of the ready list. The hook is 31206 used to discard speculative instructions that stand first in the 31207 ready list from being scheduled on the current cycle. If the hook 31208 returns `false', INSN will not be chosen to be issued. For 31209 non-speculative instructions, the hook should always return 31210 `true'. For example, in the ia64 backend the hook is used to 31211 cancel data speculative insns when the ALAT table is nearly full. 31212 31213 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct 31214 spec_info_def *SPEC_INFO) 31215 This hook is used by the insn scheduler to find out what features 31216 should be enabled/used. The structure *SPEC_INFO should be filled 31217 in by the target. The structure describes speculation types that 31218 can be used in the scheduler. 31219 31220 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 31221 This hook is called by the swing modulo scheduler to calculate a 31222 resource-based lower bound which is based on the resources 31223 available in the machine and the resources required by each 31224 instruction. The target backend can use G to calculate such 31225 bound. A very simple lower bound will be used in case this hook 31226 is not implemented: the total number of instructions divided by 31227 the issue rate. 31228 31229 31230File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 31231 3123217.19 Dividing the Output into Sections (Texts, Data, ...) 31233========================================================== 31234 31235An object file is divided into sections containing different types of 31236data. In the most common case, there are three sections: the "text 31237section", which holds instructions and read-only data; the "data 31238section", which holds initialized writable data; and the "bss section", 31239which holds uninitialized data. Some systems have other kinds of 31240sections. 31241 31242 `varasm.c' provides several well-known sections, such as 31243`text_section', `data_section' and `bss_section'. The normal way of 31244controlling a `FOO_section' variable is to define the associated 31245`FOO_SECTION_ASM_OP' macro, as described below. The macros are only 31246read once, when `varasm.c' initializes itself, so their values must be 31247run-time constants. They may however depend on command-line flags. 31248 31249 _Note:_ Some run-time files, such `crtstuff.c', also make use of the 31250`FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 31251 31252 Some assemblers require a different string to be written every time a 31253section is selected. If your assembler falls into this category, you 31254should define the `TARGET_ASM_INIT_SECTIONS' hook and use 31255`get_unnamed_section' to set up the sections. 31256 31257 You must always create a `text_section', either by defining 31258`TEXT_SECTION_ASM_OP' or by initializing `text_section' in 31259`TARGET_ASM_INIT_SECTIONS'. The same is true of `data_section' and 31260`DATA_SECTION_ASM_OP'. If you do not create a distinct 31261`readonly_data_section', the default is to reuse `text_section'. 31262 31263 All the other `varasm.c' sections are optional, and are null if the 31264target does not provide them. 31265 31266 -- Macro: TEXT_SECTION_ASM_OP 31267 A C expression whose value is a string, including spacing, 31268 containing the assembler operation that should precede 31269 instructions and read-only data. Normally `"\t.text"' is right. 31270 31271 -- Macro: HOT_TEXT_SECTION_NAME 31272 If defined, a C string constant for the name of the section 31273 containing most frequently executed functions of the program. If 31274 not defined, GCC will provide a default definition if the target 31275 supports named sections. 31276 31277 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 31278 If defined, a C string constant for the name of the section 31279 containing unlikely executed functions in the program. 31280 31281 -- Macro: DATA_SECTION_ASM_OP 31282 A C expression whose value is a string, including spacing, 31283 containing the assembler operation to identify the following data 31284 as writable initialized data. Normally `"\t.data"' is right. 31285 31286 -- Macro: SDATA_SECTION_ASM_OP 31287 If defined, a C expression whose value is a string, including 31288 spacing, containing the assembler operation to identify the 31289 following data as initialized, writable small data. 31290 31291 -- Macro: READONLY_DATA_SECTION_ASM_OP 31292 A C expression whose value is a string, including spacing, 31293 containing the assembler operation to identify the following data 31294 as read-only initialized data. 31295 31296 -- Macro: BSS_SECTION_ASM_OP 31297 If defined, a C expression whose value is a string, including 31298 spacing, containing the assembler operation to identify the 31299 following data as uninitialized global data. If not defined, and 31300 neither `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, 31301 uninitialized global data will be output in the data section if 31302 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be 31303 used. 31304 31305 -- Macro: SBSS_SECTION_ASM_OP 31306 If defined, a C expression whose value is a string, including 31307 spacing, containing the assembler operation to identify the 31308 following data as uninitialized, writable small data. 31309 31310 -- Macro: TLS_COMMON_ASM_OP 31311 If defined, a C expression whose value is a string containing the 31312 assembler operation to identify the following data as thread-local 31313 common data. The default is `".tls_common"'. 31314 31315 -- Macro: TLS_SECTION_ASM_FLAG 31316 If defined, a C expression whose value is a character constant 31317 containing the flag used to mark a section as a TLS section. The 31318 default is `'T''. 31319 31320 -- Macro: INIT_SECTION_ASM_OP 31321 If defined, a C expression whose value is a string, including 31322 spacing, containing the assembler operation to identify the 31323 following data as initialization code. If not defined, GCC will 31324 assume such a section does not exist. This section has no 31325 corresponding `init_section' variable; it is used entirely in 31326 runtime code. 31327 31328 -- Macro: FINI_SECTION_ASM_OP 31329 If defined, a C expression whose value is a string, including 31330 spacing, containing the assembler operation to identify the 31331 following data as finalization code. If not defined, GCC will 31332 assume such a section does not exist. This section has no 31333 corresponding `fini_section' variable; it is used entirely in 31334 runtime code. 31335 31336 -- Macro: INIT_ARRAY_SECTION_ASM_OP 31337 If defined, a C expression whose value is a string, including 31338 spacing, containing the assembler operation to identify the 31339 following data as part of the `.init_array' (or equivalent) 31340 section. If not defined, GCC will assume such a section does not 31341 exist. Do not define both this macro and `INIT_SECTION_ASM_OP'. 31342 31343 -- Macro: FINI_ARRAY_SECTION_ASM_OP 31344 If defined, a C expression whose value is a string, including 31345 spacing, containing the assembler operation to identify the 31346 following data as part of the `.fini_array' (or equivalent) 31347 section. If not defined, GCC will assume such a section does not 31348 exist. Do not define both this macro and `FINI_SECTION_ASM_OP'. 31349 31350 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 31351 If defined, an ASM statement that switches to a different section 31352 via SECTION_OP, calls FUNCTION, and switches back to the text 31353 section. This is used in `crtstuff.c' if `INIT_SECTION_ASM_OP' or 31354 `FINI_SECTION_ASM_OP' to calls to initialization and finalization 31355 functions from the init and fini sections. By default, this macro 31356 uses a simple function call. Some ports need hand-crafted 31357 assembly code to avoid dependencies on registers initialized in 31358 the function prologue or to ensure that constant pools don't end 31359 up too far way in the text section. 31360 31361 -- Macro: TARGET_LIBGCC_SDATA_SECTION 31362 If defined, a string which names the section into which small 31363 variables defined in crtstuff and libgcc should go. This is useful 31364 when the target has options for optimizing access to small data, 31365 and you want the crtstuff and libgcc routines to be conservative 31366 in what they expect of your application yet liberal in what your 31367 application expects. For example, for targets with a `.sdata' 31368 section (like MIPS), you could compile crtstuff with `-G 0' so 31369 that it doesn't require small data support from your application, 31370 but use this macro to put small data into `.sdata' so that your 31371 application can access these variables whether it uses small data 31372 or not. 31373 31374 -- Macro: FORCE_CODE_SECTION_ALIGN 31375 If defined, an ASM statement that aligns a code section to some 31376 arbitrary boundary. This is used to force all fragments of the 31377 `.init' and `.fini' sections to have to same alignment and thus 31378 prevent the linker from having to add any padding. 31379 31380 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 31381 Define this macro to be an expression with a nonzero value if jump 31382 tables (for `tablejump' insns) should be output in the text 31383 section, along with the assembler instructions. Otherwise, the 31384 readonly data section is used. 31385 31386 This macro is irrelevant if there is no separate readonly data 31387 section. 31388 31389 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 31390 Define this hook if you need to do something special to set up the 31391 `varasm.c' sections, or if your target has some special sections 31392 of its own that you need to create. 31393 31394 GCC calls this hook after processing the command line, but before 31395 writing any assembly code, and before calling any of the 31396 section-returning hooks described below. 31397 31398 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 31399 Return a mask describing how relocations should be treated when 31400 selecting sections. Bit 1 should be set if global relocations 31401 should be placed in a read-write section; bit 0 should be set if 31402 local relocations should be placed in a read-write section. 31403 31404 The default version of this function returns 3 when `-fpic' is in 31405 effect, and 0 otherwise. The hook is typically redefined when the 31406 target cannot support (some kinds of) dynamic relocations in 31407 read-only sections even in executables. 31408 31409 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 31410 RELOC, unsigned HOST_WIDE_INT ALIGN) 31411 Return the section into which EXP should be placed. You can 31412 assume that EXP is either a `VAR_DECL' node or a constant of some 31413 sort. RELOC indicates whether the initial value of EXP requires 31414 link-time relocations. Bit 0 is set when variable contains local 31415 relocations only, while bit 1 is set for global relocations. 31416 ALIGN is the constant alignment in bits. 31417 31418 The default version of this function takes care of putting 31419 read-only variables in `readonly_data_section'. 31420 31421 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 31422 31423 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 31424 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 31425 called for `FUNCTION_DECL's as well as for variables and constants. 31426 31427 In the case of a `FUNCTION_DECL', RELOC will be zero if the 31428 function has been determined to be likely to be called, and 31429 nonzero if it is unlikely to be called. 31430 31431 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 31432 Build up a unique section name, expressed as a `STRING_CST' node, 31433 and assign it to `DECL_SECTION_NAME (DECL)'. As with 31434 `TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 31435 value of EXP requires link-time relocations. 31436 31437 The default version of this function appends the symbol name to the 31438 ELF section name that would normally be used for the symbol. For 31439 example, the function `foo' would be placed in `.text.foo'. 31440 Whatever the actual target object format, this is often good 31441 enough. 31442 31443 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 31444 DECL) 31445 Return the readonly data section associated with 31446 `DECL_SECTION_NAME (DECL)'. The default version of this function 31447 selects `.gnu.linkonce.r.name' if the function's section is 31448 `.gnu.linkonce.t.name', `.rodata.name' if function is in 31449 `.text.name', and the normal readonly-data section otherwise. 31450 31451 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (enum 31452 machine_mode MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 31453 Return the section into which a constant X, of mode MODE, should 31454 be placed. You can assume that X is some kind of constant in RTL. 31455 The argument MODE is redundant except in the case of a `const_int' 31456 rtx. ALIGN is the constant alignment in bits. 31457 31458 The default version of this function takes care of putting symbolic 31459 constants in `flag_pic' mode in `data_section' and everything else 31460 in `readonly_data_section'. 31461 31462 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, 31463 tree ID) 31464 Define this hook if you need to postprocess the assembler name 31465 generated by target-independent code. The ID provided to this 31466 hook will be the computed name (e.g., the macro `DECL_NAME' of the 31467 DECL in C, or the mangled name of the DECL in C++). The return 31468 value of the hook is an `IDENTIFIER_NODE' for the appropriate 31469 mangled name on your target system. The default implementation of 31470 this hook just returns the ID provided. 31471 31472 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 31473 int NEW_DECL_P) 31474 Define this hook if references to a symbol or a constant must be 31475 treated differently depending on something about the variable or 31476 function named by the symbol (such as what section it is in). 31477 31478 The hook is executed immediately after rtl has been created for 31479 DECL, which may be a variable or function declaration or an entry 31480 in the constant pool. In either case, RTL is the rtl in question. 31481 Do _not_ use `DECL_RTL (DECL)' in this hook; that field may not 31482 have been initialized yet. 31483 31484 In the case of a constant, it is safe to assume that the rtl is a 31485 `mem' whose address is a `symbol_ref'. Most decls will also have 31486 this form, but that is not guaranteed. Global register variables, 31487 for instance, will have a `reg' for their rtl. (Normally the 31488 right thing to do with such unusual rtl is leave it alone.) 31489 31490 The NEW_DECL_P argument will be true if this is the first time 31491 that `TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. 31492 It will be false for subsequent invocations, which will happen for 31493 duplicate declarations. Whether or not anything must be done for 31494 the duplicate declaration depends on whether the hook examines 31495 `DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 31496 called for a constant. 31497 31498 The usual thing for this hook to do is to record flags in the 31499 `symbol_ref', using `SYMBOL_REF_FLAG' or `SYMBOL_REF_FLAGS'. 31500 Historically, the name string was modified if it was necessary to 31501 encode more than one bit of information, but this practice is now 31502 discouraged; use `SYMBOL_REF_FLAGS'. 31503 31504 The default definition of this hook, `default_encode_section_info' 31505 in `varasm.c', sets a number of commonly-useful bits in 31506 `SYMBOL_REF_FLAGS'. Check whether the default does what you need 31507 before overriding it. 31508 31509 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 31510 *NAME) 31511 Decode NAME and return the real name part, sans the characters 31512 that `TARGET_ENCODE_SECTION_INFO' may have added. 31513 31514 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 31515 Returns true if EXP should be placed into a "small data" section. 31516 The default version of this hook always returns false. 31517 31518 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 31519 Contains the value true if the target places read-only "small 31520 data" into a separate section. The default value is false. 31521 31522 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 31523 Returns true if EXP names an object for which name resolution 31524 rules must resolve to the current "module" (dynamic shared library 31525 or executable image). 31526 31527 The default version of this hook implements the name resolution 31528 rules for ELF, which has a looser model of global name binding 31529 than other currently supported object file formats. 31530 31531 -- Target Hook: bool TARGET_HAVE_TLS 31532 Contains the value true if the target supports thread-local 31533 storage. The default value is false. 31534 31535 31536File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 31537 3153817.20 Position Independent Code 31539=============================== 31540 31541This section describes macros that help implement generation of position 31542independent code. Simply defining these macros is not enough to 31543generate valid PIC; you must also add support to the hook 31544`TARGET_LEGITIMATE_ADDRESS_P' and to the macro `PRINT_OPERAND_ADDRESS', 31545as well as `LEGITIMIZE_ADDRESS'. You must modify the definition of 31546`movsi' to do something appropriate when the source operand contains a 31547symbolic address. You may also need to alter the handling of switch 31548statements so that they use relative addresses. 31549 31550 -- Macro: PIC_OFFSET_TABLE_REGNUM 31551 The register number of the register used to address a table of 31552 static data addresses in memory. In some cases this register is 31553 defined by a processor's "application binary interface" (ABI). 31554 When this macro is defined, RTL is generated for this register 31555 once, as with the stack pointer and frame pointer registers. If 31556 this macro is not defined, it is up to the machine-dependent files 31557 to allocate such a register (if necessary). Note that this 31558 register must be fixed when in use (e.g. when `flag_pic' is true). 31559 31560 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 31561 Define this macro if the register defined by 31562 `PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. Do not define 31563 this macro if `PIC_OFFSET_TABLE_REGNUM' is not defined. 31564 31565 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 31566 A C expression that is nonzero if X is a legitimate immediate 31567 operand on the target machine when generating position independent 31568 code. You can assume that X satisfies `CONSTANT_P', so you need 31569 not check this. You can also assume FLAG_PIC is true, so you need 31570 not check it either. You need not define this macro if all 31571 constants (including `SYMBOL_REF') can be immediate operands when 31572 generating position independent code. 31573 31574 31575File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 31576 3157717.21 Defining the Output Assembler Language 31578============================================ 31579 31580This section describes macros whose principal purpose is to describe how 31581to write instructions in assembler language--rather than what the 31582instructions do. 31583 31584* Menu: 31585 31586* File Framework:: Structural information for the assembler file. 31587* Data Output:: Output of constants (numbers, strings, addresses). 31588* Uninitialized Data:: Output of uninitialized variables. 31589* Label Output:: Output and generation of labels. 31590* Initialization:: General principles of initialization 31591 and termination routines. 31592* Macros for Initialization:: 31593 Specific macros that control the handling of 31594 initialization and termination routines. 31595* Instruction Output:: Output of actual instructions. 31596* Dispatch Tables:: Output of jump tables. 31597* Exception Region Output:: Output of exception region code. 31598* Alignment Output:: Pseudo ops for alignment and skipping data. 31599 31600 31601File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 31602 3160317.21.1 The Overall Framework of an Assembler File 31604-------------------------------------------------- 31605 31606This describes the overall framework of an assembly file. 31607 31608 -- Target Hook: void TARGET_ASM_FILE_START (void) 31609 Output to `asm_out_file' any text which the assembler expects to 31610 find at the beginning of a file. The default behavior is 31611 controlled by two flags, documented below. Unless your target's 31612 assembler is quite unusual, if you override the default, you 31613 should call `default_file_start' at some point in your target 31614 hook. This lets other target files rely on these variables. 31615 31616 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 31617 If this flag is true, the text of the macro `ASM_APP_OFF' will be 31618 printed as the very first line in the assembly file, unless 31619 `-fverbose-asm' is in effect. (If that macro has been defined to 31620 the empty string, this variable has no effect.) With the normal 31621 definition of `ASM_APP_OFF', the effect is to notify the GNU 31622 assembler that it need not bother stripping comments or extra 31623 whitespace from its input. This allows it to work a bit faster. 31624 31625 The default is false. You should not set it to true unless you 31626 have verified that your port does not generate any extra 31627 whitespace or comments that will cause GAS to issue errors in 31628 NO_APP mode. 31629 31630 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 31631 If this flag is true, `output_file_directive' will be called for 31632 the primary source file, immediately after printing `ASM_APP_OFF' 31633 (if that is enabled). Most ELF assemblers expect this to be done. 31634 The default is false. 31635 31636 -- Target Hook: void TARGET_ASM_FILE_END (void) 31637 Output to `asm_out_file' any text which the assembler expects to 31638 find at the end of a file. The default is to output nothing. 31639 31640 -- Function: void file_end_indicate_exec_stack () 31641 Some systems use a common convention, the `.note.GNU-stack' 31642 special section, to indicate whether or not an object file relies 31643 on the stack being executable. If your system uses this 31644 convention, you should define `TARGET_ASM_FILE_END' to this 31645 function. If you need to do other things in that hook, have your 31646 hook function call this function. 31647 31648 -- Target Hook: void TARGET_ASM_LTO_START (void) 31649 Output to `asm_out_file' any text which the assembler expects to 31650 find at the start of an LTO section. The default is to output 31651 nothing. 31652 31653 -- Target Hook: void TARGET_ASM_LTO_END (void) 31654 Output to `asm_out_file' any text which the assembler expects to 31655 find at the end of an LTO section. The default is to output 31656 nothing. 31657 31658 -- Target Hook: void TARGET_ASM_CODE_END (void) 31659 Output to `asm_out_file' any text which is needed before emitting 31660 unwind info and debug info at the end of a file. Some targets emit 31661 here PIC setup thunks that cannot be emitted at the end of file, 31662 because they couldn't have unwind info then. The default is to 31663 output nothing. 31664 31665 -- Macro: ASM_COMMENT_START 31666 A C string constant describing how to begin a comment in the target 31667 assembler language. The compiler assumes that the comment will 31668 end at the end of the line. 31669 31670 -- Macro: ASM_APP_ON 31671 A C string constant for text to be output before each `asm' 31672 statement or group of consecutive ones. Normally this is 31673 `"#APP"', which is a comment that has no effect on most assemblers 31674 but tells the GNU assembler that it must check the lines that 31675 follow for all valid assembler constructs. 31676 31677 -- Macro: ASM_APP_OFF 31678 A C string constant for text to be output after each `asm' 31679 statement or group of consecutive ones. Normally this is 31680 `"#NO_APP"', which tells the GNU assembler to resume making the 31681 time-saving assumptions that are valid for ordinary compiler 31682 output. 31683 31684 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 31685 A C statement to output COFF information or DWARF debugging 31686 information which indicates that filename NAME is the current 31687 source file to the stdio stream STREAM. 31688 31689 This macro need not be defined if the standard form of output for 31690 the file format in use is appropriate. 31691 31692 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 31693 A C statement to output the string STRING to the stdio stream 31694 STREAM. If you do not call the function `output_quoted_string' in 31695 your config files, GCC will only call it to output filenames to 31696 the assembler source. So you can use it to canonicalize the format 31697 of the filename using this macro. 31698 31699 -- Macro: ASM_OUTPUT_IDENT (STREAM, STRING) 31700 A C statement to output something to the assembler file to handle a 31701 `#ident' directive containing the text STRING. If this macro is 31702 not defined, nothing is output for a `#ident' directive. 31703 31704 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 31705 unsigned int FLAGS, tree DECL) 31706 Output assembly directives to switch to section NAME. The section 31707 should have attributes as specified by FLAGS, which is a bit mask 31708 of the `SECTION_*' flags defined in `output.h'. If DECL is 31709 non-NULL, it is the `VAR_DECL' or `FUNCTION_DECL' with which this 31710 section is associated. 31711 31712 -- Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 31713 This flag is true if the target supports 31714 `TARGET_ASM_NAMED_SECTION'. 31715 31716 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 31717 This flag is true if we can create zeroed data by switching to a 31718 BSS section and then using `ASM_OUTPUT_SKIP' to allocate the space. 31719 This is true on most ELF targets. 31720 31721 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 31722 const char *NAME, int RELOC) 31723 Choose a set of section attributes for use by 31724 `TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 31725 section name, and whether or not the declaration's initializer may 31726 contain runtime relocations. DECL may be null, in which case 31727 read-write data should be assumed. 31728 31729 The default version of this function handles choosing code vs data, 31730 read-only vs read-write data, and `flag_pic'. You should only 31731 need to override this if your target has special flags that might 31732 be set via `__attribute__'. 31733 31734 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 31735 TYPE, const char *TEXT) 31736 Provides the target with the ability to record the gcc command line 31737 switches that have been passed to the compiler, and options that 31738 are enabled. The TYPE argument specifies what is being recorded. 31739 It can take the following values: 31740 31741 `SWITCH_TYPE_PASSED' 31742 TEXT is a command line switch that has been set by the user. 31743 31744 `SWITCH_TYPE_ENABLED' 31745 TEXT is an option which has been enabled. This might be as a 31746 direct result of a command line switch, or because it is 31747 enabled by default or because it has been enabled as a side 31748 effect of a different command line switch. For example, the 31749 `-O2' switch enables various different individual 31750 optimization passes. 31751 31752 `SWITCH_TYPE_DESCRIPTIVE' 31753 TEXT is either NULL or some descriptive text which should be 31754 ignored. If TEXT is NULL then it is being used to warn the 31755 target hook that either recording is starting or ending. The 31756 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 31757 the warning is for start up and the second time the warning 31758 is for wind down. This feature is to allow the target hook 31759 to make any necessary preparations before it starts to record 31760 switches and to perform any necessary tidying up after it has 31761 finished recording switches. 31762 31763 `SWITCH_TYPE_LINE_START' 31764 This option can be ignored by this target hook. 31765 31766 `SWITCH_TYPE_LINE_END' 31767 This option can be ignored by this target hook. 31768 31769 The hook's return value must be zero. Other return values may be 31770 supported in the future. 31771 31772 By default this hook is set to NULL, but an example implementation 31773 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 31774 it records the switches as ASCII text inside a new, string 31775 mergeable section in the assembler output file. The name of the 31776 new section is provided by the 31777 `TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 31778 31779 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 31780 This is the name of the section that will be created by the example 31781 ELF implementation of the `TARGET_ASM_RECORD_GCC_SWITCHES' target 31782 hook. 31783 31784 31785File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 31786 3178717.21.2 Output of Data 31788---------------------- 31789 31790 -- Target Hook: const char * TARGET_ASM_BYTE_OP 31791 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 31792 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 31793 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 31794 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 31795 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 31796 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 31797 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 31798 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 31799 These hooks specify assembly directives for creating certain kinds 31800 of integer object. The `TARGET_ASM_BYTE_OP' directive creates a 31801 byte-sized object, the `TARGET_ASM_ALIGNED_HI_OP' one creates an 31802 aligned two-byte object, and so on. Any of the hooks may be 31803 `NULL', indicating that no suitable directive is available. 31804 31805 The compiler will print these strings at the start of a new line, 31806 followed immediately by the object's initial value. In most cases, 31807 the string should contain a tab, a pseudo-op, and then another tab. 31808 31809 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 31810 ALIGNED_P) 31811 The `assemble_integer' function uses this hook to output an 31812 integer object. X is the object's value, SIZE is its size in 31813 bytes and ALIGNED_P indicates whether it is aligned. The function 31814 should return `true' if it was able to output the object. If it 31815 returns false, `assemble_integer' will try to split the object 31816 into smaller parts. 31817 31818 The default implementation of this hook will use the 31819 `TARGET_ASM_BYTE_OP' family of strings, returning `false' when the 31820 relevant string is `NULL'. 31821 31822 -- Macro: OUTPUT_ADDR_CONST_EXTRA (STREAM, X, FAIL) 31823 A C statement to recognize RTX patterns that `output_addr_const' 31824 can't deal with, and output assembly code to STREAM corresponding 31825 to the pattern X. This may be used to allow machine-dependent 31826 `UNSPEC's to appear within constants. 31827 31828 If `OUTPUT_ADDR_CONST_EXTRA' fails to recognize a pattern, it must 31829 `goto fail', so that a standard error message is printed. If it 31830 prints an error message itself, by calling, for example, 31831 `output_operand_lossage', it may just complete normally. 31832 31833 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 31834 A C statement to output to the stdio stream STREAM an assembler 31835 instruction to assemble a string constant containing the LEN bytes 31836 at PTR. PTR will be a C expression of type `char *' and LEN a C 31837 expression of type `int'. 31838 31839 If the assembler has a `.ascii' pseudo-op as found in the Berkeley 31840 Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'. 31841 31842 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 31843 A C statement to output word N of a function descriptor for DECL. 31844 This must be defined if `TARGET_VTABLE_USES_DESCRIPTORS' is 31845 defined, and is otherwise unused. 31846 31847 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 31848 You may define this macro as a C expression. You should define the 31849 expression to have a nonzero value if GCC should output the 31850 constant pool for a function before the code for the function, or 31851 a zero value if GCC should output the constant pool after the 31852 function. If you do not define this macro, the usual case, GCC 31853 will output the constant pool before the function. 31854 31855 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 31856 A C statement to output assembler commands to define the start of 31857 the constant pool for a function. FUNNAME is a string giving the 31858 name of the function. Should the return type of the function be 31859 required, it can be obtained via FUNDECL. SIZE is the size, in 31860 bytes, of the constant pool that will be written immediately after 31861 this call. 31862 31863 If no constant-pool prefix is required, the usual case, this macro 31864 need not be defined. 31865 31866 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, 31867 LABELNO, JUMPTO) 31868 A C statement (with or without semicolon) to output a constant in 31869 the constant pool, if it needs special treatment. (This macro 31870 need not do anything for RTL expressions that can be output 31871 normally.) 31872 31873 The argument FILE is the standard I/O stream to output the 31874 assembler code on. X is the RTL expression for the constant to 31875 output, and MODE is the machine mode (in case X is a `const_int'). 31876 ALIGN is the required alignment for the value X; you should output 31877 an assembler directive to force this much alignment. 31878 31879 The argument LABELNO is a number to use in an internal label for 31880 the address of this pool entry. The definition of this macro is 31881 responsible for outputting the label definition at the proper 31882 place. Here is how to do this: 31883 31884 `(*targetm.asm_out.internal_label)' (FILE, "LC", LABELNO); 31885 31886 When you output a pool entry specially, you should end with a 31887 `goto' to the label JUMPTO. This will prevent the same pool entry 31888 from being output a second time in the usual manner. 31889 31890 You need not define this macro if it would do nothing. 31891 31892 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 31893 A C statement to output assembler commands to at the end of the 31894 constant pool for a function. FUNNAME is a string giving the name 31895 of the function. Should the return type of the function be 31896 required, you can obtain it via FUNDECL. SIZE is the size, in 31897 bytes, of the constant pool that GCC wrote immediately before this 31898 call. 31899 31900 If no constant-pool epilogue is required, the usual case, you need 31901 not define this macro. 31902 31903 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 31904 Define this macro as a C expression which is nonzero if C is used 31905 as a logical line separator by the assembler. STR points to the 31906 position in the string where C was found; this can be used if a 31907 line separator uses multiple characters. 31908 31909 If you do not define this macro, the default is that only the 31910 character `;' is treated as a logical line separator. 31911 31912 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 31913 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 31914 These target hooks are C string constants, describing the syntax 31915 in the assembler for grouping arithmetic expressions. If not 31916 overridden, they default to normal parentheses, which is correct 31917 for most assemblers. 31918 31919 These macros are provided by `real.h' for writing the definitions of 31920`ASM_OUTPUT_DOUBLE' and the like: 31921 31922 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 31923 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 31924 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 31925 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 31926 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 31927 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 31928 These translate X, of type `REAL_VALUE_TYPE', to the target's 31929 floating point representation, and store its bit pattern in the 31930 variable L. For `REAL_VALUE_TO_TARGET_SINGLE' and 31931 `REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 31932 `long int'. For the others, it should be an array of `long int'. 31933 The number of elements in this array is determined by the size of 31934 the desired target floating point data type: 32 bits of it go in 31935 each `long int' array element. Each array element holds 32 bits 31936 of the result, even if `long int' is wider than 32 bits on the 31937 host machine. 31938 31939 The array element values are designed so that you can print them 31940 out using `fprintf' in the order they should appear in the target 31941 machine's memory. 31942 31943 31944File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 31945 3194617.21.3 Output of Uninitialized Variables 31947----------------------------------------- 31948 31949Each of the macros in this section is used to do the whole job of 31950outputting a single uninitialized variable. 31951 31952 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 31953 A C statement (sans semicolon) to output to the stdio stream 31954 STREAM the assembler definition of a common-label named NAME whose 31955 size is SIZE bytes. The variable ROUNDED is the size rounded up 31956 to whatever alignment the caller wants. It is possible that SIZE 31957 may be zero, for instance if a struct with no other member than a 31958 zero-length array is defined. In this case, the backend must 31959 output a symbol definition that allocates at least one byte, both 31960 so that the address of the resulting object does not compare equal 31961 to any other, and because some object formats cannot even express 31962 the concept of a zero-sized common symbol, as that is how they 31963 represent an ordinary undefined external. 31964 31965 Use the expression `assemble_name (STREAM, NAME)' to output the 31966 name itself; before and after that, output the additional 31967 assembler syntax for defining the name, and a newline. 31968 31969 This macro controls how the assembler definitions of uninitialized 31970 common global variables are output. 31971 31972 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 31973 Like `ASM_OUTPUT_COMMON' except takes the required alignment as a 31974 separate, explicit argument. If you define this macro, it is used 31975 in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in 31976 handling the required alignment of the variable. The alignment is 31977 specified as the number of bits. 31978 31979 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 31980 ALIGNMENT) 31981 Like `ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 31982 to be output, if there is one, or `NULL_TREE' if there is no 31983 corresponding variable. If you define this macro, GCC will use it 31984 in place of both `ASM_OUTPUT_COMMON' and 31985 `ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 31986 see the variable's decl in order to chose what to output. 31987 31988 -- Macro: ASM_OUTPUT_BSS (STREAM, DECL, NAME, SIZE, ROUNDED) 31989 A C statement (sans semicolon) to output to the stdio stream 31990 STREAM the assembler definition of uninitialized global DECL named 31991 NAME whose size is SIZE bytes. The variable ROUNDED is the size 31992 rounded up to whatever alignment the caller wants. 31993 31994 Try to use function `asm_output_bss' defined in `varasm.c' when 31995 defining this macro. If unable, use the expression `assemble_name 31996 (STREAM, NAME)' to output the name itself; before and after that, 31997 output the additional assembler syntax for defining the name, and 31998 a newline. 31999 32000 There are two ways of handling global BSS. One is to define either 32001 this macro or its aligned counterpart, `ASM_OUTPUT_ALIGNED_BSS'. 32002 The other is to have `TARGET_ASM_SELECT_SECTION' return a 32003 switchable BSS section (*note 32004 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 32005 both. 32006 32007 Some languages do not have `common' data, and require a non-common 32008 form of global BSS in order to handle uninitialized globals 32009 efficiently. C++ is one example of this. However, if the target 32010 does not support global BSS, the front end may choose to make 32011 globals common in order to save space in the object file. 32012 32013 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 32014 Like `ASM_OUTPUT_BSS' except takes the required alignment as a 32015 separate, explicit argument. If you define this macro, it is used 32016 in place of `ASM_OUTPUT_BSS', and gives you more flexibility in 32017 handling the required alignment of the variable. The alignment is 32018 specified as the number of bits. 32019 32020 Try to use function `asm_output_aligned_bss' defined in file 32021 `varasm.c' when defining this macro. 32022 32023 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 32024 A C statement (sans semicolon) to output to the stdio stream 32025 STREAM the assembler definition of a local-common-label named NAME 32026 whose size is SIZE bytes. The variable ROUNDED is the size 32027 rounded up to whatever alignment the caller wants. 32028 32029 Use the expression `assemble_name (STREAM, NAME)' to output the 32030 name itself; before and after that, output the additional 32031 assembler syntax for defining the name, and a newline. 32032 32033 This macro controls how the assembler definitions of uninitialized 32034 static variables are output. 32035 32036 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 32037 Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a 32038 separate, explicit argument. If you define this macro, it is used 32039 in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in 32040 handling the required alignment of the variable. The alignment is 32041 specified as the number of bits. 32042 32043 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 32044 ALIGNMENT) 32045 Like `ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 32046 be output, if there is one, or `NULL_TREE' if there is no 32047 corresponding variable. If you define this macro, GCC will use it 32048 in place of both `ASM_OUTPUT_DECL' and `ASM_OUTPUT_ALIGNED_DECL'. 32049 Define this macro when you need to see the variable's decl in 32050 order to chose what to output. 32051 32052 32053File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 32054 3205517.21.4 Output and Generation of Labels 32056--------------------------------------- 32057 32058This is about outputting labels. 32059 32060 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 32061 A C statement (sans semicolon) to output to the stdio stream 32062 STREAM the assembler definition of a label named NAME. Use the 32063 expression `assemble_name (STREAM, NAME)' to output the name 32064 itself; before and after that, output the additional assembler 32065 syntax for defining the name, and a newline. A default definition 32066 of this macro is provided which is correct for most systems. 32067 32068 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 32069 Identical to `ASM_OUTPUT_LABEL', except that NAME is known to 32070 refer to a compiler-generated label. The default definition uses 32071 `assemble_name_raw', which is like `assemble_name' except that it 32072 is more efficient. 32073 32074 -- Macro: SIZE_ASM_OP 32075 A C string containing the appropriate assembler directive to 32076 specify the size of a symbol, without any arguments. On systems 32077 that use ELF, the default (in `config/elfos.h') is `"\t.size\t"'; 32078 on other systems, the default is not to define this macro. 32079 32080 Define this macro only if it is correct to use the default 32081 definitions of `ASM_OUTPUT_SIZE_DIRECTIVE' and 32082 `ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 32083 custom definitions of those macros, or if you do not need explicit 32084 symbol sizes at all, do not define this macro. 32085 32086 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 32087 A C statement (sans semicolon) to output to the stdio stream 32088 STREAM a directive telling the assembler that the size of the 32089 symbol NAME is SIZE. SIZE is a `HOST_WIDE_INT'. If you define 32090 `SIZE_ASM_OP', a default definition of this macro is provided. 32091 32092 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 32093 A C statement (sans semicolon) to output to the stdio stream 32094 STREAM a directive telling the assembler to calculate the size of 32095 the symbol NAME by subtracting its address from the current 32096 address. 32097 32098 If you define `SIZE_ASM_OP', a default definition of this macro is 32099 provided. The default assumes that the assembler recognizes a 32100 special `.' symbol as referring to the current address, and can 32101 calculate the difference between this and another symbol. If your 32102 assembler does not recognize `.' or cannot do calculations with 32103 it, you will need to redefine `ASM_OUTPUT_MEASURED_SIZE' to use 32104 some other technique. 32105 32106 -- Macro: TYPE_ASM_OP 32107 A C string containing the appropriate assembler directive to 32108 specify the type of a symbol, without any arguments. On systems 32109 that use ELF, the default (in `config/elfos.h') is `"\t.type\t"'; 32110 on other systems, the default is not to define this macro. 32111 32112 Define this macro only if it is correct to use the default 32113 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 32114 need your own custom definition of this macro, or if you do not 32115 need explicit symbol types at all, do not define this macro. 32116 32117 -- Macro: TYPE_OPERAND_FMT 32118 A C string which specifies (using `printf' syntax) the format of 32119 the second operand to `TYPE_ASM_OP'. On systems that use ELF, the 32120 default (in `config/elfos.h') is `"@%s"'; on other systems, the 32121 default is not to define this macro. 32122 32123 Define this macro only if it is correct to use the default 32124 definition of `ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 32125 need your own custom definition of this macro, or if you do not 32126 need explicit symbol types at all, do not define this macro. 32127 32128 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 32129 A C statement (sans semicolon) to output to the stdio stream 32130 STREAM a directive telling the assembler that the type of the 32131 symbol NAME is TYPE. TYPE is a C string; currently, that string 32132 is always either `"function"' or `"object"', but you should not 32133 count on this. 32134 32135 If you define `TYPE_ASM_OP' and `TYPE_OPERAND_FMT', a default 32136 definition of this macro is provided. 32137 32138 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 32139 A C statement (sans semicolon) to output to the stdio stream 32140 STREAM any text necessary for declaring the name NAME of a 32141 function which is being defined. This macro is responsible for 32142 outputting the label definition (perhaps using 32143 `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL' 32144 tree node representing the function. 32145 32146 If this macro is not defined, then the function name is defined in 32147 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 32148 32149 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 32150 of this macro. 32151 32152 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 32153 A C statement (sans semicolon) to output to the stdio stream 32154 STREAM any text necessary for declaring the size of a function 32155 which is being defined. The argument NAME is the name of the 32156 function. The argument DECL is the `FUNCTION_DECL' tree node 32157 representing the function. 32158 32159 If this macro is not defined, then the function size is not 32160 defined. 32161 32162 You may wish to use `ASM_OUTPUT_MEASURED_SIZE' in the definition 32163 of this macro. 32164 32165 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 32166 A C statement (sans semicolon) to output to the stdio stream 32167 STREAM any text necessary for declaring the name NAME of an 32168 initialized variable which is being defined. This macro must 32169 output the label definition (perhaps using `ASM_OUTPUT_LABEL'). 32170 The argument DECL is the `VAR_DECL' tree node representing the 32171 variable. 32172 32173 If this macro is not defined, then the variable name is defined in 32174 the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 32175 32176 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' and/or 32177 `ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 32178 32179 -- Macro: ASM_DECLARE_CONSTANT_NAME (STREAM, NAME, EXP, SIZE) 32180 A C statement (sans semicolon) to output to the stdio stream 32181 STREAM any text necessary for declaring the name NAME of a 32182 constant which is being defined. This macro is responsible for 32183 outputting the label definition (perhaps using 32184 `ASM_OUTPUT_LABEL'). The argument EXP is the value of the 32185 constant, and SIZE is the size of the constant in bytes. NAME 32186 will be an internal label. 32187 32188 If this macro is not defined, then the NAME is defined in the 32189 usual manner as a label (by means of `ASM_OUTPUT_LABEL'). 32190 32191 You may wish to use `ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 32192 of this macro. 32193 32194 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 32195 A C statement (sans semicolon) to output to the stdio stream 32196 STREAM any text necessary for claiming a register REGNO for a 32197 global variable DECL with name NAME. 32198 32199 If you don't define this macro, that is equivalent to defining it 32200 to do nothing. 32201 32202 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 32203 A C statement (sans semicolon) to finish up declaring a variable 32204 name once the compiler has processed its initializer fully and 32205 thus has had a chance to determine the size of an array when 32206 controlled by an initializer. This is used on systems where it's 32207 necessary to declare something about the size of the object. 32208 32209 If you don't define this macro, that is equivalent to defining it 32210 to do nothing. 32211 32212 You may wish to use `ASM_OUTPUT_SIZE_DIRECTIVE' and/or 32213 `ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 32214 32215 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 32216 char *NAME) 32217 This target hook is a function to output to the stdio stream 32218 STREAM some commands that will make the label NAME global; that 32219 is, available for reference from other files. 32220 32221 The default implementation relies on a proper definition of 32222 `GLOBAL_ASM_OP'. 32223 32224 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, 32225 tree DECL) 32226 This target hook is a function to output to the stdio stream 32227 STREAM some commands that will make the name associated with DECL 32228 global; that is, available for reference from other files. 32229 32230 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 32231 target hook. 32232 32233 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 32234 A C statement (sans semicolon) to output to the stdio stream 32235 STREAM some commands that will make the label NAME weak; that is, 32236 available for reference from other files but only used if no other 32237 definition is available. Use the expression `assemble_name 32238 (STREAM, NAME)' to output the name itself; before and after that, 32239 output the additional assembler syntax for making that name weak, 32240 and a newline. 32241 32242 If you don't define this macro or `ASM_WEAKEN_DECL', GCC will not 32243 support weak symbols and you should not define the `SUPPORTS_WEAK' 32244 macro. 32245 32246 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 32247 Combines (and replaces) the function of `ASM_WEAKEN_LABEL' and 32248 `ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 32249 or variable decl. If VALUE is not `NULL', this C statement should 32250 output to the stdio stream STREAM assembler code which defines 32251 (equates) the weak symbol NAME to have the value VALUE. If VALUE 32252 is `NULL', it should output commands to make NAME weak. 32253 32254 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 32255 Outputs a directive that enables NAME to be used to refer to 32256 symbol VALUE with weak-symbol semantics. `decl' is the 32257 declaration of `name'. 32258 32259 -- Macro: SUPPORTS_WEAK 32260 A C expression which evaluates to true if the target supports weak 32261 symbols. 32262 32263 If you don't define this macro, `defaults.h' provides a default 32264 definition. If either `ASM_WEAKEN_LABEL' or `ASM_WEAKEN_DECL' is 32265 defined, the default definition is `1'; otherwise, it is `0'. 32266 Define this macro if you want to control weak symbol support with 32267 a compiler flag such as `-melf'. 32268 32269 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 32270 A C statement (sans semicolon) to mark DECL to be emitted as a 32271 public symbol such that extra copies in multiple translation units 32272 will be discarded by the linker. Define this macro if your object 32273 file format provides support for this concept, such as the `COMDAT' 32274 section flags in the Microsoft Windows PE/COFF format, and this 32275 support requires changes to DECL, such as putting it in a separate 32276 section. 32277 32278 -- Macro: SUPPORTS_ONE_ONLY 32279 A C expression which evaluates to true if the target supports 32280 one-only semantics. 32281 32282 If you don't define this macro, `varasm.c' provides a default 32283 definition. If `MAKE_DECL_ONE_ONLY' is defined, the default 32284 definition is `1'; otherwise, it is `0'. Define this macro if you 32285 want to control one-only symbol support with a compiler flag, or if 32286 setting the `DECL_ONE_ONLY' flag is enough to mark a declaration to 32287 be emitted as one-only. 32288 32289 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 32290 VISIBILITY) 32291 This target hook is a function to output to ASM_OUT_FILE some 32292 commands that will make the symbol(s) associated with DECL have 32293 hidden, protected or internal visibility as specified by 32294 VISIBILITY. 32295 32296 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 32297 A C expression that evaluates to true if the target's linker 32298 expects that weak symbols do not appear in a static archive's 32299 table of contents. The default is `0'. 32300 32301 Leaving weak symbols out of an archive's table of contents means 32302 that, if a symbol will only have a definition in one translation 32303 unit and will have undefined references from other translation 32304 units, that symbol should not be weak. Defining this macro to be 32305 nonzero will thus have the effect that certain symbols that would 32306 normally be weak (explicit template instantiations, and vtables 32307 for polymorphic classes with noninline key methods) will instead 32308 be nonweak. 32309 32310 The C++ ABI requires this macro to be zero. Define this macro for 32311 targets where full C++ ABI compliance is impossible and where 32312 linker restrictions require weak symbols to be left out of a 32313 static archive's table of contents. 32314 32315 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 32316 A C statement (sans semicolon) to output to the stdio stream 32317 STREAM any text necessary for declaring the name of an external 32318 symbol named NAME which is referenced in this compilation but not 32319 defined. The value of DECL is the tree node for the declaration. 32320 32321 This macro need not be defined if it does not need to output 32322 anything. The GNU assembler and most Unix assemblers don't 32323 require anything. 32324 32325 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 32326 This target hook is a function to output to ASM_OUT_FILE an 32327 assembler pseudo-op to declare a library function name external. 32328 The name of the library function is given by SYMREF, which is a 32329 `symbol_ref'. 32330 32331 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 32332 *SYMBOL) 32333 This target hook is a function to output to ASM_OUT_FILE an 32334 assembler directive to annotate SYMBOL as used. The Darwin target 32335 uses the .no_dead_code_strip directive. 32336 32337 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 32338 A C statement (sans semicolon) to output to the stdio stream 32339 STREAM a reference in assembler syntax to a label named NAME. 32340 This should add `_' to the front of the name, if that is customary 32341 on your operating system, as it is in most Berkeley Unix systems. 32342 This macro is used in `assemble_name'. 32343 32344 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 32345 A C statement (sans semicolon) to output a reference to 32346 `SYMBOL_REF' SYM. If not defined, `assemble_name' will be used to 32347 output the name of the symbol. This macro may be used to modify 32348 the way a symbol is referenced depending on information encoded by 32349 `TARGET_ENCODE_SECTION_INFO'. 32350 32351 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 32352 A C statement (sans semicolon) to output a reference to BUF, the 32353 result of `ASM_GENERATE_INTERNAL_LABEL'. If not defined, 32354 `assemble_name' will be used to output the name of the symbol. 32355 This macro is not used by `output_asm_label', or the `%l' 32356 specifier that calls it; the intention is that this macro should 32357 be set when it is necessary to output a label differently when its 32358 address is being taken. 32359 32360 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 32361 char *PREFIX, unsigned long LABELNO) 32362 A function to output to the stdio stream STREAM a label whose name 32363 is made from the string PREFIX and the number LABELNO. 32364 32365 It is absolutely essential that these labels be distinct from the 32366 labels used for user-level functions and variables. Otherwise, 32367 certain programs will have name conflicts with internal labels. 32368 32369 It is desirable to exclude internal labels from the symbol table 32370 of the object file. Most assemblers have a naming convention for 32371 labels that should be excluded; on many systems, the letter `L' at 32372 the beginning of a label has this effect. You should find out what 32373 convention your system uses, and follow it. 32374 32375 The default version of this function utilizes 32376 `ASM_GENERATE_INTERNAL_LABEL'. 32377 32378 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 32379 A C statement to output to the stdio stream STREAM a debug info 32380 label whose name is made from the string PREFIX and the number 32381 NUM. This is useful for VLIW targets, where debug info labels may 32382 need to be treated differently than branch target labels. On some 32383 systems, branch target labels must be at the beginning of 32384 instruction bundles, but debug info labels can occur in the middle 32385 of instruction bundles. 32386 32387 If this macro is not defined, then 32388 `(*targetm.asm_out.internal_label)' will be used. 32389 32390 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 32391 A C statement to store into the string STRING a label whose name 32392 is made from the string PREFIX and the number NUM. 32393 32394 This string, when output subsequently by `assemble_name', should 32395 produce the output that `(*targetm.asm_out.internal_label)' would 32396 produce with the same PREFIX and NUM. 32397 32398 If the string begins with `*', then `assemble_name' will output 32399 the rest of the string unchanged. It is often convenient for 32400 `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way. If the 32401 string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to 32402 output the string, and may change it. (Of course, 32403 `ASM_OUTPUT_LABELREF' is also part of your machine description, so 32404 you should know what it does on your machine.) 32405 32406 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 32407 A C expression to assign to OUTVAR (which is a variable of type 32408 `char *') a newly allocated string made from the string NAME and 32409 the number NUMBER, with some suitable punctuation added. Use 32410 `alloca' to get space for the string. 32411 32412 The string will be used as an argument to `ASM_OUTPUT_LABELREF' to 32413 produce an assembler label for an internal static variable whose 32414 name is NAME. Therefore, the string must be such as to result in 32415 valid assembler code. The argument NUMBER is different each time 32416 this macro is executed; it prevents conflicts between 32417 similarly-named internal static variables in different scopes. 32418 32419 Ideally this string should not be a valid C identifier, to prevent 32420 any conflict with the user's own symbols. Most assemblers allow 32421 periods or percent signs in assembler symbols; putting at least 32422 one of these between the name and the number will suffice. 32423 32424 If this macro is not defined, a default definition will be provided 32425 which is correct for most systems. 32426 32427 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 32428 A C statement to output to the stdio stream STREAM assembler code 32429 which defines (equates) the symbol NAME to have the value VALUE. 32430 32431 If `SET_ASM_OP' is defined, a default definition is provided which 32432 is correct for most systems. 32433 32434 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 32435 DECL_OF_VALUE) 32436 A C statement to output to the stdio stream STREAM assembler code 32437 which defines (equates) the symbol whose tree node is DECL_OF_NAME 32438 to have the value of the tree node DECL_OF_VALUE. This macro will 32439 be used in preference to `ASM_OUTPUT_DEF' if it is defined and if 32440 the tree nodes are available. 32441 32442 If `SET_ASM_OP' is defined, a default definition is provided which 32443 is correct for most systems. 32444 32445 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 32446 A C statement that evaluates to true if the assembler code which 32447 defines (equates) the symbol whose tree node is DECL_OF_NAME to 32448 have the value of the tree node DECL_OF_VALUE should be emitted 32449 near the end of the current compilation unit. The default is to 32450 not defer output of defines. This macro affects defines output by 32451 `ASM_OUTPUT_DEF' and `ASM_OUTPUT_DEF_FROM_DECLS'. 32452 32453 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 32454 A C statement to output to the stdio stream STREAM assembler code 32455 which defines (equates) the weak symbol NAME to have the value 32456 VALUE. If VALUE is `NULL', it defines NAME as an undefined weak 32457 symbol. 32458 32459 Define this macro if the target only supports weak aliases; define 32460 `ASM_OUTPUT_DEF' instead if possible. 32461 32462 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 32463 SEL_NAME) 32464 Define this macro to override the default assembler names used for 32465 Objective-C methods. 32466 32467 The default name is a unique method number followed by the name of 32468 the class (e.g. `_1_Foo'). For methods in categories, the name of 32469 the category is also included in the assembler name (e.g. 32470 `_1_Foo_Bar'). 32471 32472 These names are safe on most systems, but make debugging difficult 32473 since the method's selector is not present in the name. 32474 Therefore, particular systems define other ways of computing names. 32475 32476 BUF is an expression of type `char *' which gives you a buffer in 32477 which to store the name; its length is as long as CLASS_NAME, 32478 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 32479 32480 The argument IS_INST specifies whether the method is an instance 32481 method or a class method; CLASS_NAME is the name of the class; 32482 CAT_NAME is the name of the category (or `NULL' if the method is 32483 not in a category); and SEL_NAME is the name of the selector. 32484 32485 On systems where the assembler can handle quoted names, you can 32486 use this macro to provide more human-readable names. 32487 32488 -- Macro: ASM_DECLARE_CLASS_REFERENCE (STREAM, NAME) 32489 A C statement (sans semicolon) to output to the stdio stream 32490 STREAM commands to declare that the label NAME is an Objective-C 32491 class reference. This is only needed for targets whose linkers 32492 have special support for NeXT-style runtimes. 32493 32494 -- Macro: ASM_DECLARE_UNRESOLVED_REFERENCE (STREAM, NAME) 32495 A C statement (sans semicolon) to output to the stdio stream 32496 STREAM commands to declare that the label NAME is an unresolved 32497 Objective-C class reference. This is only needed for targets 32498 whose linkers have special support for NeXT-style runtimes. 32499 32500 32501File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 32502 3250317.21.5 How Initialization Functions Are Handled 32504------------------------------------------------ 32505 32506The compiled code for certain languages includes "constructors" (also 32507called "initialization routines")--functions to initialize data in the 32508program when the program is started. These functions need to be called 32509before the program is "started"--that is to say, before `main' is 32510called. 32511 32512 Compiling some languages generates "destructors" (also called 32513"termination routines") that should be called when the program 32514terminates. 32515 32516 To make the initialization and termination functions work, the compiler 32517must output something in the assembler code to cause those functions to 32518be called at the appropriate time. When you port the compiler to a new 32519system, you need to specify how to do this. 32520 32521 There are two major ways that GCC currently supports the execution of 32522initialization and termination functions. Each way has two variants. 32523Much of the structure is common to all four variations. 32524 32525 The linker must build two lists of these functions--a list of 32526initialization functions, called `__CTOR_LIST__', and a list of 32527termination functions, called `__DTOR_LIST__'. 32528 32529 Each list always begins with an ignored function pointer (which may 32530hold 0, -1, or a count of the function pointers after it, depending on 32531the environment). This is followed by a series of zero or more function 32532pointers to constructors (or destructors), followed by a function 32533pointer containing zero. 32534 32535 Depending on the operating system and its executable file format, 32536either `crtstuff.c' or `libgcc2.c' traverses these lists at startup 32537time and exit time. Constructors are called in reverse order of the 32538list; destructors in forward order. 32539 32540 The best way to handle static constructors works only for object file 32541formats which provide arbitrarily-named sections. A section is set 32542aside for a list of constructors, and another for a list of destructors. 32543Traditionally these are called `.ctors' and `.dtors'. Each object file 32544that defines an initialization function also puts a word in the 32545constructor section to point to that function. The linker accumulates 32546all these words into one contiguous `.ctors' section. Termination 32547functions are handled similarly. 32548 32549 This method will be chosen as the default by `target-def.h' if 32550`TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 32551arbitrary sections, but does support special designated constructor and 32552destructor sections may define `CTORS_SECTION_ASM_OP' and 32553`DTORS_SECTION_ASM_OP' to achieve the same effect. 32554 32555 When arbitrary sections are available, there are two variants, 32556depending upon how the code in `crtstuff.c' is called. On systems that 32557support a ".init" section which is executed at program startup, parts 32558of `crtstuff.c' are compiled into that section. The program is linked 32559by the `gcc' driver like this: 32560 32561 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 32562 32563 The prologue of a function (`__init') appears in the `.init' section 32564of `crti.o'; the epilogue appears in `crtn.o'. Likewise for the 32565function `__fini' in the ".fini" section. Normally these files are 32566provided by the operating system or by the GNU C library, but are 32567provided by GCC for a few targets. 32568 32569 The objects `crtbegin.o' and `crtend.o' are (for most targets) 32570compiled from `crtstuff.c'. They contain, among other things, code 32571fragments within the `.init' and `.fini' sections that branch to 32572routines in the `.text' section. The linker will pull all parts of a 32573section together, which results in a complete `__init' function that 32574invokes the routines we need at startup. 32575 32576 To use this variant, you must define the `INIT_SECTION_ASM_OP' macro 32577properly. 32578 32579 If no init section is available, when GCC compiles any function called 32580`main' (or more accurately, any function designated as a program entry 32581point by the language front end calling `expand_main_function'), it 32582inserts a procedure call to `__main' as the first executable code after 32583the function prologue. The `__main' function is defined in `libgcc2.c' 32584and runs the global constructors. 32585 32586 In file formats that don't support arbitrary sections, there are again 32587two variants. In the simplest variant, the GNU linker (GNU `ld') and 32588an `a.out' format must be used. In this case, `TARGET_ASM_CONSTRUCTOR' 32589is defined to produce a `.stabs' entry of type `N_SETT', referencing 32590the name `__CTOR_LIST__', and with the address of the void function 32591containing the initialization code as its value. The GNU linker 32592recognizes this as a request to add the value to a "set"; the values 32593are accumulated, and are eventually placed in the executable as a 32594vector in the format described above, with a leading (ignored) count 32595and a trailing zero element. `TARGET_ASM_DESTRUCTOR' is handled 32596similarly. Since no init section is available, the absence of 32597`INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main' 32598as above, starting the initialization process. 32599 32600 The last variant uses neither arbitrary sections nor the GNU linker. 32601This is preferable when you want to do dynamic linking and when using 32602file formats which the GNU linker does not support, such as `ECOFF'. In 32603this case, `TARGET_HAVE_CTORS_DTORS' is false, initialization and 32604termination functions are recognized simply by their names. This 32605requires an extra program in the linkage step, called `collect2'. This 32606program pretends to be the linker, for use with GCC; it does its job by 32607running the ordinary linker, but also arranges to include the vectors of 32608initialization and termination functions. These functions are called 32609via `__main' as described above. In order to use this method, 32610`use_collect2' must be defined in the target in `config.gcc'. 32611 32612 The following section describes the specific macros that control and 32613customize the handling of initialization and termination functions. 32614 32615 32616File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 32617 3261817.21.6 Macros Controlling Initialization Routines 32619-------------------------------------------------- 32620 32621Here are the macros that control how the compiler handles initialization 32622and termination functions: 32623 32624 -- Macro: INIT_SECTION_ASM_OP 32625 If defined, a C string constant, including spacing, for the 32626 assembler operation to identify the following data as 32627 initialization code. If not defined, GCC will assume such a 32628 section does not exist. When you are using special sections for 32629 initialization and termination functions, this macro also controls 32630 how `crtstuff.c' and `libgcc2.c' arrange to run the initialization 32631 functions. 32632 32633 -- Macro: HAS_INIT_SECTION 32634 If defined, `main' will not call `__main' as described above. 32635 This macro should be defined for systems that control start-up code 32636 on a symbol-by-symbol basis, such as OSF/1, and should not be 32637 defined explicitly for systems that support `INIT_SECTION_ASM_OP'. 32638 32639 -- Macro: LD_INIT_SWITCH 32640 If defined, a C string constant for a switch that tells the linker 32641 that the following symbol is an initialization routine. 32642 32643 -- Macro: LD_FINI_SWITCH 32644 If defined, a C string constant for a switch that tells the linker 32645 that the following symbol is a finalization routine. 32646 32647 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 32648 If defined, a C statement that will write a function that can be 32649 automatically called when a shared library is loaded. The function 32650 should call FUNC, which takes no arguments. If not defined, and 32651 the object format requires an explicit initialization function, 32652 then a function called `_GLOBAL__DI' will be generated. 32653 32654 This function and the following one are used by collect2 when 32655 linking a shared library that needs constructors or destructors, 32656 or has DWARF2 exception tables embedded in the code. 32657 32658 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 32659 If defined, a C statement that will write a function that can be 32660 automatically called when a shared library is unloaded. The 32661 function should call FUNC, which takes no arguments. If not 32662 defined, and the object format requires an explicit finalization 32663 function, then a function called `_GLOBAL__DD' will be generated. 32664 32665 -- Macro: INVOKE__main 32666 If defined, `main' will call `__main' despite the presence of 32667 `INIT_SECTION_ASM_OP'. This macro should be defined for systems 32668 where the init section is not actually run automatically, but is 32669 still useful for collecting the lists of constructors and 32670 destructors. 32671 32672 -- Macro: SUPPORTS_INIT_PRIORITY 32673 If nonzero, the C++ `init_priority' attribute is supported and the 32674 compiler should emit instructions to control the order of 32675 initialization of objects. If zero, the compiler will issue an 32676 error message upon encountering an `init_priority' attribute. 32677 32678 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 32679 This value is true if the target supports some "native" method of 32680 collecting constructors and destructors to be run at startup and 32681 exit. It is false if we must use `collect2'. 32682 32683 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 32684 If defined, a function that outputs assembler code to arrange to 32685 call the function referenced by SYMBOL at initialization time. 32686 32687 Assume that SYMBOL is a `SYMBOL_REF' for a function taking no 32688 arguments and with no return value. If the target supports 32689 initialization priorities, PRIORITY is a value between 0 and 32690 `MAX_INIT_PRIORITY'; otherwise it must be `DEFAULT_INIT_PRIORITY'. 32691 32692 If this macro is not defined by the target, a suitable default will 32693 be chosen if (1) the target supports arbitrary section names, (2) 32694 the target defines `CTORS_SECTION_ASM_OP', or (3) `USE_COLLECT2' 32695 is not defined. 32696 32697 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 32698 This is like `TARGET_ASM_CONSTRUCTOR' but used for termination 32699 functions rather than initialization functions. 32700 32701 If `TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 32702generated for the generated object file will have static linkage. 32703 32704 If your system uses `collect2' as the means of processing 32705constructors, then that program normally uses `nm' to scan an object 32706file for constructor functions to be called. 32707 32708 On certain kinds of systems, you can define this macro to make 32709`collect2' work faster (and, in some cases, make it work at all): 32710 32711 -- Macro: OBJECT_FORMAT_COFF 32712 Define this macro if the system uses COFF (Common Object File 32713 Format) object files, so that `collect2' can assume this format 32714 and scan object files directly for dynamic constructor/destructor 32715 functions. 32716 32717 This macro is effective only in a native compiler; `collect2' as 32718 part of a cross compiler always uses `nm' for the target machine. 32719 32720 -- Macro: REAL_NM_FILE_NAME 32721 Define this macro as a C string constant containing the file name 32722 to use to execute `nm'. The default is to search the path 32723 normally for `nm'. 32724 32725 If your system supports shared libraries and has a program to list 32726 the dynamic dependencies of a given library or executable, you can 32727 define these macros to enable support for running initialization 32728 and termination functions in shared libraries: 32729 32730 -- Macro: LDD_SUFFIX 32731 Define this macro to a C string constant containing the name of 32732 the program which lists dynamic dependencies, like `"ldd"' under 32733 SunOS 4. 32734 32735 -- Macro: PARSE_LDD_OUTPUT (PTR) 32736 Define this macro to be C code that extracts filenames from the 32737 output of the program denoted by `LDD_SUFFIX'. PTR is a variable 32738 of type `char *' that points to the beginning of a line of output 32739 from `LDD_SUFFIX'. If the line lists a dynamic dependency, the 32740 code must advance PTR to the beginning of the filename on that 32741 line. Otherwise, it must set PTR to `NULL'. 32742 32743 -- Macro: SHLIB_SUFFIX 32744 Define this macro to a C string constant containing the default 32745 shared library extension of the target (e.g., `".so"'). `collect2' 32746 strips version information after this suffix when generating global 32747 constructor and destructor names. This define is only needed on 32748 targets that use `collect2' to process constructors and 32749 destructors. 32750 32751 32752File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 32753 3275417.21.7 Output of Assembler Instructions 32755---------------------------------------- 32756 32757This describes assembler instruction output. 32758 32759 -- Macro: REGISTER_NAMES 32760 A C initializer containing the assembler's names for the machine 32761 registers, each one as a C string constant. This is what 32762 translates register numbers in the compiler into assembler 32763 language. 32764 32765 -- Macro: ADDITIONAL_REGISTER_NAMES 32766 If defined, a C initializer for an array of structures containing 32767 a name and a register number. This macro defines additional names 32768 for hard registers, thus allowing the `asm' option in declarations 32769 to refer to registers using alternate names. 32770 32771 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 32772 Define this macro if you are using an unusual assembler that 32773 requires different names for the machine instructions. 32774 32775 The definition is a C statement or statements which output an 32776 assembler instruction opcode to the stdio stream STREAM. The 32777 macro-operand PTR is a variable of type `char *' which points to 32778 the opcode name in its "internal" form--the form that is written 32779 in the machine description. The definition should output the 32780 opcode name to STREAM, performing any translation you desire, and 32781 increment the variable PTR to point at the end of the opcode so 32782 that it will not be output twice. 32783 32784 In fact, your macro definition may process less than the entire 32785 opcode name, or more than the opcode name; but if you want to 32786 process text that includes `%'-sequences to substitute operands, 32787 you must take care of the substitution yourself. Just be sure to 32788 increment PTR over whatever text should not be output normally. 32789 32790 If you need to look at the operand values, they can be found as the 32791 elements of `recog_data.operand'. 32792 32793 If the macro definition does nothing, the instruction is output in 32794 the usual way. 32795 32796 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 32797 If defined, a C statement to be executed just prior to the output 32798 of assembler code for INSN, to modify the extracted operands so 32799 they will be output differently. 32800 32801 Here the argument OPVEC is the vector containing the operands 32802 extracted from INSN, and NOPERANDS is the number of elements of 32803 the vector which contain meaningful data for this insn. The 32804 contents of this vector are what will be used to convert the insn 32805 template into assembler code, so you can change the assembler 32806 output by changing the contents of the vector. 32807 32808 This macro is useful when various assembler syntaxes share a single 32809 file of instruction patterns; by defining this macro differently, 32810 you can cause a large class of instructions to be output 32811 differently (such as with rearranged operands). Naturally, 32812 variations in assembler syntax affecting individual insn patterns 32813 ought to be handled by writing conditional output routines in 32814 those patterns. 32815 32816 If this macro is not defined, it is equivalent to a null statement. 32817 32818 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, rtx 32819 INSN, rtx *OPVEC, int NOPERANDS) 32820 If defined, this target hook is a function which is executed just 32821 after the output of assembler code for INSN, to change the mode of 32822 the assembler if necessary. 32823 32824 Here the argument OPVEC is the vector containing the operands 32825 extracted from INSN, and NOPERANDS is the number of elements of 32826 the vector which contain meaningful data for this insn. The 32827 contents of this vector are what was used to convert the insn 32828 template into assembler code, so you can change the assembler mode 32829 by checking the contents of the vector. 32830 32831 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 32832 A C compound statement to output to stdio stream STREAM the 32833 assembler syntax for an instruction operand X. X is an RTL 32834 expression. 32835 32836 CODE is a value that can be used to specify one of several ways of 32837 printing the operand. It is used when identical operands must be 32838 printed differently depending on the context. CODE comes from the 32839 `%' specification that was used to request printing of the 32840 operand. If the specification was just `%DIGIT' then CODE is 0; 32841 if the specification was `%LTR DIGIT' then CODE is the ASCII code 32842 for LTR. 32843 32844 If X is a register, this macro should print the register's name. 32845 The names can be found in an array `reg_names' whose type is `char 32846 *[]'. `reg_names' is initialized from `REGISTER_NAMES'. 32847 32848 When the machine description has a specification `%PUNCT' (a `%' 32849 followed by a punctuation character), this macro is called with a 32850 null pointer for X and the punctuation character for CODE. 32851 32852 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 32853 A C expression which evaluates to true if CODE is a valid 32854 punctuation character for use in the `PRINT_OPERAND' macro. If 32855 `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 32856 punctuation characters (except for the standard one, `%') are used 32857 in this way. 32858 32859 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 32860 A C compound statement to output to stdio stream STREAM the 32861 assembler syntax for an instruction operand that is a memory 32862 reference whose address is X. X is an RTL expression. 32863 32864 On some machines, the syntax for a symbolic address depends on the 32865 section that the address refers to. On these machines, define the 32866 hook `TARGET_ENCODE_SECTION_INFO' to store the information into the 32867 `symbol_ref', and then check for it here. *Note Assembler 32868 Format::. 32869 32870 -- Macro: DBR_OUTPUT_SEQEND (FILE) 32871 A C statement, to be executed after all slot-filler instructions 32872 have been output. If necessary, call `dbr_sequence_length' to 32873 determine the number of slots filled in a sequence (zero if not 32874 currently outputting a sequence), to decide how many no-ops to 32875 output, or whatever. 32876 32877 Don't define this macro if it has nothing to do, but it is helpful 32878 in reading assembly output if the extent of the delay sequence is 32879 made explicit (e.g. with white space). 32880 32881 Note that output routines for instructions with delay slots must be 32882prepared to deal with not being output as part of a sequence (i.e. when 32883the scheduling pass is not run, or when no slot fillers could be 32884found.) The variable `final_sequence' is null when not processing a 32885sequence, otherwise it contains the `sequence' rtx being output. 32886 32887 -- Macro: REGISTER_PREFIX 32888 -- Macro: LOCAL_LABEL_PREFIX 32889 -- Macro: USER_LABEL_PREFIX 32890 -- Macro: IMMEDIATE_PREFIX 32891 If defined, C string expressions to be used for the `%R', `%L', 32892 `%U', and `%I' options of `asm_fprintf' (see `final.c'). These 32893 are useful when a single `md' file must support multiple assembler 32894 formats. In that case, the various `tm.h' files can define these 32895 macros differently. 32896 32897 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 32898 If defined this macro should expand to a series of `case' 32899 statements which will be parsed inside the `switch' statement of 32900 the `asm_fprintf' function. This allows targets to define extra 32901 printf formats which may useful when generating their assembler 32902 statements. Note that uppercase letters are reserved for future 32903 generic extensions to asm_fprintf, and so are not available to 32904 target specific code. The output file is given by the parameter 32905 FILE. The varargs input pointer is ARGPTR and the rest of the 32906 format string, starting the character after the one that is being 32907 switched upon, is pointed to by FORMAT. 32908 32909 -- Macro: ASSEMBLER_DIALECT 32910 If your target supports multiple dialects of assembler language 32911 (such as different opcodes), define this macro as a C expression 32912 that gives the numeric index of the assembler language dialect to 32913 use, with zero as the first variant. 32914 32915 If this macro is defined, you may use constructs of the form 32916 `{option0|option1|option2...}' 32917 in the output templates of patterns (*note Output Template::) or 32918 in the first argument of `asm_fprintf'. This construct outputs 32919 `option0', `option1', `option2', etc., if the value of 32920 `ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 32921 within these strings retain their usual meaning. If there are 32922 fewer alternatives within the braces than the value of 32923 `ASSEMBLER_DIALECT', the construct outputs nothing. 32924 32925 If you do not define this macro, the characters `{', `|' and `}' 32926 do not have any special meaning when used in templates or operands 32927 to `asm_fprintf'. 32928 32929 Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX', 32930 `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the 32931 variations in assembler language syntax with that mechanism. 32932 Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax 32933 if the syntax variant are larger and involve such things as 32934 different opcodes or operand order. 32935 32936 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 32937 A C expression to output to STREAM some assembler code which will 32938 push hard register number REGNO onto the stack. The code need not 32939 be optimal, since this macro is used only when profiling. 32940 32941 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 32942 A C expression to output to STREAM some assembler code which will 32943 pop hard register number REGNO off of the stack. The code need 32944 not be optimal, since this macro is used only when profiling. 32945 32946 32947File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 32948 3294917.21.8 Output of Dispatch Tables 32950--------------------------------- 32951 32952This concerns dispatch tables. 32953 32954 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 32955 A C statement to output to the stdio stream STREAM an assembler 32956 pseudo-instruction to generate a difference between two labels. 32957 VALUE and REL are the numbers of two internal labels. The 32958 definitions of these labels are output using 32959 `(*targetm.asm_out.internal_label)', and they must be printed in 32960 the same way here. For example, 32961 32962 fprintf (STREAM, "\t.word L%d-L%d\n", 32963 VALUE, REL) 32964 32965 You must provide this macro on machines where the addresses in a 32966 dispatch table are relative to the table's own address. If 32967 defined, GCC will also use this macro on all machines when 32968 producing PIC. BODY is the body of the `ADDR_DIFF_VEC'; it is 32969 provided so that the mode and flags can be read. 32970 32971 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 32972 This macro should be provided on machines where the addresses in a 32973 dispatch table are absolute. 32974 32975 The definition should be a C statement to output to the stdio 32976 stream STREAM an assembler pseudo-instruction to generate a 32977 reference to a label. VALUE is the number of an internal label 32978 whose definition is output using 32979 `(*targetm.asm_out.internal_label)'. For example, 32980 32981 fprintf (STREAM, "\t.word L%d\n", VALUE) 32982 32983 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 32984 Define this if the label before a jump-table needs to be output 32985 specially. The first three arguments are the same as for 32986 `(*targetm.asm_out.internal_label)'; the fourth argument is the 32987 jump-table which follows (a `jump_insn' containing an `addr_vec' 32988 or `addr_diff_vec'). 32989 32990 This feature is used on system V to output a `swbeg' statement for 32991 the table. 32992 32993 If this macro is not defined, these labels are output with 32994 `(*targetm.asm_out.internal_label)'. 32995 32996 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 32997 Define this if something special must be output at the end of a 32998 jump-table. The definition should be a C statement to be executed 32999 after the assembler code for the table is written. It should write 33000 the appropriate code to stdio stream STREAM. The argument TABLE 33001 is the jump-table insn, and NUM is the label-number of the 33002 preceding label. 33003 33004 If this macro is not defined, nothing special is output at the end 33005 of the jump-table. 33006 33007 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 33008 DECL, int FOR_EH, int EMPTY) 33009 This target hook emits a label at the beginning of each FDE. It 33010 should be defined on targets where FDEs need special labels, and it 33011 should write the appropriate label, for the FDE associated with the 33012 function declaration DECL, to the stdio stream STREAM. The third 33013 argument, FOR_EH, is a boolean: true if this is for an exception 33014 table. The fourth argument, EMPTY, is a boolean: true if this is 33015 a placeholder label for an omitted FDE. 33016 33017 The default is that FDEs are not given nonlocal labels. 33018 33019 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 33020 This target hook emits a label at the beginning of the exception 33021 table. It should be defined on targets where it is desirable for 33022 the table to be broken up according to function. 33023 33024 The default is that no label is emitted. 33025 33026 -- Target Hook: void TARGET_UNWIND_EMIT (FILE *STREAM, rtx INSN) 33027 This target hook emits assembly directives required to unwind the 33028 given instruction. This is only used when TARGET_UNWIND_INFO is 33029 set. 33030 33031 33032File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 33033 3303417.21.9 Assembler Commands for Exception Regions 33035------------------------------------------------ 33036 33037This describes commands marking the start and the end of an exception 33038region. 33039 33040 -- Macro: EH_FRAME_SECTION_NAME 33041 If defined, a C string constant for the name of the section 33042 containing exception handling frame unwind information. If not 33043 defined, GCC will provide a default definition if the target 33044 supports named sections. `crtstuff.c' uses this macro to switch 33045 to the appropriate section. 33046 33047 You should define this symbol if your target supports DWARF 2 frame 33048 unwind information and the default definition does not work. 33049 33050 -- Macro: EH_FRAME_IN_DATA_SECTION 33051 If defined, DWARF 2 frame unwind information will be placed in the 33052 data section even though the target supports named sections. This 33053 might be necessary, for instance, if the system linker does garbage 33054 collection and sections cannot be marked as not to be collected. 33055 33056 Do not define this macro unless `TARGET_ASM_NAMED_SECTION' is also 33057 defined. 33058 33059 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 33060 Define this macro to 1 if your target is such that no frame unwind 33061 information encoding used with non-PIC code will ever require a 33062 runtime relocation, but the linker may not support merging 33063 read-only and read-write sections into a single read-write section. 33064 33065 -- Macro: MASK_RETURN_ADDR 33066 An rtx used to mask the return address found via 33067 `RETURN_ADDR_RTX', so that it does not contain any extraneous set 33068 bits in it. 33069 33070 -- Macro: DWARF2_UNWIND_INFO 33071 Define this macro to 0 if your target supports DWARF 2 frame unwind 33072 information, but it does not yet work with exception handling. 33073 Otherwise, if your target supports this information (if it defines 33074 `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or 33075 `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1. 33076 33077 If `TARGET_UNWIND_INFO' is defined, the target specific unwinder 33078 will be used in all cases. Defining this macro will enable the 33079 generation of DWARF 2 frame debugging information. 33080 33081 If `TARGET_UNWIND_INFO' is not defined, and this macro is defined 33082 to 1, the DWARF 2 unwinder will be the default exception handling 33083 mechanism; otherwise, the `setjmp'/`longjmp'-based scheme will be 33084 used by default. 33085 33086 -- Macro: TARGET_UNWIND_INFO 33087 Define this macro if your target has ABI specified unwind tables. 33088 Usually these will be output by `TARGET_UNWIND_EMIT'. 33089 33090 -- Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 33091 This variable should be set to `true' if the target ABI requires 33092 unwinding tables even when exceptions are not used. 33093 33094 -- Macro: MUST_USE_SJLJ_EXCEPTIONS 33095 This macro need only be defined if `DWARF2_UNWIND_INFO' is 33096 runtime-variable. In that case, `except.h' cannot correctly 33097 determine the corresponding definition of 33098 `MUST_USE_SJLJ_EXCEPTIONS', so the target must provide it directly. 33099 33100 -- Macro: DONT_USE_BUILTIN_SETJMP 33101 Define this macro to 1 if the `setjmp'/`longjmp'-based scheme 33102 should use the `setjmp'/`longjmp' functions from the C library 33103 instead of the `__builtin_setjmp'/`__builtin_longjmp' machinery. 33104 33105 -- Macro: DWARF_CIE_DATA_ALIGNMENT 33106 This macro need only be defined if the target might save registers 33107 in the function prologue at an offset to the stack pointer that is 33108 not aligned to `UNITS_PER_WORD'. The definition should be the 33109 negative minimum alignment if `STACK_GROWS_DOWNWARD' is defined, 33110 and the positive minimum alignment otherwise. *Note SDB and 33111 DWARF::. Only applicable if the target supports DWARF 2 frame 33112 unwind information. 33113 33114 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 33115 Contains the value true if the target should add a zero word onto 33116 the end of a Dwarf-2 frame info section when used for exception 33117 handling. Default value is false if `EH_FRAME_SECTION_NAME' is 33118 defined, and true otherwise. 33119 33120 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 33121 Given a register, this hook should return a parallel of registers 33122 to represent where to find the register pieces. Define this hook 33123 if the register and its mode are represented in Dwarf in 33124 non-contiguous locations, or if the register should be represented 33125 in more than one register in Dwarf. Otherwise, this hook should 33126 return `NULL_RTX'. If not defined, the default is to return 33127 `NULL_RTX'. 33128 33129 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 33130 If some registers are represented in Dwarf-2 unwind information in 33131 multiple pieces, define this hook to fill in information about the 33132 sizes of those pieces in the table used by the unwinder at runtime. 33133 It will be called by `expand_builtin_init_dwarf_reg_sizes' after 33134 filling in a single size corresponding to each hard register; 33135 ADDRESS is the address of the table. 33136 33137 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 33138 This hook is used to output a reference from a frame unwinding 33139 table to the type_info object identified by SYM. It should return 33140 `true' if the reference was output. Returning `false' will cause 33141 the reference to be output using the normal Dwarf2 routines. 33142 33143 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 33144 This flag should be set to `true' on targets that use an ARM EABI 33145 based unwinding library, and `false' on other targets. This 33146 effects the format of unwinding tables, and how the unwinder in 33147 entered after running a cleanup. The default is `false'. 33148 33149 33150File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 33151 3315217.21.10 Assembler Commands for Alignment 33153----------------------------------------- 33154 33155This describes commands for alignment. 33156 33157 -- Macro: JUMP_ALIGN (LABEL) 33158 The alignment (log base 2) to put in front of LABEL, which is a 33159 common destination of jumps and has no fallthru incoming edge. 33160 33161 This macro need not be defined if you don't want any special 33162 alignment to be done at such a time. Most machine descriptions do 33163 not currently define the macro. 33164 33165 Unless it's necessary to inspect the LABEL parameter, it is better 33166 to set the variable ALIGN_JUMPS in the target's 33167 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 33168 selection in ALIGN_JUMPS in a `JUMP_ALIGN' implementation. 33169 33170 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 33171 The alignment (log base 2) to put in front of LABEL, which follows 33172 a `BARRIER'. 33173 33174 This macro need not be defined if you don't want any special 33175 alignment to be done at such a time. Most machine descriptions do 33176 not currently define the macro. 33177 33178 -- Macro: LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 33179 The maximum number of bytes to skip when applying 33180 `LABEL_ALIGN_AFTER_BARRIER'. This works only if 33181 `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 33182 33183 -- Macro: LOOP_ALIGN (LABEL) 33184 The alignment (log base 2) to put in front of LABEL, which follows 33185 a `NOTE_INSN_LOOP_BEG' note. 33186 33187 This macro need not be defined if you don't want any special 33188 alignment to be done at such a time. Most machine descriptions do 33189 not currently define the macro. 33190 33191 Unless it's necessary to inspect the LABEL parameter, it is better 33192 to set the variable `align_loops' in the target's 33193 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 33194 selection in `align_loops' in a `LOOP_ALIGN' implementation. 33195 33196 -- Macro: LOOP_ALIGN_MAX_SKIP 33197 The maximum number of bytes to skip when applying `LOOP_ALIGN'. 33198 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 33199 33200 -- Macro: LABEL_ALIGN (LABEL) 33201 The alignment (log base 2) to put in front of LABEL. If 33202 `LABEL_ALIGN_AFTER_BARRIER' / `LOOP_ALIGN' specify a different 33203 alignment, the maximum of the specified values is used. 33204 33205 Unless it's necessary to inspect the LABEL parameter, it is better 33206 to set the variable `align_labels' in the target's 33207 `OVERRIDE_OPTIONS'. Otherwise, you should try to honor the user's 33208 selection in `align_labels' in a `LABEL_ALIGN' implementation. 33209 33210 -- Macro: LABEL_ALIGN_MAX_SKIP 33211 The maximum number of bytes to skip when applying `LABEL_ALIGN'. 33212 This works only if `ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 33213 33214 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 33215 A C statement to output to the stdio stream STREAM an assembler 33216 instruction to advance the location counter by NBYTES bytes. 33217 Those bytes should be zero when loaded. NBYTES will be a C 33218 expression of type `unsigned HOST_WIDE_INT'. 33219 33220 -- Macro: ASM_NO_SKIP_IN_TEXT 33221 Define this macro if `ASM_OUTPUT_SKIP' should not be used in the 33222 text section because it fails to put zeros in the bytes that are 33223 skipped. This is true on many Unix systems, where the pseudo-op 33224 to skip bytes produces no-op instructions rather than zeros when 33225 used in the text section. 33226 33227 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 33228 A C statement to output to the stdio stream STREAM an assembler 33229 command to advance the location counter to a multiple of 2 to the 33230 POWER bytes. POWER will be a C expression of type `int'. 33231 33232 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 33233 Like `ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 33234 for padding, if necessary. 33235 33236 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 33237 A C statement to output to the stdio stream STREAM an assembler 33238 command to advance the location counter to a multiple of 2 to the 33239 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 33240 satisfy the alignment request. POWER and MAX_SKIP will be a C 33241 expression of type `int'. 33242 33243 33244File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 33245 3324617.22 Controlling Debugging Information Format 33247============================================== 33248 33249This describes how to specify debugging information. 33250 33251* Menu: 33252 33253* All Debuggers:: Macros that affect all debugging formats uniformly. 33254* DBX Options:: Macros enabling specific options in DBX format. 33255* DBX Hooks:: Hook macros for varying DBX format. 33256* File Names and DBX:: Macros controlling output of file names in DBX format. 33257* SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 33258* VMS Debug:: Macros for VMS debug format. 33259 33260 33261File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 33262 3326317.22.1 Macros Affecting All Debugging Formats 33264---------------------------------------------- 33265 33266These macros affect all debugging formats. 33267 33268 -- Macro: DBX_REGISTER_NUMBER (REGNO) 33269 A C expression that returns the DBX register number for the 33270 compiler register number REGNO. In the default macro provided, 33271 the value of this expression will be REGNO itself. But sometimes 33272 there are some registers that the compiler knows about and DBX 33273 does not, or vice versa. In such cases, some register may need to 33274 have one number in the compiler and another for DBX. 33275 33276 If two registers have consecutive numbers inside GCC, and they can 33277 be used as a pair to hold a multiword value, then they _must_ have 33278 consecutive numbers after renumbering with `DBX_REGISTER_NUMBER'. 33279 Otherwise, debuggers will be unable to access such a pair, because 33280 they expect register pairs to be consecutive in their own 33281 numbering scheme. 33282 33283 If you find yourself defining `DBX_REGISTER_NUMBER' in way that 33284 does not preserve register pairs, then what you must do instead is 33285 redefine the actual register numbering scheme. 33286 33287 -- Macro: DEBUGGER_AUTO_OFFSET (X) 33288 A C expression that returns the integer offset value for an 33289 automatic variable having address X (an RTL expression). The 33290 default computation assumes that X is based on the frame-pointer 33291 and gives the offset from the frame-pointer. This is required for 33292 targets that produce debugging output for DBX or COFF-style 33293 debugging output for SDB and allow the frame-pointer to be 33294 eliminated when the `-g' options is used. 33295 33296 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 33297 A C expression that returns the integer offset value for an 33298 argument having address X (an RTL expression). The nominal offset 33299 is OFFSET. 33300 33301 -- Macro: PREFERRED_DEBUGGING_TYPE 33302 A C expression that returns the type of debugging output GCC should 33303 produce when the user specifies just `-g'. Define this if you 33304 have arranged for GCC to support more than one format of debugging 33305 output. Currently, the allowable values are `DBX_DEBUG', 33306 `SDB_DEBUG', `DWARF_DEBUG', `DWARF2_DEBUG', `XCOFF_DEBUG', 33307 `VMS_DEBUG', and `VMS_AND_DWARF2_DEBUG'. 33308 33309 When the user specifies `-ggdb', GCC normally also uses the value 33310 of this macro to select the debugging output format, but with two 33311 exceptions. If `DWARF2_DEBUGGING_INFO' is defined, GCC uses the 33312 value `DWARF2_DEBUG'. Otherwise, if `DBX_DEBUGGING_INFO' is 33313 defined, GCC uses `DBX_DEBUG'. 33314 33315 The value of this macro only affects the default debugging output; 33316 the user can always get a specific type of output by using 33317 `-gstabs', `-gcoff', `-gdwarf-2', `-gxcoff', or `-gvms'. 33318 33319 33320File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 33321 3332217.22.2 Specific Options for DBX Output 33323--------------------------------------- 33324 33325These are specific options for DBX output. 33326 33327 -- Macro: DBX_DEBUGGING_INFO 33328 Define this macro if GCC should produce debugging output for DBX 33329 in response to the `-g' option. 33330 33331 -- Macro: XCOFF_DEBUGGING_INFO 33332 Define this macro if GCC should produce XCOFF format debugging 33333 output in response to the `-g' option. This is a variant of DBX 33334 format. 33335 33336 -- Macro: DEFAULT_GDB_EXTENSIONS 33337 Define this macro to control whether GCC should by default generate 33338 GDB's extended version of DBX debugging information (assuming 33339 DBX-format debugging information is enabled at all). If you don't 33340 define the macro, the default is 1: always generate the extended 33341 information if there is any occasion to. 33342 33343 -- Macro: DEBUG_SYMS_TEXT 33344 Define this macro if all `.stabs' commands should be output while 33345 in the text section. 33346 33347 -- Macro: ASM_STABS_OP 33348 A C string constant, including spacing, naming the assembler 33349 pseudo op to use instead of `"\t.stabs\t"' to define an ordinary 33350 debugging symbol. If you don't define this macro, `"\t.stabs\t"' 33351 is used. This macro applies only to DBX debugging information 33352 format. 33353 33354 -- Macro: ASM_STABD_OP 33355 A C string constant, including spacing, naming the assembler 33356 pseudo op to use instead of `"\t.stabd\t"' to define a debugging 33357 symbol whose value is the current location. If you don't define 33358 this macro, `"\t.stabd\t"' is used. This macro applies only to 33359 DBX debugging information format. 33360 33361 -- Macro: ASM_STABN_OP 33362 A C string constant, including spacing, naming the assembler 33363 pseudo op to use instead of `"\t.stabn\t"' to define a debugging 33364 symbol with no name. If you don't define this macro, 33365 `"\t.stabn\t"' is used. This macro applies only to DBX debugging 33366 information format. 33367 33368 -- Macro: DBX_NO_XREFS 33369 Define this macro if DBX on your system does not support the 33370 construct `xsTAGNAME'. On some systems, this construct is used to 33371 describe a forward reference to a structure named TAGNAME. On 33372 other systems, this construct is not supported at all. 33373 33374 -- Macro: DBX_CONTIN_LENGTH 33375 A symbol name in DBX-format debugging information is normally 33376 continued (split into two separate `.stabs' directives) when it 33377 exceeds a certain length (by default, 80 characters). On some 33378 operating systems, DBX requires this splitting; on others, 33379 splitting must not be done. You can inhibit splitting by defining 33380 this macro with the value zero. You can override the default 33381 splitting-length by defining this macro as an expression for the 33382 length you desire. 33383 33384 -- Macro: DBX_CONTIN_CHAR 33385 Normally continuation is indicated by adding a `\' character to 33386 the end of a `.stabs' string when a continuation follows. To use 33387 a different character instead, define this macro as a character 33388 constant for the character you want to use. Do not define this 33389 macro if backslash is correct for your system. 33390 33391 -- Macro: DBX_STATIC_STAB_DATA_SECTION 33392 Define this macro if it is necessary to go to the data section 33393 before outputting the `.stabs' pseudo-op for a non-global static 33394 variable. 33395 33396 -- Macro: DBX_TYPE_DECL_STABS_CODE 33397 The value to use in the "code" field of the `.stabs' directive for 33398 a typedef. The default is `N_LSYM'. 33399 33400 -- Macro: DBX_STATIC_CONST_VAR_CODE 33401 The value to use in the "code" field of the `.stabs' directive for 33402 a static variable located in the text section. DBX format does not 33403 provide any "right" way to do this. The default is `N_FUN'. 33404 33405 -- Macro: DBX_REGPARM_STABS_CODE 33406 The value to use in the "code" field of the `.stabs' directive for 33407 a parameter passed in registers. DBX format does not provide any 33408 "right" way to do this. The default is `N_RSYM'. 33409 33410 -- Macro: DBX_REGPARM_STABS_LETTER 33411 The letter to use in DBX symbol data to identify a symbol as a 33412 parameter passed in registers. DBX format does not customarily 33413 provide any way to do this. The default is `'P''. 33414 33415 -- Macro: DBX_FUNCTION_FIRST 33416 Define this macro if the DBX information for a function and its 33417 arguments should precede the assembler code for the function. 33418 Normally, in DBX format, the debugging information entirely 33419 follows the assembler code. 33420 33421 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 33422 Define this macro, with value 1, if the value of a symbol 33423 describing the scope of a block (`N_LBRAC' or `N_RBRAC') should be 33424 relative to the start of the enclosing function. Normally, GCC 33425 uses an absolute address. 33426 33427 -- Macro: DBX_LINES_FUNCTION_RELATIVE 33428 Define this macro, with value 1, if the value of a symbol 33429 indicating the current line number (`N_SLINE') should be relative 33430 to the start of the enclosing function. Normally, GCC uses an 33431 absolute address. 33432 33433 -- Macro: DBX_USE_BINCL 33434 Define this macro if GCC should generate `N_BINCL' and `N_EINCL' 33435 stabs for included header files, as on Sun systems. This macro 33436 also directs GCC to output a type number as a pair of a file 33437 number and a type number within the file. Normally, GCC does not 33438 generate `N_BINCL' or `N_EINCL' stabs, and it outputs a single 33439 number for a type number. 33440 33441 33442File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 33443 3344417.22.3 Open-Ended Hooks for DBX Format 33445--------------------------------------- 33446 33447These are hooks for DBX format. 33448 33449 -- Macro: DBX_OUTPUT_LBRAC (STREAM, NAME) 33450 Define this macro to say how to output to STREAM the debugging 33451 information for the start of a scope level for variable names. The 33452 argument NAME is the name of an assembler symbol (for use with 33453 `assemble_name') whose value is the address where the scope begins. 33454 33455 -- Macro: DBX_OUTPUT_RBRAC (STREAM, NAME) 33456 Like `DBX_OUTPUT_LBRAC', but for the end of a scope level. 33457 33458 -- Macro: DBX_OUTPUT_NFUN (STREAM, LSCOPE_LABEL, DECL) 33459 Define this macro if the target machine requires special handling 33460 to output an `N_FUN' entry for the function DECL. 33461 33462 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 33463 A C statement to output DBX debugging information before code for 33464 line number LINE of the current source file to the stdio stream 33465 STREAM. COUNTER is the number of time the macro was invoked, 33466 including the current invocation; it is intended to generate 33467 unique labels in the assembly output. 33468 33469 This macro should not be defined if the default output is correct, 33470 or if it can be made correct by defining 33471 `DBX_LINES_FUNCTION_RELATIVE'. 33472 33473 -- Macro: NO_DBX_FUNCTION_END 33474 Some stabs encapsulation formats (in particular ECOFF), cannot 33475 handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 33476 extension construct. On those machines, define this macro to turn 33477 this feature off without disturbing the rest of the gdb extensions. 33478 33479 -- Macro: NO_DBX_BNSYM_ENSYM 33480 Some assemblers cannot handle the `.stabd BNSYM/ENSYM,0,0' gdb dbx 33481 extension construct. On those machines, define this macro to turn 33482 this feature off without disturbing the rest of the gdb extensions. 33483 33484 33485File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 33486 3348717.22.4 File Names in DBX Format 33488-------------------------------- 33489 33490This describes file names in DBX format. 33491 33492 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 33493 A C statement to output DBX debugging information to the stdio 33494 stream STREAM, which indicates that file NAME is the main source 33495 file--the file specified as the input file for compilation. This 33496 macro is called only once, at the beginning of compilation. 33497 33498 This macro need not be defined if the standard form of output for 33499 DBX debugging information is appropriate. 33500 33501 It may be necessary to refer to a label equal to the beginning of 33502 the text section. You can use `assemble_name (stream, 33503 ltext_label_name)' to do so. If you do this, you must also set 33504 the variable USED_LTEXT_LABEL_NAME to `true'. 33505 33506 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 33507 Define this macro, with value 1, if GCC should not emit an 33508 indication of the current directory for compilation and current 33509 source language at the beginning of the file. 33510 33511 -- Macro: NO_DBX_GCC_MARKER 33512 Define this macro, with value 1, if GCC should not emit an 33513 indication that this object file was compiled by GCC. The default 33514 is to emit an `N_OPT' stab at the beginning of every source file, 33515 with `gcc2_compiled.' for the string and value 0. 33516 33517 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 33518 A C statement to output DBX debugging information at the end of 33519 compilation of the main source file NAME. Output should be 33520 written to the stdio stream STREAM. 33521 33522 If you don't define this macro, nothing special is output at the 33523 end of compilation, which is correct for most machines. 33524 33525 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 33526 Define this macro _instead of_ defining 33527 `DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 33528 the end of compilation is an `N_SO' stab with an empty string, 33529 whose value is the highest absolute text address in the file. 33530 33531 33532File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 33533 3353417.22.5 Macros for SDB and DWARF Output 33535--------------------------------------- 33536 33537Here are macros for SDB and DWARF output. 33538 33539 -- Macro: SDB_DEBUGGING_INFO 33540 Define this macro if GCC should produce COFF-style debugging output 33541 for SDB in response to the `-g' option. 33542 33543 -- Macro: DWARF2_DEBUGGING_INFO 33544 Define this macro if GCC should produce dwarf version 2 format 33545 debugging output in response to the `-g' option. 33546 33547 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 33548 FUNCTION) 33549 Define this to enable the dwarf attribute 33550 `DW_AT_calling_convention' to be emitted for each function. 33551 Instead of an integer return the enum value for the `DW_CC_' 33552 tag. 33553 33554 To support optional call frame debugging information, you must also 33555 define `INCOMING_RETURN_ADDR_RTX' and either set 33556 `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 33557 prologue, or call `dwarf2out_def_cfa' and `dwarf2out_reg_save' as 33558 appropriate from `TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 33559 33560 -- Macro: DWARF2_FRAME_INFO 33561 Define this macro to a nonzero value if GCC should always output 33562 Dwarf 2 frame information. If `DWARF2_UNWIND_INFO' (*note 33563 Exception Region Output:: is nonzero, GCC will output this 33564 information not matter how you define `DWARF2_FRAME_INFO'. 33565 33566 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 33567 Define this macro to be a nonzero value if the assembler can 33568 generate Dwarf 2 line debug info sections. This will result in 33569 much more compact line number tables, and hence is desirable if it 33570 works. 33571 33572 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 33573 A C statement to issue assembly directives that create a difference 33574 LAB1 minus LAB2, using an integer of the given SIZE. 33575 33576 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 33577 A C statement to issue assembly directives that create a 33578 section-relative reference to the given LABEL, using an integer of 33579 the given SIZE. The label is known to be defined in the given 33580 SECTION. 33581 33582 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 33583 A C statement to issue assembly directives that create a 33584 self-relative reference to the given LABEL, using an integer of 33585 the given SIZE. 33586 33587 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 33588 A C statement to issue assembly directives that create a reference 33589 to the DWARF table identifier LABEL from the current section. This 33590 is used on some systems to avoid garbage collecting a DWARF table 33591 which is referenced by a function. 33592 33593 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 33594 SIZE, rtx X) 33595 If defined, this target hook is a function which outputs a 33596 DTP-relative reference to the given TLS symbol of the specified 33597 size. 33598 33599 -- Macro: PUT_SDB_... 33600 Define these macros to override the assembler syntax for the 33601 special SDB assembler directives. See `sdbout.c' for a list of 33602 these macros and their arguments. If the standard syntax is used, 33603 you need not define them yourself. 33604 33605 -- Macro: SDB_DELIM 33606 Some assemblers do not support a semicolon as a delimiter, even 33607 between SDB assembler directives. In that case, define this macro 33608 to be the delimiter to use (usually `\n'). It is not necessary to 33609 define a new set of `PUT_SDB_OP' macros if this is the only change 33610 required. 33611 33612 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 33613 Define this macro to allow references to unknown structure, union, 33614 or enumeration tags to be emitted. Standard COFF does not allow 33615 handling of unknown references, MIPS ECOFF has support for it. 33616 33617 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 33618 Define this macro to allow references to structure, union, or 33619 enumeration tags that have not yet been seen to be handled. Some 33620 assemblers choke if forward tags are used, while some require it. 33621 33622 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 33623 A C statement to output SDB debugging information before code for 33624 line number LINE of the current source file to the stdio stream 33625 STREAM. The default is to emit an `.ln' directive. 33626 33627 33628File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 33629 3363017.22.6 Macros for VMS Debug Format 33631----------------------------------- 33632 33633Here are macros for VMS debug format. 33634 33635 -- Macro: VMS_DEBUGGING_INFO 33636 Define this macro if GCC should produce debugging output for VMS 33637 in response to the `-g' option. The default behavior for VMS is 33638 to generate minimal debug info for a traceback in the absence of 33639 `-g' unless explicitly overridden with `-g0'. This behavior is 33640 controlled by `OPTIMIZATION_OPTIONS' and `OVERRIDE_OPTIONS'. 33641 33642 33643File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 33644 3364517.23 Cross Compilation and Floating Point 33646========================================== 33647 33648While all modern machines use twos-complement representation for 33649integers, there are a variety of representations for floating point 33650numbers. This means that in a cross-compiler the representation of 33651floating point numbers in the compiled program may be different from 33652that used in the machine doing the compilation. 33653 33654 Because different representation systems may offer different amounts of 33655range and precision, all floating point constants must be represented in 33656the target machine's format. Therefore, the cross compiler cannot 33657safely use the host machine's floating point arithmetic; it must emulate 33658the target's arithmetic. To ensure consistency, GCC always uses 33659emulation to work with floating point values, even when the host and 33660target floating point formats are identical. 33661 33662 The following macros are provided by `real.h' for the compiler to use. 33663All parts of the compiler which generate or optimize floating-point 33664calculations must use these macros. They may evaluate their operands 33665more than once, so operands must not have side effects. 33666 33667 -- Macro: REAL_VALUE_TYPE 33668 The C data type to be used to hold a floating point value in the 33669 target machine's format. Typically this is a `struct' containing 33670 an array of `HOST_WIDE_INT', but all code should treat it as an 33671 opaque quantity. 33672 33673 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 33674 Compares for equality the two values, X and Y. If the target 33675 floating point format supports negative zeroes and/or NaNs, 33676 `REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and `REAL_VALUES_EQUAL 33677 (NaN, NaN)' is false. 33678 33679 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 33680 Tests whether X is less than Y. 33681 33682 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 33683 Truncates X to a signed integer, rounding toward zero. 33684 33685 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 33686 (REAL_VALUE_TYPE X) 33687 Truncates X to an unsigned integer, rounding toward zero. If X is 33688 negative, returns zero. 33689 33690 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, enum 33691 machine_mode MODE) 33692 Converts STRING into a floating point number in the target 33693 machine's representation for mode MODE. This routine can handle 33694 both decimal and hexadecimal floating point constants, using the 33695 syntax defined by the C language for both. 33696 33697 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 33698 Returns 1 if X is negative (including negative zero), 0 otherwise. 33699 33700 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 33701 Determines whether X represents infinity (positive or negative). 33702 33703 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 33704 Determines whether X represents a "NaN" (not-a-number). 33705 33706 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code 33707 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 33708 Calculates an arithmetic operation on the two floating point values 33709 X and Y, storing the result in OUTPUT (which must be a variable). 33710 33711 The operation to be performed is specified by CODE. Only the 33712 following codes are supported: `PLUS_EXPR', `MINUS_EXPR', 33713 `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'. 33714 33715 If `REAL_ARITHMETIC' is asked to evaluate division by zero and the 33716 target's floating point format cannot represent infinity, it will 33717 call `abort'. Callers should check for this situation first, using 33718 `MODE_HAS_INFINITIES'. *Note Storage Layout::. 33719 33720 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 33721 Returns the negative of the floating point value X. 33722 33723 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 33724 Returns the absolute value of X. 33725 33726 -- Macro: REAL_VALUE_TYPE REAL_VALUE_TRUNCATE (REAL_VALUE_TYPE MODE, 33727 enum machine_mode X) 33728 Truncates the floating point value X to fit in MODE. The return 33729 value is still a full-size `REAL_VALUE_TYPE', but it has an 33730 appropriate bit pattern to be output as a floating constant whose 33731 precision accords with mode MODE. 33732 33733 -- Macro: void REAL_VALUE_TO_INT (HOST_WIDE_INT LOW, HOST_WIDE_INT 33734 HIGH, REAL_VALUE_TYPE X) 33735 Converts a floating point value X into a double-precision integer 33736 which is then stored into LOW and HIGH. If the value is not 33737 integral, it is truncated. 33738 33739 -- Macro: void REAL_VALUE_FROM_INT (REAL_VALUE_TYPE X, HOST_WIDE_INT 33740 LOW, HOST_WIDE_INT HIGH, enum machine_mode MODE) 33741 Converts a double-precision integer found in LOW and HIGH, into a 33742 floating point value which is then stored into X. The value is 33743 truncated to fit in mode MODE. 33744 33745 33746File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 33747 3374817.24 Mode Switching Instructions 33749================================= 33750 33751The following macros control mode switching optimizations: 33752 33753 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 33754 Define this macro if the port needs extra instructions inserted 33755 for mode switching in an optimizing compilation. 33756 33757 For an example, the SH4 can perform both single and double 33758 precision floating point operations, but to perform a single 33759 precision operation, the FPSCR PR bit has to be cleared, while for 33760 a double precision operation, this bit has to be set. Changing 33761 the PR bit requires a general purpose register as a scratch 33762 register, hence these FPSCR sets have to be inserted before 33763 reload, i.e. you can't put this into instruction emitting or 33764 `TARGET_MACHINE_DEPENDENT_REORG'. 33765 33766 You can have multiple entities that are mode-switched, and select 33767 at run time which entities actually need it. 33768 `OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY 33769 that needs mode-switching. If you define this macro, you also 33770 have to define `NUM_MODES_FOR_MODE_SWITCHING', `MODE_NEEDED', 33771 `MODE_PRIORITY_TO_MODE' and `EMIT_MODE_SET'. `MODE_AFTER', 33772 `MODE_ENTRY', and `MODE_EXIT' are optional. 33773 33774 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 33775 If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as 33776 initializer for an array of integers. Each initializer element N 33777 refers to an entity that needs mode switching, and specifies the 33778 number of different modes that might need to be set for this 33779 entity. The position of the initializer in the 33780 initializer--starting counting at zero--determines the integer 33781 that is used to refer to the mode-switched entity in question. In 33782 macros that take mode arguments / yield a mode result, modes are 33783 represented as numbers 0 ... N - 1. N is used to specify that no 33784 mode switch is needed / supplied. 33785 33786 -- Macro: MODE_NEEDED (ENTITY, INSN) 33787 ENTITY is an integer specifying a mode-switched entity. If 33788 `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 33789 return an integer value not larger than the corresponding element 33790 in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 33791 must be switched into prior to the execution of INSN. 33792 33793 -- Macro: MODE_AFTER (MODE, INSN) 33794 If this macro is defined, it is evaluated for every INSN during 33795 mode switching. It determines the mode that an insn results in (if 33796 different from the incoming mode). 33797 33798 -- Macro: MODE_ENTRY (ENTITY) 33799 If this macro is defined, it is evaluated for every ENTITY that 33800 needs mode switching. It should evaluate to an integer, which is 33801 a mode that ENTITY is assumed to be switched to at function entry. 33802 If `MODE_ENTRY' is defined then `MODE_EXIT' must be defined. 33803 33804 -- Macro: MODE_EXIT (ENTITY) 33805 If this macro is defined, it is evaluated for every ENTITY that 33806 needs mode switching. It should evaluate to an integer, which is 33807 a mode that ENTITY is assumed to be switched to at function exit. 33808 If `MODE_EXIT' is defined then `MODE_ENTRY' must be defined. 33809 33810 -- Macro: MODE_PRIORITY_TO_MODE (ENTITY, N) 33811 This macro specifies the order in which modes for ENTITY are 33812 processed. 0 is the highest priority, 33813 `NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 33814 of the macro should be an integer designating a mode for ENTITY. 33815 For any fixed ENTITY, `mode_priority_to_mode' (ENTITY, N) shall be 33816 a bijection in 0 ... `num_modes_for_mode_switching[ENTITY] - 1'. 33817 33818 -- Macro: EMIT_MODE_SET (ENTITY, MODE, HARD_REGS_LIVE) 33819 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE 33820 is the set of hard registers live at the point where the insn(s) 33821 are to be inserted. 33822 33823 33824File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 33825 3382617.25 Defining target-specific uses of `__attribute__' 33827====================================================== 33828 33829Target-specific attributes may be defined for functions, data and types. 33830These are described using the following target hooks; they also need to 33831be documented in `extend.texi'. 33832 33833 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 33834 If defined, this target hook points to an array of `struct 33835 attribute_spec' (defined in `tree.h') specifying the machine 33836 specific attributes for this target and some of the restrictions 33837 on the entities to which these attributes are applied and the 33838 arguments they take. 33839 33840 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 33841 const_tree TYPE2) 33842 If defined, this target hook is a function which returns zero if 33843 the attributes on TYPE1 and TYPE2 are incompatible, one if they 33844 are compatible, and two if they are nearly compatible (which 33845 causes a warning to be generated). If this is not defined, 33846 machine-specific attributes are supposed always to be compatible. 33847 33848 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 33849 If defined, this target hook is a function which assigns default 33850 attributes to the newly defined TYPE. 33851 33852 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 33853 TYPE2) 33854 Define this target hook if the merging of type attributes needs 33855 special handling. If defined, the result is a list of the combined 33856 `TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 33857 `comptypes' has already been called and returned 1. This function 33858 may call `merge_attributes' to handle machine-independent merging. 33859 33860 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 33861 NEWDECL) 33862 Define this target hook if the merging of decl attributes needs 33863 special handling. If defined, the result is a list of the combined 33864 `DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 33865 declaration of OLDDECL. Examples of when this is needed are when 33866 one attribute overrides another, or when an attribute is nullified 33867 by a subsequent definition. This function may call 33868 `merge_attributes' to handle machine-independent merging. 33869 33870 If the only target-specific handling you require is `dllimport' 33871 for Microsoft Windows targets, you should define the macro 33872 `TARGET_DLLIMPORT_DECL_ATTRIBUTES' to `1'. The compiler will then 33873 define a function called `merge_dllimport_decl_attributes' which 33874 can then be defined as the expansion of 33875 `TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 33876 `handle_dll_attribute' in the attribute table for your port to 33877 perform initial processing of the `dllimport' and `dllexport' 33878 attributes. This is done in `i386/cygwin.h' and `i386/i386.c', 33879 for example. 33880 33881 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 33882 DECL) 33883 DECL is a variable or function with `__attribute__((dllimport))' 33884 specified. Use this hook if the target needs to add extra 33885 validation checks to `handle_dll_attribute'. 33886 33887 -- Macro: TARGET_DECLSPEC 33888 Define this macro to a nonzero value if you want to treat 33889 `__declspec(X)' as equivalent to `__attribute((X))'. By default, 33890 this behavior is enabled only for targets that define 33891 `TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 33892 `__declspec' is via a built-in macro, but you should not rely on 33893 this implementation detail. 33894 33895 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 33896 *ATTR_PTR) 33897 Define this target hook if you want to be able to add attributes 33898 to a decl when it is being created. This is normally useful for 33899 back ends which wish to implement a pragma by using the attributes 33900 which correspond to the pragma's effect. The NODE argument is the 33901 decl which is being created. The ATTR_PTR argument is a pointer 33902 to the attribute list for this decl. The list itself should not 33903 be modified, since it may be shared with other decls, but 33904 attributes may be chained on the head of the list and `*ATTR_PTR' 33905 modified to point to the new attributes, or a copy of the list may 33906 be made if further changes are needed. 33907 33908 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 33909 FNDECL) 33910 This target hook returns `true' if it is ok to inline FNDECL into 33911 the current function, despite its having target-specific 33912 attributes, `false' otherwise. By default, if a function has a 33913 target specific attribute attached to it, it will not be inlined. 33914 33915 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, 33916 tree NAME, tree ARGS, int FLAGS) 33917 This hook is called to parse the `attribute(option("..."))', and 33918 it allows the function to set different target machine compile time 33919 options for the current function that might be different than the 33920 options specified on the command line. The hook should return 33921 `true' if the options are valid. 33922 33923 The hook should set the DECL_FUNCTION_SPECIFIC_TARGET field in the 33924 function declaration to hold a pointer to a target specific STRUCT 33925 CL_TARGET_OPTION structure. 33926 33927 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR) 33928 This hook is called to save any additional target specific 33929 information in the STRUCT CL_TARGET_OPTION structure for function 33930 specific options. *Note Option file format::. 33931 33932 -- Target Hook: void TARGET_OPTION_RESTORE (struct cl_target_option 33933 *PTR) 33934 This hook is called to restore any additional target specific 33935 information in the STRUCT CL_TARGET_OPTION structure for function 33936 specific options. 33937 33938 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 33939 struct cl_target_option *PTR) 33940 This hook is called to print any additional target specific 33941 information in the STRUCT CL_TARGET_OPTION structure for function 33942 specific options. 33943 33944 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (target ARGS) 33945 This target hook parses the options for `#pragma GCC option' to 33946 set the machine specific options for functions that occur later in 33947 the input stream. The options should be the same as handled by the 33948 `TARGET_VALID_OPTION_ATTRIBUTE_P' hook. 33949 33950 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 33951 This target hook returns `false' if the CALLER function cannot 33952 inline CALLEE, based on target specific information. By default, 33953 inlining is not allowed if the callee function has function 33954 specific target options and the caller does not use the same 33955 options. 33956 33957 33958File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 33959 3396017.26 Emulating TLS 33961=================== 33962 33963For targets whose psABI does not provide Thread Local Storage via 33964specific relocations and instruction sequences, an emulation layer is 33965used. A set of target hooks allows this emulation layer to be 33966configured for the requirements of a particular target. For instance 33967the psABI may in fact specify TLS support in terms of an emulation 33968layer. 33969 33970 The emulation layer works by creating a control object for every TLS 33971object. To access the TLS object, a lookup function is provided which, 33972when given the address of the control object, will return the address 33973of the current thread's instance of the TLS object. 33974 33975 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 33976 Contains the name of the helper function that uses a TLS control 33977 object to locate a TLS instance. The default causes libgcc's 33978 emulated TLS helper function to be used. 33979 33980 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 33981 Contains the name of the helper function that should be used at 33982 program startup to register TLS objects that are implicitly 33983 initialized to zero. If this is `NULL', all TLS objects will have 33984 explicit initializers. The default causes libgcc's emulated TLS 33985 registration function to be used. 33986 33987 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 33988 Contains the name of the section in which TLS control variables 33989 should be placed. The default of `NULL' allows these to be placed 33990 in any section. 33991 33992 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 33993 Contains the name of the section in which TLS initializers should 33994 be placed. The default of `NULL' allows these to be placed in any 33995 section. 33996 33997 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 33998 Contains the prefix to be prepended to TLS control variable names. 33999 The default of `NULL' uses a target-specific prefix. 34000 34001 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 34002 Contains the prefix to be prepended to TLS initializer objects. 34003 The default of `NULL' uses a target-specific prefix. 34004 34005 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 34006 Specifies a function that generates the FIELD_DECLs for a TLS 34007 control object type. TYPE is the RECORD_TYPE the fields are for 34008 and NAME should be filled with the structure tag, if the default of 34009 `__emutls_object' is unsuitable. The default creates a type 34010 suitable for libgcc's emulated TLS function. 34011 34012 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 34013 TMPL_ADDR) 34014 Specifies a function that generates the CONSTRUCTOR to initialize a 34015 TLS control object. VAR is the TLS control object, DECL is the 34016 TLS object and TMPL_ADDR is the address of the initializer. The 34017 default initializes libgcc's emulated TLS control object. 34018 34019 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 34020 Specifies whether the alignment of TLS control variable objects is 34021 fixed and should not be increased as some backends may do to 34022 optimize single objects. The default is false. 34023 34024 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 34025 Specifies whether a DWARF `DW_OP_form_tls_address' location 34026 descriptor may be used to describe emulated TLS control objects. 34027 34028 34029File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 34030 3403117.27 Defining coprocessor specifics for MIPS targets. 34032====================================================== 34033 34034The MIPS specification allows MIPS implementations to have as many as 4 34035coprocessors, each with as many as 32 private registers. GCC supports 34036accessing these registers and transferring values between the registers 34037and memory using asm-ized variables. For example: 34038 34039 register unsigned int cp0count asm ("c0r1"); 34040 unsigned int d; 34041 34042 d = cp0count + 3; 34043 34044 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 34045names may be added as described below, or the default names may be 34046overridden entirely in `SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 34047 34048 Coprocessor registers are assumed to be epilogue-used; sets to them 34049will be preserved even if it does not appear that the register is used 34050again later in the function. 34051 34052 Another note: according to the MIPS spec, coprocessor 1 (if present) is 34053the FPU. One accesses COP1 registers through standard mips 34054floating-point support; they are not included in this mechanism. 34055 34056 There is one macro used in defining the MIPS coprocessor interface 34057which you may want to override in subtargets; it is described below. 34058 34059 -- Macro: ALL_COP_ADDITIONAL_REGISTER_NAMES 34060 A comma-separated list (with leading comma) of pairs describing the 34061 alternate names of coprocessor registers. The format of each 34062 entry should be 34063 { ALTERNATENAME, REGISTER_NUMBER} 34064 Default: empty. 34065 34066 34067File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 34068 3406917.28 Parameters for Precompiled Header Validity Checking 34070========================================================= 34071 34072 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 34073 This hook returns a pointer to the data needed by 34074 `TARGET_PCH_VALID_P' and sets `*SZ' to the size of the data in 34075 bytes. 34076 34077 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 34078 size_t SZ) 34079 This hook checks whether the options used to create a PCH file are 34080 compatible with the current settings. It returns `NULL' if so and 34081 a suitable error message if not. Error messages will be presented 34082 to the user and must be localized using `_(MSG)'. 34083 34084 DATA is the data that was returned by `TARGET_GET_PCH_VALIDITY' 34085 when the PCH file was created and SZ is the size of that data in 34086 bytes. It's safe to assume that the data was created by the same 34087 version of the compiler, so no format checking is needed. 34088 34089 The default definition of `default_pch_valid_p' should be suitable 34090 for most targets. 34091 34092 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 34093 PCH_FLAGS) 34094 If this hook is nonnull, the default implementation of 34095 `TARGET_PCH_VALID_P' will use it to check for compatible values of 34096 `target_flags'. PCH_FLAGS specifies the value that `target_flags' 34097 had when the PCH file was created. The return value is the same 34098 as for `TARGET_PCH_VALID_P'. 34099 34100 34101File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros 34102 3410317.29 C++ ABI parameters 34104======================== 34105 34106 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 34107 Define this hook to override the integer type used for guard 34108 variables. These are used to implement one-time construction of 34109 static objects. The default is long_long_integer_type_node. 34110 34111 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 34112 This hook determines how guard variables are used. It should 34113 return `false' (the default) if the first byte should be used. A 34114 return value of `true' indicates that only the least significant 34115 bit should be used. 34116 34117 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 34118 This hook returns the size of the cookie to use when allocating an 34119 array whose elements have the indicated TYPE. Assumes that it is 34120 already known that a cookie is needed. The default is `max(sizeof 34121 (size_t), alignof(type))', as defined in section 2.7 of the 34122 IA64/Generic C++ ABI. 34123 34124 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 34125 This hook should return `true' if the element size should be 34126 stored in array cookies. The default is to return `false'. 34127 34128 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 34129 IMPORT_EXPORT) 34130 If defined by a backend this hook allows the decision made to 34131 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 34132 contain 1 if the class is going to be exported, -1 if it is going 34133 to be imported and 0 otherwise. This function should return the 34134 modified value and perform any other actions necessary to support 34135 the backend's targeted operating system. 34136 34137 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 34138 This hook should return `true' if constructors and destructors 34139 return the address of the object created/destroyed. The default 34140 is to return `false'. 34141 34142 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 34143 This hook returns true if the key method for a class (i.e., the 34144 method which, if defined in the current translation unit, causes 34145 the virtual table to be emitted) may be an inline function. Under 34146 the standard Itanium C++ ABI the key method may be an inline 34147 function so long as the function is not declared inline in the 34148 class definition. Under some variants of the ABI, an inline 34149 function can never be the key method. The default is to return 34150 `true'. 34151 34152 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 34153 DECL) 34154 DECL is a virtual table, virtual table table, typeinfo object, or 34155 other similar implicit class data object that will be emitted with 34156 external linkage in this translation unit. No ELF visibility has 34157 been explicitly specified. If the target needs to specify a 34158 visibility other than that of the containing class, use this hook 34159 to set `DECL_VISIBILITY' and `DECL_VISIBILITY_SPECIFIED'. 34160 34161 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 34162 This hook returns true (the default) if virtual tables and other 34163 similar implicit class data objects are always COMDAT if they have 34164 external linkage. If this hook returns false, then class data for 34165 classes whose virtual table will be emitted in only one translation 34166 unit will not be COMDAT. 34167 34168 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 34169 This hook returns true (the default) if the RTTI information for 34170 the basic types which is defined in the C++ runtime should always 34171 be COMDAT, false if it should not be COMDAT. 34172 34173 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 34174 This hook returns true if `__aeabi_atexit' (as defined by the ARM 34175 EABI) should be used to register static destructors when 34176 `-fuse-cxa-atexit' is in effect. The default is to return false 34177 to use `__cxa_atexit'. 34178 34179 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 34180 This hook returns true if the target `atexit' function can be used 34181 in the same manner as `__cxa_atexit' to register C++ static 34182 destructors. This requires that `atexit'-registered functions in 34183 shared libraries are run in the correct order when the libraries 34184 are unloaded. The default is to return false. 34185 34186 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 34187 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has 34188 just been defined. Use this hook to make adjustments to the class 34189 (eg, tweak visibility or perform any other required target 34190 modifications). 34191 34192 34193File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros 34194 3419517.30 Adding support for named address spaces 34196============================================= 34197 34198The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 34199committee, `Programming Languages - C - Extensions to support embedded 34200processors', specifies a syntax for embedded processors to specify 34201alternate address spaces. You can configure a GCC port to support 34202section 5.1 of the draft report to add support for address spaces other 34203than the default address space. These address spaces are new keywords 34204that are similar to the `volatile' and `const' type attributes. 34205 34206 Pointers to named address spaces can have a different size than 34207pointers to the generic address space. 34208 34209 For example, the SPU port uses the `__ea' address space to refer to 34210memory in the host processor, rather than memory local to the SPU 34211processor. Access to memory in the `__ea' address space involves 34212issuing DMA operations to move data between the host processor and the 34213local processor memory address space. Pointers in the `__ea' address 34214space are either 32 bits or 64 bits based on the `-mea32' or `-mea64' 34215switches (native SPU pointers are always 32 bits). 34216 34217 Internally, address spaces are represented as a small integer in the 34218range 0 to 15 with address space 0 being reserved for the generic 34219address space. 34220 34221 -- Macro: TARGET_ADDR_SPACE_KEYWORDS 34222 A list of `ADDR_SPACE_KEYWORD' macros to define each named address 34223 keyword. The `ADDR_SPACE_KEYWORD' macro takes two arguments, the 34224 keyword string and the number of the named address space. For 34225 example, the SPU port uses the following to declare `__ea' as the 34226 keyword for named address space #1: 34227 #define ADDR_SPACE_EA 1 34228 #define TARGET_ADDR_SPACE_KEYWORDS ADDR_SPACE_KEYWORD ("__ea", ADDR_SPACE_EA) 34229 34230 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_POINTER_MODE 34231 (addr_space_t ADDRESS_SPACE) 34232 Define this to return the machine mode to use for pointers to 34233 ADDRESS_SPACE if the target supports named address spaces. The 34234 default version of this hook returns `ptr_mode' for the generic 34235 address space only. 34236 34237 -- Target Hook: enum machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE 34238 (addr_space_t ADDRESS_SPACE) 34239 Define this to return the machine mode to use for addresses in 34240 ADDRESS_SPACE if the target supports named address spaces. The 34241 default version of this hook returns `Pmode' for the generic 34242 address space only. 34243 34244 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (enum 34245 machine_mode MODE, addr_space_t AS) 34246 Define this to return nonzero if the port can handle pointers with 34247 machine mode MODE to address space AS. This target hook is the 34248 same as the `TARGET_VALID_POINTER_MODE' target hook, except that 34249 it includes explicit named address space support. The default 34250 version of this hook returns true for the modes returned by either 34251 the `TARGET_ADDR_SPACE_POINTER_MODE' or 34252 `TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given 34253 address space. 34254 34255 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (enum 34256 machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 34257 Define this to return true if EXP is a valid address for mode MODE 34258 in the named address space AS. The STRICT parameter says whether 34259 strict addressing is in effect after reload has finished. This 34260 target hook is the same as the `TARGET_LEGITIMATE_ADDRESS_P' 34261 target hook, except that it includes explicit named address space 34262 support. 34263 34264 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 34265 OLDX, enum machine_mode MODE, addr_space_t AS) 34266 Define this to modify an invalid address X to be a valid address 34267 with mode MODE in the named address space AS. This target hook is 34268 the same as the `TARGET_LEGITIMIZE_ADDRESS' target hook, except 34269 that it includes explicit named address space support. 34270 34271 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t 34272 SUPERSET, addr_space_t SUBSET) 34273 Define this to return whether the SUBSET named address space is 34274 contained within the SUPERSET named address space. Pointers to a 34275 named address space that is a subset of another named address space 34276 will be converted automatically without a cast if used together in 34277 arithmetic operations. Pointers to a superset address space can be 34278 converted to pointers to a subset address space via explicit casts. 34279 34280 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 34281 tree TO_TYPE) 34282 Define this to convert the pointer expression represented by the 34283 RTL OP with type FROM_TYPE that points to a named address space to 34284 a new pointer expression with type TO_TYPE that points to a 34285 different named address space. When this hook it called, it is 34286 guaranteed that one of the two address spaces is a subset of the 34287 other, as determined by the `TARGET_ADDR_SPACE_SUBSET_P' target 34288 hook. 34289 34290 34291File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 34292 3429317.31 Miscellaneous Parameters 34294============================== 34295 34296Here are several miscellaneous parameters. 34297 34298 -- Macro: HAS_LONG_COND_BRANCH 34299 Define this boolean macro to indicate whether or not your 34300 architecture has conditional branches that can span all of memory. 34301 It is used in conjunction with an optimization that partitions hot 34302 and cold basic blocks into separate sections of the executable. 34303 If this macro is set to false, gcc will convert any conditional 34304 branches that attempt to cross between sections into unconditional 34305 branches or indirect jumps. 34306 34307 -- Macro: HAS_LONG_UNCOND_BRANCH 34308 Define this boolean macro to indicate whether or not your 34309 architecture has unconditional branches that can span all of 34310 memory. It is used in conjunction with an optimization that 34311 partitions hot and cold basic blocks into separate sections of the 34312 executable. If this macro is set to false, gcc will convert any 34313 unconditional branches that attempt to cross between sections into 34314 indirect jumps. 34315 34316 -- Macro: CASE_VECTOR_MODE 34317 An alias for a machine mode name. This is the machine mode that 34318 elements of a jump-table should have. 34319 34320 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 34321 Optional: return the preferred mode for an `addr_diff_vec' when 34322 the minimum and maximum offset are known. If you define this, it 34323 enables extra code in branch shortening to deal with 34324 `addr_diff_vec'. To make this work, you also have to define 34325 `INSN_ALIGN' and make the alignment for `addr_diff_vec' explicit. 34326 The BODY argument is provided so that the offset_unsigned and scale 34327 flags can be updated. 34328 34329 -- Macro: CASE_VECTOR_PC_RELATIVE 34330 Define this macro to be a C expression to indicate when jump-tables 34331 should contain relative addresses. You need not define this macro 34332 if jump-tables never contain relative addresses, or jump-tables 34333 should contain relative addresses only when `-fPIC' or `-fPIC' is 34334 in effect. 34335 34336 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 34337 This function return the smallest number of different values for 34338 which it is best to use a jump-table instead of a tree of 34339 conditional branches. The default is four for machines with a 34340 `casesi' instruction and five otherwise. This is best for most 34341 machines. 34342 34343 -- Macro: CASE_USE_BIT_TESTS 34344 Define this macro to be a C expression to indicate whether C switch 34345 statements may be implemented by a sequence of bit tests. This is 34346 advantageous on processors that can efficiently implement left 34347 shift of 1 by the number of bits held in a register, but 34348 inappropriate on targets that would require a loop. By default, 34349 this macro returns `true' if the target defines an `ashlsi3' 34350 pattern, and `false' otherwise. 34351 34352 -- Macro: WORD_REGISTER_OPERATIONS 34353 Define this macro if operations between registers with integral 34354 mode smaller than a word are always performed on the entire 34355 register. Most RISC machines have this property and most CISC 34356 machines do not. 34357 34358 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 34359 Define this macro to be a C expression indicating when insns that 34360 read memory in MEM_MODE, an integral mode narrower than a word, 34361 set the bits outside of MEM_MODE to be either the sign-extension 34362 or the zero-extension of the data read. Return `SIGN_EXTEND' for 34363 values of MEM_MODE for which the insn sign-extends, `ZERO_EXTEND' 34364 for which it zero-extends, and `UNKNOWN' for other modes. 34365 34366 This macro is not called with MEM_MODE non-integral or with a width 34367 greater than or equal to `BITS_PER_WORD', so you may return any 34368 value in this case. Do not define this macro if it would always 34369 return `UNKNOWN'. On machines where this macro is defined, you 34370 will normally define it as the constant `SIGN_EXTEND' or 34371 `ZERO_EXTEND'. 34372 34373 You may return a non-`UNKNOWN' value even if for some hard 34374 registers the sign extension is not performed, if for the 34375 `REGNO_REG_CLASS' of these hard registers 34376 `CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 34377 MEM_MODE and the TO mode is any integral mode larger than this but 34378 not larger than `word_mode'. 34379 34380 You must return `UNKNOWN' if for some hard registers that allow 34381 this mode, `CANNOT_CHANGE_MODE_CLASS' says that they cannot change 34382 to `word_mode', but that they can change to another integral mode 34383 that is larger then MEM_MODE but still smaller than `word_mode'. 34384 34385 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 34386 Define this macro if loading short immediate values into registers 34387 sign extends. 34388 34389 -- Macro: FIXUNS_TRUNC_LIKE_FIX_TRUNC 34390 Define this macro if the same instructions that convert a floating 34391 point number to a signed fixed point number also convert validly 34392 to an unsigned one. 34393 34394 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (enum 34395 machine_mode MODE) 34396 When `-ffast-math' is in effect, GCC tries to optimize divisions 34397 by the same divisor, by turning them into multiplications by the 34398 reciprocal. This target hook specifies the minimum number of 34399 divisions that should be there for GCC to perform the optimization 34400 for a variable of mode MODE. The default implementation returns 3 34401 if the machine has an instruction for the division, and 2 if it 34402 does not. 34403 34404 -- Macro: MOVE_MAX 34405 The maximum number of bytes that a single instruction can move 34406 quickly between memory and registers or between two memory 34407 locations. 34408 34409 -- Macro: MAX_MOVE_MAX 34410 The maximum number of bytes that a single instruction can move 34411 quickly between memory and registers or between two memory 34412 locations. If this is undefined, the default is `MOVE_MAX'. 34413 Otherwise, it is the constant value that is the largest value that 34414 `MOVE_MAX' can have at run-time. 34415 34416 -- Macro: SHIFT_COUNT_TRUNCATED 34417 A C expression that is nonzero if on this machine the number of 34418 bits actually used for the count of a shift operation is equal to 34419 the number of bits needed to represent the size of the object 34420 being shifted. When this macro is nonzero, the compiler will 34421 assume that it is safe to omit a sign-extend, zero-extend, and 34422 certain bitwise `and' instructions that truncates the count of a 34423 shift operation. On machines that have instructions that act on 34424 bit-fields at variable positions, which may include `bit test' 34425 instructions, a nonzero `SHIFT_COUNT_TRUNCATED' also enables 34426 deletion of truncations of the values that serve as arguments to 34427 bit-field instructions. 34428 34429 If both types of instructions truncate the count (for shifts) and 34430 position (for bit-field operations), or if no variable-position 34431 bit-field instructions exist, you should define this macro. 34432 34433 However, on some machines, such as the 80386 and the 680x0, 34434 truncation only applies to shift operations and not the (real or 34435 pretended) bit-field operations. Define `SHIFT_COUNT_TRUNCATED' 34436 to be zero on such machines. Instead, add patterns to the `md' 34437 file that include the implied truncation of the shift instructions. 34438 34439 You need not define this macro if it would always have the value 34440 of zero. 34441 34442 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 34443 (enum machine_mode MODE) 34444 This function describes how the standard shift patterns for MODE 34445 deal with shifts by negative amounts or by more than the width of 34446 the mode. *Note shift patterns::. 34447 34448 On many machines, the shift patterns will apply a mask M to the 34449 shift count, meaning that a fixed-width shift of X by Y is 34450 equivalent to an arbitrary-width shift of X by Y & M. If this is 34451 true for mode MODE, the function should return M, otherwise it 34452 should return 0. A return value of 0 indicates that no particular 34453 behavior is guaranteed. 34454 34455 Note that, unlike `SHIFT_COUNT_TRUNCATED', this function does 34456 _not_ apply to general shift rtxes; it applies only to instructions 34457 that are generated by the named shift patterns. 34458 34459 The default implementation of this function returns 34460 `GET_MODE_BITSIZE (MODE) - 1' if `SHIFT_COUNT_TRUNCATED' and 0 34461 otherwise. This definition is always safe, but if 34462 `SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 34463 nevertheless truncate the shift count, you may get better code by 34464 overriding it. 34465 34466 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 34467 A C expression which is nonzero if on this machine it is safe to 34468 "convert" an integer of INPREC bits to one of OUTPREC bits (where 34469 OUTPREC is smaller than INPREC) by merely operating on it as if it 34470 had only OUTPREC bits. 34471 34472 On many machines, this expression can be 1. 34473 34474 When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 34475 modes for which `MODES_TIEABLE_P' is 0, suboptimal code can result. 34476 If this is the case, making `TRULY_NOOP_TRUNCATION' return 0 in 34477 such cases may improve things. 34478 34479 -- Target Hook: int TARGET_MODE_REP_EXTENDED (enum machine_mode MODE, 34480 enum machine_mode REP_MODE) 34481 The representation of an integral mode can be such that the values 34482 are always extended to a wider integral mode. Return 34483 `SIGN_EXTEND' if values of MODE are represented in sign-extended 34484 form to REP_MODE. Return `UNKNOWN' otherwise. (Currently, none 34485 of the targets use zero-extended representation this way so unlike 34486 `LOAD_EXTEND_OP', `TARGET_MODE_REP_EXTENDED' is expected to return 34487 either `SIGN_EXTEND' or `UNKNOWN'. Also no target extends MODE to 34488 REP_MODE so that REP_MODE is not the next widest integral mode and 34489 currently we take advantage of this fact.) 34490 34491 Similarly to `LOAD_EXTEND_OP' you may return a non-`UNKNOWN' value 34492 even if the extension is not performed on certain hard registers 34493 as long as for the `REGNO_REG_CLASS' of these hard registers 34494 `CANNOT_CHANGE_MODE_CLASS' returns nonzero. 34495 34496 Note that `TARGET_MODE_REP_EXTENDED' and `LOAD_EXTEND_OP' describe 34497 two related properties. If you define `TARGET_MODE_REP_EXTENDED 34498 (mode, word_mode)' you probably also want to define 34499 `LOAD_EXTEND_OP (mode)' to return the same type of extension. 34500 34501 In order to enforce the representation of `mode', 34502 `TRULY_NOOP_TRUNCATION' should return false when truncating to 34503 `mode'. 34504 34505 -- Macro: STORE_FLAG_VALUE 34506 A C expression describing the value returned by a comparison 34507 operator with an integral mode and stored by a store-flag 34508 instruction (`sCOND') when the condition is true. This 34509 description must apply to _all_ the `sCOND' patterns and all the 34510 comparison operators whose results have a `MODE_INT' mode. 34511 34512 A value of 1 or -1 means that the instruction implementing the 34513 comparison operator returns exactly 1 or -1 when the comparison is 34514 true and 0 when the comparison is false. Otherwise, the value 34515 indicates which bits of the result are guaranteed to be 1 when the 34516 comparison is true. This value is interpreted in the mode of the 34517 comparison operation, which is given by the mode of the first 34518 operand in the `sCOND' pattern. Either the low bit or the sign 34519 bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are 34520 used by the compiler. 34521 34522 If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 34523 generate code that depends only on the specified bits. It can also 34524 replace comparison operators with equivalent operations if they 34525 cause the required bits to be set, even if the remaining bits are 34526 undefined. For example, on a machine whose comparison operators 34527 return an `SImode' value and where `STORE_FLAG_VALUE' is defined as 34528 `0x80000000', saying that just the sign bit is relevant, the 34529 expression 34530 34531 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 34532 34533 can be converted to 34534 34535 (ashift:SI X (const_int N)) 34536 34537 where N is the appropriate shift count to move the bit being 34538 tested into the sign bit. 34539 34540 There is no way to describe a machine that always sets the 34541 low-order bit for a true value, but does not guarantee the value 34542 of any other bits, but we do not know of any machine that has such 34543 an instruction. If you are trying to port GCC to such a machine, 34544 include an instruction to perform a logical-and of the result with 34545 1 in the pattern for the comparison operators and let us know at 34546 <gcc@gcc.gnu.org>. 34547 34548 Often, a machine will have multiple instructions that obtain a 34549 value from a comparison (or the condition codes). Here are rules 34550 to guide the choice of value for `STORE_FLAG_VALUE', and hence the 34551 instructions to be used: 34552 34553 * Use the shortest sequence that yields a valid definition for 34554 `STORE_FLAG_VALUE'. It is more efficient for the compiler to 34555 "normalize" the value (convert it to, e.g., 1 or 0) than for 34556 the comparison operators to do so because there may be 34557 opportunities to combine the normalization with other 34558 operations. 34559 34560 * For equal-length sequences, use a value of 1 or -1, with -1 34561 being slightly preferred on machines with expensive jumps and 34562 1 preferred on other machines. 34563 34564 * As a second choice, choose a value of `0x80000001' if 34565 instructions exist that set both the sign and low-order bits 34566 but do not define the others. 34567 34568 * Otherwise, use a value of `0x80000000'. 34569 34570 Many machines can produce both the value chosen for 34571 `STORE_FLAG_VALUE' and its negation in the same number of 34572 instructions. On those machines, you should also define a pattern 34573 for those cases, e.g., one matching 34574 34575 (set A (neg:M (ne:M B C))) 34576 34577 Some machines can also perform `and' or `plus' operations on 34578 condition code values with less instructions than the corresponding 34579 `sCOND' insn followed by `and' or `plus'. On those machines, 34580 define the appropriate patterns. Use the names `incscc' and 34581 `decscc', respectively, for the patterns which perform `plus' or 34582 `minus' operations on condition code values. See `rs6000.md' for 34583 some examples. The GNU Superoptizer can be used to find such 34584 instruction sequences on other machines. 34585 34586 If this macro is not defined, the default value, 1, is used. You 34587 need not define `STORE_FLAG_VALUE' if the machine has no store-flag 34588 instructions, or if the value generated by these instructions is 1. 34589 34590 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 34591 A C expression that gives a nonzero `REAL_VALUE_TYPE' value that is 34592 returned when comparison operators with floating-point results are 34593 true. Define this macro on machines that have comparison 34594 operations that return floating-point values. If there are no 34595 such operations, do not define this macro. 34596 34597 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 34598 A C expression that gives a rtx representing the nonzero true 34599 element for vector comparisons. The returned rtx should be valid 34600 for the inner mode of MODE which is guaranteed to be a vector 34601 mode. Define this macro on machines that have vector comparison 34602 operations that return a vector result. If there are no such 34603 operations, do not define this macro. Typically, this macro is 34604 defined as `const1_rtx' or `constm1_rtx'. This macro may return 34605 `NULL_RTX' to prevent the compiler optimizing such vector 34606 comparison operations for the given mode. 34607 34608 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 34609 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 34610 A C expression that indicates whether the architecture defines a 34611 value for `clz' or `ctz' with a zero operand. A result of `0' 34612 indicates the value is undefined. If the value is defined for 34613 only the RTL expression, the macro should evaluate to `1'; if the 34614 value applies also to the corresponding optab entry (which is 34615 normally the case if it expands directly into the corresponding 34616 RTL), then the macro should evaluate to `2'. In the cases where 34617 the value is defined, VALUE should be set to this value. 34618 34619 If this macro is not defined, the value of `clz' or `ctz' at zero 34620 is assumed to be undefined. 34621 34622 This macro must be defined if the target's expansion for `ffs' 34623 relies on a particular value to get correct results. Otherwise it 34624 is not necessary, though it may be used to optimize some corner 34625 cases, and to provide a default expansion for the `ffs' optab. 34626 34627 Note that regardless of this macro the "definedness" of `clz' and 34628 `ctz' at zero do _not_ extend to the builtin functions visible to 34629 the user. Thus one may be free to adjust the value at will to 34630 match the target expansion of these operations without fear of 34631 breaking the API. 34632 34633 -- Macro: Pmode 34634 An alias for the machine mode for pointers. On most machines, 34635 define this to be the integer mode corresponding to the width of a 34636 hardware pointer; `SImode' on 32-bit machine or `DImode' on 64-bit 34637 machines. On some machines you must define this to be one of the 34638 partial integer modes, such as `PSImode'. 34639 34640 The width of `Pmode' must be at least as large as the value of 34641 `POINTER_SIZE'. If it is not equal, you must define the macro 34642 `POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 34643 `Pmode'. 34644 34645 -- Macro: FUNCTION_MODE 34646 An alias for the machine mode used for memory references to 34647 functions being called, in `call' RTL expressions. On most CISC 34648 machines, where an instruction can begin at any byte address, this 34649 should be `QImode'. On most RISC machines, where all instructions 34650 have fixed size and alignment, this should be a mode with the same 34651 size and alignment as the machine instruction words - typically 34652 `SImode' or `HImode'. 34653 34654 -- Macro: STDC_0_IN_SYSTEM_HEADERS 34655 In normal operation, the preprocessor expands `__STDC__' to the 34656 constant 1, to signify that GCC conforms to ISO Standard C. On 34657 some hosts, like Solaris, the system compiler uses a different 34658 convention, where `__STDC__' is normally 0, but is 1 if the user 34659 specifies strict conformance to the C Standard. 34660 34661 Defining `STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 34662 convention when processing system header files, but when 34663 processing user files `__STDC__' will always expand to 1. 34664 34665 -- Macro: NO_IMPLICIT_EXTERN_C 34666 Define this macro if the system header files support C++ as well 34667 as C. This macro inhibits the usual method of using system header 34668 files in C++, which is to pretend that the file's contents are 34669 enclosed in `extern "C" {...}'. 34670 34671 -- Macro: REGISTER_TARGET_PRAGMAS () 34672 Define this macro if you want to implement any target-specific 34673 pragmas. If defined, it is a C expression which makes a series of 34674 calls to `c_register_pragma' or `c_register_pragma_with_expansion' 34675 for each pragma. The macro may also do any setup required for the 34676 pragmas. 34677 34678 The primary reason to define this macro is to provide 34679 compatibility with other compilers for the same target. In 34680 general, we discourage definition of target-specific pragmas for 34681 GCC. 34682 34683 If the pragma can be implemented by attributes then you should 34684 consider defining the target hook `TARGET_INSERT_ATTRIBUTES' as 34685 well. 34686 34687 Preprocessor macros that appear on pragma lines are not expanded. 34688 All `#pragma' directives that do not match any registered pragma 34689 are silently ignored, unless the user specifies 34690 `-Wunknown-pragmas'. 34691 34692 -- Function: void c_register_pragma (const char *SPACE, const char 34693 *NAME, void (*CALLBACK) (struct cpp_reader *)) 34694 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 34695 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 34696 Each call to `c_register_pragma' or 34697 `c_register_pragma_with_expansion' establishes one pragma. The 34698 CALLBACK routine will be called when the preprocessor encounters a 34699 pragma of the form 34700 34701 #pragma [SPACE] NAME ... 34702 34703 SPACE is the case-sensitive namespace of the pragma, or `NULL' to 34704 put the pragma in the global namespace. The callback routine 34705 receives PFILE as its first argument, which can be passed on to 34706 cpplib's functions if necessary. You can lex tokens after the 34707 NAME by calling `pragma_lex'. Tokens that are not read by the 34708 callback will be silently ignored. The end of the line is 34709 indicated by a token of type `CPP_EOF'. Macro expansion occurs on 34710 the arguments of pragmas registered with 34711 `c_register_pragma_with_expansion' but not on the arguments of 34712 pragmas registered with `c_register_pragma'. 34713 34714 Note that the use of `pragma_lex' is specific to the C and C++ 34715 compilers. It will not work in the Java or Fortran compilers, or 34716 any other language compilers for that matter. Thus if 34717 `pragma_lex' is going to be called from target-specific code, it 34718 must only be done so when building the C and C++ compilers. This 34719 can be done by defining the variables `c_target_objs' and 34720 `cxx_target_objs' in the target entry in the `config.gcc' file. 34721 These variables should name the target-specific, language-specific 34722 object file which contains the code that uses `pragma_lex'. Note 34723 it will also be necessary to add a rule to the makefile fragment 34724 pointed to by `tmake_file' that shows how to build this object 34725 file. 34726 34727 -- Macro: HANDLE_SYSV_PRAGMA 34728 Define this macro (to a value of 1) if you want the System V style 34729 pragmas `#pragma pack(<n>)' and `#pragma weak <name> [=<value>]' 34730 to be supported by gcc. 34731 34732 The pack pragma specifies the maximum alignment (in bytes) of 34733 fields within a structure, in much the same way as the 34734 `__aligned__' and `__packed__' `__attribute__'s do. A pack value 34735 of zero resets the behavior to the default. 34736 34737 A subtlety for Microsoft Visual C/C++ style bit-field packing 34738 (e.g. -mms-bitfields) for targets that support it: When a 34739 bit-field is inserted into a packed record, the whole size of the 34740 underlying type is used by one or more same-size adjacent 34741 bit-fields (that is, if its long:3, 32 bits is used in the record, 34742 and any additional adjacent long bit-fields are packed into the 34743 same chunk of 32 bits. However, if the size changes, a new field 34744 of that size is allocated). 34745 34746 If both MS bit-fields and `__attribute__((packed))' are used, the 34747 latter will take precedence. If `__attribute__((packed))' is used 34748 on a single field when MS bit-fields are in use, it will take 34749 precedence for that field, but the alignment of the rest of the 34750 structure may affect its placement. 34751 34752 The weak pragma only works if `SUPPORTS_WEAK' and 34753 `ASM_WEAKEN_LABEL' are defined. If enabled it allows the creation 34754 of specifically named weak labels, optionally with a value. 34755 34756 -- Macro: HANDLE_PRAGMA_PACK_PUSH_POP 34757 Define this macro (to a value of 1) if you want to support the 34758 Win32 style pragmas `#pragma pack(push[,N])' and `#pragma 34759 pack(pop)'. The `pack(push,[N])' pragma specifies the maximum 34760 alignment (in bytes) of fields within a structure, in much the 34761 same way as the `__aligned__' and `__packed__' `__attribute__'s 34762 do. A pack value of zero resets the behavior to the default. 34763 Successive invocations of this pragma cause the previous values to 34764 be stacked, so that invocations of `#pragma pack(pop)' will return 34765 to the previous value. 34766 34767 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 34768 Define this macro, as well as `HANDLE_SYSV_PRAGMA', if macros 34769 should be expanded in the arguments of `#pragma pack'. 34770 34771 -- Target Hook: bool TARGET_HANDLE_PRAGMA_EXTERN_PREFIX 34772 True if `#pragma extern_prefix' is to be supported. 34773 34774 -- Macro: TARGET_DEFAULT_PACK_STRUCT 34775 If your target requires a structure packing default other than 0 34776 (meaning the machine default), define this macro to the necessary 34777 value (in bytes). This must be a value that would also be valid 34778 to use with `#pragma pack()' (that is, a small power of two). 34779 34780 -- Macro: DOLLARS_IN_IDENTIFIERS 34781 Define this macro to control use of the character `$' in 34782 identifier names for the C family of languages. 0 means `$' is 34783 not allowed by default; 1 means it is allowed. 1 is the default; 34784 there is no need to define this macro in that case. 34785 34786 -- Macro: NO_DOLLAR_IN_LABEL 34787 Define this macro if the assembler does not accept the character 34788 `$' in label names. By default constructors and destructors in 34789 G++ have `$' in the identifiers. If this macro is defined, `.' is 34790 used instead. 34791 34792 -- Macro: NO_DOT_IN_LABEL 34793 Define this macro if the assembler does not accept the character 34794 `.' in label names. By default constructors and destructors in G++ 34795 have names that use `.'. If this macro is defined, these names 34796 are rewritten to avoid `.'. 34797 34798 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 34799 Define this macro as a C expression that is nonzero if it is safe 34800 for the delay slot scheduler to place instructions in the delay 34801 slot of INSN, even if they appear to use a resource set or 34802 clobbered in INSN. INSN is always a `jump_insn' or an `insn'; GCC 34803 knows that every `call_insn' has this behavior. On machines where 34804 some `insn' or `jump_insn' is really a function call and hence has 34805 this behavior, you should define this macro. 34806 34807 You need not define this macro if it would always return zero. 34808 34809 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 34810 Define this macro as a C expression that is nonzero if it is safe 34811 for the delay slot scheduler to place instructions in the delay 34812 slot of INSN, even if they appear to set or clobber a resource 34813 referenced in INSN. INSN is always a `jump_insn' or an `insn'. 34814 On machines where some `insn' or `jump_insn' is really a function 34815 call and its operands are registers whose use is actually in the 34816 subroutine it calls, you should define this macro. Doing so 34817 allows the delay slot scheduler to move instructions which copy 34818 arguments into the argument registers into the delay slot of INSN. 34819 34820 You need not define this macro if it would always return zero. 34821 34822 -- Macro: MULTIPLE_SYMBOL_SPACES 34823 Define this macro as a C expression that is nonzero if, in some 34824 cases, global symbols from one translation unit may not be bound 34825 to undefined symbols in another translation unit without user 34826 intervention. For instance, under Microsoft Windows symbols must 34827 be explicitly imported from shared libraries (DLLs). 34828 34829 You need not define this macro if it would always evaluate to zero. 34830 34831 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree 34832 INPUTS, tree CLOBBERS) 34833 This target hook should add to CLOBBERS `STRING_CST' trees for any 34834 hard regs the port wishes to automatically clobber for an asm. It 34835 should return the result of the last `tree_cons' used to add a 34836 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the 34837 corresponding parameters to the asm and may be inspected to avoid 34838 clobbering a register that is an input or output of the asm. You 34839 can use `tree_overlaps_hard_reg_set', declared in `tree.h', to test 34840 for overlap with regards to asm-declared registers. 34841 34842 -- Macro: MATH_LIBRARY 34843 Define this macro as a C string constant for the linker argument 34844 to link in the system math library, or `""' if the target does not 34845 have a separate math library. 34846 34847 You need only define this macro if the default of `"-lm"' is wrong. 34848 34849 -- Macro: LIBRARY_PATH_ENV 34850 Define this macro as a C string constant for the environment 34851 variable that specifies where the linker should look for libraries. 34852 34853 You need only define this macro if the default of `"LIBRARY_PATH"' 34854 is wrong. 34855 34856 -- Macro: TARGET_POSIX_IO 34857 Define this macro if the target supports the following POSIX file 34858 functions, access, mkdir and file locking with fcntl / F_SETLKW. 34859 Defining `TARGET_POSIX_IO' will enable the test coverage code to 34860 use file locking when exiting a program, which avoids race 34861 conditions if the program has forked. It will also create 34862 directories at run-time for cross-profiling. 34863 34864 -- Macro: MAX_CONDITIONAL_EXECUTE 34865 A C expression for the maximum number of instructions to execute 34866 via conditional execution instructions instead of a branch. A 34867 value of `BRANCH_COST'+1 is the default if the machine does not 34868 use cc0, and 1 if it does use cc0. 34869 34870 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 34871 Used if the target needs to perform machine-dependent 34872 modifications on the conditionals used for turning basic blocks 34873 into conditionally executed code. CE_INFO points to a data 34874 structure, `struct ce_if_block', which contains information about 34875 the currently processed blocks. TRUE_EXPR and FALSE_EXPR are the 34876 tests that are used for converting the then-block and the 34877 else-block, respectively. Set either TRUE_EXPR or FALSE_EXPR to a 34878 null pointer if the tests cannot be converted. 34879 34880 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 34881 FALSE_EXPR) 34882 Like `IFCVT_MODIFY_TESTS', but used when converting more 34883 complicated if-statements into conditions combined by `and' and 34884 `or' operations. BB contains the basic block that contains the 34885 test that is currently being processed and about to be turned into 34886 a condition. 34887 34888 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 34889 A C expression to modify the PATTERN of an INSN that is to be 34890 converted to conditional execution format. CE_INFO points to a 34891 data structure, `struct ce_if_block', which contains information 34892 about the currently processed blocks. 34893 34894 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 34895 A C expression to perform any final machine dependent 34896 modifications in converting code to conditional execution. The 34897 involved basic blocks can be found in the `struct ce_if_block' 34898 structure that is pointed to by CE_INFO. 34899 34900 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 34901 A C expression to cancel any machine dependent modifications in 34902 converting code to conditional execution. The involved basic 34903 blocks can be found in the `struct ce_if_block' structure that is 34904 pointed to by CE_INFO. 34905 34906 -- Macro: IFCVT_INIT_EXTRA_FIELDS (CE_INFO) 34907 A C expression to initialize any extra fields in a `struct 34908 ce_if_block' structure, which are defined by the 34909 `IFCVT_EXTRA_FIELDS' macro. 34910 34911 -- Macro: IFCVT_EXTRA_FIELDS 34912 If defined, it should expand to a set of field declarations that 34913 will be added to the `struct ce_if_block' structure. These should 34914 be initialized by the `IFCVT_INIT_EXTRA_FIELDS' macro. 34915 34916 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 34917 If non-null, this hook performs a target-specific pass over the 34918 instruction stream. The compiler will run it at all optimization 34919 levels, just before the point at which it normally does 34920 delayed-branch scheduling. 34921 34922 The exact purpose of the hook varies from target to target. Some 34923 use it to do transformations that are necessary for correctness, 34924 such as laying out in-function constant pools or avoiding hardware 34925 hazards. Others use it as an opportunity to do some 34926 machine-dependent optimizations. 34927 34928 You need not implement the hook if it has nothing to do. The 34929 default definition is null. 34930 34931 -- Target Hook: void TARGET_INIT_BUILTINS (void) 34932 Define this hook if you have any machine-specific built-in 34933 functions that need to be defined. It should be a function that 34934 performs the necessary setup. 34935 34936 Machine specific built-in functions can be useful to expand 34937 special machine instructions that would otherwise not normally be 34938 generated because they have no equivalent in the source language 34939 (for example, SIMD vector instructions or prefetch instructions). 34940 34941 To create a built-in function, call the function 34942 `lang_hooks.builtin_function' which is defined by the language 34943 front end. You can use any type nodes set up by 34944 `build_common_tree_nodes' and `build_common_tree_nodes_2'; only 34945 language front ends that use those two functions will call 34946 `TARGET_INIT_BUILTINS'. 34947 34948 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 34949 INITIALIZE_P) 34950 Define this hook if you have any machine-specific built-in 34951 functions that need to be defined. It should be a function that 34952 returns the builtin function declaration for the builtin function 34953 code CODE. If there is no such builtin and it cannot be 34954 initialized at this time if INITIALIZE_P is true the function 34955 should return `NULL_TREE'. If CODE is out of range the function 34956 should return `error_mark_node'. 34957 34958 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 34959 SUBTARGET, enum machine_mode MODE, int IGNORE) 34960 Expand a call to a machine specific built-in function that was set 34961 up by `TARGET_INIT_BUILTINS'. EXP is the expression for the 34962 function call; the result should go to TARGET if that is 34963 convenient, and have mode MODE if that is convenient. SUBTARGET 34964 may be used as the target for computing one of EXP's operands. 34965 IGNORE is nonzero if the value is to be ignored. This function 34966 should return the result of the call to the built-in function. 34967 34968 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 34969 LOC, tree FNDECL, void *ARGLIST) 34970 Select a replacement for a machine specific built-in function that 34971 was set up by `TARGET_INIT_BUILTINS'. This is done _before_ 34972 regular type checking, and so allows the target to implement a 34973 crude form of function overloading. FNDECL is the declaration of 34974 the built-in function. ARGLIST is the list of arguments passed to 34975 the built-in function. The result is a complete expression that 34976 implements the operation, usually another `CALL_EXPR'. ARGLIST 34977 really has type `VEC(tree,gc)*' 34978 34979 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, tree ARGLIST, 34980 bool IGNORE) 34981 Fold a call to a machine specific built-in function that was set 34982 up by `TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 34983 built-in function. ARGLIST is the list of arguments passed to the 34984 built-in function. The result is another tree containing a 34985 simplified expression for the call's result. If IGNORE is true 34986 the value will be ignored. 34987 34988 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const_rtx 34989 INSN) 34990 Take an instruction in INSN and return NULL if it is valid within a 34991 low-overhead loop, otherwise return a string explaining why doloop 34992 could not be applied. 34993 34994 Many targets use special registers for low-overhead looping. For 34995 any instruction that clobbers these this function should return a 34996 string indicating the reason why the doloop could not be applied. 34997 By default, the RTL loop optimizer does not use a present doloop 34998 pattern for loops containing function calls or branch on table 34999 instructions. 35000 35001 -- Macro: MD_CAN_REDIRECT_BRANCH (BRANCH1, BRANCH2) 35002 Take a branch insn in BRANCH1 and another in BRANCH2. Return true 35003 if redirecting BRANCH1 to the destination of BRANCH2 is possible. 35004 35005 On some targets, branches may have a limited range. Optimizing the 35006 filling of delay slots can result in branches being redirected, 35007 and this may in turn cause a branch offset to overflow. 35008 35009 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 35010 This target hook returns `true' if X is considered to be 35011 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 35012 PA doesn't consider PLUS to be commutative inside a MEM. 35013 OUTER_CODE is the rtx code of the enclosing rtl, if known, 35014 otherwise it is UNKNOWN. 35015 35016 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 35017 When the initial value of a hard register has been copied in a 35018 pseudo register, it is often not necessary to actually allocate 35019 another register to this pseudo register, because the original 35020 hard register or a stack slot it has been saved into can be used. 35021 `TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 35022 allocation once for each hard register that had its initial value 35023 copied by using `get_func_hard_reg_initial_val' or 35024 `get_hard_reg_initial_val'. Possible values are `NULL_RTX', if 35025 you don't want to do any special allocation, a `REG' rtx--that 35026 would typically be the hard register itself, if it is known not to 35027 be clobbered--or a `MEM'. If you are returning a `MEM', this is 35028 only a hint for the allocator; it might decide to use another 35029 register anyways. You may use `current_function_leaf_function' in 35030 the hook, functions that use `REG_N_SETS', to determine if the hard 35031 register in question will not be clobbered. The default value of 35032 this hook is `NULL', which disables any special allocation. 35033 35034 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 35035 FLAGS) 35036 This target hook returns nonzero if X, an `unspec' or 35037 `unspec_volatile' operation, might cause a trap. Targets can use 35038 this hook to enhance precision of analysis for `unspec' and 35039 `unspec_volatile' operations. You may call `may_trap_p_1' to 35040 analyze inner elements of X in which case FLAGS should be passed 35041 along. 35042 35043 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 35044 The compiler invokes this hook whenever it changes its current 35045 function context (`cfun'). You can define this function if the 35046 back end needs to perform any initialization or reset actions on a 35047 per-function basis. For example, it may be used to implement 35048 function attributes that affect register usage or code generation 35049 patterns. The argument DECL is the declaration for the new 35050 function context, and may be null to indicate that the compiler 35051 has left a function context and is returning to processing at the 35052 top level. The default hook function does nothing. 35053 35054 GCC sets `cfun' to a dummy function context during initialization 35055 of some parts of the back end. The hook function is not invoked 35056 in this situation; you need not worry about the hook being invoked 35057 recursively, or when the back end is in a partially-initialized 35058 state. `cfun' might be `NULL' to indicate processing at top level, 35059 outside of any function scope. 35060 35061 -- Macro: TARGET_OBJECT_SUFFIX 35062 Define this macro to be a C string representing the suffix for 35063 object files on your target machine. If you do not define this 35064 macro, GCC will use `.o' as the suffix for object files. 35065 35066 -- Macro: TARGET_EXECUTABLE_SUFFIX 35067 Define this macro to be a C string representing the suffix to be 35068 automatically added to executable files on your target machine. 35069 If you do not define this macro, GCC will use the null string as 35070 the suffix for executable files. 35071 35072 -- Macro: COLLECT_EXPORT_LIST 35073 If defined, `collect2' will scan the individual object files 35074 specified on its command line and create an export list for the 35075 linker. Define this macro for systems like AIX, where the linker 35076 discards object files that are not referenced from `main' and uses 35077 export lists. 35078 35079 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 35080 Define this macro to a C expression representing a variant of the 35081 method call MDECL, if Java Native Interface (JNI) methods must be 35082 invoked differently from other methods on your target. For 35083 example, on 32-bit Microsoft Windows, JNI methods must be invoked 35084 using the `stdcall' calling convention and this macro is then 35085 defined as this expression: 35086 35087 build_type_attribute_variant (MDECL, 35088 build_tree_list 35089 (get_identifier ("stdcall"), 35090 NULL)) 35091 35092 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 35093 This target hook returns `true' past the point in which new jump 35094 instructions could be created. On machines that require a 35095 register for every jump such as the SHmedia ISA of SH5, this point 35096 would typically be reload, so this target hook should be defined 35097 to a function such as: 35098 35099 static bool 35100 cannot_modify_jumps_past_reload_p () 35101 { 35102 return (reload_completed || reload_in_progress); 35103 } 35104 35105 -- Target Hook: enum reg_class TARGET_BRANCH_TARGET_REGISTER_CLASS 35106 (void) 35107 This target hook returns a register class for which branch target 35108 register optimizations should be applied. All registers in this 35109 class should be usable interchangeably. After reload, registers 35110 in this class will be re-allocated and loads will be hoisted out 35111 of loops and be subjected to inter-block scheduling. 35112 35113 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 35114 AFTER_PROLOGUE_EPILOGUE_GEN) 35115 Branch target register optimization will by default exclude 35116 callee-saved registers that are not already live during the 35117 current function; if this target hook returns true, they will be 35118 included. The target code must than make sure that all target 35119 registers in the class returned by 35120 `TARGET_BRANCH_TARGET_REGISTER_CLASS' that might need saving are 35121 saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates if prologues and 35122 epilogues have already been generated. Note, even if you only 35123 return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, you still 35124 are likely to have to make special provisions in 35125 `INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 35126 target registers. 35127 35128 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 35129 This target hook returns true if the target supports conditional 35130 execution. This target hook is required only when the target has 35131 several different modes and they have different conditional 35132 execution capability, such as ARM. 35133 35134 -- Macro: POWI_MAX_MULTS 35135 If defined, this macro is interpreted as a signed integer C 35136 expression that specifies the maximum number of floating point 35137 multiplications that should be emitted when expanding 35138 exponentiation by an integer constant inline. When this value is 35139 defined, exponentiation requiring more than this number of 35140 multiplications is implemented by calling the system library's 35141 `pow', `powf' or `powl' routines. The default value places no 35142 upper bound on the multiplication count. 35143 35144 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 35145 *IPREFIX, int STDINC) 35146 This target hook should register any extra include files for the 35147 target. The parameter STDINC indicates if normal include files 35148 are present. The parameter SYSROOT is the system root directory. 35149 The parameter IPREFIX is the prefix for the gcc directory. 35150 35151 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 35152 char *IPREFIX, int STDINC) 35153 This target hook should register any extra include files for the 35154 target before any standard headers. The parameter STDINC 35155 indicates if normal include files are present. The parameter 35156 SYSROOT is the system root directory. The parameter IPREFIX is 35157 the prefix for the gcc directory. 35158 35159 -- Macro: void TARGET_OPTF (char *PATH) 35160 This target hook should register special include paths for the 35161 target. The parameter PATH is the include to register. On Darwin 35162 systems, this is used for Framework includes, which have semantics 35163 that are different from `-I'. 35164 35165 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 35166 This target macro returns `true' if it is safe to use a local alias 35167 for a virtual function FNDECL when constructing thunks, `false' 35168 otherwise. By default, the macro returns `true' for all 35169 functions, if a target supports aliases (i.e. defines 35170 `ASM_OUTPUT_DEF'), `false' otherwise, 35171 35172 -- Macro: TARGET_FORMAT_TYPES 35173 If defined, this macro is the name of a global variable containing 35174 target-specific format checking information for the `-Wformat' 35175 option. The default is to have no target-specific format checks. 35176 35177 -- Macro: TARGET_N_FORMAT_TYPES 35178 If defined, this macro is the number of entries in 35179 `TARGET_FORMAT_TYPES'. 35180 35181 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 35182 If defined, this macro is the name of a global variable containing 35183 target-specific format overrides for the `-Wformat' option. The 35184 default is to have no target-specific format overrides. If defined, 35185 `TARGET_FORMAT_TYPES' must be defined, too. 35186 35187 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 35188 If defined, this macro specifies the number of entries in 35189 `TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 35190 35191 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 35192 If defined, this macro specifies the optional initialization 35193 routine for target specific customizations of the system printf 35194 and scanf formatter settings. 35195 35196 -- Target Hook: bool TARGET_RELAXED_ORDERING 35197 If set to `true', means that the target's memory model does not 35198 guarantee that loads which do not depend on one another will access 35199 main memory in the order of the instruction stream; if ordering is 35200 important, an explicit memory barrier must be used. This is true 35201 of many recent processors which implement a policy of "relaxed," 35202 "weak," or "release" memory consistency, such as Alpha, PowerPC, 35203 and ia64. The default is `false'. 35204 35205 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 35206 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 35207 If defined, this macro returns the diagnostic message when it is 35208 illegal to pass argument VAL to function FUNCDECL with prototype 35209 TYPELIST. 35210 35211 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 35212 FROMTYPE, const_tree TOTYPE) 35213 If defined, this macro returns the diagnostic message when it is 35214 invalid to convert from FROMTYPE to TOTYPE, or `NULL' if validity 35215 should be determined by the front end. 35216 35217 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 35218 const_tree TYPE) 35219 If defined, this macro returns the diagnostic message when it is 35220 invalid to apply operation OP (where unary plus is denoted by 35221 `CONVERT_EXPR') to an operand of type TYPE, or `NULL' if validity 35222 should be determined by the front end. 35223 35224 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 35225 const_tree TYPE1, const_tree TYPE2) 35226 If defined, this macro returns the diagnostic message when it is 35227 invalid to apply operation OP to operands of types TYPE1 and 35228 TYPE2, or `NULL' if validity should be determined by the front end. 35229 35230 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree 35231 TYPE) 35232 If defined, this macro returns the diagnostic message when it is 35233 invalid for functions to include parameters of type TYPE, or 35234 `NULL' if validity should be determined by the front end. This is 35235 currently used only by the C and C++ front ends. 35236 35237 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree 35238 TYPE) 35239 If defined, this macro returns the diagnostic message when it is 35240 invalid for functions to have return type TYPE, or `NULL' if 35241 validity should be determined by the front end. This is currently 35242 used only by the C and C++ front ends. 35243 35244 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 35245 If defined, this target hook returns the type to which values of 35246 TYPE should be promoted when they appear in expressions, analogous 35247 to the integer promotions, or `NULL_TREE' to use the front end's 35248 normal promotion rules. This hook is useful when there are 35249 target-specific types with special promotion rules. This is 35250 currently used only by the C and C++ front ends. 35251 35252 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 35253 If defined, this hook returns the result of converting EXPR to 35254 TYPE. It should return the converted expression, or `NULL_TREE' 35255 to apply the front end's normal conversion rules. This hook is 35256 useful when there are target-specific types with special 35257 conversion rules. This is currently used only by the C and C++ 35258 front ends. 35259 35260 -- Macro: TARGET_USE_JCR_SECTION 35261 This macro determines whether to use the JCR section to register 35262 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 35263 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, 35264 else 0. 35265 35266 -- Macro: OBJC_JBLEN 35267 This macro determines the size of the objective C jump buffer for 35268 the NeXT runtime. By default, OBJC_JBLEN is defined to an 35269 innocuous value. 35270 35271 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 35272 Define this macro if any target-specific attributes need to be 35273 attached to the functions in `libgcc' that provide low-level 35274 support for call stack unwinding. It is used in declarations in 35275 `unwind-generic.h' and the associated definitions of those 35276 functions. 35277 35278 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 35279 Define this macro to update the current function stack boundary if 35280 necessary. 35281 35282 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 35283 This hook should return an rtx for Dynamic Realign Argument 35284 Pointer (DRAP) if a different argument pointer register is needed 35285 to access the function's argument list due to stack realignment. 35286 Return `NULL' if no DRAP is needed. 35287 35288 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 35289 When optimization is disabled, this hook indicates whether or not 35290 arguments should be allocated to stack slots. Normally, GCC 35291 allocates stacks slots for arguments when not optimizing in order 35292 to make debugging easier. However, when a function is declared 35293 with `__attribute__((naked))', there is no stack frame, and the 35294 compiler cannot safely move arguments from the registers in which 35295 they are passed to the stack. Therefore, this hook should return 35296 true in general, but false for naked functions. The default 35297 implementation always returns true. 35298 35299 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 35300 On some architectures it can take multiple instructions to 35301 synthesize a constant. If there is another constant already in a 35302 register that is close enough in value then it is preferable that 35303 the new constant is computed from this register using immediate 35304 addition or subtraction. We accomplish this through CSE. Besides 35305 the value of the constant we also add a lower and an upper 35306 constant anchor to the available expressions. These are then 35307 queried when encountering new constants. The anchors are computed 35308 by rounding the constant up and down to a multiple of the value of 35309 `TARGET_CONST_ANCHOR'. `TARGET_CONST_ANCHOR' should be the 35310 maximum positive value accepted by immediate-add plus one. We 35311 currently assume that the value of `TARGET_CONST_ANCHOR' is a 35312 power of 2. For example, on MIPS, where add-immediate takes a 35313 16-bit signed value, `TARGET_CONST_ANCHOR' is set to `0x8000'. 35314 The default value is zero, which disables this optimization. 35315 35316 35317File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 35318 3531918 Host Configuration 35320********************* 35321 35322Most details about the machine and system on which the compiler is 35323actually running are detected by the `configure' script. Some things 35324are impossible for `configure' to detect; these are described in two 35325ways, either by macros defined in a file named `xm-MACHINE.h' or by 35326hook functions in the file specified by the OUT_HOST_HOOK_OBJ variable 35327in `config.gcc'. (The intention is that very few hosts will need a 35328header file but nearly every fully supported host will need to override 35329some hooks.) 35330 35331 If you need to define only a few macros, and they have simple 35332definitions, consider using the `xm_defines' variable in your 35333`config.gcc' entry instead of creating a host configuration header. 35334*Note System Config::. 35335 35336* Menu: 35337 35338* Host Common:: Things every host probably needs implemented. 35339* Filesystem:: Your host can't have the letter `a' in filenames? 35340* Host Misc:: Rare configuration options for hosts. 35341 35342 35343File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 35344 3534518.1 Host Common 35346================ 35347 35348Some things are just not portable, even between similar operating 35349systems, and are too difficult for autoconf to detect. They get 35350implemented using hook functions in the file specified by the 35351HOST_HOOK_OBJ variable in `config.gcc'. 35352 35353 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 35354 This host hook is used to set up handling for extra signals. The 35355 most common thing to do in this hook is to detect stack overflow. 35356 35357 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 35358 FD) 35359 This host hook returns the address of some space that is likely to 35360 be free in some subsequent invocation of the compiler. We intend 35361 to load the PCH data at this address such that the data need not 35362 be relocated. The area should be able to hold SIZE bytes. If the 35363 host uses `mmap', FD is an open file descriptor that can be used 35364 for probing. 35365 35366 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, 35367 size_t SIZE, int FD, size_t OFFSET) 35368 This host hook is called when a PCH file is about to be loaded. 35369 We want to load SIZE bytes from FD at OFFSET into memory at 35370 ADDRESS. The given address will be the result of a previous 35371 invocation of `HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we 35372 couldn't allocate SIZE bytes at ADDRESS. Return 0 if the memory 35373 is allocated but the data is not loaded. Return 1 if the hook has 35374 performed everything. 35375 35376 If the implementation uses reserved address space, free any 35377 reserved space beyond SIZE, regardless of the return value. If no 35378 PCH will be loaded, this hook may be called with SIZE zero, in 35379 which case all reserved address space should be freed. 35380 35381 Do not try to handle values of ADDRESS that could not have been 35382 returned by this executable; just return -1. Such values usually 35383 indicate an out-of-date PCH file (built by some other GCC 35384 executable), and such a PCH file won't work. 35385 35386 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 35387 This host hook returns the alignment required for allocating 35388 virtual memory. Usually this is the same as getpagesize, but on 35389 some hosts the alignment for reserving memory differs from the 35390 pagesize for committing memory. 35391 35392 35393File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 35394 3539518.2 Host Filesystem 35396==================== 35397 35398GCC needs to know a number of things about the semantics of the host 35399machine's filesystem. Filesystems with Unix and MS-DOS semantics are 35400automatically detected. For other systems, you can define the 35401following macros in `xm-MACHINE.h'. 35402 35403`HAVE_DOS_BASED_FILE_SYSTEM' 35404 This macro is automatically defined by `system.h' if the host file 35405 system obeys the semantics defined by MS-DOS instead of Unix. DOS 35406 file systems are case insensitive, file specifications may begin 35407 with a drive letter, and both forward slash and backslash (`/' and 35408 `\') are directory separators. 35409 35410`DIR_SEPARATOR' 35411`DIR_SEPARATOR_2' 35412 If defined, these macros expand to character constants specifying 35413 separators for directory names within a file specification. 35414 `system.h' will automatically give them appropriate values on Unix 35415 and MS-DOS file systems. If your file system is neither of these, 35416 define one or both appropriately in `xm-MACHINE.h'. 35417 35418 However, operating systems like VMS, where constructing a pathname 35419 is more complicated than just stringing together directory names 35420 separated by a special character, should not define either of these 35421 macros. 35422 35423`PATH_SEPARATOR' 35424 If defined, this macro should expand to a character constant 35425 specifying the separator for elements of search paths. The default 35426 value is a colon (`:'). DOS-based systems usually, but not 35427 always, use semicolon (`;'). 35428 35429`VMS' 35430 Define this macro if the host system is VMS. 35431 35432`HOST_OBJECT_SUFFIX' 35433 Define this macro to be a C string representing the suffix for 35434 object files on your host machine. If you do not define this 35435 macro, GCC will use `.o' as the suffix for object files. 35436 35437`HOST_EXECUTABLE_SUFFIX' 35438 Define this macro to be a C string representing the suffix for 35439 executable files on your host machine. If you do not define this 35440 macro, GCC will use the null string as the suffix for executable 35441 files. 35442 35443`HOST_BIT_BUCKET' 35444 A pathname defined by the host operating system, which can be 35445 opened as a file and written to, but all the information written 35446 is discarded. This is commonly known as a "bit bucket" or "null 35447 device". If you do not define this macro, GCC will use 35448 `/dev/null' as the bit bucket. If the host does not support a bit 35449 bucket, define this macro to an invalid filename. 35450 35451`UPDATE_PATH_HOST_CANONICALIZE (PATH)' 35452 If defined, a C statement (sans semicolon) that performs 35453 host-dependent canonicalization when a path used in a compilation 35454 driver or preprocessor is canonicalized. PATH is a malloc-ed path 35455 to be canonicalized. If the C statement does canonicalize PATH 35456 into a different buffer, the old path should be freed and the new 35457 buffer should have been allocated with malloc. 35458 35459`DUMPFILE_FORMAT' 35460 Define this macro to be a C string representing the format to use 35461 for constructing the index part of debugging dump file names. The 35462 resultant string must fit in fifteen bytes. The full filename 35463 will be the concatenation of: the prefix of the assembler file 35464 name, the string resulting from applying this format to an index 35465 number, and a string unique to each dump file kind, e.g. `rtl'. 35466 35467 If you do not define this macro, GCC will use `.%02d.'. You should 35468 define this macro if using the default will create an invalid file 35469 name. 35470 35471`DELETE_IF_ORDINARY' 35472 Define this macro to be a C statement (sans semicolon) that 35473 performs host-dependent removal of ordinary temp files in the 35474 compilation driver. 35475 35476 If you do not define this macro, GCC will use the default version. 35477 You should define this macro if the default version does not 35478 reliably remove the temp file as, for example, on VMS which allows 35479 multiple versions of a file. 35480 35481`HOST_LACKS_INODE_NUMBERS' 35482 Define this macro if the host filesystem does not report 35483 meaningful inode numbers in struct stat. 35484 35485 35486File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 35487 3548818.3 Host Misc 35489============== 35490 35491`FATAL_EXIT_CODE' 35492 A C expression for the status code to be returned when the compiler 35493 exits after serious errors. The default is the system-provided 35494 macro `EXIT_FAILURE', or `1' if the system doesn't define that 35495 macro. Define this macro only if these defaults are incorrect. 35496 35497`SUCCESS_EXIT_CODE' 35498 A C expression for the status code to be returned when the compiler 35499 exits without serious errors. (Warnings are not serious errors.) 35500 The default is the system-provided macro `EXIT_SUCCESS', or `0' if 35501 the system doesn't define that macro. Define this macro only if 35502 these defaults are incorrect. 35503 35504`USE_C_ALLOCA' 35505 Define this macro if GCC should use the C implementation of 35506 `alloca' provided by `libiberty.a'. This only affects how some 35507 parts of the compiler itself allocate memory. It does not change 35508 code generation. 35509 35510 When GCC is built with a compiler other than itself, the C `alloca' 35511 is always used. This is because most other implementations have 35512 serious bugs. You should define this macro only on a system where 35513 no stack-based `alloca' can possibly work. For instance, if a 35514 system has a small limit on the size of the stack, GCC's builtin 35515 `alloca' will not work reliably. 35516 35517`COLLECT2_HOST_INITIALIZATION' 35518 If defined, a C statement (sans semicolon) that performs 35519 host-dependent initialization when `collect2' is being initialized. 35520 35521`GCC_DRIVER_HOST_INITIALIZATION' 35522 If defined, a C statement (sans semicolon) that performs 35523 host-dependent initialization when a compilation driver is being 35524 initialized. 35525 35526`HOST_LONG_LONG_FORMAT' 35527 If defined, the string used to indicate an argument of type `long 35528 long' to functions like `printf'. The default value is `"ll"'. 35529 35530`HOST_LONG_FORMAT' 35531 If defined, the string used to indicate an argument of type `long' 35532 to functions like `printf'. The default value is `"l"'. 35533 35534`HOST_PTR_PRINTF' 35535 If defined, the string used to indicate an argument of type `void 35536 *' to functions like `printf'. The default value is `"%p"'. 35537 35538 In addition, if `configure' generates an incorrect definition of any 35539of the macros in `auto-host.h', you can override that definition in a 35540host configuration header. If you need to do this, first see if it is 35541possible to fix `configure'. 35542 35543 35544File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 35545 3554619 Makefile Fragments 35547********************* 35548 35549When you configure GCC using the `configure' script, it will construct 35550the file `Makefile' from the template file `Makefile.in'. When it does 35551this, it can incorporate makefile fragments from the `config' 35552directory. These are used to set Makefile parameters that are not 35553amenable to being calculated by autoconf. The list of fragments to 35554incorporate is set by `config.gcc' (and occasionally `config.build' and 35555`config.host'); *Note System Config::. 35556 35557 Fragments are named either `t-TARGET' or `x-HOST', depending on 35558whether they are relevant to configuring GCC to produce code for a 35559particular target, or to configuring GCC to run on a particular host. 35560Here TARGET and HOST are mnemonics which usually have some relationship 35561to the canonical system name, but no formal connection. 35562 35563 If these files do not exist, it means nothing needs to be added for a 35564given target or host. Most targets need a few `t-TARGET' fragments, 35565but needing `x-HOST' fragments is rare. 35566 35567* Menu: 35568 35569* Target Fragment:: Writing `t-TARGET' files. 35570* Host Fragment:: Writing `x-HOST' files. 35571 35572 35573File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 35574 3557519.1 Target Makefile Fragments 35576============================== 35577 35578Target makefile fragments can set these Makefile variables. 35579 35580`LIBGCC2_CFLAGS' 35581 Compiler flags to use when compiling `libgcc2.c'. 35582 35583`LIB2FUNCS_EXTRA' 35584 A list of source file names to be compiled or assembled and 35585 inserted into `libgcc.a'. 35586 35587`Floating Point Emulation' 35588 To have GCC include software floating point libraries in `libgcc.a' 35589 define `FPBIT' and `DPBIT' along with a few rules as follows: 35590 # We want fine grained libraries, so use the new code 35591 # to build the floating point emulation libraries. 35592 FPBIT = fp-bit.c 35593 DPBIT = dp-bit.c 35594 35595 35596 fp-bit.c: $(srcdir)/config/fp-bit.c 35597 echo '#define FLOAT' > fp-bit.c 35598 cat $(srcdir)/config/fp-bit.c >> fp-bit.c 35599 35600 dp-bit.c: $(srcdir)/config/fp-bit.c 35601 cat $(srcdir)/config/fp-bit.c > dp-bit.c 35602 35603 You may need to provide additional #defines at the beginning of 35604 `fp-bit.c' and `dp-bit.c' to control target endianness and other 35605 options. 35606 35607`CRTSTUFF_T_CFLAGS' 35608 Special flags used when compiling `crtstuff.c'. *Note 35609 Initialization::. 35610 35611`CRTSTUFF_T_CFLAGS_S' 35612 Special flags used when compiling `crtstuff.c' for shared linking. 35613 Used if you use `crtbeginS.o' and `crtendS.o' in `EXTRA-PARTS'. 35614 *Note Initialization::. 35615 35616`MULTILIB_OPTIONS' 35617 For some targets, invoking GCC in different ways produces objects 35618 that can not be linked together. For example, for some targets GCC 35619 produces both big and little endian code. For these targets, you 35620 must arrange for multiple versions of `libgcc.a' to be compiled, 35621 one for each set of incompatible options. When GCC invokes the 35622 linker, it arranges to link in the right version of `libgcc.a', 35623 based on the command line options used. 35624 35625 The `MULTILIB_OPTIONS' macro lists the set of options for which 35626 special versions of `libgcc.a' must be built. Write options that 35627 are mutually incompatible side by side, separated by a slash. 35628 Write options that may be used together separated by a space. The 35629 build procedure will build all combinations of compatible options. 35630 35631 For example, if you set `MULTILIB_OPTIONS' to `m68000/m68020 35632 msoft-float', `Makefile' will build special versions of `libgcc.a' 35633 using the following sets of options: `-m68000', `-m68020', 35634 `-msoft-float', `-m68000 -msoft-float', and `-m68020 -msoft-float'. 35635 35636`MULTILIB_DIRNAMES' 35637 If `MULTILIB_OPTIONS' is used, this variable specifies the 35638 directory names that should be used to hold the various libraries. 35639 Write one element in `MULTILIB_DIRNAMES' for each element in 35640 `MULTILIB_OPTIONS'. If `MULTILIB_DIRNAMES' is not used, the 35641 default value will be `MULTILIB_OPTIONS', with all slashes treated 35642 as spaces. 35643 35644 For example, if `MULTILIB_OPTIONS' is set to `m68000/m68020 35645 msoft-float', then the default value of `MULTILIB_DIRNAMES' is 35646 `m68000 m68020 msoft-float'. You may specify a different value if 35647 you desire a different set of directory names. 35648 35649`MULTILIB_MATCHES' 35650 Sometimes the same option may be written in two different ways. 35651 If an option is listed in `MULTILIB_OPTIONS', GCC needs to know 35652 about any synonyms. In that case, set `MULTILIB_MATCHES' to a 35653 list of items of the form `option=option' to describe all relevant 35654 synonyms. For example, `m68000=mc68000 m68020=mc68020'. 35655 35656`MULTILIB_EXCEPTIONS' 35657 Sometimes when there are multiple sets of `MULTILIB_OPTIONS' being 35658 specified, there are combinations that should not be built. In 35659 that case, set `MULTILIB_EXCEPTIONS' to be all of the switch 35660 exceptions in shell case syntax that should not be built. 35661 35662 For example the ARM processor cannot execute both hardware floating 35663 point instructions and the reduced size THUMB instructions at the 35664 same time, so there is no need to build libraries with both of 35665 these options enabled. Therefore `MULTILIB_EXCEPTIONS' is set to: 35666 *mthumb/*mhard-float* 35667 35668`MULTILIB_EXTRA_OPTS' 35669 Sometimes it is desirable that when building multiple versions of 35670 `libgcc.a' certain options should always be passed on to the 35671 compiler. In that case, set `MULTILIB_EXTRA_OPTS' to be the list 35672 of options to be used for all builds. If you set this, you should 35673 probably set `CRTSTUFF_T_CFLAGS' to a dash followed by it. 35674 35675`NATIVE_SYSTEM_HEADER_DIR' 35676 If the default location for system headers is not `/usr/include', 35677 you must set this to the directory containing the headers. This 35678 value should match the value of the `SYSTEM_INCLUDE_DIR' macro. 35679 35680`SPECS' 35681 Unfortunately, setting `MULTILIB_EXTRA_OPTS' is not enough, since 35682 it does not affect the build of target libraries, at least not the 35683 build of the default multilib. One possible work-around is to use 35684 `DRIVER_SELF_SPECS' to bring options from the `specs' file as if 35685 they had been passed in the compiler driver command line. 35686 However, you don't want to be adding these options after the 35687 toolchain is installed, so you can instead tweak the `specs' file 35688 that will be used during the toolchain build, while you still 35689 install the original, built-in `specs'. The trick is to set 35690 `SPECS' to some other filename (say `specs.install'), that will 35691 then be created out of the built-in specs, and introduce a 35692 `Makefile' rule to generate the `specs' file that's going to be 35693 used at build time out of your `specs.install'. 35694 35695`T_CFLAGS' 35696 These are extra flags to pass to the C compiler. They are used 35697 both when building GCC, and when compiling things with the 35698 just-built GCC. This variable is deprecated and should not be 35699 used. 35700 35701 35702File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 35703 3570419.2 Host Makefile Fragments 35705============================ 35706 35707The use of `x-HOST' fragments is discouraged. You should only use it 35708for makefile dependencies. 35709 35710 35711File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 35712 3571320 `collect2' 35714************* 35715 35716GCC uses a utility called `collect2' on nearly all systems to arrange 35717to call various initialization functions at start time. 35718 35719 The program `collect2' works by linking the program once and looking 35720through the linker output file for symbols with particular names 35721indicating they are constructor functions. If it finds any, it creates 35722a new temporary `.c' file containing a table of them, compiles it, and 35723links the program a second time including that file. 35724 35725 The actual calls to the constructors are carried out by a subroutine 35726called `__main', which is called (automatically) at the beginning of 35727the body of `main' (provided `main' was compiled with GNU CC). Calling 35728`__main' is necessary, even when compiling C code, to allow linking C 35729and C++ object code together. (If you use `-nostdlib', you get an 35730unresolved reference to `__main', since it's defined in the standard 35731GCC library. Include `-lgcc' at the end of your compiler command line 35732to resolve this reference.) 35733 35734 The program `collect2' is installed as `ld' in the directory where the 35735passes of the compiler are installed. When `collect2' needs to find 35736the _real_ `ld', it tries the following file names: 35737 35738 * a hard coded linker file name, if GCC was configured with the 35739 `--with-ld' option. 35740 35741 * `real-ld' in the directories listed in the compiler's search 35742 directories. 35743 35744 * `real-ld' in the directories listed in the environment variable 35745 `PATH'. 35746 35747 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 35748 if specified. 35749 35750 * `ld' in the compiler's search directories, except that `collect2' 35751 will not execute itself recursively. 35752 35753 * `ld' in `PATH'. 35754 35755 "The compiler's search directories" means all the directories where 35756`gcc' searches for passes of the compiler. This includes directories 35757that you specify with `-B'. 35758 35759 Cross-compilers search a little differently: 35760 35761 * `real-ld' in the compiler's search directories. 35762 35763 * `TARGET-real-ld' in `PATH'. 35764 35765 * The file specified in the `REAL_LD_FILE_NAME' configuration macro, 35766 if specified. 35767 35768 * `ld' in the compiler's search directories. 35769 35770 * `TARGET-ld' in `PATH'. 35771 35772 `collect2' explicitly avoids running `ld' using the file name under 35773which `collect2' itself was invoked. In fact, it remembers up a list 35774of such names--in case one copy of `collect2' finds another copy (or 35775version) of `collect2' installed as `ld' in a second place in the 35776search path. 35777 35778 `collect2' searches for the utilities `nm' and `strip' using the same 35779algorithm as above for `ld'. 35780 35781 35782File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 35783 3578421 Standard Header File Directories 35785*********************************** 35786 35787`GCC_INCLUDE_DIR' means the same thing for native and cross. It is 35788where GCC stores its private include files, and also where GCC stores 35789the fixed include files. A cross compiled GCC runs `fixincludes' on 35790the header files in `$(tooldir)/include'. (If the cross compilation 35791header files need to be fixed, they must be installed before GCC is 35792built. If the cross compilation header files are already suitable for 35793GCC, nothing special need be done). 35794 35795 `GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 35796is where `g++' looks first for header files. The C++ library installs 35797only target independent header files in that directory. 35798 35799 `LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 35800install anything there. It is normally `/usr/local/include'. This is 35801where local additions to a packaged system should place header files. 35802 35803 `CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 35804install anything there. 35805 35806 `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 35807the place for other packages to install header files that GCC will use. 35808For a cross-compiler, this is the equivalent of `/usr/include'. When 35809you build a cross-compiler, `fixincludes' processes any header files in 35810this directory. 35811 35812 35813File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 35814 3581522 Memory Management and Type Information 35816***************************************** 35817 35818GCC uses some fairly sophisticated memory management techniques, which 35819involve determining information about GCC's data structures from GCC's 35820source code and using this information to perform garbage collection and 35821implement precompiled headers. 35822 35823 A full C parser would be too complicated for this task, so a limited 35824subset of C is interpreted and special markers are used to determine 35825what parts of the source to look at. All `struct' and `union' 35826declarations that define data structures that are allocated under 35827control of the garbage collector must be marked. All global variables 35828that hold pointers to garbage-collected memory must also be marked. 35829Finally, all global variables that need to be saved and restored by a 35830precompiled header must be marked. (The precompiled header mechanism 35831can only save static variables if they're scalar. Complex data 35832structures must be allocated in garbage-collected memory to be saved in 35833a precompiled header.) 35834 35835 The full format of a marker is 35836 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 35837 but in most cases no options are needed. The outer double parentheses 35838are still necessary, though: `GTY(())'. Markers can appear: 35839 35840 * In a structure definition, before the open brace; 35841 35842 * In a global variable declaration, after the keyword `static' or 35843 `extern'; and 35844 35845 * In a structure field definition, before the name of the field. 35846 35847 Here are some examples of marking simple data structures and globals. 35848 35849 struct GTY(()) TAG 35850 { 35851 FIELDS... 35852 }; 35853 35854 typedef struct GTY(()) TAG 35855 { 35856 FIELDS... 35857 } *TYPENAME; 35858 35859 static GTY(()) struct TAG *LIST; /* points to GC memory */ 35860 static GTY(()) int COUNTER; /* save counter in a PCH */ 35861 35862 The parser understands simple typedefs such as `typedef struct TAG 35863*NAME;' and `typedef int NAME;'. These don't need to be marked. 35864 35865* Menu: 35866 35867* GTY Options:: What goes inside a `GTY(())'. 35868* GGC Roots:: Making global variables GGC roots. 35869* Files:: How the generated files work. 35870* Invoking the garbage collector:: How to invoke the garbage collector. 35871 35872 35873File: gccint.info, Node: GTY Options, Next: GGC Roots, Up: Type Information 35874 3587522.1 The Inside of a `GTY(())' 35876============================== 35877 35878Sometimes the C code is not enough to fully describe the type 35879structure. Extra information can be provided with `GTY' options and 35880additional markers. Some options take a parameter, which may be either 35881a string or a type name, depending on the parameter. If an option 35882takes no parameter, it is acceptable either to omit the parameter 35883entirely, or to provide an empty string as a parameter. For example, 35884`GTY ((skip))' and `GTY ((skip ("")))' are equivalent. 35885 35886 When the parameter is a string, often it is a fragment of C code. Four 35887special escapes may be used in these strings, to refer to pieces of the 35888data structure being marked: 35889 35890`%h' 35891 The current structure. 35892 35893`%1' 35894 The structure that immediately contains the current structure. 35895 35896`%0' 35897 The outermost structure that contains the current structure. 35898 35899`%a' 35900 A partial expression of the form `[i1][i2]...' that indexes the 35901 array item currently being marked. 35902 35903 For instance, suppose that you have a structure of the form 35904 struct A { 35905 ... 35906 }; 35907 struct B { 35908 struct A foo[12]; 35909 }; 35910 and `b' is a variable of type `struct B'. When marking `b.foo[11]', 35911`%h' would expand to `b.foo[11]', `%0' and `%1' would both expand to 35912`b', and `%a' would expand to `[11]'. 35913 35914 As in ordinary C, adjacent strings will be concatenated; this is 35915helpful when you have a complicated expression. 35916 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 35917 " ? TYPE_NEXT_VARIANT (&%h.generic)" 35918 " : TREE_CHAIN (&%h.generic)"))) 35919 35920 The available options are: 35921 35922`length ("EXPRESSION")' 35923 There are two places the type machinery will need to be explicitly 35924 told the length of an array. The first case is when a structure 35925 ends in a variable-length array, like this: 35926 struct GTY(()) rtvec_def { 35927 int num_elem; /* number of elements */ 35928 rtx GTY ((length ("%h.num_elem"))) elem[1]; 35929 }; 35930 35931 In this case, the `length' option is used to override the specified 35932 array length (which should usually be `1'). The parameter of the 35933 option is a fragment of C code that calculates the length. 35934 35935 The second case is when a structure or a global variable contains a 35936 pointer to an array, like this: 35937 tree * 35938 GTY ((length ("%h.regno_pointer_align_length"))) regno_decl; 35939 In this case, `regno_decl' has been allocated by writing something 35940 like 35941 x->regno_decl = 35942 ggc_alloc (x->regno_pointer_align_length * sizeof (tree)); 35943 and the `length' provides the length of the field. 35944 35945 This second use of `length' also works on global variables, like: static GTY((length ("reg_base_value_size"))) 35946 rtx *reg_base_value; 35947 35948`skip' 35949 If `skip' is applied to a field, the type machinery will ignore it. 35950 This is somewhat dangerous; the only safe use is in a union when 35951 one field really isn't ever used. 35952 35953`desc ("EXPRESSION")' 35954`tag ("CONSTANT")' 35955`default' 35956 The type machinery needs to be told which field of a `union' is 35957 currently active. This is done by giving each field a constant 35958 `tag' value, and then specifying a discriminator using `desc'. 35959 The value of the expression given by `desc' is compared against 35960 each `tag' value, each of which should be different. If no `tag' 35961 is matched, the field marked with `default' is used if there is 35962 one, otherwise no field in the union will be marked. 35963 35964 In the `desc' option, the "current structure" is the union that it 35965 discriminates. Use `%1' to mean the structure containing it. 35966 There are no escapes available to the `tag' option, since it is a 35967 constant. 35968 35969 For example, 35970 struct GTY(()) tree_binding 35971 { 35972 struct tree_common common; 35973 union tree_binding_u { 35974 tree GTY ((tag ("0"))) scope; 35975 struct cp_binding_level * GTY ((tag ("1"))) level; 35976 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 35977 tree value; 35978 }; 35979 35980 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 35981 `struct tree_binding *' is presumed to be 0 or 1. If 1, the type 35982 mechanism will treat the field `level' as being present and if 0, 35983 will treat the field `scope' as being present. 35984 35985`param_is (TYPE)' 35986`use_param' 35987 Sometimes it's convenient to define some data structure to work on 35988 generic pointers (that is, `PTR') and then use it with a specific 35989 type. `param_is' specifies the real type pointed to, and 35990 `use_param' says where in the generic data structure that type 35991 should be put. 35992 35993 For instance, to have a `htab_t' that points to trees, one would 35994 write the definition of `htab_t' like this: 35995 typedef struct GTY(()) { 35996 ... 35997 void ** GTY ((use_param, ...)) entries; 35998 ... 35999 } htab_t; 36000 and then declare variables like this: 36001 static htab_t GTY ((param_is (union tree_node))) ict; 36002 36003`paramN_is (TYPE)' 36004`use_paramN' 36005 In more complicated cases, the data structure might need to work on 36006 several different types, which might not necessarily all be 36007 pointers. For this, `param1_is' through `param9_is' may be used to 36008 specify the real type of a field identified by `use_param1' through 36009 `use_param9'. 36010 36011`use_params' 36012 When a structure contains another structure that is parameterized, 36013 there's no need to do anything special, the inner structure 36014 inherits the parameters of the outer one. When a structure 36015 contains a pointer to a parameterized structure, the type 36016 machinery won't automatically detect this (it could, it just 36017 doesn't yet), so it's necessary to tell it that the pointed-to 36018 structure should use the same parameters as the outer structure. 36019 This is done by marking the pointer with the `use_params' option. 36020 36021`deletable' 36022 `deletable', when applied to a global variable, indicates that when 36023 garbage collection runs, there's no need to mark anything pointed 36024 to by this variable, it can just be set to `NULL' instead. This 36025 is used to keep a list of free structures around for re-use. 36026 36027`if_marked ("EXPRESSION")' 36028 Suppose you want some kinds of object to be unique, and so you put 36029 them in a hash table. If garbage collection marks the hash table, 36030 these objects will never be freed, even if the last other 36031 reference to them goes away. GGC has special handling to deal 36032 with this: if you use the `if_marked' option on a global hash 36033 table, GGC will call the routine whose name is the parameter to 36034 the option on each hash table entry. If the routine returns 36035 nonzero, the hash table entry will be marked as usual. If the 36036 routine returns zero, the hash table entry will be deleted. 36037 36038 The routine `ggc_marked_p' can be used to determine if an element 36039 has been marked already; in fact, the usual case is to use 36040 `if_marked ("ggc_marked_p")'. 36041 36042`mark_hook ("HOOK-ROUTINE-NAME")' 36043 If provided for a structure or union type, the given 36044 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine 36045 called when the garbage collector has just marked the data as 36046 reachable. This routine should not change the data, or call any ggc 36047 routine. Its only argument is a pointer to the just marked (const) 36048 structure or union. 36049 36050`maybe_undef' 36051 When applied to a field, `maybe_undef' indicates that it's OK if 36052 the structure that this fields points to is never defined, so long 36053 as this field is always `NULL'. This is used to avoid requiring 36054 backends to define certain optional structures. It doesn't work 36055 with language frontends. 36056 36057`nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 36058 The type machinery expects all pointers to point to the start of an 36059 object. Sometimes for abstraction purposes it's convenient to have 36060 a pointer which points inside an object. So long as it's possible 36061 to convert the original object to and from the pointer, such 36062 pointers can still be used. TYPE is the type of the original 36063 object, the TO EXPRESSION returns the pointer given the original 36064 object, and the FROM EXPRESSION returns the original object given 36065 the pointer. The pointer will be available using the `%h' escape. 36066 36067`chain_next ("EXPRESSION")' 36068`chain_prev ("EXPRESSION")' 36069`chain_circular ("EXPRESSION")' 36070 It's helpful for the type machinery to know if objects are often 36071 chained together in long lists; this lets it generate code that 36072 uses less stack space by iterating along the list instead of 36073 recursing down it. `chain_next' is an expression for the next 36074 item in the list, `chain_prev' is an expression for the previous 36075 item. For singly linked lists, use only `chain_next'; for doubly 36076 linked lists, use both. The machinery requires that taking the 36077 next item of the previous item gives the original item. 36078 `chain_circular' is similar to `chain_next', but can be used for 36079 circular single linked lists. 36080 36081`reorder ("FUNCTION NAME")' 36082 Some data structures depend on the relative ordering of pointers. 36083 If the precompiled header machinery needs to change that ordering, 36084 it will call the function referenced by the `reorder' option, 36085 before changing the pointers in the object that's pointed to by 36086 the field the option applies to. The function must take four 36087 arguments, with the signature 36088 `void *, void *, gt_pointer_operator, void *'. The first 36089 parameter is a pointer to the structure that contains the object 36090 being updated, or the object itself if there is no containing 36091 structure. The second parameter is a cookie that should be 36092 ignored. The third parameter is a routine that, given a pointer, 36093 will update it to its correct new value. The fourth parameter is 36094 a cookie that must be passed to the second parameter. 36095 36096 PCH cannot handle data structures that depend on the absolute 36097 values of pointers. `reorder' functions can be expensive. When 36098 possible, it is better to depend on properties of the data, like 36099 an ID number or the hash of a string instead. 36100 36101`special ("NAME")' 36102 The `special' option is used to mark types that have to be dealt 36103 with by special case machinery. The parameter is the name of the 36104 special case. See `gengtype.c' for further details. Avoid adding 36105 new special cases unless there is no other alternative. 36106 36107 36108File: gccint.info, Node: GGC Roots, Next: Files, Prev: GTY Options, Up: Type Information 36109 3611022.2 Marking Roots for the Garbage Collector 36111============================================ 36112 36113In addition to keeping track of types, the type machinery also locates 36114the global variables ("roots") that the garbage collector starts at. 36115Roots must be declared using one of the following syntaxes: 36116 36117 * `extern GTY(([OPTIONS])) TYPE NAME;' 36118 36119 * `static GTY(([OPTIONS])) TYPE NAME;' 36120 The syntax 36121 * `GTY(([OPTIONS])) TYPE NAME;' 36122 is _not_ accepted. There should be an `extern' declaration of such a 36123variable in a header somewhere--mark that, not the definition. Or, if 36124the variable is only used in one file, make it `static'. 36125 36126 36127File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 36128 3612922.3 Source Files Containing Type Information 36130============================================= 36131 36132Whenever you add `GTY' markers to a source file that previously had 36133none, or create a new source file containing `GTY' markers, there are 36134three things you need to do: 36135 36136 1. You need to add the file to the list of source files the type 36137 machinery scans. There are four cases: 36138 36139 a. For a back-end file, this is usually done automatically; if 36140 not, you should add it to `target_gtfiles' in the appropriate 36141 port's entries in `config.gcc'. 36142 36143 b. For files shared by all front ends, add the filename to the 36144 `GTFILES' variable in `Makefile.in'. 36145 36146 c. For files that are part of one front end, add the filename to 36147 the `gtfiles' variable defined in the appropriate 36148 `config-lang.in'. For C, the file is `c-config-lang.in'. 36149 Headers should appear before non-headers in this list. 36150 36151 d. For files that are part of some but not all front ends, add 36152 the filename to the `gtfiles' variable of _all_ the front ends 36153 that use it. 36154 36155 2. If the file was a header file, you'll need to check that it's 36156 included in the right place to be visible to the generated files. 36157 For a back-end header file, this should be done automatically. 36158 For a front-end header file, it needs to be included by the same 36159 file that includes `gtype-LANG.h'. For other header files, it 36160 needs to be included in `gtype-desc.c', which is a generated file, 36161 so add it to `ifiles' in `open_base_file' in `gengtype.c'. 36162 36163 For source files that aren't header files, the machinery will 36164 generate a header file that should be included in the source file 36165 you just changed. The file will be called `gt-PATH.h' where PATH 36166 is the pathname relative to the `gcc' directory with slashes 36167 replaced by -, so for example the header file to be included in 36168 `cp/parser.c' is called `gt-cp-parser.c'. The generated header 36169 file should be included after everything else in the source file. 36170 Don't forget to mention this file as a dependency in the 36171 `Makefile'! 36172 36173 36174 For language frontends, there is another file that needs to be included 36175somewhere. It will be called `gtype-LANG.h', where LANG is the name of 36176the subdirectory the language is contained in. 36177 36178 Plugins can add additional root tables. Run the `gengtype' utility in 36179plugin mode as `gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 36180with your plugin files PLUGIN*.C using `GTY' to generate the 36181PLUGINOUT.H file. The GCC build tree is needed to be present in that 36182mode. 36183 36184 36185File: gccint.info, Node: Invoking the garbage collector, Prev: Files, Up: Type Information 36186 3618722.4 How to invoke the garbage collector 36188======================================== 36189 36190The GCC garbage collector GGC is only invoked explicitly. In contrast 36191with many other garbage collectors, it is not implicitly invoked by 36192allocation routines when a lot of memory has been consumed. So the only 36193way to have GGC reclaim storage it to call the `ggc_collect' function 36194explicitly. This call is an expensive operation, as it may have to scan 36195the entire heap. Beware that local variables (on the GCC call stack) 36196are not followed by such an invocation (as many other garbage 36197collectors do): you should reference all your data from static or 36198external `GTY'-ed variables, and it is advised to call `ggc_collect' 36199with a shallow call stack. The GGC is an exact mark and sweep garbage 36200collector (so it does not scan the call stack for pointers). In 36201practice GCC passes don't often call `ggc_collect' themselves, because 36202it is called by the pass manager between passes. 36203 36204 36205File: gccint.info, Node: Plugins, Next: Funding, Prev: Type Information, Up: Top 36206 3620723 Plugins 36208********** 36209 3621023.1 Loading Plugins 36211==================== 36212 36213Plugins are supported on platforms that support `-ldl -rdynamic'. They 36214are loaded by the compiler using `dlopen' and invoked at pre-determined 36215locations in the compilation process. 36216 36217 Plugins are loaded with 36218 36219 `-fplugin=/path/to/NAME.so' `-fplugin-arg-NAME-<key1>[=<value1>]' 36220 36221 The plugin arguments are parsed by GCC and passed to respective 36222plugins as key-value pairs. Multiple plugins can be invoked by 36223specifying multiple `-fplugin' arguments. 36224 3622523.2 Plugin API 36226=============== 36227 36228Plugins are activated by the compiler at specific events as defined in 36229`gcc-plugin.h'. For each event of interest, the plugin should call 36230`register_callback' specifying the name of the event and address of the 36231callback function that will handle that event. 36232 36233 The header `gcc-plugin.h' must be the first gcc header to be included. 36234 3623523.2.1 Plugin license check 36236--------------------------- 36237 36238Every plugin should define the global symbol `plugin_is_GPL_compatible' 36239to assert that it has been licensed under a GPL-compatible license. If 36240this symbol does not exist, the compiler will emit a fatal error and 36241exit with the error message: 36242 36243 fatal error: plugin <name> is not licensed under a GPL-compatible license 36244 <name>: undefined symbol: plugin_is_GPL_compatible 36245 compilation terminated 36246 36247 The type of the symbol is irrelevant. The compiler merely asserts that 36248it exists in the global scope. Something like this is enough: 36249 36250 int plugin_is_GPL_compatible; 36251 3625223.2.2 Plugin initialization 36253---------------------------- 36254 36255Every plugin should export a function called `plugin_init' that is 36256called right after the plugin is loaded. This function is responsible 36257for registering all the callbacks required by the plugin and do any 36258other required initialization. 36259 36260 This function is called from `compile_file' right before invoking the 36261parser. The arguments to `plugin_init' are: 36262 36263 * `plugin_info': Plugin invocation information. 36264 36265 * `version': GCC version. 36266 36267 The `plugin_info' struct is defined as follows: 36268 36269 struct plugin_name_args 36270 { 36271 char *base_name; /* Short name of the plugin 36272 (filename without .so suffix). */ 36273 const char *full_name; /* Path to the plugin as specified with 36274 -fplugin=. */ 36275 int argc; /* Number of arguments specified with 36276 -fplugin-arg-.... */ 36277 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 36278 const char *version; /* Version string provided by plugin. */ 36279 const char *help; /* Help string provided by plugin. */ 36280 } 36281 36282 If initialization fails, `plugin_init' must return a non-zero value. 36283Otherwise, it should return 0. 36284 36285 The version of the GCC compiler loading the plugin is described by the 36286following structure: 36287 36288 struct plugin_gcc_version 36289 { 36290 const char *basever; 36291 const char *datestamp; 36292 const char *devphase; 36293 const char *revision; 36294 const char *configuration_arguments; 36295 }; 36296 36297 The function `plugin_default_version_check' takes two pointers to such 36298structure and compare them field by field. It can be used by the 36299plugin's `plugin_init' function. 36300 36301 The version of GCC used to compile the plugin can be found in the 36302symbol `gcc_version' defined in the header `plugin-version.h'. The 36303recommended version check to perform looks like 36304 36305 #include "plugin-version.h" 36306 ... 36307 36308 int 36309 plugin_init (struct plugin_name_args *plugin_info, 36310 struct plugin_gcc_version *version) 36311 { 36312 if (!plugin_default_version_check (version, &gcc_version)) 36313 return 1; 36314 36315 } 36316 36317 but you can also check the individual fields if you want a less strict 36318check. 36319 3632023.2.3 Plugin callbacks 36321----------------------- 36322 36323Callback functions have the following prototype: 36324 36325 /* The prototype for a plugin callback function. 36326 gcc_data - event-specific data provided by GCC 36327 user_data - plugin-specific data provided by the plug-in. */ 36328 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 36329 36330 Callbacks can be invoked at the following pre-determined events: 36331 36332 enum plugin_event 36333 { 36334 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 36335 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 36336 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 36337 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 36338 PLUGIN_FINISH, /* Called before GCC exits. */ 36339 PLUGIN_INFO, /* Information about the plugin. */ 36340 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 36341 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 36342 PLUGIN_GGC_END, /* Called at end of GGC. */ 36343 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 36344 PLUGIN_REGISTER_GGC_CACHES, /* Register an extra GGC cache table. */ 36345 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 36346 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 36347 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 36348 /* Called before first pass from all_passes. */ 36349 PLUGIN_ALL_PASSES_START, 36350 /* Called after last pass from all_passes. */ 36351 PLUGIN_ALL_PASSES_END, 36352 /* Called before first ipa pass. */ 36353 PLUGIN_ALL_IPA_PASSES_START, 36354 /* Called after last ipa pass. */ 36355 PLUGIN_ALL_IPA_PASSES_END, 36356 /* Allows to override pass gate decision for current_pass. */ 36357 PLUGIN_OVERRIDE_GATE, 36358 /* Called before executing a pass. */ 36359 PLUGIN_PASS_EXECUTION, 36360 /* Called before executing subpasses of a GIMPLE_PASS in 36361 execute_ipa_pass_list. */ 36362 PLUGIN_EARLY_GIMPLE_PASSES_START, 36363 /* Called after executing subpasses of a GIMPLE_PASS in 36364 execute_ipa_pass_list. */ 36365 PLUGIN_EARLY_GIMPLE_PASSES_END, 36366 /* Called when a pass is first instantiated. */ 36367 PLUGIN_NEW_PASS, 36368 36369 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 36370 array. */ 36371 }; 36372 36373 In addition, plugins can also look up the enumerator of a named event, 36374and / or generate new events dynamically, by calling the function 36375`get_named_event_id'. 36376 36377 To register a callback, the plugin calls `register_callback' with the 36378arguments: 36379 36380 * `char *name': Plugin name. 36381 36382 * `int event': The event code. 36383 36384 * `plugin_callback_func callback': The function that handles `event'. 36385 36386 * `void *user_data': Pointer to plugin-specific data. 36387 36388 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, 36389PLUGIN_REGISTER_GGC_ROOTS and PLUGIN_REGISTER_GGC_CACHES pseudo-events 36390the `callback' should be null, and the `user_data' is specific. 36391 36392 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as 36393data from GCC), plugins may register their own pragmas using functions 36394like `c_register_pragma' or `c_register_pragma_with_expansion'. 36395 3639623.3 Interacting with the pass manager 36397====================================== 36398 36399There needs to be a way to add/reorder/remove passes dynamically. This 36400is useful for both analysis plugins (plugging in after a certain pass 36401such as CFG or an IPA pass) and optimization plugins. 36402 36403 Basic support for inserting new passes or replacing existing passes is 36404provided. A plugin registers a new pass with GCC by calling 36405`register_callback' with the `PLUGIN_PASS_MANAGER_SETUP' event and a 36406pointer to a `struct register_pass_info' object defined as follows 36407 36408 enum pass_positioning_ops 36409 { 36410 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 36411 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 36412 PASS_POS_REPLACE // Replace the reference pass. 36413 }; 36414 36415 struct register_pass_info 36416 { 36417 struct opt_pass *pass; /* New pass provided by the plugin. */ 36418 const char *reference_pass_name; /* Name of the reference pass for hooking 36419 up the new pass. */ 36420 int ref_pass_instance_number; /* Insert the pass at the specified 36421 instance number of the reference pass. */ 36422 /* Do it for every instance if it is 0. */ 36423 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 36424 }; 36425 36426 36427 /* Sample plugin code that registers a new pass. */ 36428 int 36429 plugin_init (struct plugin_name_args *plugin_info, 36430 struct plugin_gcc_version *version) 36431 { 36432 struct register_pass_info pass_info; 36433 36434 ... 36435 36436 /* Code to fill in the pass_info object with new pass information. */ 36437 36438 ... 36439 36440 /* Register the new pass. */ 36441 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 36442 36443 ... 36444 } 36445 3644623.4 Interacting with the GCC Garbage Collector 36447=============================================== 36448 36449Some plugins may want to be informed when GGC (the GCC Garbage 36450Collector) is running. They can register callbacks for the 36451`PLUGIN_GGC_START' and `PLUGIN_GGC_END' events (for which the callback 36452is called with a null `gcc_data') to be notified of the start or end of 36453the GCC garbage collection. 36454 36455 Some plugins may need to have GGC mark additional data. This can be 36456done by registering a callback (called with a null `gcc_data') for the 36457`PLUGIN_GGC_MARKING' event. Such callbacks can call the `ggc_set_mark' 36458routine, preferably thru the `ggc_mark' macro (and conversely, these 36459routines should usually not be used in plugins outside of the 36460`PLUGIN_GGC_MARKING' event). 36461 36462 Some plugins may need to add extra GGC root tables, e.g. to handle 36463their own `GTY'-ed data. This can be done with the 36464`PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 36465extra root table (of type `struct ggc_root_tab*') as `user_data'. 36466Plugins that want to use the `if_marked' hash table option can add the 36467extra GGC cache tables generated by `gengtype' using the 36468`PLUGIN_REGISTER_GGC_CACHES' pseudo-event with a null callback and the 36469extra cache table (of type `struct ggc_cache_tab*') as `user_data'. 36470Running the `gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 36471generates these extra root tables. 36472 36473 You should understand the details of memory management inside GCC 36474before using `PLUGIN_GGC_MARKING', `PLUGIN_REGISTER_GGC_ROOTS' or 36475`PLUGIN_REGISTER_GGC_CACHES'. 36476 3647723.5 Giving information about a plugin 36478====================================== 36479 36480A plugin should give some information to the user about itself. This 36481uses the following structure: 36482 36483 struct plugin_info 36484 { 36485 const char *version; 36486 const char *help; 36487 }; 36488 36489 Such a structure is passed as the `user_data' by the plugin's init 36490routine using `register_callback' with the `PLUGIN_INFO' pseudo-event 36491and a null callback. 36492 3649323.6 Registering custom attributes or pragmas 36494============================================= 36495 36496For analysis (or other) purposes it is useful to be able to add custom 36497attributes or pragmas. 36498 36499 The `PLUGIN_ATTRIBUTES' callback is called during attribute 36500registration. Use the `register_attribute' function to register custom 36501attributes. 36502 36503 /* Attribute handler callback */ 36504 static tree 36505 handle_user_attribute (tree *node, tree name, tree args, 36506 int flags, bool *no_add_attrs) 36507 { 36508 return NULL_TREE; 36509 } 36510 36511 /* Attribute definition */ 36512 static struct attribute_spec user_attr = 36513 { "user", 1, 1, false, false, false, handle_user_attribute }; 36514 36515 /* Plugin callback called during attribute registration. 36516 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 36517 */ 36518 static void 36519 register_attributes (void *event_data, void *data) 36520 { 36521 warning (0, G_("Callback to register attributes")); 36522 register_attribute (&user_attr); 36523 } 36524 36525 The `PLUGIN_PRAGMAS' callback is called during pragmas registration. 36526Use the `c_register_pragma' or `c_register_pragma_with_expansion' 36527functions to register custom pragmas. 36528 36529 /* Plugin callback called during pragmas registration. Registered with 36530 register_callback (plugin_name, PLUGIN_PRAGMAS, 36531 register_my_pragma, NULL); 36532 */ 36533 static void 36534 register_my_pragma (void *event_data, void *data) 36535 { 36536 warning (0, G_("Callback to register pragmas")); 36537 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 36538 } 36539 36540 It is suggested to pass `"GCCPLUGIN"' (or a short name identifying 36541your plugin) as the "space" argument of your pragma. 36542 3654323.7 Recording information about pass execution 36544=============================================== 36545 36546The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 36547(the same as current_pass) as `gcc_data' to the callback. You can also 36548inspect cfun to find out about which function this pass is executed for. 36549Note that this event will only be invoked if the gate check (if 36550applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 36551other hooks, like `PLUGIN_ALL_PASSES_START', `PLUGIN_ALL_PASSES_END', 36552`PLUGIN_ALL_IPA_PASSES_START', `PLUGIN_ALL_IPA_PASSES_END', 36553`PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 36554`PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 36555plugin(s) in order to get context for the pass execution. 36556 3655723.8 Controlling which passes are being run 36558=========================================== 36559 36560After the original gate function for a pass is called, its result - the 36561gate status - is stored as an integer. Then the event 36562`PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 36563the `gcc_data' parameter to the callback function. A nonzero value of 36564the gate status means that the pass is to be executed. You can both 36565read and write the gate status via the passed pointer. 36566 3656723.9 Keeping track of available passes 36568====================================== 36569 36570When your plugin is loaded, you can inspect the various pass lists to 36571determine what passes are available. However, other plugins might add 36572new passes. Also, future changes to GCC might cause generic passes to 36573be added after plugin loading. When a pass is first added to one of 36574the pass lists, the event `PLUGIN_NEW_PASS' is invoked, with the 36575callback parameter `gcc_data' pointing to the new pass. 36576 3657723.10 Building GCC plugins 36578========================== 36579 36580If plugins are enabled, GCC installs the headers needed to build a 36581plugin (somewhere in the installation tree, e.g. under `/usr/local'). 36582In particular a `plugin/include' directory is installed, containing all 36583the header files needed to build plugins. 36584 36585 On most systems, you can query this `plugin' directory by invoking 36586`gcc -print-file-name=plugin' (replace if needed `gcc' with the 36587appropriate program path). 36588 36589 The following GNU Makefile excerpt shows how to build a simple plugin: 36590 36591 GCC=gcc 36592 PLUGIN_SOURCE_FILES= plugin1.c plugin2.c 36593 PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES)) 36594 GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin) 36595 CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2 36596 36597 plugin.so: $(PLUGIN_OBJECT_FILES) 36598 $(GCC) -shared $^ -o $@ 36599 36600 A single source file plugin may be built with `gcc -I`gcc 36601-print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o 36602plugin.so', using backquote shell syntax to query the `plugin' 36603directory. 36604 36605 Plugins needing to use `gengtype' require a GCC build directory for 36606the same version of GCC that they will be linked against. 36607 36608 36609File: gccint.info, Node: Funding, Next: GNU Project, Prev: Plugins, Up: Top 36610 36611Funding Free Software 36612********************* 36613 36614If you want to have more free software a few years from now, it makes 36615sense for you to help encourage people to contribute funds for its 36616development. The most effective approach known is to encourage 36617commercial redistributors to donate. 36618 36619 Users of free software systems can boost the pace of development by 36620encouraging for-a-fee distributors to donate part of their selling price 36621to free software developers--the Free Software Foundation, and others. 36622 36623 The way to convince distributors to do this is to demand it and expect 36624it from them. So when you compare distributors, judge them partly by 36625how much they give to free software development. Show distributors 36626they must compete to be the one who gives the most. 36627 36628 To make this approach work, you must insist on numbers that you can 36629compare, such as, "We will donate ten dollars to the Frobnitz project 36630for each disk sold." Don't be satisfied with a vague promise, such as 36631"A portion of the profits are donated," since it doesn't give a basis 36632for comparison. 36633 36634 Even a precise fraction "of the profits from this disk" is not very 36635meaningful, since creative accounting and unrelated business decisions 36636can greatly alter what fraction of the sales price counts as profit. 36637If the price you pay is $50, ten percent of the profit is probably less 36638than a dollar; it might be a few cents, or nothing at all. 36639 36640 Some redistributors do development work themselves. This is useful 36641too; but to keep everyone honest, you need to inquire how much they do, 36642and what kind. Some kinds of development make much more long-term 36643difference than others. For example, maintaining a separate version of 36644a program contributes very little; maintaining the standard version of a 36645program for the whole community contributes much. Easy new ports 36646contribute little, since someone else would surely do them; difficult 36647ports such as adding a new CPU to the GNU Compiler Collection 36648contribute more; major new features or packages contribute the most. 36649 36650 By establishing the idea that supporting further development is "the 36651proper thing to do" when distributing free software for a fee, we can 36652assure a steady flow of resources into making more free software. 36653 36654 Copyright (C) 1994 Free Software Foundation, Inc. 36655 Verbatim copying and redistribution of this section is permitted 36656 without royalty; alteration is not permitted. 36657 36658 36659File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 36660 36661The GNU Project and GNU/Linux 36662***************************** 36663 36664The GNU Project was launched in 1984 to develop a complete Unix-like 36665operating system which is free software: the GNU system. (GNU is a 36666recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 36667Variants of the GNU operating system, which use the kernel Linux, are 36668now widely used; though these systems are often referred to as "Linux", 36669they are more accurately called GNU/Linux systems. 36670 36671 For more information, see: 36672 `http://www.gnu.org/' 36673 `http://www.gnu.org/gnu/linux-and-gnu.html' 36674 36675 36676File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 36677 36678GNU General Public License 36679************************** 36680 36681 Version 3, 29 June 2007 36682 36683 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 36684 36685 Everyone is permitted to copy and distribute verbatim copies of this 36686 license document, but changing it is not allowed. 36687 36688Preamble 36689======== 36690 36691The GNU General Public License is a free, copyleft license for software 36692and other kinds of works. 36693 36694 The licenses for most software and other practical works are designed 36695to take away your freedom to share and change the works. By contrast, 36696the GNU General Public License is intended to guarantee your freedom to 36697share and change all versions of a program-to make sure it remains free 36698software for all its users. We, the Free Software Foundation, use the 36699GNU General Public License for most of our software; it applies also to 36700any other work released this way by its authors. You can apply it to 36701your programs, too. 36702 36703 When we speak of free software, we are referring to freedom, not 36704price. Our General Public Licenses are designed to make sure that you 36705have the freedom to distribute copies of free software (and charge for 36706them if you wish), that you receive source code or can get it if you 36707want it, that you can change the software or use pieces of it in new 36708free programs, and that you know you can do these things. 36709 36710 To protect your rights, we need to prevent others from denying you 36711these rights or asking you to surrender the rights. Therefore, you 36712have certain responsibilities if you distribute copies of the software, 36713or if you modify it: responsibilities to respect the freedom of others. 36714 36715 For example, if you distribute copies of such a program, whether 36716gratis or for a fee, you must pass on to the recipients the same 36717freedoms that you received. You must make sure that they, too, receive 36718or can get the source code. And you must show them these terms so they 36719know their rights. 36720 36721 Developers that use the GNU GPL protect your rights with two steps: 36722(1) assert copyright on the software, and (2) offer you this License 36723giving you legal permission to copy, distribute and/or modify it. 36724 36725 For the developers' and authors' protection, the GPL clearly explains 36726that there is no warranty for this free software. For both users' and 36727authors' sake, the GPL requires that modified versions be marked as 36728changed, so that their problems will not be attributed erroneously to 36729authors of previous versions. 36730 36731 Some devices are designed to deny users access to install or run 36732modified versions of the software inside them, although the 36733manufacturer can do so. This is fundamentally incompatible with the 36734aim of protecting users' freedom to change the software. The 36735systematic pattern of such abuse occurs in the area of products for 36736individuals to use, which is precisely where it is most unacceptable. 36737Therefore, we have designed this version of the GPL to prohibit the 36738practice for those products. If such problems arise substantially in 36739other domains, we stand ready to extend this provision to those domains 36740in future versions of the GPL, as needed to protect the freedom of 36741users. 36742 36743 Finally, every program is threatened constantly by software patents. 36744States should not allow patents to restrict development and use of 36745software on general-purpose computers, but in those that do, we wish to 36746avoid the special danger that patents applied to a free program could 36747make it effectively proprietary. To prevent this, the GPL assures that 36748patents cannot be used to render the program non-free. 36749 36750 The precise terms and conditions for copying, distribution and 36751modification follow. 36752 36753TERMS AND CONDITIONS 36754==================== 36755 36756 0. Definitions. 36757 36758 "This License" refers to version 3 of the GNU General Public 36759 License. 36760 36761 "Copyright" also means copyright-like laws that apply to other 36762 kinds of works, such as semiconductor masks. 36763 36764 "The Program" refers to any copyrightable work licensed under this 36765 License. Each licensee is addressed as "you". "Licensees" and 36766 "recipients" may be individuals or organizations. 36767 36768 To "modify" a work means to copy from or adapt all or part of the 36769 work in a fashion requiring copyright permission, other than the 36770 making of an exact copy. The resulting work is called a "modified 36771 version" of the earlier work or a work "based on" the earlier work. 36772 36773 A "covered work" means either the unmodified Program or a work 36774 based on the Program. 36775 36776 To "propagate" a work means to do anything with it that, without 36777 permission, would make you directly or secondarily liable for 36778 infringement under applicable copyright law, except executing it 36779 on a computer or modifying a private copy. Propagation includes 36780 copying, distribution (with or without modification), making 36781 available to the public, and in some countries other activities as 36782 well. 36783 36784 To "convey" a work means any kind of propagation that enables other 36785 parties to make or receive copies. Mere interaction with a user 36786 through a computer network, with no transfer of a copy, is not 36787 conveying. 36788 36789 An interactive user interface displays "Appropriate Legal Notices" 36790 to the extent that it includes a convenient and prominently visible 36791 feature that (1) displays an appropriate copyright notice, and (2) 36792 tells the user that there is no warranty for the work (except to 36793 the extent that warranties are provided), that licensees may 36794 convey the work under this License, and how to view a copy of this 36795 License. If the interface presents a list of user commands or 36796 options, such as a menu, a prominent item in the list meets this 36797 criterion. 36798 36799 1. Source Code. 36800 36801 The "source code" for a work means the preferred form of the work 36802 for making modifications to it. "Object code" means any 36803 non-source form of a work. 36804 36805 A "Standard Interface" means an interface that either is an 36806 official standard defined by a recognized standards body, or, in 36807 the case of interfaces specified for a particular programming 36808 language, one that is widely used among developers working in that 36809 language. 36810 36811 The "System Libraries" of an executable work include anything, 36812 other than the work as a whole, that (a) is included in the normal 36813 form of packaging a Major Component, but which is not part of that 36814 Major Component, and (b) serves only to enable use of the work 36815 with that Major Component, or to implement a Standard Interface 36816 for which an implementation is available to the public in source 36817 code form. A "Major Component", in this context, means a major 36818 essential component (kernel, window system, and so on) of the 36819 specific operating system (if any) on which the executable work 36820 runs, or a compiler used to produce the work, or an object code 36821 interpreter used to run it. 36822 36823 The "Corresponding Source" for a work in object code form means all 36824 the source code needed to generate, install, and (for an executable 36825 work) run the object code and to modify the work, including 36826 scripts to control those activities. However, it does not include 36827 the work's System Libraries, or general-purpose tools or generally 36828 available free programs which are used unmodified in performing 36829 those activities but which are not part of the work. For example, 36830 Corresponding Source includes interface definition files 36831 associated with source files for the work, and the source code for 36832 shared libraries and dynamically linked subprograms that the work 36833 is specifically designed to require, such as by intimate data 36834 communication or control flow between those subprograms and other 36835 parts of the work. 36836 36837 The Corresponding Source need not include anything that users can 36838 regenerate automatically from other parts of the Corresponding 36839 Source. 36840 36841 The Corresponding Source for a work in source code form is that 36842 same work. 36843 36844 2. Basic Permissions. 36845 36846 All rights granted under this License are granted for the term of 36847 copyright on the Program, and are irrevocable provided the stated 36848 conditions are met. This License explicitly affirms your unlimited 36849 permission to run the unmodified Program. The output from running 36850 a covered work is covered by this License only if the output, 36851 given its content, constitutes a covered work. This License 36852 acknowledges your rights of fair use or other equivalent, as 36853 provided by copyright law. 36854 36855 You may make, run and propagate covered works that you do not 36856 convey, without conditions so long as your license otherwise 36857 remains in force. You may convey covered works to others for the 36858 sole purpose of having them make modifications exclusively for 36859 you, or provide you with facilities for running those works, 36860 provided that you comply with the terms of this License in 36861 conveying all material for which you do not control copyright. 36862 Those thus making or running the covered works for you must do so 36863 exclusively on your behalf, under your direction and control, on 36864 terms that prohibit them from making any copies of your 36865 copyrighted material outside their relationship with you. 36866 36867 Conveying under any other circumstances is permitted solely under 36868 the conditions stated below. Sublicensing is not allowed; section 36869 10 makes it unnecessary. 36870 36871 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 36872 36873 No covered work shall be deemed part of an effective technological 36874 measure under any applicable law fulfilling obligations under 36875 article 11 of the WIPO copyright treaty adopted on 20 December 36876 1996, or similar laws prohibiting or restricting circumvention of 36877 such measures. 36878 36879 When you convey a covered work, you waive any legal power to forbid 36880 circumvention of technological measures to the extent such 36881 circumvention is effected by exercising rights under this License 36882 with respect to the covered work, and you disclaim any intention 36883 to limit operation or modification of the work as a means of 36884 enforcing, against the work's users, your or third parties' legal 36885 rights to forbid circumvention of technological measures. 36886 36887 4. Conveying Verbatim Copies. 36888 36889 You may convey verbatim copies of the Program's source code as you 36890 receive it, in any medium, provided that you conspicuously and 36891 appropriately publish on each copy an appropriate copyright notice; 36892 keep intact all notices stating that this License and any 36893 non-permissive terms added in accord with section 7 apply to the 36894 code; keep intact all notices of the absence of any warranty; and 36895 give all recipients a copy of this License along with the Program. 36896 36897 You may charge any price or no price for each copy that you convey, 36898 and you may offer support or warranty protection for a fee. 36899 36900 5. Conveying Modified Source Versions. 36901 36902 You may convey a work based on the Program, or the modifications to 36903 produce it from the Program, in the form of source code under the 36904 terms of section 4, provided that you also meet all of these 36905 conditions: 36906 36907 a. The work must carry prominent notices stating that you 36908 modified it, and giving a relevant date. 36909 36910 b. The work must carry prominent notices stating that it is 36911 released under this License and any conditions added under 36912 section 7. This requirement modifies the requirement in 36913 section 4 to "keep intact all notices". 36914 36915 c. You must license the entire work, as a whole, under this 36916 License to anyone who comes into possession of a copy. This 36917 License will therefore apply, along with any applicable 36918 section 7 additional terms, to the whole of the work, and all 36919 its parts, regardless of how they are packaged. This License 36920 gives no permission to license the work in any other way, but 36921 it does not invalidate such permission if you have separately 36922 received it. 36923 36924 d. If the work has interactive user interfaces, each must display 36925 Appropriate Legal Notices; however, if the Program has 36926 interactive interfaces that do not display Appropriate Legal 36927 Notices, your work need not make them do so. 36928 36929 A compilation of a covered work with other separate and independent 36930 works, which are not by their nature extensions of the covered 36931 work, and which are not combined with it such as to form a larger 36932 program, in or on a volume of a storage or distribution medium, is 36933 called an "aggregate" if the compilation and its resulting 36934 copyright are not used to limit the access or legal rights of the 36935 compilation's users beyond what the individual works permit. 36936 Inclusion of a covered work in an aggregate does not cause this 36937 License to apply to the other parts of the aggregate. 36938 36939 6. Conveying Non-Source Forms. 36940 36941 You may convey a covered work in object code form under the terms 36942 of sections 4 and 5, provided that you also convey the 36943 machine-readable Corresponding Source under the terms of this 36944 License, in one of these ways: 36945 36946 a. Convey the object code in, or embodied in, a physical product 36947 (including a physical distribution medium), accompanied by the 36948 Corresponding Source fixed on a durable physical medium 36949 customarily used for software interchange. 36950 36951 b. Convey the object code in, or embodied in, a physical product 36952 (including a physical distribution medium), accompanied by a 36953 written offer, valid for at least three years and valid for 36954 as long as you offer spare parts or customer support for that 36955 product model, to give anyone who possesses the object code 36956 either (1) a copy of the Corresponding Source for all the 36957 software in the product that is covered by this License, on a 36958 durable physical medium customarily used for software 36959 interchange, for a price no more than your reasonable cost of 36960 physically performing this conveying of source, or (2) access 36961 to copy the Corresponding Source from a network server at no 36962 charge. 36963 36964 c. Convey individual copies of the object code with a copy of 36965 the written offer to provide the Corresponding Source. This 36966 alternative is allowed only occasionally and noncommercially, 36967 and only if you received the object code with such an offer, 36968 in accord with subsection 6b. 36969 36970 d. Convey the object code by offering access from a designated 36971 place (gratis or for a charge), and offer equivalent access 36972 to the Corresponding Source in the same way through the same 36973 place at no further charge. You need not require recipients 36974 to copy the Corresponding Source along with the object code. 36975 If the place to copy the object code is a network server, the 36976 Corresponding Source may be on a different server (operated 36977 by you or a third party) that supports equivalent copying 36978 facilities, provided you maintain clear directions next to 36979 the object code saying where to find the Corresponding Source. 36980 Regardless of what server hosts the Corresponding Source, you 36981 remain obligated to ensure that it is available for as long 36982 as needed to satisfy these requirements. 36983 36984 e. Convey the object code using peer-to-peer transmission, 36985 provided you inform other peers where the object code and 36986 Corresponding Source of the work are being offered to the 36987 general public at no charge under subsection 6d. 36988 36989 36990 A separable portion of the object code, whose source code is 36991 excluded from the Corresponding Source as a System Library, need 36992 not be included in conveying the object code work. 36993 36994 A "User Product" is either (1) a "consumer product", which means 36995 any tangible personal property which is normally used for personal, 36996 family, or household purposes, or (2) anything designed or sold for 36997 incorporation into a dwelling. In determining whether a product 36998 is a consumer product, doubtful cases shall be resolved in favor of 36999 coverage. For a particular product received by a particular user, 37000 "normally used" refers to a typical or common use of that class of 37001 product, regardless of the status of the particular user or of the 37002 way in which the particular user actually uses, or expects or is 37003 expected to use, the product. A product is a consumer product 37004 regardless of whether the product has substantial commercial, 37005 industrial or non-consumer uses, unless such uses represent the 37006 only significant mode of use of the product. 37007 37008 "Installation Information" for a User Product means any methods, 37009 procedures, authorization keys, or other information required to 37010 install and execute modified versions of a covered work in that 37011 User Product from a modified version of its Corresponding Source. 37012 The information must suffice to ensure that the continued 37013 functioning of the modified object code is in no case prevented or 37014 interfered with solely because modification has been made. 37015 37016 If you convey an object code work under this section in, or with, 37017 or specifically for use in, a User Product, and the conveying 37018 occurs as part of a transaction in which the right of possession 37019 and use of the User Product is transferred to the recipient in 37020 perpetuity or for a fixed term (regardless of how the transaction 37021 is characterized), the Corresponding Source conveyed under this 37022 section must be accompanied by the Installation Information. But 37023 this requirement does not apply if neither you nor any third party 37024 retains the ability to install modified object code on the User 37025 Product (for example, the work has been installed in ROM). 37026 37027 The requirement to provide Installation Information does not 37028 include a requirement to continue to provide support service, 37029 warranty, or updates for a work that has been modified or 37030 installed by the recipient, or for the User Product in which it 37031 has been modified or installed. Access to a network may be denied 37032 when the modification itself materially and adversely affects the 37033 operation of the network or violates the rules and protocols for 37034 communication across the network. 37035 37036 Corresponding Source conveyed, and Installation Information 37037 provided, in accord with this section must be in a format that is 37038 publicly documented (and with an implementation available to the 37039 public in source code form), and must require no special password 37040 or key for unpacking, reading or copying. 37041 37042 7. Additional Terms. 37043 37044 "Additional permissions" are terms that supplement the terms of 37045 this License by making exceptions from one or more of its 37046 conditions. Additional permissions that are applicable to the 37047 entire Program shall be treated as though they were included in 37048 this License, to the extent that they are valid under applicable 37049 law. If additional permissions apply only to part of the Program, 37050 that part may be used separately under those permissions, but the 37051 entire Program remains governed by this License without regard to 37052 the additional permissions. 37053 37054 When you convey a copy of a covered work, you may at your option 37055 remove any additional permissions from that copy, or from any part 37056 of it. (Additional permissions may be written to require their own 37057 removal in certain cases when you modify the work.) You may place 37058 additional permissions on material, added by you to a covered work, 37059 for which you have or can give appropriate copyright permission. 37060 37061 Notwithstanding any other provision of this License, for material 37062 you add to a covered work, you may (if authorized by the copyright 37063 holders of that material) supplement the terms of this License 37064 with terms: 37065 37066 a. Disclaiming warranty or limiting liability differently from 37067 the terms of sections 15 and 16 of this License; or 37068 37069 b. Requiring preservation of specified reasonable legal notices 37070 or author attributions in that material or in the Appropriate 37071 Legal Notices displayed by works containing it; or 37072 37073 c. Prohibiting misrepresentation of the origin of that material, 37074 or requiring that modified versions of such material be 37075 marked in reasonable ways as different from the original 37076 version; or 37077 37078 d. Limiting the use for publicity purposes of names of licensors 37079 or authors of the material; or 37080 37081 e. Declining to grant rights under trademark law for use of some 37082 trade names, trademarks, or service marks; or 37083 37084 f. Requiring indemnification of licensors and authors of that 37085 material by anyone who conveys the material (or modified 37086 versions of it) with contractual assumptions of liability to 37087 the recipient, for any liability that these contractual 37088 assumptions directly impose on those licensors and authors. 37089 37090 All other non-permissive additional terms are considered "further 37091 restrictions" within the meaning of section 10. If the Program as 37092 you received it, or any part of it, contains a notice stating that 37093 it is governed by this License along with a term that is a further 37094 restriction, you may remove that term. If a license document 37095 contains a further restriction but permits relicensing or 37096 conveying under this License, you may add to a covered work 37097 material governed by the terms of that license document, provided 37098 that the further restriction does not survive such relicensing or 37099 conveying. 37100 37101 If you add terms to a covered work in accord with this section, you 37102 must place, in the relevant source files, a statement of the 37103 additional terms that apply to those files, or a notice indicating 37104 where to find the applicable terms. 37105 37106 Additional terms, permissive or non-permissive, may be stated in 37107 the form of a separately written license, or stated as exceptions; 37108 the above requirements apply either way. 37109 37110 8. Termination. 37111 37112 You may not propagate or modify a covered work except as expressly 37113 provided under this License. Any attempt otherwise to propagate or 37114 modify it is void, and will automatically terminate your rights 37115 under this License (including any patent licenses granted under 37116 the third paragraph of section 11). 37117 37118 However, if you cease all violation of this License, then your 37119 license from a particular copyright holder is reinstated (a) 37120 provisionally, unless and until the copyright holder explicitly 37121 and finally terminates your license, and (b) permanently, if the 37122 copyright holder fails to notify you of the violation by some 37123 reasonable means prior to 60 days after the cessation. 37124 37125 Moreover, your license from a particular copyright holder is 37126 reinstated permanently if the copyright holder notifies you of the 37127 violation by some reasonable means, this is the first time you have 37128 received notice of violation of this License (for any work) from 37129 that copyright holder, and you cure the violation prior to 30 days 37130 after your receipt of the notice. 37131 37132 Termination of your rights under this section does not terminate 37133 the licenses of parties who have received copies or rights from 37134 you under this License. If your rights have been terminated and 37135 not permanently reinstated, you do not qualify to receive new 37136 licenses for the same material under section 10. 37137 37138 9. Acceptance Not Required for Having Copies. 37139 37140 You are not required to accept this License in order to receive or 37141 run a copy of the Program. Ancillary propagation of a covered work 37142 occurring solely as a consequence of using peer-to-peer 37143 transmission to receive a copy likewise does not require 37144 acceptance. However, nothing other than this License grants you 37145 permission to propagate or modify any covered work. These actions 37146 infringe copyright if you do not accept this License. Therefore, 37147 by modifying or propagating a covered work, you indicate your 37148 acceptance of this License to do so. 37149 37150 10. Automatic Licensing of Downstream Recipients. 37151 37152 Each time you convey a covered work, the recipient automatically 37153 receives a license from the original licensors, to run, modify and 37154 propagate that work, subject to this License. You are not 37155 responsible for enforcing compliance by third parties with this 37156 License. 37157 37158 An "entity transaction" is a transaction transferring control of an 37159 organization, or substantially all assets of one, or subdividing an 37160 organization, or merging organizations. If propagation of a 37161 covered work results from an entity transaction, each party to that 37162 transaction who receives a copy of the work also receives whatever 37163 licenses to the work the party's predecessor in interest had or 37164 could give under the previous paragraph, plus a right to 37165 possession of the Corresponding Source of the work from the 37166 predecessor in interest, if the predecessor has it or can get it 37167 with reasonable efforts. 37168 37169 You may not impose any further restrictions on the exercise of the 37170 rights granted or affirmed under this License. For example, you 37171 may not impose a license fee, royalty, or other charge for 37172 exercise of rights granted under this License, and you may not 37173 initiate litigation (including a cross-claim or counterclaim in a 37174 lawsuit) alleging that any patent claim is infringed by making, 37175 using, selling, offering for sale, or importing the Program or any 37176 portion of it. 37177 37178 11. Patents. 37179 37180 A "contributor" is a copyright holder who authorizes use under this 37181 License of the Program or a work on which the Program is based. 37182 The work thus licensed is called the contributor's "contributor 37183 version". 37184 37185 A contributor's "essential patent claims" are all patent claims 37186 owned or controlled by the contributor, whether already acquired or 37187 hereafter acquired, that would be infringed by some manner, 37188 permitted by this License, of making, using, or selling its 37189 contributor version, but do not include claims that would be 37190 infringed only as a consequence of further modification of the 37191 contributor version. For purposes of this definition, "control" 37192 includes the right to grant patent sublicenses in a manner 37193 consistent with the requirements of this License. 37194 37195 Each contributor grants you a non-exclusive, worldwide, 37196 royalty-free patent license under the contributor's essential 37197 patent claims, to make, use, sell, offer for sale, import and 37198 otherwise run, modify and propagate the contents of its 37199 contributor version. 37200 37201 In the following three paragraphs, a "patent license" is any 37202 express agreement or commitment, however denominated, not to 37203 enforce a patent (such as an express permission to practice a 37204 patent or covenant not to sue for patent infringement). To 37205 "grant" such a patent license to a party means to make such an 37206 agreement or commitment not to enforce a patent against the party. 37207 37208 If you convey a covered work, knowingly relying on a patent 37209 license, and the Corresponding Source of the work is not available 37210 for anyone to copy, free of charge and under the terms of this 37211 License, through a publicly available network server or other 37212 readily accessible means, then you must either (1) cause the 37213 Corresponding Source to be so available, or (2) arrange to deprive 37214 yourself of the benefit of the patent license for this particular 37215 work, or (3) arrange, in a manner consistent with the requirements 37216 of this License, to extend the patent license to downstream 37217 recipients. "Knowingly relying" means you have actual knowledge 37218 that, but for the patent license, your conveying the covered work 37219 in a country, or your recipient's use of the covered work in a 37220 country, would infringe one or more identifiable patents in that 37221 country that you have reason to believe are valid. 37222 37223 If, pursuant to or in connection with a single transaction or 37224 arrangement, you convey, or propagate by procuring conveyance of, a 37225 covered work, and grant a patent license to some of the parties 37226 receiving the covered work authorizing them to use, propagate, 37227 modify or convey a specific copy of the covered work, then the 37228 patent license you grant is automatically extended to all 37229 recipients of the covered work and works based on it. 37230 37231 A patent license is "discriminatory" if it does not include within 37232 the scope of its coverage, prohibits the exercise of, or is 37233 conditioned on the non-exercise of one or more of the rights that 37234 are specifically granted under this License. You may not convey a 37235 covered work if you are a party to an arrangement with a third 37236 party that is in the business of distributing software, under 37237 which you make payment to the third party based on the extent of 37238 your activity of conveying the work, and under which the third 37239 party grants, to any of the parties who would receive the covered 37240 work from you, a discriminatory patent license (a) in connection 37241 with copies of the covered work conveyed by you (or copies made 37242 from those copies), or (b) primarily for and in connection with 37243 specific products or compilations that contain the covered work, 37244 unless you entered into that arrangement, or that patent license 37245 was granted, prior to 28 March 2007. 37246 37247 Nothing in this License shall be construed as excluding or limiting 37248 any implied license or other defenses to infringement that may 37249 otherwise be available to you under applicable patent law. 37250 37251 12. No Surrender of Others' Freedom. 37252 37253 If conditions are imposed on you (whether by court order, 37254 agreement or otherwise) that contradict the conditions of this 37255 License, they do not excuse you from the conditions of this 37256 License. If you cannot convey a covered work so as to satisfy 37257 simultaneously your obligations under this License and any other 37258 pertinent obligations, then as a consequence you may not convey it 37259 at all. For example, if you agree to terms that obligate you to 37260 collect a royalty for further conveying from those to whom you 37261 convey the Program, the only way you could satisfy both those 37262 terms and this License would be to refrain entirely from conveying 37263 the Program. 37264 37265 13. Use with the GNU Affero General Public License. 37266 37267 Notwithstanding any other provision of this License, you have 37268 permission to link or combine any covered work with a work licensed 37269 under version 3 of the GNU Affero General Public License into a 37270 single combined work, and to convey the resulting work. The terms 37271 of this License will continue to apply to the part which is the 37272 covered work, but the special requirements of the GNU Affero 37273 General Public License, section 13, concerning interaction through 37274 a network will apply to the combination as such. 37275 37276 14. Revised Versions of this License. 37277 37278 The Free Software Foundation may publish revised and/or new 37279 versions of the GNU General Public License from time to time. 37280 Such new versions will be similar in spirit to the present 37281 version, but may differ in detail to address new problems or 37282 concerns. 37283 37284 Each version is given a distinguishing version number. If the 37285 Program specifies that a certain numbered version of the GNU 37286 General Public License "or any later version" applies to it, you 37287 have the option of following the terms and conditions either of 37288 that numbered version or of any later version published by the 37289 Free Software Foundation. If the Program does not specify a 37290 version number of the GNU General Public License, you may choose 37291 any version ever published by the Free Software Foundation. 37292 37293 If the Program specifies that a proxy can decide which future 37294 versions of the GNU General Public License can be used, that 37295 proxy's public statement of acceptance of a version permanently 37296 authorizes you to choose that version for the Program. 37297 37298 Later license versions may give you additional or different 37299 permissions. However, no additional obligations are imposed on any 37300 author or copyright holder as a result of your choosing to follow a 37301 later version. 37302 37303 15. Disclaimer of Warranty. 37304 37305 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 37306 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 37307 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 37308 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 37309 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 37310 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 37311 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 37312 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 37313 NECESSARY SERVICING, REPAIR OR CORRECTION. 37314 37315 16. Limitation of Liability. 37316 37317 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 37318 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 37319 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 37320 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 37321 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 37322 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 37323 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 37324 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 37325 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 37326 THE POSSIBILITY OF SUCH DAMAGES. 37327 37328 17. Interpretation of Sections 15 and 16. 37329 37330 If the disclaimer of warranty and limitation of liability provided 37331 above cannot be given local legal effect according to their terms, 37332 reviewing courts shall apply local law that most closely 37333 approximates an absolute waiver of all civil liability in 37334 connection with the Program, unless a warranty or assumption of 37335 liability accompanies a copy of the Program in return for a fee. 37336 37337 37338END OF TERMS AND CONDITIONS 37339=========================== 37340 37341How to Apply These Terms to Your New Programs 37342============================================= 37343 37344If you develop a new program, and you want it to be of the greatest 37345possible use to the public, the best way to achieve this is to make it 37346free software which everyone can redistribute and change under these 37347terms. 37348 37349 To do so, attach the following notices to the program. It is safest 37350to attach them to the start of each source file to most effectively 37351state the exclusion of warranty; and each file should have at least the 37352"copyright" line and a pointer to where the full notice is found. 37353 37354 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 37355 Copyright (C) YEAR NAME OF AUTHOR 37356 37357 This program is free software: you can redistribute it and/or modify 37358 it under the terms of the GNU General Public License as published by 37359 the Free Software Foundation, either version 3 of the License, or (at 37360 your option) any later version. 37361 37362 This program is distributed in the hope that it will be useful, but 37363 WITHOUT ANY WARRANTY; without even the implied warranty of 37364 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 37365 General Public License for more details. 37366 37367 You should have received a copy of the GNU General Public License 37368 along with this program. If not, see `http://www.gnu.org/licenses/'. 37369 37370 Also add information on how to contact you by electronic and paper 37371mail. 37372 37373 If the program does terminal interaction, make it output a short 37374notice like this when it starts in an interactive mode: 37375 37376 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 37377 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 37378 This is free software, and you are welcome to redistribute it 37379 under certain conditions; type `show c' for details. 37380 37381 The hypothetical commands `show w' and `show c' should show the 37382appropriate parts of the General Public License. Of course, your 37383program's commands might be different; for a GUI interface, you would 37384use an "about box". 37385 37386 You should also get your employer (if you work as a programmer) or 37387school, if any, to sign a "copyright disclaimer" for the program, if 37388necessary. For more information on this, and how to apply and follow 37389the GNU GPL, see `http://www.gnu.org/licenses/'. 37390 37391 The GNU General Public License does not permit incorporating your 37392program into proprietary programs. If your program is a subroutine 37393library, you may consider it more useful to permit linking proprietary 37394applications with the library. If this is what you want to do, use the 37395GNU Lesser General Public License instead of this License. But first, 37396please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 37397 37398 37399File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 37400 37401GNU Free Documentation License 37402****************************** 37403 37404 Version 1.2, November 2002 37405 37406 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 37407 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 37408 37409 Everyone is permitted to copy and distribute verbatim copies 37410 of this license document, but changing it is not allowed. 37411 37412 0. PREAMBLE 37413 37414 The purpose of this License is to make a manual, textbook, or other 37415 functional and useful document "free" in the sense of freedom: to 37416 assure everyone the effective freedom to copy and redistribute it, 37417 with or without modifying it, either commercially or 37418 noncommercially. Secondarily, this License preserves for the 37419 author and publisher a way to get credit for their work, while not 37420 being considered responsible for modifications made by others. 37421 37422 This License is a kind of "copyleft", which means that derivative 37423 works of the document must themselves be free in the same sense. 37424 It complements the GNU General Public License, which is a copyleft 37425 license designed for free software. 37426 37427 We have designed this License in order to use it for manuals for 37428 free software, because free software needs free documentation: a 37429 free program should come with manuals providing the same freedoms 37430 that the software does. But this License is not limited to 37431 software manuals; it can be used for any textual work, regardless 37432 of subject matter or whether it is published as a printed book. 37433 We recommend this License principally for works whose purpose is 37434 instruction or reference. 37435 37436 1. APPLICABILITY AND DEFINITIONS 37437 37438 This License applies to any manual or other work, in any medium, 37439 that contains a notice placed by the copyright holder saying it 37440 can be distributed under the terms of this License. Such a notice 37441 grants a world-wide, royalty-free license, unlimited in duration, 37442 to use that work under the conditions stated herein. The 37443 "Document", below, refers to any such manual or work. Any member 37444 of the public is a licensee, and is addressed as "you". You 37445 accept the license if you copy, modify or distribute the work in a 37446 way requiring permission under copyright law. 37447 37448 A "Modified Version" of the Document means any work containing the 37449 Document or a portion of it, either copied verbatim, or with 37450 modifications and/or translated into another language. 37451 37452 A "Secondary Section" is a named appendix or a front-matter section 37453 of the Document that deals exclusively with the relationship of the 37454 publishers or authors of the Document to the Document's overall 37455 subject (or to related matters) and contains nothing that could 37456 fall directly within that overall subject. (Thus, if the Document 37457 is in part a textbook of mathematics, a Secondary Section may not 37458 explain any mathematics.) The relationship could be a matter of 37459 historical connection with the subject or with related matters, or 37460 of legal, commercial, philosophical, ethical or political position 37461 regarding them. 37462 37463 The "Invariant Sections" are certain Secondary Sections whose 37464 titles are designated, as being those of Invariant Sections, in 37465 the notice that says that the Document is released under this 37466 License. If a section does not fit the above definition of 37467 Secondary then it is not allowed to be designated as Invariant. 37468 The Document may contain zero Invariant Sections. If the Document 37469 does not identify any Invariant Sections then there are none. 37470 37471 The "Cover Texts" are certain short passages of text that are 37472 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 37473 that says that the Document is released under this License. A 37474 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 37475 be at most 25 words. 37476 37477 A "Transparent" copy of the Document means a machine-readable copy, 37478 represented in a format whose specification is available to the 37479 general public, that is suitable for revising the document 37480 straightforwardly with generic text editors or (for images 37481 composed of pixels) generic paint programs or (for drawings) some 37482 widely available drawing editor, and that is suitable for input to 37483 text formatters or for automatic translation to a variety of 37484 formats suitable for input to text formatters. A copy made in an 37485 otherwise Transparent file format whose markup, or absence of 37486 markup, has been arranged to thwart or discourage subsequent 37487 modification by readers is not Transparent. An image format is 37488 not Transparent if used for any substantial amount of text. A 37489 copy that is not "Transparent" is called "Opaque". 37490 37491 Examples of suitable formats for Transparent copies include plain 37492 ASCII without markup, Texinfo input format, LaTeX input format, 37493 SGML or XML using a publicly available DTD, and 37494 standard-conforming simple HTML, PostScript or PDF designed for 37495 human modification. Examples of transparent image formats include 37496 PNG, XCF and JPG. Opaque formats include proprietary formats that 37497 can be read and edited only by proprietary word processors, SGML or 37498 XML for which the DTD and/or processing tools are not generally 37499 available, and the machine-generated HTML, PostScript or PDF 37500 produced by some word processors for output purposes only. 37501 37502 The "Title Page" means, for a printed book, the title page itself, 37503 plus such following pages as are needed to hold, legibly, the 37504 material this License requires to appear in the title page. For 37505 works in formats which do not have any title page as such, "Title 37506 Page" means the text near the most prominent appearance of the 37507 work's title, preceding the beginning of the body of the text. 37508 37509 A section "Entitled XYZ" means a named subunit of the Document 37510 whose title either is precisely XYZ or contains XYZ in parentheses 37511 following text that translates XYZ in another language. (Here XYZ 37512 stands for a specific section name mentioned below, such as 37513 "Acknowledgements", "Dedications", "Endorsements", or "History".) 37514 To "Preserve the Title" of such a section when you modify the 37515 Document means that it remains a section "Entitled XYZ" according 37516 to this definition. 37517 37518 The Document may include Warranty Disclaimers next to the notice 37519 which states that this License applies to the Document. These 37520 Warranty Disclaimers are considered to be included by reference in 37521 this License, but only as regards disclaiming warranties: any other 37522 implication that these Warranty Disclaimers may have is void and 37523 has no effect on the meaning of this License. 37524 37525 2. VERBATIM COPYING 37526 37527 You may copy and distribute the Document in any medium, either 37528 commercially or noncommercially, provided that this License, the 37529 copyright notices, and the license notice saying this License 37530 applies to the Document are reproduced in all copies, and that you 37531 add no other conditions whatsoever to those of this License. You 37532 may not use technical measures to obstruct or control the reading 37533 or further copying of the copies you make or distribute. However, 37534 you may accept compensation in exchange for copies. If you 37535 distribute a large enough number of copies you must also follow 37536 the conditions in section 3. 37537 37538 You may also lend copies, under the same conditions stated above, 37539 and you may publicly display copies. 37540 37541 3. COPYING IN QUANTITY 37542 37543 If you publish printed copies (or copies in media that commonly 37544 have printed covers) of the Document, numbering more than 100, and 37545 the Document's license notice requires Cover Texts, you must 37546 enclose the copies in covers that carry, clearly and legibly, all 37547 these Cover Texts: Front-Cover Texts on the front cover, and 37548 Back-Cover Texts on the back cover. Both covers must also clearly 37549 and legibly identify you as the publisher of these copies. The 37550 front cover must present the full title with all words of the 37551 title equally prominent and visible. You may add other material 37552 on the covers in addition. Copying with changes limited to the 37553 covers, as long as they preserve the title of the Document and 37554 satisfy these conditions, can be treated as verbatim copying in 37555 other respects. 37556 37557 If the required texts for either cover are too voluminous to fit 37558 legibly, you should put the first ones listed (as many as fit 37559 reasonably) on the actual cover, and continue the rest onto 37560 adjacent pages. 37561 37562 If you publish or distribute Opaque copies of the Document 37563 numbering more than 100, you must either include a 37564 machine-readable Transparent copy along with each Opaque copy, or 37565 state in or with each Opaque copy a computer-network location from 37566 which the general network-using public has access to download 37567 using public-standard network protocols a complete Transparent 37568 copy of the Document, free of added material. If you use the 37569 latter option, you must take reasonably prudent steps, when you 37570 begin distribution of Opaque copies in quantity, to ensure that 37571 this Transparent copy will remain thus accessible at the stated 37572 location until at least one year after the last time you 37573 distribute an Opaque copy (directly or through your agents or 37574 retailers) of that edition to the public. 37575 37576 It is requested, but not required, that you contact the authors of 37577 the Document well before redistributing any large number of 37578 copies, to give them a chance to provide you with an updated 37579 version of the Document. 37580 37581 4. MODIFICATIONS 37582 37583 You may copy and distribute a Modified Version of the Document 37584 under the conditions of sections 2 and 3 above, provided that you 37585 release the Modified Version under precisely this License, with 37586 the Modified Version filling the role of the Document, thus 37587 licensing distribution and modification of the Modified Version to 37588 whoever possesses a copy of it. In addition, you must do these 37589 things in the Modified Version: 37590 37591 A. Use in the Title Page (and on the covers, if any) a title 37592 distinct from that of the Document, and from those of 37593 previous versions (which should, if there were any, be listed 37594 in the History section of the Document). You may use the 37595 same title as a previous version if the original publisher of 37596 that version gives permission. 37597 37598 B. List on the Title Page, as authors, one or more persons or 37599 entities responsible for authorship of the modifications in 37600 the Modified Version, together with at least five of the 37601 principal authors of the Document (all of its principal 37602 authors, if it has fewer than five), unless they release you 37603 from this requirement. 37604 37605 C. State on the Title page the name of the publisher of the 37606 Modified Version, as the publisher. 37607 37608 D. Preserve all the copyright notices of the Document. 37609 37610 E. Add an appropriate copyright notice for your modifications 37611 adjacent to the other copyright notices. 37612 37613 F. Include, immediately after the copyright notices, a license 37614 notice giving the public permission to use the Modified 37615 Version under the terms of this License, in the form shown in 37616 the Addendum below. 37617 37618 G. Preserve in that license notice the full lists of Invariant 37619 Sections and required Cover Texts given in the Document's 37620 license notice. 37621 37622 H. Include an unaltered copy of this License. 37623 37624 I. Preserve the section Entitled "History", Preserve its Title, 37625 and add to it an item stating at least the title, year, new 37626 authors, and publisher of the Modified Version as given on 37627 the Title Page. If there is no section Entitled "History" in 37628 the Document, create one stating the title, year, authors, 37629 and publisher of the Document as given on its Title Page, 37630 then add an item describing the Modified Version as stated in 37631 the previous sentence. 37632 37633 J. Preserve the network location, if any, given in the Document 37634 for public access to a Transparent copy of the Document, and 37635 likewise the network locations given in the Document for 37636 previous versions it was based on. These may be placed in 37637 the "History" section. You may omit a network location for a 37638 work that was published at least four years before the 37639 Document itself, or if the original publisher of the version 37640 it refers to gives permission. 37641 37642 K. For any section Entitled "Acknowledgements" or "Dedications", 37643 Preserve the Title of the section, and preserve in the 37644 section all the substance and tone of each of the contributor 37645 acknowledgements and/or dedications given therein. 37646 37647 L. Preserve all the Invariant Sections of the Document, 37648 unaltered in their text and in their titles. Section numbers 37649 or the equivalent are not considered part of the section 37650 titles. 37651 37652 M. Delete any section Entitled "Endorsements". Such a section 37653 may not be included in the Modified Version. 37654 37655 N. Do not retitle any existing section to be Entitled 37656 "Endorsements" or to conflict in title with any Invariant 37657 Section. 37658 37659 O. Preserve any Warranty Disclaimers. 37660 37661 If the Modified Version includes new front-matter sections or 37662 appendices that qualify as Secondary Sections and contain no 37663 material copied from the Document, you may at your option 37664 designate some or all of these sections as invariant. To do this, 37665 add their titles to the list of Invariant Sections in the Modified 37666 Version's license notice. These titles must be distinct from any 37667 other section titles. 37668 37669 You may add a section Entitled "Endorsements", provided it contains 37670 nothing but endorsements of your Modified Version by various 37671 parties--for example, statements of peer review or that the text 37672 has been approved by an organization as the authoritative 37673 definition of a standard. 37674 37675 You may add a passage of up to five words as a Front-Cover Text, 37676 and a passage of up to 25 words as a Back-Cover Text, to the end 37677 of the list of Cover Texts in the Modified Version. Only one 37678 passage of Front-Cover Text and one of Back-Cover Text may be 37679 added by (or through arrangements made by) any one entity. If the 37680 Document already includes a cover text for the same cover, 37681 previously added by you or by arrangement made by the same entity 37682 you are acting on behalf of, you may not add another; but you may 37683 replace the old one, on explicit permission from the previous 37684 publisher that added the old one. 37685 37686 The author(s) and publisher(s) of the Document do not by this 37687 License give permission to use their names for publicity for or to 37688 assert or imply endorsement of any Modified Version. 37689 37690 5. COMBINING DOCUMENTS 37691 37692 You may combine the Document with other documents released under 37693 this License, under the terms defined in section 4 above for 37694 modified versions, provided that you include in the combination 37695 all of the Invariant Sections of all of the original documents, 37696 unmodified, and list them all as Invariant Sections of your 37697 combined work in its license notice, and that you preserve all 37698 their Warranty Disclaimers. 37699 37700 The combined work need only contain one copy of this License, and 37701 multiple identical Invariant Sections may be replaced with a single 37702 copy. If there are multiple Invariant Sections with the same name 37703 but different contents, make the title of each such section unique 37704 by adding at the end of it, in parentheses, the name of the 37705 original author or publisher of that section if known, or else a 37706 unique number. Make the same adjustment to the section titles in 37707 the list of Invariant Sections in the license notice of the 37708 combined work. 37709 37710 In the combination, you must combine any sections Entitled 37711 "History" in the various original documents, forming one section 37712 Entitled "History"; likewise combine any sections Entitled 37713 "Acknowledgements", and any sections Entitled "Dedications". You 37714 must delete all sections Entitled "Endorsements." 37715 37716 6. COLLECTIONS OF DOCUMENTS 37717 37718 You may make a collection consisting of the Document and other 37719 documents released under this License, and replace the individual 37720 copies of this License in the various documents with a single copy 37721 that is included in the collection, provided that you follow the 37722 rules of this License for verbatim copying of each of the 37723 documents in all other respects. 37724 37725 You may extract a single document from such a collection, and 37726 distribute it individually under this License, provided you insert 37727 a copy of this License into the extracted document, and follow 37728 this License in all other respects regarding verbatim copying of 37729 that document. 37730 37731 7. AGGREGATION WITH INDEPENDENT WORKS 37732 37733 A compilation of the Document or its derivatives with other 37734 separate and independent documents or works, in or on a volume of 37735 a storage or distribution medium, is called an "aggregate" if the 37736 copyright resulting from the compilation is not used to limit the 37737 legal rights of the compilation's users beyond what the individual 37738 works permit. When the Document is included in an aggregate, this 37739 License does not apply to the other works in the aggregate which 37740 are not themselves derivative works of the Document. 37741 37742 If the Cover Text requirement of section 3 is applicable to these 37743 copies of the Document, then if the Document is less than one half 37744 of the entire aggregate, the Document's Cover Texts may be placed 37745 on covers that bracket the Document within the aggregate, or the 37746 electronic equivalent of covers if the Document is in electronic 37747 form. Otherwise they must appear on printed covers that bracket 37748 the whole aggregate. 37749 37750 8. TRANSLATION 37751 37752 Translation is considered a kind of modification, so you may 37753 distribute translations of the Document under the terms of section 37754 4. Replacing Invariant Sections with translations requires special 37755 permission from their copyright holders, but you may include 37756 translations of some or all Invariant Sections in addition to the 37757 original versions of these Invariant Sections. You may include a 37758 translation of this License, and all the license notices in the 37759 Document, and any Warranty Disclaimers, provided that you also 37760 include the original English version of this License and the 37761 original versions of those notices and disclaimers. In case of a 37762 disagreement between the translation and the original version of 37763 this License or a notice or disclaimer, the original version will 37764 prevail. 37765 37766 If a section in the Document is Entitled "Acknowledgements", 37767 "Dedications", or "History", the requirement (section 4) to 37768 Preserve its Title (section 1) will typically require changing the 37769 actual title. 37770 37771 9. TERMINATION 37772 37773 You may not copy, modify, sublicense, or distribute the Document 37774 except as expressly provided for under this License. Any other 37775 attempt to copy, modify, sublicense or distribute the Document is 37776 void, and will automatically terminate your rights under this 37777 License. However, parties who have received copies, or rights, 37778 from you under this License will not have their licenses 37779 terminated so long as such parties remain in full compliance. 37780 37781 10. FUTURE REVISIONS OF THIS LICENSE 37782 37783 The Free Software Foundation may publish new, revised versions of 37784 the GNU Free Documentation License from time to time. Such new 37785 versions will be similar in spirit to the present version, but may 37786 differ in detail to address new problems or concerns. See 37787 `http://www.gnu.org/copyleft/'. 37788 37789 Each version of the License is given a distinguishing version 37790 number. If the Document specifies that a particular numbered 37791 version of this License "or any later version" applies to it, you 37792 have the option of following the terms and conditions either of 37793 that specified version or of any later version that has been 37794 published (not as a draft) by the Free Software Foundation. If 37795 the Document does not specify a version number of this License, 37796 you may choose any version ever published (not as a draft) by the 37797 Free Software Foundation. 37798 37799ADDENDUM: How to use this License for your documents 37800==================================================== 37801 37802To use this License in a document you have written, include a copy of 37803the License in the document and put the following copyright and license 37804notices just after the title page: 37805 37806 Copyright (C) YEAR YOUR NAME. 37807 Permission is granted to copy, distribute and/or modify this document 37808 under the terms of the GNU Free Documentation License, Version 1.2 37809 or any later version published by the Free Software Foundation; 37810 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 37811 Texts. A copy of the license is included in the section entitled ``GNU 37812 Free Documentation License''. 37813 37814 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 37815replace the "with...Texts." line with this: 37816 37817 with the Invariant Sections being LIST THEIR TITLES, with 37818 the Front-Cover Texts being LIST, and with the Back-Cover Texts 37819 being LIST. 37820 37821 If you have Invariant Sections without Cover Texts, or some other 37822combination of the three, merge those two alternatives to suit the 37823situation. 37824 37825 If your document contains nontrivial examples of program code, we 37826recommend releasing these examples in parallel under your choice of 37827free software license, such as the GNU General Public License, to 37828permit their use in free software. 37829 37830 37831File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 37832 37833Contributors to GCC 37834******************* 37835 37836The GCC project would like to thank its many contributors. Without 37837them the project would not have been nearly as successful as it has 37838been. Any omissions in this list are accidental. Feel free to contact 37839<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 37840some of your contributions are not listed. Please keep this list in 37841alphabetical order. 37842 37843 * Analog Devices helped implement the support for complex data types 37844 and iterators. 37845 37846 * John David Anglin for threading-related fixes and improvements to 37847 libstdc++-v3, and the HP-UX port. 37848 37849 * James van Artsdalen wrote the code that makes efficient use of the 37850 Intel 80387 register stack. 37851 37852 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 37853 Series port. 37854 37855 * Alasdair Baird for various bug fixes. 37856 37857 * Giovanni Bajo for analyzing lots of complicated C++ problem 37858 reports. 37859 37860 * Peter Barada for his work to improve code generation for new 37861 ColdFire cores. 37862 37863 * Gerald Baumgartner added the signature extension to the C++ front 37864 end. 37865 37866 * Godmar Back for his Java improvements and encouragement. 37867 37868 * Scott Bambrough for help porting the Java compiler. 37869 37870 * Wolfgang Bangerth for processing tons of bug reports. 37871 37872 * Jon Beniston for his Microsoft Windows port of Java and port to 37873 Lattice Mico32. 37874 37875 * Daniel Berlin for better DWARF2 support, faster/better 37876 optimizations, improved alias analysis, plus migrating GCC to 37877 Bugzilla. 37878 37879 * Geoff Berry for his Java object serialization work and various 37880 patches. 37881 37882 * Uros Bizjak for the implementation of x87 math built-in functions 37883 and for various middle end and i386 back end improvements and bug 37884 fixes. 37885 37886 * Eric Blake for helping to make GCJ and libgcj conform to the 37887 specifications. 37888 37889 * Janne Blomqvist for contributions to GNU Fortran. 37890 37891 * Segher Boessenkool for various fixes. 37892 37893 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 37894 other Java work. 37895 37896 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 37897 miscellaneous clean-ups. 37898 37899 * Steven Bosscher for integrating the GNU Fortran front end into GCC 37900 and for contributing to the tree-ssa branch. 37901 37902 * Eric Botcazou for fixing middle- and backend bugs left and right. 37903 37904 * Per Bothner for his direction via the steering committee and 37905 various improvements to the infrastructure for supporting new 37906 languages. Chill front end implementation. Initial 37907 implementations of cpplib, fix-header, config.guess, libio, and 37908 past C++ library (libg++) maintainer. Dreaming up, designing and 37909 implementing much of GCJ. 37910 37911 * Devon Bowen helped port GCC to the Tahoe. 37912 37913 * Don Bowman for mips-vxworks contributions. 37914 37915 * Dave Brolley for work on cpplib and Chill. 37916 37917 * Paul Brook for work on the ARM architecture and maintaining GNU 37918 Fortran. 37919 37920 * Robert Brown implemented the support for Encore 32000 systems. 37921 37922 * Christian Bruel for improvements to local store elimination. 37923 37924 * Herman A.J. ten Brugge for various fixes. 37925 37926 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 37927 FAQ. 37928 37929 * Joe Buck for his direction via the steering committee. 37930 37931 * Craig Burley for leadership of the G77 Fortran effort. 37932 37933 * Stephan Buys for contributing Doxygen notes for libstdc++. 37934 37935 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 37936 to the C++ strings, streambufs and formatted I/O, hard detective 37937 work on the frustrating localization issues, and keeping up with 37938 the problem reports. 37939 37940 * John Carr for his alias work, SPARC hacking, infrastructure 37941 improvements, previous contributions to the steering committee, 37942 loop optimizations, etc. 37943 37944 * Stephane Carrez for 68HC11 and 68HC12 ports. 37945 37946 * Steve Chamberlain for support for the Renesas SH and H8 processors 37947 and the PicoJava processor, and for GCJ config fixes. 37948 37949 * Glenn Chambers for help with the GCJ FAQ. 37950 37951 * John-Marc Chandonia for various libgcj patches. 37952 37953 * Denis Chertykov for contributing and maintaining the AVR port, the 37954 first GCC port for an 8-bit architecture. 37955 37956 * Scott Christley for his Objective-C contributions. 37957 37958 * Eric Christopher for his Java porting help and clean-ups. 37959 37960 * Branko Cibej for more warning contributions. 37961 37962 * The GNU Classpath project for all of their merged runtime code. 37963 37964 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 37965 and other random hacking. 37966 37967 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 37968 37969 * R. Kelley Cook for making GCC buildable from a read-only directory 37970 as well as other miscellaneous build process and documentation 37971 clean-ups. 37972 37973 * Ralf Corsepius for SH testing and minor bug fixing. 37974 37975 * Stan Cox for care and feeding of the x86 port and lots of behind 37976 the scenes hacking. 37977 37978 * Alex Crain provided changes for the 3b1. 37979 37980 * Ian Dall for major improvements to the NS32k port. 37981 37982 * Paul Dale for his work to add uClinux platform support to the m68k 37983 backend. 37984 37985 * Dario Dariol contributed the four varieties of sample programs 37986 that print a copy of their source. 37987 37988 * Russell Davidson for fstream and stringstream fixes in libstdc++. 37989 37990 * Bud Davis for work on the G77 and GNU Fortran compilers. 37991 37992 * Mo DeJong for GCJ and libgcj bug fixes. 37993 37994 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 37995 various bug fixes, and the M32C and MeP ports. 37996 37997 * Arnaud Desitter for helping to debug GNU Fortran. 37998 37999 * Gabriel Dos Reis for contributions to G++, contributions and 38000 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 38001 including `valarray<>', `complex<>', maintaining the numerics 38002 library (including that pesky `<limits>' :-) and keeping 38003 up-to-date anything to do with numbers. 38004 38005 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 38006 ISO C99 support, CFG dumping support, etc., plus support of the 38007 C++ runtime libraries including for all kinds of C interface 38008 issues, contributing and maintaining `complex<>', sanity checking 38009 and disbursement, configuration architecture, libio maintenance, 38010 and early math work. 38011 38012 * Zdenek Dvorak for a new loop unroller and various fixes. 38013 38014 * Richard Earnshaw for his ongoing work with the ARM. 38015 38016 * David Edelsohn for his direction via the steering committee, 38017 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 38018 loop changes, doing the entire AIX port of libstdc++ with his bare 38019 hands, and for ensuring GCC properly keeps working on AIX. 38020 38021 * Kevin Ediger for the floating point formatting of num_put::do_put 38022 in libstdc++. 38023 38024 * Phil Edwards for libstdc++ work including configuration hackery, 38025 documentation maintainer, chief breaker of the web pages, the 38026 occasional iostream bug fix, and work on shared library symbol 38027 versioning. 38028 38029 * Paul Eggert for random hacking all over GCC. 38030 38031 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 38032 configuration support for locales and fstream-related fixes. 38033 38034 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 38035 iostreams. 38036 38037 * Christian Ehrhardt for dealing with bug reports. 38038 38039 * Ben Elliston for his work to move the Objective-C runtime into its 38040 own subdirectory and for his work on autoconf. 38041 38042 * Revital Eres for work on the PowerPC 750CL port. 38043 38044 * Marc Espie for OpenBSD support. 38045 38046 * Doug Evans for much of the global optimization framework, arc, 38047 m32r, and SPARC work. 38048 38049 * Christopher Faylor for his work on the Cygwin port and for caring 38050 and feeding the gcc.gnu.org box and saving its users tons of spam. 38051 38052 * Fred Fish for BeOS support and Ada fixes. 38053 38054 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 38055 38056 * Peter Gerwinski for various bug fixes and the Pascal front end. 38057 38058 * Kaveh R. Ghazi for his direction via the steering committee, 38059 amazing work to make `-W -Wall -W* -Werror' useful, and 38060 continuously testing GCC on a plethora of platforms. Kaveh 38061 extends his gratitude to the CAIP Center at Rutgers University for 38062 providing him with computing resources to work on Free Software 38063 since the late 1980s. 38064 38065 * John Gilmore for a donation to the FSF earmarked improving GNU 38066 Java. 38067 38068 * Judy Goldberg for c++ contributions. 38069 38070 * Torbjorn Granlund for various fixes and the c-torture testsuite, 38071 multiply- and divide-by-constant optimization, improved long long 38072 support, improved leaf function register allocation, and his 38073 direction via the steering committee. 38074 38075 * Anthony Green for his `-Os' contributions, the moxie port, and 38076 Java front end work. 38077 38078 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 38079 Java code. 38080 38081 * Michael K. Gschwind contributed the port to the PDP-11. 38082 38083 * Richard Guenther for his ongoing middle-end contributions and bug 38084 fixes and for release management. 38085 38086 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 38087 the support for Dwarf symbolic debugging information, and much of 38088 the support for System V Release 4. He has also worked heavily on 38089 the Intel 386 and 860 support. 38090 38091 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 38092 GCSE. 38093 38094 * Bruno Haible for improvements in the runtime overhead for EH, new 38095 warnings and assorted bug fixes. 38096 38097 * Andrew Haley for his amazing Java compiler and library efforts. 38098 38099 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 38100 series 300. 38101 38102 * Michael Hayes for various thankless work he's done trying to get 38103 the c30/c40 ports functional. Lots of loop and unroll 38104 improvements and fixes. 38105 38106 * Dara Hazeghi for wading through myriads of target-specific bug 38107 reports. 38108 38109 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 38110 38111 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 38112 work, loop opts, and generally fixing lots of old problems we've 38113 ignored for years, flow rewrite and lots of further stuff, 38114 including reviewing tons of patches. 38115 38116 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 38117 various fixes. 38118 38119 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 38120 contributed the support for the Sony NEWS machine. 38121 38122 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 38123 various fixes. 38124 38125 * Katherine Holcomb for work on GNU Fortran. 38126 38127 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 38128 of testing and bug fixing, particularly of GCC configury code. 38129 38130 * Steve Holmgren for MachTen patches. 38131 38132 * Jan Hubicka for his x86 port improvements. 38133 38134 * Falk Hueffner for working on C and optimization bug reports. 38135 38136 * Bernardo Innocenti for his m68k work, including merging of 38137 ColdFire improvements and uClinux support. 38138 38139 * Christian Iseli for various bug fixes. 38140 38141 * Kamil Iskra for general m68k hacking. 38142 38143 * Lee Iverson for random fixes and MIPS testing. 38144 38145 * Andreas Jaeger for testing and benchmarking of GCC and various bug 38146 fixes. 38147 38148 * Jakub Jelinek for his SPARC work and sibling call optimizations as 38149 well as lots of bug fixes and test cases, and for improving the 38150 Java build system. 38151 38152 * Janis Johnson for ia64 testing and fixes, her quality improvement 38153 sidetracks, and web page maintenance. 38154 38155 * Kean Johnston for SCO OpenServer support and various fixes. 38156 38157 * Tim Josling for the sample language treelang based originally on 38158 Richard Kenner's "toy" language. 38159 38160 * Nicolai Josuttis for additional libstdc++ documentation. 38161 38162 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 38163 target. 38164 38165 * Steven G. Kargl for work on GNU Fortran. 38166 38167 * David Kashtan of SRI adapted GCC to VMS. 38168 38169 * Ryszard Kabatek for many, many libstdc++ bug fixes and 38170 optimizations of strings, especially member functions, and for 38171 auto_ptr fixes. 38172 38173 * Geoffrey Keating for his ongoing work to make the PPC work for 38174 GNU/Linux and his automatic regression tester. 38175 38176 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 38177 work in just about every part of libstdc++. 38178 38179 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 38180 MIL-STD-1750A. 38181 38182 * Richard Kenner of the New York University Ultracomputer Research 38183 Laboratory wrote the machine descriptions for the AMD 29000, the 38184 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 38185 support for instruction attributes. He also made changes to 38186 better support RISC processors including changes to common 38187 subexpression elimination, strength reduction, function calling 38188 sequence handling, and condition code support, in addition to 38189 generalizing the code for frame pointer elimination and delay slot 38190 scheduling. Richard Kenner was also the head maintainer of GCC 38191 for several years. 38192 38193 * Mumit Khan for various contributions to the Cygwin and Mingw32 38194 ports and maintaining binary releases for Microsoft Windows hosts, 38195 and for massive libstdc++ porting work to Cygwin/Mingw32. 38196 38197 * Robin Kirkham for cpu32 support. 38198 38199 * Mark Klein for PA improvements. 38200 38201 * Thomas Koenig for various bug fixes. 38202 38203 * Bruce Korb for the new and improved fixincludes code. 38204 38205 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 38206 effort. 38207 38208 * Charles LaBrec contributed the support for the Integrated Solutions 38209 68020 system. 38210 38211 * Asher Langton and Mike Kumbera for contributing Cray pointer 38212 support to GNU Fortran, and for other GNU Fortran improvements. 38213 38214 * Jeff Law for his direction via the steering committee, 38215 coordinating the entire egcs project and GCC 2.95, rolling out 38216 snapshots and releases, handling merges from GCC2, reviewing tons 38217 of patches that might have fallen through the cracks else, and 38218 random but extensive hacking. 38219 38220 * Marc Lehmann for his direction via the steering committee and 38221 helping with analysis and improvements of x86 performance. 38222 38223 * Victor Leikehman for work on GNU Fortran. 38224 38225 * Ted Lemon wrote parts of the RTL reader and printer. 38226 38227 * Kriang Lerdsuwanakij for C++ improvements including template as 38228 template parameter support, and many C++ fixes. 38229 38230 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 38231 and random work on the Java front end. 38232 38233 * Alain Lichnewsky ported GCC to the MIPS CPU. 38234 38235 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 38236 and patches. 38237 38238 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 38239 38240 * Chen Liqin for various S+core related fixes/improvement, and for 38241 maintaining the S+core port. 38242 38243 * Weiwen Liu for testing and various bug fixes. 38244 38245 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 38246 diagnostics fixes and improvements. 38247 38248 * Dave Love for his ongoing work with the Fortran front end and 38249 runtime libraries. 38250 38251 * Martin von Lo"wis for internal consistency checking infrastructure, 38252 various C++ improvements including namespace support, and tons of 38253 assistance with libstdc++/compiler merges. 38254 38255 * H.J. Lu for his previous contributions to the steering committee, 38256 many x86 bug reports, prototype patches, and keeping the GNU/Linux 38257 ports working. 38258 38259 * Greg McGary for random fixes and (someday) bounded pointers. 38260 38261 * Andrew MacLeod for his ongoing work in building a real EH system, 38262 various code generation improvements, work on the global 38263 optimizer, etc. 38264 38265 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 38266 hacking improvements to compile-time performance, overall 38267 knowledge and direction in the area of instruction scheduling, and 38268 design and implementation of the automaton based instruction 38269 scheduler. 38270 38271 * Bob Manson for his behind the scenes work on dejagnu. 38272 38273 * Philip Martin for lots of libstdc++ string and vector iterator 38274 fixes and improvements, and string clean up and testsuites. 38275 38276 * All of the Mauve project contributors, for Java test code. 38277 38278 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 38279 38280 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 38281 38282 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 38283 powerpc, haifa, ECOFF debug support, and other assorted hacking. 38284 38285 * Jason Merrill for his direction via the steering committee and 38286 leading the G++ effort. 38287 38288 * Martin Michlmayr for testing GCC on several architectures using the 38289 entire Debian archive. 38290 38291 * David Miller for his direction via the steering committee, lots of 38292 SPARC work, improvements in jump.c and interfacing with the Linux 38293 kernel developers. 38294 38295 * Gary Miller ported GCC to Charles River Data Systems machines. 38296 38297 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 38298 the entire libstdc++ testsuite namespace-compatible. 38299 38300 * Mark Mitchell for his direction via the steering committee, 38301 mountains of C++ work, load/store hoisting out of loops, alias 38302 analysis improvements, ISO C `restrict' support, and serving as 38303 release manager for GCC 3.x. 38304 38305 * Alan Modra for various GNU/Linux bits and testing. 38306 38307 * Toon Moene for his direction via the steering committee, Fortran 38308 maintenance, and his ongoing work to make us make Fortran run fast. 38309 38310 * Jason Molenda for major help in the care and feeding of all the 38311 services on the gcc.gnu.org (formerly egcs.cygnus.com) 38312 machine--mail, web services, ftp services, etc etc. Doing all 38313 this work on scrap paper and the backs of envelopes would have 38314 been... difficult. 38315 38316 * Catherine Moore for fixing various ugly problems we have sent her 38317 way, including the haifa bug which was killing the Alpha & PowerPC 38318 Linux kernels. 38319 38320 * Mike Moreton for his various Java patches. 38321 38322 * David Mosberger-Tang for various Alpha improvements, and for the 38323 initial IA-64 port. 38324 38325 * Stephen Moshier contributed the floating point emulator that 38326 assists in cross-compilation and permits support for floating 38327 point numbers wider than 64 bits and for ISO C99 support. 38328 38329 * Bill Moyer for his behind the scenes work on various issues. 38330 38331 * Philippe De Muyter for his work on the m68k port. 38332 38333 * Joseph S. Myers for his work on the PDP-11 port, format checking 38334 and ISO C99 support, and continuous emphasis on (and contributions 38335 to) documentation. 38336 38337 * Nathan Myers for his work on libstdc++-v3: architecture and 38338 authorship through the first three snapshots, including 38339 implementation of locale infrastructure, string, shadow C headers, 38340 and the initial project documentation (DESIGN, CHECKLIST, and so 38341 forth). Later, more work on MT-safe string and shadow headers. 38342 38343 * Felix Natter for documentation on porting libstdc++. 38344 38345 * Nathanael Nerode for cleaning up the configuration/build process. 38346 38347 * NeXT, Inc. donated the front end that supports the Objective-C 38348 language. 38349 38350 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 38351 the search engine setup, various documentation fixes and other 38352 small fixes. 38353 38354 * Geoff Noer for his work on getting cygwin native builds working. 38355 38356 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 38357 tracking web pages, GIMPLE tuples, and assorted fixes. 38358 38359 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 38360 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 38361 related infrastructure improvements. 38362 38363 * Alexandre Oliva for various build infrastructure improvements, 38364 scripts and amazing testing work, including keeping libtool issues 38365 sane and happy. 38366 38367 * Stefan Olsson for work on mt_alloc. 38368 38369 * Melissa O'Neill for various NeXT fixes. 38370 38371 * Rainer Orth for random MIPS work, including improvements to GCC's 38372 o32 ABI support, improvements to dejagnu's MIPS support, Java 38373 configuration clean-ups and porting work, and maintaining the 38374 IRIX, Solaris 2, and Tru64 UNIX ports. 38375 38376 * Hartmut Penner for work on the s390 port. 38377 38378 * Paul Petersen wrote the machine description for the Alliant FX/8. 38379 38380 * Alexandre Petit-Bianco for implementing much of the Java compiler 38381 and continued Java maintainership. 38382 38383 * Matthias Pfaller for major improvements to the NS32k port. 38384 38385 * Gerald Pfeifer for his direction via the steering committee, 38386 pointing out lots of problems we need to solve, maintenance of the 38387 web pages, and taking care of documentation maintenance in general. 38388 38389 * Andrew Pinski for processing bug reports by the dozen. 38390 38391 * Ovidiu Predescu for his work on the Objective-C front end and 38392 runtime libraries. 38393 38394 * Jerry Quinn for major performance improvements in C++ formatted 38395 I/O. 38396 38397 * Ken Raeburn for various improvements to checker, MIPS ports and 38398 various cleanups in the compiler. 38399 38400 * Rolf W. Rasmussen for hacking on AWT. 38401 38402 * David Reese of Sun Microsystems contributed to the Solaris on 38403 PowerPC port. 38404 38405 * Volker Reichelt for keeping up with the problem reports. 38406 38407 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 38408 hacking. 38409 38410 * Loren J. Rittle for improvements to libstdc++-v3 including the 38411 FreeBSD port, threading fixes, thread-related configury changes, 38412 critical threading documentation, and solutions to really tricky 38413 I/O problems, as well as keeping GCC properly working on FreeBSD 38414 and continuous testing. 38415 38416 * Craig Rodrigues for processing tons of bug reports. 38417 38418 * Ola Ro"nnerup for work on mt_alloc. 38419 38420 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 38421 38422 * David Ronis inspired and encouraged Craig to rewrite the G77 38423 documentation in texinfo format by contributing a first pass at a 38424 translation of the old `g77-0.5.16/f/DOC' file. 38425 38426 * Ken Rose for fixes to GCC's delay slot filling code. 38427 38428 * Paul Rubin wrote most of the preprocessor. 38429 38430 * Pe'tur Runo'lfsson for major performance improvements in C++ 38431 formatted I/O and large file support in C++ filebuf. 38432 38433 * Chip Salzenberg for libstdc++ patches and improvements to locales, 38434 traits, Makefiles, libio, libtool hackery, and "long long" support. 38435 38436 * Juha Sarlin for improvements to the H8 code generator. 38437 38438 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 38439 300. 38440 38441 * Roger Sayle for improvements to constant folding and GCC's RTL 38442 optimizers as well as for fixing numerous bugs. 38443 38444 * Bradley Schatz for his work on the GCJ FAQ. 38445 38446 * Peter Schauer wrote the code to allow debugging to work on the 38447 Alpha. 38448 38449 * William Schelter did most of the work on the Intel 80386 support. 38450 38451 * Tobias Schlu"ter for work on GNU Fortran. 38452 38453 * Bernd Schmidt for various code generation improvements and major 38454 work in the reload pass as well a serving as release manager for 38455 GCC 2.95.3. 38456 38457 * Peter Schmid for constant testing of libstdc++--especially 38458 application testing, going above and beyond what was requested for 38459 the release criteria--and libstdc++ header file tweaks. 38460 38461 * Jason Schroeder for jcf-dump patches. 38462 38463 * Andreas Schwab for his work on the m68k port. 38464 38465 * Lars Segerlund for work on GNU Fortran. 38466 38467 * Joel Sherrill for his direction via the steering committee, RTEMS 38468 contributions and RTEMS testing. 38469 38470 * Nathan Sidwell for many C++ fixes/improvements. 38471 38472 * Jeffrey Siegal for helping RMS with the original design of GCC, 38473 some code which handles the parse tree and RTL data structures, 38474 constant folding and help with the original VAX & m68k ports. 38475 38476 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 38477 from the LWG (thereby keeping GCC in line with updates from the 38478 ISO). 38479 38480 * Franz Sirl for his ongoing work with making the PPC port stable 38481 for GNU/Linux. 38482 38483 * Andrey Slepuhin for assorted AIX hacking. 38484 38485 * Trevor Smigiel for contributing the SPU port. 38486 38487 * Christopher Smith did the port for Convex machines. 38488 38489 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 38490 38491 * Randy Smith finished the Sun FPA support. 38492 38493 * Scott Snyder for queue, iterator, istream, and string fixes and 38494 libstdc++ testsuite entries. Also for providing the patch to G77 38495 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 38496 `LOGICAL*1'. 38497 38498 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 38499 38500 * Richard Stallman, for writing the original GCC and launching the 38501 GNU project. 38502 38503 * Jan Stein of the Chalmers Computer Society provided support for 38504 Genix, as well as part of the 32000 machine description. 38505 38506 * Nigel Stephens for various mips16 related fixes/improvements. 38507 38508 * Jonathan Stone wrote the machine description for the Pyramid 38509 computer. 38510 38511 * Graham Stott for various infrastructure improvements. 38512 38513 * John Stracke for his Java HTTP protocol fixes. 38514 38515 * Mike Stump for his Elxsi port, G++ contributions over the years 38516 and more recently his vxworks contributions 38517 38518 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 38519 38520 * Shigeya Suzuki for this fixes for the bsdi platforms. 38521 38522 * Ian Lance Taylor for his mips16 work, general configury hacking, 38523 fixincludes, etc. 38524 38525 * Holger Teutsch provided the support for the Clipper CPU. 38526 38527 * Gary Thomas for his ongoing work to make the PPC work for 38528 GNU/Linux. 38529 38530 * Philipp Thomas for random bug fixes throughout the compiler 38531 38532 * Jason Thorpe for thread support in libstdc++ on NetBSD. 38533 38534 * Kresten Krab Thorup wrote the run time support for the Objective-C 38535 language and the fantastic Java bytecode interpreter. 38536 38537 * Michael Tiemann for random bug fixes, the first instruction 38538 scheduler, initial C++ support, function integration, NS32k, SPARC 38539 and M88k machine description work, delay slot scheduling. 38540 38541 * Andreas Tobler for his work porting libgcj to Darwin. 38542 38543 * Teemu Torma for thread safe exception handling support. 38544 38545 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 38546 definitions, and of the VAX machine description. 38547 38548 * Daniel Towner and Hariharan Sandanagobalane contributed and 38549 maintain the picoChip port. 38550 38551 * Tom Tromey for internationalization support and for his many Java 38552 contributions and libgcj maintainership. 38553 38554 * Lassi Tuura for improvements to config.guess to determine HP 38555 processor types. 38556 38557 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 38558 38559 * Andy Vaught for the design and initial implementation of the GNU 38560 Fortran front end. 38561 38562 * Brent Verner for work with the libstdc++ cshadow files and their 38563 associated configure steps. 38564 38565 * Todd Vierling for contributions for NetBSD ports. 38566 38567 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 38568 guidance. 38569 38570 * Dean Wakerley for converting the install documentation from HTML 38571 to texinfo in time for GCC 3.0. 38572 38573 * Krister Walfridsson for random bug fixes. 38574 38575 * Feng Wang for contributions to GNU Fortran. 38576 38577 * Stephen M. Webb for time and effort on making libstdc++ shadow 38578 files work with the tricky Solaris 8+ headers, and for pushing the 38579 build-time header tree. 38580 38581 * John Wehle for various improvements for the x86 code generator, 38582 related infrastructure improvements to help x86 code generation, 38583 value range propagation and other work, WE32k port. 38584 38585 * Ulrich Weigand for work on the s390 port. 38586 38587 * Zack Weinberg for major work on cpplib and various other bug fixes. 38588 38589 * Matt Welsh for help with Linux Threads support in GCJ. 38590 38591 * Urban Widmark for help fixing java.io. 38592 38593 * Mark Wielaard for new Java library code and his work integrating 38594 with Classpath. 38595 38596 * Dale Wiles helped port GCC to the Tahoe. 38597 38598 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 38599 38600 * Jim Wilson for his direction via the steering committee, tackling 38601 hard problems in various places that nobody else wanted to work 38602 on, strength reduction and other loop optimizations. 38603 38604 * Paul Woegerer and Tal Agmon for the CRX port. 38605 38606 * Carlo Wood for various fixes. 38607 38608 * Tom Wood for work on the m88k port. 38609 38610 * Canqun Yang for work on GNU Fortran. 38611 38612 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 38613 description for the Tron architecture (specifically, the Gmicro). 38614 38615 * Kevin Zachmann helped port GCC to the Tahoe. 38616 38617 * Ayal Zaks for Swing Modulo Scheduling (SMS). 38618 38619 * Xiaoqiang Zhang for work on GNU Fortran. 38620 38621 * Gilles Zunino for help porting Java to Irix. 38622 38623 38624 The following people are recognized for their contributions to GNAT, 38625the Ada front end of GCC: 38626 * Bernard Banner 38627 38628 * Romain Berrendonner 38629 38630 * Geert Bosch 38631 38632 * Emmanuel Briot 38633 38634 * Joel Brobecker 38635 38636 * Ben Brosgol 38637 38638 * Vincent Celier 38639 38640 * Arnaud Charlet 38641 38642 * Chien Chieng 38643 38644 * Cyrille Comar 38645 38646 * Cyrille Crozes 38647 38648 * Robert Dewar 38649 38650 * Gary Dismukes 38651 38652 * Robert Duff 38653 38654 * Ed Falis 38655 38656 * Ramon Fernandez 38657 38658 * Sam Figueroa 38659 38660 * Vasiliy Fofanov 38661 38662 * Michael Friess 38663 38664 * Franco Gasperoni 38665 38666 * Ted Giering 38667 38668 * Matthew Gingell 38669 38670 * Laurent Guerby 38671 38672 * Jerome Guitton 38673 38674 * Olivier Hainque 38675 38676 * Jerome Hugues 38677 38678 * Hristian Kirtchev 38679 38680 * Jerome Lambourg 38681 38682 * Bruno Leclerc 38683 38684 * Albert Lee 38685 38686 * Sean McNeil 38687 38688 * Javier Miranda 38689 38690 * Laurent Nana 38691 38692 * Pascal Obry 38693 38694 * Dong-Ik Oh 38695 38696 * Laurent Pautet 38697 38698 * Brett Porter 38699 38700 * Thomas Quinot 38701 38702 * Nicolas Roche 38703 38704 * Pat Rogers 38705 38706 * Jose Ruiz 38707 38708 * Douglas Rupp 38709 38710 * Sergey Rybin 38711 38712 * Gail Schenker 38713 38714 * Ed Schonberg 38715 38716 * Nicolas Setton 38717 38718 * Samuel Tardieu 38719 38720 38721 The following people are recognized for their contributions of new 38722features, bug reports, testing and integration of classpath/libgcj for 38723GCC version 4.1: 38724 * Lillian Angel for `JTree' implementation and lots Free Swing 38725 additions and bug fixes. 38726 38727 * Wolfgang Baer for `GapContent' bug fixes. 38728 38729 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 38730 event fixes, lots of Free Swing work including `JTable' editing. 38731 38732 * Stuart Ballard for RMI constant fixes. 38733 38734 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 38735 38736 * Gary Benson for `MessageFormat' fixes. 38737 38738 * Daniel Bonniot for `Serialization' fixes. 38739 38740 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 38741 and `DOM xml:id' support. 38742 38743 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 38744 38745 * Archie Cobbs for build fixes, VM interface updates, 38746 `URLClassLoader' updates. 38747 38748 * Kelley Cook for build fixes. 38749 38750 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 38751 38752 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 38753 and improvements. 38754 38755 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 38756 2D support. Lots of imageio framework additions, lots of AWT and 38757 Free Swing bug fixes. 38758 38759 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 38760 fixes, better `Proxy' support, bug fixes and IKVM integration. 38761 38762 * Santiago Gala for `AccessControlContext' fixes. 38763 38764 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 38765 improvements. 38766 38767 * David Gilbert for `basic' and `metal' icon and plaf support and 38768 lots of documenting, Lots of Free Swing and metal theme additions. 38769 `MetalIconFactory' implementation. 38770 38771 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 38772 38773 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 38774 build speedups. 38775 38776 * Kim Ho for `JFileChooser' implementation. 38777 38778 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 38779 updates, `Serialization' fixes, `Properties' XML support and 38780 generic branch work, VMIntegration guide update. 38781 38782 * Bastiaan Huisman for `TimeZone' bug fixing. 38783 38784 * Andreas Jaeger for mprec updates. 38785 38786 * Paul Jenner for better `-Werror' support. 38787 38788 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 38789 38790 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 38791 bug fixes all over. Lots of Free Swing work including styled text. 38792 38793 * Simon Kitching for `String' cleanups and optimization suggestions. 38794 38795 * Michael Koch for configuration fixes, `Locale' updates, bug and 38796 build fixes. 38797 38798 * Guilhem Lavaux for configuration, thread and channel fixes and 38799 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 38800 38801 * David Lichteblau for JCL support library global/local reference 38802 cleanups. 38803 38804 * Aaron Luchko for JDWP updates and documentation fixes. 38805 38806 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 38807 features. 38808 38809 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 38810 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 38811 and implementing the Qt4 peers. 38812 38813 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 38814 `SystemLogger' and `FileHandler' rotate implementations, NIO 38815 `FileChannel.map' support, security and policy updates. 38816 38817 * Bryce McKinlay for RMI work. 38818 38819 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 38820 testing and documenting. 38821 38822 * Kalle Olavi Niemitalo for build fixes. 38823 38824 * Rainer Orth for build fixes. 38825 38826 * Andrew Overholt for `File' locking fixes. 38827 38828 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 38829 38830 * Olga Rodimina for `MenuSelectionManager' implementation. 38831 38832 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 38833 38834 * Julian Scheid for documentation updates and gjdoc support. 38835 38836 * Christian Schlichtherle for zip fixes and cleanups. 38837 38838 * Robert Schuster for documentation updates and beans fixes, 38839 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 38840 and URL, AWT and Free Swing bug fixes. 38841 38842 * Keith Seitz for lots of JDWP work. 38843 38844 * Christian Thalinger for 64-bit cleanups, Configuration and VM 38845 interface fixes and `CACAO' integration, `fdlibm' updates. 38846 38847 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 38848 38849 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 38850 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 38851 38852 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 38853 integration. `Qt4' build infrastructure, `SHA1PRNG' and 38854 `GdkPixbugDecoder' updates. 38855 38856 * Tom Tromey for Eclipse integration, generics work, lots of bug 38857 fixes and gcj integration including coordinating The Big Merge. 38858 38859 * Mark Wielaard for bug fixes, packaging and release management, 38860 `Clipboard' implementation, system call interrupts and network 38861 timeouts and `GdkPixpufDecoder' fixes. 38862 38863 38864 In addition to the above, all of which also contributed time and 38865energy in testing GCC, we would like to thank the following for their 38866contributions to testing: 38867 38868 * Michael Abd-El-Malek 38869 38870 * Thomas Arend 38871 38872 * Bonzo Armstrong 38873 38874 * Steven Ashe 38875 38876 * Chris Baldwin 38877 38878 * David Billinghurst 38879 38880 * Jim Blandy 38881 38882 * Stephane Bortzmeyer 38883 38884 * Horst von Brand 38885 38886 * Frank Braun 38887 38888 * Rodney Brown 38889 38890 * Sidney Cadot 38891 38892 * Bradford Castalia 38893 38894 * Robert Clark 38895 38896 * Jonathan Corbet 38897 38898 * Ralph Doncaster 38899 38900 * Richard Emberson 38901 38902 * Levente Farkas 38903 38904 * Graham Fawcett 38905 38906 * Mark Fernyhough 38907 38908 * Robert A. French 38909 38910 * Jo"rgen Freyh 38911 38912 * Mark K. Gardner 38913 38914 * Charles-Antoine Gauthier 38915 38916 * Yung Shing Gene 38917 38918 * David Gilbert 38919 38920 * Simon Gornall 38921 38922 * Fred Gray 38923 38924 * John Griffin 38925 38926 * Patrik Hagglund 38927 38928 * Phil Hargett 38929 38930 * Amancio Hasty 38931 38932 * Takafumi Hayashi 38933 38934 * Bryan W. Headley 38935 38936 * Kevin B. Hendricks 38937 38938 * Joep Jansen 38939 38940 * Christian Joensson 38941 38942 * Michel Kern 38943 38944 * David Kidd 38945 38946 * Tobias Kuipers 38947 38948 * Anand Krishnaswamy 38949 38950 * A. O. V. Le Blanc 38951 38952 * llewelly 38953 38954 * Damon Love 38955 38956 * Brad Lucier 38957 38958 * Matthias Klose 38959 38960 * Martin Knoblauch 38961 38962 * Rick Lutowski 38963 38964 * Jesse Macnish 38965 38966 * Stefan Morrell 38967 38968 * Anon A. Mous 38969 38970 * Matthias Mueller 38971 38972 * Pekka Nikander 38973 38974 * Rick Niles 38975 38976 * Jon Olson 38977 38978 * Magnus Persson 38979 38980 * Chris Pollard 38981 38982 * Richard Polton 38983 38984 * Derk Reefman 38985 38986 * David Rees 38987 38988 * Paul Reilly 38989 38990 * Tom Reilly 38991 38992 * Torsten Rueger 38993 38994 * Danny Sadinoff 38995 38996 * Marc Schifer 38997 38998 * Erik Schnetter 38999 39000 * Wayne K. Schroll 39001 39002 * David Schuler 39003 39004 * Vin Shelton 39005 39006 * Tim Souder 39007 39008 * Adam Sulmicki 39009 39010 * Bill Thorson 39011 39012 * George Talbot 39013 39014 * Pedro A. M. Vazquez 39015 39016 * Gregory Warnes 39017 39018 * Ian Watson 39019 39020 * David E. Young 39021 39022 * And many others 39023 39024 And finally we'd like to thank everyone who uses the compiler, provides 39025feedback and generally reminds us why we're doing this work in the first 39026place. 39027 39028 39029File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 39030 39031Option Index 39032************ 39033 39034GCC's command line options are indexed here without any initial `-' or 39035`--'. Where an option has both positive and negative forms (such as 39036`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 39037indexed under the most appropriate form; it may sometimes be useful to 39038look up both forms. 39039 39040[index] 39041* Menu: 39042 39043* msoft-float: Soft float library routines. 39044 (line 6) 39045 39046 39047File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 39048 39049Concept Index 39050************* 39051 39052[index] 39053* Menu: 39054 39055* ! in constraint: Multi-Alternative. (line 47) 39056* # in constraint: Modifiers. (line 67) 39057* # in template: Output Template. (line 66) 39058* #pragma: Misc. (line 381) 39059* % in constraint: Modifiers. (line 45) 39060* % in GTY option: GTY Options. (line 18) 39061* % in template: Output Template. (line 6) 39062* & in constraint: Modifiers. (line 25) 39063* ( <1>: GIMPLE_CALL. (line 63) 39064* ( <2>: GIMPLE_ASM. (line 21) 39065* (: Logical Operators. (line 107) 39066* (nil): RTL Objects. (line 73) 39067* *: Host Common. (line 17) 39068* * in constraint: Modifiers. (line 72) 39069* * in template: Output Statement. (line 29) 39070* *gimple_assign_lhs_ptr: GIMPLE_ASSIGN. (line 54) 39071* *gimple_assign_rhs1_ptr: GIMPLE_ASSIGN. (line 60) 39072* *gimple_assign_rhs2_ptr: GIMPLE_ASSIGN. (line 67) 39073* *gimple_call_arg_ptr: GIMPLE_CALL. (line 71) 39074* *gimple_call_lhs_ptr: GIMPLE_CALL. (line 32) 39075* *gimple_catch_types_ptr: GIMPLE_CATCH. (line 16) 39076* *gimple_debug_bind_get_value_ptr: GIMPLE_DEBUG. (line 52) 39077* *gimple_eh_filter_types_ptr: GIMPLE_EH_FILTER. (line 15) 39078* *gimple_omp_critical_name_ptr: GIMPLE_OMP_CRITICAL. 39079 (line 16) 39080* *gimple_omp_for_clauses_ptr: GIMPLE_OMP_FOR. (line 23) 39081* *gimple_omp_for_final_ptr: GIMPLE_OMP_FOR. (line 54) 39082* *gimple_omp_for_incr_ptr: GIMPLE_OMP_FOR. (line 64) 39083* *gimple_omp_for_index_ptr: GIMPLE_OMP_FOR. (line 34) 39084* *gimple_omp_for_initial_ptr: GIMPLE_OMP_FOR. (line 44) 39085* *gimple_omp_parallel_child_fn_ptr: GIMPLE_OMP_PARALLEL. 39086 (line 46) 39087* *gimple_omp_parallel_clauses_ptr: GIMPLE_OMP_PARALLEL. 39088 (line 34) 39089* *gimple_omp_parallel_data_arg_ptr: GIMPLE_OMP_PARALLEL. 39090 (line 58) 39091* *gimple_omp_sections_clauses_ptr: GIMPLE_OMP_SECTIONS. 39092 (line 33) 39093* *gimple_omp_sections_control_ptr: GIMPLE_OMP_SECTIONS. 39094 (line 21) 39095* *gimple_omp_single_clauses_ptr: GIMPLE_OMP_SINGLE. (line 17) 39096* *gimple_op_ptr: Manipulating GIMPLE statements. 39097 (line 84) 39098* *gimple_ops <1>: Manipulating GIMPLE statements. 39099 (line 78) 39100* *gimple_ops: Logical Operators. (line 82) 39101* *gimple_phi_result_ptr: GIMPLE_PHI. (line 22) 39102* *gsi_stmt_ptr: Sequence iterators. (line 80) 39103* + in constraint: Modifiers. (line 12) 39104* -fsection-anchors <1>: Anchored Addresses. (line 6) 39105* -fsection-anchors: Special Accessors. (line 110) 39106* /c in RTL dump: Flags. (line 239) 39107* /f in RTL dump: Flags. (line 247) 39108* /i in RTL dump: Flags. (line 299) 39109* /j in RTL dump: Flags. (line 314) 39110* /s in RTL dump: Flags. (line 263) 39111* /u in RTL dump: Flags. (line 324) 39112* /v in RTL dump: Flags. (line 356) 39113* 0 in constraint: Simple Constraints. (line 120) 39114* < in constraint: Simple Constraints. (line 48) 39115* = in constraint: Modifiers. (line 8) 39116* > in constraint: Simple Constraints. (line 52) 39117* ? in constraint: Multi-Alternative. (line 41) 39118* \: Output Template. (line 46) 39119* __absvdi2: Integer library routines. 39120 (line 107) 39121* __absvsi2: Integer library routines. 39122 (line 106) 39123* __addda3: Fixed-point fractional library routines. 39124 (line 45) 39125* __adddf3: Soft float library routines. 39126 (line 23) 39127* __adddq3: Fixed-point fractional library routines. 39128 (line 33) 39129* __addha3: Fixed-point fractional library routines. 39130 (line 43) 39131* __addhq3: Fixed-point fractional library routines. 39132 (line 30) 39133* __addqq3: Fixed-point fractional library routines. 39134 (line 29) 39135* __addsa3: Fixed-point fractional library routines. 39136 (line 44) 39137* __addsf3: Soft float library routines. 39138 (line 22) 39139* __addsq3: Fixed-point fractional library routines. 39140 (line 31) 39141* __addta3: Fixed-point fractional library routines. 39142 (line 47) 39143* __addtf3: Soft float library routines. 39144 (line 25) 39145* __adduda3: Fixed-point fractional library routines. 39146 (line 53) 39147* __addudq3: Fixed-point fractional library routines. 39148 (line 41) 39149* __adduha3: Fixed-point fractional library routines. 39150 (line 49) 39151* __adduhq3: Fixed-point fractional library routines. 39152 (line 37) 39153* __adduqq3: Fixed-point fractional library routines. 39154 (line 35) 39155* __addusa3: Fixed-point fractional library routines. 39156 (line 51) 39157* __addusq3: Fixed-point fractional library routines. 39158 (line 39) 39159* __adduta3: Fixed-point fractional library routines. 39160 (line 55) 39161* __addvdi3: Integer library routines. 39162 (line 111) 39163* __addvsi3: Integer library routines. 39164 (line 110) 39165* __addxf3: Soft float library routines. 39166 (line 27) 39167* __ashlda3: Fixed-point fractional library routines. 39168 (line 351) 39169* __ashldi3: Integer library routines. 39170 (line 14) 39171* __ashldq3: Fixed-point fractional library routines. 39172 (line 340) 39173* __ashlha3: Fixed-point fractional library routines. 39174 (line 349) 39175* __ashlhq3: Fixed-point fractional library routines. 39176 (line 337) 39177* __ashlqq3: Fixed-point fractional library routines. 39178 (line 336) 39179* __ashlsa3: Fixed-point fractional library routines. 39180 (line 350) 39181* __ashlsi3: Integer library routines. 39182 (line 13) 39183* __ashlsq3: Fixed-point fractional library routines. 39184 (line 338) 39185* __ashlta3: Fixed-point fractional library routines. 39186 (line 353) 39187* __ashlti3: Integer library routines. 39188 (line 15) 39189* __ashluda3: Fixed-point fractional library routines. 39190 (line 359) 39191* __ashludq3: Fixed-point fractional library routines. 39192 (line 348) 39193* __ashluha3: Fixed-point fractional library routines. 39194 (line 355) 39195* __ashluhq3: Fixed-point fractional library routines. 39196 (line 344) 39197* __ashluqq3: Fixed-point fractional library routines. 39198 (line 342) 39199* __ashlusa3: Fixed-point fractional library routines. 39200 (line 357) 39201* __ashlusq3: Fixed-point fractional library routines. 39202 (line 346) 39203* __ashluta3: Fixed-point fractional library routines. 39204 (line 361) 39205* __ashrda3: Fixed-point fractional library routines. 39206 (line 371) 39207* __ashrdi3: Integer library routines. 39208 (line 19) 39209* __ashrdq3: Fixed-point fractional library routines. 39210 (line 368) 39211* __ashrha3: Fixed-point fractional library routines. 39212 (line 369) 39213* __ashrhq3: Fixed-point fractional library routines. 39214 (line 365) 39215* __ashrqq3: Fixed-point fractional library routines. 39216 (line 364) 39217* __ashrsa3: Fixed-point fractional library routines. 39218 (line 370) 39219* __ashrsi3: Integer library routines. 39220 (line 18) 39221* __ashrsq3: Fixed-point fractional library routines. 39222 (line 366) 39223* __ashrta3: Fixed-point fractional library routines. 39224 (line 373) 39225* __ashrti3: Integer library routines. 39226 (line 20) 39227* __bid_adddd3: Decimal float library routines. 39228 (line 25) 39229* __bid_addsd3: Decimal float library routines. 39230 (line 21) 39231* __bid_addtd3: Decimal float library routines. 39232 (line 29) 39233* __bid_divdd3: Decimal float library routines. 39234 (line 68) 39235* __bid_divsd3: Decimal float library routines. 39236 (line 64) 39237* __bid_divtd3: Decimal float library routines. 39238 (line 72) 39239* __bid_eqdd2: Decimal float library routines. 39240 (line 259) 39241* __bid_eqsd2: Decimal float library routines. 39242 (line 257) 39243* __bid_eqtd2: Decimal float library routines. 39244 (line 261) 39245* __bid_extendddtd2: Decimal float library routines. 39246 (line 92) 39247* __bid_extendddtf: Decimal float library routines. 39248 (line 140) 39249* __bid_extendddxf: Decimal float library routines. 39250 (line 134) 39251* __bid_extenddfdd: Decimal float library routines. 39252 (line 147) 39253* __bid_extenddftd: Decimal float library routines. 39254 (line 107) 39255* __bid_extendsddd2: Decimal float library routines. 39256 (line 88) 39257* __bid_extendsddf: Decimal float library routines. 39258 (line 128) 39259* __bid_extendsdtd2: Decimal float library routines. 39260 (line 90) 39261* __bid_extendsdtf: Decimal float library routines. 39262 (line 138) 39263* __bid_extendsdxf: Decimal float library routines. 39264 (line 132) 39265* __bid_extendsfdd: Decimal float library routines. 39266 (line 103) 39267* __bid_extendsfsd: Decimal float library routines. 39268 (line 145) 39269* __bid_extendsftd: Decimal float library routines. 39270 (line 105) 39271* __bid_extendtftd: Decimal float library routines. 39272 (line 149) 39273* __bid_extendxftd: Decimal float library routines. 39274 (line 109) 39275* __bid_fixdddi: Decimal float library routines. 39276 (line 170) 39277* __bid_fixddsi: Decimal float library routines. 39278 (line 162) 39279* __bid_fixsddi: Decimal float library routines. 39280 (line 168) 39281* __bid_fixsdsi: Decimal float library routines. 39282 (line 160) 39283* __bid_fixtddi: Decimal float library routines. 39284 (line 172) 39285* __bid_fixtdsi: Decimal float library routines. 39286 (line 164) 39287* __bid_fixunsdddi: Decimal float library routines. 39288 (line 187) 39289* __bid_fixunsddsi: Decimal float library routines. 39290 (line 178) 39291* __bid_fixunssddi: Decimal float library routines. 39292 (line 185) 39293* __bid_fixunssdsi: Decimal float library routines. 39294 (line 176) 39295* __bid_fixunstddi: Decimal float library routines. 39296 (line 189) 39297* __bid_fixunstdsi: Decimal float library routines. 39298 (line 180) 39299* __bid_floatdidd: Decimal float library routines. 39300 (line 205) 39301* __bid_floatdisd: Decimal float library routines. 39302 (line 203) 39303* __bid_floatditd: Decimal float library routines. 39304 (line 207) 39305* __bid_floatsidd: Decimal float library routines. 39306 (line 196) 39307* __bid_floatsisd: Decimal float library routines. 39308 (line 194) 39309* __bid_floatsitd: Decimal float library routines. 39310 (line 198) 39311* __bid_floatunsdidd: Decimal float library routines. 39312 (line 223) 39313* __bid_floatunsdisd: Decimal float library routines. 39314 (line 221) 39315* __bid_floatunsditd: Decimal float library routines. 39316 (line 225) 39317* __bid_floatunssidd: Decimal float library routines. 39318 (line 214) 39319* __bid_floatunssisd: Decimal float library routines. 39320 (line 212) 39321* __bid_floatunssitd: Decimal float library routines. 39322 (line 216) 39323* __bid_gedd2: Decimal float library routines. 39324 (line 277) 39325* __bid_gesd2: Decimal float library routines. 39326 (line 275) 39327* __bid_getd2: Decimal float library routines. 39328 (line 279) 39329* __bid_gtdd2: Decimal float library routines. 39330 (line 304) 39331* __bid_gtsd2: Decimal float library routines. 39332 (line 302) 39333* __bid_gttd2: Decimal float library routines. 39334 (line 306) 39335* __bid_ledd2: Decimal float library routines. 39336 (line 295) 39337* __bid_lesd2: Decimal float library routines. 39338 (line 293) 39339* __bid_letd2: Decimal float library routines. 39340 (line 297) 39341* __bid_ltdd2: Decimal float library routines. 39342 (line 286) 39343* __bid_ltsd2: Decimal float library routines. 39344 (line 284) 39345* __bid_lttd2: Decimal float library routines. 39346 (line 288) 39347* __bid_muldd3: Decimal float library routines. 39348 (line 54) 39349* __bid_mulsd3: Decimal float library routines. 39350 (line 50) 39351* __bid_multd3: Decimal float library routines. 39352 (line 58) 39353* __bid_nedd2: Decimal float library routines. 39354 (line 268) 39355* __bid_negdd2: Decimal float library routines. 39356 (line 78) 39357* __bid_negsd2: Decimal float library routines. 39358 (line 76) 39359* __bid_negtd2: Decimal float library routines. 39360 (line 80) 39361* __bid_nesd2: Decimal float library routines. 39362 (line 266) 39363* __bid_netd2: Decimal float library routines. 39364 (line 270) 39365* __bid_subdd3: Decimal float library routines. 39366 (line 39) 39367* __bid_subsd3: Decimal float library routines. 39368 (line 35) 39369* __bid_subtd3: Decimal float library routines. 39370 (line 43) 39371* __bid_truncdddf: Decimal float library routines. 39372 (line 153) 39373* __bid_truncddsd2: Decimal float library routines. 39374 (line 94) 39375* __bid_truncddsf: Decimal float library routines. 39376 (line 124) 39377* __bid_truncdfsd: Decimal float library routines. 39378 (line 111) 39379* __bid_truncsdsf: Decimal float library routines. 39380 (line 151) 39381* __bid_trunctddd2: Decimal float library routines. 39382 (line 98) 39383* __bid_trunctddf: Decimal float library routines. 39384 (line 130) 39385* __bid_trunctdsd2: Decimal float library routines. 39386 (line 96) 39387* __bid_trunctdsf: Decimal float library routines. 39388 (line 126) 39389* __bid_trunctdtf: Decimal float library routines. 39390 (line 155) 39391* __bid_trunctdxf: Decimal float library routines. 39392 (line 136) 39393* __bid_trunctfdd: Decimal float library routines. 39394 (line 119) 39395* __bid_trunctfsd: Decimal float library routines. 39396 (line 115) 39397* __bid_truncxfdd: Decimal float library routines. 39398 (line 117) 39399* __bid_truncxfsd: Decimal float library routines. 39400 (line 113) 39401* __bid_unorddd2: Decimal float library routines. 39402 (line 235) 39403* __bid_unordsd2: Decimal float library routines. 39404 (line 233) 39405* __bid_unordtd2: Decimal float library routines. 39406 (line 237) 39407* __bswapdi2: Integer library routines. 39408 (line 162) 39409* __bswapsi2: Integer library routines. 39410 (line 161) 39411* __builtin_args_info: Varargs. (line 42) 39412* __builtin_classify_type: Varargs. (line 76) 39413* __builtin_next_arg: Varargs. (line 66) 39414* __builtin_saveregs: Varargs. (line 24) 39415* __clear_cache: Miscellaneous routines. 39416 (line 10) 39417* __clzdi2: Integer library routines. 39418 (line 131) 39419* __clzsi2: Integer library routines. 39420 (line 130) 39421* __clzti2: Integer library routines. 39422 (line 132) 39423* __cmpda2: Fixed-point fractional library routines. 39424 (line 451) 39425* __cmpdf2: Soft float library routines. 39426 (line 164) 39427* __cmpdi2: Integer library routines. 39428 (line 87) 39429* __cmpdq2: Fixed-point fractional library routines. 39430 (line 441) 39431* __cmpha2: Fixed-point fractional library routines. 39432 (line 449) 39433* __cmphq2: Fixed-point fractional library routines. 39434 (line 438) 39435* __cmpqq2: Fixed-point fractional library routines. 39436 (line 437) 39437* __cmpsa2: Fixed-point fractional library routines. 39438 (line 450) 39439* __cmpsf2: Soft float library routines. 39440 (line 163) 39441* __cmpsq2: Fixed-point fractional library routines. 39442 (line 439) 39443* __cmpta2: Fixed-point fractional library routines. 39444 (line 453) 39445* __cmptf2: Soft float library routines. 39446 (line 165) 39447* __cmpti2: Integer library routines. 39448 (line 88) 39449* __cmpuda2: Fixed-point fractional library routines. 39450 (line 458) 39451* __cmpudq2: Fixed-point fractional library routines. 39452 (line 448) 39453* __cmpuha2: Fixed-point fractional library routines. 39454 (line 455) 39455* __cmpuhq2: Fixed-point fractional library routines. 39456 (line 444) 39457* __cmpuqq2: Fixed-point fractional library routines. 39458 (line 443) 39459* __cmpusa2: Fixed-point fractional library routines. 39460 (line 456) 39461* __cmpusq2: Fixed-point fractional library routines. 39462 (line 446) 39463* __cmputa2: Fixed-point fractional library routines. 39464 (line 460) 39465* __CTOR_LIST__: Initialization. (line 25) 39466* __ctzdi2: Integer library routines. 39467 (line 138) 39468* __ctzsi2: Integer library routines. 39469 (line 137) 39470* __ctzti2: Integer library routines. 39471 (line 139) 39472* __divda3: Fixed-point fractional library routines. 39473 (line 227) 39474* __divdc3: Soft float library routines. 39475 (line 252) 39476* __divdf3: Soft float library routines. 39477 (line 48) 39478* __divdi3: Integer library routines. 39479 (line 25) 39480* __divdq3: Fixed-point fractional library routines. 39481 (line 223) 39482* __divha3: Fixed-point fractional library routines. 39483 (line 225) 39484* __divhq3: Fixed-point fractional library routines. 39485 (line 220) 39486* __divqq3: Fixed-point fractional library routines. 39487 (line 219) 39488* __divsa3: Fixed-point fractional library routines. 39489 (line 226) 39490* __divsc3: Soft float library routines. 39491 (line 250) 39492* __divsf3: Soft float library routines. 39493 (line 47) 39494* __divsi3: Integer library routines. 39495 (line 24) 39496* __divsq3: Fixed-point fractional library routines. 39497 (line 221) 39498* __divta3: Fixed-point fractional library routines. 39499 (line 229) 39500* __divtc3: Soft float library routines. 39501 (line 254) 39502* __divtf3: Soft float library routines. 39503 (line 50) 39504* __divti3: Integer library routines. 39505 (line 26) 39506* __divxc3: Soft float library routines. 39507 (line 256) 39508* __divxf3: Soft float library routines. 39509 (line 52) 39510* __dpd_adddd3: Decimal float library routines. 39511 (line 23) 39512* __dpd_addsd3: Decimal float library routines. 39513 (line 19) 39514* __dpd_addtd3: Decimal float library routines. 39515 (line 27) 39516* __dpd_divdd3: Decimal float library routines. 39517 (line 66) 39518* __dpd_divsd3: Decimal float library routines. 39519 (line 62) 39520* __dpd_divtd3: Decimal float library routines. 39521 (line 70) 39522* __dpd_eqdd2: Decimal float library routines. 39523 (line 258) 39524* __dpd_eqsd2: Decimal float library routines. 39525 (line 256) 39526* __dpd_eqtd2: Decimal float library routines. 39527 (line 260) 39528* __dpd_extendddtd2: Decimal float library routines. 39529 (line 91) 39530* __dpd_extendddtf: Decimal float library routines. 39531 (line 139) 39532* __dpd_extendddxf: Decimal float library routines. 39533 (line 133) 39534* __dpd_extenddfdd: Decimal float library routines. 39535 (line 146) 39536* __dpd_extenddftd: Decimal float library routines. 39537 (line 106) 39538* __dpd_extendsddd2: Decimal float library routines. 39539 (line 87) 39540* __dpd_extendsddf: Decimal float library routines. 39541 (line 127) 39542* __dpd_extendsdtd2: Decimal float library routines. 39543 (line 89) 39544* __dpd_extendsdtf: Decimal float library routines. 39545 (line 137) 39546* __dpd_extendsdxf: Decimal float library routines. 39547 (line 131) 39548* __dpd_extendsfdd: Decimal float library routines. 39549 (line 102) 39550* __dpd_extendsfsd: Decimal float library routines. 39551 (line 144) 39552* __dpd_extendsftd: Decimal float library routines. 39553 (line 104) 39554* __dpd_extendtftd: Decimal float library routines. 39555 (line 148) 39556* __dpd_extendxftd: Decimal float library routines. 39557 (line 108) 39558* __dpd_fixdddi: Decimal float library routines. 39559 (line 169) 39560* __dpd_fixddsi: Decimal float library routines. 39561 (line 161) 39562* __dpd_fixsddi: Decimal float library routines. 39563 (line 167) 39564* __dpd_fixsdsi: Decimal float library routines. 39565 (line 159) 39566* __dpd_fixtddi: Decimal float library routines. 39567 (line 171) 39568* __dpd_fixtdsi: Decimal float library routines. 39569 (line 163) 39570* __dpd_fixunsdddi: Decimal float library routines. 39571 (line 186) 39572* __dpd_fixunsddsi: Decimal float library routines. 39573 (line 177) 39574* __dpd_fixunssddi: Decimal float library routines. 39575 (line 184) 39576* __dpd_fixunssdsi: Decimal float library routines. 39577 (line 175) 39578* __dpd_fixunstddi: Decimal float library routines. 39579 (line 188) 39580* __dpd_fixunstdsi: Decimal float library routines. 39581 (line 179) 39582* __dpd_floatdidd: Decimal float library routines. 39583 (line 204) 39584* __dpd_floatdisd: Decimal float library routines. 39585 (line 202) 39586* __dpd_floatditd: Decimal float library routines. 39587 (line 206) 39588* __dpd_floatsidd: Decimal float library routines. 39589 (line 195) 39590* __dpd_floatsisd: Decimal float library routines. 39591 (line 193) 39592* __dpd_floatsitd: Decimal float library routines. 39593 (line 197) 39594* __dpd_floatunsdidd: Decimal float library routines. 39595 (line 222) 39596* __dpd_floatunsdisd: Decimal float library routines. 39597 (line 220) 39598* __dpd_floatunsditd: Decimal float library routines. 39599 (line 224) 39600* __dpd_floatunssidd: Decimal float library routines. 39601 (line 213) 39602* __dpd_floatunssisd: Decimal float library routines. 39603 (line 211) 39604* __dpd_floatunssitd: Decimal float library routines. 39605 (line 215) 39606* __dpd_gedd2: Decimal float library routines. 39607 (line 276) 39608* __dpd_gesd2: Decimal float library routines. 39609 (line 274) 39610* __dpd_getd2: Decimal float library routines. 39611 (line 278) 39612* __dpd_gtdd2: Decimal float library routines. 39613 (line 303) 39614* __dpd_gtsd2: Decimal float library routines. 39615 (line 301) 39616* __dpd_gttd2: Decimal float library routines. 39617 (line 305) 39618* __dpd_ledd2: Decimal float library routines. 39619 (line 294) 39620* __dpd_lesd2: Decimal float library routines. 39621 (line 292) 39622* __dpd_letd2: Decimal float library routines. 39623 (line 296) 39624* __dpd_ltdd2: Decimal float library routines. 39625 (line 285) 39626* __dpd_ltsd2: Decimal float library routines. 39627 (line 283) 39628* __dpd_lttd2: Decimal float library routines. 39629 (line 287) 39630* __dpd_muldd3: Decimal float library routines. 39631 (line 52) 39632* __dpd_mulsd3: Decimal float library routines. 39633 (line 48) 39634* __dpd_multd3: Decimal float library routines. 39635 (line 56) 39636* __dpd_nedd2: Decimal float library routines. 39637 (line 267) 39638* __dpd_negdd2: Decimal float library routines. 39639 (line 77) 39640* __dpd_negsd2: Decimal float library routines. 39641 (line 75) 39642* __dpd_negtd2: Decimal float library routines. 39643 (line 79) 39644* __dpd_nesd2: Decimal float library routines. 39645 (line 265) 39646* __dpd_netd2: Decimal float library routines. 39647 (line 269) 39648* __dpd_subdd3: Decimal float library routines. 39649 (line 37) 39650* __dpd_subsd3: Decimal float library routines. 39651 (line 33) 39652* __dpd_subtd3: Decimal float library routines. 39653 (line 41) 39654* __dpd_truncdddf: Decimal float library routines. 39655 (line 152) 39656* __dpd_truncddsd2: Decimal float library routines. 39657 (line 93) 39658* __dpd_truncddsf: Decimal float library routines. 39659 (line 123) 39660* __dpd_truncdfsd: Decimal float library routines. 39661 (line 110) 39662* __dpd_truncsdsf: Decimal float library routines. 39663 (line 150) 39664* __dpd_trunctddd2: Decimal float library routines. 39665 (line 97) 39666* __dpd_trunctddf: Decimal float library routines. 39667 (line 129) 39668* __dpd_trunctdsd2: Decimal float library routines. 39669 (line 95) 39670* __dpd_trunctdsf: Decimal float library routines. 39671 (line 125) 39672* __dpd_trunctdtf: Decimal float library routines. 39673 (line 154) 39674* __dpd_trunctdxf: Decimal float library routines. 39675 (line 135) 39676* __dpd_trunctfdd: Decimal float library routines. 39677 (line 118) 39678* __dpd_trunctfsd: Decimal float library routines. 39679 (line 114) 39680* __dpd_truncxfdd: Decimal float library routines. 39681 (line 116) 39682* __dpd_truncxfsd: Decimal float library routines. 39683 (line 112) 39684* __dpd_unorddd2: Decimal float library routines. 39685 (line 234) 39686* __dpd_unordsd2: Decimal float library routines. 39687 (line 232) 39688* __dpd_unordtd2: Decimal float library routines. 39689 (line 236) 39690* __DTOR_LIST__: Initialization. (line 25) 39691* __eqdf2: Soft float library routines. 39692 (line 194) 39693* __eqsf2: Soft float library routines. 39694 (line 193) 39695* __eqtf2: Soft float library routines. 39696 (line 195) 39697* __extenddftf2: Soft float library routines. 39698 (line 68) 39699* __extenddfxf2: Soft float library routines. 39700 (line 69) 39701* __extendsfdf2: Soft float library routines. 39702 (line 65) 39703* __extendsftf2: Soft float library routines. 39704 (line 66) 39705* __extendsfxf2: Soft float library routines. 39706 (line 67) 39707* __ffsdi2: Integer library routines. 39708 (line 144) 39709* __ffsti2: Integer library routines. 39710 (line 145) 39711* __fixdfdi: Soft float library routines. 39712 (line 88) 39713* __fixdfsi: Soft float library routines. 39714 (line 81) 39715* __fixdfti: Soft float library routines. 39716 (line 94) 39717* __fixsfdi: Soft float library routines. 39718 (line 87) 39719* __fixsfsi: Soft float library routines. 39720 (line 80) 39721* __fixsfti: Soft float library routines. 39722 (line 93) 39723* __fixtfdi: Soft float library routines. 39724 (line 89) 39725* __fixtfsi: Soft float library routines. 39726 (line 82) 39727* __fixtfti: Soft float library routines. 39728 (line 95) 39729* __fixunsdfdi: Soft float library routines. 39730 (line 108) 39731* __fixunsdfsi: Soft float library routines. 39732 (line 101) 39733* __fixunsdfti: Soft float library routines. 39734 (line 115) 39735* __fixunssfdi: Soft float library routines. 39736 (line 107) 39737* __fixunssfsi: Soft float library routines. 39738 (line 100) 39739* __fixunssfti: Soft float library routines. 39740 (line 114) 39741* __fixunstfdi: Soft float library routines. 39742 (line 109) 39743* __fixunstfsi: Soft float library routines. 39744 (line 102) 39745* __fixunstfti: Soft float library routines. 39746 (line 116) 39747* __fixunsxfdi: Soft float library routines. 39748 (line 110) 39749* __fixunsxfsi: Soft float library routines. 39750 (line 103) 39751* __fixunsxfti: Soft float library routines. 39752 (line 117) 39753* __fixxfdi: Soft float library routines. 39754 (line 90) 39755* __fixxfsi: Soft float library routines. 39756 (line 83) 39757* __fixxfti: Soft float library routines. 39758 (line 96) 39759* __floatdidf: Soft float library routines. 39760 (line 128) 39761* __floatdisf: Soft float library routines. 39762 (line 127) 39763* __floatditf: Soft float library routines. 39764 (line 129) 39765* __floatdixf: Soft float library routines. 39766 (line 130) 39767* __floatsidf: Soft float library routines. 39768 (line 122) 39769* __floatsisf: Soft float library routines. 39770 (line 121) 39771* __floatsitf: Soft float library routines. 39772 (line 123) 39773* __floatsixf: Soft float library routines. 39774 (line 124) 39775* __floattidf: Soft float library routines. 39776 (line 134) 39777* __floattisf: Soft float library routines. 39778 (line 133) 39779* __floattitf: Soft float library routines. 39780 (line 135) 39781* __floattixf: Soft float library routines. 39782 (line 136) 39783* __floatundidf: Soft float library routines. 39784 (line 146) 39785* __floatundisf: Soft float library routines. 39786 (line 145) 39787* __floatunditf: Soft float library routines. 39788 (line 147) 39789* __floatundixf: Soft float library routines. 39790 (line 148) 39791* __floatunsidf: Soft float library routines. 39792 (line 140) 39793* __floatunsisf: Soft float library routines. 39794 (line 139) 39795* __floatunsitf: Soft float library routines. 39796 (line 141) 39797* __floatunsixf: Soft float library routines. 39798 (line 142) 39799* __floatuntidf: Soft float library routines. 39800 (line 152) 39801* __floatuntisf: Soft float library routines. 39802 (line 151) 39803* __floatuntitf: Soft float library routines. 39804 (line 153) 39805* __floatuntixf: Soft float library routines. 39806 (line 154) 39807* __fractdadf: Fixed-point fractional library routines. 39808 (line 636) 39809* __fractdadi: Fixed-point fractional library routines. 39810 (line 633) 39811* __fractdadq: Fixed-point fractional library routines. 39812 (line 616) 39813* __fractdaha2: Fixed-point fractional library routines. 39814 (line 617) 39815* __fractdahi: Fixed-point fractional library routines. 39816 (line 631) 39817* __fractdahq: Fixed-point fractional library routines. 39818 (line 614) 39819* __fractdaqi: Fixed-point fractional library routines. 39820 (line 630) 39821* __fractdaqq: Fixed-point fractional library routines. 39822 (line 613) 39823* __fractdasa2: Fixed-point fractional library routines. 39824 (line 618) 39825* __fractdasf: Fixed-point fractional library routines. 39826 (line 635) 39827* __fractdasi: Fixed-point fractional library routines. 39828 (line 632) 39829* __fractdasq: Fixed-point fractional library routines. 39830 (line 615) 39831* __fractdata2: Fixed-point fractional library routines. 39832 (line 619) 39833* __fractdati: Fixed-point fractional library routines. 39834 (line 634) 39835* __fractdauda: Fixed-point fractional library routines. 39836 (line 627) 39837* __fractdaudq: Fixed-point fractional library routines. 39838 (line 624) 39839* __fractdauha: Fixed-point fractional library routines. 39840 (line 625) 39841* __fractdauhq: Fixed-point fractional library routines. 39842 (line 621) 39843* __fractdauqq: Fixed-point fractional library routines. 39844 (line 620) 39845* __fractdausa: Fixed-point fractional library routines. 39846 (line 626) 39847* __fractdausq: Fixed-point fractional library routines. 39848 (line 622) 39849* __fractdauta: Fixed-point fractional library routines. 39850 (line 629) 39851* __fractdfda: Fixed-point fractional library routines. 39852 (line 1025) 39853* __fractdfdq: Fixed-point fractional library routines. 39854 (line 1022) 39855* __fractdfha: Fixed-point fractional library routines. 39856 (line 1023) 39857* __fractdfhq: Fixed-point fractional library routines. 39858 (line 1020) 39859* __fractdfqq: Fixed-point fractional library routines. 39860 (line 1019) 39861* __fractdfsa: Fixed-point fractional library routines. 39862 (line 1024) 39863* __fractdfsq: Fixed-point fractional library routines. 39864 (line 1021) 39865* __fractdfta: Fixed-point fractional library routines. 39866 (line 1026) 39867* __fractdfuda: Fixed-point fractional library routines. 39868 (line 1033) 39869* __fractdfudq: Fixed-point fractional library routines. 39870 (line 1030) 39871* __fractdfuha: Fixed-point fractional library routines. 39872 (line 1031) 39873* __fractdfuhq: Fixed-point fractional library routines. 39874 (line 1028) 39875* __fractdfuqq: Fixed-point fractional library routines. 39876 (line 1027) 39877* __fractdfusa: Fixed-point fractional library routines. 39878 (line 1032) 39879* __fractdfusq: Fixed-point fractional library routines. 39880 (line 1029) 39881* __fractdfuta: Fixed-point fractional library routines. 39882 (line 1034) 39883* __fractdida: Fixed-point fractional library routines. 39884 (line 975) 39885* __fractdidq: Fixed-point fractional library routines. 39886 (line 972) 39887* __fractdiha: Fixed-point fractional library routines. 39888 (line 973) 39889* __fractdihq: Fixed-point fractional library routines. 39890 (line 970) 39891* __fractdiqq: Fixed-point fractional library routines. 39892 (line 969) 39893* __fractdisa: Fixed-point fractional library routines. 39894 (line 974) 39895* __fractdisq: Fixed-point fractional library routines. 39896 (line 971) 39897* __fractdita: Fixed-point fractional library routines. 39898 (line 976) 39899* __fractdiuda: Fixed-point fractional library routines. 39900 (line 983) 39901* __fractdiudq: Fixed-point fractional library routines. 39902 (line 980) 39903* __fractdiuha: Fixed-point fractional library routines. 39904 (line 981) 39905* __fractdiuhq: Fixed-point fractional library routines. 39906 (line 978) 39907* __fractdiuqq: Fixed-point fractional library routines. 39908 (line 977) 39909* __fractdiusa: Fixed-point fractional library routines. 39910 (line 982) 39911* __fractdiusq: Fixed-point fractional library routines. 39912 (line 979) 39913* __fractdiuta: Fixed-point fractional library routines. 39914 (line 984) 39915* __fractdqda: Fixed-point fractional library routines. 39916 (line 544) 39917* __fractdqdf: Fixed-point fractional library routines. 39918 (line 566) 39919* __fractdqdi: Fixed-point fractional library routines. 39920 (line 563) 39921* __fractdqha: Fixed-point fractional library routines. 39922 (line 542) 39923* __fractdqhi: Fixed-point fractional library routines. 39924 (line 561) 39925* __fractdqhq2: Fixed-point fractional library routines. 39926 (line 540) 39927* __fractdqqi: Fixed-point fractional library routines. 39928 (line 560) 39929* __fractdqqq2: Fixed-point fractional library routines. 39930 (line 539) 39931* __fractdqsa: Fixed-point fractional library routines. 39932 (line 543) 39933* __fractdqsf: Fixed-point fractional library routines. 39934 (line 565) 39935* __fractdqsi: Fixed-point fractional library routines. 39936 (line 562) 39937* __fractdqsq2: Fixed-point fractional library routines. 39938 (line 541) 39939* __fractdqta: Fixed-point fractional library routines. 39940 (line 545) 39941* __fractdqti: Fixed-point fractional library routines. 39942 (line 564) 39943* __fractdquda: Fixed-point fractional library routines. 39944 (line 557) 39945* __fractdqudq: Fixed-point fractional library routines. 39946 (line 552) 39947* __fractdquha: Fixed-point fractional library routines. 39948 (line 554) 39949* __fractdquhq: Fixed-point fractional library routines. 39950 (line 548) 39951* __fractdquqq: Fixed-point fractional library routines. 39952 (line 547) 39953* __fractdqusa: Fixed-point fractional library routines. 39954 (line 555) 39955* __fractdqusq: Fixed-point fractional library routines. 39956 (line 550) 39957* __fractdquta: Fixed-point fractional library routines. 39958 (line 559) 39959* __fracthada2: Fixed-point fractional library routines. 39960 (line 572) 39961* __fracthadf: Fixed-point fractional library routines. 39962 (line 590) 39963* __fracthadi: Fixed-point fractional library routines. 39964 (line 587) 39965* __fracthadq: Fixed-point fractional library routines. 39966 (line 570) 39967* __fracthahi: Fixed-point fractional library routines. 39968 (line 585) 39969* __fracthahq: Fixed-point fractional library routines. 39970 (line 568) 39971* __fracthaqi: Fixed-point fractional library routines. 39972 (line 584) 39973* __fracthaqq: Fixed-point fractional library routines. 39974 (line 567) 39975* __fracthasa2: Fixed-point fractional library routines. 39976 (line 571) 39977* __fracthasf: Fixed-point fractional library routines. 39978 (line 589) 39979* __fracthasi: Fixed-point fractional library routines. 39980 (line 586) 39981* __fracthasq: Fixed-point fractional library routines. 39982 (line 569) 39983* __fracthata2: Fixed-point fractional library routines. 39984 (line 573) 39985* __fracthati: Fixed-point fractional library routines. 39986 (line 588) 39987* __fracthauda: Fixed-point fractional library routines. 39988 (line 581) 39989* __fracthaudq: Fixed-point fractional library routines. 39990 (line 578) 39991* __fracthauha: Fixed-point fractional library routines. 39992 (line 579) 39993* __fracthauhq: Fixed-point fractional library routines. 39994 (line 575) 39995* __fracthauqq: Fixed-point fractional library routines. 39996 (line 574) 39997* __fracthausa: Fixed-point fractional library routines. 39998 (line 580) 39999* __fracthausq: Fixed-point fractional library routines. 40000 (line 576) 40001* __fracthauta: Fixed-point fractional library routines. 40002 (line 583) 40003* __fracthida: Fixed-point fractional library routines. 40004 (line 943) 40005* __fracthidq: Fixed-point fractional library routines. 40006 (line 940) 40007* __fracthiha: Fixed-point fractional library routines. 40008 (line 941) 40009* __fracthihq: Fixed-point fractional library routines. 40010 (line 938) 40011* __fracthiqq: Fixed-point fractional library routines. 40012 (line 937) 40013* __fracthisa: Fixed-point fractional library routines. 40014 (line 942) 40015* __fracthisq: Fixed-point fractional library routines. 40016 (line 939) 40017* __fracthita: Fixed-point fractional library routines. 40018 (line 944) 40019* __fracthiuda: Fixed-point fractional library routines. 40020 (line 951) 40021* __fracthiudq: Fixed-point fractional library routines. 40022 (line 948) 40023* __fracthiuha: Fixed-point fractional library routines. 40024 (line 949) 40025* __fracthiuhq: Fixed-point fractional library routines. 40026 (line 946) 40027* __fracthiuqq: Fixed-point fractional library routines. 40028 (line 945) 40029* __fracthiusa: Fixed-point fractional library routines. 40030 (line 950) 40031* __fracthiusq: Fixed-point fractional library routines. 40032 (line 947) 40033* __fracthiuta: Fixed-point fractional library routines. 40034 (line 952) 40035* __fracthqda: Fixed-point fractional library routines. 40036 (line 498) 40037* __fracthqdf: Fixed-point fractional library routines. 40038 (line 514) 40039* __fracthqdi: Fixed-point fractional library routines. 40040 (line 511) 40041* __fracthqdq2: Fixed-point fractional library routines. 40042 (line 495) 40043* __fracthqha: Fixed-point fractional library routines. 40044 (line 496) 40045* __fracthqhi: Fixed-point fractional library routines. 40046 (line 509) 40047* __fracthqqi: Fixed-point fractional library routines. 40048 (line 508) 40049* __fracthqqq2: Fixed-point fractional library routines. 40050 (line 493) 40051* __fracthqsa: Fixed-point fractional library routines. 40052 (line 497) 40053* __fracthqsf: Fixed-point fractional library routines. 40054 (line 513) 40055* __fracthqsi: Fixed-point fractional library routines. 40056 (line 510) 40057* __fracthqsq2: Fixed-point fractional library routines. 40058 (line 494) 40059* __fracthqta: Fixed-point fractional library routines. 40060 (line 499) 40061* __fracthqti: Fixed-point fractional library routines. 40062 (line 512) 40063* __fracthquda: Fixed-point fractional library routines. 40064 (line 506) 40065* __fracthqudq: Fixed-point fractional library routines. 40066 (line 503) 40067* __fracthquha: Fixed-point fractional library routines. 40068 (line 504) 40069* __fracthquhq: Fixed-point fractional library routines. 40070 (line 501) 40071* __fracthquqq: Fixed-point fractional library routines. 40072 (line 500) 40073* __fracthqusa: Fixed-point fractional library routines. 40074 (line 505) 40075* __fracthqusq: Fixed-point fractional library routines. 40076 (line 502) 40077* __fracthquta: Fixed-point fractional library routines. 40078 (line 507) 40079* __fractqida: Fixed-point fractional library routines. 40080 (line 925) 40081* __fractqidq: Fixed-point fractional library routines. 40082 (line 922) 40083* __fractqiha: Fixed-point fractional library routines. 40084 (line 923) 40085* __fractqihq: Fixed-point fractional library routines. 40086 (line 920) 40087* __fractqiqq: Fixed-point fractional library routines. 40088 (line 919) 40089* __fractqisa: Fixed-point fractional library routines. 40090 (line 924) 40091* __fractqisq: Fixed-point fractional library routines. 40092 (line 921) 40093* __fractqita: Fixed-point fractional library routines. 40094 (line 926) 40095* __fractqiuda: Fixed-point fractional library routines. 40096 (line 934) 40097* __fractqiudq: Fixed-point fractional library routines. 40098 (line 931) 40099* __fractqiuha: Fixed-point fractional library routines. 40100 (line 932) 40101* __fractqiuhq: Fixed-point fractional library routines. 40102 (line 928) 40103* __fractqiuqq: Fixed-point fractional library routines. 40104 (line 927) 40105* __fractqiusa: Fixed-point fractional library routines. 40106 (line 933) 40107* __fractqiusq: Fixed-point fractional library routines. 40108 (line 929) 40109* __fractqiuta: Fixed-point fractional library routines. 40110 (line 936) 40111* __fractqqda: Fixed-point fractional library routines. 40112 (line 474) 40113* __fractqqdf: Fixed-point fractional library routines. 40114 (line 492) 40115* __fractqqdi: Fixed-point fractional library routines. 40116 (line 489) 40117* __fractqqdq2: Fixed-point fractional library routines. 40118 (line 471) 40119* __fractqqha: Fixed-point fractional library routines. 40120 (line 472) 40121* __fractqqhi: Fixed-point fractional library routines. 40122 (line 487) 40123* __fractqqhq2: Fixed-point fractional library routines. 40124 (line 469) 40125* __fractqqqi: Fixed-point fractional library routines. 40126 (line 486) 40127* __fractqqsa: Fixed-point fractional library routines. 40128 (line 473) 40129* __fractqqsf: Fixed-point fractional library routines. 40130 (line 491) 40131* __fractqqsi: Fixed-point fractional library routines. 40132 (line 488) 40133* __fractqqsq2: Fixed-point fractional library routines. 40134 (line 470) 40135* __fractqqta: Fixed-point fractional library routines. 40136 (line 475) 40137* __fractqqti: Fixed-point fractional library routines. 40138 (line 490) 40139* __fractqquda: Fixed-point fractional library routines. 40140 (line 483) 40141* __fractqqudq: Fixed-point fractional library routines. 40142 (line 480) 40143* __fractqquha: Fixed-point fractional library routines. 40144 (line 481) 40145* __fractqquhq: Fixed-point fractional library routines. 40146 (line 477) 40147* __fractqquqq: Fixed-point fractional library routines. 40148 (line 476) 40149* __fractqqusa: Fixed-point fractional library routines. 40150 (line 482) 40151* __fractqqusq: Fixed-point fractional library routines. 40152 (line 478) 40153* __fractqquta: Fixed-point fractional library routines. 40154 (line 485) 40155* __fractsada2: Fixed-point fractional library routines. 40156 (line 596) 40157* __fractsadf: Fixed-point fractional library routines. 40158 (line 612) 40159* __fractsadi: Fixed-point fractional library routines. 40160 (line 609) 40161* __fractsadq: Fixed-point fractional library routines. 40162 (line 594) 40163* __fractsaha2: Fixed-point fractional library routines. 40164 (line 595) 40165* __fractsahi: Fixed-point fractional library routines. 40166 (line 607) 40167* __fractsahq: Fixed-point fractional library routines. 40168 (line 592) 40169* __fractsaqi: Fixed-point fractional library routines. 40170 (line 606) 40171* __fractsaqq: Fixed-point fractional library routines. 40172 (line 591) 40173* __fractsasf: Fixed-point fractional library routines. 40174 (line 611) 40175* __fractsasi: Fixed-point fractional library routines. 40176 (line 608) 40177* __fractsasq: Fixed-point fractional library routines. 40178 (line 593) 40179* __fractsata2: Fixed-point fractional library routines. 40180 (line 597) 40181* __fractsati: Fixed-point fractional library routines. 40182 (line 610) 40183* __fractsauda: Fixed-point fractional library routines. 40184 (line 604) 40185* __fractsaudq: Fixed-point fractional library routines. 40186 (line 601) 40187* __fractsauha: Fixed-point fractional library routines. 40188 (line 602) 40189* __fractsauhq: Fixed-point fractional library routines. 40190 (line 599) 40191* __fractsauqq: Fixed-point fractional library routines. 40192 (line 598) 40193* __fractsausa: Fixed-point fractional library routines. 40194 (line 603) 40195* __fractsausq: Fixed-point fractional library routines. 40196 (line 600) 40197* __fractsauta: Fixed-point fractional library routines. 40198 (line 605) 40199* __fractsfda: Fixed-point fractional library routines. 40200 (line 1009) 40201* __fractsfdq: Fixed-point fractional library routines. 40202 (line 1006) 40203* __fractsfha: Fixed-point fractional library routines. 40204 (line 1007) 40205* __fractsfhq: Fixed-point fractional library routines. 40206 (line 1004) 40207* __fractsfqq: Fixed-point fractional library routines. 40208 (line 1003) 40209* __fractsfsa: Fixed-point fractional library routines. 40210 (line 1008) 40211* __fractsfsq: Fixed-point fractional library routines. 40212 (line 1005) 40213* __fractsfta: Fixed-point fractional library routines. 40214 (line 1010) 40215* __fractsfuda: Fixed-point fractional library routines. 40216 (line 1017) 40217* __fractsfudq: Fixed-point fractional library routines. 40218 (line 1014) 40219* __fractsfuha: Fixed-point fractional library routines. 40220 (line 1015) 40221* __fractsfuhq: Fixed-point fractional library routines. 40222 (line 1012) 40223* __fractsfuqq: Fixed-point fractional library routines. 40224 (line 1011) 40225* __fractsfusa: Fixed-point fractional library routines. 40226 (line 1016) 40227* __fractsfusq: Fixed-point fractional library routines. 40228 (line 1013) 40229* __fractsfuta: Fixed-point fractional library routines. 40230 (line 1018) 40231* __fractsida: Fixed-point fractional library routines. 40232 (line 959) 40233* __fractsidq: Fixed-point fractional library routines. 40234 (line 956) 40235* __fractsiha: Fixed-point fractional library routines. 40236 (line 957) 40237* __fractsihq: Fixed-point fractional library routines. 40238 (line 954) 40239* __fractsiqq: Fixed-point fractional library routines. 40240 (line 953) 40241* __fractsisa: Fixed-point fractional library routines. 40242 (line 958) 40243* __fractsisq: Fixed-point fractional library routines. 40244 (line 955) 40245* __fractsita: Fixed-point fractional library routines. 40246 (line 960) 40247* __fractsiuda: Fixed-point fractional library routines. 40248 (line 967) 40249* __fractsiudq: Fixed-point fractional library routines. 40250 (line 964) 40251* __fractsiuha: Fixed-point fractional library routines. 40252 (line 965) 40253* __fractsiuhq: Fixed-point fractional library routines. 40254 (line 962) 40255* __fractsiuqq: Fixed-point fractional library routines. 40256 (line 961) 40257* __fractsiusa: Fixed-point fractional library routines. 40258 (line 966) 40259* __fractsiusq: Fixed-point fractional library routines. 40260 (line 963) 40261* __fractsiuta: Fixed-point fractional library routines. 40262 (line 968) 40263* __fractsqda: Fixed-point fractional library routines. 40264 (line 520) 40265* __fractsqdf: Fixed-point fractional library routines. 40266 (line 538) 40267* __fractsqdi: Fixed-point fractional library routines. 40268 (line 535) 40269* __fractsqdq2: Fixed-point fractional library routines. 40270 (line 517) 40271* __fractsqha: Fixed-point fractional library routines. 40272 (line 518) 40273* __fractsqhi: Fixed-point fractional library routines. 40274 (line 533) 40275* __fractsqhq2: Fixed-point fractional library routines. 40276 (line 516) 40277* __fractsqqi: Fixed-point fractional library routines. 40278 (line 532) 40279* __fractsqqq2: Fixed-point fractional library routines. 40280 (line 515) 40281* __fractsqsa: Fixed-point fractional library routines. 40282 (line 519) 40283* __fractsqsf: Fixed-point fractional library routines. 40284 (line 537) 40285* __fractsqsi: Fixed-point fractional library routines. 40286 (line 534) 40287* __fractsqta: Fixed-point fractional library routines. 40288 (line 521) 40289* __fractsqti: Fixed-point fractional library routines. 40290 (line 536) 40291* __fractsquda: Fixed-point fractional library routines. 40292 (line 529) 40293* __fractsqudq: Fixed-point fractional library routines. 40294 (line 526) 40295* __fractsquha: Fixed-point fractional library routines. 40296 (line 527) 40297* __fractsquhq: Fixed-point fractional library routines. 40298 (line 523) 40299* __fractsquqq: Fixed-point fractional library routines. 40300 (line 522) 40301* __fractsqusa: Fixed-point fractional library routines. 40302 (line 528) 40303* __fractsqusq: Fixed-point fractional library routines. 40304 (line 524) 40305* __fractsquta: Fixed-point fractional library routines. 40306 (line 531) 40307* __fracttada2: Fixed-point fractional library routines. 40308 (line 643) 40309* __fracttadf: Fixed-point fractional library routines. 40310 (line 664) 40311* __fracttadi: Fixed-point fractional library routines. 40312 (line 661) 40313* __fracttadq: Fixed-point fractional library routines. 40314 (line 640) 40315* __fracttaha2: Fixed-point fractional library routines. 40316 (line 641) 40317* __fracttahi: Fixed-point fractional library routines. 40318 (line 659) 40319* __fracttahq: Fixed-point fractional library routines. 40320 (line 638) 40321* __fracttaqi: Fixed-point fractional library routines. 40322 (line 658) 40323* __fracttaqq: Fixed-point fractional library routines. 40324 (line 637) 40325* __fracttasa2: Fixed-point fractional library routines. 40326 (line 642) 40327* __fracttasf: Fixed-point fractional library routines. 40328 (line 663) 40329* __fracttasi: Fixed-point fractional library routines. 40330 (line 660) 40331* __fracttasq: Fixed-point fractional library routines. 40332 (line 639) 40333* __fracttati: Fixed-point fractional library routines. 40334 (line 662) 40335* __fracttauda: Fixed-point fractional library routines. 40336 (line 655) 40337* __fracttaudq: Fixed-point fractional library routines. 40338 (line 650) 40339* __fracttauha: Fixed-point fractional library routines. 40340 (line 652) 40341* __fracttauhq: Fixed-point fractional library routines. 40342 (line 646) 40343* __fracttauqq: Fixed-point fractional library routines. 40344 (line 645) 40345* __fracttausa: Fixed-point fractional library routines. 40346 (line 653) 40347* __fracttausq: Fixed-point fractional library routines. 40348 (line 648) 40349* __fracttauta: Fixed-point fractional library routines. 40350 (line 657) 40351* __fracttida: Fixed-point fractional library routines. 40352 (line 991) 40353* __fracttidq: Fixed-point fractional library routines. 40354 (line 988) 40355* __fracttiha: Fixed-point fractional library routines. 40356 (line 989) 40357* __fracttihq: Fixed-point fractional library routines. 40358 (line 986) 40359* __fracttiqq: Fixed-point fractional library routines. 40360 (line 985) 40361* __fracttisa: Fixed-point fractional library routines. 40362 (line 990) 40363* __fracttisq: Fixed-point fractional library routines. 40364 (line 987) 40365* __fracttita: Fixed-point fractional library routines. 40366 (line 992) 40367* __fracttiuda: Fixed-point fractional library routines. 40368 (line 1000) 40369* __fracttiudq: Fixed-point fractional library routines. 40370 (line 997) 40371* __fracttiuha: Fixed-point fractional library routines. 40372 (line 998) 40373* __fracttiuhq: Fixed-point fractional library routines. 40374 (line 994) 40375* __fracttiuqq: Fixed-point fractional library routines. 40376 (line 993) 40377* __fracttiusa: Fixed-point fractional library routines. 40378 (line 999) 40379* __fracttiusq: Fixed-point fractional library routines. 40380 (line 995) 40381* __fracttiuta: Fixed-point fractional library routines. 40382 (line 1002) 40383* __fractudada: Fixed-point fractional library routines. 40384 (line 858) 40385* __fractudadf: Fixed-point fractional library routines. 40386 (line 881) 40387* __fractudadi: Fixed-point fractional library routines. 40388 (line 878) 40389* __fractudadq: Fixed-point fractional library routines. 40390 (line 855) 40391* __fractudaha: Fixed-point fractional library routines. 40392 (line 856) 40393* __fractudahi: Fixed-point fractional library routines. 40394 (line 876) 40395* __fractudahq: Fixed-point fractional library routines. 40396 (line 852) 40397* __fractudaqi: Fixed-point fractional library routines. 40398 (line 875) 40399* __fractudaqq: Fixed-point fractional library routines. 40400 (line 851) 40401* __fractudasa: Fixed-point fractional library routines. 40402 (line 857) 40403* __fractudasf: Fixed-point fractional library routines. 40404 (line 880) 40405* __fractudasi: Fixed-point fractional library routines. 40406 (line 877) 40407* __fractudasq: Fixed-point fractional library routines. 40408 (line 853) 40409* __fractudata: Fixed-point fractional library routines. 40410 (line 860) 40411* __fractudati: Fixed-point fractional library routines. 40412 (line 879) 40413* __fractudaudq: Fixed-point fractional library routines. 40414 (line 868) 40415* __fractudauha2: Fixed-point fractional library routines. 40416 (line 870) 40417* __fractudauhq: Fixed-point fractional library routines. 40418 (line 864) 40419* __fractudauqq: Fixed-point fractional library routines. 40420 (line 862) 40421* __fractudausa2: Fixed-point fractional library routines. 40422 (line 872) 40423* __fractudausq: Fixed-point fractional library routines. 40424 (line 866) 40425* __fractudauta2: Fixed-point fractional library routines. 40426 (line 874) 40427* __fractudqda: Fixed-point fractional library routines. 40428 (line 766) 40429* __fractudqdf: Fixed-point fractional library routines. 40430 (line 791) 40431* __fractudqdi: Fixed-point fractional library routines. 40432 (line 787) 40433* __fractudqdq: Fixed-point fractional library routines. 40434 (line 761) 40435* __fractudqha: Fixed-point fractional library routines. 40436 (line 763) 40437* __fractudqhi: Fixed-point fractional library routines. 40438 (line 785) 40439* __fractudqhq: Fixed-point fractional library routines. 40440 (line 757) 40441* __fractudqqi: Fixed-point fractional library routines. 40442 (line 784) 40443* __fractudqqq: Fixed-point fractional library routines. 40444 (line 756) 40445* __fractudqsa: Fixed-point fractional library routines. 40446 (line 764) 40447* __fractudqsf: Fixed-point fractional library routines. 40448 (line 790) 40449* __fractudqsi: Fixed-point fractional library routines. 40450 (line 786) 40451* __fractudqsq: Fixed-point fractional library routines. 40452 (line 759) 40453* __fractudqta: Fixed-point fractional library routines. 40454 (line 768) 40455* __fractudqti: Fixed-point fractional library routines. 40456 (line 789) 40457* __fractudquda: Fixed-point fractional library routines. 40458 (line 780) 40459* __fractudquha: Fixed-point fractional library routines. 40460 (line 776) 40461* __fractudquhq2: Fixed-point fractional library routines. 40462 (line 772) 40463* __fractudquqq2: Fixed-point fractional library routines. 40464 (line 770) 40465* __fractudqusa: Fixed-point fractional library routines. 40466 (line 778) 40467* __fractudqusq2: Fixed-point fractional library routines. 40468 (line 774) 40469* __fractudquta: Fixed-point fractional library routines. 40470 (line 782) 40471* __fractuhada: Fixed-point fractional library routines. 40472 (line 799) 40473* __fractuhadf: Fixed-point fractional library routines. 40474 (line 822) 40475* __fractuhadi: Fixed-point fractional library routines. 40476 (line 819) 40477* __fractuhadq: Fixed-point fractional library routines. 40478 (line 796) 40479* __fractuhaha: Fixed-point fractional library routines. 40480 (line 797) 40481* __fractuhahi: Fixed-point fractional library routines. 40482 (line 817) 40483* __fractuhahq: Fixed-point fractional library routines. 40484 (line 793) 40485* __fractuhaqi: Fixed-point fractional library routines. 40486 (line 816) 40487* __fractuhaqq: Fixed-point fractional library routines. 40488 (line 792) 40489* __fractuhasa: Fixed-point fractional library routines. 40490 (line 798) 40491* __fractuhasf: Fixed-point fractional library routines. 40492 (line 821) 40493* __fractuhasi: Fixed-point fractional library routines. 40494 (line 818) 40495* __fractuhasq: Fixed-point fractional library routines. 40496 (line 794) 40497* __fractuhata: Fixed-point fractional library routines. 40498 (line 801) 40499* __fractuhati: Fixed-point fractional library routines. 40500 (line 820) 40501* __fractuhauda2: Fixed-point fractional library routines. 40502 (line 813) 40503* __fractuhaudq: Fixed-point fractional library routines. 40504 (line 809) 40505* __fractuhauhq: Fixed-point fractional library routines. 40506 (line 805) 40507* __fractuhauqq: Fixed-point fractional library routines. 40508 (line 803) 40509* __fractuhausa2: Fixed-point fractional library routines. 40510 (line 811) 40511* __fractuhausq: Fixed-point fractional library routines. 40512 (line 807) 40513* __fractuhauta2: Fixed-point fractional library routines. 40514 (line 815) 40515* __fractuhqda: Fixed-point fractional library routines. 40516 (line 702) 40517* __fractuhqdf: Fixed-point fractional library routines. 40518 (line 723) 40519* __fractuhqdi: Fixed-point fractional library routines. 40520 (line 720) 40521* __fractuhqdq: Fixed-point fractional library routines. 40522 (line 699) 40523* __fractuhqha: Fixed-point fractional library routines. 40524 (line 700) 40525* __fractuhqhi: Fixed-point fractional library routines. 40526 (line 718) 40527* __fractuhqhq: Fixed-point fractional library routines. 40528 (line 697) 40529* __fractuhqqi: Fixed-point fractional library routines. 40530 (line 717) 40531* __fractuhqqq: Fixed-point fractional library routines. 40532 (line 696) 40533* __fractuhqsa: Fixed-point fractional library routines. 40534 (line 701) 40535* __fractuhqsf: Fixed-point fractional library routines. 40536 (line 722) 40537* __fractuhqsi: Fixed-point fractional library routines. 40538 (line 719) 40539* __fractuhqsq: Fixed-point fractional library routines. 40540 (line 698) 40541* __fractuhqta: Fixed-point fractional library routines. 40542 (line 703) 40543* __fractuhqti: Fixed-point fractional library routines. 40544 (line 721) 40545* __fractuhquda: Fixed-point fractional library routines. 40546 (line 714) 40547* __fractuhqudq2: Fixed-point fractional library routines. 40548 (line 709) 40549* __fractuhquha: Fixed-point fractional library routines. 40550 (line 711) 40551* __fractuhquqq2: Fixed-point fractional library routines. 40552 (line 705) 40553* __fractuhqusa: Fixed-point fractional library routines. 40554 (line 712) 40555* __fractuhqusq2: Fixed-point fractional library routines. 40556 (line 707) 40557* __fractuhquta: Fixed-point fractional library routines. 40558 (line 716) 40559* __fractunsdadi: Fixed-point fractional library routines. 40560 (line 1555) 40561* __fractunsdahi: Fixed-point fractional library routines. 40562 (line 1553) 40563* __fractunsdaqi: Fixed-point fractional library routines. 40564 (line 1552) 40565* __fractunsdasi: Fixed-point fractional library routines. 40566 (line 1554) 40567* __fractunsdati: Fixed-point fractional library routines. 40568 (line 1556) 40569* __fractunsdida: Fixed-point fractional library routines. 40570 (line 1707) 40571* __fractunsdidq: Fixed-point fractional library routines. 40572 (line 1704) 40573* __fractunsdiha: Fixed-point fractional library routines. 40574 (line 1705) 40575* __fractunsdihq: Fixed-point fractional library routines. 40576 (line 1702) 40577* __fractunsdiqq: Fixed-point fractional library routines. 40578 (line 1701) 40579* __fractunsdisa: Fixed-point fractional library routines. 40580 (line 1706) 40581* __fractunsdisq: Fixed-point fractional library routines. 40582 (line 1703) 40583* __fractunsdita: Fixed-point fractional library routines. 40584 (line 1708) 40585* __fractunsdiuda: Fixed-point fractional library routines. 40586 (line 1720) 40587* __fractunsdiudq: Fixed-point fractional library routines. 40588 (line 1715) 40589* __fractunsdiuha: Fixed-point fractional library routines. 40590 (line 1717) 40591* __fractunsdiuhq: Fixed-point fractional library routines. 40592 (line 1711) 40593* __fractunsdiuqq: Fixed-point fractional library routines. 40594 (line 1710) 40595* __fractunsdiusa: Fixed-point fractional library routines. 40596 (line 1718) 40597* __fractunsdiusq: Fixed-point fractional library routines. 40598 (line 1713) 40599* __fractunsdiuta: Fixed-point fractional library routines. 40600 (line 1722) 40601* __fractunsdqdi: Fixed-point fractional library routines. 40602 (line 1539) 40603* __fractunsdqhi: Fixed-point fractional library routines. 40604 (line 1537) 40605* __fractunsdqqi: Fixed-point fractional library routines. 40606 (line 1536) 40607* __fractunsdqsi: Fixed-point fractional library routines. 40608 (line 1538) 40609* __fractunsdqti: Fixed-point fractional library routines. 40610 (line 1541) 40611* __fractunshadi: Fixed-point fractional library routines. 40612 (line 1545) 40613* __fractunshahi: Fixed-point fractional library routines. 40614 (line 1543) 40615* __fractunshaqi: Fixed-point fractional library routines. 40616 (line 1542) 40617* __fractunshasi: Fixed-point fractional library routines. 40618 (line 1544) 40619* __fractunshati: Fixed-point fractional library routines. 40620 (line 1546) 40621* __fractunshida: Fixed-point fractional library routines. 40622 (line 1663) 40623* __fractunshidq: Fixed-point fractional library routines. 40624 (line 1660) 40625* __fractunshiha: Fixed-point fractional library routines. 40626 (line 1661) 40627* __fractunshihq: Fixed-point fractional library routines. 40628 (line 1658) 40629* __fractunshiqq: Fixed-point fractional library routines. 40630 (line 1657) 40631* __fractunshisa: Fixed-point fractional library routines. 40632 (line 1662) 40633* __fractunshisq: Fixed-point fractional library routines. 40634 (line 1659) 40635* __fractunshita: Fixed-point fractional library routines. 40636 (line 1664) 40637* __fractunshiuda: Fixed-point fractional library routines. 40638 (line 1676) 40639* __fractunshiudq: Fixed-point fractional library routines. 40640 (line 1671) 40641* __fractunshiuha: Fixed-point fractional library routines. 40642 (line 1673) 40643* __fractunshiuhq: Fixed-point fractional library routines. 40644 (line 1667) 40645* __fractunshiuqq: Fixed-point fractional library routines. 40646 (line 1666) 40647* __fractunshiusa: Fixed-point fractional library routines. 40648 (line 1674) 40649* __fractunshiusq: Fixed-point fractional library routines. 40650 (line 1669) 40651* __fractunshiuta: Fixed-point fractional library routines. 40652 (line 1678) 40653* __fractunshqdi: Fixed-point fractional library routines. 40654 (line 1529) 40655* __fractunshqhi: Fixed-point fractional library routines. 40656 (line 1527) 40657* __fractunshqqi: Fixed-point fractional library routines. 40658 (line 1526) 40659* __fractunshqsi: Fixed-point fractional library routines. 40660 (line 1528) 40661* __fractunshqti: Fixed-point fractional library routines. 40662 (line 1530) 40663* __fractunsqida: Fixed-point fractional library routines. 40664 (line 1641) 40665* __fractunsqidq: Fixed-point fractional library routines. 40666 (line 1638) 40667* __fractunsqiha: Fixed-point fractional library routines. 40668 (line 1639) 40669* __fractunsqihq: Fixed-point fractional library routines. 40670 (line 1636) 40671* __fractunsqiqq: Fixed-point fractional library routines. 40672 (line 1635) 40673* __fractunsqisa: Fixed-point fractional library routines. 40674 (line 1640) 40675* __fractunsqisq: Fixed-point fractional library routines. 40676 (line 1637) 40677* __fractunsqita: Fixed-point fractional library routines. 40678 (line 1642) 40679* __fractunsqiuda: Fixed-point fractional library routines. 40680 (line 1654) 40681* __fractunsqiudq: Fixed-point fractional library routines. 40682 (line 1649) 40683* __fractunsqiuha: Fixed-point fractional library routines. 40684 (line 1651) 40685* __fractunsqiuhq: Fixed-point fractional library routines. 40686 (line 1645) 40687* __fractunsqiuqq: Fixed-point fractional library routines. 40688 (line 1644) 40689* __fractunsqiusa: Fixed-point fractional library routines. 40690 (line 1652) 40691* __fractunsqiusq: Fixed-point fractional library routines. 40692 (line 1647) 40693* __fractunsqiuta: Fixed-point fractional library routines. 40694 (line 1656) 40695* __fractunsqqdi: Fixed-point fractional library routines. 40696 (line 1524) 40697* __fractunsqqhi: Fixed-point fractional library routines. 40698 (line 1522) 40699* __fractunsqqqi: Fixed-point fractional library routines. 40700 (line 1521) 40701* __fractunsqqsi: Fixed-point fractional library routines. 40702 (line 1523) 40703* __fractunsqqti: Fixed-point fractional library routines. 40704 (line 1525) 40705* __fractunssadi: Fixed-point fractional library routines. 40706 (line 1550) 40707* __fractunssahi: Fixed-point fractional library routines. 40708 (line 1548) 40709* __fractunssaqi: Fixed-point fractional library routines. 40710 (line 1547) 40711* __fractunssasi: Fixed-point fractional library routines. 40712 (line 1549) 40713* __fractunssati: Fixed-point fractional library routines. 40714 (line 1551) 40715* __fractunssida: Fixed-point fractional library routines. 40716 (line 1685) 40717* __fractunssidq: Fixed-point fractional library routines. 40718 (line 1682) 40719* __fractunssiha: Fixed-point fractional library routines. 40720 (line 1683) 40721* __fractunssihq: Fixed-point fractional library routines. 40722 (line 1680) 40723* __fractunssiqq: Fixed-point fractional library routines. 40724 (line 1679) 40725* __fractunssisa: Fixed-point fractional library routines. 40726 (line 1684) 40727* __fractunssisq: Fixed-point fractional library routines. 40728 (line 1681) 40729* __fractunssita: Fixed-point fractional library routines. 40730 (line 1686) 40731* __fractunssiuda: Fixed-point fractional library routines. 40732 (line 1698) 40733* __fractunssiudq: Fixed-point fractional library routines. 40734 (line 1693) 40735* __fractunssiuha: Fixed-point fractional library routines. 40736 (line 1695) 40737* __fractunssiuhq: Fixed-point fractional library routines. 40738 (line 1689) 40739* __fractunssiuqq: Fixed-point fractional library routines. 40740 (line 1688) 40741* __fractunssiusa: Fixed-point fractional library routines. 40742 (line 1696) 40743* __fractunssiusq: Fixed-point fractional library routines. 40744 (line 1691) 40745* __fractunssiuta: Fixed-point fractional library routines. 40746 (line 1700) 40747* __fractunssqdi: Fixed-point fractional library routines. 40748 (line 1534) 40749* __fractunssqhi: Fixed-point fractional library routines. 40750 (line 1532) 40751* __fractunssqqi: Fixed-point fractional library routines. 40752 (line 1531) 40753* __fractunssqsi: Fixed-point fractional library routines. 40754 (line 1533) 40755* __fractunssqti: Fixed-point fractional library routines. 40756 (line 1535) 40757* __fractunstadi: Fixed-point fractional library routines. 40758 (line 1560) 40759* __fractunstahi: Fixed-point fractional library routines. 40760 (line 1558) 40761* __fractunstaqi: Fixed-point fractional library routines. 40762 (line 1557) 40763* __fractunstasi: Fixed-point fractional library routines. 40764 (line 1559) 40765* __fractunstati: Fixed-point fractional library routines. 40766 (line 1562) 40767* __fractunstida: Fixed-point fractional library routines. 40768 (line 1730) 40769* __fractunstidq: Fixed-point fractional library routines. 40770 (line 1727) 40771* __fractunstiha: Fixed-point fractional library routines. 40772 (line 1728) 40773* __fractunstihq: Fixed-point fractional library routines. 40774 (line 1724) 40775* __fractunstiqq: Fixed-point fractional library routines. 40776 (line 1723) 40777* __fractunstisa: Fixed-point fractional library routines. 40778 (line 1729) 40779* __fractunstisq: Fixed-point fractional library routines. 40780 (line 1725) 40781* __fractunstita: Fixed-point fractional library routines. 40782 (line 1732) 40783* __fractunstiuda: Fixed-point fractional library routines. 40784 (line 1746) 40785* __fractunstiudq: Fixed-point fractional library routines. 40786 (line 1740) 40787* __fractunstiuha: Fixed-point fractional library routines. 40788 (line 1742) 40789* __fractunstiuhq: Fixed-point fractional library routines. 40790 (line 1736) 40791* __fractunstiuqq: Fixed-point fractional library routines. 40792 (line 1734) 40793* __fractunstiusa: Fixed-point fractional library routines. 40794 (line 1744) 40795* __fractunstiusq: Fixed-point fractional library routines. 40796 (line 1738) 40797* __fractunstiuta: Fixed-point fractional library routines. 40798 (line 1748) 40799* __fractunsudadi: Fixed-point fractional library routines. 40800 (line 1622) 40801* __fractunsudahi: Fixed-point fractional library routines. 40802 (line 1618) 40803* __fractunsudaqi: Fixed-point fractional library routines. 40804 (line 1616) 40805* __fractunsudasi: Fixed-point fractional library routines. 40806 (line 1620) 40807* __fractunsudati: Fixed-point fractional library routines. 40808 (line 1624) 40809* __fractunsudqdi: Fixed-point fractional library routines. 40810 (line 1596) 40811* __fractunsudqhi: Fixed-point fractional library routines. 40812 (line 1592) 40813* __fractunsudqqi: Fixed-point fractional library routines. 40814 (line 1590) 40815* __fractunsudqsi: Fixed-point fractional library routines. 40816 (line 1594) 40817* __fractunsudqti: Fixed-point fractional library routines. 40818 (line 1598) 40819* __fractunsuhadi: Fixed-point fractional library routines. 40820 (line 1606) 40821* __fractunsuhahi: Fixed-point fractional library routines. 40822 (line 1602) 40823* __fractunsuhaqi: Fixed-point fractional library routines. 40824 (line 1600) 40825* __fractunsuhasi: Fixed-point fractional library routines. 40826 (line 1604) 40827* __fractunsuhati: Fixed-point fractional library routines. 40828 (line 1608) 40829* __fractunsuhqdi: Fixed-point fractional library routines. 40830 (line 1576) 40831* __fractunsuhqhi: Fixed-point fractional library routines. 40832 (line 1574) 40833* __fractunsuhqqi: Fixed-point fractional library routines. 40834 (line 1573) 40835* __fractunsuhqsi: Fixed-point fractional library routines. 40836 (line 1575) 40837* __fractunsuhqti: Fixed-point fractional library routines. 40838 (line 1578) 40839* __fractunsuqqdi: Fixed-point fractional library routines. 40840 (line 1570) 40841* __fractunsuqqhi: Fixed-point fractional library routines. 40842 (line 1566) 40843* __fractunsuqqqi: Fixed-point fractional library routines. 40844 (line 1564) 40845* __fractunsuqqsi: Fixed-point fractional library routines. 40846 (line 1568) 40847* __fractunsuqqti: Fixed-point fractional library routines. 40848 (line 1572) 40849* __fractunsusadi: Fixed-point fractional library routines. 40850 (line 1612) 40851* __fractunsusahi: Fixed-point fractional library routines. 40852 (line 1610) 40853* __fractunsusaqi: Fixed-point fractional library routines. 40854 (line 1609) 40855* __fractunsusasi: Fixed-point fractional library routines. 40856 (line 1611) 40857* __fractunsusati: Fixed-point fractional library routines. 40858 (line 1614) 40859* __fractunsusqdi: Fixed-point fractional library routines. 40860 (line 1586) 40861* __fractunsusqhi: Fixed-point fractional library routines. 40862 (line 1582) 40863* __fractunsusqqi: Fixed-point fractional library routines. 40864 (line 1580) 40865* __fractunsusqsi: Fixed-point fractional library routines. 40866 (line 1584) 40867* __fractunsusqti: Fixed-point fractional library routines. 40868 (line 1588) 40869* __fractunsutadi: Fixed-point fractional library routines. 40870 (line 1632) 40871* __fractunsutahi: Fixed-point fractional library routines. 40872 (line 1628) 40873* __fractunsutaqi: Fixed-point fractional library routines. 40874 (line 1626) 40875* __fractunsutasi: Fixed-point fractional library routines. 40876 (line 1630) 40877* __fractunsutati: Fixed-point fractional library routines. 40878 (line 1634) 40879* __fractuqqda: Fixed-point fractional library routines. 40880 (line 672) 40881* __fractuqqdf: Fixed-point fractional library routines. 40882 (line 695) 40883* __fractuqqdi: Fixed-point fractional library routines. 40884 (line 692) 40885* __fractuqqdq: Fixed-point fractional library routines. 40886 (line 669) 40887* __fractuqqha: Fixed-point fractional library routines. 40888 (line 670) 40889* __fractuqqhi: Fixed-point fractional library routines. 40890 (line 690) 40891* __fractuqqhq: Fixed-point fractional library routines. 40892 (line 666) 40893* __fractuqqqi: Fixed-point fractional library routines. 40894 (line 689) 40895* __fractuqqqq: Fixed-point fractional library routines. 40896 (line 665) 40897* __fractuqqsa: Fixed-point fractional library routines. 40898 (line 671) 40899* __fractuqqsf: Fixed-point fractional library routines. 40900 (line 694) 40901* __fractuqqsi: Fixed-point fractional library routines. 40902 (line 691) 40903* __fractuqqsq: Fixed-point fractional library routines. 40904 (line 667) 40905* __fractuqqta: Fixed-point fractional library routines. 40906 (line 674) 40907* __fractuqqti: Fixed-point fractional library routines. 40908 (line 693) 40909* __fractuqquda: Fixed-point fractional library routines. 40910 (line 686) 40911* __fractuqqudq2: Fixed-point fractional library routines. 40912 (line 680) 40913* __fractuqquha: Fixed-point fractional library routines. 40914 (line 682) 40915* __fractuqquhq2: Fixed-point fractional library routines. 40916 (line 676) 40917* __fractuqqusa: Fixed-point fractional library routines. 40918 (line 684) 40919* __fractuqqusq2: Fixed-point fractional library routines. 40920 (line 678) 40921* __fractuqquta: Fixed-point fractional library routines. 40922 (line 688) 40923* __fractusada: Fixed-point fractional library routines. 40924 (line 829) 40925* __fractusadf: Fixed-point fractional library routines. 40926 (line 850) 40927* __fractusadi: Fixed-point fractional library routines. 40928 (line 847) 40929* __fractusadq: Fixed-point fractional library routines. 40930 (line 826) 40931* __fractusaha: Fixed-point fractional library routines. 40932 (line 827) 40933* __fractusahi: Fixed-point fractional library routines. 40934 (line 845) 40935* __fractusahq: Fixed-point fractional library routines. 40936 (line 824) 40937* __fractusaqi: Fixed-point fractional library routines. 40938 (line 844) 40939* __fractusaqq: Fixed-point fractional library routines. 40940 (line 823) 40941* __fractusasa: Fixed-point fractional library routines. 40942 (line 828) 40943* __fractusasf: Fixed-point fractional library routines. 40944 (line 849) 40945* __fractusasi: Fixed-point fractional library routines. 40946 (line 846) 40947* __fractusasq: Fixed-point fractional library routines. 40948 (line 825) 40949* __fractusata: Fixed-point fractional library routines. 40950 (line 830) 40951* __fractusati: Fixed-point fractional library routines. 40952 (line 848) 40953* __fractusauda2: Fixed-point fractional library routines. 40954 (line 841) 40955* __fractusaudq: Fixed-point fractional library routines. 40956 (line 837) 40957* __fractusauha2: Fixed-point fractional library routines. 40958 (line 839) 40959* __fractusauhq: Fixed-point fractional library routines. 40960 (line 833) 40961* __fractusauqq: Fixed-point fractional library routines. 40962 (line 832) 40963* __fractusausq: Fixed-point fractional library routines. 40964 (line 835) 40965* __fractusauta2: Fixed-point fractional library routines. 40966 (line 843) 40967* __fractusqda: Fixed-point fractional library routines. 40968 (line 731) 40969* __fractusqdf: Fixed-point fractional library routines. 40970 (line 754) 40971* __fractusqdi: Fixed-point fractional library routines. 40972 (line 751) 40973* __fractusqdq: Fixed-point fractional library routines. 40974 (line 728) 40975* __fractusqha: Fixed-point fractional library routines. 40976 (line 729) 40977* __fractusqhi: Fixed-point fractional library routines. 40978 (line 749) 40979* __fractusqhq: Fixed-point fractional library routines. 40980 (line 725) 40981* __fractusqqi: Fixed-point fractional library routines. 40982 (line 748) 40983* __fractusqqq: Fixed-point fractional library routines. 40984 (line 724) 40985* __fractusqsa: Fixed-point fractional library routines. 40986 (line 730) 40987* __fractusqsf: Fixed-point fractional library routines. 40988 (line 753) 40989* __fractusqsi: Fixed-point fractional library routines. 40990 (line 750) 40991* __fractusqsq: Fixed-point fractional library routines. 40992 (line 726) 40993* __fractusqta: Fixed-point fractional library routines. 40994 (line 733) 40995* __fractusqti: Fixed-point fractional library routines. 40996 (line 752) 40997* __fractusquda: Fixed-point fractional library routines. 40998 (line 745) 40999* __fractusqudq2: Fixed-point fractional library routines. 41000 (line 739) 41001* __fractusquha: Fixed-point fractional library routines. 41002 (line 741) 41003* __fractusquhq2: Fixed-point fractional library routines. 41004 (line 737) 41005* __fractusquqq2: Fixed-point fractional library routines. 41006 (line 735) 41007* __fractusqusa: Fixed-point fractional library routines. 41008 (line 743) 41009* __fractusquta: Fixed-point fractional library routines. 41010 (line 747) 41011* __fractutada: Fixed-point fractional library routines. 41012 (line 893) 41013* __fractutadf: Fixed-point fractional library routines. 41014 (line 918) 41015* __fractutadi: Fixed-point fractional library routines. 41016 (line 914) 41017* __fractutadq: Fixed-point fractional library routines. 41018 (line 888) 41019* __fractutaha: Fixed-point fractional library routines. 41020 (line 890) 41021* __fractutahi: Fixed-point fractional library routines. 41022 (line 912) 41023* __fractutahq: Fixed-point fractional library routines. 41024 (line 884) 41025* __fractutaqi: Fixed-point fractional library routines. 41026 (line 911) 41027* __fractutaqq: Fixed-point fractional library routines. 41028 (line 883) 41029* __fractutasa: Fixed-point fractional library routines. 41030 (line 891) 41031* __fractutasf: Fixed-point fractional library routines. 41032 (line 917) 41033* __fractutasi: Fixed-point fractional library routines. 41034 (line 913) 41035* __fractutasq: Fixed-point fractional library routines. 41036 (line 886) 41037* __fractutata: Fixed-point fractional library routines. 41038 (line 895) 41039* __fractutati: Fixed-point fractional library routines. 41040 (line 916) 41041* __fractutauda2: Fixed-point fractional library routines. 41042 (line 909) 41043* __fractutaudq: Fixed-point fractional library routines. 41044 (line 903) 41045* __fractutauha2: Fixed-point fractional library routines. 41046 (line 905) 41047* __fractutauhq: Fixed-point fractional library routines. 41048 (line 899) 41049* __fractutauqq: Fixed-point fractional library routines. 41050 (line 897) 41051* __fractutausa2: Fixed-point fractional library routines. 41052 (line 907) 41053* __fractutausq: Fixed-point fractional library routines. 41054 (line 901) 41055* __gedf2: Soft float library routines. 41056 (line 206) 41057* __gesf2: Soft float library routines. 41058 (line 205) 41059* __getf2: Soft float library routines. 41060 (line 207) 41061* __gtdf2: Soft float library routines. 41062 (line 224) 41063* __gtsf2: Soft float library routines. 41064 (line 223) 41065* __gttf2: Soft float library routines. 41066 (line 225) 41067* __ledf2: Soft float library routines. 41068 (line 218) 41069* __lesf2: Soft float library routines. 41070 (line 217) 41071* __letf2: Soft float library routines. 41072 (line 219) 41073* __lshrdi3: Integer library routines. 41074 (line 31) 41075* __lshrsi3: Integer library routines. 41076 (line 30) 41077* __lshrti3: Integer library routines. 41078 (line 32) 41079* __lshruda3: Fixed-point fractional library routines. 41080 (line 390) 41081* __lshrudq3: Fixed-point fractional library routines. 41082 (line 384) 41083* __lshruha3: Fixed-point fractional library routines. 41084 (line 386) 41085* __lshruhq3: Fixed-point fractional library routines. 41086 (line 380) 41087* __lshruqq3: Fixed-point fractional library routines. 41088 (line 378) 41089* __lshrusa3: Fixed-point fractional library routines. 41090 (line 388) 41091* __lshrusq3: Fixed-point fractional library routines. 41092 (line 382) 41093* __lshruta3: Fixed-point fractional library routines. 41094 (line 392) 41095* __ltdf2: Soft float library routines. 41096 (line 212) 41097* __ltsf2: Soft float library routines. 41098 (line 211) 41099* __lttf2: Soft float library routines. 41100 (line 213) 41101* __main: Collect2. (line 15) 41102* __moddi3: Integer library routines. 41103 (line 37) 41104* __modsi3: Integer library routines. 41105 (line 36) 41106* __modti3: Integer library routines. 41107 (line 38) 41108* __mulda3: Fixed-point fractional library routines. 41109 (line 171) 41110* __muldc3: Soft float library routines. 41111 (line 241) 41112* __muldf3: Soft float library routines. 41113 (line 40) 41114* __muldi3: Integer library routines. 41115 (line 43) 41116* __muldq3: Fixed-point fractional library routines. 41117 (line 159) 41118* __mulha3: Fixed-point fractional library routines. 41119 (line 169) 41120* __mulhq3: Fixed-point fractional library routines. 41121 (line 156) 41122* __mulqq3: Fixed-point fractional library routines. 41123 (line 155) 41124* __mulsa3: Fixed-point fractional library routines. 41125 (line 170) 41126* __mulsc3: Soft float library routines. 41127 (line 239) 41128* __mulsf3: Soft float library routines. 41129 (line 39) 41130* __mulsi3: Integer library routines. 41131 (line 42) 41132* __mulsq3: Fixed-point fractional library routines. 41133 (line 157) 41134* __multa3: Fixed-point fractional library routines. 41135 (line 173) 41136* __multc3: Soft float library routines. 41137 (line 243) 41138* __multf3: Soft float library routines. 41139 (line 42) 41140* __multi3: Integer library routines. 41141 (line 44) 41142* __muluda3: Fixed-point fractional library routines. 41143 (line 179) 41144* __muludq3: Fixed-point fractional library routines. 41145 (line 167) 41146* __muluha3: Fixed-point fractional library routines. 41147 (line 175) 41148* __muluhq3: Fixed-point fractional library routines. 41149 (line 163) 41150* __muluqq3: Fixed-point fractional library routines. 41151 (line 161) 41152* __mulusa3: Fixed-point fractional library routines. 41153 (line 177) 41154* __mulusq3: Fixed-point fractional library routines. 41155 (line 165) 41156* __muluta3: Fixed-point fractional library routines. 41157 (line 181) 41158* __mulvdi3: Integer library routines. 41159 (line 115) 41160* __mulvsi3: Integer library routines. 41161 (line 114) 41162* __mulxc3: Soft float library routines. 41163 (line 245) 41164* __mulxf3: Soft float library routines. 41165 (line 44) 41166* __nedf2: Soft float library routines. 41167 (line 200) 41168* __negda2: Fixed-point fractional library routines. 41169 (line 299) 41170* __negdf2: Soft float library routines. 41171 (line 56) 41172* __negdi2: Integer library routines. 41173 (line 47) 41174* __negdq2: Fixed-point fractional library routines. 41175 (line 289) 41176* __negha2: Fixed-point fractional library routines. 41177 (line 297) 41178* __neghq2: Fixed-point fractional library routines. 41179 (line 287) 41180* __negqq2: Fixed-point fractional library routines. 41181 (line 286) 41182* __negsa2: Fixed-point fractional library routines. 41183 (line 298) 41184* __negsf2: Soft float library routines. 41185 (line 55) 41186* __negsq2: Fixed-point fractional library routines. 41187 (line 288) 41188* __negta2: Fixed-point fractional library routines. 41189 (line 300) 41190* __negtf2: Soft float library routines. 41191 (line 57) 41192* __negti2: Integer library routines. 41193 (line 48) 41194* __neguda2: Fixed-point fractional library routines. 41195 (line 305) 41196* __negudq2: Fixed-point fractional library routines. 41197 (line 296) 41198* __neguha2: Fixed-point fractional library routines. 41199 (line 302) 41200* __neguhq2: Fixed-point fractional library routines. 41201 (line 292) 41202* __neguqq2: Fixed-point fractional library routines. 41203 (line 291) 41204* __negusa2: Fixed-point fractional library routines. 41205 (line 303) 41206* __negusq2: Fixed-point fractional library routines. 41207 (line 294) 41208* __neguta2: Fixed-point fractional library routines. 41209 (line 307) 41210* __negvdi2: Integer library routines. 41211 (line 119) 41212* __negvsi2: Integer library routines. 41213 (line 118) 41214* __negxf2: Soft float library routines. 41215 (line 58) 41216* __nesf2: Soft float library routines. 41217 (line 199) 41218* __netf2: Soft float library routines. 41219 (line 201) 41220* __paritydi2: Integer library routines. 41221 (line 151) 41222* __paritysi2: Integer library routines. 41223 (line 150) 41224* __parityti2: Integer library routines. 41225 (line 152) 41226* __popcountdi2: Integer library routines. 41227 (line 157) 41228* __popcountsi2: Integer library routines. 41229 (line 156) 41230* __popcountti2: Integer library routines. 41231 (line 158) 41232* __powidf2: Soft float library routines. 41233 (line 233) 41234* __powisf2: Soft float library routines. 41235 (line 232) 41236* __powitf2: Soft float library routines. 41237 (line 234) 41238* __powixf2: Soft float library routines. 41239 (line 235) 41240* __satfractdadq: Fixed-point fractional library routines. 41241 (line 1153) 41242* __satfractdaha2: Fixed-point fractional library routines. 41243 (line 1154) 41244* __satfractdahq: Fixed-point fractional library routines. 41245 (line 1151) 41246* __satfractdaqq: Fixed-point fractional library routines. 41247 (line 1150) 41248* __satfractdasa2: Fixed-point fractional library routines. 41249 (line 1155) 41250* __satfractdasq: Fixed-point fractional library routines. 41251 (line 1152) 41252* __satfractdata2: Fixed-point fractional library routines. 41253 (line 1156) 41254* __satfractdauda: Fixed-point fractional library routines. 41255 (line 1166) 41256* __satfractdaudq: Fixed-point fractional library routines. 41257 (line 1162) 41258* __satfractdauha: Fixed-point fractional library routines. 41259 (line 1164) 41260* __satfractdauhq: Fixed-point fractional library routines. 41261 (line 1159) 41262* __satfractdauqq: Fixed-point fractional library routines. 41263 (line 1158) 41264* __satfractdausa: Fixed-point fractional library routines. 41265 (line 1165) 41266* __satfractdausq: Fixed-point fractional library routines. 41267 (line 1160) 41268* __satfractdauta: Fixed-point fractional library routines. 41269 (line 1168) 41270* __satfractdfda: Fixed-point fractional library routines. 41271 (line 1506) 41272* __satfractdfdq: Fixed-point fractional library routines. 41273 (line 1503) 41274* __satfractdfha: Fixed-point fractional library routines. 41275 (line 1504) 41276* __satfractdfhq: Fixed-point fractional library routines. 41277 (line 1501) 41278* __satfractdfqq: Fixed-point fractional library routines. 41279 (line 1500) 41280* __satfractdfsa: Fixed-point fractional library routines. 41281 (line 1505) 41282* __satfractdfsq: Fixed-point fractional library routines. 41283 (line 1502) 41284* __satfractdfta: Fixed-point fractional library routines. 41285 (line 1507) 41286* __satfractdfuda: Fixed-point fractional library routines. 41287 (line 1515) 41288* __satfractdfudq: Fixed-point fractional library routines. 41289 (line 1512) 41290* __satfractdfuha: Fixed-point fractional library routines. 41291 (line 1513) 41292* __satfractdfuhq: Fixed-point fractional library routines. 41293 (line 1509) 41294* __satfractdfuqq: Fixed-point fractional library routines. 41295 (line 1508) 41296* __satfractdfusa: Fixed-point fractional library routines. 41297 (line 1514) 41298* __satfractdfusq: Fixed-point fractional library routines. 41299 (line 1510) 41300* __satfractdfuta: Fixed-point fractional library routines. 41301 (line 1517) 41302* __satfractdida: Fixed-point fractional library routines. 41303 (line 1456) 41304* __satfractdidq: Fixed-point fractional library routines. 41305 (line 1453) 41306* __satfractdiha: Fixed-point fractional library routines. 41307 (line 1454) 41308* __satfractdihq: Fixed-point fractional library routines. 41309 (line 1451) 41310* __satfractdiqq: Fixed-point fractional library routines. 41311 (line 1450) 41312* __satfractdisa: Fixed-point fractional library routines. 41313 (line 1455) 41314* __satfractdisq: Fixed-point fractional library routines. 41315 (line 1452) 41316* __satfractdita: Fixed-point fractional library routines. 41317 (line 1457) 41318* __satfractdiuda: Fixed-point fractional library routines. 41319 (line 1464) 41320* __satfractdiudq: Fixed-point fractional library routines. 41321 (line 1461) 41322* __satfractdiuha: Fixed-point fractional library routines. 41323 (line 1462) 41324* __satfractdiuhq: Fixed-point fractional library routines. 41325 (line 1459) 41326* __satfractdiuqq: Fixed-point fractional library routines. 41327 (line 1458) 41328* __satfractdiusa: Fixed-point fractional library routines. 41329 (line 1463) 41330* __satfractdiusq: Fixed-point fractional library routines. 41331 (line 1460) 41332* __satfractdiuta: Fixed-point fractional library routines. 41333 (line 1465) 41334* __satfractdqda: Fixed-point fractional library routines. 41335 (line 1098) 41336* __satfractdqha: Fixed-point fractional library routines. 41337 (line 1096) 41338* __satfractdqhq2: Fixed-point fractional library routines. 41339 (line 1094) 41340* __satfractdqqq2: Fixed-point fractional library routines. 41341 (line 1093) 41342* __satfractdqsa: Fixed-point fractional library routines. 41343 (line 1097) 41344* __satfractdqsq2: Fixed-point fractional library routines. 41345 (line 1095) 41346* __satfractdqta: Fixed-point fractional library routines. 41347 (line 1099) 41348* __satfractdquda: Fixed-point fractional library routines. 41349 (line 1111) 41350* __satfractdqudq: Fixed-point fractional library routines. 41351 (line 1106) 41352* __satfractdquha: Fixed-point fractional library routines. 41353 (line 1108) 41354* __satfractdquhq: Fixed-point fractional library routines. 41355 (line 1102) 41356* __satfractdquqq: Fixed-point fractional library routines. 41357 (line 1101) 41358* __satfractdqusa: Fixed-point fractional library routines. 41359 (line 1109) 41360* __satfractdqusq: Fixed-point fractional library routines. 41361 (line 1104) 41362* __satfractdquta: Fixed-point fractional library routines. 41363 (line 1113) 41364* __satfracthada2: Fixed-point fractional library routines. 41365 (line 1119) 41366* __satfracthadq: Fixed-point fractional library routines. 41367 (line 1117) 41368* __satfracthahq: Fixed-point fractional library routines. 41369 (line 1115) 41370* __satfracthaqq: Fixed-point fractional library routines. 41371 (line 1114) 41372* __satfracthasa2: Fixed-point fractional library routines. 41373 (line 1118) 41374* __satfracthasq: Fixed-point fractional library routines. 41375 (line 1116) 41376* __satfracthata2: Fixed-point fractional library routines. 41377 (line 1120) 41378* __satfracthauda: Fixed-point fractional library routines. 41379 (line 1132) 41380* __satfracthaudq: Fixed-point fractional library routines. 41381 (line 1127) 41382* __satfracthauha: Fixed-point fractional library routines. 41383 (line 1129) 41384* __satfracthauhq: Fixed-point fractional library routines. 41385 (line 1123) 41386* __satfracthauqq: Fixed-point fractional library routines. 41387 (line 1122) 41388* __satfracthausa: Fixed-point fractional library routines. 41389 (line 1130) 41390* __satfracthausq: Fixed-point fractional library routines. 41391 (line 1125) 41392* __satfracthauta: Fixed-point fractional library routines. 41393 (line 1134) 41394* __satfracthida: Fixed-point fractional library routines. 41395 (line 1424) 41396* __satfracthidq: Fixed-point fractional library routines. 41397 (line 1421) 41398* __satfracthiha: Fixed-point fractional library routines. 41399 (line 1422) 41400* __satfracthihq: Fixed-point fractional library routines. 41401 (line 1419) 41402* __satfracthiqq: Fixed-point fractional library routines. 41403 (line 1418) 41404* __satfracthisa: Fixed-point fractional library routines. 41405 (line 1423) 41406* __satfracthisq: Fixed-point fractional library routines. 41407 (line 1420) 41408* __satfracthita: Fixed-point fractional library routines. 41409 (line 1425) 41410* __satfracthiuda: Fixed-point fractional library routines. 41411 (line 1432) 41412* __satfracthiudq: Fixed-point fractional library routines. 41413 (line 1429) 41414* __satfracthiuha: Fixed-point fractional library routines. 41415 (line 1430) 41416* __satfracthiuhq: Fixed-point fractional library routines. 41417 (line 1427) 41418* __satfracthiuqq: Fixed-point fractional library routines. 41419 (line 1426) 41420* __satfracthiusa: Fixed-point fractional library routines. 41421 (line 1431) 41422* __satfracthiusq: Fixed-point fractional library routines. 41423 (line 1428) 41424* __satfracthiuta: Fixed-point fractional library routines. 41425 (line 1433) 41426* __satfracthqda: Fixed-point fractional library routines. 41427 (line 1064) 41428* __satfracthqdq2: Fixed-point fractional library routines. 41429 (line 1061) 41430* __satfracthqha: Fixed-point fractional library routines. 41431 (line 1062) 41432* __satfracthqqq2: Fixed-point fractional library routines. 41433 (line 1059) 41434* __satfracthqsa: Fixed-point fractional library routines. 41435 (line 1063) 41436* __satfracthqsq2: Fixed-point fractional library routines. 41437 (line 1060) 41438* __satfracthqta: Fixed-point fractional library routines. 41439 (line 1065) 41440* __satfracthquda: Fixed-point fractional library routines. 41441 (line 1072) 41442* __satfracthqudq: Fixed-point fractional library routines. 41443 (line 1069) 41444* __satfracthquha: Fixed-point fractional library routines. 41445 (line 1070) 41446* __satfracthquhq: Fixed-point fractional library routines. 41447 (line 1067) 41448* __satfracthquqq: Fixed-point fractional library routines. 41449 (line 1066) 41450* __satfracthqusa: Fixed-point fractional library routines. 41451 (line 1071) 41452* __satfracthqusq: Fixed-point fractional library routines. 41453 (line 1068) 41454* __satfracthquta: Fixed-point fractional library routines. 41455 (line 1073) 41456* __satfractqida: Fixed-point fractional library routines. 41457 (line 1402) 41458* __satfractqidq: Fixed-point fractional library routines. 41459 (line 1399) 41460* __satfractqiha: Fixed-point fractional library routines. 41461 (line 1400) 41462* __satfractqihq: Fixed-point fractional library routines. 41463 (line 1397) 41464* __satfractqiqq: Fixed-point fractional library routines. 41465 (line 1396) 41466* __satfractqisa: Fixed-point fractional library routines. 41467 (line 1401) 41468* __satfractqisq: Fixed-point fractional library routines. 41469 (line 1398) 41470* __satfractqita: Fixed-point fractional library routines. 41471 (line 1403) 41472* __satfractqiuda: Fixed-point fractional library routines. 41473 (line 1415) 41474* __satfractqiudq: Fixed-point fractional library routines. 41475 (line 1410) 41476* __satfractqiuha: Fixed-point fractional library routines. 41477 (line 1412) 41478* __satfractqiuhq: Fixed-point fractional library routines. 41479 (line 1406) 41480* __satfractqiuqq: Fixed-point fractional library routines. 41481 (line 1405) 41482* __satfractqiusa: Fixed-point fractional library routines. 41483 (line 1413) 41484* __satfractqiusq: Fixed-point fractional library routines. 41485 (line 1408) 41486* __satfractqiuta: Fixed-point fractional library routines. 41487 (line 1417) 41488* __satfractqqda: Fixed-point fractional library routines. 41489 (line 1043) 41490* __satfractqqdq2: Fixed-point fractional library routines. 41491 (line 1040) 41492* __satfractqqha: Fixed-point fractional library routines. 41493 (line 1041) 41494* __satfractqqhq2: Fixed-point fractional library routines. 41495 (line 1038) 41496* __satfractqqsa: Fixed-point fractional library routines. 41497 (line 1042) 41498* __satfractqqsq2: Fixed-point fractional library routines. 41499 (line 1039) 41500* __satfractqqta: Fixed-point fractional library routines. 41501 (line 1044) 41502* __satfractqquda: Fixed-point fractional library routines. 41503 (line 1056) 41504* __satfractqqudq: Fixed-point fractional library routines. 41505 (line 1051) 41506* __satfractqquha: Fixed-point fractional library routines. 41507 (line 1053) 41508* __satfractqquhq: Fixed-point fractional library routines. 41509 (line 1047) 41510* __satfractqquqq: Fixed-point fractional library routines. 41511 (line 1046) 41512* __satfractqqusa: Fixed-point fractional library routines. 41513 (line 1054) 41514* __satfractqqusq: Fixed-point fractional library routines. 41515 (line 1049) 41516* __satfractqquta: Fixed-point fractional library routines. 41517 (line 1058) 41518* __satfractsada2: Fixed-point fractional library routines. 41519 (line 1140) 41520* __satfractsadq: Fixed-point fractional library routines. 41521 (line 1138) 41522* __satfractsaha2: Fixed-point fractional library routines. 41523 (line 1139) 41524* __satfractsahq: Fixed-point fractional library routines. 41525 (line 1136) 41526* __satfractsaqq: Fixed-point fractional library routines. 41527 (line 1135) 41528* __satfractsasq: Fixed-point fractional library routines. 41529 (line 1137) 41530* __satfractsata2: Fixed-point fractional library routines. 41531 (line 1141) 41532* __satfractsauda: Fixed-point fractional library routines. 41533 (line 1148) 41534* __satfractsaudq: Fixed-point fractional library routines. 41535 (line 1145) 41536* __satfractsauha: Fixed-point fractional library routines. 41537 (line 1146) 41538* __satfractsauhq: Fixed-point fractional library routines. 41539 (line 1143) 41540* __satfractsauqq: Fixed-point fractional library routines. 41541 (line 1142) 41542* __satfractsausa: Fixed-point fractional library routines. 41543 (line 1147) 41544* __satfractsausq: Fixed-point fractional library routines. 41545 (line 1144) 41546* __satfractsauta: Fixed-point fractional library routines. 41547 (line 1149) 41548* __satfractsfda: Fixed-point fractional library routines. 41549 (line 1490) 41550* __satfractsfdq: Fixed-point fractional library routines. 41551 (line 1487) 41552* __satfractsfha: Fixed-point fractional library routines. 41553 (line 1488) 41554* __satfractsfhq: Fixed-point fractional library routines. 41555 (line 1485) 41556* __satfractsfqq: Fixed-point fractional library routines. 41557 (line 1484) 41558* __satfractsfsa: Fixed-point fractional library routines. 41559 (line 1489) 41560* __satfractsfsq: Fixed-point fractional library routines. 41561 (line 1486) 41562* __satfractsfta: Fixed-point fractional library routines. 41563 (line 1491) 41564* __satfractsfuda: Fixed-point fractional library routines. 41565 (line 1498) 41566* __satfractsfudq: Fixed-point fractional library routines. 41567 (line 1495) 41568* __satfractsfuha: Fixed-point fractional library routines. 41569 (line 1496) 41570* __satfractsfuhq: Fixed-point fractional library routines. 41571 (line 1493) 41572* __satfractsfuqq: Fixed-point fractional library routines. 41573 (line 1492) 41574* __satfractsfusa: Fixed-point fractional library routines. 41575 (line 1497) 41576* __satfractsfusq: Fixed-point fractional library routines. 41577 (line 1494) 41578* __satfractsfuta: Fixed-point fractional library routines. 41579 (line 1499) 41580* __satfractsida: Fixed-point fractional library routines. 41581 (line 1440) 41582* __satfractsidq: Fixed-point fractional library routines. 41583 (line 1437) 41584* __satfractsiha: Fixed-point fractional library routines. 41585 (line 1438) 41586* __satfractsihq: Fixed-point fractional library routines. 41587 (line 1435) 41588* __satfractsiqq: Fixed-point fractional library routines. 41589 (line 1434) 41590* __satfractsisa: Fixed-point fractional library routines. 41591 (line 1439) 41592* __satfractsisq: Fixed-point fractional library routines. 41593 (line 1436) 41594* __satfractsita: Fixed-point fractional library routines. 41595 (line 1441) 41596* __satfractsiuda: Fixed-point fractional library routines. 41597 (line 1448) 41598* __satfractsiudq: Fixed-point fractional library routines. 41599 (line 1445) 41600* __satfractsiuha: Fixed-point fractional library routines. 41601 (line 1446) 41602* __satfractsiuhq: Fixed-point fractional library routines. 41603 (line 1443) 41604* __satfractsiuqq: Fixed-point fractional library routines. 41605 (line 1442) 41606* __satfractsiusa: Fixed-point fractional library routines. 41607 (line 1447) 41608* __satfractsiusq: Fixed-point fractional library routines. 41609 (line 1444) 41610* __satfractsiuta: Fixed-point fractional library routines. 41611 (line 1449) 41612* __satfractsqda: Fixed-point fractional library routines. 41613 (line 1079) 41614* __satfractsqdq2: Fixed-point fractional library routines. 41615 (line 1076) 41616* __satfractsqha: Fixed-point fractional library routines. 41617 (line 1077) 41618* __satfractsqhq2: Fixed-point fractional library routines. 41619 (line 1075) 41620* __satfractsqqq2: Fixed-point fractional library routines. 41621 (line 1074) 41622* __satfractsqsa: Fixed-point fractional library routines. 41623 (line 1078) 41624* __satfractsqta: Fixed-point fractional library routines. 41625 (line 1080) 41626* __satfractsquda: Fixed-point fractional library routines. 41627 (line 1090) 41628* __satfractsqudq: Fixed-point fractional library routines. 41629 (line 1086) 41630* __satfractsquha: Fixed-point fractional library routines. 41631 (line 1088) 41632* __satfractsquhq: Fixed-point fractional library routines. 41633 (line 1083) 41634* __satfractsquqq: Fixed-point fractional library routines. 41635 (line 1082) 41636* __satfractsqusa: Fixed-point fractional library routines. 41637 (line 1089) 41638* __satfractsqusq: Fixed-point fractional library routines. 41639 (line 1084) 41640* __satfractsquta: Fixed-point fractional library routines. 41641 (line 1092) 41642* __satfracttada2: Fixed-point fractional library routines. 41643 (line 1175) 41644* __satfracttadq: Fixed-point fractional library routines. 41645 (line 1172) 41646* __satfracttaha2: Fixed-point fractional library routines. 41647 (line 1173) 41648* __satfracttahq: Fixed-point fractional library routines. 41649 (line 1170) 41650* __satfracttaqq: Fixed-point fractional library routines. 41651 (line 1169) 41652* __satfracttasa2: Fixed-point fractional library routines. 41653 (line 1174) 41654* __satfracttasq: Fixed-point fractional library routines. 41655 (line 1171) 41656* __satfracttauda: Fixed-point fractional library routines. 41657 (line 1187) 41658* __satfracttaudq: Fixed-point fractional library routines. 41659 (line 1182) 41660* __satfracttauha: Fixed-point fractional library routines. 41661 (line 1184) 41662* __satfracttauhq: Fixed-point fractional library routines. 41663 (line 1178) 41664* __satfracttauqq: Fixed-point fractional library routines. 41665 (line 1177) 41666* __satfracttausa: Fixed-point fractional library routines. 41667 (line 1185) 41668* __satfracttausq: Fixed-point fractional library routines. 41669 (line 1180) 41670* __satfracttauta: Fixed-point fractional library routines. 41671 (line 1189) 41672* __satfracttida: Fixed-point fractional library routines. 41673 (line 1472) 41674* __satfracttidq: Fixed-point fractional library routines. 41675 (line 1469) 41676* __satfracttiha: Fixed-point fractional library routines. 41677 (line 1470) 41678* __satfracttihq: Fixed-point fractional library routines. 41679 (line 1467) 41680* __satfracttiqq: Fixed-point fractional library routines. 41681 (line 1466) 41682* __satfracttisa: Fixed-point fractional library routines. 41683 (line 1471) 41684* __satfracttisq: Fixed-point fractional library routines. 41685 (line 1468) 41686* __satfracttita: Fixed-point fractional library routines. 41687 (line 1473) 41688* __satfracttiuda: Fixed-point fractional library routines. 41689 (line 1481) 41690* __satfracttiudq: Fixed-point fractional library routines. 41691 (line 1478) 41692* __satfracttiuha: Fixed-point fractional library routines. 41693 (line 1479) 41694* __satfracttiuhq: Fixed-point fractional library routines. 41695 (line 1475) 41696* __satfracttiuqq: Fixed-point fractional library routines. 41697 (line 1474) 41698* __satfracttiusa: Fixed-point fractional library routines. 41699 (line 1480) 41700* __satfracttiusq: Fixed-point fractional library routines. 41701 (line 1476) 41702* __satfracttiuta: Fixed-point fractional library routines. 41703 (line 1483) 41704* __satfractudada: Fixed-point fractional library routines. 41705 (line 1351) 41706* __satfractudadq: Fixed-point fractional library routines. 41707 (line 1347) 41708* __satfractudaha: Fixed-point fractional library routines. 41709 (line 1349) 41710* __satfractudahq: Fixed-point fractional library routines. 41711 (line 1344) 41712* __satfractudaqq: Fixed-point fractional library routines. 41713 (line 1343) 41714* __satfractudasa: Fixed-point fractional library routines. 41715 (line 1350) 41716* __satfractudasq: Fixed-point fractional library routines. 41717 (line 1345) 41718* __satfractudata: Fixed-point fractional library routines. 41719 (line 1353) 41720* __satfractudaudq: Fixed-point fractional library routines. 41721 (line 1361) 41722* __satfractudauha2: Fixed-point fractional library routines. 41723 (line 1363) 41724* __satfractudauhq: Fixed-point fractional library routines. 41725 (line 1357) 41726* __satfractudauqq: Fixed-point fractional library routines. 41727 (line 1355) 41728* __satfractudausa2: Fixed-point fractional library routines. 41729 (line 1365) 41730* __satfractudausq: Fixed-point fractional library routines. 41731 (line 1359) 41732* __satfractudauta2: Fixed-point fractional library routines. 41733 (line 1367) 41734* __satfractudqda: Fixed-point fractional library routines. 41735 (line 1276) 41736* __satfractudqdq: Fixed-point fractional library routines. 41737 (line 1271) 41738* __satfractudqha: Fixed-point fractional library routines. 41739 (line 1273) 41740* __satfractudqhq: Fixed-point fractional library routines. 41741 (line 1267) 41742* __satfractudqqq: Fixed-point fractional library routines. 41743 (line 1266) 41744* __satfractudqsa: Fixed-point fractional library routines. 41745 (line 1274) 41746* __satfractudqsq: Fixed-point fractional library routines. 41747 (line 1269) 41748* __satfractudqta: Fixed-point fractional library routines. 41749 (line 1278) 41750* __satfractudquda: Fixed-point fractional library routines. 41751 (line 1290) 41752* __satfractudquha: Fixed-point fractional library routines. 41753 (line 1286) 41754* __satfractudquhq2: Fixed-point fractional library routines. 41755 (line 1282) 41756* __satfractudquqq2: Fixed-point fractional library routines. 41757 (line 1280) 41758* __satfractudqusa: Fixed-point fractional library routines. 41759 (line 1288) 41760* __satfractudqusq2: Fixed-point fractional library routines. 41761 (line 1284) 41762* __satfractudquta: Fixed-point fractional library routines. 41763 (line 1292) 41764* __satfractuhada: Fixed-point fractional library routines. 41765 (line 1304) 41766* __satfractuhadq: Fixed-point fractional library routines. 41767 (line 1299) 41768* __satfractuhaha: Fixed-point fractional library routines. 41769 (line 1301) 41770* __satfractuhahq: Fixed-point fractional library routines. 41771 (line 1295) 41772* __satfractuhaqq: Fixed-point fractional library routines. 41773 (line 1294) 41774* __satfractuhasa: Fixed-point fractional library routines. 41775 (line 1302) 41776* __satfractuhasq: Fixed-point fractional library routines. 41777 (line 1297) 41778* __satfractuhata: Fixed-point fractional library routines. 41779 (line 1306) 41780* __satfractuhauda2: Fixed-point fractional library routines. 41781 (line 1318) 41782* __satfractuhaudq: Fixed-point fractional library routines. 41783 (line 1314) 41784* __satfractuhauhq: Fixed-point fractional library routines. 41785 (line 1310) 41786* __satfractuhauqq: Fixed-point fractional library routines. 41787 (line 1308) 41788* __satfractuhausa2: Fixed-point fractional library routines. 41789 (line 1316) 41790* __satfractuhausq: Fixed-point fractional library routines. 41791 (line 1312) 41792* __satfractuhauta2: Fixed-point fractional library routines. 41793 (line 1320) 41794* __satfractuhqda: Fixed-point fractional library routines. 41795 (line 1224) 41796* __satfractuhqdq: Fixed-point fractional library routines. 41797 (line 1221) 41798* __satfractuhqha: Fixed-point fractional library routines. 41799 (line 1222) 41800* __satfractuhqhq: Fixed-point fractional library routines. 41801 (line 1219) 41802* __satfractuhqqq: Fixed-point fractional library routines. 41803 (line 1218) 41804* __satfractuhqsa: Fixed-point fractional library routines. 41805 (line 1223) 41806* __satfractuhqsq: Fixed-point fractional library routines. 41807 (line 1220) 41808* __satfractuhqta: Fixed-point fractional library routines. 41809 (line 1225) 41810* __satfractuhquda: Fixed-point fractional library routines. 41811 (line 1236) 41812* __satfractuhqudq2: Fixed-point fractional library routines. 41813 (line 1231) 41814* __satfractuhquha: Fixed-point fractional library routines. 41815 (line 1233) 41816* __satfractuhquqq2: Fixed-point fractional library routines. 41817 (line 1227) 41818* __satfractuhqusa: Fixed-point fractional library routines. 41819 (line 1234) 41820* __satfractuhqusq2: Fixed-point fractional library routines. 41821 (line 1229) 41822* __satfractuhquta: Fixed-point fractional library routines. 41823 (line 1238) 41824* __satfractunsdida: Fixed-point fractional library routines. 41825 (line 1834) 41826* __satfractunsdidq: Fixed-point fractional library routines. 41827 (line 1831) 41828* __satfractunsdiha: Fixed-point fractional library routines. 41829 (line 1832) 41830* __satfractunsdihq: Fixed-point fractional library routines. 41831 (line 1828) 41832* __satfractunsdiqq: Fixed-point fractional library routines. 41833 (line 1827) 41834* __satfractunsdisa: Fixed-point fractional library routines. 41835 (line 1833) 41836* __satfractunsdisq: Fixed-point fractional library routines. 41837 (line 1829) 41838* __satfractunsdita: Fixed-point fractional library routines. 41839 (line 1836) 41840* __satfractunsdiuda: Fixed-point fractional library routines. 41841 (line 1850) 41842* __satfractunsdiudq: Fixed-point fractional library routines. 41843 (line 1844) 41844* __satfractunsdiuha: Fixed-point fractional library routines. 41845 (line 1846) 41846* __satfractunsdiuhq: Fixed-point fractional library routines. 41847 (line 1840) 41848* __satfractunsdiuqq: Fixed-point fractional library routines. 41849 (line 1838) 41850* __satfractunsdiusa: Fixed-point fractional library routines. 41851 (line 1848) 41852* __satfractunsdiusq: Fixed-point fractional library routines. 41853 (line 1842) 41854* __satfractunsdiuta: Fixed-point fractional library routines. 41855 (line 1852) 41856* __satfractunshida: Fixed-point fractional library routines. 41857 (line 1786) 41858* __satfractunshidq: Fixed-point fractional library routines. 41859 (line 1783) 41860* __satfractunshiha: Fixed-point fractional library routines. 41861 (line 1784) 41862* __satfractunshihq: Fixed-point fractional library routines. 41863 (line 1780) 41864* __satfractunshiqq: Fixed-point fractional library routines. 41865 (line 1779) 41866* __satfractunshisa: Fixed-point fractional library routines. 41867 (line 1785) 41868* __satfractunshisq: Fixed-point fractional library routines. 41869 (line 1781) 41870* __satfractunshita: Fixed-point fractional library routines. 41871 (line 1788) 41872* __satfractunshiuda: Fixed-point fractional library routines. 41873 (line 1802) 41874* __satfractunshiudq: Fixed-point fractional library routines. 41875 (line 1796) 41876* __satfractunshiuha: Fixed-point fractional library routines. 41877 (line 1798) 41878* __satfractunshiuhq: Fixed-point fractional library routines. 41879 (line 1792) 41880* __satfractunshiuqq: Fixed-point fractional library routines. 41881 (line 1790) 41882* __satfractunshiusa: Fixed-point fractional library routines. 41883 (line 1800) 41884* __satfractunshiusq: Fixed-point fractional library routines. 41885 (line 1794) 41886* __satfractunshiuta: Fixed-point fractional library routines. 41887 (line 1804) 41888* __satfractunsqida: Fixed-point fractional library routines. 41889 (line 1760) 41890* __satfractunsqidq: Fixed-point fractional library routines. 41891 (line 1757) 41892* __satfractunsqiha: Fixed-point fractional library routines. 41893 (line 1758) 41894* __satfractunsqihq: Fixed-point fractional library routines. 41895 (line 1754) 41896* __satfractunsqiqq: Fixed-point fractional library routines. 41897 (line 1753) 41898* __satfractunsqisa: Fixed-point fractional library routines. 41899 (line 1759) 41900* __satfractunsqisq: Fixed-point fractional library routines. 41901 (line 1755) 41902* __satfractunsqita: Fixed-point fractional library routines. 41903 (line 1762) 41904* __satfractunsqiuda: Fixed-point fractional library routines. 41905 (line 1776) 41906* __satfractunsqiudq: Fixed-point fractional library routines. 41907 (line 1770) 41908* __satfractunsqiuha: Fixed-point fractional library routines. 41909 (line 1772) 41910* __satfractunsqiuhq: Fixed-point fractional library routines. 41911 (line 1766) 41912* __satfractunsqiuqq: Fixed-point fractional library routines. 41913 (line 1764) 41914* __satfractunsqiusa: Fixed-point fractional library routines. 41915 (line 1774) 41916* __satfractunsqiusq: Fixed-point fractional library routines. 41917 (line 1768) 41918* __satfractunsqiuta: Fixed-point fractional library routines. 41919 (line 1778) 41920* __satfractunssida: Fixed-point fractional library routines. 41921 (line 1811) 41922* __satfractunssidq: Fixed-point fractional library routines. 41923 (line 1808) 41924* __satfractunssiha: Fixed-point fractional library routines. 41925 (line 1809) 41926* __satfractunssihq: Fixed-point fractional library routines. 41927 (line 1806) 41928* __satfractunssiqq: Fixed-point fractional library routines. 41929 (line 1805) 41930* __satfractunssisa: Fixed-point fractional library routines. 41931 (line 1810) 41932* __satfractunssisq: Fixed-point fractional library routines. 41933 (line 1807) 41934* __satfractunssita: Fixed-point fractional library routines. 41935 (line 1812) 41936* __satfractunssiuda: Fixed-point fractional library routines. 41937 (line 1824) 41938* __satfractunssiudq: Fixed-point fractional library routines. 41939 (line 1819) 41940* __satfractunssiuha: Fixed-point fractional library routines. 41941 (line 1821) 41942* __satfractunssiuhq: Fixed-point fractional library routines. 41943 (line 1815) 41944* __satfractunssiuqq: Fixed-point fractional library routines. 41945 (line 1814) 41946* __satfractunssiusa: Fixed-point fractional library routines. 41947 (line 1822) 41948* __satfractunssiusq: Fixed-point fractional library routines. 41949 (line 1817) 41950* __satfractunssiuta: Fixed-point fractional library routines. 41951 (line 1826) 41952* __satfractunstida: Fixed-point fractional library routines. 41953 (line 1864) 41954* __satfractunstidq: Fixed-point fractional library routines. 41955 (line 1859) 41956* __satfractunstiha: Fixed-point fractional library routines. 41957 (line 1861) 41958* __satfractunstihq: Fixed-point fractional library routines. 41959 (line 1855) 41960* __satfractunstiqq: Fixed-point fractional library routines. 41961 (line 1854) 41962* __satfractunstisa: Fixed-point fractional library routines. 41963 (line 1862) 41964* __satfractunstisq: Fixed-point fractional library routines. 41965 (line 1857) 41966* __satfractunstita: Fixed-point fractional library routines. 41967 (line 1866) 41968* __satfractunstiuda: Fixed-point fractional library routines. 41969 (line 1880) 41970* __satfractunstiudq: Fixed-point fractional library routines. 41971 (line 1874) 41972* __satfractunstiuha: Fixed-point fractional library routines. 41973 (line 1876) 41974* __satfractunstiuhq: Fixed-point fractional library routines. 41975 (line 1870) 41976* __satfractunstiuqq: Fixed-point fractional library routines. 41977 (line 1868) 41978* __satfractunstiusa: Fixed-point fractional library routines. 41979 (line 1878) 41980* __satfractunstiusq: Fixed-point fractional library routines. 41981 (line 1872) 41982* __satfractunstiuta: Fixed-point fractional library routines. 41983 (line 1882) 41984* __satfractuqqda: Fixed-point fractional library routines. 41985 (line 1201) 41986* __satfractuqqdq: Fixed-point fractional library routines. 41987 (line 1196) 41988* __satfractuqqha: Fixed-point fractional library routines. 41989 (line 1198) 41990* __satfractuqqhq: Fixed-point fractional library routines. 41991 (line 1192) 41992* __satfractuqqqq: Fixed-point fractional library routines. 41993 (line 1191) 41994* __satfractuqqsa: Fixed-point fractional library routines. 41995 (line 1199) 41996* __satfractuqqsq: Fixed-point fractional library routines. 41997 (line 1194) 41998* __satfractuqqta: Fixed-point fractional library routines. 41999 (line 1203) 42000* __satfractuqquda: Fixed-point fractional library routines. 42001 (line 1215) 42002* __satfractuqqudq2: Fixed-point fractional library routines. 42003 (line 1209) 42004* __satfractuqquha: Fixed-point fractional library routines. 42005 (line 1211) 42006* __satfractuqquhq2: Fixed-point fractional library routines. 42007 (line 1205) 42008* __satfractuqqusa: Fixed-point fractional library routines. 42009 (line 1213) 42010* __satfractuqqusq2: Fixed-point fractional library routines. 42011 (line 1207) 42012* __satfractuqquta: Fixed-point fractional library routines. 42013 (line 1217) 42014* __satfractusada: Fixed-point fractional library routines. 42015 (line 1327) 42016* __satfractusadq: Fixed-point fractional library routines. 42017 (line 1324) 42018* __satfractusaha: Fixed-point fractional library routines. 42019 (line 1325) 42020* __satfractusahq: Fixed-point fractional library routines. 42021 (line 1322) 42022* __satfractusaqq: Fixed-point fractional library routines. 42023 (line 1321) 42024* __satfractusasa: Fixed-point fractional library routines. 42025 (line 1326) 42026* __satfractusasq: Fixed-point fractional library routines. 42027 (line 1323) 42028* __satfractusata: Fixed-point fractional library routines. 42029 (line 1328) 42030* __satfractusauda2: Fixed-point fractional library routines. 42031 (line 1339) 42032* __satfractusaudq: Fixed-point fractional library routines. 42033 (line 1335) 42034* __satfractusauha2: Fixed-point fractional library routines. 42035 (line 1337) 42036* __satfractusauhq: Fixed-point fractional library routines. 42037 (line 1331) 42038* __satfractusauqq: Fixed-point fractional library routines. 42039 (line 1330) 42040* __satfractusausq: Fixed-point fractional library routines. 42041 (line 1333) 42042* __satfractusauta2: Fixed-point fractional library routines. 42043 (line 1341) 42044* __satfractusqda: Fixed-point fractional library routines. 42045 (line 1248) 42046* __satfractusqdq: Fixed-point fractional library routines. 42047 (line 1244) 42048* __satfractusqha: Fixed-point fractional library routines. 42049 (line 1246) 42050* __satfractusqhq: Fixed-point fractional library routines. 42051 (line 1241) 42052* __satfractusqqq: Fixed-point fractional library routines. 42053 (line 1240) 42054* __satfractusqsa: Fixed-point fractional library routines. 42055 (line 1247) 42056* __satfractusqsq: Fixed-point fractional library routines. 42057 (line 1242) 42058* __satfractusqta: Fixed-point fractional library routines. 42059 (line 1250) 42060* __satfractusquda: Fixed-point fractional library routines. 42061 (line 1262) 42062* __satfractusqudq2: Fixed-point fractional library routines. 42063 (line 1256) 42064* __satfractusquha: Fixed-point fractional library routines. 42065 (line 1258) 42066* __satfractusquhq2: Fixed-point fractional library routines. 42067 (line 1254) 42068* __satfractusquqq2: Fixed-point fractional library routines. 42069 (line 1252) 42070* __satfractusqusa: Fixed-point fractional library routines. 42071 (line 1260) 42072* __satfractusquta: Fixed-point fractional library routines. 42073 (line 1264) 42074* __satfractutada: Fixed-point fractional library routines. 42075 (line 1379) 42076* __satfractutadq: Fixed-point fractional library routines. 42077 (line 1374) 42078* __satfractutaha: Fixed-point fractional library routines. 42079 (line 1376) 42080* __satfractutahq: Fixed-point fractional library routines. 42081 (line 1370) 42082* __satfractutaqq: Fixed-point fractional library routines. 42083 (line 1369) 42084* __satfractutasa: Fixed-point fractional library routines. 42085 (line 1377) 42086* __satfractutasq: Fixed-point fractional library routines. 42087 (line 1372) 42088* __satfractutata: Fixed-point fractional library routines. 42089 (line 1381) 42090* __satfractutauda2: Fixed-point fractional library routines. 42091 (line 1395) 42092* __satfractutaudq: Fixed-point fractional library routines. 42093 (line 1389) 42094* __satfractutauha2: Fixed-point fractional library routines. 42095 (line 1391) 42096* __satfractutauhq: Fixed-point fractional library routines. 42097 (line 1385) 42098* __satfractutauqq: Fixed-point fractional library routines. 42099 (line 1383) 42100* __satfractutausa2: Fixed-point fractional library routines. 42101 (line 1393) 42102* __satfractutausq: Fixed-point fractional library routines. 42103 (line 1387) 42104* __ssaddda3: Fixed-point fractional library routines. 42105 (line 67) 42106* __ssadddq3: Fixed-point fractional library routines. 42107 (line 63) 42108* __ssaddha3: Fixed-point fractional library routines. 42109 (line 65) 42110* __ssaddhq3: Fixed-point fractional library routines. 42111 (line 60) 42112* __ssaddqq3: Fixed-point fractional library routines. 42113 (line 59) 42114* __ssaddsa3: Fixed-point fractional library routines. 42115 (line 66) 42116* __ssaddsq3: Fixed-point fractional library routines. 42117 (line 61) 42118* __ssaddta3: Fixed-point fractional library routines. 42119 (line 69) 42120* __ssashlda3: Fixed-point fractional library routines. 42121 (line 402) 42122* __ssashldq3: Fixed-point fractional library routines. 42123 (line 399) 42124* __ssashlha3: Fixed-point fractional library routines. 42125 (line 400) 42126* __ssashlhq3: Fixed-point fractional library routines. 42127 (line 396) 42128* __ssashlsa3: Fixed-point fractional library routines. 42129 (line 401) 42130* __ssashlsq3: Fixed-point fractional library routines. 42131 (line 397) 42132* __ssashlta3: Fixed-point fractional library routines. 42133 (line 404) 42134* __ssdivda3: Fixed-point fractional library routines. 42135 (line 261) 42136* __ssdivdq3: Fixed-point fractional library routines. 42137 (line 257) 42138* __ssdivha3: Fixed-point fractional library routines. 42139 (line 259) 42140* __ssdivhq3: Fixed-point fractional library routines. 42141 (line 254) 42142* __ssdivqq3: Fixed-point fractional library routines. 42143 (line 253) 42144* __ssdivsa3: Fixed-point fractional library routines. 42145 (line 260) 42146* __ssdivsq3: Fixed-point fractional library routines. 42147 (line 255) 42148* __ssdivta3: Fixed-point fractional library routines. 42149 (line 263) 42150* __ssmulda3: Fixed-point fractional library routines. 42151 (line 193) 42152* __ssmuldq3: Fixed-point fractional library routines. 42153 (line 189) 42154* __ssmulha3: Fixed-point fractional library routines. 42155 (line 191) 42156* __ssmulhq3: Fixed-point fractional library routines. 42157 (line 186) 42158* __ssmulqq3: Fixed-point fractional library routines. 42159 (line 185) 42160* __ssmulsa3: Fixed-point fractional library routines. 42161 (line 192) 42162* __ssmulsq3: Fixed-point fractional library routines. 42163 (line 187) 42164* __ssmulta3: Fixed-point fractional library routines. 42165 (line 195) 42166* __ssnegda2: Fixed-point fractional library routines. 42167 (line 316) 42168* __ssnegdq2: Fixed-point fractional library routines. 42169 (line 313) 42170* __ssnegha2: Fixed-point fractional library routines. 42171 (line 314) 42172* __ssneghq2: Fixed-point fractional library routines. 42173 (line 311) 42174* __ssnegqq2: Fixed-point fractional library routines. 42175 (line 310) 42176* __ssnegsa2: Fixed-point fractional library routines. 42177 (line 315) 42178* __ssnegsq2: Fixed-point fractional library routines. 42179 (line 312) 42180* __ssnegta2: Fixed-point fractional library routines. 42181 (line 317) 42182* __sssubda3: Fixed-point fractional library routines. 42183 (line 129) 42184* __sssubdq3: Fixed-point fractional library routines. 42185 (line 125) 42186* __sssubha3: Fixed-point fractional library routines. 42187 (line 127) 42188* __sssubhq3: Fixed-point fractional library routines. 42189 (line 122) 42190* __sssubqq3: Fixed-point fractional library routines. 42191 (line 121) 42192* __sssubsa3: Fixed-point fractional library routines. 42193 (line 128) 42194* __sssubsq3: Fixed-point fractional library routines. 42195 (line 123) 42196* __sssubta3: Fixed-point fractional library routines. 42197 (line 131) 42198* __subda3: Fixed-point fractional library routines. 42199 (line 107) 42200* __subdf3: Soft float library routines. 42201 (line 31) 42202* __subdq3: Fixed-point fractional library routines. 42203 (line 95) 42204* __subha3: Fixed-point fractional library routines. 42205 (line 105) 42206* __subhq3: Fixed-point fractional library routines. 42207 (line 92) 42208* __subqq3: Fixed-point fractional library routines. 42209 (line 91) 42210* __subsa3: Fixed-point fractional library routines. 42211 (line 106) 42212* __subsf3: Soft float library routines. 42213 (line 30) 42214* __subsq3: Fixed-point fractional library routines. 42215 (line 93) 42216* __subta3: Fixed-point fractional library routines. 42217 (line 109) 42218* __subtf3: Soft float library routines. 42219 (line 33) 42220* __subuda3: Fixed-point fractional library routines. 42221 (line 115) 42222* __subudq3: Fixed-point fractional library routines. 42223 (line 103) 42224* __subuha3: Fixed-point fractional library routines. 42225 (line 111) 42226* __subuhq3: Fixed-point fractional library routines. 42227 (line 99) 42228* __subuqq3: Fixed-point fractional library routines. 42229 (line 97) 42230* __subusa3: Fixed-point fractional library routines. 42231 (line 113) 42232* __subusq3: Fixed-point fractional library routines. 42233 (line 101) 42234* __subuta3: Fixed-point fractional library routines. 42235 (line 117) 42236* __subvdi3: Integer library routines. 42237 (line 123) 42238* __subvsi3: Integer library routines. 42239 (line 122) 42240* __subxf3: Soft float library routines. 42241 (line 35) 42242* __truncdfsf2: Soft float library routines. 42243 (line 76) 42244* __trunctfdf2: Soft float library routines. 42245 (line 73) 42246* __trunctfsf2: Soft float library routines. 42247 (line 75) 42248* __truncxfdf2: Soft float library routines. 42249 (line 72) 42250* __truncxfsf2: Soft float library routines. 42251 (line 74) 42252* __ucmpdi2: Integer library routines. 42253 (line 93) 42254* __ucmpti2: Integer library routines. 42255 (line 95) 42256* __udivdi3: Integer library routines. 42257 (line 54) 42258* __udivmoddi3: Integer library routines. 42259 (line 61) 42260* __udivsi3: Integer library routines. 42261 (line 52) 42262* __udivti3: Integer library routines. 42263 (line 56) 42264* __udivuda3: Fixed-point fractional library routines. 42265 (line 246) 42266* __udivudq3: Fixed-point fractional library routines. 42267 (line 240) 42268* __udivuha3: Fixed-point fractional library routines. 42269 (line 242) 42270* __udivuhq3: Fixed-point fractional library routines. 42271 (line 236) 42272* __udivuqq3: Fixed-point fractional library routines. 42273 (line 234) 42274* __udivusa3: Fixed-point fractional library routines. 42275 (line 244) 42276* __udivusq3: Fixed-point fractional library routines. 42277 (line 238) 42278* __udivuta3: Fixed-point fractional library routines. 42279 (line 248) 42280* __umoddi3: Integer library routines. 42281 (line 71) 42282* __umodsi3: Integer library routines. 42283 (line 69) 42284* __umodti3: Integer library routines. 42285 (line 73) 42286* __unorddf2: Soft float library routines. 42287 (line 173) 42288* __unordsf2: Soft float library routines. 42289 (line 172) 42290* __unordtf2: Soft float library routines. 42291 (line 174) 42292* __usadduda3: Fixed-point fractional library routines. 42293 (line 85) 42294* __usaddudq3: Fixed-point fractional library routines. 42295 (line 79) 42296* __usadduha3: Fixed-point fractional library routines. 42297 (line 81) 42298* __usadduhq3: Fixed-point fractional library routines. 42299 (line 75) 42300* __usadduqq3: Fixed-point fractional library routines. 42301 (line 73) 42302* __usaddusa3: Fixed-point fractional library routines. 42303 (line 83) 42304* __usaddusq3: Fixed-point fractional library routines. 42305 (line 77) 42306* __usadduta3: Fixed-point fractional library routines. 42307 (line 87) 42308* __usashluda3: Fixed-point fractional library routines. 42309 (line 421) 42310* __usashludq3: Fixed-point fractional library routines. 42311 (line 415) 42312* __usashluha3: Fixed-point fractional library routines. 42313 (line 417) 42314* __usashluhq3: Fixed-point fractional library routines. 42315 (line 411) 42316* __usashluqq3: Fixed-point fractional library routines. 42317 (line 409) 42318* __usashlusa3: Fixed-point fractional library routines. 42319 (line 419) 42320* __usashlusq3: Fixed-point fractional library routines. 42321 (line 413) 42322* __usashluta3: Fixed-point fractional library routines. 42323 (line 423) 42324* __usdivuda3: Fixed-point fractional library routines. 42325 (line 280) 42326* __usdivudq3: Fixed-point fractional library routines. 42327 (line 274) 42328* __usdivuha3: Fixed-point fractional library routines. 42329 (line 276) 42330* __usdivuhq3: Fixed-point fractional library routines. 42331 (line 270) 42332* __usdivuqq3: Fixed-point fractional library routines. 42333 (line 268) 42334* __usdivusa3: Fixed-point fractional library routines. 42335 (line 278) 42336* __usdivusq3: Fixed-point fractional library routines. 42337 (line 272) 42338* __usdivuta3: Fixed-point fractional library routines. 42339 (line 282) 42340* __usmuluda3: Fixed-point fractional library routines. 42341 (line 212) 42342* __usmuludq3: Fixed-point fractional library routines. 42343 (line 206) 42344* __usmuluha3: Fixed-point fractional library routines. 42345 (line 208) 42346* __usmuluhq3: Fixed-point fractional library routines. 42347 (line 202) 42348* __usmuluqq3: Fixed-point fractional library routines. 42349 (line 200) 42350* __usmulusa3: Fixed-point fractional library routines. 42351 (line 210) 42352* __usmulusq3: Fixed-point fractional library routines. 42353 (line 204) 42354* __usmuluta3: Fixed-point fractional library routines. 42355 (line 214) 42356* __usneguda2: Fixed-point fractional library routines. 42357 (line 331) 42358* __usnegudq2: Fixed-point fractional library routines. 42359 (line 326) 42360* __usneguha2: Fixed-point fractional library routines. 42361 (line 328) 42362* __usneguhq2: Fixed-point fractional library routines. 42363 (line 322) 42364* __usneguqq2: Fixed-point fractional library routines. 42365 (line 321) 42366* __usnegusa2: Fixed-point fractional library routines. 42367 (line 329) 42368* __usnegusq2: Fixed-point fractional library routines. 42369 (line 324) 42370* __usneguta2: Fixed-point fractional library routines. 42371 (line 333) 42372* __ussubuda3: Fixed-point fractional library routines. 42373 (line 148) 42374* __ussubudq3: Fixed-point fractional library routines. 42375 (line 142) 42376* __ussubuha3: Fixed-point fractional library routines. 42377 (line 144) 42378* __ussubuhq3: Fixed-point fractional library routines. 42379 (line 138) 42380* __ussubuqq3: Fixed-point fractional library routines. 42381 (line 136) 42382* __ussubusa3: Fixed-point fractional library routines. 42383 (line 146) 42384* __ussubusq3: Fixed-point fractional library routines. 42385 (line 140) 42386* __ussubuta3: Fixed-point fractional library routines. 42387 (line 150) 42388* abort: Portability. (line 21) 42389* abs: Arithmetic. (line 195) 42390* abs and attributes: Expressions. (line 64) 42391* ABS_EXPR: Unary and Binary Expressions. 42392 (line 6) 42393* absence_set: Processor pipeline description. 42394 (line 220) 42395* absM2 instruction pattern: Standard Names. (line 452) 42396* absolute value: Arithmetic. (line 195) 42397* access to operands: Accessors. (line 6) 42398* access to special operands: Special Accessors. (line 6) 42399* accessors: Accessors. (line 6) 42400* ACCUM_TYPE_SIZE: Type Layout. (line 88) 42401* ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 46) 42402* ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 135) 42403* ADA_LONG_TYPE_SIZE: Type Layout. (line 26) 42404* Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 42405 (line 6) 42406* ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 15) 42407* addM3 instruction pattern: Standard Names. (line 216) 42408* addMODEcc instruction pattern: Standard Names. (line 890) 42409* addr_diff_vec: Side Effects. (line 302) 42410* addr_diff_vec, length of: Insn Lengths. (line 26) 42411* ADDR_EXPR: Storage References. (line 6) 42412* addr_vec: Side Effects. (line 297) 42413* addr_vec, length of: Insn Lengths. (line 26) 42414* address constraints: Simple Constraints. (line 154) 42415* address_operand <1>: Simple Constraints. (line 158) 42416* address_operand: Machine-Independent Predicates. 42417 (line 63) 42418* addressing modes: Addressing Modes. (line 6) 42419* ADJUST_FIELD_ALIGN: Storage Layout. (line 202) 42420* ADJUST_INSN_LENGTH: Insn Lengths. (line 35) 42421* aggregates as return values: Aggregate Return. (line 6) 42422* alias: Alias analysis. (line 6) 42423* ALL_COP_ADDITIONAL_REGISTER_NAMES: MIPS Coprocessors. (line 32) 42424* ALL_REGS: Register Classes. (line 17) 42425* allocate_stack instruction pattern: Standard Names. (line 1190) 42426* alternate entry points: Insns. (line 140) 42427* anchored addresses: Anchored Addresses. (line 6) 42428* and: Arithmetic. (line 153) 42429* and and attributes: Expressions. (line 50) 42430* and, canonicalization of: Insn Canonicalizations. 42431 (line 52) 42432* andM3 instruction pattern: Standard Names. (line 222) 42433* annotations: Annotations. (line 6) 42434* APPLY_RESULT_SIZE: Scalar Return. (line 107) 42435* ARG_POINTER_CFA_OFFSET: Frame Layout. (line 194) 42436* ARG_POINTER_REGNUM: Frame Registers. (line 41) 42437* ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65) 42438* arg_pointer_rtx: Frame Registers. (line 90) 42439* ARGS_GROW_DOWNWARD: Frame Layout. (line 35) 42440* argument passing: Interface. (line 36) 42441* arguments in registers: Register Arguments. (line 6) 42442* arguments on stack: Stack Arguments. (line 6) 42443* arithmetic library: Soft float library routines. 42444 (line 6) 42445* arithmetic shift: Arithmetic. (line 168) 42446* arithmetic shift with signed saturation: Arithmetic. (line 168) 42447* arithmetic shift with unsigned saturation: Arithmetic. (line 168) 42448* arithmetic, in RTL: Arithmetic. (line 6) 42449* ARITHMETIC_TYPE_P: Types for C++. (line 61) 42450* array: Types. (line 6) 42451* ARRAY_RANGE_REF: Storage References. (line 6) 42452* ARRAY_REF: Storage References. (line 6) 42453* ARRAY_TYPE: Types. (line 6) 42454* AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 151) 42455* ashift: Arithmetic. (line 168) 42456* ashift and attributes: Expressions. (line 64) 42457* ashiftrt: Arithmetic. (line 185) 42458* ashiftrt and attributes: Expressions. (line 64) 42459* ashlM3 instruction pattern: Standard Names. (line 431) 42460* ashrM3 instruction pattern: Standard Names. (line 441) 42461* ASM_APP_OFF: File Framework. (line 78) 42462* ASM_APP_ON: File Framework. (line 71) 42463* ASM_COMMENT_START: File Framework. (line 66) 42464* ASM_DECLARE_CLASS_REFERENCE: Label Output. (line 437) 42465* ASM_DECLARE_CONSTANT_NAME: Label Output. (line 128) 42466* ASM_DECLARE_FUNCTION_NAME: Label Output. (line 87) 42467* ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 101) 42468* ASM_DECLARE_OBJECT_NAME: Label Output. (line 114) 42469* ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 143) 42470* ASM_DECLARE_UNRESOLVED_REFERENCE: Label Output. (line 443) 42471* ASM_FINAL_SPEC: Driver. (line 144) 42472* ASM_FINISH_DECLARE_OBJECT: Label Output. (line 151) 42473* ASM_FORMAT_PRIVATE_NAME: Label Output. (line 355) 42474* asm_fprintf: Instruction Output. (line 136) 42475* ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 147) 42476* ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 339) 42477* asm_input: Side Effects. (line 284) 42478* asm_input and /v: Flags. (line 94) 42479* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 82) 42480* ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 72) 42481* asm_noperands: Insns. (line 307) 42482* asm_operands and /v: Flags. (line 94) 42483* asm_operands, RTL sharing: Sharing. (line 45) 42484* asm_operands, usage: Assembler. (line 6) 42485* ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 9) 42486* ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 26) 42487* ASM_OUTPUT_ALIGN: Alignment Output. (line 79) 42488* ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 84) 42489* ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 71) 42490* ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 30) 42491* ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 38) 42492* ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 102) 42493* ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 94) 42494* ASM_OUTPUT_ASCII: Data Output. (line 50) 42495* ASM_OUTPUT_BSS: Uninitialized Data. (line 46) 42496* ASM_OUTPUT_CASE_END: Dispatch Tables. (line 51) 42497* ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 38) 42498* ASM_OUTPUT_COMMON: Uninitialized Data. (line 10) 42499* ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 327) 42500* ASM_OUTPUT_DEF: Label Output. (line 376) 42501* ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 384) 42502* ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 42) 42503* ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 46) 42504* ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 52) 42505* ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 57) 42506* ASM_OUTPUT_EXTERNAL: Label Output. (line 264) 42507* ASM_OUTPUT_FDESC: Data Output. (line 59) 42508* ASM_OUTPUT_IDENT: File Framework. (line 100) 42509* ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 17) 42510* ASM_OUTPUT_LABEL: Label Output. (line 9) 42511* ASM_OUTPUT_LABEL_REF: Label Output. (line 300) 42512* ASM_OUTPUT_LABELREF: Label Output. (line 286) 42513* ASM_OUTPUT_LOCAL: Uninitialized Data. (line 81) 42514* ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 88) 42515* ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 41) 42516* ASM_OUTPUT_OPCODE: Instruction Output. (line 21) 42517* ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 109) 42518* ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 72) 42519* ASM_OUTPUT_REG_POP: Instruction Output. (line 191) 42520* ASM_OUTPUT_REG_PUSH: Instruction Output. (line 186) 42521* ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 35) 42522* ASM_OUTPUT_SKIP: Alignment Output. (line 66) 42523* ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 85) 42524* ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 84) 42525* ASM_OUTPUT_SYMBOL_REF: Label Output. (line 293) 42526* ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 77) 42527* ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 402) 42528* ASM_OUTPUT_WEAKREF: Label Output. (line 203) 42529* ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 67) 42530* ASM_SPEC: Driver. (line 136) 42531* ASM_STABD_OP: DBX Options. (line 36) 42532* ASM_STABN_OP: DBX Options. (line 43) 42533* ASM_STABS_OP: DBX Options. (line 29) 42534* ASM_WEAKEN_DECL: Label Output. (line 195) 42535* ASM_WEAKEN_LABEL: Label Output. (line 182) 42536* assemble_name: Label Output. (line 8) 42537* assemble_name_raw: Label Output. (line 16) 42538* assembler format: File Framework. (line 6) 42539* assembler instructions in RTL: Assembler. (line 6) 42540* ASSEMBLER_DIALECT: Instruction Output. (line 159) 42541* assigning attribute values to insns: Tagging Insns. (line 6) 42542* asterisk in template: Output Statement. (line 29) 42543* atan2M3 instruction pattern: Standard Names. (line 522) 42544* attr <1>: Tagging Insns. (line 54) 42545* attr: Expressions. (line 154) 42546* attr_flag: Expressions. (line 119) 42547* attribute expressions: Expressions. (line 6) 42548* attribute specifications: Attr Example. (line 6) 42549* attribute specifications example: Attr Example. (line 6) 42550* ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 184) 42551* attributes: Attributes. (line 6) 42552* attributes, defining: Defining Attributes. 42553 (line 6) 42554* attributes, target-specific: Target Attributes. (line 6) 42555* autoincrement addressing, availability: Portability. (line 21) 42556* autoincrement/decrement addressing: Simple Constraints. (line 30) 42557* automata_option: Processor pipeline description. 42558 (line 301) 42559* automaton based pipeline description: Processor pipeline description. 42560 (line 6) 42561* automaton based scheduler: Processor pipeline description. 42562 (line 6) 42563* AVOID_CCMODE_COPIES: Values in Registers. 42564 (line 153) 42565* backslash: Output Template. (line 46) 42566* barrier: Insns. (line 160) 42567* barrier and /f: Flags. (line 125) 42568* barrier and /v: Flags. (line 44) 42569* BASE_REG_CLASS: Register Classes. (line 107) 42570* basic block: Basic Blocks. (line 6) 42571* Basic Statements: Basic Statements. (line 6) 42572* basic-block.h: Control Flow. (line 6) 42573* BASIC_BLOCK: Basic Blocks. (line 19) 42574* basic_block: Basic Blocks. (line 6) 42575* BB_HEAD, BB_END: Maintaining the CFG. 42576 (line 88) 42577* bb_seq: GIMPLE sequences. (line 73) 42578* BIGGEST_ALIGNMENT: Storage Layout. (line 174) 42579* BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 195) 42580* BImode: Machine Modes. (line 22) 42581* BIND_EXPR: Unary and Binary Expressions. 42582 (line 6) 42583* BINFO_TYPE: Classes. (line 6) 42584* bit-fields: Bit-Fields. (line 6) 42585* BIT_AND_EXPR: Unary and Binary Expressions. 42586 (line 6) 42587* BIT_IOR_EXPR: Unary and Binary Expressions. 42588 (line 6) 42589* BIT_NOT_EXPR: Unary and Binary Expressions. 42590 (line 6) 42591* BIT_XOR_EXPR: Unary and Binary Expressions. 42592 (line 6) 42593* BITFIELD_NBYTES_LIMITED: Storage Layout. (line 383) 42594* BITS_BIG_ENDIAN: Storage Layout. (line 12) 42595* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8) 42596* BITS_PER_UNIT: Storage Layout. (line 52) 42597* BITS_PER_WORD: Storage Layout. (line 57) 42598* bitwise complement: Arithmetic. (line 149) 42599* bitwise exclusive-or: Arithmetic. (line 163) 42600* bitwise inclusive-or: Arithmetic. (line 158) 42601* bitwise logical-and: Arithmetic. (line 153) 42602* BLKmode: Machine Modes. (line 183) 42603* BLKmode, and function return values: Calls. (line 23) 42604* block statement iterators <1>: Maintaining the CFG. 42605 (line 45) 42606* block statement iterators: Basic Blocks. (line 68) 42607* BLOCK_FOR_INSN, bb_for_stmt: Maintaining the CFG. 42608 (line 40) 42609* BLOCK_REG_PADDING: Register Arguments. (line 228) 42610* blockage instruction pattern: Standard Names. (line 1380) 42611* Blocks: Blocks. (line 6) 42612* bool: Misc. (line 876) 42613* BOOL_TYPE_SIZE: Type Layout. (line 44) 42614* BOOLEAN_TYPE: Types. (line 6) 42615* branch prediction: Profile information. 42616 (line 24) 42617* BRANCH_COST: Costs. (line 52) 42618* break_out_memory_refs: Addressing Modes. (line 131) 42619* BREAK_STMT: Statements for C++. (line 6) 42620* bsi_commit_edge_inserts: Maintaining the CFG. 42621 (line 118) 42622* bsi_end_p: Maintaining the CFG. 42623 (line 60) 42624* bsi_insert_after: Maintaining the CFG. 42625 (line 72) 42626* bsi_insert_before: Maintaining the CFG. 42627 (line 78) 42628* bsi_insert_on_edge: Maintaining the CFG. 42629 (line 118) 42630* bsi_last: Maintaining the CFG. 42631 (line 56) 42632* bsi_next: Maintaining the CFG. 42633 (line 64) 42634* bsi_prev: Maintaining the CFG. 42635 (line 68) 42636* bsi_remove: Maintaining the CFG. 42637 (line 84) 42638* bsi_start: Maintaining the CFG. 42639 (line 52) 42640* BSS_SECTION_ASM_OP: Sections. (line 68) 42641* bswap: Arithmetic. (line 236) 42642* btruncM2 instruction pattern: Standard Names. (line 540) 42643* build0: Macros and Functions. 42644 (line 16) 42645* build1: Macros and Functions. 42646 (line 17) 42647* build2: Macros and Functions. 42648 (line 18) 42649* build3: Macros and Functions. 42650 (line 19) 42651* build4: Macros and Functions. 42652 (line 20) 42653* build5: Macros and Functions. 42654 (line 21) 42655* build6: Macros and Functions. 42656 (line 22) 42657* builtin_longjmp instruction pattern: Standard Names. (line 1283) 42658* builtin_setjmp_receiver instruction pattern: Standard Names. 42659 (line 1273) 42660* builtin_setjmp_setup instruction pattern: Standard Names. (line 1262) 42661* byte_mode: Machine Modes. (line 336) 42662* BYTES_BIG_ENDIAN: Storage Layout. (line 24) 42663* BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 221) 42664* C statements for assembler output: Output Statement. (line 6) 42665* C99 math functions, implicit usage: Library Calls. (line 76) 42666* C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 128) 42667* c_register_pragma: Misc. (line 404) 42668* c_register_pragma_with_expansion: Misc. (line 406) 42669* call <1>: Side Effects. (line 86) 42670* call: Flags. (line 239) 42671* call instruction pattern: Standard Names. (line 937) 42672* call usage: Calls. (line 10) 42673* call, in call_insn: Flags. (line 33) 42674* call, in mem: Flags. (line 99) 42675* call-clobbered register: Register Basics. (line 35) 42676* call-saved register: Register Basics. (line 35) 42677* call-used register: Register Basics. (line 35) 42678* CALL_EXPR: Unary and Binary Expressions. 42679 (line 6) 42680* call_insn: Insns. (line 95) 42681* call_insn and /c: Flags. (line 33) 42682* call_insn and /f: Flags. (line 125) 42683* call_insn and /i: Flags. (line 24) 42684* call_insn and /j: Flags. (line 179) 42685* call_insn and /s: Flags. (line 49) 42686* call_insn and /u: Flags. (line 19) 42687* call_insn and /u or /i: Flags. (line 29) 42688* call_insn and /v: Flags. (line 44) 42689* CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 42690* call_pop instruction pattern: Standard Names. (line 965) 42691* CALL_POPS_ARGS: Stack Arguments. (line 130) 42692* CALL_REALLY_USED_REGISTERS: Register Basics. (line 46) 42693* CALL_USED_REGISTERS: Register Basics. (line 35) 42694* call_used_regs: Register Basics. (line 59) 42695* call_value instruction pattern: Standard Names. (line 957) 42696* call_value_pop instruction pattern: Standard Names. (line 965) 42697* CALLER_SAVE_PROFITABLE: Caller Saves. (line 11) 42698* calling conventions: Stack and Calling. (line 6) 42699* calling functions in RTL: Calls. (line 6) 42700* can_create_pseudo_p: Standard Names. (line 75) 42701* CAN_DEBUG_WITHOUT_FP: Run-time Target. (line 160) 42702* can_fallthru: Basic Blocks. (line 57) 42703* canadian: Configure Terms. (line 6) 42704* CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 496) 42705* CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory. 42706 (line 280) 42707* canonicalization of instructions: Insn Canonicalizations. 42708 (line 6) 42709* CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 42710 (line 55) 42711* canonicalize_funcptr_for_compare instruction pattern: Standard Names. 42712 (line 1121) 42713* CASE_USE_BIT_TESTS: Misc. (line 54) 42714* CASE_VECTOR_MODE: Misc. (line 27) 42715* CASE_VECTOR_PC_RELATIVE: Misc. (line 40) 42716* CASE_VECTOR_SHORTEN_MODE: Misc. (line 31) 42717* casesi instruction pattern: Standard Names. (line 1045) 42718* cbranchMODE4 instruction pattern: Standard Names. (line 926) 42719* cc0 <1>: CC0 Condition Codes. 42720 (line 6) 42721* cc0: Regs and Memory. (line 307) 42722* cc0, RTL sharing: Sharing. (line 27) 42723* cc0_rtx: Regs and Memory. (line 333) 42724* CC1_SPEC: Driver. (line 118) 42725* CC1PLUS_SPEC: Driver. (line 126) 42726* cc_status: CC0 Condition Codes. 42727 (line 6) 42728* CC_STATUS_MDEP: CC0 Condition Codes. 42729 (line 17) 42730* CC_STATUS_MDEP_INIT: CC0 Condition Codes. 42731 (line 23) 42732* CCmode <1>: MODE_CC Condition Codes. 42733 (line 6) 42734* CCmode: Machine Modes. (line 176) 42735* CDImode: Machine Modes. (line 202) 42736* CEIL_DIV_EXPR: Unary and Binary Expressions. 42737 (line 6) 42738* CEIL_MOD_EXPR: Unary and Binary Expressions. 42739 (line 6) 42740* ceilM2 instruction pattern: Standard Names. (line 556) 42741* CFA_FRAME_BASE_OFFSET: Frame Layout. (line 226) 42742* CFG, Control Flow Graph: Control Flow. (line 6) 42743* cfghooks.h: Maintaining the CFG. 42744 (line 6) 42745* cgraph_finalize_function: Parsing pass. (line 52) 42746* chain_circular: GTY Options. (line 195) 42747* chain_next: GTY Options. (line 195) 42748* chain_prev: GTY Options. (line 195) 42749* change_address: Standard Names. (line 47) 42750* char: GIMPLE_ASM. (line 53) 42751* CHAR_TYPE_SIZE: Type Layout. (line 39) 42752* check_stack instruction pattern: Standard Names. (line 1208) 42753* CHImode: Machine Modes. (line 202) 42754* class definitions, register: Register Classes. (line 6) 42755* class preference constraints: Class Preferences. (line 6) 42756* class, scope: Classes. (line 6) 42757* CLASS_LIKELY_SPILLED_P: Register Classes. (line 467) 42758* CLASS_MAX_NREGS: Register Classes. (line 484) 42759* CLASS_TYPE_P: Types for C++. (line 65) 42760* classes of RTX codes: RTL Classes. (line 6) 42761* CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 42762* CLASSTYPE_HAS_MUTABLE: Classes. (line 85) 42763* CLASSTYPE_NON_POD_P: Classes. (line 90) 42764* CLEANUP_DECL: Statements for C++. (line 6) 42765* CLEANUP_EXPR: Statements for C++. (line 6) 42766* CLEANUP_POINT_EXPR: Unary and Binary Expressions. 42767 (line 6) 42768* CLEANUP_STMT: Statements for C++. (line 6) 42769* Cleanups: Cleanups. (line 6) 42770* CLEAR_BY_PIECES_P: Costs. (line 136) 42771* clear_cache instruction pattern: Standard Names. (line 1524) 42772* CLEAR_INSN_CACHE: Trampolines. (line 99) 42773* CLEAR_RATIO: Costs. (line 124) 42774* clobber: Side Effects. (line 100) 42775* clz: Arithmetic. (line 212) 42776* CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 319) 42777* clzM2 instruction pattern: Standard Names. (line 621) 42778* cmpmemM instruction pattern: Standard Names. (line 754) 42779* cmpstrM instruction pattern: Standard Names. (line 733) 42780* cmpstrnM instruction pattern: Standard Names. (line 720) 42781* code generation RTL sequences: Expander Definitions. 42782 (line 6) 42783* code iterators in .md files: Code Iterators. (line 6) 42784* code_label: Insns. (line 119) 42785* code_label and /i: Flags. (line 59) 42786* code_label and /v: Flags. (line 44) 42787* CODE_LABEL_NUMBER: Insns. (line 119) 42788* codes, RTL expression: RTL Objects. (line 47) 42789* COImode: Machine Modes. (line 202) 42790* COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 42791* COLLECT_EXPORT_LIST: Misc. (line 783) 42792* COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 42793 (line 44) 42794* COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 42795 (line 33) 42796* commit_edge_insertions: Maintaining the CFG. 42797 (line 118) 42798* compare: Arithmetic. (line 43) 42799* compare, canonicalization of: Insn Canonicalizations. 42800 (line 37) 42801* comparison_operator: Machine-Independent Predicates. 42802 (line 111) 42803* compiler passes and files: Passes. (line 6) 42804* complement, bitwise: Arithmetic. (line 149) 42805* COMPLEX_CST: Constant expressions. 42806 (line 6) 42807* COMPLEX_EXPR: Unary and Binary Expressions. 42808 (line 6) 42809* COMPLEX_TYPE: Types. (line 6) 42810* COMPONENT_REF: Storage References. (line 6) 42811* Compound Expressions: Compound Expressions. 42812 (line 6) 42813* Compound Lvalues: Compound Lvalues. (line 6) 42814* COMPOUND_EXPR: Unary and Binary Expressions. 42815 (line 6) 42816* COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 42817 (line 6) 42818* COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 42819 (line 367) 42820* COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 42821 (line 367) 42822* computed jump: Edges. (line 128) 42823* computing the length of an insn: Insn Lengths. (line 6) 42824* concat: Regs and Memory. (line 385) 42825* concatn: Regs and Memory. (line 391) 42826* cond: Comparisons. (line 90) 42827* cond and attributes: Expressions. (line 37) 42828* cond_exec: Side Effects. (line 248) 42829* COND_EXPR: Unary and Binary Expressions. 42830 (line 6) 42831* condition code register: Regs and Memory. (line 307) 42832* condition code status: Condition Code. (line 6) 42833* condition codes: Comparisons. (line 20) 42834* conditional execution <1>: Cond. Exec. Macros. (line 6) 42835* conditional execution: Conditional Execution. 42836 (line 6) 42837* Conditional Expressions: Conditional Expressions. 42838 (line 6) 42839* CONDITIONAL_REGISTER_USAGE: Register Basics. (line 60) 42840* conditions, in patterns: Patterns. (line 43) 42841* configuration file <1>: Host Misc. (line 6) 42842* configuration file: Filesystem. (line 6) 42843* configure terms: Configure Terms. (line 6) 42844* CONJ_EXPR: Unary and Binary Expressions. 42845 (line 6) 42846* const: Constants. (line 99) 42847* CONST0_RTX: Constants. (line 119) 42848* const0_rtx: Constants. (line 16) 42849* CONST1_RTX: Constants. (line 119) 42850* const1_rtx: Constants. (line 16) 42851* CONST2_RTX: Constants. (line 119) 42852* const2_rtx: Constants. (line 16) 42853* CONST_DECL: Declarations. (line 6) 42854* const_double: Constants. (line 32) 42855* const_double, RTL sharing: Sharing. (line 29) 42856* CONST_DOUBLE_LOW: Constants. (line 39) 42857* CONST_DOUBLE_OK_FOR_CONSTRAINT_P: Old Constraints. (line 69) 42858* CONST_DOUBLE_OK_FOR_LETTER_P: Old Constraints. (line 54) 42859* const_double_operand: Machine-Independent Predicates. 42860 (line 21) 42861* const_fixed: Constants. (line 52) 42862* const_int: Constants. (line 8) 42863* const_int and attribute tests: Expressions. (line 47) 42864* const_int and attributes: Expressions. (line 10) 42865* const_int, RTL sharing: Sharing. (line 23) 42866* const_int_operand: Machine-Independent Predicates. 42867 (line 16) 42868* CONST_OK_FOR_CONSTRAINT_P: Old Constraints. (line 49) 42869* CONST_OK_FOR_LETTER_P: Old Constraints. (line 40) 42870* const_string: Constants. (line 71) 42871* const_string and attributes: Expressions. (line 20) 42872* const_true_rtx: Constants. (line 26) 42873* const_vector: Constants. (line 59) 42874* const_vector, RTL sharing: Sharing. (line 32) 42875* constant attributes: Constant Attributes. 42876 (line 6) 42877* constant definitions: Constant Definitions. 42878 (line 6) 42879* CONSTANT_ADDRESS_P: Addressing Modes. (line 29) 42880* CONSTANT_ALIGNMENT: Storage Layout. (line 242) 42881* CONSTANT_P: Addressing Modes. (line 36) 42882* CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 42883* CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 64) 42884* constants in constraints: Simple Constraints. (line 60) 42885* constm1_rtx: Constants. (line 16) 42886* constraint modifier characters: Modifiers. (line 6) 42887* constraint, matching: Simple Constraints. (line 132) 42888* CONSTRAINT_LEN: Old Constraints. (line 12) 42889* constraint_num: C Constraint Interface. 42890 (line 38) 42891* constraint_satisfied_p: C Constraint Interface. 42892 (line 54) 42893* constraints: Constraints. (line 6) 42894* constraints, defining: Define Constraints. (line 6) 42895* constraints, defining, obsolete method: Old Constraints. (line 6) 42896* constraints, machine specific: Machine Constraints. 42897 (line 6) 42898* constraints, testing: C Constraint Interface. 42899 (line 6) 42900* CONSTRUCTOR: Unary and Binary Expressions. 42901 (line 6) 42902* constructors, automatic calls: Collect2. (line 15) 42903* constructors, output of: Initialization. (line 6) 42904* container: Containers. (line 6) 42905* CONTINUE_STMT: Statements for C++. (line 6) 42906* contributors: Contributors. (line 6) 42907* controlling register usage: Register Basics. (line 76) 42908* controlling the compilation driver: Driver. (line 6) 42909* conventions, run-time: Interface. (line 6) 42910* conversions: Conversions. (line 6) 42911* CONVERT_EXPR: Unary and Binary Expressions. 42912 (line 6) 42913* copy_rtx: Addressing Modes. (line 184) 42914* copy_rtx_if_shared: Sharing. (line 64) 42915* copysignM3 instruction pattern: Standard Names. (line 602) 42916* cosM2 instruction pattern: Standard Names. (line 481) 42917* costs of instructions: Costs. (line 6) 42918* CP_INTEGRAL_TYPE: Types for C++. (line 57) 42919* cp_namespace_decls: Namespaces. (line 49) 42920* CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 42921* CP_TYPE_CONST_P: Types for C++. (line 24) 42922* CP_TYPE_QUALS: Types for C++. (line 6) 42923* CP_TYPE_RESTRICT_P: Types for C++. (line 30) 42924* CP_TYPE_VOLATILE_P: Types for C++. (line 27) 42925* CPLUSPLUS_CPP_SPEC: Driver. (line 113) 42926* CPP_SPEC: Driver. (line 106) 42927* CQImode: Machine Modes. (line 202) 42928* cross compilation and floating point: Floating Point. (line 6) 42929* CRT_CALL_STATIC_FUNCTION: Sections. (line 122) 42930* CRTSTUFF_T_CFLAGS: Target Fragment. (line 35) 42931* CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 39) 42932* CSImode: Machine Modes. (line 202) 42933* cstoreMODE4 instruction pattern: Standard Names. (line 897) 42934* CTImode: Machine Modes. (line 202) 42935* ctrapMM4 instruction pattern: Standard Names. (line 1349) 42936* ctz: Arithmetic. (line 220) 42937* CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 320) 42938* ctzM2 instruction pattern: Standard Names. (line 630) 42939* CUMULATIVE_ARGS: Register Arguments. (line 127) 42940* current_function_epilogue_delay_list: Function Entry. (line 181) 42941* current_function_is_leaf: Leaf Functions. (line 51) 42942* current_function_outgoing_args_size: Stack Arguments. (line 45) 42943* current_function_pops_args: Function Entry. (line 106) 42944* current_function_pretend_args_size: Function Entry. (line 112) 42945* current_function_uses_only_leaf_regs: Leaf Functions. (line 51) 42946* current_insn_predicate: Conditional Execution. 42947 (line 26) 42948* DAmode: Machine Modes. (line 152) 42949* data bypass: Processor pipeline description. 42950 (line 106) 42951* data dependence delays: Processor pipeline description. 42952 (line 6) 42953* Data Dependency Analysis: Dependency analysis. 42954 (line 6) 42955* data structures: Per-Function Data. (line 6) 42956* DATA_ALIGNMENT: Storage Layout. (line 229) 42957* DATA_SECTION_ASM_OP: Sections. (line 53) 42958* DBR_OUTPUT_SEQEND: Instruction Output. (line 120) 42959* dbr_sequence_length: Instruction Output. (line 119) 42960* DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 103) 42961* DBX_CONTIN_CHAR: DBX Options. (line 66) 42962* DBX_CONTIN_LENGTH: DBX Options. (line 56) 42963* DBX_DEBUGGING_INFO: DBX Options. (line 9) 42964* DBX_FUNCTION_FIRST: DBX Options. (line 97) 42965* DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 109) 42966* DBX_NO_XREFS: DBX Options. (line 50) 42967* DBX_OUTPUT_LBRAC: DBX Hooks. (line 9) 42968* DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 34) 42969* DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 9) 42970* DBX_OUTPUT_NFUN: DBX Hooks. (line 18) 42971* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 42972 (line 42) 42973* DBX_OUTPUT_RBRAC: DBX Hooks. (line 15) 42974* DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 22) 42975* DBX_REGISTER_NUMBER: All Debuggers. (line 9) 42976* DBX_REGPARM_STABS_CODE: DBX Options. (line 87) 42977* DBX_REGPARM_STABS_LETTER: DBX Options. (line 92) 42978* DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 82) 42979* DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 73) 42980* DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 78) 42981* DBX_USE_BINCL: DBX Options. (line 115) 42982* DCmode: Machine Modes. (line 197) 42983* DDmode: Machine Modes. (line 90) 42984* De Morgan's law: Insn Canonicalizations. 42985 (line 52) 42986* dead_or_set_p: define_peephole. (line 65) 42987* debug_expr: Debug Information. (line 22) 42988* DEBUG_EXPR_DECL: Declarations. (line 6) 42989* debug_insn: Insns. (line 239) 42990* DEBUG_SYMS_TEXT: DBX Options. (line 25) 42991* DEBUGGER_ARG_OFFSET: All Debuggers. (line 37) 42992* DEBUGGER_AUTO_OFFSET: All Debuggers. (line 28) 42993* decimal float library: Decimal float library routines. 42994 (line 6) 42995* DECL_ALIGN: Declarations. (line 6) 42996* DECL_ANTICIPATED: Functions for C++. (line 42) 42997* DECL_ARGUMENTS: Function Basics. (line 36) 42998* DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 42999* DECL_ARTIFICIAL <1>: Function Properties. 43000 (line 47) 43001* DECL_ARTIFICIAL <2>: Function Basics. (line 6) 43002* DECL_ARTIFICIAL: Working with declarations. 43003 (line 24) 43004* DECL_ASSEMBLER_NAME: Function Basics. (line 6) 43005* DECL_ATTRIBUTES: Attributes. (line 22) 43006* DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 43007* DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 43008* DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 43009* DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 43010* DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 43011* DECL_CONTEXT: Namespaces. (line 31) 43012* DECL_CONV_FN_P: Functions for C++. (line 105) 43013* DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 43014* DECL_DESTRUCTOR_P: Functions for C++. (line 95) 43015* DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 43016* DECL_EXTERNAL <1>: Function Properties. 43017 (line 25) 43018* DECL_EXTERNAL: Declarations. (line 6) 43019* DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 43020* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 43021 (line 61) 43022* DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 43023* DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 43024 (line 55) 43025* DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 43026* DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 43027* DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 43028* DECL_INITIAL <1>: Function Basics. (line 51) 43029* DECL_INITIAL: Declarations. (line 6) 43030* DECL_LINKONCE_P: Functions for C++. (line 50) 43031* DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 43032* DECL_MAIN_P: Functions for C++. (line 34) 43033* DECL_NAME <1>: Namespaces. (line 20) 43034* DECL_NAME <2>: Function Basics. (line 6) 43035* DECL_NAME: Working with declarations. 43036 (line 7) 43037* DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 43038* DECL_NAMESPACE_STD_P: Namespaces. (line 45) 43039* DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 43040* DECL_NONCONVERTING_P: Functions for C++. (line 80) 43041* DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 43042* DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 43043* DECL_PURE_P: Function Properties. 43044 (line 40) 43045* DECL_RESULT: Function Basics. (line 41) 43046* DECL_SAVED_TREE: Function Basics. (line 44) 43047* DECL_SIZE: Declarations. (line 6) 43048* DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 43049* DECL_STMT: Statements for C++. (line 6) 43050* DECL_STMT_DECL: Statements for C++. (line 6) 43051* DECL_THUNK_P: Functions for C++. (line 116) 43052* DECL_VIRTUAL_P: Function Properties. 43053 (line 44) 43054* DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 43055* declaration: Declarations. (line 6) 43056* declarations, RTL: RTL Declarations. (line 6) 43057* DECLARE_LIBRARY_RENAMES: Library Calls. (line 9) 43058* decrement_and_branch_until_zero instruction pattern: Standard Names. 43059 (line 1083) 43060* def_optype_d: Manipulating GIMPLE statements. 43061 (line 94) 43062* default: GTY Options. (line 81) 43063* default_file_start: File Framework. (line 8) 43064* DEFAULT_GDB_EXTENSIONS: DBX Options. (line 18) 43065* DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 35) 43066* DEFAULT_SIGNED_CHAR: Type Layout. (line 154) 43067* define_address_constraint: Define Constraints. (line 107) 43068* define_asm_attributes: Tagging Insns. (line 73) 43069* define_attr: Defining Attributes. 43070 (line 6) 43071* define_automaton: Processor pipeline description. 43072 (line 53) 43073* define_bypass: Processor pipeline description. 43074 (line 197) 43075* define_code_attr: Code Iterators. (line 6) 43076* define_code_iterator: Code Iterators. (line 6) 43077* define_cond_exec: Conditional Execution. 43078 (line 13) 43079* define_constants: Constant Definitions. 43080 (line 6) 43081* define_constraint: Define Constraints. (line 48) 43082* define_cpu_unit: Processor pipeline description. 43083 (line 68) 43084* define_delay: Delay Slots. (line 25) 43085* define_expand: Expander Definitions. 43086 (line 11) 43087* define_insn: Patterns. (line 6) 43088* define_insn example: Example. (line 6) 43089* define_insn_and_split: Insn Splitting. (line 170) 43090* define_insn_reservation: Processor pipeline description. 43091 (line 106) 43092* define_memory_constraint: Define Constraints. (line 88) 43093* define_mode_attr: Substitutions. (line 6) 43094* define_mode_iterator: Defining Mode Iterators. 43095 (line 6) 43096* define_peephole: define_peephole. (line 6) 43097* define_peephole2: define_peephole2. (line 6) 43098* define_predicate: Defining Predicates. 43099 (line 6) 43100* define_query_cpu_unit: Processor pipeline description. 43101 (line 90) 43102* define_register_constraint: Define Constraints. (line 28) 43103* define_reservation: Processor pipeline description. 43104 (line 186) 43105* define_special_predicate: Defining Predicates. 43106 (line 6) 43107* define_split: Insn Splitting. (line 32) 43108* defining attributes and their values: Defining Attributes. 43109 (line 6) 43110* defining constraints: Define Constraints. (line 6) 43111* defining constraints, obsolete method: Old Constraints. (line 6) 43112* defining jump instruction patterns: Jump Patterns. (line 6) 43113* defining looping instruction patterns: Looping Patterns. (line 6) 43114* defining peephole optimizers: Peephole Definitions. 43115 (line 6) 43116* defining predicates: Defining Predicates. 43117 (line 6) 43118* defining RTL sequences for code generation: Expander Definitions. 43119 (line 6) 43120* delay slots, defining: Delay Slots. (line 6) 43121* DELAY_SLOTS_FOR_EPILOGUE: Function Entry. (line 163) 43122* deletable: GTY Options. (line 149) 43123* DELETE_IF_ORDINARY: Filesystem. (line 79) 43124* Dependent Patterns: Dependent Patterns. (line 6) 43125* desc: GTY Options. (line 81) 43126* destructors, output of: Initialization. (line 6) 43127* deterministic finite state automaton: Processor pipeline description. 43128 (line 6) 43129* DF_SIZE: Type Layout. (line 130) 43130* DFmode: Machine Modes. (line 73) 43131* digits in constraint: Simple Constraints. (line 120) 43132* DImode: Machine Modes. (line 45) 43133* DIR_SEPARATOR: Filesystem. (line 18) 43134* DIR_SEPARATOR_2: Filesystem. (line 19) 43135* directory options .md: Including Patterns. (line 44) 43136* disabling certain registers: Register Basics. (line 76) 43137* dispatch table: Dispatch Tables. (line 8) 43138* div: Arithmetic. (line 111) 43139* div and attributes: Expressions. (line 64) 43140* division: Arithmetic. (line 111) 43141* divM3 instruction pattern: Standard Names. (line 222) 43142* divmodM4 instruction pattern: Standard Names. (line 411) 43143* DO_BODY: Statements for C++. (line 6) 43144* DO_COND: Statements for C++. (line 6) 43145* DO_STMT: Statements for C++. (line 6) 43146* DOLLARS_IN_IDENTIFIERS: Misc. (line 491) 43147* doloop_begin instruction pattern: Standard Names. (line 1114) 43148* doloop_end instruction pattern: Standard Names. (line 1093) 43149* DONE: Expander Definitions. 43150 (line 74) 43151* DONT_USE_BUILTIN_SETJMP: Exception Region Output. 43152 (line 70) 43153* DOUBLE_TYPE_SIZE: Type Layout. (line 53) 43154* DQmode: Machine Modes. (line 115) 43155* driver: Driver. (line 6) 43156* DRIVER_SELF_SPECS: Driver. (line 71) 43157* DUMPFILE_FORMAT: Filesystem. (line 67) 43158* DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 36) 43159* DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 13) 43160* DWARF2_FRAME_INFO: SDB and DWARF. (line 30) 43161* DWARF2_FRAME_REG_OUT: Frame Registers. (line 136) 43162* DWARF2_UNWIND_INFO: Exception Region Output. 43163 (line 40) 43164* DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 152) 43165* DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 43166 (line 75) 43167* DWARF_FRAME_REGISTERS: Frame Registers. (line 96) 43168* DWARF_FRAME_REGNUM: Frame Registers. (line 128) 43169* DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 120) 43170* DWARF_ZERO_REG: Frame Layout. (line 163) 43171* DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 92) 43172* E in constraint: Simple Constraints. (line 79) 43173* earlyclobber operand: Modifiers. (line 25) 43174* edge: Edges. (line 6) 43175* edge in the flow graph: Edges. (line 6) 43176* edge iterators: Edges. (line 15) 43177* edge splitting: Maintaining the CFG. 43178 (line 118) 43179* EDGE_ABNORMAL: Edges. (line 128) 43180* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 43181* EDGE_ABNORMAL, EDGE_EH: Edges. (line 96) 43182* EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 122) 43183* EDGE_FALLTHRU, force_nonfallthru: Edges. (line 86) 43184* EDOM, implicit usage: Library Calls. (line 58) 43185* EH_FRAME_IN_DATA_SECTION: Exception Region Output. 43186 (line 20) 43187* EH_FRAME_SECTION_NAME: Exception Region Output. 43188 (line 10) 43189* eh_return instruction pattern: Standard Names. (line 1289) 43190* EH_RETURN_DATA_REGNO: Exception Handling. (line 7) 43191* EH_RETURN_HANDLER_RTX: Exception Handling. (line 39) 43192* EH_RETURN_STACKADJ_RTX: Exception Handling. (line 22) 43193* EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 43194 (line 29) 43195* EH_USES: Function Entry. (line 158) 43196* ei_edge: Edges. (line 43) 43197* ei_end_p: Edges. (line 27) 43198* ei_last: Edges. (line 23) 43199* ei_next: Edges. (line 35) 43200* ei_one_before_end_p: Edges. (line 31) 43201* ei_prev: Edges. (line 39) 43202* ei_safe_safe: Edges. (line 47) 43203* ei_start: Edges. (line 19) 43204* ELIGIBLE_FOR_EPILOGUE_DELAY: Function Entry. (line 169) 43205* ELIMINABLE_REGS: Elimination. (line 47) 43206* ELSE_CLAUSE: Statements for C++. (line 6) 43207* Embedded C: Fixed-point fractional library routines. 43208 (line 6) 43209* EMIT_MODE_SET: Mode Switching. (line 74) 43210* Empty Statements: Empty Statements. (line 6) 43211* EMPTY_CLASS_EXPR: Statements for C++. (line 6) 43212* EMPTY_FIELD_BOUNDARY: Storage Layout. (line 296) 43213* Emulated TLS: Emulated TLS. (line 6) 43214* ENABLE_EXECUTE_STACK: Trampolines. (line 109) 43215* enabled: Disable Insn Alternatives. 43216 (line 6) 43217* ENDFILE_SPEC: Driver. (line 218) 43218* endianness: Portability. (line 21) 43219* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 28) 43220* enum machine_mode: Machine Modes. (line 6) 43221* enum reg_class: Register Classes. (line 65) 43222* ENUMERAL_TYPE: Types. (line 6) 43223* epilogue: Function Entry. (line 6) 43224* epilogue instruction pattern: Standard Names. (line 1321) 43225* EPILOGUE_USES: Function Entry. (line 152) 43226* eq: Comparisons. (line 52) 43227* eq and attributes: Expressions. (line 64) 43228* eq_attr: Expressions. (line 85) 43229* EQ_EXPR: Unary and Binary Expressions. 43230 (line 6) 43231* equal: Comparisons. (line 52) 43232* errno, implicit usage: Library Calls. (line 70) 43233* EXACT_DIV_EXPR: Unary and Binary Expressions. 43234 (line 6) 43235* examining SSA_NAMEs: SSA. (line 218) 43236* exception handling <1>: Exception Handling. (line 6) 43237* exception handling: Edges. (line 96) 43238* exception_receiver instruction pattern: Standard Names. (line 1253) 43239* exclamation point: Multi-Alternative. (line 47) 43240* exclusion_set: Processor pipeline description. 43241 (line 220) 43242* exclusive-or, bitwise: Arithmetic. (line 163) 43243* EXIT_EXPR: Unary and Binary Expressions. 43244 (line 6) 43245* EXIT_IGNORE_STACK: Function Entry. (line 140) 43246* expander definitions: Expander Definitions. 43247 (line 6) 43248* expM2 instruction pattern: Standard Names. (line 497) 43249* EXPR_FILENAME: Working with declarations. 43250 (line 14) 43251* EXPR_LINENO: Working with declarations. 43252 (line 20) 43253* expr_list: Insns. (line 545) 43254* EXPR_STMT: Statements for C++. (line 6) 43255* EXPR_STMT_EXPR: Statements for C++. (line 6) 43256* expression: Expression trees. (line 6) 43257* expression codes: RTL Objects. (line 47) 43258* extendMN2 instruction pattern: Standard Names. (line 812) 43259* extensible constraints: Simple Constraints. (line 163) 43260* EXTRA_ADDRESS_CONSTRAINT: Old Constraints. (line 123) 43261* EXTRA_CONSTRAINT: Old Constraints. (line 74) 43262* EXTRA_CONSTRAINT_STR: Old Constraints. (line 95) 43263* EXTRA_MEMORY_CONSTRAINT: Old Constraints. (line 100) 43264* EXTRA_SPECS: Driver. (line 245) 43265* extv instruction pattern: Standard Names. (line 848) 43266* extzv instruction pattern: Standard Names. (line 863) 43267* F in constraint: Simple Constraints. (line 84) 43268* FAIL: Expander Definitions. 43269 (line 80) 43270* fall-thru: Edges. (line 69) 43271* FATAL_EXIT_CODE: Host Misc. (line 6) 43272* FDL, GNU Free Documentation License: GNU Free Documentation License. 43273 (line 6) 43274* features, optional, in system conventions: Run-time Target. 43275 (line 59) 43276* ffs: Arithmetic. (line 206) 43277* ffsM2 instruction pattern: Standard Names. (line 611) 43278* FIELD_DECL: Declarations. (line 6) 43279* file_end_indicate_exec_stack: File Framework. (line 41) 43280* files and passes of the compiler: Passes. (line 6) 43281* files, generated: Files. (line 6) 43282* final_absence_set: Processor pipeline description. 43283 (line 220) 43284* FINAL_PRESCAN_INSN: Instruction Output. (line 46) 43285* final_presence_set: Processor pipeline description. 43286 (line 220) 43287* final_scan_insn: Function Entry. (line 181) 43288* final_sequence: Instruction Output. (line 130) 43289* FIND_BASE_TERM: Addressing Modes. (line 115) 43290* FINI_ARRAY_SECTION_ASM_OP: Sections. (line 115) 43291* FINI_SECTION_ASM_OP: Sections. (line 100) 43292* finite state automaton minimization: Processor pipeline description. 43293 (line 301) 43294* FIRST_PARM_OFFSET: Frame Layout. (line 67) 43295* FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65) 43296* FIRST_PSEUDO_REGISTER: Register Basics. (line 9) 43297* FIRST_STACK_REG: Stack Registers. (line 27) 43298* FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 43299* fix: Conversions. (line 66) 43300* FIX_TRUNC_EXPR: Unary and Binary Expressions. 43301 (line 6) 43302* fix_truncMN2 instruction pattern: Standard Names. (line 799) 43303* fixed register: Register Basics. (line 15) 43304* fixed-point fractional library: Fixed-point fractional library routines. 43305 (line 6) 43306* FIXED_CONVERT_EXPR: Unary and Binary Expressions. 43307 (line 6) 43308* FIXED_CST: Constant expressions. 43309 (line 6) 43310* FIXED_POINT_TYPE: Types. (line 6) 43311* FIXED_REGISTERS: Register Basics. (line 15) 43312* fixed_regs: Register Basics. (line 59) 43313* fixMN2 instruction pattern: Standard Names. (line 779) 43314* FIXUNS_TRUNC_LIKE_FIX_TRUNC: Misc. (line 100) 43315* fixuns_truncMN2 instruction pattern: Standard Names. (line 803) 43316* fixunsMN2 instruction pattern: Standard Names. (line 788) 43317* flags in RTL expression: Flags. (line 6) 43318* float: Conversions. (line 58) 43319* FLOAT_EXPR: Unary and Binary Expressions. 43320 (line 6) 43321* float_extend: Conversions. (line 33) 43322* FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 25) 43323* FLOAT_STORE_FLAG_VALUE: Misc. (line 301) 43324* float_truncate: Conversions. (line 53) 43325* FLOAT_TYPE_SIZE: Type Layout. (line 49) 43326* FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 43) 43327* FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory. 43328 (line 226) 43329* floating point and cross compilation: Floating Point. (line 6) 43330* Floating Point Emulation: Target Fragment. (line 15) 43331* floating point emulation library, US Software GOFAST: Library Calls. 43332 (line 44) 43333* floatMN2 instruction pattern: Standard Names. (line 771) 43334* floatunsMN2 instruction pattern: Standard Names. (line 775) 43335* FLOOR_DIV_EXPR: Unary and Binary Expressions. 43336 (line 6) 43337* FLOOR_MOD_EXPR: Unary and Binary Expressions. 43338 (line 6) 43339* floorM2 instruction pattern: Standard Names. (line 532) 43340* flow-insensitive alias analysis: Alias analysis. (line 6) 43341* flow-sensitive alias analysis: Alias analysis. (line 6) 43342* fmodM3 instruction pattern: Standard Names. (line 463) 43343* FOR_BODY: Statements for C++. (line 6) 43344* FOR_COND: Statements for C++. (line 6) 43345* FOR_EXPR: Statements for C++. (line 6) 43346* FOR_INIT_STMT: Statements for C++. (line 6) 43347* FOR_STMT: Statements for C++. (line 6) 43348* FORCE_CODE_SECTION_ALIGN: Sections. (line 146) 43349* force_reg: Standard Names. (line 36) 43350* fract_convert: Conversions. (line 82) 43351* FRACT_TYPE_SIZE: Type Layout. (line 68) 43352* fractional types: Fixed-point fractional library routines. 43353 (line 6) 43354* fractMN2 instruction pattern: Standard Names. (line 821) 43355* fractunsMN2 instruction pattern: Standard Names. (line 836) 43356* frame layout: Frame Layout. (line 6) 43357* FRAME_ADDR_RTX: Frame Layout. (line 116) 43358* FRAME_GROWS_DOWNWARD: Frame Layout. (line 31) 43359* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory. 43360 (line 69) 43361* FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 212) 43362* frame_pointer_needed: Function Entry. (line 34) 43363* FRAME_POINTER_REGNUM: Frame Registers. (line 14) 43364* FRAME_POINTER_REGNUM and virtual registers: Regs and Memory. 43365 (line 74) 43366* frame_pointer_rtx: Frame Registers. (line 90) 43367* frame_related: Flags. (line 247) 43368* frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags. 43369 (line 125) 43370* frame_related, in mem: Flags. (line 103) 43371* frame_related, in reg: Flags. (line 112) 43372* frame_related, in symbol_ref: Flags. (line 183) 43373* frequency, count, BB_FREQ_BASE: Profile information. 43374 (line 30) 43375* ftruncM2 instruction pattern: Standard Names. (line 794) 43376* function <1>: Functions for C++. (line 6) 43377* function: Functions. (line 6) 43378* function call conventions: Interface. (line 6) 43379* function entry and exit: Function Entry. (line 6) 43380* function entry point, alternate function entry point: Edges. 43381 (line 180) 43382* function properties: Function Properties. 43383 (line 6) 43384* function-call insns: Calls. (line 6) 43385* FUNCTION_ARG: Register Arguments. (line 11) 43386* FUNCTION_ARG_ADVANCE: Register Arguments. (line 185) 43387* FUNCTION_ARG_BOUNDARY: Register Arguments. (line 238) 43388* FUNCTION_ARG_OFFSET: Register Arguments. (line 196) 43389* FUNCTION_ARG_PADDING: Register Arguments. (line 203) 43390* FUNCTION_ARG_REGNO_P: Register Arguments. (line 243) 43391* FUNCTION_BOUNDARY: Storage Layout. (line 171) 43392* FUNCTION_DECL <1>: Functions for C++. (line 6) 43393* FUNCTION_DECL: Functions. (line 6) 43394* FUNCTION_INCOMING_ARG: Register Arguments. (line 68) 43395* FUNCTION_MODE: Misc. (line 356) 43396* FUNCTION_OUTGOING_VALUE: Scalar Return. (line 56) 43397* FUNCTION_PROFILER: Profiling. (line 9) 43398* FUNCTION_TYPE: Types. (line 6) 43399* FUNCTION_VALUE: Scalar Return. (line 52) 43400* FUNCTION_VALUE_REGNO_P: Scalar Return. (line 81) 43401* functions, leaf: Leaf Functions. (line 6) 43402* fundamental type: Types. (line 6) 43403* g in constraint: Simple Constraints. (line 110) 43404* G in constraint: Simple Constraints. (line 88) 43405* garbage collector, invocation: Invoking the garbage collector. 43406 (line 6) 43407* GCC and portability: Portability. (line 6) 43408* GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 43409* gcov_type: Profile information. 43410 (line 41) 43411* ge: Comparisons. (line 72) 43412* ge and attributes: Expressions. (line 64) 43413* GE_EXPR: Unary and Binary Expressions. 43414 (line 6) 43415* GEN_ERRNO_RTX: Library Calls. (line 71) 43416* gencodes: RTL passes. (line 18) 43417* general_operand: Machine-Independent Predicates. 43418 (line 105) 43419* GENERAL_REGS: Register Classes. (line 23) 43420* generated files: Files. (line 6) 43421* generating assembler output: Output Statement. (line 6) 43422* generating insns: RTL Template. (line 6) 43423* GENERIC <1>: GENERIC. (line 6) 43424* GENERIC <2>: Gimplification pass. 43425 (line 12) 43426* GENERIC: Parsing pass. (line 6) 43427* generic predicates: Machine-Independent Predicates. 43428 (line 6) 43429* genflags: RTL passes. (line 18) 43430* get_attr: Expressions. (line 80) 43431* get_attr_length: Insn Lengths. (line 46) 43432* GET_CLASS_NARROWEST_MODE: Machine Modes. (line 333) 43433* GET_CODE: RTL Objects. (line 47) 43434* get_frame_size: Elimination. (line 34) 43435* get_insns: Insns. (line 34) 43436* get_last_insn: Insns. (line 34) 43437* GET_MODE: Machine Modes. (line 280) 43438* GET_MODE_ALIGNMENT: Machine Modes. (line 320) 43439* GET_MODE_BITSIZE: Machine Modes. (line 304) 43440* GET_MODE_CLASS: Machine Modes. (line 294) 43441* GET_MODE_FBIT: Machine Modes. (line 311) 43442* GET_MODE_IBIT: Machine Modes. (line 307) 43443* GET_MODE_MASK: Machine Modes. (line 315) 43444* GET_MODE_NAME: Machine Modes. (line 291) 43445* GET_MODE_NUNITS: Machine Modes. (line 329) 43446* GET_MODE_SIZE: Machine Modes. (line 301) 43447* GET_MODE_UNIT_SIZE: Machine Modes. (line 323) 43448* GET_MODE_WIDER_MODE: Machine Modes. (line 297) 43449* GET_RTX_CLASS: RTL Classes. (line 6) 43450* GET_RTX_FORMAT: RTL Classes. (line 130) 43451* GET_RTX_LENGTH: RTL Classes. (line 127) 43452* geu: Comparisons. (line 72) 43453* geu and attributes: Expressions. (line 64) 43454* GGC: Type Information. (line 6) 43455* ggc_collect: Invoking the garbage collector. 43456 (line 6) 43457* GIMPLE <1>: GIMPLE. (line 6) 43458* GIMPLE <2>: Gimplification pass. 43459 (line 6) 43460* GIMPLE: Parsing pass. (line 14) 43461* GIMPLE Exception Handling: GIMPLE Exception Handling. 43462 (line 6) 43463* GIMPLE instruction set: GIMPLE instruction set. 43464 (line 6) 43465* GIMPLE sequences: GIMPLE sequences. (line 6) 43466* gimple_addresses_taken: Manipulating GIMPLE statements. 43467 (line 90) 43468* GIMPLE_ASM: GIMPLE_ASM. (line 6) 43469* gimple_asm_clear_volatile: GIMPLE_ASM. (line 63) 43470* gimple_asm_clobber_op: GIMPLE_ASM. (line 46) 43471* gimple_asm_input_op: GIMPLE_ASM. (line 30) 43472* gimple_asm_output_op: GIMPLE_ASM. (line 38) 43473* gimple_asm_set_clobber_op: GIMPLE_ASM. (line 50) 43474* gimple_asm_set_input_op: GIMPLE_ASM. (line 34) 43475* gimple_asm_set_output_op: GIMPLE_ASM. (line 42) 43476* gimple_asm_set_volatile: GIMPLE_ASM. (line 60) 43477* gimple_asm_volatile_p: GIMPLE_ASM. (line 57) 43478* GIMPLE_ASSIGN: GIMPLE_ASSIGN. (line 6) 43479* gimple_assign_cast_p: GIMPLE_ASSIGN. (line 89) 43480* gimple_assign_lhs: GIMPLE_ASSIGN. (line 51) 43481* gimple_assign_rhs1: GIMPLE_ASSIGN. (line 57) 43482* gimple_assign_rhs2: GIMPLE_ASSIGN. (line 64) 43483* gimple_assign_set_lhs: GIMPLE_ASSIGN. (line 71) 43484* gimple_assign_set_rhs1: GIMPLE_ASSIGN. (line 74) 43485* gimple_assign_set_rhs2: GIMPLE_ASSIGN. (line 85) 43486* gimple_bb: Manipulating GIMPLE statements. 43487 (line 18) 43488* GIMPLE_BIND: GIMPLE_BIND. (line 6) 43489* gimple_bind_add_seq: GIMPLE_BIND. (line 36) 43490* gimple_bind_add_stmt: GIMPLE_BIND. (line 32) 43491* gimple_bind_append_vars: GIMPLE_BIND. (line 19) 43492* gimple_bind_block: GIMPLE_BIND. (line 40) 43493* gimple_bind_body: GIMPLE_BIND. (line 23) 43494* gimple_bind_set_block: GIMPLE_BIND. (line 45) 43495* gimple_bind_set_body: GIMPLE_BIND. (line 28) 43496* gimple_bind_set_vars: GIMPLE_BIND. (line 15) 43497* gimple_bind_vars: GIMPLE_BIND. (line 12) 43498* gimple_block: Manipulating GIMPLE statements. 43499 (line 21) 43500* gimple_build_asm: GIMPLE_ASM. (line 8) 43501* gimple_build_asm_vec: GIMPLE_ASM. (line 17) 43502* gimple_build_assign: GIMPLE_ASSIGN. (line 7) 43503* gimple_build_assign_with_ops: GIMPLE_ASSIGN. (line 30) 43504* gimple_build_bind: GIMPLE_BIND. (line 8) 43505* gimple_build_call: GIMPLE_CALL. (line 8) 43506* gimple_build_call_from_tree: GIMPLE_CALL. (line 16) 43507* gimple_build_call_vec: GIMPLE_CALL. (line 25) 43508* gimple_build_catch: GIMPLE_CATCH. (line 8) 43509* gimple_build_cond: GIMPLE_COND. (line 8) 43510* gimple_build_cond_from_tree: GIMPLE_COND. (line 16) 43511* gimple_build_debug_bind: GIMPLE_DEBUG. (line 8) 43512* gimple_build_eh_filter: GIMPLE_EH_FILTER. (line 8) 43513* gimple_build_goto: GIMPLE_LABEL. (line 18) 43514* gimple_build_label: GIMPLE_LABEL. (line 7) 43515* gimple_build_nop: GIMPLE_NOP. (line 7) 43516* gimple_build_omp_atomic_load: GIMPLE_OMP_ATOMIC_LOAD. 43517 (line 8) 43518* gimple_build_omp_atomic_store: GIMPLE_OMP_ATOMIC_STORE. 43519 (line 7) 43520* gimple_build_omp_continue: GIMPLE_OMP_CONTINUE. 43521 (line 8) 43522* gimple_build_omp_critical: GIMPLE_OMP_CRITICAL. 43523 (line 8) 43524* gimple_build_omp_for: GIMPLE_OMP_FOR. (line 9) 43525* gimple_build_omp_master: GIMPLE_OMP_MASTER. (line 7) 43526* gimple_build_omp_ordered: GIMPLE_OMP_ORDERED. (line 7) 43527* gimple_build_omp_parallel: GIMPLE_OMP_PARALLEL. 43528 (line 8) 43529* gimple_build_omp_return: GIMPLE_OMP_RETURN. (line 7) 43530* gimple_build_omp_section: GIMPLE_OMP_SECTION. (line 7) 43531* gimple_build_omp_sections: GIMPLE_OMP_SECTIONS. 43532 (line 8) 43533* gimple_build_omp_sections_switch: GIMPLE_OMP_SECTIONS. 43534 (line 14) 43535* gimple_build_omp_single: GIMPLE_OMP_SINGLE. (line 8) 43536* gimple_build_resx: GIMPLE_RESX. (line 7) 43537* gimple_build_return: GIMPLE_RETURN. (line 7) 43538* gimple_build_switch: GIMPLE_SWITCH. (line 8) 43539* gimple_build_switch_vec: GIMPLE_SWITCH. (line 16) 43540* gimple_build_try: GIMPLE_TRY. (line 8) 43541* gimple_build_wce: GIMPLE_WITH_CLEANUP_EXPR. 43542 (line 7) 43543* GIMPLE_CALL: GIMPLE_CALL. (line 6) 43544* gimple_call_arg: GIMPLE_CALL. (line 66) 43545* gimple_call_cannot_inline_p: GIMPLE_CALL. (line 91) 43546* gimple_call_chain: GIMPLE_CALL. (line 57) 43547* gimple_call_copy_skip_args: GIMPLE_CALL. (line 98) 43548* gimple_call_fn: GIMPLE_CALL. (line 38) 43549* gimple_call_fndecl: GIMPLE_CALL. (line 46) 43550* gimple_call_lhs: GIMPLE_CALL. (line 29) 43551* gimple_call_mark_uninlinable: GIMPLE_CALL. (line 88) 43552* gimple_call_noreturn_p: GIMPLE_CALL. (line 94) 43553* gimple_call_return_type: GIMPLE_CALL. (line 54) 43554* gimple_call_set_arg: GIMPLE_CALL. (line 76) 43555* gimple_call_set_chain: GIMPLE_CALL. (line 60) 43556* gimple_call_set_fn: GIMPLE_CALL. (line 42) 43557* gimple_call_set_fndecl: GIMPLE_CALL. (line 51) 43558* gimple_call_set_lhs: GIMPLE_CALL. (line 35) 43559* gimple_call_set_tail: GIMPLE_CALL. (line 80) 43560* gimple_call_tail_p: GIMPLE_CALL. (line 85) 43561* GIMPLE_CATCH: GIMPLE_CATCH. (line 6) 43562* gimple_catch_handler: GIMPLE_CATCH. (line 20) 43563* gimple_catch_set_handler: GIMPLE_CATCH. (line 28) 43564* gimple_catch_set_types: GIMPLE_CATCH. (line 24) 43565* gimple_catch_types: GIMPLE_CATCH. (line 13) 43566* gimple_code: Manipulating GIMPLE statements. 43567 (line 15) 43568* GIMPLE_COND: GIMPLE_COND. (line 6) 43569* gimple_cond_false_label: GIMPLE_COND. (line 60) 43570* gimple_cond_lhs: GIMPLE_COND. (line 30) 43571* gimple_cond_make_false: GIMPLE_COND. (line 64) 43572* gimple_cond_make_true: GIMPLE_COND. (line 67) 43573* gimple_cond_rhs: GIMPLE_COND. (line 38) 43574* gimple_cond_set_code: GIMPLE_COND. (line 26) 43575* gimple_cond_set_false_label: GIMPLE_COND. (line 56) 43576* gimple_cond_set_lhs: GIMPLE_COND. (line 34) 43577* gimple_cond_set_rhs: GIMPLE_COND. (line 42) 43578* gimple_cond_set_true_label: GIMPLE_COND. (line 51) 43579* gimple_cond_true_label: GIMPLE_COND. (line 46) 43580* gimple_copy: Manipulating GIMPLE statements. 43581 (line 147) 43582* GIMPLE_DEBUG: GIMPLE_DEBUG. (line 6) 43583* GIMPLE_DEBUG_BIND: GIMPLE_DEBUG. (line 6) 43584* gimple_debug_bind_get_value: GIMPLE_DEBUG. (line 48) 43585* gimple_debug_bind_get_var: GIMPLE_DEBUG. (line 45) 43586* gimple_debug_bind_has_value_p: GIMPLE_DEBUG. (line 69) 43587* gimple_debug_bind_reset_value: GIMPLE_DEBUG. (line 65) 43588* gimple_debug_bind_set_value: GIMPLE_DEBUG. (line 61) 43589* gimple_debug_bind_set_var: GIMPLE_DEBUG. (line 57) 43590* GIMPLE_EH_FILTER: GIMPLE_EH_FILTER. (line 6) 43591* gimple_eh_filter_failure: GIMPLE_EH_FILTER. (line 19) 43592* gimple_eh_filter_must_not_throw: GIMPLE_EH_FILTER. (line 33) 43593* gimple_eh_filter_set_failure: GIMPLE_EH_FILTER. (line 29) 43594* gimple_eh_filter_set_must_not_throw: GIMPLE_EH_FILTER. (line 37) 43595* gimple_eh_filter_set_types: GIMPLE_EH_FILTER. (line 24) 43596* gimple_eh_filter_types: GIMPLE_EH_FILTER. (line 12) 43597* gimple_expr_type: Manipulating GIMPLE statements. 43598 (line 24) 43599* gimple_goto_dest: GIMPLE_LABEL. (line 21) 43600* gimple_goto_set_dest: GIMPLE_LABEL. (line 24) 43601* gimple_has_mem_ops: Manipulating GIMPLE statements. 43602 (line 72) 43603* gimple_has_ops: Manipulating GIMPLE statements. 43604 (line 69) 43605* gimple_has_volatile_ops: Manipulating GIMPLE statements. 43606 (line 134) 43607* GIMPLE_LABEL: GIMPLE_LABEL. (line 6) 43608* gimple_label_label: GIMPLE_LABEL. (line 11) 43609* gimple_label_set_label: GIMPLE_LABEL. (line 14) 43610* gimple_loaded_syms: Manipulating GIMPLE statements. 43611 (line 122) 43612* gimple_locus: Manipulating GIMPLE statements. 43613 (line 42) 43614* gimple_locus_empty_p: Manipulating GIMPLE statements. 43615 (line 48) 43616* gimple_modified_p: Manipulating GIMPLE statements. 43617 (line 130) 43618* gimple_no_warning_p: Manipulating GIMPLE statements. 43619 (line 51) 43620* GIMPLE_NOP: GIMPLE_NOP. (line 6) 43621* gimple_nop_p: GIMPLE_NOP. (line 10) 43622* gimple_num_ops <1>: Manipulating GIMPLE statements. 43623 (line 75) 43624* gimple_num_ops: Logical Operators. (line 76) 43625* GIMPLE_OMP_ATOMIC_LOAD: GIMPLE_OMP_ATOMIC_LOAD. 43626 (line 6) 43627* gimple_omp_atomic_load_lhs: GIMPLE_OMP_ATOMIC_LOAD. 43628 (line 17) 43629* gimple_omp_atomic_load_rhs: GIMPLE_OMP_ATOMIC_LOAD. 43630 (line 24) 43631* gimple_omp_atomic_load_set_lhs: GIMPLE_OMP_ATOMIC_LOAD. 43632 (line 14) 43633* gimple_omp_atomic_load_set_rhs: GIMPLE_OMP_ATOMIC_LOAD. 43634 (line 21) 43635* GIMPLE_OMP_ATOMIC_STORE: GIMPLE_OMP_ATOMIC_STORE. 43636 (line 6) 43637* gimple_omp_atomic_store_set_val: GIMPLE_OMP_ATOMIC_STORE. 43638 (line 12) 43639* gimple_omp_atomic_store_val: GIMPLE_OMP_ATOMIC_STORE. 43640 (line 15) 43641* gimple_omp_body: GIMPLE_OMP_PARALLEL. 43642 (line 24) 43643* GIMPLE_OMP_CONTINUE: GIMPLE_OMP_CONTINUE. 43644 (line 6) 43645* gimple_omp_continue_control_def: GIMPLE_OMP_CONTINUE. 43646 (line 13) 43647* gimple_omp_continue_control_def_ptr: GIMPLE_OMP_CONTINUE. 43648 (line 17) 43649* gimple_omp_continue_control_use: GIMPLE_OMP_CONTINUE. 43650 (line 24) 43651* gimple_omp_continue_control_use_ptr: GIMPLE_OMP_CONTINUE. 43652 (line 28) 43653* gimple_omp_continue_set_control_def: GIMPLE_OMP_CONTINUE. 43654 (line 20) 43655* gimple_omp_continue_set_control_use: GIMPLE_OMP_CONTINUE. 43656 (line 31) 43657* GIMPLE_OMP_CRITICAL: GIMPLE_OMP_CRITICAL. 43658 (line 6) 43659* gimple_omp_critical_name: GIMPLE_OMP_CRITICAL. 43660 (line 13) 43661* gimple_omp_critical_set_name: GIMPLE_OMP_CRITICAL. 43662 (line 21) 43663* GIMPLE_OMP_FOR: GIMPLE_OMP_FOR. (line 6) 43664* gimple_omp_for_clauses: GIMPLE_OMP_FOR. (line 20) 43665* gimple_omp_for_final: GIMPLE_OMP_FOR. (line 51) 43666* gimple_omp_for_incr: GIMPLE_OMP_FOR. (line 61) 43667* gimple_omp_for_index: GIMPLE_OMP_FOR. (line 31) 43668* gimple_omp_for_initial: GIMPLE_OMP_FOR. (line 41) 43669* gimple_omp_for_pre_body: GIMPLE_OMP_FOR. (line 70) 43670* gimple_omp_for_set_clauses: GIMPLE_OMP_FOR. (line 27) 43671* gimple_omp_for_set_cond: GIMPLE_OMP_FOR. (line 80) 43672* gimple_omp_for_set_final: GIMPLE_OMP_FOR. (line 58) 43673* gimple_omp_for_set_incr: GIMPLE_OMP_FOR. (line 67) 43674* gimple_omp_for_set_index: GIMPLE_OMP_FOR. (line 38) 43675* gimple_omp_for_set_initial: GIMPLE_OMP_FOR. (line 48) 43676* gimple_omp_for_set_pre_body: GIMPLE_OMP_FOR. (line 75) 43677* GIMPLE_OMP_MASTER: GIMPLE_OMP_MASTER. (line 6) 43678* GIMPLE_OMP_ORDERED: GIMPLE_OMP_ORDERED. (line 6) 43679* GIMPLE_OMP_PARALLEL: GIMPLE_OMP_PARALLEL. 43680 (line 6) 43681* gimple_omp_parallel_child_fn: GIMPLE_OMP_PARALLEL. 43682 (line 42) 43683* gimple_omp_parallel_clauses: GIMPLE_OMP_PARALLEL. 43684 (line 31) 43685* gimple_omp_parallel_combined_p: GIMPLE_OMP_PARALLEL. 43686 (line 16) 43687* gimple_omp_parallel_data_arg: GIMPLE_OMP_PARALLEL. 43688 (line 54) 43689* gimple_omp_parallel_set_child_fn: GIMPLE_OMP_PARALLEL. 43690 (line 51) 43691* gimple_omp_parallel_set_clauses: GIMPLE_OMP_PARALLEL. 43692 (line 38) 43693* gimple_omp_parallel_set_combined_p: GIMPLE_OMP_PARALLEL. 43694 (line 20) 43695* gimple_omp_parallel_set_data_arg: GIMPLE_OMP_PARALLEL. 43696 (line 62) 43697* GIMPLE_OMP_RETURN: GIMPLE_OMP_RETURN. (line 6) 43698* gimple_omp_return_nowait_p: GIMPLE_OMP_RETURN. (line 14) 43699* gimple_omp_return_set_nowait: GIMPLE_OMP_RETURN. (line 11) 43700* GIMPLE_OMP_SECTION: GIMPLE_OMP_SECTION. (line 6) 43701* gimple_omp_section_last_p: GIMPLE_OMP_SECTION. (line 12) 43702* gimple_omp_section_set_last: GIMPLE_OMP_SECTION. (line 16) 43703* GIMPLE_OMP_SECTIONS: GIMPLE_OMP_SECTIONS. 43704 (line 6) 43705* gimple_omp_sections_clauses: GIMPLE_OMP_SECTIONS. 43706 (line 30) 43707* gimple_omp_sections_control: GIMPLE_OMP_SECTIONS. 43708 (line 17) 43709* gimple_omp_sections_set_clauses: GIMPLE_OMP_SECTIONS. 43710 (line 37) 43711* gimple_omp_sections_set_control: GIMPLE_OMP_SECTIONS. 43712 (line 26) 43713* gimple_omp_set_body: GIMPLE_OMP_PARALLEL. 43714 (line 28) 43715* GIMPLE_OMP_SINGLE: GIMPLE_OMP_SINGLE. (line 6) 43716* gimple_omp_single_clauses: GIMPLE_OMP_SINGLE. (line 14) 43717* gimple_omp_single_set_clauses: GIMPLE_OMP_SINGLE. (line 21) 43718* gimple_op <1>: Manipulating GIMPLE statements. 43719 (line 81) 43720* gimple_op: Logical Operators. (line 79) 43721* GIMPLE_PHI: GIMPLE_PHI. (line 6) 43722* gimple_phi_capacity: GIMPLE_PHI. (line 10) 43723* gimple_phi_num_args: GIMPLE_PHI. (line 14) 43724* gimple_phi_result: GIMPLE_PHI. (line 19) 43725* gimple_phi_set_arg: GIMPLE_PHI. (line 33) 43726* gimple_phi_set_result: GIMPLE_PHI. (line 25) 43727* GIMPLE_RESX: GIMPLE_RESX. (line 6) 43728* gimple_resx_region: GIMPLE_RESX. (line 13) 43729* gimple_resx_set_region: GIMPLE_RESX. (line 16) 43730* GIMPLE_RETURN: GIMPLE_RETURN. (line 6) 43731* gimple_return_retval: GIMPLE_RETURN. (line 10) 43732* gimple_return_set_retval: GIMPLE_RETURN. (line 14) 43733* gimple_rhs_class: GIMPLE_ASSIGN. (line 46) 43734* gimple_seq_add_seq: GIMPLE sequences. (line 32) 43735* gimple_seq_add_stmt: GIMPLE sequences. (line 26) 43736* gimple_seq_alloc: GIMPLE sequences. (line 62) 43737* gimple_seq_copy: GIMPLE sequences. (line 67) 43738* gimple_seq_deep_copy: GIMPLE sequences. (line 37) 43739* gimple_seq_empty_p: GIMPLE sequences. (line 70) 43740* gimple_seq_first: GIMPLE sequences. (line 44) 43741* gimple_seq_init: GIMPLE sequences. (line 59) 43742* gimple_seq_last: GIMPLE sequences. (line 47) 43743* gimple_seq_reverse: GIMPLE sequences. (line 40) 43744* gimple_seq_set_first: GIMPLE sequences. (line 55) 43745* gimple_seq_set_last: GIMPLE sequences. (line 51) 43746* gimple_seq_singleton_p: GIMPLE sequences. (line 79) 43747* gimple_set_block: Manipulating GIMPLE statements. 43748 (line 39) 43749* gimple_set_def_ops: Manipulating GIMPLE statements. 43750 (line 98) 43751* gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 43752 (line 138) 43753* gimple_set_locus: Manipulating GIMPLE statements. 43754 (line 45) 43755* gimple_set_op: Manipulating GIMPLE statements. 43756 (line 87) 43757* gimple_set_plf: Manipulating GIMPLE statements. 43758 (line 62) 43759* gimple_set_use_ops: Manipulating GIMPLE statements. 43760 (line 105) 43761* gimple_set_vdef_ops: Manipulating GIMPLE statements. 43762 (line 119) 43763* gimple_set_visited: Manipulating GIMPLE statements. 43764 (line 55) 43765* gimple_set_vuse_ops: Manipulating GIMPLE statements. 43766 (line 112) 43767* gimple_statement_base: Tuple representation. 43768 (line 14) 43769* gimple_statement_with_ops: Tuple representation. 43770 (line 96) 43771* gimple_stored_syms: Manipulating GIMPLE statements. 43772 (line 126) 43773* GIMPLE_SWITCH: GIMPLE_SWITCH. (line 6) 43774* gimple_switch_default_label: GIMPLE_SWITCH. (line 46) 43775* gimple_switch_index: GIMPLE_SWITCH. (line 31) 43776* gimple_switch_label: GIMPLE_SWITCH. (line 37) 43777* gimple_switch_num_labels: GIMPLE_SWITCH. (line 22) 43778* gimple_switch_set_default_label: GIMPLE_SWITCH. (line 50) 43779* gimple_switch_set_index: GIMPLE_SWITCH. (line 34) 43780* gimple_switch_set_label: GIMPLE_SWITCH. (line 42) 43781* gimple_switch_set_num_labels: GIMPLE_SWITCH. (line 27) 43782* GIMPLE_TRY: GIMPLE_TRY. (line 6) 43783* gimple_try_catch_is_cleanup: GIMPLE_TRY. (line 20) 43784* gimple_try_cleanup: GIMPLE_TRY. (line 27) 43785* gimple_try_eval: GIMPLE_TRY. (line 23) 43786* gimple_try_flags: GIMPLE_TRY. (line 16) 43787* gimple_try_set_catch_is_cleanup: GIMPLE_TRY. (line 32) 43788* gimple_try_set_cleanup: GIMPLE_TRY. (line 41) 43789* gimple_try_set_eval: GIMPLE_TRY. (line 36) 43790* gimple_visited_p: Manipulating GIMPLE statements. 43791 (line 58) 43792* gimple_wce_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 43793 (line 11) 43794* gimple_wce_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 43795 (line 18) 43796* gimple_wce_set_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 43797 (line 15) 43798* gimple_wce_set_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 43799 (line 22) 43800* GIMPLE_WITH_CLEANUP_EXPR: GIMPLE_WITH_CLEANUP_EXPR. 43801 (line 6) 43802* gimplification <1>: Gimplification pass. 43803 (line 6) 43804* gimplification: Parsing pass. (line 14) 43805* gimplifier: Parsing pass. (line 14) 43806* gimplify_assign: GIMPLE_ASSIGN. (line 19) 43807* gimplify_expr: Gimplification pass. 43808 (line 18) 43809* gimplify_function_tree: Gimplification pass. 43810 (line 18) 43811* GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 43812* global_regs: Register Basics. (line 59) 43813* GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 91) 43814* GO_IF_MODE_DEPENDENT_ADDRESS: Addressing Modes. (line 192) 43815* GOFAST, floating point emulation library: Library Calls. (line 44) 43816* gofast_maybe_init_libfuncs: Library Calls. (line 44) 43817* greater than: Comparisons. (line 60) 43818* gsi_after_labels: Sequence iterators. (line 76) 43819* gsi_bb: Sequence iterators. (line 83) 43820* gsi_commit_edge_inserts: Sequence iterators. (line 194) 43821* gsi_commit_one_edge_insert: Sequence iterators. (line 190) 43822* gsi_end_p: Sequence iterators. (line 60) 43823* gsi_for_stmt: Sequence iterators. (line 157) 43824* gsi_insert_after: Sequence iterators. (line 147) 43825* gsi_insert_before: Sequence iterators. (line 136) 43826* gsi_insert_on_edge: Sequence iterators. (line 174) 43827* gsi_insert_on_edge_immediate: Sequence iterators. (line 185) 43828* gsi_insert_seq_after: Sequence iterators. (line 154) 43829* gsi_insert_seq_before: Sequence iterators. (line 143) 43830* gsi_insert_seq_on_edge: Sequence iterators. (line 179) 43831* gsi_last: Sequence iterators. (line 50) 43832* gsi_last_bb: Sequence iterators. (line 56) 43833* gsi_link_after: Sequence iterators. (line 115) 43834* gsi_link_before: Sequence iterators. (line 105) 43835* gsi_link_seq_after: Sequence iterators. (line 110) 43836* gsi_link_seq_before: Sequence iterators. (line 99) 43837* gsi_move_after: Sequence iterators. (line 161) 43838* gsi_move_before: Sequence iterators. (line 166) 43839* gsi_move_to_bb_end: Sequence iterators. (line 171) 43840* gsi_next: Sequence iterators. (line 66) 43841* gsi_one_before_end_p: Sequence iterators. (line 63) 43842* gsi_prev: Sequence iterators. (line 69) 43843* gsi_remove: Sequence iterators. (line 90) 43844* gsi_replace: Sequence iterators. (line 130) 43845* gsi_seq: Sequence iterators. (line 86) 43846* gsi_split_seq_after: Sequence iterators. (line 120) 43847* gsi_split_seq_before: Sequence iterators. (line 125) 43848* gsi_start: Sequence iterators. (line 40) 43849* gsi_start_bb: Sequence iterators. (line 46) 43850* gsi_stmt: Sequence iterators. (line 72) 43851* gt: Comparisons. (line 60) 43852* gt and attributes: Expressions. (line 64) 43853* GT_EXPR: Unary and Binary Expressions. 43854 (line 6) 43855* gtu: Comparisons. (line 64) 43856* gtu and attributes: Expressions. (line 64) 43857* GTY: Type Information. (line 6) 43858* H in constraint: Simple Constraints. (line 88) 43859* HAmode: Machine Modes. (line 144) 43860* HANDLE_PRAGMA_PACK_PUSH_POP: Misc. (line 467) 43861* HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 478) 43862* HANDLE_SYSV_PRAGMA: Misc. (line 438) 43863* HANDLER: Statements for C++. (line 6) 43864* HANDLER_BODY: Statements for C++. (line 6) 43865* HANDLER_PARMS: Statements for C++. (line 6) 43866* hard registers: Regs and Memory. (line 9) 43867* HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 20) 43868* HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 53) 43869* HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 20) 43870* HARD_REGNO_MODE_OK: Values in Registers. 43871 (line 58) 43872* HARD_REGNO_NREGS: Values in Registers. 43873 (line 11) 43874* HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 43875 (line 25) 43876* HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 43877 (line 43) 43878* HARD_REGNO_RENAME_OK: Values in Registers. 43879 (line 119) 43880* HAS_INIT_SECTION: Macros for Initialization. 43881 (line 19) 43882* HAS_LONG_COND_BRANCH: Misc. (line 9) 43883* HAS_LONG_UNCOND_BRANCH: Misc. (line 18) 43884* HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 43885* HAVE_POST_DECREMENT: Addressing Modes. (line 12) 43886* HAVE_POST_INCREMENT: Addressing Modes. (line 11) 43887* HAVE_POST_MODIFY_DISP: Addressing Modes. (line 18) 43888* HAVE_POST_MODIFY_REG: Addressing Modes. (line 24) 43889* HAVE_PRE_DECREMENT: Addressing Modes. (line 10) 43890* HAVE_PRE_INCREMENT: Addressing Modes. (line 9) 43891* HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 17) 43892* HAVE_PRE_MODIFY_REG: Addressing Modes. (line 23) 43893* HCmode: Machine Modes. (line 197) 43894* HFmode: Machine Modes. (line 58) 43895* high: Constants. (line 109) 43896* HImode: Machine Modes. (line 29) 43897* HImode, in insn: Insns. (line 272) 43898* host configuration: Host Config. (line 6) 43899* host functions: Host Common. (line 6) 43900* host hooks: Host Common. (line 6) 43901* host makefile fragment: Host Fragment. (line 6) 43902* HOST_BIT_BUCKET: Filesystem. (line 51) 43903* HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 43904* HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 12) 43905* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 45) 43906* HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 26) 43907* HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 43908* HOST_LONG_FORMAT: Host Misc. (line 45) 43909* HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 43910* HOST_OBJECT_SUFFIX: Filesystem. (line 40) 43911* HOST_PTR_PRINTF: Host Misc. (line 49) 43912* HOT_TEXT_SECTION_NAME: Sections. (line 43) 43913* HQmode: Machine Modes. (line 107) 43914* I in constraint: Simple Constraints. (line 71) 43915* i in constraint: Simple Constraints. (line 60) 43916* identifier: Identifiers. (line 6) 43917* IDENTIFIER_LENGTH: Identifiers. (line 22) 43918* IDENTIFIER_NODE: Identifiers. (line 6) 43919* IDENTIFIER_OPNAME_P: Identifiers. (line 27) 43920* IDENTIFIER_POINTER: Identifiers. (line 17) 43921* IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 43922* IEEE 754-2008: Decimal float library routines. 43923 (line 6) 43924* IF_COND: Statements for C++. (line 6) 43925* if_marked: GTY Options. (line 155) 43926* IF_STMT: Statements for C++. (line 6) 43927* if_then_else: Comparisons. (line 80) 43928* if_then_else and attributes: Expressions. (line 32) 43929* if_then_else usage: Side Effects. (line 56) 43930* IFCVT_EXTRA_FIELDS: Misc. (line 622) 43931* IFCVT_INIT_EXTRA_FIELDS: Misc. (line 617) 43932* IFCVT_MODIFY_CANCEL: Misc. (line 611) 43933* IFCVT_MODIFY_FINAL: Misc. (line 605) 43934* IFCVT_MODIFY_INSN: Misc. (line 599) 43935* IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 592) 43936* IFCVT_MODIFY_TESTS: Misc. (line 581) 43937* IMAGPART_EXPR: Unary and Binary Expressions. 43938 (line 6) 43939* Immediate Uses: SSA Operands. (line 274) 43940* immediate_operand: Machine-Independent Predicates. 43941 (line 11) 43942* IMMEDIATE_PREFIX: Instruction Output. (line 140) 43943* in_struct: Flags. (line 263) 43944* in_struct, in code_label and note: Flags. (line 59) 43945* in_struct, in insn and jump_insn and call_insn: Flags. (line 49) 43946* in_struct, in insn, jump_insn and call_insn: Flags. (line 166) 43947* in_struct, in mem: Flags. (line 70) 43948* in_struct, in subreg: Flags. (line 205) 43949* include: Including Patterns. (line 6) 43950* INCLUDE_DEFAULTS: Driver. (line 430) 43951* inclusive-or, bitwise: Arithmetic. (line 158) 43952* INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 183) 43953* INCOMING_REGNO: Register Basics. (line 91) 43954* INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 139) 43955* INCOMING_STACK_BOUNDARY: Storage Layout. (line 166) 43956* INDEX_REG_CLASS: Register Classes. (line 134) 43957* indirect_jump instruction pattern: Standard Names. (line 1041) 43958* indirect_operand: Machine-Independent Predicates. 43959 (line 71) 43960* INDIRECT_REF: Storage References. (line 6) 43961* INIT_ARRAY_SECTION_ASM_OP: Sections. (line 108) 43962* INIT_CUMULATIVE_ARGS: Register Arguments. (line 149) 43963* INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 176) 43964* INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 170) 43965* INIT_ENVIRONMENT: Driver. (line 369) 43966* INIT_EXPANDERS: Per-Function Data. (line 39) 43967* INIT_EXPR: Unary and Binary Expressions. 43968 (line 6) 43969* init_machine_status: Per-Function Data. (line 45) 43970* init_one_libfunc: Library Calls. (line 15) 43971* INIT_SECTION_ASM_OP <1>: Macros for Initialization. 43972 (line 10) 43973* INIT_SECTION_ASM_OP: Sections. (line 92) 43974* INITIAL_ELIMINATION_OFFSET: Elimination. (line 85) 43975* INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 83) 43976* INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 35) 43977* initialization routines: Initialization. (line 6) 43978* inlining: Target Attributes. (line 87) 43979* insert_insn_on_edge: Maintaining the CFG. 43980 (line 118) 43981* insn: Insns. (line 63) 43982* insn and /f: Flags. (line 125) 43983* insn and /j: Flags. (line 175) 43984* insn and /s: Flags. (line 49) 43985* insn and /u: Flags. (line 39) 43986* insn and /v: Flags. (line 44) 43987* insn attributes: Insn Attributes. (line 6) 43988* insn canonicalization: Insn Canonicalizations. 43989 (line 6) 43990* insn includes: Including Patterns. (line 6) 43991* insn lengths, computing: Insn Lengths. (line 6) 43992* insn splitting: Insn Splitting. (line 6) 43993* insn-attr.h: Defining Attributes. 43994 (line 24) 43995* INSN_ANNULLED_BRANCH_P: Flags. (line 39) 43996* INSN_CODE: Insns. (line 298) 43997* INSN_DELETED_P: Flags. (line 44) 43998* INSN_FROM_TARGET_P: Flags. (line 49) 43999* insn_list: Insns. (line 545) 44000* INSN_REFERENCES_ARE_DELAYED: Misc. (line 520) 44001* INSN_SETS_ARE_DELAYED: Misc. (line 509) 44002* INSN_UID: Insns. (line 23) 44003* INSN_VAR_LOCATION: Insns. (line 239) 44004* insns: Insns. (line 6) 44005* insns, generating: RTL Template. (line 6) 44006* insns, recognizing: RTL Template. (line 6) 44007* instruction attributes: Insn Attributes. (line 6) 44008* instruction latency time: Processor pipeline description. 44009 (line 6) 44010* instruction patterns: Patterns. (line 6) 44011* instruction splitting: Insn Splitting. (line 6) 44012* insv instruction pattern: Standard Names. (line 866) 44013* int: Manipulating GIMPLE statements. 44014 (line 66) 44015* INT16_TYPE: Type Layout. (line 237) 44016* INT32_TYPE: Type Layout. (line 238) 44017* INT64_TYPE: Type Layout. (line 239) 44018* INT8_TYPE: Type Layout. (line 236) 44019* INT_FAST16_TYPE: Type Layout. (line 253) 44020* INT_FAST32_TYPE: Type Layout. (line 254) 44021* INT_FAST64_TYPE: Type Layout. (line 255) 44022* INT_FAST8_TYPE: Type Layout. (line 252) 44023* INT_LEAST16_TYPE: Type Layout. (line 245) 44024* INT_LEAST32_TYPE: Type Layout. (line 246) 44025* INT_LEAST64_TYPE: Type Layout. (line 247) 44026* INT_LEAST8_TYPE: Type Layout. (line 244) 44027* INT_TYPE_SIZE: Type Layout. (line 12) 44028* INTEGER_CST: Constant expressions. 44029 (line 6) 44030* INTEGER_TYPE: Types. (line 6) 44031* Interdependence of Patterns: Dependent Patterns. (line 6) 44032* interfacing to GCC output: Interface. (line 6) 44033* interlock delays: Processor pipeline description. 44034 (line 6) 44035* intermediate representation lowering: Parsing pass. (line 14) 44036* INTMAX_TYPE: Type Layout. (line 213) 44037* INTPTR_TYPE: Type Layout. (line 260) 44038* introduction: Top. (line 6) 44039* INVOKE__main: Macros for Initialization. 44040 (line 51) 44041* ior: Arithmetic. (line 158) 44042* ior and attributes: Expressions. (line 50) 44043* ior, canonicalization of: Insn Canonicalizations. 44044 (line 52) 44045* iorM3 instruction pattern: Standard Names. (line 222) 44046* IRA_COVER_CLASSES: Register Classes. (line 535) 44047* IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 37) 44048* IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 120) 44049* is_gimple_omp: GIMPLE_OMP_PARALLEL. 44050 (line 65) 44051* iterators in .md files: Iterators. (line 6) 44052* IV analysis on GIMPLE: Scalar evolutions. (line 6) 44053* IV analysis on RTL: loop-iv. (line 6) 44054* jump: Flags. (line 314) 44055* jump instruction pattern: Standard Names. (line 932) 44056* jump instruction patterns: Jump Patterns. (line 6) 44057* jump instructions and set: Side Effects. (line 56) 44058* jump, in call_insn: Flags. (line 179) 44059* jump, in insn: Flags. (line 175) 44060* jump, in mem: Flags. (line 79) 44061* JUMP_ALIGN: Alignment Output. (line 9) 44062* jump_insn: Insns. (line 73) 44063* jump_insn and /f: Flags. (line 125) 44064* jump_insn and /s: Flags. (line 49) 44065* jump_insn and /u: Flags. (line 39) 44066* jump_insn and /v: Flags. (line 44) 44067* JUMP_LABEL: Insns. (line 80) 44068* JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 152) 44069* Jumps: Jumps. (line 6) 44070* LABEL_ALIGN: Alignment Output. (line 52) 44071* LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 22) 44072* LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. (line 30) 44073* LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 62) 44074* LABEL_ALT_ENTRY_P: Insns. (line 140) 44075* LABEL_ALTERNATE_NAME: Edges. (line 180) 44076* LABEL_DECL: Declarations. (line 6) 44077* LABEL_KIND: Insns. (line 140) 44078* LABEL_NUSES: Insns. (line 136) 44079* LABEL_PRESERVE_P: Flags. (line 59) 44080* label_ref: Constants. (line 86) 44081* label_ref and /v: Flags. (line 65) 44082* label_ref, RTL sharing: Sharing. (line 35) 44083* LABEL_REF_NONLOCAL_P: Flags. (line 65) 44084* lang_hooks.gimplify_expr: Gimplification pass. 44085 (line 18) 44086* lang_hooks.parse_file: Parsing pass. (line 6) 44087* language-dependent trees: Language-dependent trees. 44088 (line 6) 44089* language-independent intermediate representation: Parsing pass. 44090 (line 14) 44091* large return values: Aggregate Return. (line 6) 44092* LARGEST_EXPONENT_IS_NORMAL: Storage Layout. (line 474) 44093* LAST_STACK_REG: Stack Registers. (line 31) 44094* LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 44095* lceilMN2: Standard Names. (line 597) 44096* LCSSA: LCSSA. (line 6) 44097* LD_FINI_SWITCH: Macros for Initialization. 44098 (line 29) 44099* LD_INIT_SWITCH: Macros for Initialization. 44100 (line 25) 44101* LDD_SUFFIX: Macros for Initialization. 44102 (line 116) 44103* le: Comparisons. (line 76) 44104* le and attributes: Expressions. (line 64) 44105* LE_EXPR: Unary and Binary Expressions. 44106 (line 6) 44107* leaf functions: Leaf Functions. (line 6) 44108* leaf_function_p: Standard Names. (line 1003) 44109* LEAF_REG_REMAP: Leaf Functions. (line 39) 44110* LEAF_REGISTERS: Leaf Functions. (line 25) 44111* left rotate: Arithmetic. (line 190) 44112* left shift: Arithmetic. (line 168) 44113* LEGITIMATE_CONSTANT_P: Addressing Modes. (line 207) 44114* LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 44115* LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 147) 44116* length: GTY Options. (line 50) 44117* less than: Comparisons. (line 68) 44118* less than or equal: Comparisons. (line 76) 44119* leu: Comparisons. (line 76) 44120* leu and attributes: Expressions. (line 64) 44121* lfloorMN2: Standard Names. (line 592) 44122* LIB2FUNCS_EXTRA: Target Fragment. (line 11) 44123* LIB_SPEC: Driver. (line 170) 44124* LIBCALL_VALUE: Scalar Return. (line 60) 44125* libgcc.a: Library Calls. (line 6) 44126* LIBGCC2_CFLAGS: Target Fragment. (line 8) 44127* LIBGCC2_HAS_DF_MODE: Type Layout. (line 109) 44128* LIBGCC2_HAS_TF_MODE: Type Layout. (line 123) 44129* LIBGCC2_HAS_XF_MODE: Type Layout. (line 117) 44130* LIBGCC2_LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 103) 44131* LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 982) 44132* LIBGCC2_WORDS_BIG_ENDIAN: Storage Layout. (line 36) 44133* LIBGCC_SPEC: Driver. (line 178) 44134* library subroutine names: Library Calls. (line 6) 44135* LIBRARY_PATH_ENV: Misc. (line 560) 44136* LIMIT_RELOAD_CLASS: Register Classes. (line 254) 44137* Linear loop transformations framework: Lambda. (line 6) 44138* LINK_COMMAND_SPEC: Driver. (line 299) 44139* LINK_EH_SPEC: Driver. (line 205) 44140* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES: Driver. (line 309) 44141* LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 295) 44142* LINK_LIBGCC_SPECIAL_1: Driver. (line 290) 44143* LINK_SPEC: Driver. (line 163) 44144* list: Containers. (line 6) 44145* Liveness representation: Liveness information. 44146 (line 6) 44147* lo_sum: Arithmetic. (line 24) 44148* load address instruction: Simple Constraints. (line 154) 44149* LOAD_EXTEND_OP: Misc. (line 69) 44150* load_multiple instruction pattern: Standard Names. (line 137) 44151* LOCAL_ALIGNMENT: Storage Layout. (line 255) 44152* LOCAL_CLASS_P: Classes. (line 73) 44153* LOCAL_DECL_ALIGNMENT: Storage Layout. (line 279) 44154* LOCAL_INCLUDE_DIR: Driver. (line 376) 44155* LOCAL_LABEL_PREFIX: Instruction Output. (line 138) 44156* LOCAL_REGNO: Register Basics. (line 105) 44157* LOG_LINKS: Insns. (line 317) 44158* Logical Operators: Logical Operators. (line 6) 44159* logical-and, bitwise: Arithmetic. (line 153) 44160* logM2 instruction pattern: Standard Names. (line 505) 44161* LONG_ACCUM_TYPE_SIZE: Type Layout. (line 93) 44162* LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 58) 44163* LONG_FRACT_TYPE_SIZE: Type Layout. (line 73) 44164* LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 98) 44165* LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 78) 44166* LONG_LONG_TYPE_SIZE: Type Layout. (line 33) 44167* LONG_TYPE_SIZE: Type Layout. (line 22) 44168* longjmp and automatic variables: Interface. (line 52) 44169* Loop analysis: Loop representation. 44170 (line 6) 44171* Loop manipulation: Loop manipulation. (line 6) 44172* Loop querying: Loop querying. (line 6) 44173* Loop representation: Loop representation. 44174 (line 6) 44175* Loop-closed SSA form: LCSSA. (line 6) 44176* LOOP_ALIGN: Alignment Output. (line 35) 44177* LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 48) 44178* LOOP_EXPR: Unary and Binary Expressions. 44179 (line 6) 44180* looping instruction patterns: Looping Patterns. (line 6) 44181* lowering, language-dependent intermediate representation: Parsing pass. 44182 (line 14) 44183* lrintMN2: Standard Names. (line 582) 44184* lroundMN2: Standard Names. (line 587) 44185* LSHIFT_EXPR: Unary and Binary Expressions. 44186 (line 6) 44187* lshiftrt: Arithmetic. (line 185) 44188* lshiftrt and attributes: Expressions. (line 64) 44189* lshrM3 instruction pattern: Standard Names. (line 441) 44190* lt: Comparisons. (line 68) 44191* lt and attributes: Expressions. (line 64) 44192* LT_EXPR: Unary and Binary Expressions. 44193 (line 6) 44194* LTGT_EXPR: Unary and Binary Expressions. 44195 (line 6) 44196* ltu: Comparisons. (line 68) 44197* m in constraint: Simple Constraints. (line 17) 44198* machine attributes: Target Attributes. (line 6) 44199* machine description macros: Target Macros. (line 6) 44200* machine descriptions: Machine Desc. (line 6) 44201* machine mode conversions: Conversions. (line 6) 44202* machine modes: Machine Modes. (line 6) 44203* machine specific constraints: Machine Constraints. 44204 (line 6) 44205* machine-independent predicates: Machine-Independent Predicates. 44206 (line 6) 44207* macros, target description: Target Macros. (line 6) 44208* maddMN4 instruction pattern: Standard Names. (line 364) 44209* MAKE_DECL_ONE_ONLY: Label Output. (line 218) 44210* make_phi_node: GIMPLE_PHI. (line 7) 44211* make_safe_from: Expander Definitions. 44212 (line 148) 44213* makefile fragment: Fragments. (line 6) 44214* makefile targets: Makefile. (line 6) 44215* MALLOC_ABI_ALIGNMENT: Storage Layout. (line 180) 44216* Manipulating GIMPLE statements: Manipulating GIMPLE statements. 44217 (line 6) 44218* mark_hook: GTY Options. (line 170) 44219* marking roots: GGC Roots. (line 6) 44220* MASK_RETURN_ADDR: Exception Region Output. 44221 (line 35) 44222* match_dup <1>: define_peephole2. (line 28) 44223* match_dup: RTL Template. (line 73) 44224* match_dup and attributes: Insn Lengths. (line 16) 44225* match_op_dup: RTL Template. (line 163) 44226* match_operand: RTL Template. (line 16) 44227* match_operand and attributes: Expressions. (line 55) 44228* match_operator: RTL Template. (line 95) 44229* match_par_dup: RTL Template. (line 219) 44230* match_parallel: RTL Template. (line 172) 44231* match_scratch <1>: define_peephole2. (line 28) 44232* match_scratch: RTL Template. (line 58) 44233* matching constraint: Simple Constraints. (line 132) 44234* matching operands: Output Template. (line 49) 44235* math library: Soft float library routines. 44236 (line 6) 44237* math, in RTL: Arithmetic. (line 6) 44238* MATH_LIBRARY: Misc. (line 553) 44239* matherr: Library Calls. (line 58) 44240* MAX_BITS_PER_WORD: Storage Layout. (line 61) 44241* MAX_CONDITIONAL_EXECUTE: Misc. (line 575) 44242* MAX_FIXED_MODE_SIZE: Storage Layout. (line 421) 44243* MAX_MOVE_MAX: Misc. (line 120) 44244* MAX_OFILE_ALIGNMENT: Storage Layout. (line 217) 44245* MAX_REGS_PER_ADDRESS: Addressing Modes. (line 43) 44246* MAX_STACK_ALIGNMENT: Storage Layout. (line 210) 44247* maxM3 instruction pattern: Standard Names. (line 234) 44248* may_trap_p, tree_could_trap_p: Edges. (line 115) 44249* maybe_undef: GTY Options. (line 178) 44250* mcount: Profiling. (line 12) 44251* MD_CAN_REDIRECT_BRANCH: Misc. (line 712) 44252* MD_EXEC_PREFIX: Driver. (line 330) 44253* MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 98) 44254* MD_HANDLE_UNWABI: Exception Handling. (line 118) 44255* MD_STARTFILE_PREFIX: Driver. (line 358) 44256* MD_STARTFILE_PREFIX_1: Driver. (line 364) 44257* MD_UNWIND_SUPPORT: Exception Handling. (line 94) 44258* mem: Regs and Memory. (line 374) 44259* mem and /c: Flags. (line 99) 44260* mem and /f: Flags. (line 103) 44261* mem and /i: Flags. (line 85) 44262* mem and /j: Flags. (line 79) 44263* mem and /s: Flags. (line 70) 44264* mem and /u: Flags. (line 152) 44265* mem and /v: Flags. (line 94) 44266* mem, RTL sharing: Sharing. (line 40) 44267* MEM_ADDR_SPACE: Special Accessors. (line 39) 44268* MEM_ALIAS_SET: Special Accessors. (line 9) 44269* MEM_ALIGN: Special Accessors. (line 36) 44270* MEM_EXPR: Special Accessors. (line 20) 44271* MEM_IN_STRUCT_P: Flags. (line 70) 44272* MEM_KEEP_ALIAS_SET_P: Flags. (line 79) 44273* MEM_NOTRAP_P: Flags. (line 99) 44274* MEM_OFFSET: Special Accessors. (line 28) 44275* MEM_POINTER: Flags. (line 103) 44276* MEM_READONLY_P: Flags. (line 152) 44277* MEM_SCALAR_P: Flags. (line 85) 44278* MEM_SIZE: Special Accessors. (line 31) 44279* MEM_VOLATILE_P: Flags. (line 94) 44280* MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 401) 44281* memory model: Memory model. (line 6) 44282* memory reference, nonoffsettable: Simple Constraints. (line 246) 44283* memory references in constraints: Simple Constraints. (line 17) 44284* memory_barrier instruction pattern: Standard Names. (line 1385) 44285* MEMORY_MOVE_COST: Costs. (line 29) 44286* memory_operand: Machine-Independent Predicates. 44287 (line 58) 44288* METHOD_TYPE: Types. (line 6) 44289* MIN_UNITS_PER_WORD: Storage Layout. (line 71) 44290* MINIMUM_ALIGNMENT: Storage Layout. (line 289) 44291* MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 188) 44292* minM3 instruction pattern: Standard Names. (line 234) 44293* minus: Arithmetic. (line 36) 44294* minus and attributes: Expressions. (line 64) 44295* minus, canonicalization of: Insn Canonicalizations. 44296 (line 27) 44297* MINUS_EXPR: Unary and Binary Expressions. 44298 (line 6) 44299* MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 44300* mod: Arithmetic. (line 131) 44301* mod and attributes: Expressions. (line 64) 44302* mode classes: Machine Modes. (line 219) 44303* mode iterators in .md files: Mode Iterators. (line 6) 44304* mode switching: Mode Switching. (line 6) 44305* MODE_ACCUM: Machine Modes. (line 249) 44306* MODE_AFTER: Mode Switching. (line 49) 44307* MODE_BASE_REG_CLASS: Register Classes. (line 112) 44308* MODE_BASE_REG_REG_CLASS: Register Classes. (line 118) 44309* MODE_CC <1>: MODE_CC Condition Codes. 44310 (line 6) 44311* MODE_CC: Machine Modes. (line 268) 44312* MODE_CODE_BASE_REG_CLASS: Register Classes. (line 125) 44313* MODE_COMPLEX_FLOAT: Machine Modes. (line 260) 44314* MODE_COMPLEX_INT: Machine Modes. (line 257) 44315* MODE_DECIMAL_FLOAT: Machine Modes. (line 237) 44316* MODE_ENTRY: Mode Switching. (line 54) 44317* MODE_EXIT: Mode Switching. (line 60) 44318* MODE_FLOAT: Machine Modes. (line 233) 44319* MODE_FRACT: Machine Modes. (line 241) 44320* MODE_FUNCTION: Machine Modes. (line 264) 44321* MODE_INT: Machine Modes. (line 225) 44322* MODE_NEEDED: Mode Switching. (line 42) 44323* MODE_PARTIAL_INT: Machine Modes. (line 229) 44324* MODE_PRIORITY_TO_MODE: Mode Switching. (line 66) 44325* MODE_RANDOM: Machine Modes. (line 273) 44326* MODE_UACCUM: Machine Modes. (line 253) 44327* MODE_UFRACT: Machine Modes. (line 245) 44328* MODES_TIEABLE_P: Values in Registers. 44329 (line 129) 44330* modifiers in constraints: Modifiers. (line 6) 44331* MODIFY_EXPR: Unary and Binary Expressions. 44332 (line 6) 44333* MODIFY_JNI_METHOD_CALL: Misc. (line 790) 44334* MODIFY_TARGET_NAME: Driver. (line 385) 44335* modM3 instruction pattern: Standard Names. (line 222) 44336* modulo scheduling: RTL passes. (line 131) 44337* MOVE_BY_PIECES_P: Costs. (line 113) 44338* MOVE_MAX: Misc. (line 115) 44339* MOVE_MAX_PIECES: Costs. (line 119) 44340* MOVE_RATIO: Costs. (line 97) 44341* movM instruction pattern: Standard Names. (line 11) 44342* movmemM instruction pattern: Standard Names. (line 654) 44343* movmisalignM instruction pattern: Standard Names. (line 126) 44344* movMODEcc instruction pattern: Standard Names. (line 877) 44345* movstr instruction pattern: Standard Names. (line 689) 44346* movstrictM instruction pattern: Standard Names. (line 120) 44347* msubMN4 instruction pattern: Standard Names. (line 387) 44348* mulhisi3 instruction pattern: Standard Names. (line 340) 44349* mulM3 instruction pattern: Standard Names. (line 222) 44350* mulqihi3 instruction pattern: Standard Names. (line 344) 44351* mulsidi3 instruction pattern: Standard Names. (line 344) 44352* mult: Arithmetic. (line 92) 44353* mult and attributes: Expressions. (line 64) 44354* mult, canonicalization of: Insn Canonicalizations. 44355 (line 27) 44356* MULT_EXPR: Unary and Binary Expressions. 44357 (line 6) 44358* MULTILIB_DEFAULTS: Driver. (line 315) 44359* MULTILIB_DIRNAMES: Target Fragment. (line 64) 44360* MULTILIB_EXCEPTIONS: Target Fragment. (line 84) 44361* MULTILIB_EXTRA_OPTS: Target Fragment. (line 96) 44362* MULTILIB_MATCHES: Target Fragment. (line 77) 44363* MULTILIB_OPTIONS: Target Fragment. (line 44) 44364* multiple alternative constraints: Multi-Alternative. (line 6) 44365* MULTIPLE_SYMBOL_SPACES: Misc. (line 533) 44366* multiplication: Arithmetic. (line 92) 44367* multiplication with signed saturation: Arithmetic. (line 92) 44368* multiplication with unsigned saturation: Arithmetic. (line 92) 44369* MUST_USE_SJLJ_EXCEPTIONS: Exception Region Output. 44370 (line 64) 44371* n in constraint: Simple Constraints. (line 65) 44372* N_REG_CLASSES: Register Classes. (line 76) 44373* name: Identifiers. (line 6) 44374* named address spaces: Named Address Spaces. 44375 (line 6) 44376* named patterns and conditions: Patterns. (line 47) 44377* names, pattern: Standard Names. (line 6) 44378* namespace, scope: Namespaces. (line 6) 44379* NAMESPACE_DECL <1>: Namespaces. (line 6) 44380* NAMESPACE_DECL: Declarations. (line 6) 44381* NATIVE_SYSTEM_HEADER_DIR: Target Fragment. (line 103) 44382* ne: Comparisons. (line 56) 44383* ne and attributes: Expressions. (line 64) 44384* NE_EXPR: Unary and Binary Expressions. 44385 (line 6) 44386* nearbyintM2 instruction pattern: Standard Names. (line 564) 44387* neg: Arithmetic. (line 81) 44388* neg and attributes: Expressions. (line 64) 44389* neg, canonicalization of: Insn Canonicalizations. 44390 (line 27) 44391* NEGATE_EXPR: Unary and Binary Expressions. 44392 (line 6) 44393* negation: Arithmetic. (line 81) 44394* negation with signed saturation: Arithmetic. (line 81) 44395* negation with unsigned saturation: Arithmetic. (line 81) 44396* negM2 instruction pattern: Standard Names. (line 449) 44397* nested functions, trampolines for: Trampolines. (line 6) 44398* nested_ptr: GTY Options. (line 185) 44399* next_bb, prev_bb, FOR_EACH_BB: Basic Blocks. (line 10) 44400* NEXT_INSN: Insns. (line 30) 44401* NEXT_OBJC_RUNTIME: Library Calls. (line 94) 44402* nil: RTL Objects. (line 73) 44403* NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 39) 44404* NO_DBX_FUNCTION_END: DBX Hooks. (line 33) 44405* NO_DBX_GCC_MARKER: File Names and DBX. (line 28) 44406* NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 23) 44407* NO_DOLLAR_IN_LABEL: Misc. (line 497) 44408* NO_DOT_IN_LABEL: Misc. (line 503) 44409* NO_FUNCTION_CSE: Costs. (line 209) 44410* NO_IMPLICIT_EXTERN_C: Misc. (line 376) 44411* NO_PROFILE_COUNTERS: Profiling. (line 28) 44412* NO_REGS: Register Classes. (line 17) 44413* NON_LVALUE_EXPR: Unary and Binary Expressions. 44414 (line 6) 44415* nondeterministic finite state automaton: Processor pipeline description. 44416 (line 301) 44417* nonimmediate_operand: Machine-Independent Predicates. 44418 (line 101) 44419* nonlocal goto handler: Edges. (line 171) 44420* nonlocal_goto instruction pattern: Standard Names. (line 1225) 44421* nonlocal_goto_receiver instruction pattern: Standard Names. 44422 (line 1242) 44423* nonmemory_operand: Machine-Independent Predicates. 44424 (line 97) 44425* nonoffsettable memory reference: Simple Constraints. (line 246) 44426* nop instruction pattern: Standard Names. (line 1036) 44427* NOP_EXPR: Unary and Binary Expressions. 44428 (line 6) 44429* normal predicates: Predicates. (line 31) 44430* not: Arithmetic. (line 149) 44431* not and attributes: Expressions. (line 50) 44432* not equal: Comparisons. (line 56) 44433* not, canonicalization of: Insn Canonicalizations. 44434 (line 27) 44435* note: Insns. (line 168) 44436* note and /i: Flags. (line 59) 44437* note and /v: Flags. (line 44) 44438* NOTE_INSN_BASIC_BLOCK, CODE_LABEL, notes: Basic Blocks. (line 41) 44439* NOTE_INSN_BLOCK_BEG: Insns. (line 193) 44440* NOTE_INSN_BLOCK_END: Insns. (line 193) 44441* NOTE_INSN_DELETED: Insns. (line 183) 44442* NOTE_INSN_DELETED_LABEL: Insns. (line 188) 44443* NOTE_INSN_EH_REGION_BEG: Insns. (line 199) 44444* NOTE_INSN_EH_REGION_END: Insns. (line 199) 44445* NOTE_INSN_FUNCTION_BEG: Insns. (line 223) 44446* NOTE_INSN_LOOP_BEG: Insns. (line 207) 44447* NOTE_INSN_LOOP_CONT: Insns. (line 213) 44448* NOTE_INSN_LOOP_END: Insns. (line 207) 44449* NOTE_INSN_LOOP_VTOP: Insns. (line 217) 44450* NOTE_INSN_VAR_LOCATION: Insns. (line 227) 44451* NOTE_LINE_NUMBER: Insns. (line 168) 44452* NOTE_SOURCE_FILE: Insns. (line 168) 44453* NOTE_VAR_LOCATION: Insns. (line 227) 44454* NOTICE_UPDATE_CC: CC0 Condition Codes. 44455 (line 31) 44456* NUM_MACHINE_MODES: Machine Modes. (line 286) 44457* NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 44458* Number of iterations analysis: Number of iterations. 44459 (line 6) 44460* o in constraint: Simple Constraints. (line 23) 44461* OBJC_GEN_METHOD_LABEL: Label Output. (line 412) 44462* OBJC_JBLEN: Misc. (line 977) 44463* OBJECT_FORMAT_COFF: Macros for Initialization. 44464 (line 97) 44465* OFFSET_TYPE: Types. (line 6) 44466* offsettable address: Simple Constraints. (line 23) 44467* OImode: Machine Modes. (line 51) 44468* Omega a solver for linear programming problems: Omega. (line 6) 44469* OMP_ATOMIC: OpenMP. (line 6) 44470* OMP_CLAUSE: OpenMP. (line 6) 44471* OMP_CONTINUE: OpenMP. (line 6) 44472* OMP_CRITICAL: OpenMP. (line 6) 44473* OMP_FOR: OpenMP. (line 6) 44474* OMP_MASTER: OpenMP. (line 6) 44475* OMP_ORDERED: OpenMP. (line 6) 44476* OMP_PARALLEL: OpenMP. (line 6) 44477* OMP_RETURN: OpenMP. (line 6) 44478* OMP_SECTION: OpenMP. (line 6) 44479* OMP_SECTIONS: OpenMP. (line 6) 44480* OMP_SINGLE: OpenMP. (line 6) 44481* one_cmplM2 instruction pattern: Standard Names. (line 651) 44482* operand access: Accessors. (line 6) 44483* Operand Access Routines: SSA Operands. (line 119) 44484* operand constraints: Constraints. (line 6) 44485* Operand Iterators: SSA Operands. (line 119) 44486* operand predicates: Predicates. (line 6) 44487* operand substitution: Output Template. (line 6) 44488* operands <1>: Patterns. (line 53) 44489* operands: SSA Operands. (line 6) 44490* Operands: Operands. (line 6) 44491* operator predicates: Predicates. (line 6) 44492* optc-gen.awk: Options. (line 6) 44493* Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 44494* OPTIMIZATION_OPTIONS: Run-time Target. (line 134) 44495* OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 9) 44496* option specification files: Options. (line 6) 44497* OPTION_DEFAULT_SPECS: Driver. (line 88) 44498* optional hardware or system features: Run-time Target. (line 59) 44499* options, directory search: Including Patterns. (line 44) 44500* order of register allocation: Allocation Order. (line 6) 44501* ORDER_REGS_FOR_LOCAL_ALLOC: Allocation Order. (line 23) 44502* ordered_comparison_operator: Machine-Independent Predicates. 44503 (line 116) 44504* ORDERED_EXPR: Unary and Binary Expressions. 44505 (line 6) 44506* Ordering of Patterns: Pattern Ordering. (line 6) 44507* ORIGINAL_REGNO: Special Accessors. (line 44) 44508* other register constraints: Simple Constraints. (line 163) 44509* OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 71) 44510* OUTGOING_REGNO: Register Basics. (line 98) 44511* output of assembler code: File Framework. (line 6) 44512* output statements: Output Statement. (line 6) 44513* output templates: Output Template. (line 6) 44514* OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 39) 44515* output_asm_insn: Output Statement. (line 53) 44516* OUTPUT_QUOTED_STRING: File Framework. (line 93) 44517* OVERLOAD: Functions for C++. (line 6) 44518* OVERRIDE_ABI_FORMAT: Register Arguments. (line 140) 44519* OVERRIDE_OPTIONS: Run-time Target. (line 105) 44520* OVL_CURRENT: Functions for C++. (line 6) 44521* OVL_NEXT: Functions for C++. (line 6) 44522* p in constraint: Simple Constraints. (line 154) 44523* PAD_VARARGS_DOWN: Register Arguments. (line 220) 44524* parallel: Side Effects. (line 204) 44525* param_is: GTY Options. (line 113) 44526* parameters, c++ abi: C++ ABI. (line 6) 44527* parameters, miscellaneous: Misc. (line 6) 44528* parameters, precompiled headers: PCH Target. (line 6) 44529* paramN_is: GTY Options. (line 131) 44530* parity: Arithmetic. (line 232) 44531* parityM2 instruction pattern: Standard Names. (line 645) 44532* PARM_BOUNDARY: Storage Layout. (line 145) 44533* PARM_DECL: Declarations. (line 6) 44534* PARSE_LDD_OUTPUT: Macros for Initialization. 44535 (line 121) 44536* passes and files of the compiler: Passes. (line 6) 44537* passing arguments: Interface. (line 36) 44538* PATH_SEPARATOR: Filesystem. (line 31) 44539* PATTERN: Insns. (line 288) 44540* pattern conditions: Patterns. (line 43) 44541* pattern names: Standard Names. (line 6) 44542* Pattern Ordering: Pattern Ordering. (line 6) 44543* patterns: Patterns. (line 6) 44544* pc: Regs and Memory. (line 361) 44545* pc and attributes: Insn Lengths. (line 20) 44546* pc, RTL sharing: Sharing. (line 25) 44547* PC_REGNUM: Register Basics. (line 112) 44548* pc_rtx: Regs and Memory. (line 366) 44549* PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 315) 44550* PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 65) 44551* PDImode: Machine Modes. (line 40) 44552* peephole optimization, RTL representation: Side Effects. (line 238) 44553* peephole optimizer definitions: Peephole Definitions. 44554 (line 6) 44555* per-function data: Per-Function Data. (line 6) 44556* percent sign: Output Template. (line 6) 44557* PHI nodes: SSA. (line 31) 44558* phi_arg_d: GIMPLE_PHI. (line 28) 44559* PHI_ARG_DEF: SSA. (line 71) 44560* PHI_ARG_EDGE: SSA. (line 68) 44561* PHI_ARG_ELT: SSA. (line 63) 44562* PHI_NUM_ARGS: SSA. (line 59) 44563* PHI_RESULT: SSA. (line 56) 44564* PIC: PIC. (line 6) 44565* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 26) 44566* PIC_OFFSET_TABLE_REGNUM: PIC. (line 16) 44567* pipeline hazard recognizer: Processor pipeline description. 44568 (line 6) 44569* Plugins: Plugins. (line 6) 44570* plus: Arithmetic. (line 14) 44571* plus and attributes: Expressions. (line 64) 44572* plus, canonicalization of: Insn Canonicalizations. 44573 (line 27) 44574* PLUS_EXPR: Unary and Binary Expressions. 44575 (line 6) 44576* Pmode: Misc. (line 344) 44577* pmode_register_operand: Machine-Independent Predicates. 44578 (line 35) 44579* pointer: Types. (line 6) 44580* POINTER_PLUS_EXPR: Unary and Binary Expressions. 44581 (line 6) 44582* POINTER_SIZE: Storage Layout. (line 83) 44583* POINTER_TYPE: Types. (line 6) 44584* POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 89) 44585* pop_operand: Machine-Independent Predicates. 44586 (line 88) 44587* popcount: Arithmetic. (line 228) 44588* popcountM2 instruction pattern: Standard Names. (line 639) 44589* portability: Portability. (line 6) 44590* position independent code: PIC. (line 6) 44591* post_dec: Incdec. (line 25) 44592* post_inc: Incdec. (line 30) 44593* post_modify: Incdec. (line 33) 44594* POSTDECREMENT_EXPR: Unary and Binary Expressions. 44595 (line 6) 44596* POSTINCREMENT_EXPR: Unary and Binary Expressions. 44597 (line 6) 44598* POWI_MAX_MULTS: Misc. (line 845) 44599* powM3 instruction pattern: Standard Names. (line 513) 44600* pragma: Misc. (line 381) 44601* pre_dec: Incdec. (line 8) 44602* PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 113) 44603* pre_inc: Incdec. (line 22) 44604* pre_modify: Incdec. (line 51) 44605* PREDECREMENT_EXPR: Unary and Binary Expressions. 44606 (line 6) 44607* predefined macros: Run-time Target. (line 6) 44608* predicates: Predicates. (line 6) 44609* predicates and machine modes: Predicates. (line 31) 44610* predication <1>: Cond. Exec. Macros. (line 6) 44611* predication: Conditional Execution. 44612 (line 6) 44613* predict.def: Profile information. 44614 (line 24) 44615* PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 42) 44616* PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 246) 44617* PREFERRED_RELOAD_CLASS: Register Classes. (line 211) 44618* PREFERRED_STACK_BOUNDARY: Storage Layout. (line 159) 44619* prefetch: Side Effects. (line 312) 44620* prefetch and /v: Flags. (line 232) 44621* prefetch instruction pattern: Standard Names. (line 1364) 44622* PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 232) 44623* PREINCREMENT_EXPR: Unary and Binary Expressions. 44624 (line 6) 44625* presence_set: Processor pipeline description. 44626 (line 220) 44627* preserving SSA form: SSA. (line 76) 44628* preserving virtual SSA form: SSA. (line 186) 44629* prev_active_insn: define_peephole. (line 60) 44630* PREV_INSN: Insns. (line 26) 44631* PRINT_OPERAND: Instruction Output. (line 81) 44632* PRINT_OPERAND_ADDRESS: Instruction Output. (line 109) 44633* PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 102) 44634* probe_stack instruction pattern: Standard Names. (line 1217) 44635* processor functional units: Processor pipeline description. 44636 (line 6) 44637* processor pipeline description: Processor pipeline description. 44638 (line 6) 44639* product: Arithmetic. (line 92) 44640* profile feedback: Profile information. 44641 (line 14) 44642* profile representation: Profile information. 44643 (line 6) 44644* PROFILE_BEFORE_PROLOGUE: Profiling. (line 35) 44645* PROFILE_HOOK: Profiling. (line 23) 44646* profiling, code generation: Profiling. (line 6) 44647* program counter: Regs and Memory. (line 362) 44648* prologue: Function Entry. (line 6) 44649* prologue instruction pattern: Standard Names. (line 1308) 44650* PROMOTE_MODE: Storage Layout. (line 100) 44651* pseudo registers: Regs and Memory. (line 9) 44652* PSImode: Machine Modes. (line 32) 44653* PTRDIFF_TYPE: Type Layout. (line 184) 44654* purge_dead_edges <1>: Maintaining the CFG. 44655 (line 93) 44656* purge_dead_edges: Edges. (line 104) 44657* push address instruction: Simple Constraints. (line 154) 44658* PUSH_ARGS: Stack Arguments. (line 18) 44659* PUSH_ARGS_REVERSED: Stack Arguments. (line 26) 44660* push_operand: Machine-Independent Predicates. 44661 (line 81) 44662* push_reload: Addressing Modes. (line 171) 44663* PUSH_ROUNDING: Stack Arguments. (line 32) 44664* pushM1 instruction pattern: Standard Names. (line 209) 44665* PUT_CODE: RTL Objects. (line 47) 44666* PUT_MODE: Machine Modes. (line 283) 44667* PUT_REG_NOTE_KIND: Insns. (line 350) 44668* PUT_SDB_: SDB and DWARF. (line 69) 44669* QCmode: Machine Modes. (line 197) 44670* QFmode: Machine Modes. (line 54) 44671* QImode: Machine Modes. (line 25) 44672* QImode, in insn: Insns. (line 272) 44673* QQmode: Machine Modes. (line 103) 44674* qualified type <1>: Types for C++. (line 6) 44675* qualified type: Types. (line 6) 44676* querying function unit reservations: Processor pipeline description. 44677 (line 90) 44678* question mark: Multi-Alternative. (line 41) 44679* quotient: Arithmetic. (line 111) 44680* r in constraint: Simple Constraints. (line 56) 44681* RANGE_TEST_NON_SHORT_CIRCUIT: Costs. (line 213) 44682* RDIV_EXPR: Unary and Binary Expressions. 44683 (line 6) 44684* READONLY_DATA_SECTION_ASM_OP: Sections. (line 63) 44685* real operands: SSA Operands. (line 6) 44686* REAL_ARITHMETIC: Floating Point. (line 66) 44687* REAL_CST: Constant expressions. 44688 (line 6) 44689* REAL_LIBGCC_SPEC: Driver. (line 187) 44690* REAL_NM_FILE_NAME: Macros for Initialization. 44691 (line 106) 44692* REAL_TYPE: Types. (line 6) 44693* REAL_VALUE_ABS: Floating Point. (line 82) 44694* REAL_VALUE_ATOF: Floating Point. (line 50) 44695* REAL_VALUE_FIX: Floating Point. (line 41) 44696* REAL_VALUE_FROM_INT: Floating Point. (line 99) 44697* REAL_VALUE_ISINF: Floating Point. (line 59) 44698* REAL_VALUE_ISNAN: Floating Point. (line 62) 44699* REAL_VALUE_NEGATE: Floating Point. (line 79) 44700* REAL_VALUE_NEGATIVE: Floating Point. (line 56) 44701* REAL_VALUE_TO_INT: Floating Point. (line 93) 44702* REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 144) 44703* REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 142) 44704* REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 143) 44705* REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 140) 44706* REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 141) 44707* REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 139) 44708* REAL_VALUE_TRUNCATE: Floating Point. (line 86) 44709* REAL_VALUE_TYPE: Floating Point. (line 26) 44710* REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 45) 44711* REAL_VALUES_EQUAL: Floating Point. (line 32) 44712* REAL_VALUES_LESS: Floating Point. (line 38) 44713* REALPART_EXPR: Unary and Binary Expressions. 44714 (line 6) 44715* recog_data.operand: Instruction Output. (line 39) 44716* recognizing insns: RTL Template. (line 6) 44717* RECORD_TYPE <1>: Classes. (line 6) 44718* RECORD_TYPE: Types. (line 6) 44719* redirect_edge_and_branch: Profile information. 44720 (line 71) 44721* redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 44722 (line 103) 44723* reduc_smax_M instruction pattern: Standard Names. (line 240) 44724* reduc_smin_M instruction pattern: Standard Names. (line 240) 44725* reduc_splus_M instruction pattern: Standard Names. (line 252) 44726* reduc_umax_M instruction pattern: Standard Names. (line 246) 44727* reduc_umin_M instruction pattern: Standard Names. (line 246) 44728* reduc_uplus_M instruction pattern: Standard Names. (line 258) 44729* reference: Types. (line 6) 44730* REFERENCE_TYPE: Types. (line 6) 44731* reg: Regs and Memory. (line 9) 44732* reg and /f: Flags. (line 112) 44733* reg and /i: Flags. (line 107) 44734* reg and /v: Flags. (line 116) 44735* reg, RTL sharing: Sharing. (line 17) 44736* REG_ALLOC_ORDER: Allocation Order. (line 9) 44737* REG_BR_PRED: Insns. (line 531) 44738* REG_BR_PROB: Insns. (line 525) 44739* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 44740 (line 82) 44741* REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 44742 (line 52) 44743* REG_CC_SETTER: Insns. (line 496) 44744* REG_CC_USER: Insns. (line 496) 44745* REG_CLASS_CONTENTS: Register Classes. (line 86) 44746* reg_class_contents: Register Basics. (line 59) 44747* REG_CLASS_FROM_CONSTRAINT: Old Constraints. (line 35) 44748* REG_CLASS_FROM_LETTER: Old Constraints. (line 27) 44749* REG_CLASS_NAMES: Register Classes. (line 81) 44750* REG_CROSSING_JUMP: Insns. (line 409) 44751* REG_DEAD: Insns. (line 361) 44752* REG_DEAD, REG_UNUSED: Liveness information. 44753 (line 32) 44754* REG_DEP_ANTI: Insns. (line 518) 44755* REG_DEP_OUTPUT: Insns. (line 514) 44756* REG_DEP_TRUE: Insns. (line 511) 44757* REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 110) 44758* REG_EQUAL: Insns. (line 424) 44759* REG_EQUIV: Insns. (line 424) 44760* REG_EXPR: Special Accessors. (line 50) 44761* REG_FRAME_RELATED_EXPR: Insns. (line 537) 44762* REG_FUNCTION_VALUE_P: Flags. (line 107) 44763* REG_INC: Insns. (line 377) 44764* reg_label and /v: Flags. (line 65) 44765* REG_LABEL_OPERAND: Insns. (line 391) 44766* REG_LABEL_TARGET: Insns. (line 400) 44767* reg_names <1>: Instruction Output. (line 93) 44768* reg_names: Register Basics. (line 59) 44769* REG_NONNEG: Insns. (line 383) 44770* REG_NOTE_KIND: Insns. (line 350) 44771* REG_NOTES: Insns. (line 324) 44772* REG_OFFSET: Special Accessors. (line 54) 44773* REG_OK_STRICT: Register Classes. (line 148) 44774* REG_PARM_STACK_SPACE: Stack Arguments. (line 56) 44775* REG_PARM_STACK_SPACE, and FUNCTION_ARG: Register Arguments. 44776 (line 52) 44777* REG_POINTER: Flags. (line 112) 44778* REG_SETJMP: Insns. (line 418) 44779* REG_UNUSED: Insns. (line 370) 44780* REG_USERVAR_P: Flags. (line 116) 44781* regclass_for_constraint: C Constraint Interface. 44782 (line 60) 44783* register allocation order: Allocation Order. (line 6) 44784* register class definitions: Register Classes. (line 6) 44785* register class preference constraints: Class Preferences. (line 6) 44786* register pairs: Values in Registers. 44787 (line 69) 44788* Register Transfer Language (RTL): RTL. (line 6) 44789* register usage: Registers. (line 6) 44790* REGISTER_MOVE_COST: Costs. (line 10) 44791* REGISTER_NAMES: Instruction Output. (line 9) 44792* register_operand: Machine-Independent Predicates. 44793 (line 30) 44794* REGISTER_PREFIX: Instruction Output. (line 137) 44795* REGISTER_TARGET_PRAGMAS: Misc. (line 382) 44796* registers arguments: Register Arguments. (line 6) 44797* registers in constraints: Simple Constraints. (line 56) 44798* REGMODE_NATURAL_SIZE: Values in Registers. 44799 (line 50) 44800* REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 181) 44801* REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 154) 44802* REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 166) 44803* REGNO_OK_FOR_BASE_P: Register Classes. (line 140) 44804* REGNO_OK_FOR_INDEX_P: Register Classes. (line 194) 44805* REGNO_REG_CLASS: Register Classes. (line 101) 44806* regs_ever_live: Function Entry. (line 21) 44807* regular expressions: Processor pipeline description. 44808 (line 6) 44809* relative costs: Costs. (line 6) 44810* RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 325) 44811* reload_completed: Standard Names. (line 1003) 44812* reload_in instruction pattern: Standard Names. (line 99) 44813* reload_in_progress: Standard Names. (line 57) 44814* reload_out instruction pattern: Standard Names. (line 99) 44815* reloading: RTL passes. (line 182) 44816* remainder: Arithmetic. (line 131) 44817* remainderM3 instruction pattern: Standard Names. (line 472) 44818* reorder: GTY Options. (line 209) 44819* representation of RTL: RTL. (line 6) 44820* reservation delays: Processor pipeline description. 44821 (line 6) 44822* rest_of_decl_compilation: Parsing pass. (line 52) 44823* rest_of_type_compilation: Parsing pass. (line 52) 44824* restore_stack_block instruction pattern: Standard Names. (line 1137) 44825* restore_stack_function instruction pattern: Standard Names. 44826 (line 1137) 44827* restore_stack_nonlocal instruction pattern: Standard Names. 44828 (line 1137) 44829* RESULT_DECL: Declarations. (line 6) 44830* return: Side Effects. (line 72) 44831* return instruction pattern: Standard Names. (line 990) 44832* return values in registers: Scalar Return. (line 6) 44833* RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 135) 44834* RETURN_ADDR_OFFSET: Exception Handling. (line 60) 44835* RETURN_ADDR_RTX: Frame Layout. (line 124) 44836* RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 51) 44837* RETURN_EXPR: Statements for C++. (line 6) 44838* RETURN_POPS_ARGS: Stack Arguments. (line 90) 44839* RETURN_STMT: Statements for C++. (line 6) 44840* return_val: Flags. (line 299) 44841* return_val, in call_insn: Flags. (line 24) 44842* return_val, in mem: Flags. (line 85) 44843* return_val, in reg: Flags. (line 107) 44844* return_val, in symbol_ref: Flags. (line 220) 44845* returning aggregate values: Aggregate Return. (line 6) 44846* returning structures and unions: Interface. (line 10) 44847* reverse probability: Profile information. 44848 (line 66) 44849* REVERSE_CONDEXEC_PREDICATES_P: Cond. Exec. Macros. (line 11) 44850* REVERSE_CONDITION: MODE_CC Condition Codes. 44851 (line 87) 44852* REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 44853 (line 73) 44854* right rotate: Arithmetic. (line 190) 44855* right shift: Arithmetic. (line 185) 44856* rintM2 instruction pattern: Standard Names. (line 572) 44857* RISC: Processor pipeline description. 44858 (line 6) 44859* roots, marking: GGC Roots. (line 6) 44860* rotate: Arithmetic. (line 190) 44861* rotatert: Arithmetic. (line 190) 44862* rotlM3 instruction pattern: Standard Names. (line 441) 44863* rotrM3 instruction pattern: Standard Names. (line 441) 44864* ROUND_DIV_EXPR: Unary and Binary Expressions. 44865 (line 6) 44866* ROUND_MOD_EXPR: Unary and Binary Expressions. 44867 (line 6) 44868* ROUND_TOWARDS_ZERO: Storage Layout. (line 465) 44869* ROUND_TYPE_ALIGN: Storage Layout. (line 412) 44870* roundM2 instruction pattern: Standard Names. (line 548) 44871* RSHIFT_EXPR: Unary and Binary Expressions. 44872 (line 6) 44873* RTL addition: Arithmetic. (line 14) 44874* RTL addition with signed saturation: Arithmetic. (line 14) 44875* RTL addition with unsigned saturation: Arithmetic. (line 14) 44876* RTL classes: RTL Classes. (line 6) 44877* RTL comparison: Arithmetic. (line 43) 44878* RTL comparison operations: Comparisons. (line 6) 44879* RTL constant expression types: Constants. (line 6) 44880* RTL constants: Constants. (line 6) 44881* RTL declarations: RTL Declarations. (line 6) 44882* RTL difference: Arithmetic. (line 36) 44883* RTL expression: RTL Objects. (line 6) 44884* RTL expressions for arithmetic: Arithmetic. (line 6) 44885* RTL format: RTL Classes. (line 71) 44886* RTL format characters: RTL Classes. (line 76) 44887* RTL function-call insns: Calls. (line 6) 44888* RTL insn template: RTL Template. (line 6) 44889* RTL integers: RTL Objects. (line 6) 44890* RTL memory expressions: Regs and Memory. (line 6) 44891* RTL object types: RTL Objects. (line 6) 44892* RTL postdecrement: Incdec. (line 6) 44893* RTL postincrement: Incdec. (line 6) 44894* RTL predecrement: Incdec. (line 6) 44895* RTL preincrement: Incdec. (line 6) 44896* RTL register expressions: Regs and Memory. (line 6) 44897* RTL representation: RTL. (line 6) 44898* RTL side effect expressions: Side Effects. (line 6) 44899* RTL strings: RTL Objects. (line 6) 44900* RTL structure sharing assumptions: Sharing. (line 6) 44901* RTL subtraction: Arithmetic. (line 36) 44902* RTL subtraction with signed saturation: Arithmetic. (line 36) 44903* RTL subtraction with unsigned saturation: Arithmetic. (line 36) 44904* RTL sum: Arithmetic. (line 14) 44905* RTL vectors: RTL Objects. (line 6) 44906* RTL_CONST_CALL_P: Flags. (line 19) 44907* RTL_CONST_OR_PURE_CALL_P: Flags. (line 29) 44908* RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33) 44909* RTL_PURE_CALL_P: Flags. (line 24) 44910* RTX (See RTL): RTL Objects. (line 6) 44911* RTX codes, classes of: RTL Classes. (line 6) 44912* RTX_FRAME_RELATED_P: Flags. (line 125) 44913* run-time conventions: Interface. (line 6) 44914* run-time target specification: Run-time Target. (line 6) 44915* s in constraint: Simple Constraints. (line 92) 44916* same_type_p: Types. (line 88) 44917* SAmode: Machine Modes. (line 148) 44918* sat_fract: Conversions. (line 90) 44919* satfractMN2 instruction pattern: Standard Names. (line 829) 44920* satfractunsMN2 instruction pattern: Standard Names. (line 842) 44921* satisfies_constraint_: C Constraint Interface. 44922 (line 47) 44923* SAVE_EXPR: Unary and Binary Expressions. 44924 (line 6) 44925* save_stack_block instruction pattern: Standard Names. (line 1137) 44926* save_stack_function instruction pattern: Standard Names. (line 1137) 44927* save_stack_nonlocal instruction pattern: Standard Names. (line 1137) 44928* SBSS_SECTION_ASM_OP: Sections. (line 77) 44929* Scalar evolutions: Scalar evolutions. (line 6) 44930* scalars, returned as values: Scalar Return. (line 6) 44931* SCHED_GROUP_P: Flags. (line 166) 44932* SCmode: Machine Modes. (line 197) 44933* scratch: Regs and Memory. (line 298) 44934* scratch operands: Regs and Memory. (line 298) 44935* scratch, RTL sharing: Sharing. (line 35) 44936* scratch_operand: Machine-Independent Predicates. 44937 (line 50) 44938* SDATA_SECTION_ASM_OP: Sections. (line 58) 44939* SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 87) 44940* SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 82) 44941* SDB_DEBUGGING_INFO: SDB and DWARF. (line 9) 44942* SDB_DELIM: SDB and DWARF. (line 75) 44943* SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 92) 44944* SDmode: Machine Modes. (line 85) 44945* sdot_prodM instruction pattern: Standard Names. (line 264) 44946* search options: Including Patterns. (line 44) 44947* SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 350) 44948* SECONDARY_MEMORY_NEEDED: Register Classes. (line 406) 44949* SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 425) 44950* SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 416) 44951* SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 351) 44952* SECONDARY_RELOAD_CLASS: Register Classes. (line 349) 44953* SELECT_CC_MODE: MODE_CC Condition Codes. 44954 (line 7) 44955* sequence: Side Effects. (line 254) 44956* Sequence iterators: Sequence iterators. (line 6) 44957* set: Side Effects. (line 15) 44958* set and /f: Flags. (line 125) 44959* SET_ASM_OP: Label Output. (line 379) 44960* set_attr: Tagging Insns. (line 31) 44961* set_attr_alternative: Tagging Insns. (line 49) 44962* set_bb_seq: GIMPLE sequences. (line 76) 44963* SET_BY_PIECES_P: Costs. (line 154) 44964* SET_DEST: Side Effects. (line 69) 44965* SET_IS_RETURN_P: Flags. (line 175) 44966* SET_LABEL_KIND: Insns. (line 140) 44967* set_optab_libfunc: Library Calls. (line 15) 44968* SET_RATIO: Costs. (line 142) 44969* SET_SRC: Side Effects. (line 69) 44970* SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 44971* setmemM instruction pattern: Standard Names. (line 697) 44972* SETUP_FRAME_ADDRESSES: Frame Layout. (line 102) 44973* SF_SIZE: Type Layout. (line 129) 44974* SFmode: Machine Modes. (line 66) 44975* sharing of RTL components: Sharing. (line 6) 44976* shift: Arithmetic. (line 168) 44977* SHIFT_COUNT_TRUNCATED: Misc. (line 127) 44978* SHLIB_SUFFIX: Macros for Initialization. 44979 (line 129) 44980* SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 83) 44981* SHORT_FRACT_TYPE_SIZE: Type Layout. (line 63) 44982* SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 96) 44983* SHORT_TYPE_SIZE: Type Layout. (line 16) 44984* sibcall_epilogue instruction pattern: Standard Names. (line 1334) 44985* sibling call: Edges. (line 122) 44986* SIBLING_CALL_P: Flags. (line 179) 44987* SIG_ATOMIC_TYPE: Type Layout. (line 235) 44988* sign_extend: Conversions. (line 23) 44989* sign_extract: Bit-Fields. (line 8) 44990* sign_extract, canonicalization of: Insn Canonicalizations. 44991 (line 88) 44992* signed division: Arithmetic. (line 111) 44993* signed division with signed saturation: Arithmetic. (line 111) 44994* signed maximum: Arithmetic. (line 136) 44995* signed minimum: Arithmetic. (line 136) 44996* SImode: Machine Modes. (line 37) 44997* simple constraints: Simple Constraints. (line 6) 44998* sincos math function, implicit usage: Library Calls. (line 84) 44999* sinM2 instruction pattern: Standard Names. (line 489) 45000* SIZE_ASM_OP: Label Output. (line 23) 45001* SIZE_TYPE: Type Layout. (line 168) 45002* skip: GTY Options. (line 76) 45003* SLOW_BYTE_ACCESS: Costs. (line 66) 45004* SLOW_UNALIGNED_ACCESS: Costs. (line 81) 45005* SMALL_REGISTER_CLASSES: Register Classes. (line 448) 45006* smax: Arithmetic. (line 136) 45007* smin: Arithmetic. (line 136) 45008* sms, swing, software pipelining: RTL passes. (line 131) 45009* smulM3_highpart instruction pattern: Standard Names. (line 356) 45010* soft float library: Soft float library routines. 45011 (line 6) 45012* special: GTY Options. (line 229) 45013* special predicates: Predicates. (line 31) 45014* SPECS: Target Fragment. (line 108) 45015* speed of instructions: Costs. (line 6) 45016* split_block: Maintaining the CFG. 45017 (line 110) 45018* splitting instructions: Insn Splitting. (line 6) 45019* SQmode: Machine Modes. (line 111) 45020* sqrt: Arithmetic. (line 202) 45021* sqrtM2 instruction pattern: Standard Names. (line 455) 45022* square root: Arithmetic. (line 202) 45023* ss_abs: Arithmetic. (line 195) 45024* ss_ashift: Arithmetic. (line 168) 45025* ss_div: Arithmetic. (line 111) 45026* ss_minus: Arithmetic. (line 36) 45027* ss_mult: Arithmetic. (line 92) 45028* ss_neg: Arithmetic. (line 81) 45029* ss_plus: Arithmetic. (line 14) 45030* ss_truncate: Conversions. (line 43) 45031* SSA: SSA. (line 6) 45032* SSA_NAME_DEF_STMT: SSA. (line 221) 45033* SSA_NAME_VERSION: SSA. (line 226) 45034* ssaddM3 instruction pattern: Standard Names. (line 222) 45035* ssashlM3 instruction pattern: Standard Names. (line 431) 45036* ssdivM3 instruction pattern: Standard Names. (line 222) 45037* ssmaddMN4 instruction pattern: Standard Names. (line 379) 45038* ssmsubMN4 instruction pattern: Standard Names. (line 403) 45039* ssmulM3 instruction pattern: Standard Names. (line 222) 45040* ssnegM2 instruction pattern: Standard Names. (line 449) 45041* sssubM3 instruction pattern: Standard Names. (line 222) 45042* ssum_widenM3 instruction pattern: Standard Names. (line 274) 45043* stack arguments: Stack Arguments. (line 6) 45044* stack frame layout: Frame Layout. (line 6) 45045* stack smashing protection: Stack Smashing Protection. 45046 (line 6) 45047* STACK_ALIGNMENT_NEEDED: Frame Layout. (line 48) 45048* STACK_BOUNDARY: Storage Layout. (line 151) 45049* STACK_CHECK_BUILTIN: Stack Checking. (line 32) 45050* STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 83) 45051* STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 74) 45052* STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 90) 45053* STACK_CHECK_MOVING_SP: Stack Checking. (line 54) 45054* STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 46) 45055* STACK_CHECK_PROTECT: Stack Checking. (line 63) 45056* STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 39) 45057* STACK_DYNAMIC_OFFSET: Frame Layout. (line 75) 45058* STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory. 45059 (line 83) 45060* STACK_GROWS_DOWNWARD: Frame Layout. (line 9) 45061* STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 81) 45062* STACK_POINTER_OFFSET: Frame Layout. (line 58) 45063* STACK_POINTER_OFFSET and virtual registers: Regs and Memory. 45064 (line 93) 45065* STACK_POINTER_REGNUM: Frame Registers. (line 9) 45066* STACK_POINTER_REGNUM and virtual registers: Regs and Memory. 45067 (line 83) 45068* stack_pointer_rtx: Frame Registers. (line 90) 45069* stack_protect_set instruction pattern: Standard Names. (line 1505) 45070* stack_protect_test instruction pattern: Standard Names. (line 1515) 45071* STACK_PUSH_CODE: Frame Layout. (line 17) 45072* STACK_REG_COVER_CLASS: Stack Registers. (line 23) 45073* STACK_REGS: Stack Registers. (line 20) 45074* STACK_SAVEAREA_MODE: Storage Layout. (line 428) 45075* STACK_SIZE_MODE: Storage Layout. (line 440) 45076* STACK_SLOT_ALIGNMENT: Storage Layout. (line 266) 45077* standard pattern names: Standard Names. (line 6) 45078* STANDARD_INCLUDE_COMPONENT: Driver. (line 425) 45079* STANDARD_INCLUDE_DIR: Driver. (line 417) 45080* STANDARD_STARTFILE_PREFIX: Driver. (line 337) 45081* STANDARD_STARTFILE_PREFIX_1: Driver. (line 344) 45082* STANDARD_STARTFILE_PREFIX_2: Driver. (line 351) 45083* STARTFILE_SPEC: Driver. (line 210) 45084* STARTING_FRAME_OFFSET: Frame Layout. (line 39) 45085* STARTING_FRAME_OFFSET and virtual registers: Regs and Memory. 45086 (line 74) 45087* Statement and operand traversals: Statement and operand traversals. 45088 (line 6) 45089* Statement Sequences: Statement Sequences. 45090 (line 6) 45091* statements <1>: Statements for C++. (line 6) 45092* statements: Function Properties. 45093 (line 6) 45094* Statements: Statements. (line 6) 45095* Static profile estimation: Profile information. 45096 (line 24) 45097* static single assignment: SSA. (line 6) 45098* STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 64) 45099* STATIC_CHAIN_REGNUM: Frame Registers. (line 63) 45100* stdarg.h and register arguments: Register Arguments. (line 47) 45101* STDC_0_IN_SYSTEM_HEADERS: Misc. (line 365) 45102* STMT_EXPR: Unary and Binary Expressions. 45103 (line 6) 45104* STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 45105* storage layout: Storage Layout. (line 6) 45106* STORE_BY_PIECES_P: Costs. (line 161) 45107* STORE_FLAG_VALUE: Misc. (line 216) 45108* store_multiple instruction pattern: Standard Names. (line 160) 45109* strcpy: Storage Layout. (line 236) 45110* STRICT_ALIGNMENT: Storage Layout. (line 310) 45111* strict_low_part: RTL Declarations. (line 9) 45112* strict_memory_address_p: Addressing Modes. (line 181) 45113* STRING_CST: Constant expressions. 45114 (line 6) 45115* STRING_POOL_ADDRESS_P: Flags. (line 183) 45116* strlenM instruction pattern: Standard Names. (line 764) 45117* structure value address: Aggregate Return. (line 6) 45118* STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 302) 45119* structures, returning: Interface. (line 10) 45120* subM3 instruction pattern: Standard Names. (line 222) 45121* SUBOBJECT: Statements for C++. (line 6) 45122* SUBOBJECT_CLEANUP: Statements for C++. (line 6) 45123* subreg: Regs and Memory. (line 97) 45124* subreg and /s: Flags. (line 205) 45125* subreg and /u: Flags. (line 198) 45126* subreg and /u and /v: Flags. (line 188) 45127* subreg, in strict_low_part: RTL Declarations. (line 9) 45128* SUBREG_BYTE: Regs and Memory. (line 289) 45129* SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 188) 45130* SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 198) 45131* SUBREG_PROMOTED_VAR_P: Flags. (line 205) 45132* SUBREG_REG: Regs and Memory. (line 289) 45133* SUCCESS_EXIT_CODE: Host Misc. (line 12) 45134* SUPPORTS_INIT_PRIORITY: Macros for Initialization. 45135 (line 58) 45136* SUPPORTS_ONE_ONLY: Label Output. (line 227) 45137* SUPPORTS_WEAK: Label Output. (line 208) 45138* SWITCH_BODY: Statements for C++. (line 6) 45139* SWITCH_COND: Statements for C++. (line 6) 45140* SWITCH_CURTAILS_COMPILATION: Driver. (line 33) 45141* SWITCH_STMT: Statements for C++. (line 6) 45142* SWITCH_TAKES_ARG: Driver. (line 9) 45143* SWITCHES_NEED_SPACES: Driver. (line 47) 45144* SYMBOL_FLAG_ANCHOR: Special Accessors. (line 110) 45145* SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 92) 45146* SYMBOL_FLAG_FUNCTION: Special Accessors. (line 85) 45147* SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 106) 45148* SYMBOL_FLAG_LOCAL: Special Accessors. (line 88) 45149* SYMBOL_FLAG_SMALL: Special Accessors. (line 97) 45150* SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 101) 45151* symbol_ref: Constants. (line 76) 45152* symbol_ref and /f: Flags. (line 183) 45153* symbol_ref and /i: Flags. (line 220) 45154* symbol_ref and /u: Flags. (line 10) 45155* symbol_ref and /v: Flags. (line 224) 45156* symbol_ref, RTL sharing: Sharing. (line 20) 45157* SYMBOL_REF_ANCHOR_P: Special Accessors. (line 110) 45158* SYMBOL_REF_BLOCK: Special Accessors. (line 123) 45159* SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 128) 45160* SYMBOL_REF_CONSTANT: Special Accessors. (line 71) 45161* SYMBOL_REF_DATA: Special Accessors. (line 75) 45162* SYMBOL_REF_DECL: Special Accessors. (line 59) 45163* SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 92) 45164* SYMBOL_REF_FLAG: Flags. (line 224) 45165* SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 269) 45166* SYMBOL_REF_FLAGS: Special Accessors. (line 79) 45167* SYMBOL_REF_FUNCTION_P: Special Accessors. (line 85) 45168* SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 106) 45169* SYMBOL_REF_LOCAL_P: Special Accessors. (line 88) 45170* SYMBOL_REF_SMALL_P: Special Accessors. (line 97) 45171* SYMBOL_REF_TLS_MODEL: Special Accessors. (line 101) 45172* SYMBOL_REF_USED: Flags. (line 215) 45173* SYMBOL_REF_WEAK: Flags. (line 220) 45174* symbolic label: Sharing. (line 20) 45175* sync_addMODE instruction pattern: Standard Names. (line 1421) 45176* sync_andMODE instruction pattern: Standard Names. (line 1421) 45177* sync_compare_and_swapMODE instruction pattern: Standard Names. 45178 (line 1391) 45179* sync_iorMODE instruction pattern: Standard Names. (line 1421) 45180* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1486) 45181* sync_lock_test_and_setMODE instruction pattern: Standard Names. 45182 (line 1460) 45183* sync_nandMODE instruction pattern: Standard Names. (line 1421) 45184* sync_new_addMODE instruction pattern: Standard Names. (line 1453) 45185* sync_new_andMODE instruction pattern: Standard Names. (line 1453) 45186* sync_new_iorMODE instruction pattern: Standard Names. (line 1453) 45187* sync_new_nandMODE instruction pattern: Standard Names. (line 1453) 45188* sync_new_subMODE instruction pattern: Standard Names. (line 1453) 45189* sync_new_xorMODE instruction pattern: Standard Names. (line 1453) 45190* sync_old_addMODE instruction pattern: Standard Names. (line 1436) 45191* sync_old_andMODE instruction pattern: Standard Names. (line 1436) 45192* sync_old_iorMODE instruction pattern: Standard Names. (line 1436) 45193* sync_old_nandMODE instruction pattern: Standard Names. (line 1436) 45194* sync_old_subMODE instruction pattern: Standard Names. (line 1436) 45195* sync_old_xorMODE instruction pattern: Standard Names. (line 1436) 45196* sync_subMODE instruction pattern: Standard Names. (line 1421) 45197* sync_xorMODE instruction pattern: Standard Names. (line 1421) 45198* SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 239) 45199* SYSROOT_SUFFIX_SPEC: Driver. (line 234) 45200* SYSTEM_INCLUDE_DIR: Driver. (line 408) 45201* t-TARGET: Target Fragment. (line 6) 45202* table jump: Basic Blocks. (line 57) 45203* tablejump instruction pattern: Standard Names. (line 1065) 45204* tag: GTY Options. (line 81) 45205* tagging insns: Tagging Insns. (line 6) 45206* tail calls: Tail Calls. (line 6) 45207* TAmode: Machine Modes. (line 156) 45208* target attributes: Target Attributes. (line 6) 45209* target description macros: Target Macros. (line 6) 45210* target functions: Target Structure. (line 6) 45211* target hooks: Target Structure. (line 6) 45212* target makefile fragment: Target Fragment. (line 6) 45213* target specifications: Run-time Target. (line 6) 45214* TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 45215 (line 47) 45216* TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 45217 (line 90) 45218* TARGET_ADDR_SPACE_KEYWORDS: Named Address Spaces. 45219 (line 30) 45220* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 45221 (line 65) 45222* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 45223 (line 74) 45224* TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 45225 (line 40) 45226* TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 45227 (line 81) 45228* TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 45229 (line 54) 45230* TARGET_ADDRESS_COST: Costs. (line 245) 45231* TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 387) 45232* TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 727) 45233* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 999) 45234* TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 83) 45235* TARGET_ARM_EABI_UNWINDER: Exception Region Output. 45236 (line 113) 45237* TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 10) 45238* TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 8) 45239* TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 9) 45240* TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 11) 45241* TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 239) 45242* TARGET_ASM_BYTE_OP: Data Output. (line 7) 45243* TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 237) 45244* TARGET_ASM_CLOSE_PAREN: Data Output. (line 130) 45245* TARGET_ASM_CODE_END: File Framework. (line 59) 45246* TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 45247 (line 69) 45248* TARGET_ASM_DESTRUCTOR: Macros for Initialization. 45249 (line 83) 45250* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 74) 45251* TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 63) 45252* TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 274) 45253* TARGET_ASM_FILE_END: File Framework. (line 37) 45254* TARGET_ASM_FILE_START: File Framework. (line 9) 45255* TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 17) 45256* TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 31) 45257* TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 69) 45258* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 61) 45259* TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 55) 45260* TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 68) 45261* TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 11) 45262* TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 216) 45263* TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 174) 45264* TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 165) 45265* TARGET_ASM_INIT_SECTIONS: Sections. (line 161) 45266* TARGET_ASM_INTEGER: Data Output. (line 27) 45267* TARGET_ASM_INTERNAL_LABEL: Label Output. (line 310) 45268* TARGET_ASM_LTO_END: File Framework. (line 54) 45269* TARGET_ASM_LTO_START: File Framework. (line 49) 45270* TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 281) 45271* TARGET_ASM_NAMED_SECTION: File Framework. (line 106) 45272* TARGET_ASM_OPEN_PAREN: Data Output. (line 129) 45273* TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 44) 45274* TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 64) 45275* TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 195) 45276* TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 136) 45277* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 180) 45278* TARGET_ASM_RELOC_RW_MASK: Sections. (line 170) 45279* TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 224) 45280* TARGET_ASM_SELECT_SECTION: Sections. (line 182) 45281* TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 29) 45282* TARGET_ASM_TTYPE: Exception Region Output. 45283 (line 107) 45284* TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 14) 45285* TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 12) 45286* TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 13) 45287* TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 15) 45288* TARGET_ASM_UNIQUE_SECTION: Sections. (line 203) 45289* TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 11) 45290* TARGET_BINDS_LOCAL_P: Sections. (line 294) 45291* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 825) 45292* TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 817) 45293* TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 263) 45294* TARGET_BUILTIN_DECL: Misc. (line 660) 45295* TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 242) 45296* TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 109) 45297* TARGET_C99_FUNCTIONS: Library Calls. (line 77) 45298* TARGET_CALLEE_COPIES: Register Arguments. (line 115) 45299* TARGET_CAN_ELIMINATE: Elimination. (line 75) 45300* TARGET_CAN_INLINE_P: Target Attributes. (line 128) 45301* TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 223) 45302* TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 803) 45303* TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 272) 45304* TARGET_CASE_VALUES_THRESHOLD: Misc. (line 47) 45305* TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 45306 (line 116) 45307* TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 28) 45308* TARGET_COMMUTATIVE_P: Misc. (line 720) 45309* TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 19) 45310* TARGET_CONST_ANCHOR: Misc. (line 1010) 45311* TARGET_CONVERT_TO_TYPE: Misc. (line 963) 45312* TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 9) 45313* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 87) 45314* TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 38) 45315* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 62) 45316* TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 25) 45317* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 54) 45318* TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 18) 45319* TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 12) 45320* TARGET_CXX_GUARD_TYPE: C++ ABI. (line 7) 45321* TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 30) 45322* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 43) 45323* TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 69) 45324* TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 74) 45325* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 80) 45326* TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 512) 45327* TARGET_DECLSPEC: Target Attributes. (line 65) 45328* TARGET_DEFAULT_PACK_STRUCT: Misc. (line 485) 45329* TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 160) 45330* TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 56) 45331* TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 394) 45332* TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 214) 45333* TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 47) 45334* TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 18) 45335* TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 172) 45336* TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 45337 (line 90) 45338* TARGET_EDOM: Library Calls. (line 59) 45339* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 68) 45340* TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 19) 45341* TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 24) 45342* TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 45) 45343* TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 36) 45344* TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 63) 45345* TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 49) 45346* TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 57) 45347* TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 41) 45348* TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 31) 45349* TARGET_ENCODE_SECTION_INFO: Sections. (line 245) 45350* TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes. 45351 (line 83) 45352* TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 113) 45353* TARGET_ENUM_VA_LIST: Scalar Return. (line 96) 45354* TARGET_EXECUTABLE_SUFFIX: Misc. (line 777) 45355* TARGET_EXPAND_BUILTIN: Misc. (line 670) 45356* TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 92) 45357* TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 518) 45358* TARGET_EXPR: Unary and Binary Expressions. 45359 (line 6) 45360* TARGET_EXTRA_INCLUDES: Misc. (line 856) 45361* TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 21) 45362* TARGET_EXTRA_PRE_INCLUDES: Misc. (line 863) 45363* TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 45364 (line 101) 45365* TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 515) 45366* target_flags: Run-time Target. (line 52) 45367* TARGET_FLT_EVAL_METHOD: Type Layout. (line 141) 45368* TARGET_FN_ABI_VA_LIST: Register Arguments. (line 267) 45369* TARGET_FOLD_BUILTIN: Misc. (line 691) 45370* TARGET_FORMAT_TYPES: Misc. (line 883) 45371* TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 9) 45372* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 87) 45373* TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 8) 45374* TARGET_FUNCTION_VALUE: Scalar Return. (line 11) 45375* TARGET_GET_DRAP_RTX: Misc. (line 993) 45376* TARGET_GET_PCH_VALIDITY: PCH Target. (line 7) 45377* TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 278) 45378* TARGET_HANDLE_C_OPTION: Run-time Target. (line 78) 45379* TARGET_HANDLE_OPTION: Run-time Target. (line 61) 45380* TARGET_HANDLE_PRAGMA_EXTERN_PREFIX: Misc. (line 482) 45381* TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 45382 (line 144) 45383* TARGET_HAS_SINCOS: Library Calls. (line 85) 45384* TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 839) 45385* TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 45386 (line 64) 45387* TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 113) 45388* TARGET_HAVE_SRODATA_SECTION: Sections. (line 290) 45389* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 117) 45390* TARGET_HAVE_TLS: Sections. (line 303) 45391* TARGET_HELP: Run-time Target. (line 154) 45392* TARGET_IN_SMALL_DATA_P: Sections. (line 286) 45393* TARGET_INIT_BUILTINS: Misc. (line 642) 45394* TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 45395 (line 99) 45396* TARGET_INIT_LIBFUNCS: Library Calls. (line 16) 45397* TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 74) 45398* TARGET_INSTANTIATE_DECLS: Storage Layout. (line 526) 45399* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 917) 45400* TARGET_INVALID_BINARY_OP: Misc. (line 936) 45401* TARGET_INVALID_CONVERSION: Misc. (line 923) 45402* TARGET_INVALID_PARAMETER_TYPE: Misc. (line 942) 45403* TARGET_INVALID_RETURN_TYPE: Misc. (line 949) 45404* TARGET_INVALID_UNARY_OP: Misc. (line 929) 45405* TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 700) 45406* TARGET_IRA_COVER_CLASSES: Register Classes. (line 511) 45407* TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 50) 45408* TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 128) 45409* TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 35) 45410* TARGET_LIBCALL_VALUE: Scalar Return. (line 69) 45411* TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 449) 45412* TARGET_LIBGCC_SDATA_SECTION: Sections. (line 133) 45413* TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 455) 45414* TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 627) 45415* TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 235) 45416* TARGET_MANGLE_TYPE: Storage Layout. (line 530) 45417* TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 39) 45418* TARGET_MD_ASM_CLOBBERS: Misc. (line 543) 45419* TARGET_MEM_CONSTRAINT: Addressing Modes. (line 105) 45420* TARGET_MEM_REF: Storage References. (line 6) 45421* TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 39) 45422* TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 31) 45423* TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 33) 45424* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 106) 45425* TARGET_MODE_REP_EXTENDED: Misc. (line 191) 45426* TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 485) 45427* TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 62) 45428* TARGET_MUST_PASS_IN_STACK, and FUNCTION_ARG: Register Arguments. 45429 (line 52) 45430* TARGET_N_FORMAT_TYPES: Misc. (line 888) 45431* TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 393) 45432* TARGET_OBJECT_SUFFIX: Misc. (line 772) 45433* TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 46) 45434* TARGET_OPTF: Misc. (line 870) 45435* TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 122) 45436* TARGET_OPTION_PRINT: Target Attributes. (line 117) 45437* TARGET_OPTION_RESTORE: Target Attributes. (line 111) 45438* TARGET_OPTION_SAVE: Target Attributes. (line 105) 45439* TARGET_OPTION_TRANSLATE_TABLE: Driver. (line 53) 45440* TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 94) 45441* TARGET_OS_CPP_BUILTINS: Run-time Target. (line 42) 45442* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 119) 45443* TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 892) 45444* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 898) 45445* TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 902) 45446* TARGET_PASS_BY_REFERENCE: Register Arguments. (line 103) 45447* TARGET_PCH_VALID_P: PCH Target. (line 13) 45448* TARGET_POSIX_IO: Misc. (line 567) 45449* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 153) 45450* TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 125) 45451* TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 11) 45452* TARGET_PROMOTED_TYPE: Misc. (line 955) 45453* TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 278) 45454* TARGET_RELAXED_ORDERING: Misc. (line 907) 45455* TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 680) 45456* TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 17) 45457* TARGET_RETURN_IN_MSB: Scalar Return. (line 112) 45458* TARGET_RTX_COSTS: Costs. (line 219) 45459* TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 290) 45460* TARGET_SCHED_ADJUST_COST: Scheduling. (line 37) 45461* TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 52) 45462* TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 243) 45463* TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 258) 45464* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 89) 45465* TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 204) 45466* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 160) 45467* TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 144) 45468* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 153) 45469* TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 132) 45470* TARGET_SCHED_FINISH: Scheduling. (line 109) 45471* TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 126) 45472* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 45473 (line 168) 45474* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 45475 (line 196) 45476* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC: Scheduling. 45477 (line 297) 45478* TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 262) 45479* TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 284) 45480* TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 238) 45481* TARGET_SCHED_INIT: Scheduling. (line 99) 45482* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 149) 45483* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 141) 45484* TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 118) 45485* TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 248) 45486* TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 215) 45487* TARGET_SCHED_ISSUE_RATE: Scheduling. (line 12) 45488* TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 277) 45489* TARGET_SCHED_REORDER: Scheduling. (line 60) 45490* TARGET_SCHED_REORDER2: Scheduling. (line 77) 45491* TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 254) 45492* TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 309) 45493* TARGET_SCHED_SMS_RES_MII: Scheduling. (line 315) 45494* TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 266) 45495* TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 24) 45496* TARGET_SECONDARY_RELOAD: Register Classes. (line 272) 45497* TARGET_SECTION_TYPE_FLAGS: File Framework. (line 123) 45498* TARGET_SET_CURRENT_FUNCTION: Misc. (line 754) 45499* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 26) 45500* TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 101) 45501* TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 154) 45502* TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 251) 45503* TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 45504 (line 17) 45505* TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 45506 (line 7) 45507* TARGET_STATIC_CHAIN: Frame Registers. (line 78) 45508* TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 137) 45509* TARGET_STRIP_NAME_ENCODING: Sections. (line 282) 45510* TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 45) 45511* TARGET_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. (line 345) 45512* TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 45513 (line 84) 45514* TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 75) 45515* TARGET_TRAMPOLINE_INIT: Trampolines. (line 56) 45516* TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 746) 45517* TARGET_UNWIND_EMIT: Dispatch Tables. (line 81) 45518* TARGET_UNWIND_INFO: Exception Region Output. 45519 (line 56) 45520* TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 45521 (line 60) 45522* TARGET_UNWIND_WORD_MODE: Storage Layout. (line 461) 45523* TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 989) 45524* TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 55) 45525* TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 235) 45526* TARGET_USE_JCR_SECTION: Misc. (line 971) 45527* TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 129) 45528* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 60) 45529* TARGET_VALID_POINTER_MODE: Register Arguments. (line 284) 45530* TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 302) 45531* TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 320) 45532* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 251) 45533* TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN: Addressing Modes. (line 277) 45534* TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD: Addressing Modes. (line 289) 45535* TARGET_VECTORIZE_BUILTIN_VEC_PERM: Addressing Modes. (line 312) 45536* TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK: Addressing Modes. (line 316) 45537* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 45538 (line 302) 45539* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 45540 (line 335) 45541* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 45542 (line 307) 45543* TARGET_VERSION: Run-time Target. (line 92) 45544* TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 331) 45545* TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 325) 45546* TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 314) 45547* TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 245) 45548* targetm: Target Structure. (line 7) 45549* targets, makefile: Makefile. (line 6) 45550* TCmode: Machine Modes. (line 197) 45551* TDmode: Machine Modes. (line 94) 45552* TEMPLATE_DECL: Declarations. (line 6) 45553* Temporaries: Temporaries. (line 6) 45554* termination routines: Initialization. (line 6) 45555* testing constraints: C Constraint Interface. 45556 (line 6) 45557* TEXT_SECTION_ASM_OP: Sections. (line 38) 45558* TF_SIZE: Type Layout. (line 132) 45559* TFmode: Machine Modes. (line 98) 45560* THEN_CLAUSE: Statements for C++. (line 6) 45561* THREAD_MODEL_SPEC: Driver. (line 225) 45562* THROW_EXPR: Unary and Binary Expressions. 45563 (line 6) 45564* THUNK_DECL: Declarations. (line 6) 45565* THUNK_DELTA: Declarations. (line 6) 45566* TImode: Machine Modes. (line 48) 45567* TImode, in insn: Insns. (line 272) 45568* TLS_COMMON_ASM_OP: Sections. (line 82) 45569* TLS_SECTION_ASM_FLAG: Sections. (line 87) 45570* tm.h macros: Target Macros. (line 6) 45571* TQFmode: Machine Modes. (line 62) 45572* TQmode: Machine Modes. (line 119) 45573* TRAMPOLINE_ALIGNMENT: Trampolines. (line 49) 45574* TRAMPOLINE_SECTION: Trampolines. (line 40) 45575* TRAMPOLINE_SIZE: Trampolines. (line 45) 45576* trampolines for nested functions: Trampolines. (line 6) 45577* TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 123) 45578* trap instruction pattern: Standard Names. (line 1344) 45579* tree <1>: Macros and Functions. 45580 (line 6) 45581* tree: Tree overview. (line 6) 45582* Tree SSA: Tree SSA. (line 6) 45583* TREE_CHAIN: Macros and Functions. 45584 (line 6) 45585* tree_code <1>: GIMPLE_OMP_FOR. (line 83) 45586* tree_code <2>: GIMPLE_COND. (line 21) 45587* tree_code <3>: GIMPLE_ASSIGN. (line 41) 45588* tree_code: Manipulating GIMPLE statements. 45589 (line 31) 45590* TREE_CODE: Tree overview. (line 6) 45591* tree_int_cst_equal: Constant expressions. 45592 (line 6) 45593* TREE_INT_CST_HIGH: Constant expressions. 45594 (line 6) 45595* TREE_INT_CST_LOW: Constant expressions. 45596 (line 6) 45597* tree_int_cst_lt: Constant expressions. 45598 (line 6) 45599* TREE_LIST: Containers. (line 6) 45600* TREE_OPERAND: Expression trees. (line 6) 45601* TREE_PUBLIC <1>: Function Properties. 45602 (line 28) 45603* TREE_PUBLIC: Function Basics. (line 6) 45604* TREE_PURPOSE: Containers. (line 6) 45605* TREE_READONLY: Function Properties. 45606 (line 37) 45607* tree_size: Macros and Functions. 45608 (line 13) 45609* TREE_STATIC: Function Properties. 45610 (line 31) 45611* TREE_STRING_LENGTH: Constant expressions. 45612 (line 6) 45613* TREE_STRING_POINTER: Constant expressions. 45614 (line 6) 45615* TREE_THIS_VOLATILE: Function Properties. 45616 (line 34) 45617* TREE_TYPE <1>: Types for C++. (line 6) 45618* TREE_TYPE <2>: Function Basics. (line 47) 45619* TREE_TYPE <3>: Expression trees. (line 6) 45620* TREE_TYPE <4>: Working with declarations. 45621 (line 11) 45622* TREE_TYPE <5>: Types. (line 6) 45623* TREE_TYPE: Macros and Functions. 45624 (line 6) 45625* TREE_VALUE: Containers. (line 6) 45626* TREE_VEC: Containers. (line 6) 45627* TREE_VEC_ELT: Containers. (line 6) 45628* TREE_VEC_LENGTH: Containers. (line 6) 45629* TRULY_NOOP_TRUNCATION: Misc. (line 177) 45630* TRUNC_DIV_EXPR: Unary and Binary Expressions. 45631 (line 6) 45632* TRUNC_MOD_EXPR: Unary and Binary Expressions. 45633 (line 6) 45634* truncate: Conversions. (line 38) 45635* truncMN2 instruction pattern: Standard Names. (line 807) 45636* TRUTH_AND_EXPR: Unary and Binary Expressions. 45637 (line 6) 45638* TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 45639 (line 6) 45640* TRUTH_NOT_EXPR: Unary and Binary Expressions. 45641 (line 6) 45642* TRUTH_OR_EXPR: Unary and Binary Expressions. 45643 (line 6) 45644* TRUTH_ORIF_EXPR: Unary and Binary Expressions. 45645 (line 6) 45646* TRUTH_XOR_EXPR: Unary and Binary Expressions. 45647 (line 6) 45648* TRY_BLOCK: Statements for C++. (line 6) 45649* TRY_HANDLERS: Statements for C++. (line 6) 45650* TRY_STMTS: Statements for C++. (line 6) 45651* Tuple specific accessors: Tuple specific accessors. 45652 (line 6) 45653* tuples: Tuple representation. 45654 (line 6) 45655* type: Types. (line 6) 45656* type declaration: Declarations. (line 6) 45657* TYPE_ALIGN <1>: Types for C++. (line 6) 45658* TYPE_ALIGN: Types. (line 6) 45659* TYPE_ARG_TYPES <1>: Types for C++. (line 6) 45660* TYPE_ARG_TYPES: Types. (line 6) 45661* TYPE_ASM_OP: Label Output. (line 55) 45662* TYPE_ATTRIBUTES: Attributes. (line 25) 45663* TYPE_BINFO: Classes. (line 6) 45664* TYPE_BUILT_IN: Types for C++. (line 68) 45665* TYPE_CANONICAL: Types. (line 6) 45666* TYPE_CONTEXT <1>: Types for C++. (line 6) 45667* TYPE_CONTEXT: Types. (line 6) 45668* TYPE_DECL: Declarations. (line 6) 45669* TYPE_FIELDS <1>: Classes. (line 6) 45670* TYPE_FIELDS <2>: Types for C++. (line 6) 45671* TYPE_FIELDS: Types. (line 6) 45672* TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96) 45673* TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81) 45674* TYPE_HAS_MUTABLE_P: Classes. (line 86) 45675* TYPE_HAS_NEW_OPERATOR: Classes. (line 93) 45676* TYPE_MAIN_VARIANT <1>: Types for C++. (line 6) 45677* TYPE_MAIN_VARIANT: Types. (line 6) 45678* TYPE_MAX_VALUE: Types. (line 6) 45679* TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 45680* TYPE_METHOD_BASETYPE: Types. (line 6) 45681* TYPE_METHODS: Classes. (line 6) 45682* TYPE_MIN_VALUE: Types. (line 6) 45683* TYPE_NAME <1>: Types for C++. (line 6) 45684* TYPE_NAME: Types. (line 6) 45685* TYPE_NOTHROW_P: Functions for C++. (line 154) 45686* TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 45687* TYPE_OFFSET_BASETYPE: Types. (line 6) 45688* TYPE_OPERAND_FMT: Label Output. (line 66) 45689* TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104) 45690* TYPE_OVERLOADS_ARROW: Classes. (line 107) 45691* TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100) 45692* TYPE_POLYMORPHIC_P: Classes. (line 77) 45693* TYPE_PRECISION <1>: Types for C++. (line 6) 45694* TYPE_PRECISION: Types. (line 6) 45695* TYPE_PTR_P: Types for C++. (line 74) 45696* TYPE_PTRFN_P: Types for C++. (line 78) 45697* TYPE_PTRMEM_P: Types for C++. (line 6) 45698* TYPE_PTROB_P: Types for C++. (line 81) 45699* TYPE_PTROBV_P: Types for C++. (line 6) 45700* TYPE_QUAL_CONST <1>: Types for C++. (line 6) 45701* TYPE_QUAL_CONST: Types. (line 6) 45702* TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 45703* TYPE_QUAL_RESTRICT: Types. (line 6) 45704* TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 45705* TYPE_QUAL_VOLATILE: Types. (line 6) 45706* TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 45707* TYPE_SIZE <1>: Types for C++. (line 6) 45708* TYPE_SIZE: Types. (line 6) 45709* TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 45710* TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 45711* TYPE_UNQUALIFIED: Types. (line 6) 45712* TYPE_VFIELD: Classes. (line 6) 45713* TYPENAME_TYPE: Types for C++. (line 6) 45714* TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 45715* TYPENAME_TYPE_FULLNAME: Types. (line 6) 45716* TYPEOF_TYPE: Types for C++. (line 6) 45717* UDAmode: Machine Modes. (line 168) 45718* udiv: Arithmetic. (line 125) 45719* udivM3 instruction pattern: Standard Names. (line 222) 45720* udivmodM4 instruction pattern: Standard Names. (line 428) 45721* udot_prodM instruction pattern: Standard Names. (line 265) 45722* UDQmode: Machine Modes. (line 136) 45723* UHAmode: Machine Modes. (line 160) 45724* UHQmode: Machine Modes. (line 128) 45725* UINT16_TYPE: Type Layout. (line 241) 45726* UINT32_TYPE: Type Layout. (line 242) 45727* UINT64_TYPE: Type Layout. (line 243) 45728* UINT8_TYPE: Type Layout. (line 240) 45729* UINT_FAST16_TYPE: Type Layout. (line 257) 45730* UINT_FAST32_TYPE: Type Layout. (line 258) 45731* UINT_FAST64_TYPE: Type Layout. (line 259) 45732* UINT_FAST8_TYPE: Type Layout. (line 256) 45733* UINT_LEAST16_TYPE: Type Layout. (line 249) 45734* UINT_LEAST32_TYPE: Type Layout. (line 250) 45735* UINT_LEAST64_TYPE: Type Layout. (line 251) 45736* UINT_LEAST8_TYPE: Type Layout. (line 248) 45737* UINTMAX_TYPE: Type Layout. (line 224) 45738* UINTPTR_TYPE: Type Layout. (line 261) 45739* umaddMN4 instruction pattern: Standard Names. (line 375) 45740* umax: Arithmetic. (line 144) 45741* umaxM3 instruction pattern: Standard Names. (line 222) 45742* umin: Arithmetic. (line 144) 45743* uminM3 instruction pattern: Standard Names. (line 222) 45744* umod: Arithmetic. (line 131) 45745* umodM3 instruction pattern: Standard Names. (line 222) 45746* umsubMN4 instruction pattern: Standard Names. (line 399) 45747* umulhisi3 instruction pattern: Standard Names. (line 347) 45748* umulM3_highpart instruction pattern: Standard Names. (line 361) 45749* umulqihi3 instruction pattern: Standard Names. (line 347) 45750* umulsidi3 instruction pattern: Standard Names. (line 347) 45751* unchanging: Flags. (line 324) 45752* unchanging, in call_insn: Flags. (line 19) 45753* unchanging, in jump_insn, call_insn and insn: Flags. (line 39) 45754* unchanging, in mem: Flags. (line 152) 45755* unchanging, in subreg: Flags. (line 188) 45756* unchanging, in symbol_ref: Flags. (line 10) 45757* UNEQ_EXPR: Unary and Binary Expressions. 45758 (line 6) 45759* UNGE_EXPR: Unary and Binary Expressions. 45760 (line 6) 45761* UNGT_EXPR: Unary and Binary Expressions. 45762 (line 6) 45763* UNION_TYPE <1>: Classes. (line 6) 45764* UNION_TYPE: Types. (line 6) 45765* unions, returning: Interface. (line 10) 45766* UNITS_PER_SIMD_WORD: Storage Layout. (line 77) 45767* UNITS_PER_WORD: Storage Layout. (line 67) 45768* UNKNOWN_TYPE <1>: Types for C++. (line 6) 45769* UNKNOWN_TYPE: Types. (line 6) 45770* UNLE_EXPR: Unary and Binary Expressions. 45771 (line 6) 45772* UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 49) 45773* UNLT_EXPR: Unary and Binary Expressions. 45774 (line 6) 45775* UNORDERED_EXPR: Unary and Binary Expressions. 45776 (line 6) 45777* unshare_all_rtl: Sharing. (line 58) 45778* unsigned division: Arithmetic. (line 125) 45779* unsigned division with unsigned saturation: Arithmetic. (line 125) 45780* unsigned greater than: Comparisons. (line 64) 45781* unsigned less than: Comparisons. (line 68) 45782* unsigned minimum and maximum: Arithmetic. (line 144) 45783* unsigned_fix: Conversions. (line 77) 45784* unsigned_float: Conversions. (line 62) 45785* unsigned_fract_convert: Conversions. (line 97) 45786* unsigned_sat_fract: Conversions. (line 103) 45787* unspec: Side Effects. (line 287) 45788* unspec_volatile: Side Effects. (line 287) 45789* untyped_call instruction pattern: Standard Names. (line 975) 45790* untyped_return instruction pattern: Standard Names. (line 1025) 45791* UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 45792* update_ssa: SSA. (line 76) 45793* update_stmt <1>: SSA Operands. (line 6) 45794* update_stmt: Manipulating GIMPLE statements. 45795 (line 141) 45796* update_stmt_if_modified: Manipulating GIMPLE statements. 45797 (line 144) 45798* UQQmode: Machine Modes. (line 123) 45799* US Software GOFAST, floating point emulation library: Library Calls. 45800 (line 44) 45801* us_ashift: Arithmetic. (line 168) 45802* us_minus: Arithmetic. (line 36) 45803* us_mult: Arithmetic. (line 92) 45804* us_neg: Arithmetic. (line 81) 45805* us_plus: Arithmetic. (line 14) 45806* US_SOFTWARE_GOFAST: Library Calls. (line 45) 45807* us_truncate: Conversions. (line 48) 45808* usaddM3 instruction pattern: Standard Names. (line 222) 45809* USAmode: Machine Modes. (line 164) 45810* usashlM3 instruction pattern: Standard Names. (line 431) 45811* usdivM3 instruction pattern: Standard Names. (line 222) 45812* use: Side Effects. (line 162) 45813* USE_C_ALLOCA: Host Misc. (line 19) 45814* USE_LD_AS_NEEDED: Driver. (line 198) 45815* USE_LOAD_POST_DECREMENT: Costs. (line 174) 45816* USE_LOAD_POST_INCREMENT: Costs. (line 169) 45817* USE_LOAD_PRE_DECREMENT: Costs. (line 184) 45818* USE_LOAD_PRE_INCREMENT: Costs. (line 179) 45819* use_optype_d: Manipulating GIMPLE statements. 45820 (line 101) 45821* use_param: GTY Options. (line 113) 45822* use_paramN: GTY Options. (line 131) 45823* use_params: GTY Options. (line 139) 45824* USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 195) 45825* USE_STORE_POST_DECREMENT: Costs. (line 194) 45826* USE_STORE_POST_INCREMENT: Costs. (line 189) 45827* USE_STORE_PRE_DECREMENT: Costs. (line 204) 45828* USE_STORE_PRE_INCREMENT: Costs. (line 199) 45829* used: Flags. (line 342) 45830* used, in symbol_ref: Flags. (line 215) 45831* USER_LABEL_PREFIX: Instruction Output. (line 139) 45832* USING_STMT: Statements for C++. (line 6) 45833* usmaddMN4 instruction pattern: Standard Names. (line 383) 45834* usmsubMN4 instruction pattern: Standard Names. (line 407) 45835* usmulhisi3 instruction pattern: Standard Names. (line 351) 45836* usmulM3 instruction pattern: Standard Names. (line 222) 45837* usmulqihi3 instruction pattern: Standard Names. (line 351) 45838* usmulsidi3 instruction pattern: Standard Names. (line 351) 45839* usnegM2 instruction pattern: Standard Names. (line 449) 45840* USQmode: Machine Modes. (line 132) 45841* ussubM3 instruction pattern: Standard Names. (line 222) 45842* usum_widenM3 instruction pattern: Standard Names. (line 275) 45843* UTAmode: Machine Modes. (line 172) 45844* UTQmode: Machine Modes. (line 140) 45845* V in constraint: Simple Constraints. (line 43) 45846* VA_ARG_EXPR: Unary and Binary Expressions. 45847 (line 6) 45848* values, returned by functions: Scalar Return. (line 6) 45849* VAR_DECL: Declarations. (line 6) 45850* var_location: Debug Information. (line 14) 45851* varargs implementation: Varargs. (line 6) 45852* variable: Declarations. (line 6) 45853* Variable Location Debug Information in RTL: Debug Information. 45854 (line 6) 45855* vashlM3 instruction pattern: Standard Names. (line 445) 45856* vashrM3 instruction pattern: Standard Names. (line 445) 45857* vec_concat: Vector Operations. (line 28) 45858* vec_duplicate: Vector Operations. (line 33) 45859* VEC_EXTRACT_EVEN_EXPR: Vectors. (line 6) 45860* vec_extract_evenM instruction pattern: Standard Names. (line 176) 45861* VEC_EXTRACT_ODD_EXPR: Vectors. (line 6) 45862* vec_extract_oddM instruction pattern: Standard Names. (line 183) 45863* vec_extractM instruction pattern: Standard Names. (line 171) 45864* vec_initM instruction pattern: Standard Names. (line 204) 45865* VEC_INTERLEAVE_HIGH_EXPR: Vectors. (line 6) 45866* vec_interleave_highM instruction pattern: Standard Names. (line 190) 45867* VEC_INTERLEAVE_LOW_EXPR: Vectors. (line 6) 45868* vec_interleave_lowM instruction pattern: Standard Names. (line 197) 45869* VEC_LSHIFT_EXPR: Vectors. (line 6) 45870* vec_merge: Vector Operations. (line 11) 45871* VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 45872* VEC_PACK_SAT_EXPR: Vectors. (line 6) 45873* vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 302) 45874* vec_pack_ssat_M instruction pattern: Standard Names. (line 295) 45875* VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 45876* vec_pack_trunc_M instruction pattern: Standard Names. (line 288) 45877* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 302) 45878* vec_pack_usat_M instruction pattern: Standard Names. (line 295) 45879* VEC_RSHIFT_EXPR: Vectors. (line 6) 45880* vec_select: Vector Operations. (line 19) 45881* vec_setM instruction pattern: Standard Names. (line 166) 45882* vec_shl_M instruction pattern: Standard Names. (line 282) 45883* vec_shr_M instruction pattern: Standard Names. (line 282) 45884* VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 45885* VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 45886* VEC_UNPACK_HI_EXPR: Vectors. (line 6) 45887* VEC_UNPACK_LO_EXPR: Vectors. (line 6) 45888* vec_unpacks_float_hi_M instruction pattern: Standard Names. 45889 (line 324) 45890* vec_unpacks_float_lo_M instruction pattern: Standard Names. 45891 (line 324) 45892* vec_unpacks_hi_M instruction pattern: Standard Names. (line 309) 45893* vec_unpacks_lo_M instruction pattern: Standard Names. (line 309) 45894* vec_unpacku_float_hi_M instruction pattern: Standard Names. 45895 (line 324) 45896* vec_unpacku_float_lo_M instruction pattern: Standard Names. 45897 (line 324) 45898* vec_unpacku_hi_M instruction pattern: Standard Names. (line 317) 45899* vec_unpacku_lo_M instruction pattern: Standard Names. (line 317) 45900* VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 45901* VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 45902* vec_widen_smult_hi_M instruction pattern: Standard Names. (line 333) 45903* vec_widen_smult_lo_M instruction pattern: Standard Names. (line 333) 45904* vec_widen_umult_hi_M instruction pattern: Standard Names. (line 333) 45905* vec_widen_umult_lo__M instruction pattern: Standard Names. (line 333) 45906* vector: Containers. (line 6) 45907* vector operations: Vector Operations. (line 6) 45908* VECTOR_CST: Constant expressions. 45909 (line 6) 45910* VECTOR_STORE_FLAG_VALUE: Misc. (line 308) 45911* virtual operands: SSA Operands. (line 6) 45912* VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 45913* VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 45914* VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 45915* VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 45916* VLIW: Processor pipeline description. 45917 (line 6) 45918* vlshrM3 instruction pattern: Standard Names. (line 445) 45919* VMS: Filesystem. (line 37) 45920* VMS_DEBUGGING_INFO: VMS Debug. (line 9) 45921* VOID_TYPE: Types. (line 6) 45922* VOIDmode: Machine Modes. (line 190) 45923* volatil: Flags. (line 356) 45924* volatil, in insn, call_insn, jump_insn, code_label, barrier, and note: Flags. 45925 (line 44) 45926* volatil, in label_ref and reg_label: Flags. (line 65) 45927* volatil, in mem, asm_operands, and asm_input: Flags. (line 94) 45928* volatil, in reg: Flags. (line 116) 45929* volatil, in subreg: Flags. (line 188) 45930* volatil, in symbol_ref: Flags. (line 224) 45931* volatile memory references: Flags. (line 357) 45932* volatile, in prefetch: Flags. (line 232) 45933* voptype_d: Manipulating GIMPLE statements. 45934 (line 108) 45935* voting between constraint alternatives: Class Preferences. (line 6) 45936* vrotlM3 instruction pattern: Standard Names. (line 445) 45937* vrotrM3 instruction pattern: Standard Names. (line 445) 45938* walk_dominator_tree: SSA. (line 256) 45939* walk_gimple_op: Statement and operand traversals. 45940 (line 32) 45941* walk_gimple_seq: Statement and operand traversals. 45942 (line 50) 45943* walk_gimple_stmt: Statement and operand traversals. 45944 (line 13) 45945* walk_use_def_chains: SSA. (line 232) 45946* WCHAR_TYPE: Type Layout. (line 192) 45947* WCHAR_TYPE_SIZE: Type Layout. (line 200) 45948* which_alternative: Output Statement. (line 59) 45949* WHILE_BODY: Statements for C++. (line 6) 45950* WHILE_COND: Statements for C++. (line 6) 45951* WHILE_STMT: Statements for C++. (line 6) 45952* WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 147) 45953* WINT_TYPE: Type Layout. (line 205) 45954* word_mode: Machine Modes. (line 336) 45955* WORD_REGISTER_OPERATIONS: Misc. (line 63) 45956* WORD_SWITCH_TAKES_ARG: Driver. (line 20) 45957* WORDS_BIG_ENDIAN: Storage Layout. (line 29) 45958* WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 217) 45959* X in constraint: Simple Constraints. (line 114) 45960* x-HOST: Host Fragment. (line 6) 45961* XCmode: Machine Modes. (line 197) 45962* XCOFF_DEBUGGING_INFO: DBX Options. (line 13) 45963* XEXP: Accessors. (line 6) 45964* XF_SIZE: Type Layout. (line 131) 45965* XFmode: Machine Modes. (line 79) 45966* XINT: Accessors. (line 6) 45967* xm-MACHINE.h <1>: Host Misc. (line 6) 45968* xm-MACHINE.h: Filesystem. (line 6) 45969* xor: Arithmetic. (line 163) 45970* xor, canonicalization of: Insn Canonicalizations. 45971 (line 79) 45972* xorM3 instruction pattern: Standard Names. (line 222) 45973* XSTR: Accessors. (line 6) 45974* XVEC: Accessors. (line 41) 45975* XVECEXP: Accessors. (line 48) 45976* XVECLEN: Accessors. (line 44) 45977* XWINT: Accessors. (line 6) 45978* zero_extend: Conversions. (line 28) 45979* zero_extendMN2 instruction pattern: Standard Names. (line 817) 45980* zero_extract: Bit-Fields. (line 30) 45981* zero_extract, canonicalization of: Insn Canonicalizations. 45982 (line 88) 45983 45984 45985 45986Tag Table: 45987Node: Top2060 45988Node: Contributing5098 45989Node: Portability5839 45990Node: Interface7627 45991Node: Libgcc10667 45992Node: Integer library routines12508 45993Node: Soft float library routines19347 45994Node: Decimal float library routines31284 45995Node: Fixed-point fractional library routines47041 45996Node: Exception handling routines147439 45997Node: Miscellaneous routines148546 45998Node: Languages148929 45999Node: Source Tree150478 46000Node: Configure Terms151060 46001Node: Top Level154018 46002Node: gcc Directory157187 46003Node: Subdirectories158137 46004Node: Configuration160009 46005Node: Config Fragments160729 46006Node: System Config161958 46007Node: Configuration Files162894 46008Node: Build165341 46009Node: Makefile165753 46010Ref: Makefile-Footnote-1172401 46011Ref: Makefile-Footnote-2172546 46012Node: Library Files172618 46013Node: Headers173180 46014Node: Documentation175263 46015Node: Texinfo Manuals176122 46016Node: Man Page Generation178462 46017Node: Miscellaneous Docs180377 46018Node: Front End181766 46019Node: Front End Directory185685 46020Node: Front End Config187005 46021Node: Front End Makefile189947 46022Node: Back End193729 46023Node: Testsuites197408 46024Node: Test Idioms198339 46025Node: Test Directives201736 46026Node: Directives202263 46027Node: Selectors212331 46028Node: Effective-Target Keywords213473 46029Node: Add Options230018 46030Node: Require Support230815 46031Node: Final Actions233322 46032Node: Ada Tests237385 46033Node: C Tests238727 46034Node: libgcj Tests243150 46035Node: LTO Testing244277 46036Node: gcov Testing245882 46037Node: profopt Testing248869 46038Node: compat Testing250584 46039Node: Torture Tests254824 46040Node: Options256441 46041Node: Option file format256881 46042Node: Option properties259630 46043Node: Passes266105 46044Node: Parsing pass266849 46045Node: Gimplification pass270377 46046Node: Pass manager272204 46047Node: Tree SSA passes273998 46048Node: RTL passes296528 46049Node: RTL308871 46050Node: RTL Objects311059 46051Node: RTL Classes314933 46052Node: Accessors319885 46053Node: Special Accessors322279 46054Node: Flags327645 46055Node: Machine Modes343820 46056Node: Constants356136 46057Node: Regs and Memory362165 46058Node: Arithmetic380066 46059Node: Comparisons389698 46060Node: Bit-Fields393990 46061Node: Vector Operations395542 46062Node: Conversions397377 46063Node: RTL Declarations401875 46064Node: Side Effects402696 46065Node: Incdec419018 46066Node: Assembler422353 46067Node: Debug Information423898 46068Node: Insns425096 46069Node: Calls451296 46070Node: Sharing453889 46071Node: Reading RTL456999 46072Node: GENERIC457991 46073Node: Deficiencies459864 46074Node: Tree overview460105 46075Node: Macros and Functions464232 46076Node: Identifiers465057 46077Node: Containers466668 46078Node: Types467825 46079Node: Declarations479921 46080Node: Working with declarations480416 46081Node: Internal structure486022 46082Node: Current structure hierarchy486406 46083Node: Adding new DECL node types488500 46084Node: Attributes492573 46085Node: Expression trees493818 46086Node: Constant expressions495571 46087Node: Storage References499790 46088Node: Unary and Binary Expressions502964 46089Node: Vectors522382 46090Node: Statements527311 46091Node: Basic Statements527831 46092Node: Blocks532338 46093Node: Statement Sequences533742 46094Node: Empty Statements534075 46095Node: Jumps534649 46096Node: Cleanups535302 46097Node: OpenMP537070 46098Node: Functions542817 46099Node: Function Basics543288 46100Node: Function Properties546973 46101Node: Language-dependent trees550102 46102Node: C and C++ Trees550988 46103Node: Types for C++553892 46104Node: Namespaces558862 46105Node: Classes561969 46106Node: Functions for C++567047 46107Node: Statements for C++573300 46108Node: C++ Expressions581348 46109Node: Java Trees582849 46110Node: GIMPLE582962 46111Node: Tuple representation586583 46112Node: GIMPLE instruction set595238 46113Node: GIMPLE Exception Handling596906 46114Node: Temporaries598820 46115Ref: Temporaries-Footnote-1600139 46116Node: Operands600202 46117Node: Compound Expressions600976 46118Node: Compound Lvalues601210 46119Node: Conditional Expressions601976 46120Node: Logical Operators602646 46121Node: Manipulating GIMPLE statements609437 46122Node: Tuple specific accessors615365 46123Node: `GIMPLE_ASM'616184 46124Node: `GIMPLE_ASSIGN'618789 46125Node: `GIMPLE_BIND'622734 46126Node: `GIMPLE_CALL'624541 46127Node: `GIMPLE_CATCH'628800 46128Node: `GIMPLE_COND'629943 46129Node: `GIMPLE_DEBUG'632731 46130Node: `GIMPLE_EH_FILTER'636103 46131Node: `GIMPLE_LABEL'637590 46132Node: `GIMPLE_NOP'638565 46133Node: `GIMPLE_OMP_ATOMIC_LOAD'638934 46134Node: `GIMPLE_OMP_ATOMIC_STORE'639844 46135Node: `GIMPLE_OMP_CONTINUE'640483 46136Node: `GIMPLE_OMP_CRITICAL'641833 46137Node: `GIMPLE_OMP_FOR'642769 46138Node: `GIMPLE_OMP_MASTER'646279 46139Node: `GIMPLE_OMP_ORDERED'646662 46140Node: `GIMPLE_OMP_PARALLEL'647062 46141Node: `GIMPLE_OMP_RETURN'649831 46142Node: `GIMPLE_OMP_SECTION'650481 46143Node: `GIMPLE_OMP_SECTIONS'651147 46144Node: `GIMPLE_OMP_SINGLE'652751 46145Node: `GIMPLE_PHI'653687 46146Node: `GIMPLE_RESX'655100 46147Node: `GIMPLE_RETURN'655819 46148Node: `GIMPLE_SWITCH'656387 46149Node: `GIMPLE_TRY'658517 46150Node: `GIMPLE_WITH_CLEANUP_EXPR'660307 46151Node: GIMPLE sequences661190 46152Node: Sequence iterators664396 46153Node: Adding a new GIMPLE statement code672851 46154Node: Statement and operand traversals674131 46155Node: Tree SSA676741 46156Node: Annotations678527 46157Node: SSA Operands679053 46158Node: SSA693584 46159Node: Alias analysis705875 46160Node: Memory model709655 46161Node: Loop Analysis and Representation711018 46162Node: Loop representation712199 46163Node: Loop querying719119 46164Node: Loop manipulation721952 46165Node: LCSSA724320 46166Node: Scalar evolutions726392 46167Node: loop-iv729636 46168Node: Number of iterations731562 46169Node: Dependency analysis734371 46170Node: Lambda740739 46171Node: Omega742410 46172Node: Control Flow743975 46173Node: Basic Blocks744970 46174Node: Edges749538 46175Node: Profile information758100 46176Node: Maintaining the CFG762786 46177Node: Liveness information769663 46178Node: Machine Desc771789 46179Node: Overview774257 46180Node: Patterns776298 46181Node: Example779736 46182Node: RTL Template781171 46183Node: Output Template791826 46184Node: Output Statement795791 46185Node: Predicates799753 46186Node: Machine-Independent Predicates802671 46187Node: Defining Predicates807616 46188Node: Constraints813581 46189Node: Simple Constraints814829 46190Node: Multi-Alternative827035 46191Node: Class Preferences829876 46192Node: Modifiers830768 46193Node: Machine Constraints834900 46194Node: Disable Insn Alternatives871763 46195Node: Define Constraints874656 46196Node: C Constraint Interface881437 46197Node: Standard Names885078 46198Ref: shift patterns904006 46199Ref: prologue instruction pattern944017 46200Ref: epilogue instruction pattern944510 46201Node: Pattern Ordering954226 46202Node: Dependent Patterns955462 46203Node: Jump Patterns957082 46204Ref: Jump Patterns-Footnote-1959226 46205Node: Looping Patterns959272 46206Node: Insn Canonicalizations964000 46207Node: Expander Definitions967951 46208Node: Insn Splitting976069 46209Node: Including Patterns985671 46210Node: Peephole Definitions987451 46211Node: define_peephole988704 46212Node: define_peephole2995035 46213Node: Insn Attributes998102 46214Node: Defining Attributes999208 46215Node: Expressions1001728 46216Node: Tagging Insns1008330 46217Node: Attr Example1012683 46218Node: Insn Lengths1015057 46219Node: Constant Attributes1018116 46220Node: Delay Slots1019285 46221Node: Processor pipeline description1022509 46222Ref: Processor pipeline description-Footnote-11040127 46223Node: Conditional Execution1040449 46224Node: Constant Definitions1043302 46225Node: Iterators1044897 46226Node: Mode Iterators1045344 46227Node: Defining Mode Iterators1046322 46228Node: Substitutions1047816 46229Node: Examples1050057 46230Node: Code Iterators1051505 46231Node: Target Macros1053762 46232Node: Target Structure1056850 46233Node: Driver1058119 46234Node: Run-time Target1081800 46235Node: Per-Function Data1089672 46236Node: Storage Layout1092435 46237Node: Type Layout1118021 46238Node: Registers1132521 46239Node: Register Basics1133495 46240Node: Allocation Order1139062 46241Node: Values in Registers1141083 46242Node: Leaf Functions1148572 46243Node: Stack Registers1151430 46244Node: Register Classes1152702 46245Node: Old Constraints1180327 46246Node: Stack and Calling1187479 46247Node: Frame Layout1188013 46248Node: Exception Handling1198893 46249Node: Stack Checking1205271 46250Node: Frame Registers1210084 46251Node: Elimination1216977 46252Node: Stack Arguments1221206 46253Node: Register Arguments1228015 46254Node: Scalar Return1243493 46255Node: Aggregate Return1249585 46256Node: Caller Saves1253266 46257Node: Function Entry1254444 46258Node: Profiling1267072 46259Node: Tail Calls1268771 46260Node: Stack Smashing Protection1270137 46261Node: Varargs1271249 46262Node: Trampolines1279244 46263Node: Library Calls1285891 46264Node: Addressing Modes1290741 46265Node: Anchored Addresses1308150 46266Node: Condition Code1310799 46267Node: CC0 Condition Codes1312928 46268Node: MODE_CC Condition Codes1316174 46269Node: Cond. Exec. Macros1322403 46270Node: Costs1323382 46271Node: Scheduling1336843 46272Node: Sections1354110 46273Node: PIC1369178 46274Node: Assembler Format1371182 46275Node: File Framework1372320 46276Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1377795 46277Node: Data Output1381060 46278Node: Uninitialized Data1388819 46279Node: Label Output1394383 46280Node: Initialization1416073 46281Node: Macros for Initialization1422035 46282Node: Instruction Output1428487 46283Node: Dispatch Tables1438158 46284Node: Exception Region Output1441973 46285Node: Alignment Output1447715 46286Node: Debugging Info1451878 46287Node: All Debuggers1452548 46288Node: DBX Options1455403 46289Node: DBX Hooks1460852 46290Node: File Names and DBX1462778 46291Node: SDB and DWARF1464890 46292Node: VMS Debug1469191 46293Node: Floating Point1469761 46294Node: Mode Switching1474584 46295Node: Target Attributes1478510 46296Node: Emulated TLS1485346 46297Node: MIPS Coprocessors1488736 46298Node: PCH Target1490305 46299Node: C++ ABI1491847 46300Node: Named Address Spaces1496496 46301Node: Misc1501598 46302Ref: TARGET_SHIFT_TRUNCATION_MASK1509026 46303Node: Host Config1553537 46304Node: Host Common1554605 46305Node: Filesystem1556984 46306Node: Host Misc1561099 46307Node: Fragments1563548 46308Node: Target Fragment1564743 46309Node: Host Fragment1570633 46310Node: Collect21570873 46311Node: Header Dirs1573509 46312Node: Type Information1574932 46313Node: GTY Options1577223 46314Node: GGC Roots1587898 46315Node: Files1588618 46316Node: Invoking the garbage collector1591364 46317Node: Plugins1592417 46318Node: Funding1608239 46319Node: GNU Project1610726 46320Node: Copying1611375 46321Node: GNU Free Documentation License1648906 46322Node: Contributors1671315 46323Node: Option Index1708002 46324Node: Concept Index1708587 46325 46326End Tag Table 46327