|
|
1.1 root 1: Info file internals, produced by texinfo-format-buffer -*-Text-*-
2: from file internals.texinfo
3:
4:
5: This file documents the internals of the GNU compiler.
6:
7: Copyright (C) 1987 Richard M. Stallman.
8:
9: Permission is granted to make and distribute verbatim copies of
10: this manual provided the copyright notice and this permission notice
11: are preserved on all copies.
12:
13: Permission is granted to copy and distribute modified versions of this
14: manual under the conditions for verbatim copying, provided also that the
15: section entitled "GNU CC General Public License" is included exactly as
16: in the original, and provided that the entire resulting derived work is
17: distributed under the terms of a permission notice identical to this one.
18:
19: Permission is granted to copy and distribute translations of this manual
20: into another language, under the above conditions for modified versions,
21: except that the section entitled "GNU CC General Public License" may be
22: included in a translation approved by the author instead of in the original
23: English.
24:
25:
26:
27:
28:
29: File: internals Node: Comparisons, Prev: Arithmetic, Up: RTL, Next: Bit Fields
30:
31: Comparison Operations
32: =====================
33:
34: Comparison operators test a relation on two operands and are considered to
35: represent the value 1 if the relation holds, or zero if it does not. The
36: mode of the comparison is determined by the operands; they must both be
37: valid for a common machine mode. A comparison with both operands constant
38: would be invalid as the machine mode could not be deduced from it, but such
39: a comparison should never exist in rtl due to constant folding.
40:
41: Inequality comparisons come in two flavors, signed and unsigned. Thus,
42: there are distinct expression codes `GT' and `GTU' for signed and
43: unsigned greater-than. These can produce different results for the same
44: pair of integer values: for example, 1 is signed greater-than -1 but not
45: unsigned greater-than, because -1 when regarded as unsigned is actually
46: 0xffffffff which is greater than 1.
47:
48: The signed comparisons are also used for floating point values. Floating
49: point comparisons are distinguished by the machine modes of the operands.
50:
51: The comparison operators may be used to compare the condition codes
52: `(cc0)' against zero, as in `(eq (cc0) (const_int 0))'.
53: Such a construct actually refers to the result of the preceding
54: instruction in which the condition codes were set. The above
55: example stands for 1 if the condition codes were set to say
56: "zero" or "equal", 0 otherwise. Although the same comparison
57: operators are used for this as may be used in other contexts
58: on actual data, no confusion can result since the machine description
59: would never allow both kinds of uses in the same context.
60:
61: `(eq X Y)'
62: 1 if the values represented by X and Y are equal,
63: otherwise 0.
64:
65: `(ne X Y)'
66: 1 if the values represented by X and Y are not equal,
67: otherwise 0.
68:
69: `(gt X Y)'
70: 1 if the X is greater than Y. If they are fixed-point,
71: the comparison is done in a signed sense.
72:
73: `(gtu X Y)'
74: Like `gt' but does unsigned comparison, on fixed-point numbers only.
75:
76: `(lt X Y)'
77: `(ltu X Y)'
78: Like `gt' and `gtu' but test for "less than".
79:
80: `(ge X Y)'
81: `(geu X Y)'
82: Like `gt' and `gtu' but test for "greater than or equal".
83:
84: `(le X Y)'
85: `(leu X Y)'
86: Like `gt' and `gtu' but test for "less than or equal".
87:
88: `(if_then_else COND THEN ELSE)'
89: This is not a comparison operation but is listed here because it is
90: always used in conjunction with a comparison operation. To be
91: precise, COND is a comparison expression. This expression
92: represents a choice, according to COND, between the value
93: represented by THEN and the one represented by ELSE.
94:
95: On most machines, `if_then_else' expressions are valid only
96: to express conditional jumps.
97:
98:
99: File: internals Node: Bit Fields, Prev: Comparisons, Up: RTL, Next: Conversions
100:
101: Bit-fields
102: ==========
103:
104: Special expression codes exist to represent bit-field instructions.
105: These types of expressions are lvalues in rtl; they may appear
106: on the left side of a assignment, indicating insertion of a value
107: into the specified bit field.
108:
109: `(sign_extract:SI LOC SIZE POS)'
110: This represents a reference to a sign-extended bit-field contained or
111: starting in LOC (a memory or register reference). The bit field
112: is SIZE bits wide and starts at bit POS. The compilation
113: switch `BITS_BIG_ENDIAN' says which end of the memory unit
114: POS counts from.
115:
116: Which machine modes are valid for LOC depends on the machine,
117: but typically LOC should be a single byte when in memory
118: or a full word in a register.
119:
120: `(zero_extract:SI LOC POS SIZE)'
121: Like `sign_extract' but refers to an unsigned or zero-extended
122: bit field. The same sequence of bits are extracted, but they
123: are filled to an entire word with zeros instead of by sign-extension.
124:
125:
126: File: internals Node: Conversions, Prev: Bit Fields, Up: RTL, Next: RTL Declarations
127:
128: Conversions
129: ===========
130:
131: All conversions between machine modes must be represented by
132: explicit conversion operations. For example, an expression
133: which the sum of a byte and a full word cannot be written as
134: `(plus:SI (reg:QI 34) (reg:SI 80))' because the `plus'
135: operation requires two operands of the same machine mode.
136: Therefore, the byte-sized operand is enclosed in a conversion
137: operation, as in
138:
139: (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
140:
141: The conversion operation is not a mere placeholder, because there
142: may be more than one way of converting from a given starting mode
143: to the desired final mode. The conversion operation code says how
144: to do it.
145:
146: `(sign_extend:M X)'
147: Represents the result of sign-extending the value X
148: to machine mode M. M must be a fixed-point mode
149: and X a fixed-point value of a mode narrower than M.
150:
151: `(zero_extend:M X)'
152: Represents the result of zero-extending the value X
153: to machine mode M. M must be a fixed-point mode
154: and X a fixed-point value of a mode narrower than M.
155:
156: `(float_extend:M X)'
157: Represents the result of extending the value X
158: to machine mode M. M must be a floating point mode
159: and X a floating point value of a mode narrower than M.
160:
161: `(truncate:M X)'
162: Represents the result of truncating the value X
163: to machine mode M. M must be a fixed-point mode
164: and X a fixed-point value of a mode wider than M.
165:
166: `(float_truncate:M X)'
167: Represents the result of truncating the value X
168: to machine mode M. M must be a floating point mode
169: and X a floating point value of a mode wider than M.
170:
171: `(float:M X)'
172: Represents the result of converting fixed point value X
173: to floating point mode M.
174:
175: `(fix:M X)'
176: Represents the result of converting floating point value X
177: to fixed point mode M. How rounding is done is not specified.
178:
179:
180:
181: File: internals Node: RTL Declarations, Prev: Conversions, Up: RTL, Next: Side Effects
182:
183: Declarations
184: ============
185:
186: Declaration expression codes do not represent arithmetic operations
187: but rather state assertions about their operands.
188:
189: `(volatile:M X)'
190: Represents the same value X does, but makes the assertion
191: that it should be treated as a volatile value. This forbids
192: coalescing multiple accesses or deleting them even if it would
193: appear to have no effect on the program. X must be a `mem'
194: expression with mode M.
195:
196: The first thing the reload pass does to an insn is to remove all
197: `volatile' expressions from it; each one is replaced by its
198: operand.
199:
200: Recognizers will never recognize anything with `volatile' in it.
201: This automatically prevents some optimizations on such things
202: (such as instruction combination). After the reload pass removes
203: all volatility information, the insns can be recognized.
204:
205: Cse removes `volatile' from destinations of `set''s, because
206: no optimizations reorder such `set's. This is not required for
207: correct code and is done to permit some optimization on the value to
208: be stored.
209:
210: `(unchanging:M X)'
211: Represents the same value X does, but makes the assertion
212: that its value is effectively constant during the execution
213: of the current function. This permits references to X
214: to be moved freely within the function. X must be a `reg'
215: expression with mode M.
216:
217: `(strict_low_part (subreg:M (reg:N R) 0))'
218: This expression code is used in only one context: operand 0 of a
219: `set' expression. In addition, the operand of this expression
220: must be a `subreg' expression.
221:
222: The presence of `strict_low_part' says that the part of the
223: register which is meaningful in mode N but is not part of
224: mode M is not to be altered. Normally, an assignment to such
225: a subreg is allowed to have undefined effects on the rest of the
226: register when M is less than a word.
227:
228:
229: File: internals Node: Side Effects, Prev: RTL Declarations, Up: RTL, Next: Incdec
230:
231: Side Effect Expressions
232: =======================
233:
234: The expression codes described so far represent values, not actions.
235: But machine instructions never produce values; they are meaningful
236: only for their side effects on the state of the machine. Special
237: expression codes are used to represent side effects.
238:
239: The body of an instruction is always one of these side effect codes;
240: the codes described above, which represent values, appear only as
241: the operands of these.
242:
243: `(set LVAL X)'
244: Represents the action of storing the value of X into the place
245: represented by LVAL. LVAL must be an expression
246: representing a place that can be stored in: `reg' (or
247: `subreg' or `strict_low_part'), `mem', `pc' or
248: `cc0'.
249:
250: If LVAL is a `reg', `subreg' or `mem', it has a
251: machine mode; then X must be valid for that mode.
252:
253: If LVAL is a `reg' whose machine mode is less than the full
254: width of the register, then it means that the part of the register
255: specified by the machine mode is given the specified value and the
256: rest of the register receives an undefined value. Likewise, if
257: LVAL is a `subreg' whose machine mode is narrower than
258: `SImode', the rest of the register can be changed in an undefined way.
259:
260: If LVAL is a `strict_low_part' of a `subreg', then the
261: part of the register specified by the machine mode of the
262: `subreg' is given the value X and the rest of the register
263: is not changed.
264:
265: If LVAL is `(cc0)', it has no machine mode, and X may
266: have any mode. This represents a "test" or "compare" instruction.
267:
268: If LVAL is `(pc)', we have a jump instruction, and the
269: possibilities for X are very limited. It may be a
270: `label_ref' expression (unconditional jump). It may be an
271: `if_then_else' (conditional jump), in which case either the
272: second or the third operand must be `(pc)' (for the case which
273: does not jump) and the other of the two must be a `label_ref'
274: (for the case which does jump). X may also be a `mem' or
275: `(plus:SI (pc) Y)', where Y may be a `reg' or a
276: `mem'; these unusual patterns are used to represent jumps through
277: branch tables.
278:
279: `(return)'
280: Represents a return from the current function, on machines where
281: this can be done with one instruction, such as Vaxen. On machines
282: where a multi-instruction "epilogue" must be executed in order
283: to return from the function, returning is done by jumping to a
284: label which precedes the epilogue, and the `return' expression
285: code is never used.
286:
287: `(call FUNCTION NARGS)'
288: Represents a function call. FUNCTION is a `mem' expression
289: whose address is the address of the function to be called. NARGS
290: is an expression representing the number of words of argument.
291:
292: Each machine has a standard machine mode which FUNCTION must
293: have. The machine descripion defines macro `FUNCTION_MODE' to
294: expand into the requisite mode name. The purpose of this mode is to
295: specify what kind of addressing is allowed, on machines where the
296: allowed kinds of addressing depend on the machine mode being
297: addressed.
298:
299: `(clobber X)'
300: Represents the storing or possible storing of an unpredictable,
301: undescribed value into X, which must be a `reg' or
302: `mem' expression.
303:
304: One place this is used is in string instructions that store standard
305: values into particular hard registers. It may not be worth the
306: trouble to describe the values that are stored, but it is essential
307: to inform the compiler that the registers will be altered, lest it
308: attempt to keep data in them across the string instruction.
309:
310: X may also be null---a null C pointer, no expression at all.
311: Such a `(clobber (null))' expression means that all memory
312: locations must be presumed clobbered.
313:
314: Note that the machine description classifies certain hard registers as
315: "call-clobbered". All function call instructions are assumed by
316: default to clobber these registers, so there is no need to use
317: `clobber' expressions to indicate this fact. Also, each function
318: call is assumed to have the potential to alter any memory location.
319:
320: `(use X)'
321: Represents the use of the value of X. It indicates that
322: the value in X at this point in the program is needed,
323: even though it may not be apparent whythis is so. Therefore, the
324: compiler will not attempt to delete instructions whose only
325: effect is to store a value in X. X must be a `reg'
326: expression.
327:
328: `(parallel [X0 X1 ...])'
329: Represents several side effects performed in parallel. The square
330: brackets stand for a vector; the operand of `parallel' is a
331: vector of expressions. X0, X1 and so on are individual
332: side effects---expressions of code `set', `call',
333: `return', `clobber' or `use'.
334:
335: "In parallel" means that first all the values used in
336: the individual side-effects are computed, and second all the actual
337: side-effects are performed. For example,
338:
339: (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
340: (set (mem:SI (reg:SI 1)) (reg:SI 1))])
341:
342: says unambiguously that the values of hard register 1 and the memory
343: location addressed by it are interchanged. In both places where
344: `(reg:SI 1)' appears as a memory address it refers to the value
345: in register 1 before the execution of the instruction.
346:
347: Three expression codes appear in place of a side effect, as the body
348: of an insn, though strictly speaking they do not describe side effects
349: as such:
350:
351: `(asm_input S)'
352: Represents literal assembler code as described by the string S.
353:
354: `(addr_vec:M [LR0 LR1 ...])'
355: Represents a table of jump addresses. LR0 etc. are
356: `label_ref' expressions. The mode M specifies how much
357: space is given to each address; normally M would be
358: `Pmode'.
359:
360: `(addr_diff_vec:M BASE [LR0 LR1 ...])'
361: Represents a table of jump addresses expressed as offsets from
362: BASE. LR0 etc. are `label_ref' expressions and so is
363: BASE. The mode M specifies how much space is given to
364: each address-difference.
365:
366:
367: File: internals Node: Incdec, Prev: Side Effects, Up: RTL, Next: Insns
368:
369: Embedded Side-Effects on Addresses
370: ==================================
371:
372: Four special side-effect expression codes appear as memory addresses.
373:
374: `(pre_dec:M X)'
375: Represents the side effect of decrementing X by a standard
376: amount and represents also the value that X has after being
377: decremented. X must be a `reg' or `mem', but most
378: machines allow only a `reg'. M must be the machine mode
379: for pointers on the machine in use. The amount X is decrement
380: by is the length in bytes of the machine mode of the containing memory
381: reference of which this expression serves as the address. Here is an
382: example of its use:
383:
384: (mem:DF (pre_dec:SI (reg:SI 39)))
385:
386: This says to decrement pseudo register 39 by the length of a `DFmode'
387: value and use the result to address a `DFmode' value.
388:
389: `(pre_inc:M X)'
390: Similar, but specifies incrementing X instead of decrementing it.
391:
392: `(post_dec:M X)'
393: Represents the same side effect as `pre_decrement' but a different
394: value. The value represented here is the value X has before
395: being decremented.
396:
397: `(post_inc:M X)'
398: Similar, but specifies incrementing X instead of decrementing it.
399:
400: These embedded side effect expressions must be used with care. Instruction
401: patterns may not use them. Until the `flow' pass of the compiler,
402: they may occur only to represent pushes onto the stack. The `flow'
403: pass finds cases where registers are incremented or decremented in one
404: instruction and used as an address shortly before or after; these cases are
405: then transformed to use pre- or post-increment or -decrement.
406:
407: Explicit popping of the stack could be represented with these embedded
408: side effect operators, but that would not be safe; the instruction
409: combination pass could move the popping past pushes, thus changing
410: the meaning of the code.
411:
412: An instruction that can be represented with an embedded side effect
413: could also be represented using `parallel' containing an additional
414: `set' to describe how the address register is altered. This is not
415: done because machines that allow these operations at all typically
416: allow them wherever a memory address is called for. Describing them as
417: additional parallel stores would require doubling the number of entries
418: in the machine description.
419:
420:
421: File: internals Node: Insns, Prev: Incdec, Up: RTL, Next: Sharing
422:
423: Insns
424: =====
425:
426: The RTL representation of the code for a function is a doubly-linked
427: chain of objects called "insns". Insns are expressions with
428: special codes that are used for no other purpose. Some insns are
429: actual instructions; others represent dispatch tables for `switch'
430: statements; others represent labels to jump to or various sorts of
431: declaratory information.
432:
433: In addition to its own specific data, each insn must have a unique id number
434: that distinguishes it from all other insns in the current function, and
435: chain pointers to the preceding and following insns. These three fields
436: occupy the same position in every insn, independent of the expression code
437: of the insn. They could be accessed with `XEXP' and `XINT',
438: but instead three special macros are always used:
439:
440: `INSN_UID (I)'
441: Accesses the unique id of insn I.
442:
443: `PREV_INSN (I)'
444: Accesses the chain pointer to the insn preceding I.
445: If I is the first insn, this is a null pointer.
446:
447: `NEXT_INSN (I)'
448: Accesses the chain pointer to the insn following I.
449: If I is the last insn, this is a null pointer.
450:
451: The `NEXT_INSN' and `PREV_INSN' pointers must always
452: correspond: if I is not the first insn,
453:
454: NEXT_INSN (PREV_INSN (INSN)) == INSN
455:
456: is always true.
457:
458: Every insn has one of the following six expression codes:
459:
460: `insn'
461: The expression code `insn' is used for instructions that do not jump
462: and do not do function calls. Insns with code `insn' have four
463: additional fields beyond the three mandatory ones listed above.
464: These four are described in a table below.
465:
466: `jump_insn'
467: The expression code `jump_insn' is used for instructions that may jump
468: (or, more generally, may contain `label_ref' expressions).
469: `jump_insn' insns have the same extra fields as `insn' insns,
470: accessed in the same way.
471:
472: `call_insn'
473: The expression code `call_insn' is used for instructions that may do
474: function calls. It is important to distinguish these instructions because
475: they imply that certain registers and memory locations may be altered
476: unpredictably.
477:
478: `call_insn' insns have the same extra fields as `insn' insns,
479: accessed in the same way.
480:
481: `code_label'
482: A `code_label' insn represents a label that a jump insn can jump to.
483: It contains one special field of data in addition to the three standard ones.
484: It is used to hold the "label number", a number that identifies this
485: label uniquely among all the labels in the compilation (not just in the
486: current function). Ultimately, the label is represented in the assembler
487: output as an assembler label `LN' where N is the label number.
488:
489: `barrier'
490: Barriers are placed in the instruction stream after unconditional
491: jump instructions to indicate that the jumps are unconditional.
492: They contain no information beyond the three standard fields.
493:
494: `note'
495: `note' insns are used to represent additional debugging and
496: declaratory information. They contain two nonstandard fields, an
497: integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
498: string accessed with `NOTE_SOURCE_FILE'.
499:
500: If `NOTE_LINE_NUMBER' is positive, the note represents the
501: position of a source line and `NOTE_SOURCE_FILE' is the source file name
502: that the line came from. These notes control generation of line
503: number data in the assembler output.
504:
505: Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
506: code with one of the following values (and `NOTE_SOURCE_FILE'
507: must contain a null pointer):
508:
509: `NOTE_INSN_DELETED'
510: Such a note is completely ignorable. Some passes of the compiler
511: delete insns by altering them into notes of this kind.
512:
513: `NOTE_INSN_BLOCK_BEG'
514: `NOTE_INSN_BLOCK_END'
515: These types of notes indicate the position of the beginning and end
516: of a level of scoping of variable names. They control the output
517: of debugging information.
518:
519: `NOTE_INSN_LOOP_BEG'
520: `NOTE_INSN_LOOP_END'
521: These types of notes indicate the position of the beginning and end
522: of a `while' or `for' loop. They enable the loop optimizer
523: to find loops quickly.
524:
525: Here is a table of the extra fields of `insn', `jump_insn'
526: and `call_insn' insns:
527:
528: `PATTERN (I)'
529: An expression for the side effect performed by this insn.
530:
531: `REG_NOTES (I)'
532: A list (chain of `expr_list' expressions) giving information
533: about the usage of registers in this insn. This list is set up by the
534: `flow' pass; it is a null pointer until then.
535:
536: `LOG_LINKS (I)'
537: A list (chain of `insn_list' expressions) of previous "related"
538: insns: insns which store into registers values that are used for the
539: first time in this insn. (An additional constraint is that neither a
540: jump nor a label may come between the related insns). This list is
541: set up by the `flow' pass; it is a null pointer until then.
542:
543: `INSN_CODE (I)'
544: An integer that says which pattern in the machine description matches
545: this insn, or -1 if the matching has not yet been attempted.
546:
547: Such matching is never attempted and this field is not used on an insn
548: whose pattern consists of a single `use', `clobber',
549: `asm', `addr_vec' or `addr_diff_vec' expression.
550:
551: The `LOG_LINKS' field of an insn is a chain of `insn_list'
552: expressions. Each of these has two operands: the first is an insn,
553: and the second is another `insn_list' expression (the next one in
554: the chain). The last `insn_list' in the chain has a null pointer
555: as second operand. The significant thing about the chain is which
556: insns apepar in it (as first operands of `insn_list'
557: expressions). Their order is not significant.
558:
559: The `REG_NOTES' field of an insn is a similar chain but of
560: `expr_list' expressions instead of `insn_list'. The first
561: operand is a `reg' rtx. Its presence in the list can have three
562: possible meanings, distinguished by a value that is stored in the
563: machine-mode field of the `expr_list' because that is a
564: conveniently available space, but that is not really a machine mode.
565: These values belong to the C type `enum reg_note' and there are
566: three of them:
567:
568: `REG_DEAD'
569: The `reg' listed dies in this insn; that is to say, altering
570: the value immediately after this insn would not affect the future
571: behavior of the program.
572:
573: `REG_INC'
574: The `reg' listed is incremented (or decremented; at this level
575: there is no distinction) by an embedded side effect inside this insn.
576:
577: `REG_CONST'
578: The `reg' listed has a value that could safely be replaced
579: everywhere by the value that this insn copies into it. ("Safety"
580: here refers to the data flow of the program; such replacement may
581: require reloading into registers for some of the insns in which
582: the `reg' is replaced.)
583:
584: `REG_WAS_0'
585: The `reg' listed contained zero before this insn. You can rely
586: on this note if it is present; its absence implies nothing.
587:
588: (The only difference between the expression codes `insn_list' and
589: `expr_list' is that the first operand of an `insn_list' is
590: assumed to be an insn and is printed in debugging dumps as the insn's
591: unique id; the first operand of an `expr_list' is printed in the
592: ordinary way as an expression.)
593:
594:
595: File: internals Node: Sharing, Prev: Insns, Up: RTL
596:
597: Structure Sharing Assumptions
598: =============================
599:
600: The compiler assumes that certain kinds of RTL expressions are unique;
601: there do not exist two distinct objects representing the same value.
602: In other cases, it makes an opposite assumption: that no RTL expression
603: object of a certain kind appears in more than one place in the
604: containing structure.
605:
606: These assumptions refer to a single function; except for the RTL
607: objects that describe global variables and external functions,
608: no RTL objects are common to two functions.
609:
610: * Each pseudo-register has only a single `reg' object to represent it,
611: and therefore only a single machine mode.
612:
613: * For any symbolic label, there is only one `symbol_ref' object
614: referring to it.
615:
616: * There is only one `const_int' expression with value zero,
617: and only one with value one.
618:
619: * There is only one `pc' expression.
620:
621: * There is only one `cc0' expression.
622:
623: * There is only one `const_double' expression with mode
624: `SFmode' and value zero, and only one with mode `DFmode' and
625: value zero.
626:
627: * No `label_ref' appears in more than one place in the RTL structure;
628: in other words, it is safe to do a tree-walk of all the insns in the function
629: and assume that each time a `label_ref' is seen it is distinct from all
630: other `label_refs' seen.
631:
632: * Aside from the cases listed above, the only kind of expression
633: object that may appear in more than one place is the `mem'
634: object that describes a stack slot or a static variable.
635:
636:
637: File: internals Node: Machine Desc, Prev: RTL, Up: Top, Next: Machine Macros
638:
639: Machine Descriptions
640: ********************
641:
642: A machine description has two parts: a file of instruction patterns
643: (`.md' file) and a C header file of macro definitions.
644:
645: The `.md' file for a target machine contains a pattern for each
646: instruction that the target machine supports (or at least each instruction
647: that is worth telling the compiler about). It may also contain comments.
648: A semicolon causes the rest of the line to be a comment, unless the semicolon
649: is inside a quoted string.
650:
651: See the next chapter for information on the C header file.
652:
653: * Menu:
654:
655: * Patterns:: How to write instruction patterns.
656: * Example:: Example of an instruction pattern.
657: * Constraints:: When not all operands are general operands.
658: * Standard Names:: Names mark patterns to use for code generation.
659: * Dependent Patterns:: Having one pattern may make you need another.
660:
661:
662: File: internals Node: Patterns, Prev: Machine Desc, Up: Machine Desc, Next: Example
663:
664: Instruction Patterns
665: ====================
666:
667: Each instruction pattern contains an incomplete RTL expression, with pieces
668: to be filled in later, operand constraints that restrict how the pieces can
669: be filled in, and an output pattern or C code to generate the assembler
670: output, all wrapped up in a `define_insn' expression.
671:
672: Sometimes an insn can match more than one instruction pattern. Then the
673: pattern that appears first in the machine description is the one used.
674: Therefore, more specific patterns should usually go first in the
675: description.
676:
677: The `define_insn' expression contains four operands:
678:
679: 1. An optional name. The presence of a name indicate that this instruction
680: pattern can perform a certain standard job for the RTL-generation
681: pass of the compiler. This pass knows certain names and will use
682: the instruction patterns with those names, if the names are defined
683: in the machine description.
684:
685: The absence of a name is indicated by writing an empty string
686: where the name should go. Nameless instruction patterns are never
687: used for generating RTL code, but they may permit several simpler insns
688: to be combined later on.
689:
690: Names that are not thus known and used in RTL-generation have no
691: effect; they are equivalent to no name at all.
692:
693: 2. The recognition template. This is a vector of incomplete RTL
694: expressions which show what the instruction should look like. It is
695: incomplete because it may contain `match_operand' and
696: `match_dup' expressions that stand for operands of the
697: instruction.
698:
699: If the vector has only one element, that element is what the
700: instruction should look like. If the vector has multiple elements,
701: then the instruction looks like a `parallel' expression
702: containing that many elements as described.
703:
704: 3. A condition. This is a string which contains a C expression that is
705: the final test to decide whether an insn body matches this pattern.
706:
707: For a named pattern, the condition (if present) may not depend on
708: the data in the insn being matched, but only the target-machine-type
709: flags. The compiler needs to test these conditions during
710: initialization in order to learn exactly which named instructions are
711: available in a particular run.
712:
713: For nameless patterns, the condition is applied only when matching an
714: individual insn, and only after the insn has matched the pattern's
715: recognition template. The insn's operands may be found in the vector
716: `operands'.
717:
718: 4. A string that says how to output matching insns as assembler code. In
719: the simpler case, the string is an output template, much like a
720: `printf' control string. `%' in the string specifies where
721: to insert the operands of the instruction; the `%' is followed by
722: a single-digit operand number.
723:
724: `%cDIGIT' can be used to subtitute an operand that is a
725: constant value without the syntax that normally indicates an immediate
726: operand.
727:
728: `%aDIGIT' can be used to substitute an operand as if it
729: were a memory reference, with the actual operand treated as the address.
730: This may be useful when outputting a "load address" instruction,
731: because often the assembler syntax for such an instruction requires
732: you to write the operand as if it were a memory reference.
733:
734: The template may generate multiple assembler instructions.
735: Write the text for the instructions, with `\;' between them.
736:
737: If the output control string starts with a `*', then it is not an
738: output template but rather a piece of C program that should compute a
739: template. It should execute a `return' statement to return the
740: template-string you want. Most such templates use C string literals,
741: which require doublequote characters to delimit them. To include
742: these doublequote characters in the string, prefix each one with
743: `\'.
744:
745: The operands may be found in the array `operands', whose C
746: data type is `rtx []'.
747:
748: It is possible to output an assembler instruction and then go on to
749: output or compute more of them, using the subroutine
750: `output_asm_insn'. This receives two arguments: a
751: template-string and a vector of operands. The vector may be
752: `operands', or it may be another array of `rtx' that you
753: declare locally and initialize yourself.
754:
755: The recognition template is used also, for named patterns, for
756: constructing insns. Construction involves substituting specified
757: operands into a copy of the template. Matching involves determining
758: the values that serve as the operands in the insn being matched. Both
759: of these activities are controlled by two special expression types
760: that direct matching and substitution of the operands.
761:
762: `(match_operand:M N TESTFN CONSTRAINT)'
763: This expression is a placeholder for operand number N of
764: the insn. When constructing an insn, operand number N
765: will be substituted at this point. When matching an insn, whatever
766: appears at this position in the insn will be taken as operand
767: number N; but it must satisfy TESTFN or this instruction
768: pattern will not match at all.
769:
770: Operand numbers must be chosen consecutively counting from zero in
771: each instruction pattern. There may be only one `match_operand'
772: expression in the pattern for each expression number, and they must
773: appear in order of increasing expression number.
774:
775: TESTFN is a string that is the name of a C function that accepts
776: two arguments, a machine mode and an expression. During matching,
777: the function will be called with M as the mode argument
778: and the putative operand as the other argument. If it returns zero,
779: this instruction pattern fails to match. TESTFN may be
780: an empty string; then it means no test is to be done on the operand.
781:
782: Most often, TESTFN is `"general_operand"'. It checks
783: that the putative operand is either a constant, a register or a
784: memory reference, and that it is valid for mode M.
785:
786: CONSTRAINT is explained later.
787:
788: `(match_dup N)'
789: This expression is also a placeholder for operand number N.
790: It is used when the operand needs to appear more than once in the
791: insn.
792:
793: In construction, `match_dup' behaves exactly like
794: MATCH_OPERAND: the operand is substituted into the insn being
795: constructed. But in matching, `match_dup' behaves differently.
796: It assumes that operand number N has already been determined by
797: a `match_operand' apparing earlier in the recognition template,
798: and it matches only an identical-looking expression.
799:
800: `(address (match_operand:M N "address_operand" ""))'
801: This complex of expressions is a placeholder for an operand number
802: N in a "load address" instruction: an operand which specifies
803: a memory location in the usual way, but for which the actual operand
804: value used is the address of the location, not the contents of the
805: location.
806:
807: `address' expressions never appear in RTL code, only in machine
808: descriptions. And they are used only in machine descriptions that do
809: not use the operand constraint feature. When operand constraints are
810: in use, the letter `p' in the constraint serves this purpose.
811:
812: M is the machine mode of the *memory location being
813: addressed*, not the machine mode of the address itself. That mode is
814: always the same on a given target machine (it is `Pmode', which
815: normally is `SImode'), so there is no point in mentioning it;
816: thus, no machine mode is written in the `address' expression. If
817: some day support is added for machines in which addresses of different
818: kinds of objects appear differently or are used differently (such as
819: the PDP-10), different formats would perhaps need different machine
820: modes and these modes might be written in the `address'
821: expression.
822:
823:
824: File: internals Node: Example, Prev: Patterns, Up: Machine Desc, Next: Constraints
825:
826: Example of `define_insn'
827: ========================
828:
829: Here is an actual example of an instruction pattern, for the 68000/68020.
830:
831: (define_insn "tstsi"
832: [(set (cc0)
833: (match_operand:SI 0 "general_operand" "rm"))]
834: ""
835: "*
836: { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
837: return \"tstl %0\";
838: return \"cmpl #0,%0\"; }")
839:
840: This is an instruction that sets the condition codes based on the value of
841: a general operand. It has no condition, so any insn whose RTL description
842: has the form shown may be handled according to this pattern. The name
843: `tstsi' means "test a `SImode' value" and tells the RTL generation
844: pass that, when it is necessary to test such a value, an insn to do so
845: can be constructed using this pattern.
846:
847: The output control string is a piece of C code which chooses which
848: output template to return based on the kind of operand and the specific
849: type of CPU for which code is being generated.
850:
851: `"rm"' is an operand constraint. Its meaning is explained below.
852:
853:
854: File: internals Node: Constraints, Prev: Example, Up: Machine Desc, Next: Standard Names
855:
856: Operand Constraints
857: ===================
858:
859: Each `match_operand' in an instruction pattern can specify a
860: constraint for the type of operands allowed. Constraints can say whether
861: an operand may be in a register, and which kinds of register; whether the
862: operand can be a memory reference, and which kinds of address; whether the
863: operand may be an immediate constant, and which possible values it may
864: have. Constraints can also require two operands to match.
865:
866: * Menu:
867:
868: * Simple Constraints:: Basic use of constraints.
869: * Multi-alternative:: When an insn has two alternative constraint-patterns.
870: * Class Preferences:: Constraints guide which hard register to put things in.
871: * Modifiers:: More precise control over effects of constraints.
872: * No Constraints:: Describing a clean machine without constraints.
873:
874:
875: File: internals Node: Simple Constraints, Prev: Constraints, Up: Constraints, Next: Multi-Alternative
876:
877: Simple Constraints
878: ------------------
879:
880: The simplest kind of constraint is a string full of letters, each of
881: which describes one kind of operand that is permitted. Here are
882: the letters that are allowed:
883:
884: `m'
885: A memory operand is allowed, with any kind of address that the machine
886: supports in general.
887:
888: `o'
889: A memory operand is allowed, but only if the address is "offsetable".
890: This means that adding a small integer (actually, the width in bytes of the
891: operand, as determined by its machine mode) may be added to the address
892: and the result is also a valid memory address. For example, an address
893: which is constant is offsetable; so is an address that is the sum of
894: a register and a constant (as long as a slightly larger constant is also
895: within the range of address-offsets supported by the machine); but an
896: autoincrement or autodecrement address is not offsetable. More complicated
897: indirect/indexed addresses may or may not be offsetable depending on the
898: other addressing modes that the machine supports.
899:
900: `<'
901: A memory operand with autodecrement addressing (either predecrement or
902: postdecrement) is allowed.
903:
904: `>'
905: A memory operand with autoincrement addressing (either preincrement or
906: postincrement) is allowed.
907:
908: `r'
909: A register operand is allowed provided that it is in a general register.
910:
911: `d'
912: `a'
913: `f'
914: `...'
915: Other letters can be defined in machine-dependent fashion to stand for
916: particular classes of registers. `d', `a' and `f' are
917: defined on the 68000/68020 to stand for data, address and floating point
918: registers.
919:
920: `i'
921: An immediate integer operand (one with constant value) is allowed.
922:
923: `I'
924: `J'
925: `K'
926: `...'
927: Other letters in the range `I' through `M' may be defined in a
928: machine-dependent fashion to permit immediate integer operands with
929: explicit integer values in specified ranges. For example, on the 68000,
930: `I' is defined to stand for the range of values 1 to 8. This is the
931: range permitted as a shift count in the shift instructions.
932:
933: `F'
934: An immediate floating operand (expression code `const_double') is
935: allowed.
936:
937: `G'
938: `H'
939: `G' and `H' may be defined in a machine-dependent fashion to
940: permit immediate floating operands in particular ranges of values.
941:
942: `s'
943: An immediate integer operand whose value is not an explicit integer is
944: allowed. This might appear strange; if an insn allows a constant operand
945: with a value not known at compile time, it certainly must allow any known
946: value. So why use `s' instead of `i'? Sometimes it allows
947: better code to be generated. For example, on the 68000 in a fullword
948: instruction it is possible to use an immediate operand; but if the
949: immediate value is between -32 and 31, better code results from loading the
950: value into a register and using the register. This is because the load
951: into the register can be done with a `moveq' instruction. We arrange
952: for this to happen by defining the letter `K' to mean "any integer
953: outside the range -32 to 31", and then specifying `Ks' in the operand
954: constraints.
955:
956: `g'
957: Any register, memory or immediate integer operand is allowed, except for
958: registers that are not general registers.
959:
960: `N, a digit'
961: An operand identical to operand number N is allowed.
962: If a digit is used together with letters, the digit should come last.
963:
964: `p'
965: An operand that is a valid memory address is allowed. This is
966: for "load address" and "push address" instructions.
967:
968: If `p' is used in the constraint, the test-function in the
969: `match_operand' must be `address_operand'.
970:
971: In order to have valid assembler code, each operand must satisfy
972: its constraint. But a failure to do so does not prevent the pattern
973: from applying to an insn. Instead, it directs the compiler to modify
974: the code such that the constraint will be satisfied. Usually this is
975: done by copying an operand into a register.
976:
977: Contrast, therefore, the two instruction patterns that follow:
978:
979: (define_insn ""
980: [(set (match_operand:SI 0 "general_operand" "r")
981: (plus:SI (match_dup 0)
982: (match_operand:SI 1 "general_operand" "r")))]
983: ""
984: "...")
985:
986: which has two operands, one of which must appear in two places, and
987:
988: (define_insn ""
989: [(set (match_operand:SI 0 "general_operand" "r")
990: (plus:SI (match_operand:SI 1 "general_operand" "0")
991: (match_operand:SI 2 "general_operand" "r")))]
992: ""
993: "...")
994:
995: which has three operands, two of which are required by a constraint to be
996: identical. If we are considering an insn of the form
997:
998: (insn N PREV NEXT
999: (set (reg:SI 3)
1000: (plus:SI (reg:SI 6) (reg:SI 109)))
1001: ...)
1002:
1003: the first pattern would not apply at all, because this insn does not
1004: contain two identical subexpressions in the right place. The pattern would
1005: say, "That does not look like an add instruction; try other patterns."
1006: The second pattern would say, "Yes, that's an add instruction, but there
1007: is something wrong with it." It would direct the reload pass of the
1008: compiler to generate additional insns to make the constraint true. The
1009: results might look like this:
1010:
1011: (insn N2 PREV N
1012: (set (reg:SI 3) (reg:SI 6))
1013: ...)
1014:
1015: (insn N N2 NEXT
1016: (set (reg:SI 3)
1017: (plus:SI (reg:SI 3) (reg:SI 109)))
1018: ...)
1019:
1020: Because insns that don't fit the constraints are fixed up by loading
1021: operands into registers, every instruction pattern's constraints must
1022: permit the case where all the operands are in registers. It need not
1023: permit all classes of registers; the compiler knows how to copy registers
1024: into other registers of the proper class in order to make an instruction
1025: valid. But if no registers are permitted, the compiler will be stymied: it
1026: does not know how to save a register in memory in order to make an
1027: instruction valid. Instruction patterns that reject registers can be
1028: made valid by attaching a condition-expression that refuses to match
1029: an insn at all if the crucial operand is a register.
1030:
1031:
1032: File: internals Node: Multi-Alternative, Prev: Simple Constraints, Up: Constraints, Next: Class Preferences
1033:
1034: Multiple Alternative Constraints
1035: --------------------------------
1036:
1037: Sometimes a single instruction has multiple alternative sets of possible
1038: operands. For example, on the 68000, a logical-or instruction can combine
1039: register or an immediate value into memory, or it can combine any kind of
1040: operand into a register; but it cannot combine one memory location into
1041: another.
1042:
1043: These constraints are represented as multiple alternatives. An alternative
1044: can be described by a series of letters for each operand. The overall
1045: constraint for an operand is made from the letters for this operand
1046: from the first alternative, a comma, the letters for this operand from
1047: the second alternative, a comma, and so on until the last alternative.
1048: Here is how it is done for fullword logical-or on the 68000:
1049:
1050: (define_insn "iorsi3"
1051: [(set (match_operand:SI 0 "general_operand" "=%m,d")
1052: (ior:SI (match_operand:SI 1 "general_operand" "0,0")
1053: (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1054: ...)
1055:
1056: The first alternative has `m' (memory) for operand 0, `0' for
1057: operand 1 (meaning it must match operand 0), and `dKs' for operand 2.
1058: The second alternative has `d' (data register) for operand 0, `0'
1059: for operand 1, and `dmKs' for operand 2. The `=' and `%' in
1060: the constraint for operand 0 are not part of any alternative; their meaning
1061: is explained in the next section.
1062:
1063: If all the operands fit any one alternative, the instruction is valid.
1064: Otherwise, for each alternative, the compiler counts how many instructions
1065: must be added to copy the operands so that that alternative applies.
1066: The alternative requiring the least copying is chosen. If two alternatives
1067: need the same amount of copying, the one that comes first is chosen.
1068: These choices can be altered with the `?' and `!' characters:
1069:
1070: `?'
1071: Disparage slightly the alternative that the `?' appears in,
1072: as a choice when no alternative applies exactly. The compiler regards
1073: this alternative as one unit more costly for each `?' that appears
1074: in it.
1075:
1076: `!'
1077: Disparage severely the alternative that the `!' appears in.
1078: When operands must be copied into registers, the compiler will
1079: never choose this alternative as the one to strive for.
1080:
1081:
1082: File: internals Node: Class Preferences, Prev: Multi-Alternative, Up: Constraints, Next: Modifiers
1083:
1084: Register Class Preferences
1085: --------------------------
1086:
1087: The operand constraints have another function: they enable the compiler
1088: to decide which kind of hardware register a pseudo register is best
1089: allocated to. The compiler examines the constraints that apply to the
1090: insns that use the pseudo register, looking for the machine-dependent
1091: letters such as `d' and `a' that specify classes of registers.
1092: The pseudo register is put in whichever class gets the most "votes".
1093: The constraint letters `g' and `r' also vote: they vote in
1094: favor of a general register. The machine description says which registers
1095: are considered general.
1096:
1097: Of course, on some machines all registers are equivalent, and no register
1098: classes are defined. Then none of this complexity is relevant.
1099:
1100:
1101: File: internals Node: Modifiers, Prev: Class Preferences, Up: Constraints, Next: No Constraints
1102:
1103: Constraint Modifier Characters
1104: ------------------------------
1105:
1106: `='
1107: Means that this operand is written by the instruction, but its previous
1108: value is not used.
1109:
1110: `+'
1111: Means that this operand is both read and written by the instruction.
1112:
1113: When the compiler fixes up the operands to satisfy the constraints,
1114: it needs to know which operands are inputs to the instruction and
1115: which are outputs from it. `=' identifies an output; `+'
1116: identifies an operand that is both input and output; all other operands
1117: are assumed to be input only.
1118:
1119: `%'
1120: Declares the instruction to be commutative for operands 1 and 2.
1121: This means that the compiler may interchange operands 1 and 2
1122: if that will make the operands fit their constraints.
1123:
1124: `#'
1125: Says that all following characters, up to the next comma, are to be ignored
1126: as a constraint. They are significant only for choosing register preferences.
1127:
1128: `*'
1129: Says that the following character should be ignored when choosing
1130: register preferences. `*' has no effect on the meaning of
1131: the constraint as a constraint.
1132:
1133:
1134: File: internals Node: No Constraints, Prev: Modifiers, Up: Constraints
1135:
1136: Not Using Constraints
1137: ---------------------
1138:
1139: Some machines are so clean that operand constraints are not required. For
1140: example, on the Vax, an operand valid in one context is valid in any other
1141: context. On such a machine, every operand constraint would be `"g"',
1142: excepting only operands of "load address" instructions which are
1143: written as if they referred to a memory location's contents but actual
1144: refer to its address. They would have constraint `"p"'.
1145:
1146: For such machines, instead of writing `"g"' and `"p"' for all
1147: the constraints, you can choose to write a description with empty constraints.
1148: Then you write `""' for the constraint in every `match_operand'.
1149: Address operands are identified by writing an `address' expression
1150: around the `match_operand', not by their constraints.
1151:
1152: When the machine description has just empty constraints, certain parts
1153: of compilation are skipped, making the compiler faster.
1154:
1155:
1156: File: internals Node: Standard Names, Prev: Constraints, Up: Machine Desc, Next: Dependent Patterns
1157:
1158: Standard Insn Names
1159: ===================
1160:
1161: Here is a table of the instruction names that are meaningful in the RTL
1162: generation pass of the compiler. Giving one of these names to an
1163: instruction pattern tells the RTL generation pass that it can use the
1164: pattern in to accomplish a certain task.
1165:
1166: `movM'
1167: Here M is a two-letter machine mode name, in lower case. This
1168: instruction pattern moves data with that machine mode from operand 1 to
1169: operand 0. For example, `movsi' moves full-word data.
1170:
1171: If operand 0 is a `subreg' with mode M of a register whose
1172: natural mode is wider than M, the effect of this instruction is
1173: to store the specified value in the part of the register that corresponds
1174: to mode M. The effect on the rest of the register is undefined.
1175:
1176: `movstrictM'
1177: Like `movM' except that if operand 0 is a `subreg'
1178: with mode M of a register whose natural mode is wider,
1179: the `movstrictM' instruction is guaranteed not to alter
1180: any of the register except the part which belongs to mode M.
1181:
1182: `addM3'
1183: Add operand 2 and operand 1, storing the result in operand 0. All operands
1184: must have mode M. This can be used even on two-address machines, by
1185: means of constraints requiring operands 1 and 0 to be the same location.
1186:
1187: `subM3'
1188: `mulM3'
1189: `umulM3'
1190: `divM3'
1191: `udivM3'
1192: `modM3'
1193: `umodM3'
1194: `andM3'
1195: `iorM3'
1196: `xorM3'
1197: Similar, for other arithmetic operations.
1198:
1199: `andcbM3'
1200: Bitwise logical-and operand 1 with the complement of operand 2
1201: and store the result in operand 0.
1202:
1203: `mulhisi3'
1204: Multiply operands 1 and 2, which have mode `HImode', and store
1205: a `SImode' product in operand 0.
1206:
1207: `mulqihi3'
1208: `mulsidi3'
1209: Similar widening-multiplication instructions of other widths.
1210:
1211: `umulqihi3'
1212: `umulhisi3'
1213: `umulsidi3'
1214: Similar widening-multiplication instructions that do unsigned
1215: multiplication.
1216:
1217: `divmodM4'
1218: Signed division that produces both a quotient and a remainder.
1219: Operand 1 is divided by operand 2 to produce a quotient stored
1220: in operand 0 and a remainder stored in operand 3.
1221:
1222: `udivmodM4'
1223: Similar, but does unsigned division.
1224:
1225: `divmodMN4'
1226: Like `divmodM4' except that only the dividend has mode
1227: M; the divisor, quotient and remainder have mode N.
1228: For example, the Vax has a `divmoddisi4' instruction
1229: (but it is omitted from the machine description, because it
1230: is so slow that it is faster to compute remainders by the
1231: circumlocution that the compiler will use if this instruction is
1232: not available).
1233:
1234: `ashlM3'
1235: Arithmetic-shift operand 1 left by a number of bits specified by
1236: operand 2, and store the result in operand 0. Operand 2 has
1237: mode `SImode', not mode M.
1238:
1239: `ashrM3'
1240: `lshlM3'
1241: `lshrM3'
1242: `rotlM3'
1243: `rotrM3'
1244: Other shift and rotate instructions.
1245:
1246: `negM2'
1247: Negate operand 1 and store the result in operand 0.
1248:
1249: `absM2'
1250: Store the absolute value of operand 1 into operand 0.
1251:
1252: `sqrtM2'
1253: Store the square root of operand 1 into operand 0.
1254:
1255: `one_cmplM2'
1256: Store the bitwise-complement of operand 1 into operand 0.
1257:
1258: `cmpM'
1259: Compare operand 0 and operand 1, and set the condition codes.
1260:
1261: `tstM'
1262: Compare operand 0 against zero, and set the condition codes.
1263:
1264: `movstrM'
1265: Block move instruction. The addresses of the destination and source
1266: strings are the first two operands, and both are in mode `Pmode'.
1267: The number of bytes to move is the third operand, in mode M.
1268:
1269: `cmpstrM'
1270: Block compare instruction, with operands like `movstrM'
1271: except that the two memory blocks are compared byte by byte
1272: in lexicographic order. The effect of the instruction is to set
1273: the condition codes.
1274:
1275: `floatMN2'
1276: Convert operand 1 (valid for floating point mode M) to fixed
1277: point mode N and store in operand 0 (which has mode N).
1278:
1279: `fixMN2'
1280: Convert operand 1 (valid for fixed point mode M) to floating
1281: point mode N and store in operand 0 (which has mode N).
1282:
1283: `truncMN'
1284: Truncate operand 1 (valid for mode M) to mode N and
1285: store in operand 0 (which has mode N). Both modes must be fixed
1286: point or both floating point.
1287:
1288: `extendMN'
1289: Sign-extend operand 1 (valid for mode M) to mode N and
1290: store in operand 0 (which has mode N). Both modes must be fixed
1291: point or both floating point.
1292:
1293: `zero_extendMN'
1294: Zero-extend operand 1 (valid for mode M) to mode N and
1295: store in operand 0 (which has mode N). Both modes must be fixed
1296: point.
1297:
1298: `extv'
1299: Extract a bit-field from operand 1 (a register or memory operand),
1300: where operand 2 specifies the width in bits and operand 3 the starting
1301: bit, and store it in operand 0. Operand 0 must have `Simode'.
1302: Operand 1 may have mode `QImode' or `SImode'; often
1303: `SImode' is allowed only for registers. Operands 2 and 3 must be
1304: valid for `SImode'.
1305:
1306: The RTL generation pass generates this instruction only with constants
1307: for operands 2 and 3.
1308:
1309: The bit-field value is sign-extended to a full word integer
1310: before it is stored in operand 0.
1311:
1312: `extzv'
1313: Like `extv' except that the bit-field value is zero-extended.
1314:
1315: `insv'
1316: Store operand 3 (which must be valid for `SImode') into a
1317: bit-field in operand 0, where operand 1 specifies the width in bits
1318: and operand 2 the starting bit. Operand 0 may have mode `QImode'
1319: or `SImode'; often `SImode' is allowed only for registers.
1320: Operands 1 and 2 must be valid for `SImode'.
1321:
1322: The RTL generation pass generates this instruction only with constants
1323: for operands 1 and 2.
1324:
1325: `sCONDM'
1326: Store zero or -1 in the operand (with mode M) according to the
1327: condition codes. Value stored is -1 iff the condition COND is
1328: true. COND is the name of a comparison operation rtx code, such
1329: as `eq', `lt' or `leu'.
1330:
1331: `bCOND'
1332: Conditional branch instruction. Operand 0 is a `label_ref'
1333: that refers to the label to jump to. Jump if the condition codes
1334: meet condition COND.
1335:
1336: `call'
1337: Subroutine call instruction. Operand 1 is the number of arguments
1338: and operand 0 is the function to call. Operand 1 should be a `mem'
1339: rtx whose address is the address of the function.
1340:
1341: `return'
1342: Subroutine return instruction. This instruction pattern name should be
1343: defined only if a single instruction can do all the work of returning
1344: from a function.
1345:
1346: `tablejump'
1347: `caseM'
1348:
1349:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.