|
|
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.1.4 root 31: 32: 1.1.1.8 root 33: File: gcc.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 1.1.1.4 root 34: 1.1.1.8 root 35: RTL Template 36: ============ 1.1.1.5 root 37: 1.1.1.8 root 38: The RTL template is used to define which insns match the particular 39: pattern and how to find their operands. For named patterns, the RTL 40: template also says how to construct an insn from specified operands. 41: 42: Construction involves substituting specified operands into a copy of 43: the template. Matching involves determining the values that serve as 44: the operands in the insn being matched. Both of these activities are 45: controlled by special expression types that direct matching and 46: substitution of the operands. 47: 48: `(match_operand:M N PREDICATE CONSTRAINT)' 49: This expression is a placeholder for operand number N of the insn. 50: When constructing an insn, operand number N will be substituted 51: at this point. When matching an insn, whatever appears at this 52: position in the insn will be taken as operand number N; but it 53: must satisfy PREDICATE or this instruction pattern will not match 54: at all. 55: 56: Operand numbers must be chosen consecutively counting from zero in 57: each instruction pattern. There may be only one `match_operand' 58: expression in the pattern for each operand number. Usually 59: operands are numbered in the order of appearance in `match_operand' 60: expressions. 61: 62: PREDICATE is a string that is the name of a C function that 63: accepts two arguments, an expression and a machine mode. During 64: matching, the function will be called with the putative operand as 65: the expression and M as the mode argument (if M is not specified, 66: `VOIDmode' will be used, which normally causes PREDICATE to accept 67: any mode). If it returns zero, this instruction pattern fails to 68: match. PREDICATE may be an empty string; then it means no test is 69: to be done on the operand, so anything which occurs in this 70: position is valid. 71: 72: Most of the time, PREDICATE will reject modes other than M--but 73: not always. For example, the predicate `address_operand' uses M 74: as the mode of memory ref that the address should be valid for. 75: Many predicates accept `const_int' nodes even though their mode is 76: `VOIDmode'. 77: 78: CONSTRAINT controls reloading and the choice of the best register 79: class to use for a value, as explained later (*note 80: Constraints::.). 81: 82: People are often unclear on the difference between the constraint 83: and the predicate. The predicate helps decide whether a given 84: insn matches the pattern. The constraint plays no role in this 85: decision; instead, it controls various decisions in the case of an 86: insn which does match. 87: 88: On CISC machines, the most common PREDICATE is 89: `"general_operand"'. This function checks that the putative 90: operand is either a constant, a register or a memory reference, 91: and that it is valid for mode M. 92: 93: For an operand that must be a register, PREDICATE should be 94: `"register_operand"'. Using `"general_operand"' would be valid, 95: since the reload pass would copy any non-register operands through 96: registers, but this would make GNU CC do extra work, it would 97: prevent invariant operands (such as constant) from being removed 98: from loops, and it would prevent the register allocator from doing 99: the best possible job. On RISC machines, it is usually most 100: efficient to allow PREDICATE to accept only objects that the 101: constraints allow. 102: 103: For an operand that must be a constant, you must be sure to either 104: use `"immediate_operand"' for PREDICATE, or make the instruction 105: pattern's extra condition require a constant, or both. You cannot 106: expect the constraints to do this work! If the constraints allow 107: only constants, but the predicate allows something else, the 108: compiler will crash when that case arises. 109: 110: `(match_scratch:M N CONSTRAINT)' 111: This expression is also a placeholder for operand number N and 112: indicates that operand must be a `scratch' or `reg' expression. 113: 114: When matching patterns, this is equivalent to 115: 116: (match_operand:M N "scratch_operand" PRED) 117: 118: but, when generating RTL, it produces a (`scratch':M) expression. 119: 120: If the last few expressions in a `parallel' are `clobber' 121: expressions whose operands are either a hard register or 122: `match_scratch', the combiner can add or delete them when 123: necessary. *Note Side Effects::. 124: 125: `(match_dup N)' 126: This expression is also a placeholder for operand number N. It is 127: used when the operand needs to appear more than once in the insn. 128: 129: In construction, `match_dup' acts just like `match_operand': the 130: operand is substituted into the insn being constructed. But in 131: matching, `match_dup' behaves differently. It assumes that operand 132: number N has already been determined by a `match_operand' 133: appearing earlier in the recognition template, and it matches only 134: an identical-looking expression. 1.1.1.7 root 135: 1.1.1.8 root 136: `(match_operator:M N PREDICATE [OPERANDS...])' 137: This pattern is a kind of placeholder for a variable RTL expression 138: code. 1.1.1.7 root 139: 1.1.1.8 root 140: When constructing an insn, it stands for an RTL expression whose 141: expression code is taken from that of operand N, and whose 142: operands are constructed from the patterns OPERANDS. 143: 144: When matching an expression, it matches an expression if the 145: function PREDICATE returns nonzero on that expression *and* the 146: patterns OPERANDS match the operands of the expression. 147: 148: Suppose that the function `commutative_operator' is defined as 149: follows, to match any expression whose operator is one of the 150: commutative arithmetic operators of RTL and whose mode is MODE: 151: 152: int 153: commutative_operator (x, mode) 154: rtx x; 155: enum machine_mode mode; 156: { 157: enum rtx_code code = GET_CODE (x); 158: if (GET_MODE (x) != mode) 159: return 0; 160: return (GET_RTX_CLASS (code) == 'c' 161: || code == EQ || code == NE); 162: } 163: 164: Then the following pattern will match any RTL expression consisting 165: of a commutative operator applied to two general operands: 166: 167: (match_operator:SI 3 "commutative_operator" 168: [(match_operand:SI 1 "general_operand" "g") 169: (match_operand:SI 2 "general_operand" "g")]) 170: 171: Here the vector `[OPERANDS...]' contains two patterns because the 172: expressions to be matched all contain two operands. 173: 174: When this pattern does match, the two operands of the commutative 175: operator are recorded as operands 1 and 2 of the insn. (This is 176: done by the two instances of `match_operand'.) Operand 3 of the 177: insn will be the entire commutative expression: use `GET_CODE 178: (operands[3])' to see which commutative operator was used. 179: 180: The machine mode M of `match_operator' works like that of 181: `match_operand': it is passed as the second argument to the 182: predicate function, and that function is solely responsible for 183: deciding whether the expression to be matched "has" that mode. 184: 185: When constructing an insn, argument 3 of the gen-function will 186: specify the operation (i.e. the expression code) for the 187: expression to be made. It should be an RTL expression, whose 188: expression code is copied into a new expression whose operands are 189: arguments 1 and 2 of the gen-function. The subexpressions of 190: argument 3 are not used; only its expression code matters. 191: 192: When `match_operator' is used in a pattern for matching an insn, 193: it usually best if the operand number of the `match_operator' is 194: higher than that of the actual operands of the insn. This improves 195: register allocation because the register allocator often looks at 196: operands 1 and 2 of insns to see if it can do register tying. 197: 198: There is no way to specify constraints in `match_operator'. The 199: operand of the insn which corresponds to the `match_operator' 200: never has any constraints because it is never reloaded as a whole. 201: However, if parts of its OPERANDS are matched by `match_operand' 202: patterns, those parts may have constraints of their own. 203: 204: `(match_op_dup:M N[OPERANDS...])' 205: Like `match_dup', except that it applies to operators instead of 206: operands. When constructing an insn, operand number N will be 207: substituted at this point. But in matching, `match_op_dup' behaves 208: differently. It assumes that operand number N has already been 209: determined by a `match_operator' appearing earlier in the 210: recognition template, and it matches only an identical-looking 211: expression. 212: 213: `(match_parallel N PREDICATE [SUBPAT...])' 214: This pattern is a placeholder for an insn that consists of a 215: `parallel' expression with a variable number of elements. This 216: expression should only appear at the top level of an insn pattern. 217: 218: When constructing an insn, operand number N will be substituted at 219: this point. When matching an insn, it matches if the body of the 220: insn is a `parallel' expression with at least as many elements as 221: the vector of SUBPAT expressions in the `match_parallel', if each 222: SUBPAT matches the corresponding element of the `parallel', *and* 223: the function PREDICATE returns nonzero on the `parallel' that is 224: the body of the insn. It is the responsibility of the predicate 225: to validate elements of the `parallel' beyond those listed in the 226: `match_parallel'. 227: 228: A typical use of `match_parallel' is to match load and store 229: multiple expressions, which can contain a variable number of 230: elements in a `parallel'. For example, 1.1.1.7 root 231: 1.1.1.8 root 232: (define_insn "" 233: [(match_parallel 0 "load_multiple_operation" 234: [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 235: (match_operand:SI 2 "memory_operand" "m")) 236: (use (reg:SI 179)) 237: (clobber (reg:SI 179))])] 238: "" 239: "loadm 0,0,%1,%2") 240: 241: This example comes from `a29k.md'. The function 242: `load_multiple_operations' is defined in `a29k.c' and checks that 243: subsequent elements in the `parallel' are the same as the `set' in 244: the pattern, except that they are referencing subsequent registers 245: and memory locations. 246: 247: An insn that matches this pattern might look like: 248: 249: (parallel 250: [(set (reg:SI 20) (mem:SI (reg:SI 100))) 251: (use (reg:SI 179)) 252: (clobber (reg:SI 179)) 253: (set (reg:SI 21) 254: (mem:SI (plus:SI (reg:SI 100) 255: (const_int 4)))) 256: (set (reg:SI 22) 257: (mem:SI (plus:SI (reg:SI 100) 258: (const_int 8))))]) 259: 260: `(match_par_dup N [SUBPAT...])' 261: Like `match_op_dup', but for `match_parallel' instead of 262: `match_operator'. 263: 264: `(address (match_operand:M N "address_operand" ""))' 265: This complex of expressions is a placeholder for an operand number 266: N in a "load address" instruction: an operand which specifies a 267: memory location in the usual way, but for which the actual operand 268: value used is the address of the location, not the contents of the 269: location. 270: 271: `address' expressions never appear in RTL code, only in machine 272: descriptions. And they are used only in machine descriptions that 273: do not use the operand constraint feature. When operand 274: constraints are in use, the letter `p' in the constraint serves 275: this purpose. 276: 277: M is the machine mode of the *memory location being addressed*, 278: not the machine mode of the address itself. That mode is always 279: the same on a given target machine (it is `Pmode', which normally 280: is `SImode'), so there is no point in mentioning it; thus, no 281: machine mode is written in the `address' expression. If some day 282: support is added for machines in which addresses of different 283: kinds of objects appear differently or are used differently (such 284: as the PDP-10), different formats would perhaps need different 285: machine modes and these modes might be written in the `address' 286: expression. 1.1.1.7 root 287: 1.1.1.8 root 288: 289: File: gcc.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 1.1.1.7 root 290: 1.1.1.8 root 291: Output Templates and Operand Substitution 292: ========================================= 1.1.1.7 root 293: 1.1.1.8 root 294: The "output template" is a string which specifies how to output the 295: assembler code for an instruction pattern. Most of the template is a 296: fixed string which is output literally. The character `%' is used to 297: specify where to substitute an operand; it can also be used to identify 298: places where different variants of the assembler require different 299: syntax. 300: 301: In the simplest case, a `%' followed by a digit N says to output 302: operand N at that point in the string. 303: 304: `%' followed by a letter and a digit says to output an operand in an 305: alternate fashion. Four letters have standard, built-in meanings 306: described below. The machine description macro `PRINT_OPERAND' can 307: define additional letters with nonstandard meanings. 308: 309: `%cDIGIT' can be used to substitute an operand that is a constant 310: value without the syntax that normally indicates an immediate operand. 311: 312: `%nDIGIT' is like `%cDIGIT' except that the value of the constant is 313: negated before printing. 314: 315: `%aDIGIT' can be used to substitute an operand as if it were a 316: memory reference, with the actual operand treated as the address. This 317: may be useful when outputting a "load address" instruction, because 318: often the assembler syntax for such an instruction requires you to 319: write the operand as if it were a memory reference. 320: 321: `%lDIGIT' is used to substitute a `label_ref' into a jump 322: instruction. 323: 324: `%=' outputs a number which is unique to each instruction in the 325: entire compilation. This is useful for making local labels to be 326: referred to more than once in a single template that generates multiple 327: assembler instructions. 328: 329: `%' followed by a punctuation character specifies a substitution that 330: does not use an operand. Only one case is standard: `%%' outputs a `%' 331: into the assembler code. Other nonstandard cases can be defined in the 332: `PRINT_OPERAND' macro. You must also define which punctuation 333: characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro. 334: 335: The template may generate multiple assembler instructions. Write 336: the text for the instructions, with `\;' between them. 337: 338: When the RTL contains two operands which are required by constraint 339: to match each other, the output template must refer only to the 340: lower-numbered operand. Matching operands are not always identical, 341: and the rest of the compiler arranges to put the proper RTL expression 342: for printing into the lower-numbered operand. 343: 344: One use of nonstandard letters or punctuation following `%' is to 345: distinguish between different assembler languages for the same machine; 346: for example, Motorola syntax versus MIT syntax for the 68000. Motorola 347: syntax requires periods in most opcode names, while MIT syntax does 348: not. For example, the opcode `movel' in MIT syntax is `move.l' in 349: Motorola syntax. The same file of patterns is used for both kinds of 350: output syntax, but the character sequence `%.' is used in each place 351: where Motorola syntax wants a period. The `PRINT_OPERAND' macro for 352: Motorola syntax defines the sequence to output a period; the macro for 353: MIT syntax defines it to do nothing. 354: 355: As a special case, a template consisting of the single character `#' 356: instructs the compiler to first split the insn, and then output the 357: resulting instructions separately. This helps eliminate redundancy in 358: the output templates. If you have a `define_insn' that needs to emit 359: multiple assembler instructions, and there is an matching `define_split' 360: already defined, then you can simply use `#' as the output template 361: instead of writing an output template that emits the multiple assembler 362: instructions. 363: 364: If `ASSEMBLER_DIALECT' is defined, you can use 365: `{option0|option1|option2}' constructs in the templates. These 366: describe multiple variants of assembler language syntax. *Note 367: Instruction Output::. 1.1.1.7 root 368: 1.1.1.8 root 369: 370: File: gcc.info, Node: Output Statement, Next: Constraints, Prev: Output Template, Up: Machine Desc 1.1.1.7 root 371: 1.1.1.8 root 372: C Statements for Assembler Output 373: ================================= 1.1.1.7 root 374: 1.1.1.8 root 375: Often a single fixed template string cannot produce correct and 376: efficient assembler code for all the cases that are recognized by a 377: single instruction pattern. For example, the opcodes may depend on the 378: kinds of operands; or some unfortunate combinations of operands may 379: require extra machine instructions. 380: 381: If the output control string starts with a `@', then it is actually 382: a series of templates, each on a separate line. (Blank lines and 383: leading spaces and tabs are ignored.) The templates correspond to the 384: pattern's constraint alternatives (*note Multi-Alternative::.). For 385: example, if a target machine has a two-address add instruction `addr' 386: to add into a register and another `addm' to add a register to memory, 387: you might write this pattern: 388: 389: (define_insn "addsi3" 390: [(set (match_operand:SI 0 "general_operand" "=r,m") 391: (plus:SI (match_operand:SI 1 "general_operand" "0,0") 392: (match_operand:SI 2 "general_operand" "g,r")))] 393: "" 394: "@ 395: addr %2,%0 396: addm %2,%0") 397: 398: If the output control string starts with a `*', then it is not an 399: output template but rather a piece of C program that should compute a 400: template. It should execute a `return' statement to return the 401: template-string you want. Most such templates use C string literals, 402: which require doublequote characters to delimit them. To include these 403: doublequote characters in the string, prefix each one with `\'. 404: 405: The operands may be found in the array `operands', whose C data type 406: is `rtx []'. 407: 408: It is very common to select different ways of generating assembler 409: code based on whether an immediate operand is within a certain range. 410: Be careful when doing this, because the result of `INTVAL' is an 411: integer on the host machine. If the host machine has more bits in an 412: `int' than the target machine has in the mode in which the constant 413: will be used, then some of the bits you get from `INTVAL' will be 414: superfluous. For proper results, you must carefully disregard the 415: values of those bits. 416: 417: It is possible to output an assembler instruction and then go on to 418: output or compute more of them, using the subroutine `output_asm_insn'. 419: This receives two arguments: a template-string and a vector of 420: operands. The vector may be `operands', or it may be another array of 421: `rtx' that you declare locally and initialize yourself. 422: 423: When an insn pattern has multiple alternatives in its constraints, 424: often the appearance of the assembler code is determined mostly by 425: which alternative was matched. When this is so, the C code can test 426: the variable `which_alternative', which is the ordinal number of the 427: alternative that was actually satisfied (0 for the first, 1 for the 428: second alternative, etc.). 429: 430: For example, suppose there are two opcodes for storing zero, `clrreg' 431: for registers and `clrmem' for memory locations. Here is how a pattern 432: could use `which_alternative' to choose between them: 433: 434: (define_insn "" 435: [(set (match_operand:SI 0 "general_operand" "=r,m") 436: (const_int 0))] 437: "" 438: "* 439: return (which_alternative == 0 440: ? \"clrreg %0\" : \"clrmem %0\"); 441: ") 442: 443: The example above, where the assembler code to generate was *solely* 444: determined by the alternative, could also have been specified as 445: follows, having the output control string start with a `@': 446: 447: (define_insn "" 448: [(set (match_operand:SI 0 "general_operand" "=r,m") 449: (const_int 0))] 450: "" 451: "@ 452: clrreg %0 453: clrmem %0") 1.1.1.5 root 454: 1.1.1.6 root 455: 1.1.1.8 root 456: File: gcc.info, Node: Constraints, Next: Standard Names, Prev: Output Statement, Up: Machine Desc 1.1.1.4 root 457: 1.1.1.8 root 458: Operand Constraints 459: =================== 1.1.1.4 root 460: 1.1.1.8 root 461: Each `match_operand' in an instruction pattern can specify a 462: constraint for the type of operands allowed. Constraints can say 463: whether an operand may be in a register, and which kinds of register; 464: whether the operand can be a memory reference, and which kinds of 465: address; whether the operand may be an immediate constant, and which 466: possible values it may have. Constraints can also require two operands 467: to match. 468: 469: * Menu: 470: 471: * Simple Constraints:: Basic use of constraints. 472: * Multi-Alternative:: When an insn has two alternative constraint-patterns. 473: * Class Preferences:: Constraints guide which hard register to put things in. 474: * Modifiers:: More precise control over effects of constraints. 475: * Machine Constraints:: Existing constraints for some particular machines. 476: * No Constraints:: Describing a clean machine without constraints. 1.1.1.4 root 477: 478: 1.1.1.8 root 479: File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 1.1.1.5 root 480: 1.1.1.8 root 481: Simple Constraints 482: ------------------ 1.1.1.4 root 483: 1.1.1.8 root 484: The simplest kind of constraint is a string full of letters, each of 485: which describes one kind of operand that is permitted. Here are the 486: letters that are allowed: 487: 488: `m' 489: A memory operand is allowed, with any kind of address that the 490: machine supports in general. 491: 492: `o' 493: A memory operand is allowed, but only if the address is 494: "offsettable". This means that adding a small integer (actually, 495: the width in bytes of the operand, as determined by its machine 496: mode) may be added to the address and the result is also a valid 497: memory address. 498: 499: For example, an address which is constant is offsettable; so is an 500: address that is the sum of a register and a constant (as long as a 501: slightly larger constant is also within the range of 502: address-offsets supported by the machine); but an autoincrement or 503: autodecrement address is not offsettable. More complicated 504: indirect/indexed addresses may or may not be offsettable depending 505: on the other addressing modes that the machine supports. 506: 507: Note that in an output operand which can be matched by another 508: operand, the constraint letter `o' is valid only when accompanied 509: by both `<' (if the target machine has predecrement addressing) 510: and `>' (if the target machine has preincrement addressing). 511: 512: `V' 513: A memory operand that is not offsettable. In other words, 514: anything that would fit the `m' constraint but not the `o' 515: constraint. 516: 517: `<' 518: A memory operand with autodecrement addressing (either 519: predecrement or postdecrement) is allowed. 520: 521: `>' 522: A memory operand with autoincrement addressing (either 523: preincrement or postincrement) is allowed. 524: 525: `r' 526: A register operand is allowed provided that it is in a general 527: register. 528: 529: `d', `a', `f', ... 530: Other letters can be defined in machine-dependent fashion to stand 531: for particular classes of registers. `d', `a' and `f' are defined 532: on the 68000/68020 to stand for data, address and floating point 533: registers. 534: 535: `i' 536: An immediate integer operand (one with constant value) is allowed. 537: This includes symbolic constants whose values will be known only at 538: assembly time. 539: 540: `n' 541: An immediate integer operand with a known numeric value is allowed. 542: Many systems cannot support assembly-time constants for operands 543: less than a word wide. Constraints for these operands should use 544: `n' rather than `i'. 545: 546: `I', `J', `K', ... `P' 547: Other letters in the range `I' through `P' may be defined in a 548: machine-dependent fashion to permit immediate integer operands with 549: explicit integer values in specified ranges. For example, on the 550: 68000, `I' is defined to stand for the range of values 1 to 8. 551: This is the range permitted as a shift count in the shift 552: instructions. 553: 554: `E' 555: An immediate floating operand (expression code `const_double') is 556: allowed, but only if the target floating point format is the same 557: as that of the host machine (on which the compiler is running). 558: 559: `F' 560: An immediate floating operand (expression code `const_double') is 561: allowed. 562: 563: `G', `H' 564: `G' and `H' may be defined in a machine-dependent fashion to 565: permit immediate floating operands in particular ranges of values. 566: 567: `s' 568: An immediate integer operand whose value is not an explicit 569: integer is allowed. 570: 571: This might appear strange; if an insn allows a constant operand 572: with a value not known at compile time, it certainly must allow 573: any known value. So why use `s' instead of `i'? Sometimes it 574: allows better code to be generated. 575: 576: For example, on the 68000 in a fullword instruction it is possible 577: to use an immediate operand; but if the immediate value is between 578: -128 and 127, better code results from loading the value into a 579: register and using the register. This is because the load into 580: the register can be done with a `moveq' instruction. We arrange 581: for this to happen by defining the letter `K' to mean "any integer 582: outside the range -128 to 127", and then specifying `Ks' in the 583: operand constraints. 584: 585: `g' 586: Any register, memory or immediate integer operand is allowed, 587: except for registers that are not general registers. 588: 589: `X' 590: Any operand whatsoever is allowed, even if it does not satisfy 591: `general_operand'. This is normally used in the constraint of a 592: `match_scratch' when certain alternatives will not actually 593: require a scratch register. 594: 595: `0', `1', `2', ... `9' 596: An operand that matches the specified operand number is allowed. 597: If a digit is used together with letters within the same 598: alternative, the digit should come last. 599: 600: This is called a "matching constraint" and what it really means is 601: that the assembler has only a single operand that fills two roles 602: considered separate in the RTL insn. For example, an add insn has 603: two input operands and one output operand in the RTL, but on most 604: CISC machines an add instruction really has only two operands, one 605: of them an input-output operand: 606: 607: addl #35,r12 608: 609: Matching constraints are used in these circumstances. More 610: precisely, the two operands that match must include one input-only 611: operand and one output-only operand. Moreover, the digit must be a 612: smaller number than the number of the operand that uses it in the 613: constraint. 614: 615: For operands to match in a particular case usually means that they 616: are identical-looking RTL expressions. But in a few special cases 617: specific kinds of dissimilarity are allowed. For example, `*x' as 618: an input operand will match `*x++' as an output operand. For 619: proper results in such cases, the output template should always 620: use the output-operand's number when printing the operand. 621: 622: `p' 623: An operand that is a valid memory address is allowed. This is for 624: "load address" and "push address" instructions. 625: 626: `p' in the constraint must be accompanied by `address_operand' as 627: the predicate in the `match_operand'. This predicate interprets 628: the mode specified in the `match_operand' as the mode of the memory 629: reference for which the address would be valid. 630: 631: `Q', `R', `S', ... `U' 632: Letters in the range `Q' through `U' may be defined in a 633: machine-dependent fashion to stand for arbitrary operand types. 634: The machine description macro `EXTRA_CONSTRAINT' is passed the 635: operand as its first argument and the constraint letter as its 636: second operand. 637: 638: A typical use for this would be to distinguish certain types of 639: memory references that affect other insn operands. 640: 641: Do not define these constraint letters to accept register 642: references (`reg'); the reload pass does not expect this and would 643: not handle it properly. 644: 645: In order to have valid assembler code, each operand must satisfy its 646: constraint. But a failure to do so does not prevent the pattern from 647: applying to an insn. Instead, it directs the compiler to modify the 648: code so that the constraint will be satisfied. Usually this is done by 649: copying an operand into a register. 650: 651: Contrast, therefore, the two instruction patterns that follow: 1.1.1.4 root 652: 1.1.1.7 root 653: (define_insn "" 1.1.1.8 root 654: [(set (match_operand:SI 0 "general_operand" "=r") 655: (plus:SI (match_dup 0) 656: (match_operand:SI 1 "general_operand" "r")))] 657: "" 1.1.1.7 root 658: "...") 1.1.1.6 root 659: 1.1.1.8 root 660: which has two operands, one of which must appear in two places, and 1.1.1.6 root 661: 1.1.1.8 root 662: (define_insn "" 663: [(set (match_operand:SI 0 "general_operand" "=r") 664: (plus:SI (match_operand:SI 1 "general_operand" "0") 665: (match_operand:SI 2 "general_operand" "r")))] 666: "" 667: "...") 668: 669: which has three operands, two of which are required by a constraint to 670: be identical. If we are considering an insn of the form 671: 672: (insn N PREV NEXT 673: (set (reg:SI 3) 674: (plus:SI (reg:SI 6) (reg:SI 109))) 675: ...) 676: 677: the first pattern would not apply at all, because this insn does not 678: contain two identical subexpressions in the right place. The pattern 679: would say, "That does not look like an add instruction; try other 680: patterns." The second pattern would say, "Yes, that's an add 681: instruction, but there is something wrong with it." It would direct 682: the reload pass of the compiler to generate additional insns to make 683: the constraint true. The results might look like this: 684: 685: (insn N2 PREV N 686: (set (reg:SI 3) (reg:SI 6)) 687: ...) 1.1.1.6 root 688: 1.1.1.8 root 689: (insn N N2 NEXT 690: (set (reg:SI 3) 691: (plus:SI (reg:SI 3) (reg:SI 109))) 692: ...) 1.1.1.6 root 693: 1.1.1.8 root 694: It is up to you to make sure that each operand, in each pattern, has 695: constraints that can handle any RTL expression that could be present for 696: that operand. (When multiple alternatives are in use, each pattern 697: must, for each possible combination of operand expressions, have at 698: least one alternative which can handle that combination of operands.) 699: The constraints don't need to *allow* any possible operand--when this is 700: the case, they do not constrain--but they must at least point the way to 701: reloading any possible operand so that it will fit. 702: 703: * If the constraint accepts whatever operands the predicate permits, 704: there is no problem: reloading is never necessary for this operand. 705: 706: For example, an operand whose constraints permit everything except 707: registers is safe provided its predicate rejects registers. 708: 709: An operand whose predicate accepts only constant values is safe 710: provided its constraints include the letter `i'. If any possible 711: constant value is accepted, then nothing less than `i' will do; if 712: the predicate is more selective, then the constraints may also be 713: more selective. 714: 715: * Any operand expression can be reloaded by copying it into a 716: register. So if an operand's constraints allow some kind of 717: register, it is certain to be safe. It need not permit all 718: classes of registers; the compiler knows how to copy a register 719: into another register of the proper class in order to make an 720: instruction valid. 721: 722: * A nonoffsettable memory reference can be reloaded by copying the 723: address into a register. So if the constraint uses the letter 724: `o', all memory references are taken care of. 725: 726: * A constant operand can be reloaded by allocating space in memory to 727: hold it as preinitialized data. Then the memory reference can be 728: used in place of the constant. So if the constraint uses the 729: letters `o' or `m', constant operands are not a problem. 730: 731: * If the constraint permits a constant and a pseudo register used in 732: an insn was not allocated to a hard register and is equivalent to 733: a constant, the register will be replaced with the constant. If 734: the predicate does not permit a constant and the insn is 735: re-recognized for some reason, the compiler will crash. Thus the 736: predicate must always recognize any objects allowed by the 737: constraint. 738: 739: If the operand's predicate can recognize registers, but the 740: constraint does not permit them, it can make the compiler crash. When 741: this operand happens to be a register, the reload pass will be stymied, 742: because it does not know how to copy a register temporarily into memory. 1.1.1.4 root 743: 744: 1.1.1.8 root 745: File: gcc.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 746: 747: Multiple Alternative Constraints 748: -------------------------------- 1.1.1.4 root 749: 1.1.1.8 root 750: Sometimes a single instruction has multiple alternative sets of 751: possible operands. For example, on the 68000, a logical-or instruction 752: can combine register or an immediate value into memory, or it can 753: combine any kind of operand into a register; but it cannot combine one 754: memory location into another. 755: 756: These constraints are represented as multiple alternatives. An 757: alternative can be described by a series of letters for each operand. 758: The overall constraint for an operand is made from the letters for this 759: operand from the first alternative, a comma, the letters for this 760: operand from the second alternative, a comma, and so on until the last 761: alternative. Here is how it is done for fullword logical-or on the 762: 68000: 763: 764: (define_insn "iorsi3" 765: [(set (match_operand:SI 0 "general_operand" "=m,d") 766: (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 767: (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 768: ...) 1.1.1.6 root 769: 1.1.1.8 root 770: The first alternative has `m' (memory) for operand 0, `0' for 771: operand 1 (meaning it must match operand 0), and `dKs' for operand 2. 772: The second alternative has `d' (data register) for operand 0, `0' for 773: operand 1, and `dmKs' for operand 2. The `=' and `%' in the 774: constraints apply to all the alternatives; their meaning is explained 775: in the next section (*note Class Preferences::.). 776: 777: If all the operands fit any one alternative, the instruction is 778: valid. Otherwise, for each alternative, the compiler counts how many 779: instructions must be added to copy the operands so that that 780: alternative applies. The alternative requiring the least copying is 781: chosen. If two alternatives need the same amount of copying, the one 782: that comes first is chosen. These choices can be altered with the `?' 783: and `!' characters: 784: 785: `?' 786: Disparage slightly the alternative that the `?' appears in, as a 787: choice when no alternative applies exactly. The compiler regards 788: this alternative as one unit more costly for each `?' that appears 789: in it. 790: 791: `!' 792: Disparage severely the alternative that the `!' appears in. This 793: alternative can still be used if it fits without reloading, but if 794: reloading is needed, some other alternative will be used. 795: 796: When an insn pattern has multiple alternatives in its constraints, 797: often the appearance of the assembler code is determined mostly by which 798: alternative was matched. When this is so, the C code for writing the 799: assembler code can use the variable `which_alternative', which is the 800: ordinal number of the alternative that was actually satisfied (0 for 801: the first, 1 for the second alternative, etc.). *Note Output 802: Statement::. 1.1.1.6 root 803: 1.1.1.8 root 804: 805: File: gcc.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 1.1.1.4 root 806: 1.1.1.8 root 807: Register Class Preferences 808: -------------------------- 809: 810: The operand constraints have another function: they enable the 811: compiler to decide which kind of hardware register a pseudo register is 812: best allocated to. The compiler examines the constraints that apply to 813: the insns that use the pseudo register, looking for the 814: machine-dependent letters such as `d' and `a' that specify classes of 815: registers. The pseudo register is put in whichever class gets the most 816: "votes". The constraint letters `g' and `r' also vote: they vote in 817: favor of a general register. The machine description says which 818: registers are considered general. 819: 820: Of course, on some machines all registers are equivalent, and no 821: register classes are defined. Then none of this complexity is relevant. 1.1.1.5 root 822: 823: 1.1.1.8 root 824: File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 1.1.1.5 root 825: 1.1.1.8 root 826: Constraint Modifier Characters 827: ------------------------------ 1.1.1.5 root 828: 1.1.1.8 root 829: Here are constraint modifier characters. 1.1.1.7 root 830: 1.1.1.8 root 831: `=' 832: Means that this operand is write-only for this instruction: the 833: previous value is discarded and replaced by output data. 1.1.1.7 root 834: 1.1.1.8 root 835: `+' 836: Means that this operand is both read and written by the 837: instruction. 1.1.1.7 root 838: 1.1.1.8 root 839: When the compiler fixes up the operands to satisfy the constraints, 840: it needs to know which operands are inputs to the instruction and 841: which are outputs from it. `=' identifies an output; `+' 842: identifies an operand that is both input and output; all other 843: operands are assumed to be input only. 844: 845: `&' 846: Means (in a particular alternative) that this operand is written 847: before the instruction is finished using the input operands. 848: Therefore, this operand may not lie in a register that is used as 849: an input operand or as part of any memory address. 850: 851: `&' applies only to the alternative in which it is written. In 852: constraints with multiple alternatives, sometimes one alternative 853: requires `&' while others do not. See, for example, the `movdf' 854: insn of the 68000. 855: 856: `&' does not obviate the need to write `='. 857: 858: `%' 859: Declares the instruction to be commutative for this operand and the 860: following operand. This means that the compiler may interchange 861: the two operands if that is the cheapest way to make all operands 862: fit the constraints. This is often used in patterns for addition 863: instructions that really have only two operands: the result must 864: go in one of the arguments. Here for example, is how the 68000 865: halfword-add instruction is defined: 866: 867: (define_insn "addhi3" 868: [(set (match_operand:HI 0 "general_operand" "=m,r") 869: (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 870: (match_operand:HI 2 "general_operand" "di,g")))] 871: ...) 872: 873: `#' 874: Says that all following characters, up to the next comma, are to be 875: ignored as a constraint. They are significant only for choosing 876: register preferences. 877: 878: `*' 879: Says that the following character should be ignored when choosing 880: register preferences. `*' has no effect on the meaning of the 881: constraint as a constraint, and no effect on reloading. 882: 883: Here is an example: the 68000 has an instruction to sign-extend a 884: halfword in a data register, and can also sign-extend a value by 885: copying it into an address register. While either kind of 886: register is acceptable, the constraints on an address-register 887: destination are less strict, so it is best if register allocation 888: makes an address register its goal. Therefore, `*' is used so 889: that the `d' constraint letter (for data register) is ignored when 890: computing register preferences. 891: 892: (define_insn "extendhisi2" 893: [(set (match_operand:SI 0 "general_operand" "=*d,a") 894: (sign_extend:SI 895: (match_operand:HI 1 "general_operand" "0,g")))] 896: ...) 1.1.1.5 root 897: 898: 1.1.1.8 root 899: File: gcc.info, Node: Machine Constraints, Next: No Constraints, Prev: Modifiers, Up: Constraints 1.1.1.5 root 900: 1.1.1.8 root 901: Constraints for Particular Machines 902: ----------------------------------- 1.1.1.5 root 903: 1.1.1.8 root 904: Whenever possible, you should use the general-purpose constraint 905: letters in `asm' arguments, since they will convey meaning more readily 906: to people reading your code. Failing that, use the constraint letters 907: that usually have very similar meanings across architectures. The most 908: commonly used constraints are `m' and `r' (for memory and 909: general-purpose registers respectively; *note Simple Constraints::.), 910: and `I', usually the letter indicating the most common 911: immediate-constant format. 1.1.1.5 root 912: 1.1.1.8 root 913: For each machine architecture, the `config/MACHINE.h' file defines 914: additional constraints. These constraints are used by the compiler 915: itself for instruction generation, as well as for `asm' statements; 916: therefore, some of the constraints are not particularly interesting for 917: `asm'. The constraints are defined through these macros: 918: 919: `REG_CLASS_FROM_LETTER' 920: Register class constraints (usually lower case). 921: 922: `CONST_OK_FOR_LETTER_P' 923: Immediate constant constraints, for non-floating point constants of 924: word size or smaller precision (usually upper case). 925: 926: `CONST_DOUBLE_OK_FOR_LETTER_P' 927: Immediate constant constraints, for all floating point constants 928: and for constants of greater than word size precision (usually 929: upper case). 930: 931: `EXTRA_CONSTRAINT' 932: Special cases of registers or memory. This macro is not required, 933: and is only defined for some machines. 934: 935: Inspecting these macro definitions in the compiler source for your 936: machine is the best way to be certain you have the right constraints. 937: However, here is a summary of the machine-dependent constraints 938: available on some particular machines. 939: 940: *ARM family--`arm.h'* 941: `f' 942: Floating-point register 943: 944: `F' 945: One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 946: 4.0, 5.0 or 10.0 947: 948: `G' 949: Floating-point constant that would satisfy the constraint `F' 950: if it were negated 951: 952: `I' 953: Integer that is valid as an immediate operand in a data 954: processing instruction. That is, an integer in the range 0 955: to 255 rotated by a multiple of 2 956: 957: `J' 958: Integer in the range -4095 to 4095 959: 960: `K' 961: Integer that satisfies constraint `I' when inverted (ones 962: complement) 963: 964: `L' 965: Integer that satisfies constraint `I' when negated (twos 966: complement) 967: 968: `M' 969: Integer in the range 0 to 32 970: 971: `Q' 972: A memory reference where the exact address is in a single 973: register (``m'' is preferable for `asm' statements) 974: 975: `R' 976: An item in the constant pool 977: 978: `S' 979: A symbol in the text segment of the current file 980: 981: *AMD 29000 family--`a29k.h'* 982: `l' 983: Local register 0 984: 985: `b' 986: Byte Pointer (`BP') register 987: 988: `q' 989: `Q' register 990: 991: `h' 992: Special purpose register 993: 994: `A' 995: First accumulator register 996: 997: `a' 998: Other accumulator register 999: 1000: `f' 1001: Floating point register 1002: 1003: `I' 1004: Constant greater than 0, less than 0x100 1005: 1006: `J' 1007: Constant greater than 0, less than 0x10000 1008: 1009: `K' 1010: Constant whose high 24 bits are on (1) 1011: 1012: `L' 1013: 16 bit constant whose high 8 bits are on (1) 1014: 1015: `M' 1016: 32 bit constant whose high 16 bits are on (1) 1017: 1018: `N' 1019: 32 bit negative constant that fits in 8 bits 1020: 1021: `O' 1022: The constant 0x80000000 or, on the 29050, any 32 bit constant 1023: whose low 16 bits are 0. 1024: 1025: `P' 1026: 16 bit negative constant that fits in 8 bits 1027: 1028: `G' 1029: `H' 1030: A floating point constant (in `asm' statements, use the 1031: machine independent `E' or `F' instead) 1032: 1033: *IBM RS6000--`rs6000.h'* 1034: `b' 1035: Address base register 1036: 1037: `f' 1038: Floating point register 1039: 1040: `h' 1041: `MQ', `CTR', or `LINK' register 1042: 1043: `q' 1044: `MQ' register 1045: 1046: `c' 1047: `CTR' register 1048: 1049: `l' 1050: `LINK' register 1051: 1052: `x' 1053: `CR' register (condition register) number 0 1054: 1055: `y' 1056: `CR' register (condition register) 1057: 1058: `I' 1059: Signed 16 bit constant 1060: 1061: `J' 1062: Constant whose low 16 bits are 0 1063: 1064: `K' 1065: Constant whose high 16 bits are 0 1066: 1067: `L' 1068: Constant suitable as a mask operand 1069: 1070: `M' 1071: Constant larger than 31 1072: 1073: `N' 1074: Exact power of 2 1075: 1076: `O' 1077: Zero 1078: 1079: `P' 1080: Constant whose negation is a signed 16 bit constant 1081: 1082: `G' 1083: Floating point constant that can be loaded into a register 1084: with one instruction per word 1085: 1086: `Q' 1087: Memory operand that is an offset from a register (`m' is 1088: preferable for `asm' statements) 1089: 1090: *Intel 386--`i386.h'* 1091: `q' 1092: `a', `b', `c', or `d' register 1093: 1094: `A' 1095: `a', or `d' register (for 64-bit ints) 1096: 1097: `f' 1098: Floating point register 1099: 1100: `t' 1101: First (top of stack) floating point register 1102: 1103: `u' 1104: Second floating point register 1105: 1106: `a' 1107: `a' register 1108: 1109: `b' 1110: `b' register 1111: 1112: `c' 1113: `c' register 1114: 1115: `d' 1116: `d' register 1117: 1118: `D' 1119: `di' register 1120: 1121: `S' 1122: `si' register 1123: 1124: `I' 1125: Constant in range 0 to 31 (for 32 bit shifts) 1126: 1127: `J' 1128: Constant in range 0 to 63 (for 64 bit shifts) 1129: 1130: `K' 1131: `0xff' 1132: 1133: `L' 1134: `0xffff' 1135: 1136: `M' 1137: 0, 1, 2, or 3 (shifts for `lea' instruction) 1138: 1139: `N' 1140: Constant in range 0 to 255 (for `out' instruction) 1141: 1142: `G' 1143: Standard 80387 floating point constant 1144: 1145: *Intel 960--`i960.h'* 1146: `f' 1147: Floating point register (`fp0' to `fp3') 1148: 1149: `l' 1150: Local register (`r0' to `r15') 1151: 1152: `b' 1153: Global register (`g0' to `g15') 1154: 1155: `d' 1156: Any local or global register 1157: 1158: `I' 1159: Integers from 0 to 31 1160: 1161: `J' 1162: 0 1163: 1164: `K' 1165: Integers from -31 to 0 1166: 1167: `G' 1168: Floating point 0 1169: 1170: `H' 1171: Floating point 1 1172: 1173: *MIPS--`mips.h'* 1174: `d' 1175: General-purpose integer register 1176: 1177: `f' 1178: Floating-point register (if available) 1179: 1180: `h' 1181: `Hi' register 1182: 1183: `l' 1184: `Lo' register 1185: 1186: `x' 1187: `Hi' or `Lo' register 1188: 1189: `y' 1190: General-purpose integer register 1191: 1192: `z' 1193: Floating-point status register 1194: 1195: `I' 1196: Signed 16 bit constant (for arithmetic instructions) 1197: 1198: `J' 1199: Zero 1200: 1201: `K' 1202: Zero-extended 16-bit constant (for logic instructions) 1203: 1204: `L' 1205: Constant with low 16 bits zero (can be loaded with `lui') 1206: 1207: `M' 1208: 32 bit constant which requires two instructions to load (a 1209: constant which is not `I', `K', or `L') 1210: 1211: `N' 1212: Negative 16 bit constant 1213: 1214: `O' 1215: Exact power of two 1216: 1217: `P' 1218: Positive 16 bit constant 1219: 1220: `G' 1221: Floating point zero 1222: 1223: `Q' 1224: Memory reference that can be loaded with more than one 1225: instruction (`m' is preferable for `asm' statements) 1226: 1227: `R' 1228: Memory reference that can be loaded with one instruction (`m' 1229: is preferable for `asm' statements) 1230: 1231: `S' 1232: Memory reference in external OSF/rose PIC format (`m' is 1233: preferable for `asm' statements) 1234: 1235: *Motorola 680x0--`m68k.h'* 1236: `a' 1237: Address register 1238: 1239: `d' 1240: Data register 1241: 1242: `f' 1243: 68881 floating-point register, if available 1244: 1245: `x' 1246: Sun FPA (floating-point) register, if available 1247: 1248: `y' 1249: First 16 Sun FPA registers, if available 1250: 1251: `I' 1252: Integer in the range 1 to 8 1253: 1254: `J' 1255: 16 bit signed number 1256: 1257: `K' 1258: Signed number whose magnitude is greater than 0x80 1259: 1260: `L' 1261: Integer in the range -8 to -1 1262: 1263: `G' 1264: Floating point constant that is not a 68881 constant 1265: 1266: `H' 1267: Floating point constant that can be used by Sun FPA 1268: 1269: *SPARC--`sparc.h'* 1270: `f' 1271: Floating-point register 1272: 1273: `I' 1274: Signed 13 bit constant 1275: 1276: `J' 1277: Zero 1278: 1279: `K' 1280: 32 bit constant with the low 12 bits clear (a constant that 1281: can be loaded with the `sethi' instruction) 1282: 1283: `G' 1284: Floating-point zero 1285: 1286: `H' 1287: Signed 13 bit constant, sign-extended to 32 or 64 bits 1288: 1289: `Q' 1290: Memory reference that can be loaded with one instruction 1291: (`m' is more appropriate for `asm' statements) 1292: 1293: `S' 1294: Constant, or memory address 1295: 1296: `T' 1297: Memory address aligned to an 8-byte boundary 1298: 1299: `U' 1300: Even register 1301: 1302: 1303: File: gcc.info, Node: No Constraints, Prev: Machine Constraints, Up: Constraints 1304: 1305: Not Using Constraints 1306: --------------------- 1307: 1308: Some machines are so clean that operand constraints are not 1309: required. For example, on the Vax, an operand valid in one context is 1310: valid in any other context. On such a machine, every operand 1311: constraint would be `g', excepting only operands of "load address" 1312: instructions which are written as if they referred to a memory 1313: location's contents but actual refer to its address. They would have 1314: constraint `p'. 1315: 1316: For such machines, instead of writing `g' and `p' for all the 1317: constraints, you can choose to write a description with empty 1318: constraints. Then you write `""' for the constraint in every 1319: `match_operand'. Address operands are identified by writing an 1320: `address' expression around the `match_operand', not by their 1321: constraints. 1322: 1323: When the machine description has just empty constraints, certain 1324: parts of compilation are skipped, making the compiler faster. However, 1325: few machines actually do not need constraints; all machine descriptions 1326: now in existence use constraints. 1.1 root 1327:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.