|
|
1.1.1.9 ! root 1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the ! 2: input file gcc.texi. 1.1 root 3: 4: This file documents the use and the internals of the GNU compiler. 5: 1.1.1.8 root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330 7: Boston, MA 02111-1307 USA 1.1.1.5 root 8: 1.1.1.8 root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software 10: Foundation, Inc. 1.1 root 11: 1.1.1.3 root 12: Permission is granted to make and distribute verbatim copies of this 13: manual provided the copyright notice and this permission notice are 14: preserved on all copies. 1.1 root 15: 16: Permission is granted to copy and distribute modified versions of 17: this manual under the conditions for verbatim copying, provided also 1.1.1.7 root 18: that the sections entitled "GNU General Public License," "Funding for 19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are 20: included exactly as in the original, and provided that the entire 21: resulting derived work is distributed under the terms of a permission 22: notice identical to this one. 1.1 root 23: 24: Permission is granted to copy and distribute translations of this 25: manual into another language, under the above conditions for modified 1.1.1.3 root 26: versions, except that the sections entitled "GNU General Public 1.1.1.7 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight 28: `Look And Feel'", and this permission notice, may be included in 29: translations approved by the Free Software Foundation instead of in the 30: original English. 1.1 root 31: 32: 1.1.1.8 root 33: File: gcc.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 1.1.1.3 root 34: 1.1.1.8 root 35: Machine Modes 36: ============= 1.1.1.2 root 37: 1.1.1.8 root 38: A machine mode describes a size of data object and the 39: representation used for it. In the C code, machine modes are 40: represented by an enumeration type, `enum machine_mode', defined in 41: `machmode.def'. Each RTL expression has room for a machine mode and so 42: do certain kinds of tree expressions (declarations and types, to be 43: precise). 44: 45: In debugging dumps and machine descriptions, the machine mode of an 46: RTL expression is written after the expression code with a colon to 47: separate them. The letters `mode' which appear at the end of each 48: machine mode name are omitted. For example, `(reg:SI 38)' is a `reg' 49: expression with machine mode `SImode'. If the mode is `VOIDmode', it 50: is not written at all. 51: 52: Here is a table of machine modes. The term "byte" below refers to an 53: object of `BITS_PER_UNIT' bits (*note Storage Layout::.). 54: 55: `QImode' 56: "Quarter-Integer" mode represents a single byte treated as an 57: integer. 58: 59: `HImode' 60: "Half-Integer" mode represents a two-byte integer. 61: 62: `PSImode' 63: "Partial Single Integer" mode represents an integer which occupies 64: four bytes but which doesn't really use all four. On some 65: machines, this is the right mode to use for pointers. 66: 67: `SImode' 68: "Single Integer" mode represents a four-byte integer. 69: 70: `PDImode' 71: "Partial Double Integer" mode represents an integer which occupies 72: eight bytes but which doesn't really use all eight. On some 73: machines, this is the right mode to use for certain pointers. 74: 75: `DImode' 76: "Double Integer" mode represents an eight-byte integer. 77: 78: `TImode' 79: "Tetra Integer" (?) mode represents a sixteen-byte integer. 80: 81: `SFmode' 82: "Single Floating" mode represents a single-precision (four byte) 83: floating point number. 84: 85: `DFmode' 86: "Double Floating" mode represents a double-precision (eight byte) 87: floating point number. 88: 89: `XFmode' 90: "Extended Floating" mode represents a triple-precision (twelve 91: byte) floating point number. This mode is used for IEEE extended 92: floating point. On some systems not all bits within these bytes 93: will actually be used. 94: 95: `TFmode' 96: "Tetra Floating" mode represents a quadruple-precision (sixteen 97: byte) floating point number. 98: 99: `CCmode' 100: "Condition Code" mode represents the value of a condition code, 101: which is a machine-specific set of bits used to represent the 102: result of a comparison operation. Other machine-specific modes 103: may also be used for the condition code. These modes are not used 104: on machines that use `cc0' (see *note Condition Code::.). 105: 106: `BLKmode' 107: "Block" mode represents values that are aggregates to which none of 108: the other modes apply. In RTL, only memory references can have 109: this mode, and only if they appear in string-move or vector 110: instructions. On machines which have no such instructions, 111: `BLKmode' will not appear in RTL. 112: 113: `VOIDmode' 114: Void mode means the absence of a mode or an unspecified mode. For 115: example, RTL expressions of code `const_int' have mode `VOIDmode' 116: because they can be taken to have whatever mode the context 117: requires. In debugging dumps of RTL, `VOIDmode' is expressed by 118: the absence of any mode. 119: 120: `SCmode, DCmode, XCmode, TCmode' 121: These modes stand for a complex number represented as a pair of 122: floating point values. The floating point values are in `SFmode', 123: `DFmode', `XFmode', and `TFmode', respectively. 124: 125: `CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 126: These modes stand for a complex number represented as a pair of 127: integer values. The integer values are in `QImode', `HImode', 128: `SImode', `DImode', `TImode', and `OImode', respectively. 129: 130: The machine description defines `Pmode' as a C macro which expands 131: into the machine mode used for addresses. Normally this is the mode 132: whose size is `BITS_PER_WORD', `SImode' on 32-bit machines. 133: 134: The only modes which a machine description must support are 135: `QImode', and the modes corresponding to `BITS_PER_WORD', 136: `FLOAT_TYPE_SIZE' and `DOUBLE_TYPE_SIZE'. The compiler will attempt to 137: use `DImode' for 8-byte structures and unions, but this can be 138: prevented by overriding the definition of `MAX_FIXED_MODE_SIZE'. 139: Alternatively, you can have the compiler use `TImode' for 16-byte 140: structures and unions. Likewise, you can arrange for the C type `short 141: int' to avoid using `HImode'. 142: 143: Very few explicit references to machine modes remain in the compiler 144: and these few references will soon be removed. Instead, the machine 145: modes are divided into mode classes. These are represented by the 146: enumeration type `enum mode_class' defined in `machmode.h'. The 147: possible mode classes are: 148: 149: `MODE_INT' 150: Integer modes. By default these are `QImode', `HImode', `SImode', 151: `DImode', and `TImode'. 152: 153: `MODE_PARTIAL_INT' 154: The "partial integer" modes, `PSImode' and `PDImode'. 155: 156: `MODE_FLOAT' 157: floating point modes. By default these are `SFmode', `DFmode', 158: `XFmode' and `TFmode'. 159: 160: `MODE_COMPLEX_INT' 161: Complex integer modes. (These are not currently implemented). 162: 163: `MODE_COMPLEX_FLOAT' 164: Complex floating point modes. By default these are `SCmode', 165: `DCmode', `XCmode', and `TCmode'. 166: 167: `MODE_FUNCTION' 168: Algol or Pascal function variables including a static chain. 169: (These are not currently implemented). 170: 171: `MODE_CC' 172: Modes representing condition code values. These are `CCmode' plus 173: any modes listed in the `EXTRA_CC_MODES' macro. *Note Jump 174: Patterns::, also see *Note Condition Code::. 175: 176: `MODE_RANDOM' 177: This is a catchall mode class for modes which don't fit into the 178: above classes. Currently `VOIDmode' and `BLKmode' are in 179: `MODE_RANDOM'. 180: 181: Here are some C macros that relate to machine modes: 182: 183: `GET_MODE (X)' 184: Returns the machine mode of the RTX X. 185: 186: `PUT_MODE (X, NEWMODE)' 187: Alters the machine mode of the RTX X to be NEWMODE. 188: 189: `NUM_MACHINE_MODES' 190: Stands for the number of machine modes available on the target 191: machine. This is one greater than the largest numeric value of any 192: machine mode. 193: 194: `GET_MODE_NAME (M)' 195: Returns the name of mode M as a string. 196: 197: `GET_MODE_CLASS (M)' 198: Returns the mode class of mode M. 199: 200: `GET_MODE_WIDER_MODE (M)' 201: Returns the next wider natural mode. For example, the expression 202: `GET_MODE_WIDER_MODE (QImode)' returns `HImode'. 203: 204: `GET_MODE_SIZE (M)' 205: Returns the size in bytes of a datum of mode M. 206: 207: `GET_MODE_BITSIZE (M)' 208: Returns the size in bits of a datum of mode M. 209: 210: `GET_MODE_MASK (M)' 211: Returns a bitmask containing 1 for all bits in a word that fit 212: within mode M. This macro can only be used for modes whose 213: bitsize is less than or equal to `HOST_BITS_PER_INT'. 214: 215: `GET_MODE_ALIGNMENT (M))' 216: Return the required alignment, in bits, for an object of mode M. 217: 218: `GET_MODE_UNIT_SIZE (M)' 219: Returns the size in bytes of the subunits of a datum of mode M. 220: This is the same as `GET_MODE_SIZE' except in the case of complex 221: modes. For them, the unit size is the size of the real or 222: imaginary part. 223: 224: `GET_MODE_NUNITS (M)' 225: Returns the number of units contained in a mode, i.e., 226: `GET_MODE_SIZE' divided by `GET_MODE_UNIT_SIZE'. 227: 228: `GET_CLASS_NARROWEST_MODE (C)' 229: Returns the narrowest mode in mode class C. 230: 231: The global variables `byte_mode' and `word_mode' contain modes whose 232: classes are `MODE_INT' and whose bitsizes are either `BITS_PER_UNIT' or 233: `BITS_PER_WORD', respectively. On 32-bit machines, these are `QImode' 234: and `SImode', respectively. 1.1.1.2 root 235: 1.1.1.3 root 236: 1.1.1.8 root 237: File: gcc.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 1.1.1.3 root 238: 1.1.1.8 root 239: Constant Expression Types 240: ========================= 1.1.1.2 root 241: 1.1.1.8 root 242: The simplest RTL expressions are those that represent constant 243: values. 1.1.1.3 root 244: 1.1.1.8 root 245: `(const_int I)' 246: This type of expression represents the integer value I. I is 247: customarily accessed with the macro `INTVAL' as in `INTVAL (EXP)', 248: which is equivalent to `XWINT (EXP, 0)'. 249: 250: There is only one expression object for the integer value zero; it 251: is the value of the variable `const0_rtx'. Likewise, the only 252: expression for integer value one is found in `const1_rtx', the only 253: expression for integer value two is found in `const2_rtx', and the 254: only expression for integer value negative one is found in 255: `constm1_rtx'. Any attempt to create an expression of code 256: `const_int' and value zero, one, two or negative one will return 257: `const0_rtx', `const1_rtx', `const2_rtx' or `constm1_rtx' as 258: appropriate. 259: 260: Similarly, there is only one object for the integer whose value is 261: `STORE_FLAG_VALUE'. It is found in `const_true_rtx'. If 262: `STORE_FLAG_VALUE' is one, `const_true_rtx' and `const1_rtx' will 263: point to the same object. If `STORE_FLAG_VALUE' is -1, 264: `const_true_rtx' and `constm1_rtx' will point to the same object. 265: 266: `(const_double:M ADDR I0 I1 ...)' 267: Represents either a floating-point constant of mode M or an 268: integer constant too large to fit into `HOST_BITS_PER_WIDE_INT' 269: bits but small enough to fit within twice that number of bits (GNU 270: CC does not provide a mechanism to represent even larger 271: constants). In the latter case, M will be `VOIDmode'. 272: 273: ADDR is used to contain the `mem' expression that corresponds to 274: the location in memory that at which the constant can be found. If 275: it has not been allocated a memory location, but is on the chain 276: of all `const_double' expressions in this compilation (maintained 277: using an undisplayed field), ADDR contains `const0_rtx'. If it is 278: not on the chain, ADDR contains `cc0_rtx'. ADDR is customarily 279: accessed with the macro `CONST_DOUBLE_MEM' and the chain field via 280: `CONST_DOUBLE_CHAIN'. 281: 282: If M is `VOIDmode', the bits of the value are stored in I0 and I1. 283: I0 is customarily accessed with the macro `CONST_DOUBLE_LOW' and 284: I1 with `CONST_DOUBLE_HIGH'. 285: 286: If the constant is floating point (regardless of its precision), 287: then the number of integers used to store the value depends on the 288: size of `REAL_VALUE_TYPE' (*note Cross-compilation::.). The 289: integers represent a floating point number, but not precisely in 290: the target machine's or host machine's floating point format. To 291: convert them to the precise bit pattern used by the target 292: machine, use the macro `REAL_VALUE_TO_TARGET_DOUBLE' and friends 293: (*note Data Output::.). 294: 295: The macro `CONST0_RTX (MODE)' refers to an expression with value 0 296: in mode MODE. If mode MODE is of mode class `MODE_INT', it 297: returns `const0_rtx'. Otherwise, it returns a `CONST_DOUBLE' 298: expression in mode MODE. Similarly, the macro `CONST1_RTX (MODE)' 299: refers to an expression with value 1 in mode MODE and similarly 300: for `CONST2_RTX'. 301: 302: `(const_string STR)' 303: Represents a constant string with value STR. Currently this is 304: used only for insn attributes (*note Insn Attributes::.) since 305: constant strings in C are placed in memory. 306: 307: `(symbol_ref:MODE SYMBOL)' 308: Represents the value of an assembler label for data. SYMBOL is a 309: string that describes the name of the assembler label. If it 310: starts with a `*', the label is the rest of SYMBOL not including 311: the `*'. Otherwise, the label is SYMBOL, usually prefixed with 312: `_'. 313: 314: The `symbol_ref' contains a mode, which is usually `Pmode'. 315: Usually that is the only mode for which a symbol is directly valid. 316: 317: `(label_ref LABEL)' 318: Represents the value of an assembler label for code. It contains 319: one operand, an expression, which must be a `code_label' that 320: appears in the instruction sequence to identify the place where 321: the label should go. 322: 323: The reason for using a distinct expression type for code label 324: references is so that jump optimization can distinguish them. 325: 326: `(const:M EXP)' 327: Represents a constant that is the result of an assembly-time 328: arithmetic computation. The operand, EXP, is an expression that 329: contains only constants (`const_int', `symbol_ref' and `label_ref' 330: expressions) combined with `plus' and `minus'. However, not all 331: combinations are valid, since the assembler cannot do arbitrary 332: arithmetic on relocatable symbols. 333: 334: M should be `Pmode'. 335: 336: `(high:M EXP)' 337: Represents the high-order bits of EXP, usually a `symbol_ref'. 338: The number of bits is machine-dependent and is normally the number 339: of bits specified in an instruction that initializes the high 340: order bits of a register. It is used with `lo_sum' to represent 341: the typical two-instruction sequence used in RISC machines to 342: reference a global memory location. 1.1.1.6 root 343: 1.1.1.8 root 344: M should be `Pmode'. 1.1.1.2 root 345: 346: 1.1.1.8 root 347: File: gcc.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 1.1.1.6 root 348: 1.1.1.8 root 349: Registers and Memory 350: ==================== 1.1.1.6 root 351: 1.1.1.8 root 352: Here are the RTL expression types for describing access to machine 353: registers and to main memory. 1.1.1.6 root 354: 1.1.1.8 root 355: `(reg:M N)' 356: For small values of the integer N (those that are less than 357: `FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 358: register number N: a "hard register". For larger values of N, it 359: stands for a temporary value or "pseudo register". The compiler's 360: strategy is to generate code assuming an unlimited number of such 361: pseudo registers, and later convert them into hard registers or 362: into memory references. 363: 364: M is the machine mode of the reference. It is necessary because 365: machines can generally refer to each register in more than one 366: mode. For example, a register may contain a full word but there 367: may be instructions to refer to it as a half word or as a single 368: byte, as well as instructions to refer to it as a floating point 369: number of various precisions. 370: 371: Even for a register that the machine can access in only one mode, 372: the mode must always be specified. 373: 374: The symbol `FIRST_PSEUDO_REGISTER' is defined by the machine 375: description, since the number of hard registers on the machine is 376: an invariant characteristic of the machine. Note, however, that 377: not all of the machine registers must be general registers. All 378: the machine registers that can be used for storage of data are 379: given hard register numbers, even those that can be used only in 380: certain instructions or can hold only certain types of data. 381: 382: A hard register may be accessed in various modes throughout one 383: function, but each pseudo register is given a natural mode and is 384: accessed only in that mode. When it is necessary to describe an 385: access to a pseudo register using a nonnatural mode, a `subreg' 386: expression is used. 387: 388: A `reg' expression with a machine mode that specifies more than 389: one word of data may actually stand for several consecutive 390: registers. If in addition the register number specifies a 391: hardware register, then it actually represents several consecutive 392: hardware registers starting with the specified one. 393: 394: Each pseudo register number used in a function's RTL code is 395: represented by a unique `reg' expression. 396: 397: Some pseudo register numbers, those within the range of 398: `FIRST_VIRTUAL_REGISTER' to `LAST_VIRTUAL_REGISTER' only appear 399: during the RTL generation phase and are eliminated before the 400: optimization phases. These represent locations in the stack frame 401: that cannot be determined until RTL generation for the function 402: has been completed. The following virtual register numbers are 403: defined: 404: 405: `VIRTUAL_INCOMING_ARGS_REGNUM' 406: This points to the first word of the incoming arguments 407: passed on the stack. Normally these arguments are placed 408: there by the caller, but the callee may have pushed some 409: arguments that were previously passed in registers. 410: 411: When RTL generation is complete, this virtual register is 412: replaced by the sum of the register given by 413: `ARG_POINTER_REGNUM' and the value of `FIRST_PARM_OFFSET'. 414: 415: `VIRTUAL_STACK_VARS_REGNUM' 416: If `FRAME_GROWS_DOWNWARD' is defined, this points to 417: immediately above the first variable on the stack. 418: Otherwise, it points to the first variable on the stack. 419: 420: `VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 421: register given by `FRAME_POINTER_REGNUM' and the value 422: `STARTING_FRAME_OFFSET'. 423: 424: `VIRTUAL_STACK_DYNAMIC_REGNUM' 425: This points to the location of dynamically allocated memory 426: on the stack immediately after the stack pointer has been 427: adjusted by the amount of memory desired. 428: 429: This virtual register is replaced by the sum of the register 430: given by `STACK_POINTER_REGNUM' and the value 431: `STACK_DYNAMIC_OFFSET'. 432: 433: `VIRTUAL_OUTGOING_ARGS_REGNUM' 434: This points to the location in the stack at which outgoing 435: arguments should be written when the stack is pre-pushed 436: (arguments pushed using push insns should always use 437: `STACK_POINTER_REGNUM'). 438: 439: This virtual register is replaced by the sum of the register 440: given by `STACK_POINTER_REGNUM' and the value 441: `STACK_POINTER_OFFSET'. 442: 443: `(subreg:M REG WORDNUM)' 444: `subreg' expressions are used to refer to a register in a machine 445: mode other than its natural one, or to refer to one register of a 446: multi-word `reg' that actually refers to several registers. 447: 448: Each pseudo-register has a natural mode. If it is necessary to 449: operate on it in a different mode--for example, to perform a 450: fullword move instruction on a pseudo-register that contains a 451: single byte--the pseudo-register must be enclosed in a `subreg'. 452: In such a case, WORDNUM is zero. 453: 454: Usually M is at least as narrow as the mode of REG, in which case 455: it is restricting consideration to only the bits of REG that are 456: in M. 457: 458: Sometimes M is wider than the mode of REG. These `subreg' 459: expressions are often called "paradoxical". They are used in 460: cases where we want to refer to an object in a wider mode but do 461: not care what value the additional bits have. The reload pass 462: ensures that paradoxical references are only made to hard 463: registers. 464: 465: The other use of `subreg' is to extract the individual registers of 466: a multi-register value. Machine modes such as `DImode' and 467: `TImode' can indicate values longer than a word, values which 468: usually require two or more consecutive registers. To access one 469: of the registers, use a `subreg' with mode `SImode' and a WORDNUM 470: that says which register. 471: 472: Storing in a non-paradoxical `subreg' has undefined results for 473: bits belonging to the same word as the `subreg'. This laxity makes 474: it easier to generate efficient code for such instructions. To 475: represent an instruction that preserves all the bits outside of 476: those in the `subreg', use `strict_low_part' around the `subreg'. 477: 478: The compilation parameter `WORDS_BIG_ENDIAN', if set to 1, says 479: that word number zero is the most significant part; otherwise, it 480: is the least significant part. 481: 482: Between the combiner pass and the reload pass, it is possible to 483: have a paradoxical `subreg' which contains a `mem' instead of a 484: `reg' as its first operand. After the reload pass, it is also 485: possible to have a non-paradoxical `subreg' which contains a 486: `mem'; this usually occurs when the `mem' is a stack slot which 487: replaced a pseudo register. 488: 489: Note that it is not valid to access a `DFmode' value in `SFmode' 490: using a `subreg'. On some machines the most significant part of a 491: `DFmode' value does not have the same format as a single-precision 492: floating value. 493: 494: It is also not valid to access a single word of a multi-word value 495: in a hard register when less registers can hold the value than 496: would be expected from its size. For example, some 32-bit 497: machines have floating-point registers that can hold an entire 498: `DFmode' value. If register 10 were such a register `(subreg:SI 499: (reg:DF 10) 1)' would be invalid because there is no way to 500: convert that reference to a single machine register. The reload 501: pass prevents `subreg' expressions such as these from being formed. 502: 503: The first operand of a `subreg' expression is customarily accessed 504: with the `SUBREG_REG' macro and the second operand is customarily 505: accessed with the `SUBREG_WORD' macro. 506: 507: `(scratch:M)' 508: This represents a scratch register that will be required for the 509: execution of a single instruction and not used subsequently. It is 510: converted into a `reg' by either the local register allocator or 511: the reload pass. 512: 513: `scratch' is usually present inside a `clobber' operation (*note 514: Side Effects::.). 515: 516: `(cc0)' 517: This refers to the machine's condition code register. It has no 518: operands and may not have a machine mode. There are two ways to 519: use it: 520: 521: * To stand for a complete set of condition code flags. This is 522: best on most machines, where each comparison sets the entire 523: series of flags. 524: 525: With this technique, `(cc0)' may be validly used in only two 526: contexts: as the destination of an assignment (in test and 527: compare instructions) and in comparison operators comparing 528: against zero (`const_int' with value zero; that is to say, 529: `const0_rtx'). 530: 531: * To stand for a single flag that is the result of a single 532: condition. This is useful on machines that have only a 533: single flag bit, and in which comparison instructions must 534: specify the condition to test. 535: 536: With this technique, `(cc0)' may be validly used in only two 537: contexts: as the destination of an assignment (in test and 538: compare instructions) where the source is a comparison 539: operator, and as the first operand of `if_then_else' (in a 540: conditional branch). 541: 542: There is only one expression object of code `cc0'; it is the value 543: of the variable `cc0_rtx'. Any attempt to create an expression of 544: code `cc0' will return `cc0_rtx'. 545: 546: Instructions can set the condition code implicitly. On many 547: machines, nearly all instructions set the condition code based on 548: the value that they compute or store. It is not necessary to 549: record these actions explicitly in the RTL because the machine 550: description includes a prescription for recognizing the 551: instructions that do so (by means of the macro 552: `NOTICE_UPDATE_CC'). *Note Condition Code::. Only instructions 553: whose sole purpose is to set the condition code, and instructions 554: that use the condition code, need mention `(cc0)'. 555: 556: On some machines, the condition code register is given a register 557: number and a `reg' is used instead of `(cc0)'. This is usually the 558: preferable approach if only a small subset of instructions modify 559: the condition code. Other machines store condition codes in 560: general registers; in such cases a pseudo register should be used. 561: 562: Some machines, such as the Sparc and RS/6000, have two sets of 563: arithmetic instructions, one that sets and one that does not set 564: the condition code. This is best handled by normally generating 565: the instruction that does not set the condition code, and making a 566: pattern that both performs the arithmetic and sets the condition 567: code register (which would not be `(cc0)' in this case). For 568: examples, search for `addcc' and `andcc' in `sparc.md'. 569: 570: `(pc)' 571: This represents the machine's program counter. It has no operands 572: and may not have a machine mode. `(pc)' may be validly used only 573: in certain specific contexts in jump instructions. 574: 575: There is only one expression object of code `pc'; it is the value 576: of the variable `pc_rtx'. Any attempt to create an expression of 577: code `pc' will return `pc_rtx'. 578: 579: All instructions that do not jump alter the program counter 580: implicitly by incrementing it, but there is no need to mention 581: this in the RTL. 582: 583: `(mem:M ADDR)' 584: This RTX represents a reference to main memory at an address 585: represented by the expression ADDR. M specifies how large a unit 586: of memory is accessed. 1.1.1.6 root 587: 1.1.1.7 root 588: 1.1.1.8 root 589: File: gcc.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 1.1.1.6 root 590: 1.1.1.8 root 591: RTL Expressions for Arithmetic 592: ============================== 1.1.1.6 root 593: 1.1.1.8 root 594: Unless otherwise specified, all the operands of arithmetic 595: expressions must be valid for mode M. An operand is valid for mode M 596: if it has mode M, or if it is a `const_int' or `const_double' and M is 597: a mode of class `MODE_INT'. 598: 599: For commutative binary operations, constants should be placed in the 600: second operand. 601: 602: `(plus:M X Y)' 603: Represents the sum of the values represented by X and Y carried 604: out in machine mode M. 605: 606: `(lo_sum:M X Y)' 607: Like `plus', except that it represents that sum of X and the 608: low-order bits of Y. The number of low order bits is 609: machine-dependent but is normally the number of bits in a `Pmode' 610: item minus the number of bits set by the `high' code (*note 611: Constants::.). 612: 613: M should be `Pmode'. 614: 615: `(minus:M X Y)' 616: Like `plus' but represents subtraction. 617: 618: `(compare:M X Y)' 619: Represents the result of subtracting Y from X for purposes of 620: comparison. The result is computed without overflow, as if with 621: infinite precision. 622: 623: Of course, machines can't really subtract with infinite precision. 624: However, they can pretend to do so when only the sign of the 625: result will be used, which is the case when the result is stored 626: in the condition code. And that is the only way this kind of 627: expression may validly be used: as a value to be stored in the 628: condition codes. 629: 630: The mode M is not related to the modes of X and Y, but instead is 631: the mode of the condition code value. If `(cc0)' is used, it is 632: `VOIDmode'. Otherwise it is some mode in class `MODE_CC', often 633: `CCmode'. *Note Condition Code::. 634: 635: Normally, X and Y must have the same mode. Otherwise, `compare' 636: is valid only if the mode of X is in class `MODE_INT' and Y is a 637: `const_int' or `const_double' with mode `VOIDmode'. The mode of X 638: determines what mode the comparison is to be done in; thus it must 639: not be `VOIDmode'. 640: 641: If one of the operands is a constant, it should be placed in the 642: second operand and the comparison code adjusted as appropriate. 643: 644: A `compare' specifying two `VOIDmode' constants is not valid since 645: there is no way to know in what mode the comparison is to be 646: performed; the comparison must either be folded during the 647: compilation or the first operand must be loaded into a register 648: while its mode is still known. 649: 650: `(neg:M X)' 651: Represents the negation (subtraction from zero) of the value 652: represented by X, carried out in mode M. 653: 654: `(mult:M X Y)' 655: Represents the signed product of the values represented by X and Y 656: carried out in machine mode M. 657: 658: Some machines support a multiplication that generates a product 659: wider than the operands. Write the pattern for this as 660: 661: (mult:M (sign_extend:M X) (sign_extend:M Y)) 662: 663: where M is wider than the modes of X and Y, which need not be the 664: same. 665: 666: Write patterns for unsigned widening multiplication similarly using 667: `zero_extend'. 668: 669: `(div:M X Y)' 670: Represents the quotient in signed division of X by Y, carried out 671: in machine mode M. If M is a floating point mode, it represents 672: the exact quotient; otherwise, the integerized quotient. 673: 674: Some machines have division instructions in which the operands and 675: quotient widths are not all the same; you should represent such 676: instructions using `truncate' and `sign_extend' as in, 677: 678: (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 679: 680: `(udiv:M X Y)' 681: Like `div' but represents unsigned division. 682: 683: `(mod:M X Y)' 684: `(umod:M X Y)' 685: Like `div' and `udiv' but represent the remainder instead of the 686: quotient. 687: 688: `(smin:M X Y)' 689: `(smax:M X Y)' 690: Represents the smaller (for `smin') or larger (for `smax') of X 691: and Y, interpreted as signed integers in mode M. 692: 693: `(umin:M X Y)' 694: `(umax:M X Y)' 695: Like `smin' and `smax', but the values are interpreted as unsigned 696: integers. 697: 698: `(not:M X)' 699: Represents the bitwise complement of the value represented by X, 700: carried out in mode M, which must be a fixed-point machine mode. 701: 702: `(and:M X Y)' 703: Represents the bitwise logical-and of the values represented by X 704: and Y, carried out in machine mode M, which must be a fixed-point 705: machine mode. 706: 707: `(ior:M X Y)' 708: Represents the bitwise inclusive-or of the values represented by X 709: and Y, carried out in machine mode M, which must be a fixed-point 710: mode. 711: 712: `(xor:M X Y)' 713: Represents the bitwise exclusive-or of the values represented by X 714: and Y, carried out in machine mode M, which must be a fixed-point 715: mode. 716: 717: `(ashift:M X C)' 718: Represents the result of arithmetically shifting X left by C 719: places. X have mode M, a fixed-point machine mode. C be a 720: fixed-point mode or be a constant with mode `VOIDmode'; which mode 721: is determined by the mode called for in the machine description 722: entry for the left-shift instruction. For example, on the Vax, 723: the mode of C is `QImode' regardless of M. 724: 725: `(lshiftrt:M X C)' 726: `(ashiftrt:M X C)' 727: Like `ashift' but for right shift. Unlike the case for left shift, 728: these two operations are distinct. 729: 730: `(rotate:M X C)' 731: `(rotatert:M X C)' 732: Similar but represent left and right rotate. If C is a constant, 733: use `rotate'. 734: 735: `(abs:M X)' 736: Represents the absolute value of X, computed in mode M. 737: 738: `(sqrt:M X)' 739: Represents the square root of X, computed in mode M. Most often M 740: will be a floating point mode. 741: 742: `(ffs:M X)' 743: Represents one plus the index of the least significant 1-bit in X, 744: represented as an integer of mode M. (The value is zero if X is 745: zero.) The mode of X need not be M; depending on the target 746: machine, various mode combinations may be valid. 1.1.1.6 root 747: 1.1.1.7 root 748: 1.1.1.8 root 749: File: gcc.info, Node: Comparisons, Next: Bit Fields, Prev: Arithmetic, Up: RTL 1.1.1.6 root 750: 1.1.1.8 root 751: Comparison Operations 752: ===================== 1.1.1.6 root 753: 1.1.1.8 root 754: Comparison operators test a relation on two operands and are 755: considered to represent a machine-dependent nonzero value described by, 756: but not necessarily equal to, `STORE_FLAG_VALUE' (*note Misc::.) if the 757: relation holds, or zero if it does not. The mode of the comparison 758: operation is independent of the mode of the data being compared. If 759: the comparison operation is being tested (e.g., the first operand of an 760: `if_then_else'), the mode must be `VOIDmode'. If the comparison 761: operation is producing data to be stored in some variable, the mode 762: must be in class `MODE_INT'. All comparison operations producing data 763: must use the same mode, which is machine-specific. 764: 765: There are two ways that comparison operations may be used. The 766: comparison operators may be used to compare the condition codes `(cc0)' 767: against zero, as in `(eq (cc0) (const_int 0))'. Such a construct 768: actually refers to the result of the preceding instruction in which the 769: condition codes were set. The instructing setting the condition code 770: must be adjacent to the instruction using the condition code; only 771: `note' insns may separate them. 772: 773: Alternatively, a comparison operation may directly compare two data 774: objects. The mode of the comparison is determined by the operands; they 775: must both be valid for a common machine mode. A comparison with both 776: operands constant would be invalid as the machine mode could not be 777: deduced from it, but such a comparison should never exist in RTL due to 778: constant folding. 779: 780: In the example above, if `(cc0)' were last set to `(compare X Y)', 781: the comparison operation is identical to `(eq X Y)'. Usually only one 782: style of comparisons is supported on a particular machine, but the 783: combine pass will try to merge the operations to produce the `eq' shown 784: in case it exists in the context of the particular insn involved. 785: 786: Inequality comparisons come in two flavors, signed and unsigned. 787: Thus, there are distinct expression codes `gt' and `gtu' for signed and 788: unsigned greater-than. These can produce different results for the same 789: pair of integer values: for example, 1 is signed greater-than -1 but not 790: unsigned greater-than, because -1 when regarded as unsigned is actually 791: `0xffffffff' which is greater than 1. 792: 793: The signed comparisons are also used for floating point values. 794: Floating point comparisons are distinguished by the machine modes of 795: the operands. 796: 797: `(eq:M X Y)' 798: 1 if the values represented by X and Y are equal, otherwise 0. 799: 800: `(ne:M X Y)' 801: 1 if the values represented by X and Y are not equal, otherwise 0. 802: 803: `(gt:M X Y)' 804: 1 if the X is greater than Y. If they are fixed-point, the 805: comparison is done in a signed sense. 806: 807: `(gtu:M X Y)' 808: Like `gt' but does unsigned comparison, on fixed-point numbers 809: only. 810: 811: `(lt:M X Y)' 812: `(ltu:M X Y)' 813: Like `gt' and `gtu' but test for "less than". 814: 815: `(ge:M X Y)' 816: `(geu:M X Y)' 817: Like `gt' and `gtu' but test for "greater than or equal". 818: 819: `(le:M X Y)' 820: `(leu:M X Y)' 821: Like `gt' and `gtu' but test for "less than or equal". 822: 823: `(if_then_else COND THEN ELSE)' 824: This is not a comparison operation but is listed here because it is 825: always used in conjunction with a comparison operation. To be 826: precise, COND is a comparison expression. This expression 827: represents a choice, according to COND, between the value 828: represented by THEN and the one represented by ELSE. 829: 830: On most machines, `if_then_else' expressions are valid only to 831: express conditional jumps. 832: 833: `(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 834: Similar to `if_then_else', but more general. Each of TEST1, 835: TEST2, ... is performed in turn. The result of this expression is 836: the VALUE corresponding to the first non-zero test, or DEFAULT if 837: none of the tests are non-zero expressions. 1.1.1.6 root 838: 1.1.1.8 root 839: This is currently not valid for instruction patterns and is 840: supported only for insn attributes. *Note Insn Attributes::. 1.1.1.6 root 841: 1.1.1.7 root 842: 1.1.1.8 root 843: File: gcc.info, Node: Bit Fields, Next: Conversions, Prev: Comparisons, Up: RTL 844: 845: Bit Fields 846: ========== 1.1.1.6 root 847: 1.1.1.8 root 848: Special expression codes exist to represent bitfield instructions. 849: These types of expressions are lvalues in RTL; they may appear on the 850: left side of an assignment, indicating insertion of a value into the 851: specified bit field. 852: 853: `(sign_extract:M LOC SIZE POS)' 854: This represents a reference to a sign-extended bit field contained 855: or starting in LOC (a memory or register reference). The bit field 856: is SIZE bits wide and starts at bit POS. The compilation option 857: `BITS_BIG_ENDIAN' says which end of the memory unit POS counts 858: from. 859: 860: If LOC is in memory, its mode must be a single-byte integer mode. 861: If LOC is in a register, the mode to use is specified by the 862: operand of the `insv' or `extv' pattern (*note Standard Names::.) 863: and is usually a full-word integer mode. 864: 865: The mode of POS is machine-specific and is also specified in the 866: `insv' or `extv' pattern. 867: 868: The mode M is the same as the mode that would be used for LOC if 869: it were a register. 870: 871: `(zero_extract:M LOC SIZE POS)' 872: Like `sign_extract' but refers to an unsigned or zero-extended bit 873: field. The same sequence of bits are extracted, but they are 874: filled to an entire word with zeros instead of by sign-extension. 1.1.1.6 root 875: 1.1.1.8 root 876: 877: File: gcc.info, Node: Conversions, Next: RTL Declarations, Prev: Bit Fields, Up: RTL 1.1.1.6 root 878: 1.1.1.8 root 879: Conversions 880: =========== 1.1.1.6 root 881: 1.1.1.8 root 882: All conversions between machine modes must be represented by 883: explicit conversion operations. For example, an expression which is 884: the sum of a byte and a full word cannot be written as `(plus:SI 885: (reg:QI 34) (reg:SI 80))' because the `plus' operation requires two 886: operands of the same machine mode. Therefore, the byte-sized operand 887: is enclosed in a conversion operation, as in 888: 889: (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 890: 891: The conversion operation is not a mere placeholder, because there 892: may be more than one way of converting from a given starting mode to 893: the desired final mode. The conversion operation code says how to do 894: it. 895: 896: For all conversion operations, X must not be `VOIDmode' because the 897: mode in which to do the conversion would not be known. The conversion 898: must either be done at compile-time or X must be placed into a register. 899: 900: `(sign_extend:M X)' 901: Represents the result of sign-extending the value X to machine 902: mode M. M must be a fixed-point mode and X a fixed-point value of 903: a mode narrower than M. 904: 905: `(zero_extend:M X)' 906: Represents the result of zero-extending the value X to machine 907: mode M. M must be a fixed-point mode and X a fixed-point value of 908: a mode narrower than M. 909: 910: `(float_extend:M X)' 911: Represents the result of extending the value X to machine mode M. 1.1.1.9 ! root 912: M must be a floating point mode and X a floating point value of a 1.1.1.8 root 913: mode narrower than M. 914: 915: `(truncate:M X)' 916: Represents the result of truncating the value X to machine mode M. 917: M must be a fixed-point mode and X a fixed-point value of a mode 918: wider than M. 919: 920: `(float_truncate:M X)' 921: Represents the result of truncating the value X to machine mode M. 922: M must be a floating point mode and X a floating point value of a 923: mode wider than M. 924: 925: `(float:M X)' 926: Represents the result of converting fixed point value X, regarded 927: as signed, to floating point mode M. 928: 929: `(unsigned_float:M X)' 930: Represents the result of converting fixed point value X, regarded 931: as unsigned, to floating point mode M. 932: 933: `(fix:M X)' 934: When M is a fixed point mode, represents the result of converting 935: floating point value X to mode M, regarded as signed. How 936: rounding is done is not specified, so this operation may be used 937: validly in compiling C code only for integer-valued operands. 938: 939: `(unsigned_fix:M X)' 940: Represents the result of converting floating point value X to 941: fixed point mode M, regarded as unsigned. How rounding is done is 942: not specified. 943: 944: `(fix:M X)' 945: When M is a floating point mode, represents the result of 946: converting floating point value X (valid for mode M) to an 947: integer, still represented in floating point mode M, by rounding 948: towards zero. 1.1.1.6 root 949: 1.1.1.7 root 950: 1.1.1.8 root 951: File: gcc.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 1.1.1.6 root 952: 1.1.1.8 root 953: Declarations 1.1.1.7 root 954: ============ 1.1.1.6 root 955: 1.1.1.8 root 956: Declaration expression codes do not represent arithmetic operations 957: but rather state assertions about their operands. 1.1.1.7 root 958: 1.1.1.8 root 959: `(strict_low_part (subreg:M (reg:N R) 0))' 960: This expression code is used in only one context: as the 961: destination operand of a `set' expression. In addition, the 962: operand of this expression must be a non-paradoxical `subreg' 1.1.1.7 root 963: expression. 1.1.1.6 root 964: 1.1.1.8 root 965: The presence of `strict_low_part' says that the part of the 966: register which is meaningful in mode N, but is not part of mode M, 967: is not to be altered. Normally, an assignment to such a subreg is 968: allowed to have undefined effects on the rest of the register when 969: M is less than a word. 1.1 root 970:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.