|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
7:
8: Permission is granted to make and distribute verbatim copies of
9: this manual provided the copyright notice and this permission notice
10: are preserved on all copies.
11:
12: Permission is granted to copy and distribute modified versions of
13: this manual under the conditions for verbatim copying, provided also
14: that the section entitled "GNU General Public License" is included
15: exactly as in the original, and provided that the entire resulting
16: derived work is distributed under the terms of a permission notice
17: identical to this one.
18:
19: Permission is granted to copy and distribute translations of this
20: manual into another language, under the above conditions for modified
21: versions, except that the section entitled "GNU General Public
22: License" and this permission notice may be included in translations
23: approved by the Free Software Foundation instead of in the original
24: English.
25:
26:
27: File: gcc.info, Node: Patterns, Next: Example, Prev: Machine Desc, Up: Machine Desc
28:
29: Everything about Instruction Patterns
30: =====================================
31:
32: Each instruction pattern contains an incomplete RTL expression,
33: with pieces to be filled in later, operand constraints that restrict
34: how the pieces can be filled in, and an output pattern or C code to
35: generate the assembler output, all wrapped up in a `define_insn'
36: expression.
37:
38: A `define_insn' is an RTL expression containing four or five
39: operands:
40:
41: 1. An optional name. The presence of a name indicate that this
42: instruction pattern can perform a certain standard job for the
43: RTL-generation pass of the compiler. This pass knows certain
44: names and will use the instruction patterns with those names, if
45: the names are defined in the machine description.
46:
47: The absence of a name is indicated by writing an empty string
48: where the name should go. Nameless instruction patterns are never
49: used for generating RTL code, but they may permit several simpler
50: insns to be combined later on.
51:
52: Names that are not thus known and used in RTL-generation have
53: no effect; they are equivalent to no name at all.
54:
55: 2. The "RTL template" (*note RTL Template::.) is a vector of
56: incomplete RTL expressions which show what the instruction should
57: look like. It is incomplete because it may contain
58: `match_operand', `match_operator', and `match_dup' expressions
59: that stand for operands of the instruction.
60:
61: If the vector has only one element, that element is the
62: template for the instruction pattern. If the vector has multiple
63: elements, then the instruction pattern is a `parallel' expression
64: containing the elements described.
65:
66: 3. A condition. This is a string which contains a C expression that
67: is the final test to decide whether an insn body matches this
68: pattern.
69:
70: For a named pattern, the condition (if present) may not depend
71: on the data in the insn being matched, but only the
72: target-machine-type flags. The compiler needs to test these
73: conditions during initialization in order to learn exactly which
74: named instructions are available in a particular run.
75:
76: For nameless patterns, the condition is applied only when
77: matching an individual insn, and only after the insn has matched
78: the pattern's recognition template. The insn's operands may be
79: found in the vector `operands'.
80:
81: 4. The "output template": a string that says how to output matching
82: insns as assembler code. `%' in this string specifies where to
83: substitute the value of an operand. *Note Output Template::.
84:
85: When simple substitution isn't general enough, you can specify
86: a piece of C code to compute the output. *Note Output
87: Statement::.
88:
89: 5. Optionally, a vector containing the values of attributes for
90: insns matching this pattern. *Note Insn Attributes::.
91:
92:
93: File: gcc.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc
94:
95: Example of `define_insn'
96: ========================
97:
98: Here is an actual example of an instruction pattern, for the
99: 68000/68020.
100:
101: (define_insn "tstsi"
102: [(set (cc0)
103: (match_operand:SI 0 "general_operand" "rm"))]
104: ""
105: "*
106: { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
107: return \"tstl %0\";
108: return \"cmpl #0,%0\"; }")
109:
110: This is an instruction that sets the condition codes based on the
111: value of a general operand. It has no condition, so any insn whose
112: RTL description has the form shown may be handled according to this
113: pattern. The name `tstsi' means "test a `SImode' value" and tells the
114: RTL generation pass that, when it is necessary to test such a value,
115: an insn to do so can be constructed using this pattern.
116:
117: The output control string is a piece of C code which chooses which
118: output template to return based on the kind of operand and the specific
119: type of CPU for which code is being generated.
120:
121: `"rm"' is an operand constraint. Its meaning is explained below.
122:
123:
124: File: gcc.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc
125:
126: RTL Template for Generating and Recognizing Insns
127: =================================================
128:
129: The RTL template is used to define which insns match the particular
130: pattern and how to find their operands. For named patterns, the RTL
131: template also says how to construct an insn from specified operands.
132:
133: Construction involves substituting specified operands into a copy
134: of the template. Matching involves determining the values that serve
135: as the operands in the insn being matched. Both of these activities
136: are controlled by special expression types that direct matching and
137: substitution of the operands.
138:
139: `(match_operand:M N PREDICATE CONSTRAINT)'
140: This expression is a placeholder for operand number N of the
141: insn. When constructing an insn, operand number N will be
142: substituted at this point. When matching an insn, whatever
143: appears at this position in the insn will be taken as operand
144: number N; but it must satisfy PREDICATE or this instruction
145: pattern will not match at all.
146:
147: Operand numbers must be chosen consecutively counting from zero in
148: each instruction pattern. There may be only one `match_operand'
149: expression in the pattern for each operand number. Usually
150: operands are numbered in the order of appearance in
151: `match_operand' expressions.
152:
153: PREDICATE is a string that is the name of a C function that
154: accepts two arguments, an expression and a machine mode. During
155: matching, the function will be called with the putative operand
156: as the expression and M as the mode argument (if M is not
157: specified, `VOIDmode' will be used, which normally causes
158: PREDICATE to accept any mode). If it returns zero, this
159: instruction pattern fails to match. PREDICATE may be an empty
160: string; then it means no test is to be done on the operand, so
161: anything which occurs in this position is valid.
162:
163: Most of the time, PREDICATE will reject modes other than M--but
164: not always. For example, the predicate `address_operand' uses M
165: as the mode of memory ref that the address should be valid for.
166: Many predicates accept `const_int' nodes even though their mode is
167: `VOIDmode'.
168:
169: CONSTRAINT controls reloading and the choice of the best register
170: class to use for a value, as explained later (*note
171: Constraints::.).
172:
173: People are often unclear on the difference between the constraint
174: and the predicate. The predicate helps decide whether a given
175: insn matches the pattern. The constraint plays no role in this
176: decision; instead, it controls various decisions in the case of
177: an insn which does match.
178:
179: On CISC machines, PREDICATE is most often `"general_operand"'.
180: This function checks that the putative operand is either a
181: constant, a register or a memory reference, and that it is valid
182: for mode M.
183:
184: For an operand that must be a register, PREDICATE should be
185: `"register_operand"'. It would be valid to use
186: `"general_operand"', since the reload pass would copy any
187: non-register operands through registers, but this would make GNU
188: CC do extra work, it would prevent invariant operands (such as
189: constant) from being removed from loops, and it would prevent the
190: register allocator from doing the best possible job. On RISC
191: machines, it is usually most efficient to allow PREDICATE to
192: accept only objects that the constraints allow.
193:
194: For an operand that must be a constant, either use
195: `"immediate_operand"' for PREDICATE, or make the instruction
196: pattern's extra condition require a constant, or both. You cannot
197: expect the constraints to do this work! If the constraints allow
198: only constants, but the predicate allows something else, the
199: compiler will crash when that case arises.
200:
201: `(match_scratch:M N CONSTRAINT)'
202: This expression is also a placeholder for operand number N and
203: indicates that operand must be a `scratch' or `reg' expression.
204:
205: When matching patterns, this is completely equivalent to
206:
207: (match_operand:M N "scratch_operand" PRED)
208:
209: but, when generating RTL, it produces a (`scratch':M) expression.
210:
211: If the last few expressions in a `parallel' are `clobber'
212: expressions whose operands are either a hard register or
213: `match_scratch', the combiner can add them when necessary. *Note
214: Side Effects::.
215:
216: `(match_dup N)'
217: This expression is also a placeholder for operand number N. It
218: is used when the operand needs to appear more than once in the
219: insn.
220:
221: In construction, `match_dup' behaves exactly like
222: `match_operand': the operand is substituted into the insn being
223: constructed. But in matching, `match_dup' behaves differently.
224: It assumes that operand number N has already been determined by a
225: `match_operand' appearing earlier in the recognition template,
226: and it matches only an identical-looking expression.
227:
228: `(match_operator:M N PREDICATE [OPERANDS...])'
229: This pattern is a kind of placeholder for a variable RTL
230: expression code.
231:
232: When constructing an insn, it stands for an RTL expression whose
233: expression code is taken from that of operand N, and whose
234: operands are constructed from the patterns OPERANDS.
235:
236: When matching an expression, it matches an expression if the
237: function PREDICATE returns nonzero on that expression *and* the
238: patterns OPERANDS match the operands of the expression.
239:
240: Suppose that the function `commutative_operator' is defined as
241: follows, to match any expression whose operator is one of the
242: commutative arithmetic operators of RTL and whose mode is MODE:
243:
244: int
245: commutative_operator (x, mode)
246: rtx x;
247: enum machine_mode mode;
248: {
249: enum rtx_code code = GET_CODE (x);
250: if (GET_MODE (x) != mode)
251: return 0;
252: return GET_RTX_CLASS (code) == 'c' || code == EQ || code == NE;
253: }
254:
255: Then the following pattern will match any RTL expression
256: consisting of a commutative operator applied to two general
257: operands:
258:
259: (match_operator:SI 3 "commutative_operator"
260: [(match_operand:SI 1 "general_operand" "g")
261: (match_operand:SI 2 "general_operand" "g")])
262:
263: Here the vector `[OPERANDS...]' contains two patterns because the
264: expressions to be matched all contain two operands.
265:
266: When this pattern does match, the two operands of the commutative
267: operator are recorded as operands 1 and 2 of the insn. (This is
268: done by the two instances of `match_operand'.) Operand 3 of the
269: insn will be the entire commutative expression: use `GET_CODE
270: (operands[3])' to see which commutative operator was used.
271:
272: The machine mode M of `match_operator' works like that of
273: `match_operand': it is passed as the second argument to the
274: predicate function, and that function is solely responsible for
275: deciding whether the expression to be matched "has" that mode.
276:
277: When constructing an insn, argument 3 of the gen-function will
278: specify the operation (i.e. the expression code) for the
279: expression to be made. It should be an RTL expression, whose
280: expression code is copied into a new expression whose operands
281: are arguments 1 and 2 of the gen-function. The subexpressions of
282: argument 3 are not used; only its expression code matters.
283:
284: When `match_operator' is used in a pattern for matching an insn,
285: it usually best if the operand number of the `match_operator' is
286: higher than that of the actual operands of the insn. This
287: improves register allocation because the register allocator often
288: looks at operands 1 and 2 of insns to see if it can do register
289: tying.
290:
291: There is no way to specify constraints in `match_operator'. The
292: operand of the insn which corresponds to the `match_operator'
293: never has any constraints because it is never reloaded as a whole.
294: However, if parts of its OPERANDS are matched by `match_operand'
295: patterns, those parts may have constraints of their own.
296:
297: `(address (match_operand:M N "address_operand" ""))'
298: This complex of expressions is a placeholder for an operand number
299: N in a "load address" instruction: an operand which specifies a
300: memory location in the usual way, but for which the actual operand
301: value used is the address of the location, not the contents of the
302: location.
303:
304: `address' expressions never appear in RTL code, only in machine
305: descriptions. And they are used only in machine descriptions
306: that do not use the operand constraint feature. When operand
307: constraints are in use, the letter `p' in the constraint serves
308: this purpose.
309:
310: M is the machine mode of the *memory location being addressed*,
311: not the machine mode of the address itself. That mode is always
312: the same on a given target machine (it is `Pmode', which normally
313: is `SImode'), so there is no point in mentioning it; thus, no
314: machine mode is written in the `address' expression. If some day
315: support is added for machines in which addresses of different
316: kinds of objects appear differently or are used differently (such
317: as the PDP-10), different formats would perhaps need different
318: machine modes and these modes might be written in the `address'
319: expression.
320:
321:
322: File: gcc.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc
323:
324: Output Templates and Operand Substitution
325: =========================================
326:
327: The "output template" is a string which specifies how to output the
328: assembler code for an instruction pattern. Most of the template is a
329: fixed string which is output literally. The character `%' is used to
330: specify where to substitute an operand; it can also be used to
331: identify places where different variants of the assembler require
332: different syntax.
333:
334: In the simplest case, a `%' followed by a digit N says to output
335: operand N at that point in the string.
336:
337: `%' followed by a letter and a digit says to output an operand in an
338: alternate fashion. Four letters have standard, built-in meanings
339: described below. The machine description macro `PRINT_OPERAND' can
340: define additional letters with nonstandard meanings.
341:
342: `%cDIGIT' can be used to substitute an operand that is a constant
343: value without the syntax that normally indicates an immediate operand.
344:
345: `%nDIGIT' is like `%cDIGIT' except that the value of the constant
346: is negated before printing.
347:
348: `%aDIGIT' can be used to substitute an operand as if it were a
349: memory reference, with the actual operand treated as the address.
350: This may be useful when outputting a "load address" instruction,
351: because often the assembler syntax for such an instruction requires
352: you to write the operand as if it were a memory reference.
353:
354: `%lDIGIT' is used to substitute a `label_ref' into a jump
355: instruction.
356:
357: `%' followed by a punctuation character specifies a substitution
358: that does not use an operand. Only one case is standard: `%%' outputs
359: a `%' into the assembler code. Other nonstandard cases can be defined
360: in the `PRINT_OPERAND' macro. You must also define which punctuation
361: characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
362:
363: The template may generate multiple assembler instructions. Write
364: the text for the instructions, with `\;' between them.
365:
366: When the RTL contains two operands which are required by constraint
367: to match each other, the output template must refer only to the
368: lower-numbered operand. Matching operands are not always identical,
369: and the rest of the compiler arranges to put the proper RTL expression
370: for printing into the lower-numbered operand.
371:
372: One use of nonstandard letters or punctuation following `%' is to
373: distinguish between different assembler languages for the same
374: machine; for example, Motorola syntax versus MIT syntax for the 68000.
375: Motorola syntax requires periods in most opcode names, while MIT
376: syntax does not. For example, the opcode `movel' in MIT syntax is
377: `move.l' in Motorola syntax. The same file of patterns is used for
378: both kinds of output syntax, but the character sequence `%.' is used
379: in each place where Motorola syntax wants a period. The
380: `PRINT_OPERAND' macro for Motorola syntax defines the sequence to
381: output a period; the macro for MIT syntax defines it to do nothing.
382:
383:
384: File: gcc.info, Node: Output Statement, Next: Constraints, Prev: Output Template, Up: Machine Desc
385:
386: C Statements for Generating Assembler Output
387: ============================================
388:
389: Often a single fixed template string cannot produce correct and
390: efficient assembler code for all the cases that are recognized by a
391: single instruction pattern. For example, the opcodes may depend on
392: the kinds of operands; or some unfortunate combinations of operands
393: may require extra machine instructions.
394:
395: If the output control string starts with a `@', then it is actually
396: a series of templates, each on a separate line. (Blank lines and
397: leading spaces and tabs are ignored.) The templates correspond to the
398: pattern's constraint alternatives (*note Multi-Alternative::.). For
399: example, if a target machine has a two-address add instruction `addr'
400: to add into a register and another `addm' to add a register to memory,
401: you might write this pattern:
402:
403: (define_insn "addsi3"
404: [(set (match_operand:SI 0 "general_operand" "r,m")
405: (plus:SI (match_operand:SI 1 "general_operand" "0,0")
406: (match_operand:SI 2 "general_operand" "g,r")))]
407: ""
408: "@
409: addr %1,%0
410: addm %1,%0")
411:
412: If the output control string starts with a `*', then it is not an
413: output template but rather a piece of C program that should compute a
414: template. It should execute a `return' statement to return the
415: template-string you want. Most such templates use C string literals,
416: which require doublequote characters to delimit them. To include these
417: doublequote characters in the string, prefix each one with `\'.
418:
419: The operands may be found in the array `operands', whose C data type
420: is `rtx []'.
421:
422: It is very common to select different ways of generating assembler
423: code based on whether an immediate operand is within a certain range.
424: Be careful when doing this, because the result of `INTVAL' is an
425: integer on the host machine. If the host machine has more bits in an
426: `int' than the target machine has in the mode in which the constant
427: will be used, then some of the bits you get from `INTVAL' will be
428: superfluous. For proper results, you must carefully disregard the
429: values of those bits.
430:
431: It is possible to output an assembler instruction and then go on to
432: output or compute more of them, using the subroutine
433: `output_asm_insn'. This receives two arguments: a template-string and
434: a vector of operands. The vector may be `operands', or it may be
435: another array of `rtx' that you declare locally and initialize
436: yourself.
437:
438: When an insn pattern has multiple alternatives in its constraints,
439: often the appearance of the assembler code is determined mostly by
440: which alternative was matched. When this is so, the C code can test
441: the variable `which_alternative', which is the ordinal number of the
442: alternative that was actually satisfied (0 for the first, 1 for the
443: second alternative, etc.).
444:
445: For example, suppose there are two opcodes for storing zero,
446: `clrreg' for registers and `clrmem' for memory locations. Here is how
447: a pattern could use `which_alternative' to choose between them:
448:
449: (define_insn ""
450: [(set (match_operand:SI 0 "general_operand" "r,m")
451: (const_int 0))]
452: ""
453: "*
454: return (which_alternative == 0
455: ? \"clrreg %0\" : \"clrmem %0\");
456: ")
457:
458: The example above, where the assembler code to generate was
459: *solely* determined by the alternative, could also have been specified
460: as follows, having the output control string start with a `@':
461:
462: (define_insn ""
463: [(set (match_operand:SI 0 "general_operand" "r,m")
464: (const_int 0))]
465: ""
466: "@
467: clrreg %0
468: clrmem %0")
469:
470:
471: File: gcc.info, Node: Constraints, Next: Standard Names, Prev: Output Statement, Up: Machine Desc
472:
473: Operand Constraints
474: ===================
475:
476: Each `match_operand' in an instruction pattern can specify a
477: constraint for the type of operands allowed. Constraints can say
478: whether an operand may be in a register, and which kinds of register;
479: whether the operand can be a memory reference, and which kinds of
480: address; whether the operand may be an immediate constant, and which
481: possible values it may have. Constraints can also require two
482: operands to match.
483:
484: * Menu:
485:
486: * Simple Constraints:: Basic use of constraints.
487: * Multi-Alternative:: When an insn has two alternative constraint-patterns.
488: * Class Preferences:: Constraints guide which hard register to put things in.
489: * Modifiers:: More precise control over effects of constraints.
490: * No Constraints:: Describing a clean machine without constraints.
491:
492:
493: File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Prev: Constraints, Up: Constraints
494:
495: Simple Constraints
496: ------------------
497:
498: The simplest kind of constraint is a string full of letters, each of
499: which describes one kind of operand that is permitted. Here are the
500: letters that are allowed:
501:
502: `m'
503: A memory operand is allowed, with any kind of address that the
504: machine supports in general.
505:
506: `o'
507: A memory operand is allowed, but only if the address is
508: "offsettable". This means that adding a small integer (actually,
509: the width in bytes of the operand, as determined by its machine
510: mode) may be added to the address and the result is also a valid
511: memory address.
512:
513: For example, an address which is constant is offsettable; so is an
514: address that is the sum of a register and a constant (as long as a
515: slightly larger constant is also within the range of
516: address-offsets supported by the machine); but an autoincrement
517: or autodecrement address is not offsettable. More complicated
518: indirect/indexed addresses may or may not be offsettable
519: depending on the other addressing modes that the machine supports.
520:
521: Note that in an output operand which can be matched by another
522: operand, the constraint letter `o' is valid only when accompanied
523: by both `<' (if the target machine has predecrement addressing)
524: and `>' (if the target machine has preincrement addressing).
525:
526: `V'
527: A memory operand that is not offsettable. In other words,
528: anything that would fit the `m' constraint but not the `o'
529: constraint.
530:
531: `<'
532: A memory operand with autodecrement addressing (either
533: predecrement or postdecrement) is allowed.
534:
535: `>'
536: A memory operand with autoincrement addressing (either
537: preincrement or postincrement) is allowed.
538:
539: `r'
540: A register operand is allowed provided that it is in a general
541: register.
542:
543: `d', `a', `f', ...
544: Other letters can be defined in machine-dependent fashion to
545: stand for particular classes of registers. `d', `a' and `f' are
546: defined on the 68000/68020 to stand for data, address and floating
547: point registers.
548:
549: `i'
550: An immediate integer operand (one with constant value) is allowed.
551: This includes symbolic constants whose values will be known only
552: at assembly time.
553:
554: `n'
555: An immediate integer operand with a known numeric value is
556: allowed. Many systems cannot support assembly-time constants for
557: operands less than a word wide. Constraints for these operands
558: should use `n' rather than `i'.
559:
560: `I', `J', `K', ... `P'
561: Other letters in the range `I' through `P' may be defined in a
562: machine-dependent fashion to permit immediate integer operands
563: with explicit integer values in specified ranges. For example,
564: on the 68000, `I' is defined to stand for the range of values 1
565: to 8. This is the range permitted as a shift count in the shift
566: instructions.
567:
568: `E'
569: An immediate floating operand (expression code `const_double') is
570: allowed, but only if the target floating point format is the same
571: as that of the host machine (on which the compiler is running).
572:
573: `F'
574: An immediate floating operand (expression code `const_double') is
575: allowed.
576:
577: `G', `H'
578: `G' and `H' may be defined in a machine-dependent fashion to
579: permit immediate floating operands in particular ranges of values.
580:
581: `s'
582: An immediate integer operand whose value is not an explicit
583: integer is allowed.
584:
585: This might appear strange; if an insn allows a constant operand
586: with a value not known at compile time, it certainly must allow
587: any known value. So why use `s' instead of `i'? Sometimes it
588: allows better code to be generated.
589:
590: For example, on the 68000 in a fullword instruction it is
591: possible to use an immediate operand; but if the immediate value
592: is between -128 and 127, better code results from loading the
593: value into a register and using the register. This is because
594: the load into the register can be done with a `moveq'
595: instruction. We arrange for this to happen by defining the
596: letter `K' to mean "any integer outside the range -128 to 127",
597: and then specifying `Ks' in the operand constraints.
598:
599: `g'
600: Any register, memory or immediate integer operand is allowed,
601: except for registers that are not general registers.
602:
603: `X'
604: Any operand whatsoever is allowed, even if it does not satisfy
605: `general_operand'. This is normally used in the constraint of a
606: `match_scratch' when certain alternatives will not actually
607: require a scratch register.
608:
609: `0', `1', `2', ... `9'
610: An operand that matches the specified operand number is allowed.
611: If a digit is used together with letters within the same
612: alternative, the digit should come last.
613:
614: This is called a "matching constraint" and what it really means is
615: that the assembler has only a single operand that fills two roles
616: considered separate in the RTL insn. For example, an add insn
617: has two input operands and one output operand in the RTL, but on
618: most machines an add instruction really has only two operands,
619: one of them an input-output operand.
620:
621: Matching constraints work only in circumstances like that add
622: insn. More precisely, the two operands that match must include
623: one input-only operand and one output-only operand. Moreover,
624: the digit must be a smaller number than the number of the operand
625: that uses it in the constraint.
626:
627: For operands to match in a particular case usually means that they
628: are identical-looking RTL expressions. But in a few special cases
629: specific kinds of dissimilarity are allowed. For example, `*x'
630: as an input operand will match `*x++' as an output operand. For
631: proper results in such cases, the output template should always
632: use the output-operand's number when printing the operand.
633:
634: `p'
635: An operand that is a valid memory address is allowed. This is
636: for "load address" and "push address" instructions.
637:
638: `p' in the constraint must be accompanied by `address_operand' as
639: the predicate in the `match_operand'. This predicate interprets
640: the mode specified in the `match_operand' as the mode of the
641: memory reference for which the address would be valid.
642:
643: `Q', `R', `S', ... `U'
644: Letters in the range `Q' through `U' may be defined in a
645: machine-dependent fashion to stand for arbitrary operand types.
646: The machine description macro `EXTRA_CONSTRAINT' is passed the
647: operand as its first argument and the constraint letter as its
648: second operand.
649:
650: A typical use for this would be to distinguish certain types of
651: memory references that affect other insn operands.
652:
653: Do not define these constraint letters to accept register
654: references (`reg'); the reload pass does not expect this and
655: would not handle it properly.
656:
657: In order to have valid assembler code, each operand must satisfy
658: its constraint. But a failure to do so does not prevent the pattern
659: from applying to an insn. Instead, it directs the compiler to modify
660: the code so that the constraint will be satisfied. Usually this is
661: done by copying an operand into a register.
662:
663: Contrast, therefore, the two instruction patterns that follow:
664:
665: (define_insn ""
666: [(set (match_operand:SI 0 "general_operand" "r")
667: (plus:SI (match_dup 0)
668: (match_operand:SI 1 "general_operand" "r")))]
669: ""
670: "...")
671:
672: which has two operands, one of which must appear in two places, and
673:
674: (define_insn ""
675: [(set (match_operand:SI 0 "general_operand" "r")
676: (plus:SI (match_operand:SI 1 "general_operand" "0")
677: (match_operand:SI 2 "general_operand" "r")))]
678: ""
679: "...")
680:
681: which has three operands, two of which are required by a constraint to
682: be identical. If we are considering an insn of the form
683:
684: (insn N PREV NEXT
685: (set (reg:SI 3)
686: (plus:SI (reg:SI 6) (reg:SI 109)))
687: ...)
688:
689: the first pattern would not apply at all, because this insn does not
690: contain two identical subexpressions in the right place. The pattern
691: would say, "That does not look like an add instruction; try other
692: patterns." The second pattern would say, "Yes, that's an add
693: instruction, but there is something wrong with it." It would direct
694: the reload pass of the compiler to generate additional insns to make
695: the constraint true. The results might look like this:
696:
697: (insn N2 PREV N
698: (set (reg:SI 3) (reg:SI 6))
699: ...)
700:
701: (insn N N2 NEXT
702: (set (reg:SI 3)
703: (plus:SI (reg:SI 3) (reg:SI 109)))
704: ...)
705:
706: It is up to you to make sure that each operand, in each pattern, has
707: constraints that can handle any RTL expression that could be present
708: for that operand. (When multiple alternatives are in use, each
709: pattern must, for each possible combination of operand expressions,
710: have at least one alternative which can handle that combination of
711: operands.) The constraints don't need to *allow* any possible
712: operand--when this is the case, they do not constrain--but they must
713: at least point the way to reloading any possible operand so that it
714: will fit.
715:
716: * If the constraint accepts whatever operands the predicate permits,
717: there is no problem: reloading is never necessary for this
718: operand.
719:
720: For example, an operand whose constraints permit everything except
721: registers is safe provided its predicate rejects registers.
722:
723: An operand whose predicate accepts only constant values is safe
724: provided its constraints include the letter `i'. If any possible
725: constant value is accepted, then nothing less than `i' will do;
726: if the predicate is more selective, then the constraints may also
727: be more selective.
728:
729: * Any operand expression can be reloaded by copying it into a
730: register. So if an operand's constraints allow some kind of
731: register, it is certain to be safe. It need not permit all
732: classes of registers; the compiler knows how to copy a register
733: into another register of the proper class in order to make an
734: instruction valid.
735:
736: * A nonoffsettable memory reference can be reloaded by copying the
737: address into a register. So if the constraint uses the letter
738: `o', all memory references are taken care of.
739:
740: * A constant operand can be reloaded by allocating space in memory
741: to hold it as preinitialized data. Then the memory reference can
742: be used in place of the constant. So if the constraint uses the
743: letters `o' or `m', constant operands are not a problem.
744:
745: * If the constraint permits a constant and a pseudo register used
746: in an insn was not allocated to a hard register and is equivalent
747: to a constant, the register will be replaced with the constant.
748: If the predicate does not permit a constant and the insn is
749: re-recognized for some reason, the compiler will crash. Thus the
750: predicate must always recognize any objects allowed by the
751: constraint.
752:
753: If the operand's predicate can recognize registers, but the
754: constraint does not permit them, it can make the compiler crash. When
755: this operand happens to be a register, the reload pass will be
756: stymied, because it does not know how to copy a register temporarily
757: into memory.
758:
759:
760: File: gcc.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints
761:
762: Multiple Alternative Constraints
763: --------------------------------
764:
765: Sometimes a single instruction has multiple alternative sets of
766: possible operands. For example, on the 68000, a logical-or
767: instruction can combine register or an immediate value into memory, or
768: it can combine any kind of operand into a register; but it cannot
769: combine one memory location into another.
770:
771: These constraints are represented as multiple alternatives. An
772: alternative can be described by a series of letters for each operand.
773: The overall constraint for an operand is made from the letters for
774: this operand from the first alternative, a comma, the letters for this
775: operand from the second alternative, a comma, and so on until the last
776: alternative. Here is how it is done for fullword logical-or on the
777: 68000:
778:
779: (define_insn "iorsi3"
780: [(set (match_operand:SI 0 "general_operand" "=m,d")
781: (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
782: (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
783: ...)
784:
785: The first alternative has `m' (memory) for operand 0, `0' for
786: operand 1 (meaning it must match operand 0), and `dKs' for operand 2.
787: The second alternative has `d' (data register) for operand 0, `0' for
788: operand 1, and `dmKs' for operand 2. The `=' and `%' in the
789: constraints apply to all the alternatives; their meaning is explained
790: in the next section (*note Class Preferences::.).
791:
792: If all the operands fit any one alternative, the instruction is
793: valid. Otherwise, for each alternative, the compiler counts how many
794: instructions must be added to copy the operands so that that
795: alternative applies. The alternative requiring the least copying is
796: chosen. If two alternatives need the same amount of copying, the one
797: that comes first is chosen. These choices can be altered with the `?'
798: and `!' characters:
799:
800: `?'
801: Disparage slightly the alternative that the `?' appears in, as a
802: choice when no alternative applies exactly. The compiler regards
803: this alternative as one unit more costly for each `?' that appears
804: in it.
805:
806: `!'
807: Disparage severely the alternative that the `!' appears in. This
808: alternative can still be used if it fits without reloading, but
809: if reloading is needed, some other alternative will be used.
810:
811: When an insn pattern has multiple alternatives in its constraints,
812: often the appearance of the assembler code is determined mostly by
813: which alternative was matched. When this is so, the C code for
814: writing the assembler code can use the variable `which_alternative',
815: which is the ordinal number of the alternative that was actually
816: satisfied (0 for the first, 1 for the second alternative, etc.).
817: *Note Output Statement::.
818:
819:
820: File: gcc.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints
821:
822: Register Class Preferences
823: --------------------------
824:
825: The operand constraints have another function: they enable the
826: compiler to decide which kind of hardware register a pseudo register
827: is best allocated to. The compiler examines the constraints that
828: apply to the insns that use the pseudo register, looking for the
829: machine-dependent letters such as `d' and `a' that specify classes of
830: registers. The pseudo register is put in whichever class gets the
831: most "votes". The constraint letters `g' and `r' also vote: they vote
832: in favor of a general register. The machine description says which
833: registers are considered general.
834:
835: Of course, on some machines all registers are equivalent, and no
836: register classes are defined. Then none of this complexity is
837: relevant.
838:
839:
840: File: gcc.info, Node: Modifiers, Next: No Constraints, Prev: Class Preferences, Up: Constraints
841:
842: Constraint Modifier Characters
843: ------------------------------
844:
845: `='
846: Means that this operand is write-only for this instruction: the
847: previous value is discarded and replaced by output data.
848:
849: `+'
850: Means that this operand is both read and written by the
851: instruction.
852:
853: When the compiler fixes up the operands to satisfy the
854: constraints, it needs to know which operands are inputs to the
855: instruction and which are outputs from it. `=' identifies an
856: output; `+' identifies an operand that is both input and output;
857: all other operands are assumed to be input only.
858:
859: `&'
860: Means (in a particular alternative) that this operand is written
861: before the instruction is finished using the input operands.
862: Therefore, this operand may not lie in a register that is used as
863: an input operand or as part of any memory address.
864:
865: `&' applies only to the alternative in which it is written. In
866: constraints with multiple alternatives, sometimes one alternative
867: requires `&' while others do not. See, for example, the `movdf'
868: insn of the 68000.
869:
870: `&' does not obviate the need to write `='.
871:
872: `%'
873: Declares the instruction to be commutative for this operand and
874: the following operand. This means that the compiler may
875: interchange the two operands if that is the cheapest way to make
876: all operands fit the constraints. This is often used in patterns
877: for addition instructions that really have only two operands: the
878: result must go in one of the arguments. Here for example, is how
879: the 68000 halfword-add instruction is defined:
880:
881: (define_insn "addhi3"
882: [(set (match_operand:HI 0 "general_operand" "=m,r")
883: (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
884: (match_operand:HI 2 "general_operand" "di,g")))]
885: ...)
886:
887: `#'
888: Says that all following characters, up to the next comma, are to
889: be ignored as a constraint. They are significant only for
890: choosing register preferences.
891:
892: `*'
893: Says that the following character should be ignored when choosing
894: register preferences. `*' has no effect on the meaning of the
895: constraint as a constraint, and no effect on reloading.
896:
897: Here is an example: the 68000 has an instruction to sign-extend a
898: halfword in a data register, and can also sign-extend a value by
899: copying it into an address register. While either kind of
900: register is acceptable, the constraints on an address-register
901: destination are less strict, so it is best if register allocation
902: makes an address register its goal. Therefore, `*' is used so
903: that the `d' constraint letter (for data register) is ignored
904: when computing register preferences.
905:
906: (define_insn "extendhisi2"
907: [(set (match_operand:SI 0 "general_operand" "=*d,a")
908: (sign_extend:SI
909: (match_operand:HI 1 "general_operand" "0,g")))]
910: ...)
911:
912:
913: File: gcc.info, Node: No Constraints, Prev: Modifiers, Up: Constraints
914:
915: Not Using Constraints
916: ---------------------
917:
918: Some machines are so clean that operand constraints are not
919: required. For example, on the Vax, an operand valid in one context is
920: valid in any other context. On such a machine, every operand
921: constraint would be `g', excepting only operands of "load address"
922: instructions which are written as if they referred to a memory
923: location's contents but actual refer to its address. They would have
924: constraint `p'.
925:
926: For such machines, instead of writing `g' and `p' for all the
927: constraints, you can choose to write a description with empty
928: constraints. Then you write `""' for the constraint in every
929: `match_operand'. Address operands are identified by writing an
930: `address' expression around the `match_operand', not by their
931: constraints.
932:
933: When the machine description has just empty constraints, certain
934: parts of compilation are skipped, making the compiler faster. However,
935: few machines actually do not need constraints; all machine descriptions
936: now in existence use constraints.
937:
938:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.