]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/md.texi
go-lang.c: Don't #include "except.h".
[thirdparty/gcc.git] / gcc / doc / md.texi
CommitLineData
d1e082c2 1@c Copyright (C) 1988-2013 Free Software Foundation, Inc.
03dda8e3
RK
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
5@ifset INTERNALS
6@node Machine Desc
7@chapter Machine Descriptions
8@cindex machine descriptions
9
10A machine description has two parts: a file of instruction patterns
11(@file{.md} file) and a C header file of macro definitions.
12
13The @file{.md} file for a target machine contains a pattern for each
14instruction that the target machine supports (or at least each instruction
15that is worth telling the compiler about). It may also contain comments.
16A semicolon causes the rest of the line to be a comment, unless the semicolon
17is inside a quoted string.
18
19See the next chapter for information on the C header file.
20
21@menu
55e4756f 22* Overview:: How the machine description is used.
03dda8e3
RK
23* Patterns:: How to write instruction patterns.
24* Example:: An explained example of a @code{define_insn} pattern.
25* RTL Template:: The RTL template defines what insns match a pattern.
26* Output Template:: The output template says how to make assembler code
6ccde948 27 from such an insn.
03dda8e3 28* Output Statement:: For more generality, write C code to output
6ccde948 29 the assembler code.
e543e219 30* Predicates:: Controlling what kinds of operands can be used
6ccde948 31 for an insn.
e543e219 32* Constraints:: Fine-tuning operand selection.
03dda8e3
RK
33* Standard Names:: Names mark patterns to use for code generation.
34* Pattern Ordering:: When the order of patterns makes a difference.
35* Dependent Patterns:: Having one pattern may make you need another.
36* Jump Patterns:: Special considerations for patterns for jump insns.
6e4fcc95 37* Looping Patterns:: How to define patterns for special looping insns.
03dda8e3 38* Insn Canonicalizations::Canonicalization of Instructions
03dda8e3 39* Expander Definitions::Generating a sequence of several RTL insns
6ccde948 40 for a standard operation.
f3a3d0d3 41* Insn Splitting:: Splitting Instructions into Multiple Instructions.
6ccde948 42* Including Patterns:: Including Patterns in Machine Descriptions.
f3a3d0d3 43* Peephole Definitions::Defining machine-specific peephole optimizations.
03dda8e3 44* Insn Attributes:: Specifying the value of attributes for generated insns.
3262c1f5 45* Conditional Execution::Generating @code{define_insn} patterns for
6ccde948 46 predication.
477c104e
MK
47* Define Subst:: Generating @code{define_insn} and @code{define_expand}
48 patterns from other patterns.
c25c12b8
R
49* Constant Definitions::Defining symbolic constants that can be used in the
50 md file.
3abcb3a7 51* Iterators:: Using iterators to generate patterns from a template.
03dda8e3
RK
52@end menu
53
55e4756f
DD
54@node Overview
55@section Overview of How the Machine Description is Used
56
57There are three main conversions that happen in the compiler:
58
59@enumerate
60
61@item
62The front end reads the source code and builds a parse tree.
63
64@item
65The parse tree is used to generate an RTL insn list based on named
66instruction patterns.
67
68@item
69The insn list is matched against the RTL templates to produce assembler
70code.
71
72@end enumerate
73
74For the generate pass, only the names of the insns matter, from either a
75named @code{define_insn} or a @code{define_expand}. The compiler will
76choose the pattern with the right name and apply the operands according
77to the documentation later in this chapter, without regard for the RTL
78template or operand constraints. Note that the names the compiler looks
d7d9c429 79for are hard-coded in the compiler---it will ignore unnamed patterns and
55e4756f
DD
80patterns with names it doesn't know about, but if you don't provide a
81named pattern it needs, it will abort.
82
83If a @code{define_insn} is used, the template given is inserted into the
84insn list. If a @code{define_expand} is used, one of three things
85happens, based on the condition logic. The condition logic may manually
86create new insns for the insn list, say via @code{emit_insn()}, and
aee96fe9 87invoke @code{DONE}. For certain named patterns, it may invoke @code{FAIL} to tell the
55e4756f
DD
88compiler to use an alternate way of performing that task. If it invokes
89neither @code{DONE} nor @code{FAIL}, the template given in the pattern
90is inserted, as if the @code{define_expand} were a @code{define_insn}.
91
92Once the insn list is generated, various optimization passes convert,
93replace, and rearrange the insns in the insn list. This is where the
94@code{define_split} and @code{define_peephole} patterns get used, for
95example.
96
97Finally, the insn list's RTL is matched up with the RTL templates in the
98@code{define_insn} patterns, and those patterns are used to emit the
99final assembly code. For this purpose, each named @code{define_insn}
100acts like it's unnamed, since the names are ignored.
101
03dda8e3
RK
102@node Patterns
103@section Everything about Instruction Patterns
104@cindex patterns
105@cindex instruction patterns
106
107@findex define_insn
108Each instruction pattern contains an incomplete RTL expression, with pieces
109to be filled in later, operand constraints that restrict how the pieces can
110be filled in, and an output pattern or C code to generate the assembler
111output, all wrapped up in a @code{define_insn} expression.
112
113A @code{define_insn} is an RTL expression containing four or five operands:
114
115@enumerate
116@item
117An optional name. The presence of a name indicate that this instruction
118pattern can perform a certain standard job for the RTL-generation
119pass of the compiler. This pass knows certain names and will use
120the instruction patterns with those names, if the names are defined
121in the machine description.
122
123The absence of a name is indicated by writing an empty string
124where the name should go. Nameless instruction patterns are never
125used for generating RTL code, but they may permit several simpler insns
126to be combined later on.
127
128Names that are not thus known and used in RTL-generation have no
129effect; they are equivalent to no name at all.
130
661cb0b7
RK
131For the purpose of debugging the compiler, you may also specify a
132name beginning with the @samp{*} character. Such a name is used only
133for identifying the instruction in RTL dumps; it is entirely equivalent
134to having a nameless pattern for all other purposes.
135
03dda8e3
RK
136@item
137The @dfn{RTL template} (@pxref{RTL Template}) is a vector of incomplete
138RTL expressions which show what the instruction should look like. It is
139incomplete because it may contain @code{match_operand},
140@code{match_operator}, and @code{match_dup} expressions that stand for
141operands of the instruction.
142
143If the vector has only one element, that element is the template for the
144instruction pattern. If the vector has multiple elements, then the
145instruction pattern is a @code{parallel} expression containing the
146elements described.
147
148@item
149@cindex pattern conditions
150@cindex conditions, in patterns
151A condition. This is a string which contains a C expression that is
152the final test to decide whether an insn body matches this pattern.
153
154@cindex named patterns and conditions
155For a named pattern, the condition (if present) may not depend on
156the data in the insn being matched, but only the target-machine-type
157flags. The compiler needs to test these conditions during
158initialization in order to learn exactly which named instructions are
159available in a particular run.
160
161@findex operands
162For nameless patterns, the condition is applied only when matching an
163individual insn, and only after the insn has matched the pattern's
164recognition template. The insn's operands may be found in the vector
fde6d81f
HPN
165@code{operands}. For an insn where the condition has once matched, it
166can't be used to control register allocation, for example by excluding
167certain hard registers or hard register combinations.
03dda8e3
RK
168
169@item
170The @dfn{output template}: a string that says how to output matching
171insns as assembler code. @samp{%} in this string specifies where
172to substitute the value of an operand. @xref{Output Template}.
173
174When simple substitution isn't general enough, you can specify a piece
175of C code to compute the output. @xref{Output Statement}.
176
177@item
178Optionally, a vector containing the values of attributes for insns matching
179this pattern. @xref{Insn Attributes}.
180@end enumerate
181
182@node Example
183@section Example of @code{define_insn}
184@cindex @code{define_insn} example
185
186Here is an actual example of an instruction pattern, for the 68000/68020.
187
3ab51846 188@smallexample
03dda8e3
RK
189(define_insn "tstsi"
190 [(set (cc0)
191 (match_operand:SI 0 "general_operand" "rm"))]
192 ""
193 "*
f282ffb3 194@{
0f40f9f7 195 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
03dda8e3 196 return \"tstl %0\";
f282ffb3 197 return \"cmpl #0,%0\";
0f40f9f7 198@}")
3ab51846 199@end smallexample
0f40f9f7
ZW
200
201@noindent
202This can also be written using braced strings:
203
3ab51846 204@smallexample
0f40f9f7
ZW
205(define_insn "tstsi"
206 [(set (cc0)
207 (match_operand:SI 0 "general_operand" "rm"))]
208 ""
f282ffb3 209@{
0f40f9f7
ZW
210 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
211 return "tstl %0";
f282ffb3 212 return "cmpl #0,%0";
0f40f9f7 213@})
3ab51846 214@end smallexample
03dda8e3
RK
215
216This is an instruction that sets the condition codes based on the value of
217a general operand. It has no condition, so any insn whose RTL description
218has the form shown may be handled according to this pattern. The name
219@samp{tstsi} means ``test a @code{SImode} value'' and tells the RTL generation
220pass that, when it is necessary to test such a value, an insn to do so
221can be constructed using this pattern.
222
223The output control string is a piece of C code which chooses which
224output template to return based on the kind of operand and the specific
225type of CPU for which code is being generated.
226
227@samp{"rm"} is an operand constraint. Its meaning is explained below.
228
229@node RTL Template
230@section RTL Template
231@cindex RTL insn template
232@cindex generating insns
233@cindex insns, generating
234@cindex recognizing insns
235@cindex insns, recognizing
236
237The RTL template is used to define which insns match the particular pattern
238and how to find their operands. For named patterns, the RTL template also
239says how to construct an insn from specified operands.
240
241Construction involves substituting specified operands into a copy of the
242template. Matching involves determining the values that serve as the
243operands in the insn being matched. Both of these activities are
244controlled by special expression types that direct matching and
245substitution of the operands.
246
247@table @code
248@findex match_operand
249@item (match_operand:@var{m} @var{n} @var{predicate} @var{constraint})
250This expression is a placeholder for operand number @var{n} of
251the insn. When constructing an insn, operand number @var{n}
252will be substituted at this point. When matching an insn, whatever
253appears at this position in the insn will be taken as operand
254number @var{n}; but it must satisfy @var{predicate} or this instruction
255pattern will not match at all.
256
257Operand numbers must be chosen consecutively counting from zero in
258each instruction pattern. There may be only one @code{match_operand}
259expression in the pattern for each operand number. Usually operands
260are numbered in the order of appearance in @code{match_operand}
72938a4c
MM
261expressions. In the case of a @code{define_expand}, any operand numbers
262used only in @code{match_dup} expressions have higher values than all
263other operand numbers.
03dda8e3 264
e543e219
ZW
265@var{predicate} is a string that is the name of a function that
266accepts two arguments, an expression and a machine mode.
267@xref{Predicates}. During matching, the function will be called with
268the putative operand as the expression and @var{m} as the mode
269argument (if @var{m} is not specified, @code{VOIDmode} will be used,
270which normally causes @var{predicate} to accept any mode). If it
271returns zero, this instruction pattern fails to match.
272@var{predicate} may be an empty string; then it means no test is to be
273done on the operand, so anything which occurs in this position is
274valid.
03dda8e3
RK
275
276Most of the time, @var{predicate} will reject modes other than @var{m}---but
277not always. For example, the predicate @code{address_operand} uses
278@var{m} as the mode of memory ref that the address should be valid for.
279Many predicates accept @code{const_int} nodes even though their mode is
280@code{VOIDmode}.
281
282@var{constraint} controls reloading and the choice of the best register
283class to use for a value, as explained later (@pxref{Constraints}).
e543e219 284If the constraint would be an empty string, it can be omitted.
03dda8e3
RK
285
286People are often unclear on the difference between the constraint and the
287predicate. The predicate helps decide whether a given insn matches the
288pattern. The constraint plays no role in this decision; instead, it
289controls various decisions in the case of an insn which does match.
290
03dda8e3
RK
291@findex match_scratch
292@item (match_scratch:@var{m} @var{n} @var{constraint})
293This expression is also a placeholder for operand number @var{n}
294and indicates that operand must be a @code{scratch} or @code{reg}
295expression.
296
297When matching patterns, this is equivalent to
298
299@smallexample
300(match_operand:@var{m} @var{n} "scratch_operand" @var{pred})
301@end smallexample
302
303but, when generating RTL, it produces a (@code{scratch}:@var{m})
304expression.
305
306If the last few expressions in a @code{parallel} are @code{clobber}
307expressions whose operands are either a hard register or
308@code{match_scratch}, the combiner can add or delete them when
309necessary. @xref{Side Effects}.
310
311@findex match_dup
312@item (match_dup @var{n})
313This expression is also a placeholder for operand number @var{n}.
314It is used when the operand needs to appear more than once in the
315insn.
316
317In construction, @code{match_dup} acts just like @code{match_operand}:
318the operand is substituted into the insn being constructed. But in
319matching, @code{match_dup} behaves differently. It assumes that operand
320number @var{n} has already been determined by a @code{match_operand}
321appearing earlier in the recognition template, and it matches only an
322identical-looking expression.
323
55e4756f
DD
324Note that @code{match_dup} should not be used to tell the compiler that
325a particular register is being used for two operands (example:
326@code{add} that adds one register to another; the second register is
327both an input operand and the output operand). Use a matching
328constraint (@pxref{Simple Constraints}) for those. @code{match_dup} is for the cases where one
329operand is used in two places in the template, such as an instruction
330that computes both a quotient and a remainder, where the opcode takes
331two input operands but the RTL template has to refer to each of those
332twice; once for the quotient pattern and once for the remainder pattern.
333
03dda8e3
RK
334@findex match_operator
335@item (match_operator:@var{m} @var{n} @var{predicate} [@var{operands}@dots{}])
336This pattern is a kind of placeholder for a variable RTL expression
337code.
338
339When constructing an insn, it stands for an RTL expression whose
340expression code is taken from that of operand @var{n}, and whose
341operands are constructed from the patterns @var{operands}.
342
343When matching an expression, it matches an expression if the function
344@var{predicate} returns nonzero on that expression @emph{and} the
345patterns @var{operands} match the operands of the expression.
346
347Suppose that the function @code{commutative_operator} is defined as
348follows, to match any expression whose operator is one of the
349commutative arithmetic operators of RTL and whose mode is @var{mode}:
350
351@smallexample
352int
ec8e098d 353commutative_integer_operator (x, mode)
03dda8e3
RK
354 rtx x;
355 enum machine_mode mode;
356@{
357 enum rtx_code code = GET_CODE (x);
358 if (GET_MODE (x) != mode)
359 return 0;
ec8e098d 360 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
03dda8e3
RK
361 || code == EQ || code == NE);
362@}
363@end smallexample
364
365Then the following pattern will match any RTL expression consisting
366of a commutative operator applied to two general operands:
367
368@smallexample
369(match_operator:SI 3 "commutative_operator"
370 [(match_operand:SI 1 "general_operand" "g")
371 (match_operand:SI 2 "general_operand" "g")])
372@end smallexample
373
374Here the vector @code{[@var{operands}@dots{}]} contains two patterns
375because the expressions to be matched all contain two operands.
376
377When this pattern does match, the two operands of the commutative
378operator are recorded as operands 1 and 2 of the insn. (This is done
379by the two instances of @code{match_operand}.) Operand 3 of the insn
380will be the entire commutative expression: use @code{GET_CODE
381(operands[3])} to see which commutative operator was used.
382
383The machine mode @var{m} of @code{match_operator} works like that of
384@code{match_operand}: it is passed as the second argument to the
385predicate function, and that function is solely responsible for
386deciding whether the expression to be matched ``has'' that mode.
387
388When constructing an insn, argument 3 of the gen-function will specify
e979f9e8 389the operation (i.e.@: the expression code) for the expression to be
03dda8e3
RK
390made. It should be an RTL expression, whose expression code is copied
391into a new expression whose operands are arguments 1 and 2 of the
392gen-function. The subexpressions of argument 3 are not used;
393only its expression code matters.
394
395When @code{match_operator} is used in a pattern for matching an insn,
396it usually best if the operand number of the @code{match_operator}
397is higher than that of the actual operands of the insn. This improves
398register allocation because the register allocator often looks at
399operands 1 and 2 of insns to see if it can do register tying.
400
401There is no way to specify constraints in @code{match_operator}. The
402operand of the insn which corresponds to the @code{match_operator}
403never has any constraints because it is never reloaded as a whole.
404However, if parts of its @var{operands} are matched by
405@code{match_operand} patterns, those parts may have constraints of
406their own.
407
408@findex match_op_dup
409@item (match_op_dup:@var{m} @var{n}[@var{operands}@dots{}])
410Like @code{match_dup}, except that it applies to operators instead of
411operands. When constructing an insn, operand number @var{n} will be
412substituted at this point. But in matching, @code{match_op_dup} behaves
413differently. It assumes that operand number @var{n} has already been
414determined by a @code{match_operator} appearing earlier in the
415recognition template, and it matches only an identical-looking
416expression.
417
418@findex match_parallel
419@item (match_parallel @var{n} @var{predicate} [@var{subpat}@dots{}])
420This pattern is a placeholder for an insn that consists of a
421@code{parallel} expression with a variable number of elements. This
422expression should only appear at the top level of an insn pattern.
423
424When constructing an insn, operand number @var{n} will be substituted at
425this point. When matching an insn, it matches if the body of the insn
426is a @code{parallel} expression with at least as many elements as the
427vector of @var{subpat} expressions in the @code{match_parallel}, if each
428@var{subpat} matches the corresponding element of the @code{parallel},
429@emph{and} the function @var{predicate} returns nonzero on the
430@code{parallel} that is the body of the insn. It is the responsibility
431of the predicate to validate elements of the @code{parallel} beyond
bd819a4a 432those listed in the @code{match_parallel}.
03dda8e3
RK
433
434A typical use of @code{match_parallel} is to match load and store
435multiple expressions, which can contain a variable number of elements
436in a @code{parallel}. For example,
03dda8e3
RK
437
438@smallexample
439(define_insn ""
440 [(match_parallel 0 "load_multiple_operation"
441 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
442 (match_operand:SI 2 "memory_operand" "m"))
443 (use (reg:SI 179))
444 (clobber (reg:SI 179))])]
445 ""
446 "loadm 0,0,%1,%2")
447@end smallexample
448
449This example comes from @file{a29k.md}. The function
9c34dbbf 450@code{load_multiple_operation} is defined in @file{a29k.c} and checks
03dda8e3
RK
451that subsequent elements in the @code{parallel} are the same as the
452@code{set} in the pattern, except that they are referencing subsequent
453registers and memory locations.
454
455An insn that matches this pattern might look like:
456
457@smallexample
458(parallel
459 [(set (reg:SI 20) (mem:SI (reg:SI 100)))
460 (use (reg:SI 179))
461 (clobber (reg:SI 179))
462 (set (reg:SI 21)
463 (mem:SI (plus:SI (reg:SI 100)
464 (const_int 4))))
465 (set (reg:SI 22)
466 (mem:SI (plus:SI (reg:SI 100)
467 (const_int 8))))])
468@end smallexample
469
470@findex match_par_dup
471@item (match_par_dup @var{n} [@var{subpat}@dots{}])
472Like @code{match_op_dup}, but for @code{match_parallel} instead of
473@code{match_operator}.
474
03dda8e3
RK
475@end table
476
477@node Output Template
478@section Output Templates and Operand Substitution
479@cindex output templates
480@cindex operand substitution
481
482@cindex @samp{%} in template
483@cindex percent sign
484The @dfn{output template} is a string which specifies how to output the
485assembler code for an instruction pattern. Most of the template is a
486fixed string which is output literally. The character @samp{%} is used
487to specify where to substitute an operand; it can also be used to
488identify places where different variants of the assembler require
489different syntax.
490
491In the simplest case, a @samp{%} followed by a digit @var{n} says to output
492operand @var{n} at that point in the string.
493
494@samp{%} followed by a letter and a digit says to output an operand in an
495alternate fashion. Four letters have standard, built-in meanings described
496below. The machine description macro @code{PRINT_OPERAND} can define
497additional letters with nonstandard meanings.
498
499@samp{%c@var{digit}} can be used to substitute an operand that is a
500constant value without the syntax that normally indicates an immediate
501operand.
502
503@samp{%n@var{digit}} is like @samp{%c@var{digit}} except that the value of
504the constant is negated before printing.
505
506@samp{%a@var{digit}} can be used to substitute an operand as if it were a
507memory reference, with the actual operand treated as the address. This may
508be useful when outputting a ``load address'' instruction, because often the
509assembler syntax for such an instruction requires you to write the operand
510as if it were a memory reference.
511
512@samp{%l@var{digit}} is used to substitute a @code{label_ref} into a jump
513instruction.
514
515@samp{%=} outputs a number which is unique to each instruction in the
516entire compilation. This is useful for making local labels to be
517referred to more than once in a single template that generates multiple
518assembler instructions.
519
520@samp{%} followed by a punctuation character specifies a substitution that
521does not use an operand. Only one case is standard: @samp{%%} outputs a
522@samp{%} into the assembler code. Other nonstandard cases can be
523defined in the @code{PRINT_OPERAND} macro. You must also define
524which punctuation characters are valid with the
525@code{PRINT_OPERAND_PUNCT_VALID_P} macro.
526
527@cindex \
528@cindex backslash
529The template may generate multiple assembler instructions. Write the text
530for the instructions, with @samp{\;} between them.
531
532@cindex matching operands
533When the RTL contains two operands which are required by constraint to match
534each other, the output template must refer only to the lower-numbered operand.
535Matching operands are not always identical, and the rest of the compiler
536arranges to put the proper RTL expression for printing into the lower-numbered
537operand.
538
539One use of nonstandard letters or punctuation following @samp{%} is to
540distinguish between different assembler languages for the same machine; for
541example, Motorola syntax versus MIT syntax for the 68000. Motorola syntax
542requires periods in most opcode names, while MIT syntax does not. For
543example, the opcode @samp{movel} in MIT syntax is @samp{move.l} in Motorola
544syntax. The same file of patterns is used for both kinds of output syntax,
545but the character sequence @samp{%.} is used in each place where Motorola
546syntax wants a period. The @code{PRINT_OPERAND} macro for Motorola syntax
547defines the sequence to output a period; the macro for MIT syntax defines
548it to do nothing.
549
550@cindex @code{#} in template
551As a special case, a template consisting of the single character @code{#}
552instructs the compiler to first split the insn, and then output the
553resulting instructions separately. This helps eliminate redundancy in the
554output templates. If you have a @code{define_insn} that needs to emit
e4ae5e77 555multiple assembler instructions, and there is a matching @code{define_split}
03dda8e3
RK
556already defined, then you can simply use @code{#} as the output template
557instead of writing an output template that emits the multiple assembler
558instructions.
559
560If the macro @code{ASSEMBLER_DIALECT} is defined, you can use construct
561of the form @samp{@{option0|option1|option2@}} in the templates. These
562describe multiple variants of assembler language syntax.
563@xref{Instruction Output}.
564
565@node Output Statement
566@section C Statements for Assembler Output
567@cindex output statements
568@cindex C statements for assembler output
569@cindex generating assembler output
570
571Often a single fixed template string cannot produce correct and efficient
572assembler code for all the cases that are recognized by a single
573instruction pattern. For example, the opcodes may depend on the kinds of
574operands; or some unfortunate combinations of operands may require extra
575machine instructions.
576
577If the output control string starts with a @samp{@@}, then it is actually
578a series of templates, each on a separate line. (Blank lines and
579leading spaces and tabs are ignored.) The templates correspond to the
580pattern's constraint alternatives (@pxref{Multi-Alternative}). For example,
581if a target machine has a two-address add instruction @samp{addr} to add
582into a register and another @samp{addm} to add a register to memory, you
583might write this pattern:
584
585@smallexample
586(define_insn "addsi3"
587 [(set (match_operand:SI 0 "general_operand" "=r,m")
588 (plus:SI (match_operand:SI 1 "general_operand" "0,0")
589 (match_operand:SI 2 "general_operand" "g,r")))]
590 ""
591 "@@
592 addr %2,%0
593 addm %2,%0")
594@end smallexample
595
596@cindex @code{*} in template
597@cindex asterisk in template
598If the output control string starts with a @samp{*}, then it is not an
599output template but rather a piece of C program that should compute a
600template. It should execute a @code{return} statement to return the
601template-string you want. Most such templates use C string literals, which
602require doublequote characters to delimit them. To include these
603doublequote characters in the string, prefix each one with @samp{\}.
604
0f40f9f7
ZW
605If the output control string is written as a brace block instead of a
606double-quoted string, it is automatically assumed to be C code. In that
607case, it is not necessary to put in a leading asterisk, or to escape the
608doublequotes surrounding C string literals.
609
03dda8e3
RK
610The operands may be found in the array @code{operands}, whose C data type
611is @code{rtx []}.
612
613It is very common to select different ways of generating assembler code
614based on whether an immediate operand is within a certain range. Be
615careful when doing this, because the result of @code{INTVAL} is an
616integer on the host machine. If the host machine has more bits in an
617@code{int} than the target machine has in the mode in which the constant
618will be used, then some of the bits you get from @code{INTVAL} will be
619superfluous. For proper results, you must carefully disregard the
620values of those bits.
621
622@findex output_asm_insn
623It is possible to output an assembler instruction and then go on to output
624or compute more of them, using the subroutine @code{output_asm_insn}. This
625receives two arguments: a template-string and a vector of operands. The
626vector may be @code{operands}, or it may be another array of @code{rtx}
627that you declare locally and initialize yourself.
628
629@findex which_alternative
630When an insn pattern has multiple alternatives in its constraints, often
631the appearance of the assembler code is determined mostly by which alternative
632was matched. When this is so, the C code can test the variable
633@code{which_alternative}, which is the ordinal number of the alternative
634that was actually satisfied (0 for the first, 1 for the second alternative,
635etc.).
636
637For example, suppose there are two opcodes for storing zero, @samp{clrreg}
638for registers and @samp{clrmem} for memory locations. Here is how
639a pattern could use @code{which_alternative} to choose between them:
640
641@smallexample
642(define_insn ""
643 [(set (match_operand:SI 0 "general_operand" "=r,m")
644 (const_int 0))]
645 ""
0f40f9f7 646 @{
03dda8e3 647 return (which_alternative == 0
0f40f9f7
ZW
648 ? "clrreg %0" : "clrmem %0");
649 @})
03dda8e3
RK
650@end smallexample
651
652The example above, where the assembler code to generate was
653@emph{solely} determined by the alternative, could also have been specified
654as follows, having the output control string start with a @samp{@@}:
655
656@smallexample
657@group
658(define_insn ""
659 [(set (match_operand:SI 0 "general_operand" "=r,m")
660 (const_int 0))]
661 ""
662 "@@
663 clrreg %0
664 clrmem %0")
665@end group
666@end smallexample
e543e219 667
94c765ab
R
668If you just need a little bit of C code in one (or a few) alternatives,
669you can use @samp{*} inside of a @samp{@@} multi-alternative template:
670
671@smallexample
672@group
673(define_insn ""
674 [(set (match_operand:SI 0 "general_operand" "=r,<,m")
675 (const_int 0))]
676 ""
677 "@@
678 clrreg %0
679 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\";
680 clrmem %0")
681@end group
682@end smallexample
683
e543e219
ZW
684@node Predicates
685@section Predicates
686@cindex predicates
687@cindex operand predicates
688@cindex operator predicates
689
690A predicate determines whether a @code{match_operand} or
691@code{match_operator} expression matches, and therefore whether the
692surrounding instruction pattern will be used for that combination of
693operands. GCC has a number of machine-independent predicates, and you
694can define machine-specific predicates as needed. By convention,
695predicates used with @code{match_operand} have names that end in
696@samp{_operand}, and those used with @code{match_operator} have names
697that end in @samp{_operator}.
698
699All predicates are Boolean functions (in the mathematical sense) of
700two arguments: the RTL expression that is being considered at that
701position in the instruction pattern, and the machine mode that the
702@code{match_operand} or @code{match_operator} specifies. In this
703section, the first argument is called @var{op} and the second argument
704@var{mode}. Predicates can be called from C as ordinary two-argument
705functions; this can be useful in output templates or other
706machine-specific code.
707
708Operand predicates can allow operands that are not actually acceptable
709to the hardware, as long as the constraints give reload the ability to
710fix them up (@pxref{Constraints}). However, GCC will usually generate
711better code if the predicates specify the requirements of the machine
712instructions as closely as possible. Reload cannot fix up operands
713that must be constants (``immediate operands''); you must use a
714predicate that allows only constants, or else enforce the requirement
715in the extra condition.
716
717@cindex predicates and machine modes
718@cindex normal predicates
719@cindex special predicates
720Most predicates handle their @var{mode} argument in a uniform manner.
721If @var{mode} is @code{VOIDmode} (unspecified), then @var{op} can have
722any mode. If @var{mode} is anything else, then @var{op} must have the
723same mode, unless @var{op} is a @code{CONST_INT} or integer
724@code{CONST_DOUBLE}. These RTL expressions always have
725@code{VOIDmode}, so it would be counterproductive to check that their
726mode matches. Instead, predicates that accept @code{CONST_INT} and/or
727integer @code{CONST_DOUBLE} check that the value stored in the
728constant will fit in the requested mode.
729
730Predicates with this behavior are called @dfn{normal}.
731@command{genrecog} can optimize the instruction recognizer based on
732knowledge of how normal predicates treat modes. It can also diagnose
733certain kinds of common errors in the use of normal predicates; for
734instance, it is almost always an error to use a normal predicate
735without specifying a mode.
736
737Predicates that do something different with their @var{mode} argument
738are called @dfn{special}. The generic predicates
739@code{address_operand} and @code{pmode_register_operand} are special
740predicates. @command{genrecog} does not do any optimizations or
741diagnosis when special predicates are used.
742
743@menu
744* Machine-Independent Predicates:: Predicates available to all back ends.
745* Defining Predicates:: How to write machine-specific predicate
746 functions.
747@end menu
748
749@node Machine-Independent Predicates
750@subsection Machine-Independent Predicates
751@cindex machine-independent predicates
752@cindex generic predicates
753
754These are the generic predicates available to all back ends. They are
755defined in @file{recog.c}. The first category of predicates allow
756only constant, or @dfn{immediate}, operands.
757
758@defun immediate_operand
759This predicate allows any sort of constant that fits in @var{mode}.
760It is an appropriate choice for instructions that take operands that
761must be constant.
762@end defun
763
764@defun const_int_operand
765This predicate allows any @code{CONST_INT} expression that fits in
766@var{mode}. It is an appropriate choice for an immediate operand that
767does not allow a symbol or label.
768@end defun
769
770@defun const_double_operand
771This predicate accepts any @code{CONST_DOUBLE} expression that has
772exactly @var{mode}. If @var{mode} is @code{VOIDmode}, it will also
773accept @code{CONST_INT}. It is intended for immediate floating point
774constants.
775@end defun
776
777@noindent
778The second category of predicates allow only some kind of machine
779register.
780
781@defun register_operand
782This predicate allows any @code{REG} or @code{SUBREG} expression that
783is valid for @var{mode}. It is often suitable for arithmetic
784instruction operands on a RISC machine.
785@end defun
786
787@defun pmode_register_operand
788This is a slight variant on @code{register_operand} which works around
789a limitation in the machine-description reader.
790
cd1a8088 791@smallexample
e543e219 792(match_operand @var{n} "pmode_register_operand" @var{constraint})
cd1a8088 793@end smallexample
e543e219
ZW
794
795@noindent
796means exactly what
797
cd1a8088 798@smallexample
e543e219 799(match_operand:P @var{n} "register_operand" @var{constraint})
cd1a8088 800@end smallexample
e543e219
ZW
801
802@noindent
803would mean, if the machine-description reader accepted @samp{:P}
804mode suffixes. Unfortunately, it cannot, because @code{Pmode} is an
805alias for some other mode, and might vary with machine-specific
8a36672b 806options. @xref{Misc}.
e543e219
ZW
807@end defun
808
809@defun scratch_operand
810This predicate allows hard registers and @code{SCRATCH} expressions,
811but not pseudo-registers. It is used internally by @code{match_scratch};
812it should not be used directly.
813@end defun
814
815@noindent
816The third category of predicates allow only some kind of memory reference.
817
818@defun memory_operand
819This predicate allows any valid reference to a quantity of mode
820@var{mode} in memory, as determined by the weak form of
821@code{GO_IF_LEGITIMATE_ADDRESS} (@pxref{Addressing Modes}).
822@end defun
823
824@defun address_operand
825This predicate is a little unusual; it allows any operand that is a
826valid expression for the @emph{address} of a quantity of mode
827@var{mode}, again determined by the weak form of
828@code{GO_IF_LEGITIMATE_ADDRESS}. To first order, if
829@samp{@w{(mem:@var{mode} (@var{exp}))}} is acceptable to
830@code{memory_operand}, then @var{exp} is acceptable to
831@code{address_operand}. Note that @var{exp} does not necessarily have
832the mode @var{mode}.
833@end defun
834
835@defun indirect_operand
836This is a stricter form of @code{memory_operand} which allows only
837memory references with a @code{general_operand} as the address
838expression. New uses of this predicate are discouraged, because
839@code{general_operand} is very permissive, so it's hard to tell what
840an @code{indirect_operand} does or does not allow. If a target has
841different requirements for memory operands for different instructions,
842it is better to define target-specific predicates which enforce the
843hardware's requirements explicitly.
844@end defun
845
846@defun push_operand
847This predicate allows a memory reference suitable for pushing a value
848onto the stack. This will be a @code{MEM} which refers to
849@code{stack_pointer_rtx}, with a side-effect in its address expression
850(@pxref{Incdec}); which one is determined by the
851@code{STACK_PUSH_CODE} macro (@pxref{Frame Layout}).
852@end defun
853
854@defun pop_operand
855This predicate allows a memory reference suitable for popping a value
856off the stack. Again, this will be a @code{MEM} referring to
857@code{stack_pointer_rtx}, with a side-effect in its address
858expression. However, this time @code{STACK_POP_CODE} is expected.
859@end defun
860
861@noindent
862The fourth category of predicates allow some combination of the above
863operands.
864
865@defun nonmemory_operand
866This predicate allows any immediate or register operand valid for @var{mode}.
867@end defun
868
869@defun nonimmediate_operand
870This predicate allows any register or memory operand valid for @var{mode}.
871@end defun
872
873@defun general_operand
874This predicate allows any immediate, register, or memory operand
875valid for @var{mode}.
876@end defun
877
878@noindent
c6963675 879Finally, there are two generic operator predicates.
e543e219
ZW
880
881@defun comparison_operator
882This predicate matches any expression which performs an arithmetic
883comparison in @var{mode}; that is, @code{COMPARISON_P} is true for the
884expression code.
885@end defun
886
c6963675
PB
887@defun ordered_comparison_operator
888This predicate matches any expression which performs an arithmetic
889comparison in @var{mode} and whose expression code is valid for integer
890modes; that is, the expression code will be one of @code{eq}, @code{ne},
891@code{lt}, @code{ltu}, @code{le}, @code{leu}, @code{gt}, @code{gtu},
892@code{ge}, @code{geu}.
893@end defun
894
e543e219
ZW
895@node Defining Predicates
896@subsection Defining Machine-Specific Predicates
897@cindex defining predicates
898@findex define_predicate
899@findex define_special_predicate
900
901Many machines have requirements for their operands that cannot be
902expressed precisely using the generic predicates. You can define
903additional predicates using @code{define_predicate} and
904@code{define_special_predicate} expressions. These expressions have
905three operands:
906
907@itemize @bullet
908@item
909The name of the predicate, as it will be referred to in
910@code{match_operand} or @code{match_operator} expressions.
911
912@item
913An RTL expression which evaluates to true if the predicate allows the
914operand @var{op}, false if it does not. This expression can only use
915the following RTL codes:
916
917@table @code
918@item MATCH_OPERAND
919When written inside a predicate expression, a @code{MATCH_OPERAND}
920expression evaluates to true if the predicate it names would allow
921@var{op}. The operand number and constraint are ignored. Due to
922limitations in @command{genrecog}, you can only refer to generic
923predicates and predicates that have already been defined.
924
925@item MATCH_CODE
6e7a4706
ZW
926This expression evaluates to true if @var{op} or a specified
927subexpression of @var{op} has one of a given list of RTX codes.
928
929The first operand of this expression is a string constant containing a
930comma-separated list of RTX code names (in lower case). These are the
931codes for which the @code{MATCH_CODE} will be true.
932
933The second operand is a string constant which indicates what
934subexpression of @var{op} to examine. If it is absent or the empty
935string, @var{op} itself is examined. Otherwise, the string constant
936must be a sequence of digits and/or lowercase letters. Each character
937indicates a subexpression to extract from the current expression; for
938the first character this is @var{op}, for the second and subsequent
939characters it is the result of the previous character. A digit
940@var{n} extracts @samp{@w{XEXP (@var{e}, @var{n})}}; a letter @var{l}
941extracts @samp{@w{XVECEXP (@var{e}, 0, @var{n})}} where @var{n} is the
942alphabetic ordinal of @var{l} (0 for `a', 1 for 'b', and so on). The
943@code{MATCH_CODE} then examines the RTX code of the subexpression
944extracted by the complete string. It is not possible to extract
945components of an @code{rtvec} that is not at position 0 within its RTX
946object.
e543e219
ZW
947
948@item MATCH_TEST
949This expression has one operand, a string constant containing a C
950expression. The predicate's arguments, @var{op} and @var{mode}, are
951available with those names in the C expression. The @code{MATCH_TEST}
952evaluates to true if the C expression evaluates to a nonzero value.
953@code{MATCH_TEST} expressions must not have side effects.
954
955@item AND
956@itemx IOR
957@itemx NOT
958@itemx IF_THEN_ELSE
959The basic @samp{MATCH_} expressions can be combined using these
960logical operators, which have the semantics of the C operators
6e7a4706
ZW
961@samp{&&}, @samp{||}, @samp{!}, and @samp{@w{? :}} respectively. As
962in Common Lisp, you may give an @code{AND} or @code{IOR} expression an
963arbitrary number of arguments; this has exactly the same effect as
964writing a chain of two-argument @code{AND} or @code{IOR} expressions.
e543e219
ZW
965@end table
966
967@item
f0eb93a8 968An optional block of C code, which should execute
e543e219
ZW
969@samp{@w{return true}} if the predicate is found to match and
970@samp{@w{return false}} if it does not. It must not have any side
971effects. The predicate arguments, @var{op} and @var{mode}, are
972available with those names.
973
974If a code block is present in a predicate definition, then the RTL
975expression must evaluate to true @emph{and} the code block must
976execute @samp{@w{return true}} for the predicate to allow the operand.
977The RTL expression is evaluated first; do not re-check anything in the
978code block that was checked in the RTL expression.
979@end itemize
980
981The program @command{genrecog} scans @code{define_predicate} and
982@code{define_special_predicate} expressions to determine which RTX
983codes are possibly allowed. You should always make this explicit in
984the RTL predicate expression, using @code{MATCH_OPERAND} and
985@code{MATCH_CODE}.
986
987Here is an example of a simple predicate definition, from the IA64
988machine description:
989
990@smallexample
991@group
992;; @r{True if @var{op} is a @code{SYMBOL_REF} which refers to the sdata section.}
993(define_predicate "small_addr_symbolic_operand"
994 (and (match_code "symbol_ref")
995 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)")))
996@end group
997@end smallexample
998
999@noindent
1000And here is another, showing the use of the C block.
1001
1002@smallexample
1003@group
1004;; @r{True if @var{op} is a register operand that is (or could be) a GR reg.}
1005(define_predicate "gr_register_operand"
1006 (match_operand 0 "register_operand")
1007@{
1008 unsigned int regno;
1009 if (GET_CODE (op) == SUBREG)
1010 op = SUBREG_REG (op);
1011
1012 regno = REGNO (op);
1013 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
1014@})
1015@end group
1016@end smallexample
1017
1018Predicates written with @code{define_predicate} automatically include
1019a test that @var{mode} is @code{VOIDmode}, or @var{op} has the same
1020mode as @var{mode}, or @var{op} is a @code{CONST_INT} or
1021@code{CONST_DOUBLE}. They do @emph{not} check specifically for
1022integer @code{CONST_DOUBLE}, nor do they test that the value of either
1023kind of constant fits in the requested mode. This is because
1024target-specific predicates that take constants usually have to do more
1025stringent value checks anyway. If you need the exact same treatment
1026of @code{CONST_INT} or @code{CONST_DOUBLE} that the generic predicates
1027provide, use a @code{MATCH_OPERAND} subexpression to call
1028@code{const_int_operand}, @code{const_double_operand}, or
1029@code{immediate_operand}.
1030
1031Predicates written with @code{define_special_predicate} do not get any
1032automatic mode checks, and are treated as having special mode handling
1033by @command{genrecog}.
1034
1035The program @command{genpreds} is responsible for generating code to
1036test predicates. It also writes a header file containing function
1037declarations for all machine-specific predicates. It is not necessary
1038to declare these predicates in @file{@var{cpu}-protos.h}.
03dda8e3
RK
1039@end ifset
1040
1041@c Most of this node appears by itself (in a different place) even
b11cc610
JM
1042@c when the INTERNALS flag is clear. Passages that require the internals
1043@c manual's context are conditionalized to appear only in the internals manual.
03dda8e3
RK
1044@ifset INTERNALS
1045@node Constraints
1046@section Operand Constraints
1047@cindex operand constraints
1048@cindex constraints
1049
e543e219
ZW
1050Each @code{match_operand} in an instruction pattern can specify
1051constraints for the operands allowed. The constraints allow you to
1052fine-tune matching within the set of operands allowed by the
1053predicate.
1054
03dda8e3
RK
1055@end ifset
1056@ifclear INTERNALS
1057@node Constraints
1058@section Constraints for @code{asm} Operands
1059@cindex operand constraints, @code{asm}
1060@cindex constraints, @code{asm}
1061@cindex @code{asm} constraints
1062
1063Here are specific details on what constraint letters you can use with
1064@code{asm} operands.
1065@end ifclear
1066Constraints can say whether
1067an operand may be in a register, and which kinds of register; whether the
1068operand can be a memory reference, and which kinds of address; whether the
1069operand may be an immediate constant, and which possible values it may
1070have. Constraints can also require two operands to match.
54f044eb
JJ
1071Side-effects aren't allowed in operands of inline @code{asm}, unless
1072@samp{<} or @samp{>} constraints are used, because there is no guarantee
1073that the side-effects will happen exactly once in an instruction that can update
1074the addressing register.
03dda8e3
RK
1075
1076@ifset INTERNALS
1077@menu
1078* Simple Constraints:: Basic use of constraints.
1079* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1080* Class Preferences:: Constraints guide which hard register to put things in.
1081* Modifiers:: More precise control over effects of constraints.
1082* Machine Constraints:: Existing constraints for some particular machines.
40bf31ed 1083* Disable Insn Alternatives:: Disable insn alternatives using the @code{enabled} attribute.
f38840db
ZW
1084* Define Constraints:: How to define machine-specific constraints.
1085* C Constraint Interface:: How to test constraints from C code.
03dda8e3
RK
1086@end menu
1087@end ifset
1088
1089@ifclear INTERNALS
1090@menu
1091* Simple Constraints:: Basic use of constraints.
1092* Multi-Alternative:: When an insn has two alternative constraint-patterns.
1093* Modifiers:: More precise control over effects of constraints.
1094* Machine Constraints:: Special constraints for some particular machines.
1095@end menu
1096@end ifclear
1097
1098@node Simple Constraints
1099@subsection Simple Constraints
1100@cindex simple constraints
1101
1102The simplest kind of constraint is a string full of letters, each of
1103which describes one kind of operand that is permitted. Here are
1104the letters that are allowed:
1105
1106@table @asis
88a56c2e
HPN
1107@item whitespace
1108Whitespace characters are ignored and can be inserted at any position
1109except the first. This enables each alternative for different operands to
1110be visually aligned in the machine description even if they have different
1111number of constraints and modifiers.
1112
03dda8e3
RK
1113@cindex @samp{m} in constraint
1114@cindex memory references in constraints
1115@item @samp{m}
1116A memory operand is allowed, with any kind of address that the machine
1117supports in general.
a4edaf83
AK
1118Note that the letter used for the general memory constraint can be
1119re-defined by a back end using the @code{TARGET_MEM_CONSTRAINT} macro.
03dda8e3
RK
1120
1121@cindex offsettable address
1122@cindex @samp{o} in constraint
1123@item @samp{o}
1124A memory operand is allowed, but only if the address is
1125@dfn{offsettable}. This means that adding a small integer (actually,
1126the width in bytes of the operand, as determined by its machine mode)
1127may be added to the address and the result is also a valid memory
1128address.
1129
1130@cindex autoincrement/decrement addressing
1131For example, an address which is constant is offsettable; so is an
1132address that is the sum of a register and a constant (as long as a
1133slightly larger constant is also within the range of address-offsets
1134supported by the machine); but an autoincrement or autodecrement
1135address is not offsettable. More complicated indirect/indexed
1136addresses may or may not be offsettable depending on the other
1137addressing modes that the machine supports.
1138
1139Note that in an output operand which can be matched by another
1140operand, the constraint letter @samp{o} is valid only when accompanied
1141by both @samp{<} (if the target machine has predecrement addressing)
1142and @samp{>} (if the target machine has preincrement addressing).
1143
1144@cindex @samp{V} in constraint
1145@item @samp{V}
1146A memory operand that is not offsettable. In other words, anything that
1147would fit the @samp{m} constraint but not the @samp{o} constraint.
1148
1149@cindex @samp{<} in constraint
1150@item @samp{<}
1151A memory operand with autodecrement addressing (either predecrement or
54f044eb
JJ
1152postdecrement) is allowed. In inline @code{asm} this constraint is only
1153allowed if the operand is used exactly once in an instruction that can
1154handle the side-effects. Not using an operand with @samp{<} in constraint
1155string in the inline @code{asm} pattern at all or using it in multiple
1156instructions isn't valid, because the side-effects wouldn't be performed
1157or would be performed more than once. Furthermore, on some targets
1158the operand with @samp{<} in constraint string must be accompanied by
1159special instruction suffixes like @code{%U0} instruction suffix on PowerPC
1160or @code{%P0} on IA-64.
03dda8e3
RK
1161
1162@cindex @samp{>} in constraint
1163@item @samp{>}
1164A memory operand with autoincrement addressing (either preincrement or
54f044eb
JJ
1165postincrement) is allowed. In inline @code{asm} the same restrictions
1166as for @samp{<} apply.
03dda8e3
RK
1167
1168@cindex @samp{r} in constraint
1169@cindex registers in constraints
1170@item @samp{r}
1171A register operand is allowed provided that it is in a general
1172register.
1173
03dda8e3
RK
1174@cindex constants in constraints
1175@cindex @samp{i} in constraint
1176@item @samp{i}
1177An immediate integer operand (one with constant value) is allowed.
1178This includes symbolic constants whose values will be known only at
8ac658b6 1179assembly time or later.
03dda8e3
RK
1180
1181@cindex @samp{n} in constraint
1182@item @samp{n}
1183An immediate integer operand with a known numeric value is allowed.
1184Many systems cannot support assembly-time constants for operands less
1185than a word wide. Constraints for these operands should use @samp{n}
1186rather than @samp{i}.
1187
1188@cindex @samp{I} in constraint
1189@item @samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}
1190Other letters in the range @samp{I} through @samp{P} may be defined in
1191a machine-dependent fashion to permit immediate integer operands with
1192explicit integer values in specified ranges. For example, on the
119368000, @samp{I} is defined to stand for the range of values 1 to 8.
1194This is the range permitted as a shift count in the shift
1195instructions.
1196
1197@cindex @samp{E} in constraint
1198@item @samp{E}
1199An immediate floating operand (expression code @code{const_double}) is
1200allowed, but only if the target floating point format is the same as
1201that of the host machine (on which the compiler is running).
1202
1203@cindex @samp{F} in constraint
1204@item @samp{F}
bf7cd754
R
1205An immediate floating operand (expression code @code{const_double} or
1206@code{const_vector}) is allowed.
03dda8e3
RK
1207
1208@cindex @samp{G} in constraint
1209@cindex @samp{H} in constraint
1210@item @samp{G}, @samp{H}
1211@samp{G} and @samp{H} may be defined in a machine-dependent fashion to
1212permit immediate floating operands in particular ranges of values.
1213
1214@cindex @samp{s} in constraint
1215@item @samp{s}
1216An immediate integer operand whose value is not an explicit integer is
1217allowed.
1218
1219This might appear strange; if an insn allows a constant operand with a
1220value not known at compile time, it certainly must allow any known
1221value. So why use @samp{s} instead of @samp{i}? Sometimes it allows
1222better code to be generated.
1223
1224For example, on the 68000 in a fullword instruction it is possible to
630d3d5a 1225use an immediate operand; but if the immediate value is between @minus{}128
03dda8e3
RK
1226and 127, better code results from loading the value into a register and
1227using the register. This is because the load into the register can be
1228done with a @samp{moveq} instruction. We arrange for this to happen
1229by defining the letter @samp{K} to mean ``any integer outside the
630d3d5a 1230range @minus{}128 to 127'', and then specifying @samp{Ks} in the operand
03dda8e3
RK
1231constraints.
1232
1233@cindex @samp{g} in constraint
1234@item @samp{g}
1235Any register, memory or immediate integer operand is allowed, except for
1236registers that are not general registers.
1237
1238@cindex @samp{X} in constraint
1239@item @samp{X}
1240@ifset INTERNALS
1241Any operand whatsoever is allowed, even if it does not satisfy
1242@code{general_operand}. This is normally used in the constraint of
1243a @code{match_scratch} when certain alternatives will not actually
1244require a scratch register.
1245@end ifset
1246@ifclear INTERNALS
1247Any operand whatsoever is allowed.
1248@end ifclear
1249
1250@cindex @samp{0} in constraint
1251@cindex digits in constraint
1252@item @samp{0}, @samp{1}, @samp{2}, @dots{} @samp{9}
1253An operand that matches the specified operand number is allowed. If a
1254digit is used together with letters within the same alternative, the
1255digit should come last.
1256
84b72302 1257This number is allowed to be more than a single digit. If multiple
c0478a66 1258digits are encountered consecutively, they are interpreted as a single
84b72302
RH
1259decimal integer. There is scant chance for ambiguity, since to-date
1260it has never been desirable that @samp{10} be interpreted as matching
1261either operand 1 @emph{or} operand 0. Should this be desired, one
1262can use multiple alternatives instead.
1263
03dda8e3
RK
1264@cindex matching constraint
1265@cindex constraint, matching
1266This is called a @dfn{matching constraint} and what it really means is
1267that the assembler has only a single operand that fills two roles
1268@ifset INTERNALS
1269considered separate in the RTL insn. For example, an add insn has two
1270input operands and one output operand in the RTL, but on most CISC
1271@end ifset
1272@ifclear INTERNALS
1273which @code{asm} distinguishes. For example, an add instruction uses
1274two input operands and an output operand, but on most CISC
1275@end ifclear
1276machines an add instruction really has only two operands, one of them an
1277input-output operand:
1278
1279@smallexample
1280addl #35,r12
1281@end smallexample
1282
1283Matching constraints are used in these circumstances.
1284More precisely, the two operands that match must include one input-only
1285operand and one output-only operand. Moreover, the digit must be a
1286smaller number than the number of the operand that uses it in the
1287constraint.
1288
1289@ifset INTERNALS
1290For operands to match in a particular case usually means that they
1291are identical-looking RTL expressions. But in a few special cases
1292specific kinds of dissimilarity are allowed. For example, @code{*x}
1293as an input operand will match @code{*x++} as an output operand.
1294For proper results in such cases, the output template should always
1295use the output-operand's number when printing the operand.
1296@end ifset
1297
1298@cindex load address instruction
1299@cindex push address instruction
1300@cindex address constraints
1301@cindex @samp{p} in constraint
1302@item @samp{p}
1303An operand that is a valid memory address is allowed. This is
1304for ``load address'' and ``push address'' instructions.
1305
1306@findex address_operand
1307@samp{p} in the constraint must be accompanied by @code{address_operand}
1308as the predicate in the @code{match_operand}. This predicate interprets
1309the mode specified in the @code{match_operand} as the mode of the memory
1310reference for which the address would be valid.
1311
c2cba7a9 1312@cindex other register constraints
03dda8e3 1313@cindex extensible constraints
630d3d5a 1314@item @var{other-letters}
c2cba7a9
RH
1315Other letters can be defined in machine-dependent fashion to stand for
1316particular classes of registers or other arbitrary operand types.
1317@samp{d}, @samp{a} and @samp{f} are defined on the 68000/68020 to stand
1318for data, address and floating point registers.
03dda8e3
RK
1319@end table
1320
1321@ifset INTERNALS
1322In order to have valid assembler code, each operand must satisfy
1323its constraint. But a failure to do so does not prevent the pattern
1324from applying to an insn. Instead, it directs the compiler to modify
1325the code so that the constraint will be satisfied. Usually this is
1326done by copying an operand into a register.
1327
1328Contrast, therefore, the two instruction patterns that follow:
1329
1330@smallexample
1331(define_insn ""
1332 [(set (match_operand:SI 0 "general_operand" "=r")
1333 (plus:SI (match_dup 0)
1334 (match_operand:SI 1 "general_operand" "r")))]
1335 ""
1336 "@dots{}")
1337@end smallexample
1338
1339@noindent
1340which has two operands, one of which must appear in two places, and
1341
1342@smallexample
1343(define_insn ""
1344 [(set (match_operand:SI 0 "general_operand" "=r")
1345 (plus:SI (match_operand:SI 1 "general_operand" "0")
1346 (match_operand:SI 2 "general_operand" "r")))]
1347 ""
1348 "@dots{}")
1349@end smallexample
1350
1351@noindent
1352which has three operands, two of which are required by a constraint to be
1353identical. If we are considering an insn of the form
1354
1355@smallexample
1356(insn @var{n} @var{prev} @var{next}
1357 (set (reg:SI 3)
1358 (plus:SI (reg:SI 6) (reg:SI 109)))
1359 @dots{})
1360@end smallexample
1361
1362@noindent
1363the first pattern would not apply at all, because this insn does not
1364contain two identical subexpressions in the right place. The pattern would
d78aa55c 1365say, ``That does not look like an add instruction; try other patterns''.
03dda8e3 1366The second pattern would say, ``Yes, that's an add instruction, but there
d78aa55c 1367is something wrong with it''. It would direct the reload pass of the
03dda8e3
RK
1368compiler to generate additional insns to make the constraint true. The
1369results might look like this:
1370
1371@smallexample
1372(insn @var{n2} @var{prev} @var{n}
1373 (set (reg:SI 3) (reg:SI 6))
1374 @dots{})
1375
1376(insn @var{n} @var{n2} @var{next}
1377 (set (reg:SI 3)
1378 (plus:SI (reg:SI 3) (reg:SI 109)))
1379 @dots{})
1380@end smallexample
1381
1382It is up to you to make sure that each operand, in each pattern, has
1383constraints that can handle any RTL expression that could be present for
1384that operand. (When multiple alternatives are in use, each pattern must,
1385for each possible combination of operand expressions, have at least one
1386alternative which can handle that combination of operands.) The
1387constraints don't need to @emph{allow} any possible operand---when this is
1388the case, they do not constrain---but they must at least point the way to
1389reloading any possible operand so that it will fit.
1390
1391@itemize @bullet
1392@item
1393If the constraint accepts whatever operands the predicate permits,
1394there is no problem: reloading is never necessary for this operand.
1395
1396For example, an operand whose constraints permit everything except
1397registers is safe provided its predicate rejects registers.
1398
1399An operand whose predicate accepts only constant values is safe
1400provided its constraints include the letter @samp{i}. If any possible
1401constant value is accepted, then nothing less than @samp{i} will do;
1402if the predicate is more selective, then the constraints may also be
1403more selective.
1404
1405@item
1406Any operand expression can be reloaded by copying it into a register.
1407So if an operand's constraints allow some kind of register, it is
1408certain to be safe. It need not permit all classes of registers; the
1409compiler knows how to copy a register into another register of the
1410proper class in order to make an instruction valid.
1411
1412@cindex nonoffsettable memory reference
1413@cindex memory reference, nonoffsettable
1414@item
1415A nonoffsettable memory reference can be reloaded by copying the
1416address into a register. So if the constraint uses the letter
1417@samp{o}, all memory references are taken care of.
1418
1419@item
1420A constant operand can be reloaded by allocating space in memory to
1421hold it as preinitialized data. Then the memory reference can be used
1422in place of the constant. So if the constraint uses the letters
1423@samp{o} or @samp{m}, constant operands are not a problem.
1424
1425@item
1426If the constraint permits a constant and a pseudo register used in an insn
1427was not allocated to a hard register and is equivalent to a constant,
1428the register will be replaced with the constant. If the predicate does
1429not permit a constant and the insn is re-recognized for some reason, the
1430compiler will crash. Thus the predicate must always recognize any
1431objects allowed by the constraint.
1432@end itemize
1433
1434If the operand's predicate can recognize registers, but the constraint does
1435not permit them, it can make the compiler crash. When this operand happens
1436to be a register, the reload pass will be stymied, because it does not know
1437how to copy a register temporarily into memory.
1438
1439If the predicate accepts a unary operator, the constraint applies to the
1440operand. For example, the MIPS processor at ISA level 3 supports an
1441instruction which adds two registers in @code{SImode} to produce a
1442@code{DImode} result, but only if the registers are correctly sign
1443extended. This predicate for the input operands accepts a
1444@code{sign_extend} of an @code{SImode} register. Write the constraint
1445to indicate the type of register that is required for the operand of the
1446@code{sign_extend}.
1447@end ifset
1448
1449@node Multi-Alternative
1450@subsection Multiple Alternative Constraints
1451@cindex multiple alternative constraints
1452
1453Sometimes a single instruction has multiple alternative sets of possible
1454operands. For example, on the 68000, a logical-or instruction can combine
1455register or an immediate value into memory, or it can combine any kind of
1456operand into a register; but it cannot combine one memory location into
1457another.
1458
1459These constraints are represented as multiple alternatives. An alternative
1460can be described by a series of letters for each operand. The overall
1461constraint for an operand is made from the letters for this operand
1462from the first alternative, a comma, the letters for this operand from
1463the second alternative, a comma, and so on until the last alternative.
1464@ifset INTERNALS
1465Here is how it is done for fullword logical-or on the 68000:
1466
1467@smallexample
1468(define_insn "iorsi3"
1469 [(set (match_operand:SI 0 "general_operand" "=m,d")
1470 (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
1471 (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
1472 @dots{})
1473@end smallexample
1474
1475The first alternative has @samp{m} (memory) for operand 0, @samp{0} for
1476operand 1 (meaning it must match operand 0), and @samp{dKs} for operand
14772. The second alternative has @samp{d} (data register) for operand 0,
1478@samp{0} for operand 1, and @samp{dmKs} for operand 2. The @samp{=} and
1479@samp{%} in the constraints apply to all the alternatives; their
1480meaning is explained in the next section (@pxref{Class Preferences}).
1481@end ifset
1482
1483@c FIXME Is this ? and ! stuff of use in asm()? If not, hide unless INTERNAL
1484If all the operands fit any one alternative, the instruction is valid.
1485Otherwise, for each alternative, the compiler counts how many instructions
1486must be added to copy the operands so that that alternative applies.
1487The alternative requiring the least copying is chosen. If two alternatives
1488need the same amount of copying, the one that comes first is chosen.
1489These choices can be altered with the @samp{?} and @samp{!} characters:
1490
1491@table @code
1492@cindex @samp{?} in constraint
1493@cindex question mark
1494@item ?
1495Disparage slightly the alternative that the @samp{?} appears in,
1496as a choice when no alternative applies exactly. The compiler regards
1497this alternative as one unit more costly for each @samp{?} that appears
1498in it.
1499
1500@cindex @samp{!} in constraint
1501@cindex exclamation point
1502@item !
1503Disparage severely the alternative that the @samp{!} appears in.
1504This alternative can still be used if it fits without reloading,
1505but if reloading is needed, some other alternative will be used.
1506@end table
1507
1508@ifset INTERNALS
1509When an insn pattern has multiple alternatives in its constraints, often
1510the appearance of the assembler code is determined mostly by which
1511alternative was matched. When this is so, the C code for writing the
1512assembler code can use the variable @code{which_alternative}, which is
1513the ordinal number of the alternative that was actually satisfied (0 for
1514the first, 1 for the second alternative, etc.). @xref{Output Statement}.
1515@end ifset
1516
1517@ifset INTERNALS
1518@node Class Preferences
1519@subsection Register Class Preferences
1520@cindex class preference constraints
1521@cindex register class preference constraints
1522
1523@cindex voting between constraint alternatives
1524The operand constraints have another function: they enable the compiler
1525to decide which kind of hardware register a pseudo register is best
1526allocated to. The compiler examines the constraints that apply to the
1527insns that use the pseudo register, looking for the machine-dependent
1528letters such as @samp{d} and @samp{a} that specify classes of registers.
1529The pseudo register is put in whichever class gets the most ``votes''.
1530The constraint letters @samp{g} and @samp{r} also vote: they vote in
1531favor of a general register. The machine description says which registers
1532are considered general.
1533
1534Of course, on some machines all registers are equivalent, and no register
1535classes are defined. Then none of this complexity is relevant.
1536@end ifset
1537
1538@node Modifiers
1539@subsection Constraint Modifier Characters
1540@cindex modifiers in constraints
1541@cindex constraint modifier characters
1542
1543@c prevent bad page break with this line
1544Here are constraint modifier characters.
1545
1546@table @samp
1547@cindex @samp{=} in constraint
1548@item =
1549Means that this operand is write-only for this instruction: the previous
1550value is discarded and replaced by output data.
1551
1552@cindex @samp{+} in constraint
1553@item +
1554Means that this operand is both read and written by the instruction.
1555
1556When the compiler fixes up the operands to satisfy the constraints,
1557it needs to know which operands are inputs to the instruction and
1558which are outputs from it. @samp{=} identifies an output; @samp{+}
1559identifies an operand that is both input and output; all other operands
1560are assumed to be input only.
1561
c5c76735
JL
1562If you specify @samp{=} or @samp{+} in a constraint, you put it in the
1563first character of the constraint string.
1564
03dda8e3
RK
1565@cindex @samp{&} in constraint
1566@cindex earlyclobber operand
1567@item &
1568Means (in a particular alternative) that this operand is an
1569@dfn{earlyclobber} operand, which is modified before the instruction is
1570finished using the input operands. Therefore, this operand may not lie
1571in a register that is used as an input operand or as part of any memory
1572address.
1573
1574@samp{&} applies only to the alternative in which it is written. In
1575constraints with multiple alternatives, sometimes one alternative
1576requires @samp{&} while others do not. See, for example, the
1577@samp{movdf} insn of the 68000.
1578
ebb48a4d 1579An input operand can be tied to an earlyclobber operand if its only
03dda8e3
RK
1580use as an input occurs before the early result is written. Adding
1581alternatives of this form often allows GCC to produce better code
ebb48a4d 1582when only some of the inputs can be affected by the earlyclobber.
161d7b59 1583See, for example, the @samp{mulsi3} insn of the ARM@.
03dda8e3
RK
1584
1585@samp{&} does not obviate the need to write @samp{=}.
1586
1587@cindex @samp{%} in constraint
1588@item %
1589Declares the instruction to be commutative for this operand and the
1590following operand. This means that the compiler may interchange the
1591two operands if that is the cheapest way to make all operands fit the
1592constraints.
1593@ifset INTERNALS
1594This is often used in patterns for addition instructions
1595that really have only two operands: the result must go in one of the
1596arguments. Here for example, is how the 68000 halfword-add
1597instruction is defined:
1598
1599@smallexample
1600(define_insn "addhi3"
1601 [(set (match_operand:HI 0 "general_operand" "=m,r")
1602 (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
1603 (match_operand:HI 2 "general_operand" "di,g")))]
1604 @dots{})
1605@end smallexample
1606@end ifset
daf2f129 1607GCC can only handle one commutative pair in an asm; if you use more,
595163db
EB
1608the compiler may fail. Note that you need not use the modifier if
1609the two alternatives are strictly identical; this would only waste
be3914df
HPN
1610time in the reload pass. The modifier is not operational after
1611register allocation, so the result of @code{define_peephole2}
1612and @code{define_split}s performed after reload cannot rely on
1613@samp{%} to make the intended insn match.
03dda8e3
RK
1614
1615@cindex @samp{#} in constraint
1616@item #
1617Says that all following characters, up to the next comma, are to be
1618ignored as a constraint. They are significant only for choosing
1619register preferences.
1620
03dda8e3
RK
1621@cindex @samp{*} in constraint
1622@item *
1623Says that the following character should be ignored when choosing
1624register preferences. @samp{*} has no effect on the meaning of the
55a2c322
VM
1625constraint as a constraint, and no effect on reloading. For LRA
1626@samp{*} additionally disparages slightly the alternative if the
1627following character matches the operand.
03dda8e3 1628
9f339dde 1629@ifset INTERNALS
03dda8e3
RK
1630Here is an example: the 68000 has an instruction to sign-extend a
1631halfword in a data register, and can also sign-extend a value by
1632copying it into an address register. While either kind of register is
1633acceptable, the constraints on an address-register destination are
1634less strict, so it is best if register allocation makes an address
1635register its goal. Therefore, @samp{*} is used so that the @samp{d}
1636constraint letter (for data register) is ignored when computing
1637register preferences.
1638
1639@smallexample
1640(define_insn "extendhisi2"
1641 [(set (match_operand:SI 0 "general_operand" "=*d,a")
1642 (sign_extend:SI
1643 (match_operand:HI 1 "general_operand" "0,g")))]
1644 @dots{})
1645@end smallexample
1646@end ifset
1647@end table
1648
1649@node Machine Constraints
1650@subsection Constraints for Particular Machines
1651@cindex machine specific constraints
1652@cindex constraints, machine specific
1653
1654Whenever possible, you should use the general-purpose constraint letters
1655in @code{asm} arguments, since they will convey meaning more readily to
1656people reading your code. Failing that, use the constraint letters
1657that usually have very similar meanings across architectures. The most
1658commonly used constraints are @samp{m} and @samp{r} (for memory and
1659general-purpose registers respectively; @pxref{Simple Constraints}), and
1660@samp{I}, usually the letter indicating the most common
1661immediate-constant format.
1662
f38840db
ZW
1663Each architecture defines additional constraints. These constraints
1664are used by the compiler itself for instruction generation, as well as
1665for @code{asm} statements; therefore, some of the constraints are not
1666particularly useful for @code{asm}. Here is a summary of some of the
1667machine-dependent constraints available on some particular machines;
1668it includes both constraints that are useful for @code{asm} and
1669constraints that aren't. The compiler source file mentioned in the
1670table heading for each architecture is the definitive reference for
1671the meanings of that architecture's constraints.
6ccde948 1672
03dda8e3 1673@table @emph
5c0da018
IB
1674@item AArch64 family---@file{config/aarch64/constraints.md}
1675@table @code
1676@item k
1677The stack pointer register (@code{SP})
1678
1679@item w
1680Floating point or SIMD vector register
1681
1682@item I
1683Integer constant that is valid as an immediate operand in an @code{ADD}
1684instruction
1685
1686@item J
1687Integer constant that is valid as an immediate operand in a @code{SUB}
1688instruction (once negated)
1689
1690@item K
1691Integer constant that can be used with a 32-bit logical instruction
1692
1693@item L
1694Integer constant that can be used with a 64-bit logical instruction
1695
1696@item M
1697Integer constant that is valid as an immediate operand in a 32-bit @code{MOV}
1698pseudo instruction. The @code{MOV} may be assembled to one of several different
1699machine instructions depending on the value
1700
1701@item N
1702Integer constant that is valid as an immediate operand in a 64-bit @code{MOV}
1703pseudo instruction
1704
1705@item S
1706An absolute symbolic address or a label reference
1707
1708@item Y
1709Floating point constant zero
1710
1711@item Z
1712Integer constant zero
1713
5c0da018
IB
1714@item Ush
1715The high part (bits 12 and upwards) of the pc-relative address of a symbol
1716within 4GB of the instruction
1717
1718@item Q
1719A memory address which uses a single base register with no offset
1720
1721@item Ump
1722A memory address suitable for a load/store pair instruction in SI, DI, SF and
1723DF modes
1724
5c0da018
IB
1725@end table
1726
1727
dae840fc 1728@item ARM family---@file{config/arm/constraints.md}
03dda8e3 1729@table @code
9b66ebb1
PB
1730@item w
1731VFP floating-point register
1732
03dda8e3 1733@item G
dae840fc 1734The floating-point constant 0.0
03dda8e3
RK
1735
1736@item I
1737Integer that is valid as an immediate operand in a data processing
1738instruction. That is, an integer in the range 0 to 255 rotated by a
1739multiple of 2
1740
1741@item J
630d3d5a 1742Integer in the range @minus{}4095 to 4095
03dda8e3
RK
1743
1744@item K
1745Integer that satisfies constraint @samp{I} when inverted (ones complement)
1746
1747@item L
1748Integer that satisfies constraint @samp{I} when negated (twos complement)
1749
1750@item M
1751Integer in the range 0 to 32
1752
1753@item Q
1754A memory reference where the exact address is in a single register
1755(`@samp{m}' is preferable for @code{asm} statements)
1756
1757@item R
1758An item in the constant pool
1759
1760@item S
1761A symbol in the text segment of the current file
03dda8e3 1762
1e1ab407 1763@item Uv
9b66ebb1
PB
1764A memory reference suitable for VFP load/store insns (reg+constant offset)
1765
fdd695fd
PB
1766@item Uy
1767A memory reference suitable for iWMMXt load/store instructions.
1768
1e1ab407 1769@item Uq
0bdcd332 1770A memory reference suitable for the ARMv4 ldrsb instruction.
db875b15 1771@end table
1e1ab407 1772
fc262682 1773@item AVR family---@file{config/avr/constraints.md}
052a4b28
DC
1774@table @code
1775@item l
1776Registers from r0 to r15
1777
1778@item a
1779Registers from r16 to r23
1780
1781@item d
1782Registers from r16 to r31
1783
1784@item w
3a69a7d5 1785Registers from r24 to r31. These registers can be used in @samp{adiw} command
052a4b28
DC
1786
1787@item e
d7d9c429 1788Pointer register (r26--r31)
052a4b28
DC
1789
1790@item b
d7d9c429 1791Base pointer register (r28--r31)
052a4b28 1792
3a69a7d5
MM
1793@item q
1794Stack pointer register (SPH:SPL)
1795
052a4b28
DC
1796@item t
1797Temporary register r0
1798
1799@item x
1800Register pair X (r27:r26)
1801
1802@item y
1803Register pair Y (r29:r28)
1804
1805@item z
1806Register pair Z (r31:r30)
1807
1808@item I
630d3d5a 1809Constant greater than @minus{}1, less than 64
052a4b28
DC
1810
1811@item J
630d3d5a 1812Constant greater than @minus{}64, less than 1
052a4b28
DC
1813
1814@item K
1815Constant integer 2
1816
1817@item L
1818Constant integer 0
1819
1820@item M
1821Constant that fits in 8 bits
1822
1823@item N
630d3d5a 1824Constant integer @minus{}1
052a4b28
DC
1825
1826@item O
3a69a7d5 1827Constant integer 8, 16, or 24
052a4b28
DC
1828
1829@item P
1830Constant integer 1
1831
1832@item G
1833A floating point constant 0.0
0e8eb4d8 1834
0e8eb4d8
EW
1835@item Q
1836A memory address based on Y or Z pointer with displacement.
052a4b28 1837@end table
53054e77 1838
feeeff5c
JR
1839@item Epiphany---@file{config/epiphany/constraints.md}
1840@table @code
1841@item U16
1842An unsigned 16-bit constant.
1843
1844@item K
1845An unsigned 5-bit constant.
1846
1847@item L
1848A signed 11-bit constant.
1849
1850@item Cm1
1851A signed 11-bit constant added to @minus{}1.
1852Can only match when the @option{-m1reg-@var{reg}} option is active.
1853
1854@item Cl1
1855Left-shift of @minus{}1, i.e., a bit mask with a block of leading ones, the rest
1856being a block of trailing zeroes.
1857Can only match when the @option{-m1reg-@var{reg}} option is active.
1858
1859@item Cr1
1860Right-shift of @minus{}1, i.e., a bit mask with a trailing block of ones, the
1861rest being zeroes. Or to put it another way, one less than a power of two.
1862Can only match when the @option{-m1reg-@var{reg}} option is active.
1863
1864@item Cal
1865Constant for arithmetic/logical operations.
1866This is like @code{i}, except that for position independent code,
1867no symbols / expressions needing relocations are allowed.
1868
1869@item Csy
1870Symbolic constant for call/jump instruction.
1871
1872@item Rcs
1873The register class usable in short insns. This is a register class
1874constraint, and can thus drive register allocation.
1875This constraint won't match unless @option{-mprefer-short-insn-regs} is
1876in effect.
1877
1878@item Rsc
1879The the register class of registers that can be used to hold a
1880sibcall call address. I.e., a caller-saved register.
1881
1882@item Rct
1883Core control register class.
1884
1885@item Rgs
1886The register group usable in short insns.
1887This constraint does not use a register class, so that it only
1888passively matches suitable registers, and doesn't drive register allocation.
1889
1890@ifset INTERNALS
1891@item Car
1892Constant suitable for the addsi3_r pattern. This is a valid offset
1893For byte, halfword, or word addressing.
1894@end ifset
1895
1896@item Rra
1897Matches the return address if it can be replaced with the link register.
1898
1899@item Rcc
1900Matches the integer condition code register.
1901
1902@item Sra
1903Matches the return address if it is in a stack slot.
1904
1905@item Cfm
1906Matches control register values to switch fp mode, which are encapsulated in
1907@code{UNSPEC_FP_MODE}.
1908@end table
1909
b25364a0
S
1910@item CR16 Architecture---@file{config/cr16/cr16.h}
1911@table @code
1912
1913@item b
1914Registers from r0 to r14 (registers without stack pointer)
1915
1916@item t
1917Register from r0 to r11 (all 16-bit registers)
1918
1919@item p
1920Register from r12 to r15 (all 32-bit registers)
1921
1922@item I
1923Signed constant that fits in 4 bits
1924
1925@item J
1926Signed constant that fits in 5 bits
1927
1928@item K
1929Signed constant that fits in 6 bits
1930
1931@item L
1932Unsigned constant that fits in 4 bits
1933
1934@item M
1935Signed constant that fits in 32 bits
1936
1937@item N
1938Check for 64 bits wide constants for add/sub instructions
1939
1940@item G
1941Floating point constant that is legal for store immediate
1942@end table
1943
8119b4e4
JDA
1944@item Hewlett-Packard PA-RISC---@file{config/pa/pa.h}
1945@table @code
1946@item a
1947General register 1
1948
1949@item f
1950Floating point register
1951
1952@item q
1953Shift amount register
1954
1955@item x
1956Floating point register (deprecated)
1957
1958@item y
1959Upper floating point register (32-bit), floating point register (64-bit)
1960
1961@item Z
1962Any register
1963
1964@item I
1965Signed 11-bit integer constant
1966
1967@item J
1968Signed 14-bit integer constant
1969
1970@item K
1971Integer constant that can be deposited with a @code{zdepi} instruction
1972
1973@item L
1974Signed 5-bit integer constant
1975
1976@item M
1977Integer constant 0
1978
1979@item N
1980Integer constant that can be loaded with a @code{ldil} instruction
1981
1982@item O
1983Integer constant whose value plus one is a power of 2
1984
1985@item P
1986Integer constant that can be used for @code{and} operations in @code{depi}
1987and @code{extru} instructions
1988
1989@item S
1990Integer constant 31
1991
1992@item U
1993Integer constant 63
1994
1995@item G
1996Floating-point constant 0.0
1997
1998@item A
1999A @code{lo_sum} data-linkage-table memory operand
2000
2001@item Q
2002A memory operand that can be used as the destination operand of an
2003integer store instruction
2004
2005@item R
2006A scaled or unscaled indexed memory operand
2007
2008@item T
2009A memory operand for floating-point loads and stores
2010
2011@item W
2012A register indirect memory operand
2013@end table
2014
358da97e
HS
2015@item picoChip family---@file{picochip.h}
2016@table @code
2017@item k
2018Stack register.
2019
2020@item f
2021Pointer register. A register which can be used to access memory without
2022supplying an offset. Any other register can be used to access memory,
2023but will need a constant offset. In the case of the offset being zero,
2024it is more efficient to use a pointer register, since this reduces code
2025size.
2026
2027@item t
2028A twin register. A register which may be paired with an adjacent
2029register to create a 32-bit register.
2030
2031@item a
2032Any absolute memory address (e.g., symbolic constant, symbolic
2033constant + offset).
2034
2035@item I
20364-bit signed integer.
2037
2038@item J
20394-bit unsigned integer.
2040
2041@item K
20428-bit signed integer.
2043
2044@item M
2045Any constant whose absolute value is no greater than 4-bits.
2046
2047@item N
204810-bit signed integer
2049
2050@item O
205116-bit signed integer.
2052
2053@end table
2054
f62511da 2055@item PowerPC and IBM RS6000---@file{config/rs6000/constraints.md}
03dda8e3
RK
2056@table @code
2057@item b
2058Address base register
2059
799dbb0f
ME
2060@item d
2061Floating point register (containing 64-bit value)
2062
03dda8e3 2063@item f
799dbb0f 2064Floating point register (containing 32-bit value)
03dda8e3 2065
2dcfc29d 2066@item v
29e6733c
MM
2067Altivec vector register
2068
f62511da
MM
2069@item wa
2070Any VSX register
2071
29e6733c
MM
2072@item wd
2073VSX vector register to hold vector double data
2074
2075@item wf
2076VSX vector register to hold vector float data
2077
c6d5ff83
MM
2078@item wg
2079If @option{-mmfpgpr} was used, a floating point register
2080
2081@item wl
2082If the LFIWAX instruction is enabled, a floating point register
2083
f62511da
MM
2084@item wm
2085If direct moves are enabled, a VSX register.
2086
2087@item wn
2088No register.
2089
2090@item wr
2091General purpose register if 64-bit mode is used
2092
29e6733c
MM
2093@item ws
2094VSX vector register to hold scalar float data
2095
c6d5ff83
MM
2096@item wt
2097VSX vector register to hold 128 bit integer
2098
2099@item wx
2100If the STFIWX instruction is enabled, a floating point register
2101
2102@item wz
2103If the LFIWZX instruction is enabled, a floating point register
2104
f62511da
MM
2105@item wQ
2106A memory address that will work with the @code{lq} and @code{stq}
2107instructions.
2dcfc29d 2108
03dda8e3
RK
2109@item h
2110@samp{MQ}, @samp{CTR}, or @samp{LINK} register
2111
2112@item q
2113@samp{MQ} register
2114
2115@item c
2116@samp{CTR} register
2117
2118@item l
2119@samp{LINK} register
2120
2121@item x
2122@samp{CR} register (condition register) number 0
2123
2124@item y
2125@samp{CR} register (condition register)
2126
8f685459 2127@item z
f6b5d695 2128@samp{XER[CA]} carry bit (part of the XER register)
8f685459 2129
03dda8e3 2130@item I
1e5f973d 2131Signed 16-bit constant
03dda8e3
RK
2132
2133@item J
ebb48a4d 2134Unsigned 16-bit constant shifted left 16 bits (use @samp{L} instead for
5f59ecb7 2135@code{SImode} constants)
03dda8e3
RK
2136
2137@item K
1e5f973d 2138Unsigned 16-bit constant
03dda8e3
RK
2139
2140@item L
1e5f973d 2141Signed 16-bit constant shifted left 16 bits
03dda8e3
RK
2142
2143@item M
2144Constant larger than 31
2145
2146@item N
2147Exact power of 2
2148
2149@item O
2150Zero
2151
2152@item P
1e5f973d 2153Constant whose negation is a signed 16-bit constant
03dda8e3
RK
2154
2155@item G
2156Floating point constant that can be loaded into a register with one
2157instruction per word
2158
a8a51a97
AP
2159@item H
2160Integer/Floating point constant that can be loaded into a register using
2161three instructions
2162
1d447995 2163@item m
ff2ce160 2164Memory operand.
fea31288
JJ
2165Normally, @code{m} does not allow addresses that update the base register.
2166If @samp{<} or @samp{>} constraint is also used, they are allowed and
2167therefore on PowerPC targets in that case it is only safe
2168to use @samp{m<>} in an @code{asm} statement if that @code{asm} statement
1d447995
RS
2169accesses the operand exactly once. The @code{asm} statement must also
2170use @samp{%U@var{<opno>}} as a placeholder for the ``update'' flag in the
2171corresponding load or store instruction. For example:
2172
2173@smallexample
fea31288 2174asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
1d447995
RS
2175@end smallexample
2176
2177is correct but:
2178
2179@smallexample
fea31288 2180asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
1d447995
RS
2181@end smallexample
2182
fea31288 2183is not.
1d447995
RS
2184
2185@item es
2186A ``stable'' memory operand; that is, one which does not include any
fea31288
JJ
2187automodification of the base register. This used to be useful when
2188@samp{m} allowed automodification of the base register, but as those are now only
2189allowed when @samp{<} or @samp{>} is used, @samp{es} is basically the same
2190as @samp{m} without @samp{<} and @samp{>}.
1d447995 2191
03dda8e3 2192@item Q
1d447995
RS
2193Memory operand that is an offset from a register (it is usually better
2194to use @samp{m} or @samp{es} in @code{asm} statements)
03dda8e3 2195
a8a51a97 2196@item Z
1d447995
RS
2197Memory operand that is an indexed or indirect from a register (it is
2198usually better to use @samp{m} or @samp{es} in @code{asm} statements)
a8a51a97 2199
03dda8e3
RK
2200@item R
2201AIX TOC entry
2202
a8a51a97
AP
2203@item a
2204Address operand that is an indexed or indirect from a register (@samp{p} is
2205preferable for @code{asm} statements)
2206
03dda8e3 2207@item S
8f685459 2208Constant suitable as a 64-bit mask operand
03dda8e3 2209
5f59ecb7
DE
2210@item T
2211Constant suitable as a 32-bit mask operand
2212
03dda8e3
RK
2213@item U
2214System V Release 4 small data area reference
a8a51a97
AP
2215
2216@item t
2217AND masks that can be performed by two rldic@{l, r@} instructions
2218
2219@item W
2220Vector constant that does not require memory
2221
29e6733c
MM
2222@item j
2223Vector constant that is all zeros.
2224
03dda8e3
RK
2225@end table
2226
08b1e29a 2227@item Intel 386---@file{config/i386/constraints.md}
03dda8e3 2228@table @code
0c56474e 2229@item R
f38840db
ZW
2230Legacy register---the eight integer registers available on all
2231i386 processors (@code{a}, @code{b}, @code{c}, @code{d},
2232@code{si}, @code{di}, @code{bp}, @code{sp}).
03dda8e3 2233
f38840db
ZW
2234@item q
2235Any register accessible as @code{@var{r}l}. In 32-bit mode, @code{a},
2236@code{b}, @code{c}, and @code{d}; in 64-bit mode, any integer register.
03dda8e3 2237
f38840db
ZW
2238@item Q
2239Any register accessible as @code{@var{r}h}: @code{a}, @code{b},
2240@code{c}, and @code{d}.
03dda8e3 2241
f38840db
ZW
2242@ifset INTERNALS
2243@item l
2244Any register that can be used as the index in a base+index memory
2245access: that is, any general register except the stack pointer.
2246@end ifset
03dda8e3
RK
2247
2248@item a
f38840db 2249The @code{a} register.
03dda8e3
RK
2250
2251@item b
f38840db 2252The @code{b} register.
03dda8e3
RK
2253
2254@item c
f38840db 2255The @code{c} register.
f8ca7923 2256
03dda8e3 2257@item d
f38840db
ZW
2258The @code{d} register.
2259
2260@item S
2261The @code{si} register.
03dda8e3
RK
2262
2263@item D
f38840db 2264The @code{di} register.
03dda8e3 2265
f38840db 2266@item A
ae8358d6
RG
2267The @code{a} and @code{d} registers. This class is used for instructions
2268that return double word results in the @code{ax:dx} register pair. Single
2269word values will be allocated either in @code{ax} or @code{dx}.
2270For example on i386 the following implements @code{rdtsc}:
2271
2272@smallexample
2273unsigned long long rdtsc (void)
2274@{
2275 unsigned long long tick;
2276 __asm__ __volatile__("rdtsc":"=A"(tick));
2277 return tick;
2278@}
2279@end smallexample
2280
2281This is not correct on x86_64 as it would allocate tick in either @code{ax}
2282or @code{dx}. You have to use the following variant instead:
2283
2284@smallexample
2285unsigned long long rdtsc (void)
2286@{
2287 unsigned int tickl, tickh;
2288 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
2289 return ((unsigned long long)tickh << 32)|tickl;
2290@}
2291@end smallexample
2292
03dda8e3 2293
f38840db
ZW
2294@item f
2295Any 80387 floating-point (stack) register.
2296
2297@item t
2298Top of 80387 floating-point stack (@code{%st(0)}).
2299
2300@item u
2301Second from top of 80387 floating-point stack (@code{%st(1)}).
994682b9
AJ
2302
2303@item y
f38840db
ZW
2304Any MMX register.
2305
2306@item x
2307Any SSE register.
2308
c5245af5
L
2309@item Yz
2310First SSE register (@code{%xmm0}).
2311
f38840db 2312@ifset INTERNALS
c5245af5
L
2313@item Y2
2314Any SSE register, when SSE2 is enabled.
2315
2316@item Yi
2317Any SSE register, when SSE2 and inter-unit moves are enabled.
2318
2319@item Ym
2320Any MMX register, when inter-unit moves are enabled.
f38840db 2321@end ifset
994682b9 2322
03dda8e3 2323@item I
f38840db 2324Integer constant in the range 0 @dots{} 31, for 32-bit shifts.
03dda8e3
RK
2325
2326@item J
f38840db 2327Integer constant in the range 0 @dots{} 63, for 64-bit shifts.
03dda8e3
RK
2328
2329@item K
f38840db 2330Signed 8-bit integer constant.
03dda8e3
RK
2331
2332@item L
f38840db 2333@code{0xFF} or @code{0xFFFF}, for andsi as a zero-extending move.
03dda8e3
RK
2334
2335@item M
f38840db 23360, 1, 2, or 3 (shifts for the @code{lea} instruction).
03dda8e3
RK
2337
2338@item N
ff2ce160 2339Unsigned 8-bit integer constant (for @code{in} and @code{out}
f38840db 2340instructions).
03dda8e3 2341
f38840db
ZW
2342@ifset INTERNALS
2343@item O
2344Integer constant in the range 0 @dots{} 127, for 128-bit shifts.
2345@end ifset
2346
2347@item G
2348Standard 80387 floating point constant.
2349
2350@item C
2351Standard SSE floating point constant.
0c56474e
JH
2352
2353@item e
f38840db
ZW
235432-bit signed integer constant, or a symbolic reference known
2355to fit that range (for immediate operands in sign-extending x86-64
2356instructions).
2357
2358@item Z
235932-bit unsigned integer constant, or a symbolic reference known
2360to fit that range (for immediate operands in zero-extending x86-64
2361instructions).
0c56474e 2362
03dda8e3
RK
2363@end table
2364
74fe790b 2365@item Intel IA-64---@file{config/ia64/ia64.h}
7a430e3b
SC
2366@table @code
2367@item a
2368General register @code{r0} to @code{r3} for @code{addl} instruction
2369
2370@item b
2371Branch register
2372
2373@item c
2374Predicate register (@samp{c} as in ``conditional'')
2375
2376@item d
2377Application register residing in M-unit
2378
2379@item e
2380Application register residing in I-unit
2381
2382@item f
2383Floating-point register
2384
2385@item m
fea31288
JJ
2386Memory operand. If used together with @samp{<} or @samp{>},
2387the operand can have postincrement and postdecrement which
7a430e3b 2388require printing with @samp{%Pn} on IA-64.
7a430e3b
SC
2389
2390@item G
2391Floating-point constant 0.0 or 1.0
2392
2393@item I
239414-bit signed integer constant
2395
2396@item J
239722-bit signed integer constant
2398
2399@item K
24008-bit signed integer constant for logical instructions
2401
2402@item L
24038-bit adjusted signed integer constant for compare pseudo-ops
2404
2405@item M
24066-bit unsigned integer constant for shift counts
2407
2408@item N
24099-bit signed integer constant for load and store postincrements
2410
2411@item O
2412The constant zero
2413
2414@item P
78466c0e 24150 or @minus{}1 for @code{dep} instruction
7a430e3b
SC
2416
2417@item Q
2418Non-volatile memory for floating-point loads and stores
2419
2420@item R
2421Integer constant in the range 1 to 4 for @code{shladd} instruction
2422
2423@item S
fea31288
JJ
2424Memory operand except postincrement and postdecrement. This is
2425now roughly the same as @samp{m} when not used together with @samp{<}
2426or @samp{>}.
7a430e3b 2427@end table
03dda8e3 2428
74fe790b 2429@item FRV---@file{config/frv/frv.h}
70899148
BS
2430@table @code
2431@item a
840758d3 2432Register in the class @code{ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2433
2434@item b
840758d3 2435Register in the class @code{EVEN_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2436
2437@item c
840758d3
BS
2438Register in the class @code{CC_REGS} (@code{fcc0} to @code{fcc3} and
2439@code{icc0} to @code{icc3}).
70899148
BS
2440
2441@item d
840758d3 2442Register in the class @code{GPR_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
2443
2444@item e
840758d3 2445Register in the class @code{EVEN_REGS} (@code{gr0} to @code{gr63}).
70899148
BS
2446Odd registers are excluded not in the class but through the use of a machine
2447mode larger than 4 bytes.
2448
2449@item f
840758d3 2450Register in the class @code{FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2451
2452@item h
840758d3 2453Register in the class @code{FEVEN_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2454Odd registers are excluded not in the class but through the use of a machine
2455mode larger than 4 bytes.
2456
2457@item l
840758d3 2458Register in the class @code{LR_REG} (the @code{lr} register).
70899148
BS
2459
2460@item q
840758d3 2461Register in the class @code{QUAD_REGS} (@code{gr2} to @code{gr63}).
70899148
BS
2462Register numbers not divisible by 4 are excluded not in the class but through
2463the use of a machine mode larger than 8 bytes.
2464
2465@item t
840758d3 2466Register in the class @code{ICC_REGS} (@code{icc0} to @code{icc3}).
70899148
BS
2467
2468@item u
840758d3 2469Register in the class @code{FCC_REGS} (@code{fcc0} to @code{fcc3}).
70899148
BS
2470
2471@item v
840758d3 2472Register in the class @code{ICR_REGS} (@code{cc4} to @code{cc7}).
70899148
BS
2473
2474@item w
840758d3 2475Register in the class @code{FCR_REGS} (@code{cc0} to @code{cc3}).
70899148
BS
2476
2477@item x
840758d3 2478Register in the class @code{QUAD_FPR_REGS} (@code{fr0} to @code{fr63}).
70899148
BS
2479Register numbers not divisible by 4 are excluded not in the class but through
2480the use of a machine mode larger than 8 bytes.
2481
2482@item z
840758d3 2483Register in the class @code{SPR_REGS} (@code{lcr} and @code{lr}).
70899148
BS
2484
2485@item A
840758d3 2486Register in the class @code{QUAD_ACC_REGS} (@code{acc0} to @code{acc7}).
70899148
BS
2487
2488@item B
840758d3 2489Register in the class @code{ACCG_REGS} (@code{accg0} to @code{accg7}).
70899148
BS
2490
2491@item C
840758d3 2492Register in the class @code{CR_REGS} (@code{cc0} to @code{cc7}).
70899148
BS
2493
2494@item G
2495Floating point constant zero
2496
2497@item I
24986-bit signed integer constant
2499
2500@item J
250110-bit signed integer constant
2502
2503@item L
250416-bit signed integer constant
2505
2506@item M
250716-bit unsigned integer constant
2508
2509@item N
840758d3
BS
251012-bit signed integer constant that is negative---i.e.@: in the
2511range of @minus{}2048 to @minus{}1
70899148
BS
2512
2513@item O
2514Constant zero
2515
2516@item P
840758d3 251712-bit signed integer constant that is greater than zero---i.e.@: in the
70899148
BS
2518range of 1 to 2047.
2519
2520@end table
2521
9fdd7520 2522@item Blackfin family---@file{config/bfin/constraints.md}
0d4a78eb
BS
2523@table @code
2524@item a
2525P register
2526
2527@item d
2528D register
2529
2530@item z
2531A call clobbered P register.
2532
03848bd0
BS
2533@item q@var{n}
2534A single register. If @var{n} is in the range 0 to 7, the corresponding D
2535register. If it is @code{A}, then the register P0.
2536
0d4a78eb
BS
2537@item D
2538Even-numbered D register
2539
2540@item W
2541Odd-numbered D register
2542
2543@item e
2544Accumulator register.
2545
2546@item A
2547Even-numbered accumulator register.
2548
2549@item B
2550Odd-numbered accumulator register.
2551
2552@item b
2553I register
2554
a9c46998 2555@item v
0d4a78eb
BS
2556B register
2557
2558@item f
2559M register
2560
2561@item c
2562Registers used for circular buffering, i.e. I, B, or L registers.
2563
2564@item C
2565The CC register.
2566
a9c46998
JZ
2567@item t
2568LT0 or LT1.
2569
2570@item k
2571LC0 or LC1.
2572
2573@item u
2574LB0 or LB1.
2575
0d4a78eb
BS
2576@item x
2577Any D, P, B, M, I or L register.
2578
2579@item y
2580Additional registers typically used only in prologues and epilogues: RETS,
2581RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
2582
2583@item w
2584Any register except accumulators or CC.
2585
2586@item Ksh
8ad1dde7 2587Signed 16 bit integer (in the range @minus{}32768 to 32767)
0d4a78eb
BS
2588
2589@item Kuh
2590Unsigned 16 bit integer (in the range 0 to 65535)
2591
2592@item Ks7
8ad1dde7 2593Signed 7 bit integer (in the range @minus{}64 to 63)
0d4a78eb
BS
2594
2595@item Ku7
2596Unsigned 7 bit integer (in the range 0 to 127)
2597
2598@item Ku5
2599Unsigned 5 bit integer (in the range 0 to 31)
2600
2601@item Ks4
8ad1dde7 2602Signed 4 bit integer (in the range @minus{}8 to 7)
0d4a78eb
BS
2603
2604@item Ks3
8ad1dde7 2605Signed 3 bit integer (in the range @minus{}3 to 4)
0d4a78eb
BS
2606
2607@item Ku3
2608Unsigned 3 bit integer (in the range 0 to 7)
2609
2610@item P@var{n}
2611Constant @var{n}, where @var{n} is a single-digit constant in the range 0 to 4.
2612
3efd5670
BS
2613@item PA
2614An integer equal to one of the MACFLAG_XXX constants that is suitable for
2615use with either accumulator.
2616
2617@item PB
2618An integer equal to one of the MACFLAG_XXX constants that is suitable for
2619use only with accumulator A1.
2620
0d4a78eb
BS
2621@item M1
2622Constant 255.
2623
2624@item M2
2625Constant 65535.
2626
2627@item J
2628An integer constant with exactly a single bit set.
2629
2630@item L
2631An integer constant with all bits set except exactly one.
2632
2633@item H
2634
2635@item Q
2636Any SYMBOL_REF.
2637@end table
2638
74fe790b
ZW
2639@item M32C---@file{config/m32c/m32c.c}
2640@table @code
38b2d076
DD
2641@item Rsp
2642@itemx Rfb
2643@itemx Rsb
2644@samp{$sp}, @samp{$fb}, @samp{$sb}.
2645
2646@item Rcr
2647Any control register, when they're 16 bits wide (nothing if control
2648registers are 24 bits wide)
2649
2650@item Rcl
2651Any control register, when they're 24 bits wide.
2652
2653@item R0w
2654@itemx R1w
2655@itemx R2w
2656@itemx R3w
2657$r0, $r1, $r2, $r3.
2658
2659@item R02
2660$r0 or $r2, or $r2r0 for 32 bit values.
2661
2662@item R13
2663$r1 or $r3, or $r3r1 for 32 bit values.
2664
2665@item Rdi
2666A register that can hold a 64 bit value.
2667
2668@item Rhl
2669$r0 or $r1 (registers with addressable high/low bytes)
2670
2671@item R23
2672$r2 or $r3
2673
2674@item Raa
2675Address registers
2676
2677@item Raw
2678Address registers when they're 16 bits wide.
2679
2680@item Ral
2681Address registers when they're 24 bits wide.
2682
2683@item Rqi
2684Registers that can hold QI values.
2685
2686@item Rad
2687Registers that can be used with displacements ($a0, $a1, $sb).
2688
2689@item Rsi
2690Registers that can hold 32 bit values.
2691
2692@item Rhi
2693Registers that can hold 16 bit values.
2694
2695@item Rhc
2696Registers chat can hold 16 bit values, including all control
2697registers.
2698
2699@item Rra
2700$r0 through R1, plus $a0 and $a1.
2701
2702@item Rfl
2703The flags register.
2704
2705@item Rmm
2706The memory-based pseudo-registers $mem0 through $mem15.
2707
2708@item Rpi
2709Registers that can hold pointers (16 bit registers for r8c, m16c; 24
2710bit registers for m32cm, m32c).
2711
2712@item Rpa
2713Matches multiple registers in a PARALLEL to form a larger register.
2714Used to match function return values.
2715
2716@item Is3
8ad1dde7 2717@minus{}8 @dots{} 7
38b2d076
DD
2718
2719@item IS1
8ad1dde7 2720@minus{}128 @dots{} 127
38b2d076
DD
2721
2722@item IS2
8ad1dde7 2723@minus{}32768 @dots{} 32767
38b2d076
DD
2724
2725@item IU2
27260 @dots{} 65535
2727
2728@item In4
8ad1dde7 2729@minus{}8 @dots{} @minus{}1 or 1 @dots{} 8
38b2d076
DD
2730
2731@item In5
8ad1dde7 2732@minus{}16 @dots{} @minus{}1 or 1 @dots{} 16
38b2d076 2733
23fed240 2734@item In6
8ad1dde7 2735@minus{}32 @dots{} @minus{}1 or 1 @dots{} 32
38b2d076
DD
2736
2737@item IM2
8ad1dde7 2738@minus{}65536 @dots{} @minus{}1
38b2d076
DD
2739
2740@item Ilb
2741An 8 bit value with exactly one bit set.
2742
2743@item Ilw
2744A 16 bit value with exactly one bit set.
2745
2746@item Sd
2747The common src/dest memory addressing modes.
2748
2749@item Sa
2750Memory addressed using $a0 or $a1.
2751
2752@item Si
2753Memory addressed with immediate addresses.
2754
2755@item Ss
2756Memory addressed using the stack pointer ($sp).
2757
2758@item Sf
2759Memory addressed using the frame base register ($fb).
2760
2761@item Ss
2762Memory addressed using the small base register ($sb).
2763
2764@item S1
2765$r1h
e2491744
DD
2766@end table
2767
2768@item MeP---@file{config/mep/constraints.md}
2769@table @code
2770
2771@item a
2772The $sp register.
2773
2774@item b
2775The $tp register.
2776
2777@item c
2778Any control register.
2779
2780@item d
2781Either the $hi or the $lo register.
2782
2783@item em
2784Coprocessor registers that can be directly loaded ($c0-$c15).
2785
2786@item ex
2787Coprocessor registers that can be moved to each other.
2788
2789@item er
2790Coprocessor registers that can be moved to core registers.
2791
2792@item h
2793The $hi register.
2794
2795@item j
2796The $rpc register.
2797
2798@item l
2799The $lo register.
2800
2801@item t
2802Registers which can be used in $tp-relative addressing.
2803
2804@item v
2805The $gp register.
2806
2807@item x
2808The coprocessor registers.
2809
2810@item y
2811The coprocessor control registers.
2812
2813@item z
2814The $0 register.
2815
2816@item A
2817User-defined register set A.
2818
2819@item B
2820User-defined register set B.
2821
2822@item C
2823User-defined register set C.
2824
2825@item D
2826User-defined register set D.
2827
2828@item I
2829Offsets for $gp-rel addressing.
2830
2831@item J
2832Constants that can be used directly with boolean insns.
2833
2834@item K
2835Constants that can be moved directly to registers.
2836
2837@item L
2838Small constants that can be added to registers.
2839
2840@item M
2841Long shift counts.
2842
2843@item N
2844Small constants that can be compared to registers.
2845
2846@item O
2847Constants that can be loaded into the top half of registers.
2848
2849@item S
2850Signed 8-bit immediates.
2851
2852@item T
2853Symbols encoded for $tp-rel or $gp-rel addressing.
2854
2855@item U
2856Non-constant addresses for loading/saving coprocessor registers.
2857
2858@item W
2859The top half of a symbol's value.
2860
2861@item Y
2862A register indirect address without offset.
2863
2864@item Z
2865Symbolic references to the control bus.
2866
80920132 2867@end table
e2491744 2868
80920132
ME
2869@item MicroBlaze---@file{config/microblaze/constraints.md}
2870@table @code
2871@item d
2872A general register (@code{r0} to @code{r31}).
2873
2874@item z
2875A status register (@code{rmsr}, @code{$fcc1} to @code{$fcc7}).
e2491744 2876
74fe790b 2877@end table
38b2d076 2878
cbbb5b6d 2879@item MIPS---@file{config/mips/constraints.md}
4226378a
PK
2880@table @code
2881@item d
cbbb5b6d
RS
2882An address register. This is equivalent to @code{r} unless
2883generating MIPS16 code.
4226378a
PK
2884
2885@item f
cbbb5b6d 2886A floating-point register (if available).
4226378a
PK
2887
2888@item h
21dfc6dc 2889Formerly the @code{hi} register. This constraint is no longer supported.
4226378a
PK
2890
2891@item l
21dfc6dc
RS
2892The @code{lo} register. Use this register to store values that are
2893no bigger than a word.
4226378a
PK
2894
2895@item x
21dfc6dc
RS
2896The concatenated @code{hi} and @code{lo} registers. Use this register
2897to store doubleword values.
cbbb5b6d
RS
2898
2899@item c
2900A register suitable for use in an indirect jump. This will always be
2901@code{$25} for @option{-mabicalls}.
4226378a 2902
2feaae20
RS
2903@item v
2904Register @code{$3}. Do not use this constraint in new code;
2905it is retained only for compatibility with glibc.
2906
4226378a 2907@item y
cbbb5b6d 2908Equivalent to @code{r}; retained for backwards compatibility.
4226378a
PK
2909
2910@item z
cbbb5b6d 2911A floating-point condition code register.
4226378a
PK
2912
2913@item I
cbbb5b6d 2914A signed 16-bit constant (for arithmetic instructions).
4226378a
PK
2915
2916@item J
cbbb5b6d 2917Integer zero.
4226378a
PK
2918
2919@item K
cbbb5b6d 2920An unsigned 16-bit constant (for logic instructions).
4226378a
PK
2921
2922@item L
cbbb5b6d
RS
2923A signed 32-bit constant in which the lower 16 bits are zero.
2924Such constants can be loaded using @code{lui}.
4226378a
PK
2925
2926@item M
cbbb5b6d
RS
2927A constant that cannot be loaded using @code{lui}, @code{addiu}
2928or @code{ori}.
4226378a
PK
2929
2930@item N
8ad1dde7 2931A constant in the range @minus{}65535 to @minus{}1 (inclusive).
4226378a
PK
2932
2933@item O
cbbb5b6d 2934A signed 15-bit constant.
4226378a
PK
2935
2936@item P
cbbb5b6d 2937A constant in the range 1 to 65535 (inclusive).
4226378a
PK
2938
2939@item G
cbbb5b6d 2940Floating-point zero.
4226378a
PK
2941
2942@item R
cbbb5b6d 2943An address that can be used in a non-macro load or store.
22c4c869
CM
2944
2945@item ZC
2946When compiling microMIPS code, this constraint matches a memory operand
2947whose address is formed from a base register and a 12-bit offset. These
2948operands can be used for microMIPS instructions such as @code{ll} and
2949@code{sc}. When not compiling for microMIPS code, @code{ZC} is
2950equivalent to @code{R}.
2951
2952@item ZD
2953When compiling microMIPS code, this constraint matches an address operand
2954that is formed from a base register and a 12-bit offset. These operands
2955can be used for microMIPS instructions such as @code{prefetch}. When
2956not compiling for microMIPS code, @code{ZD} is equivalent to @code{p}.
4226378a
PK
2957@end table
2958
c47b0cb4 2959@item Motorola 680x0---@file{config/m68k/constraints.md}
03dda8e3
RK
2960@table @code
2961@item a
2962Address register
2963
2964@item d
2965Data register
2966
2967@item f
296868881 floating-point register, if available
2969
03dda8e3
RK
2970@item I
2971Integer in the range 1 to 8
2972
2973@item J
1e5f973d 297416-bit signed number
03dda8e3
RK
2975
2976@item K
2977Signed number whose magnitude is greater than 0x80
2978
2979@item L
630d3d5a 2980Integer in the range @minus{}8 to @minus{}1
03dda8e3
RK
2981
2982@item M
2983Signed number whose magnitude is greater than 0x100
2984
c47b0cb4
MK
2985@item N
2986Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
2987
2988@item O
298916 (for rotate using swap)
2990
2991@item P
2992Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
2993
2994@item R
2995Numbers that mov3q can handle
2996
03dda8e3
RK
2997@item G
2998Floating point constant that is not a 68881 constant
c47b0cb4
MK
2999
3000@item S
3001Operands that satisfy 'm' when -mpcrel is in effect
3002
3003@item T
3004Operands that satisfy 's' when -mpcrel is not in effect
3005
3006@item Q
3007Address register indirect addressing mode
3008
3009@item U
3010Register offset addressing
3011
3012@item W
3013const_call_operand
3014
3015@item Cs
3016symbol_ref or const
3017
3018@item Ci
3019const_int
3020
3021@item C0
3022const_int 0
3023
3024@item Cj
3025Range of signed numbers that don't fit in 16 bits
3026
3027@item Cmvq
3028Integers valid for mvq
3029
3030@item Capsw
3031Integers valid for a moveq followed by a swap
3032
3033@item Cmvz
3034Integers valid for mvz
3035
3036@item Cmvs
3037Integers valid for mvs
3038
3039@item Ap
3040push_operand
3041
3042@item Ac
3043Non-register operands allowed in clr
3044
03dda8e3
RK
3045@end table
3046
cceb575c
AG
3047@item Moxie---@file{config/moxie/constraints.md}
3048@table @code
3049@item A
3050An absolute address
3051
3052@item B
3053An offset address
3054
3055@item W
3056A register indirect memory operand
3057
3058@item I
3059A constant in the range of 0 to 255.
3060
3061@item N
8ad1dde7 3062A constant in the range of 0 to @minus{}255.
cceb575c
AG
3063
3064@end table
3065
5e426dd4
PK
3066@item PDP-11---@file{config/pdp11/constraints.md}
3067@table @code
3068@item a
3069Floating point registers AC0 through AC3. These can be loaded from/to
3070memory with a single instruction.
3071
3072@item d
868e54d1
PK
3073Odd numbered general registers (R1, R3, R5). These are used for
307416-bit multiply operations.
5e426dd4
PK
3075
3076@item f
3077Any of the floating point registers (AC0 through AC5).
3078
3079@item G
3080Floating point constant 0.
3081
3082@item I
3083An integer constant that fits in 16 bits.
3084
3085@item J
3086An integer constant whose low order 16 bits are zero.
3087
3088@item K
3089An integer constant that does not meet the constraints for codes
3090@samp{I} or @samp{J}.
3091
3092@item L
3093The integer constant 1.
3094
3095@item M
868e54d1 3096The integer constant @minus{}1.
5e426dd4
PK
3097
3098@item N
3099The integer constant 0.
3100
3101@item O
868e54d1 3102Integer constants @minus{}4 through @minus{}1 and 1 through 4; shifts by these
5e426dd4
PK
3103amounts are handled as multiple single-bit shifts rather than a single
3104variable-length shift.
3105
3106@item Q
3107A memory reference which requires an additional word (address or
3108offset) after the opcode.
3109
3110@item R
3111A memory reference that is encoded within the opcode.
3112
3113@end table
3114
85b8555e
DD
3115@item RL78---@file{config/rl78/constraints.md}
3116@table @code
3117
3118@item Int3
3119An integer constant in the range 1 @dots{} 7.
3120@item Int8
3121An integer constant in the range 0 @dots{} 255.
3122@item J
3123An integer constant in the range @minus{}255 @dots{} 0
3124@item K
3125The integer constant 1.
3126@item L
3127The integer constant -1.
3128@item M
3129The integer constant 0.
3130@item N
3131The integer constant 2.
3132@item O
3133The integer constant -2.
3134@item P
3135An integer constant in the range 1 @dots{} 15.
3136@item Qbi
3137The built-in compare types--eq, ne, gtu, ltu, geu, and leu.
3138@item Qsc
3139The synthetic compare types--gt, lt, ge, and le.
3140@item Wab
3141A memory reference with an absolute address.
3142@item Wbc
3143A memory reference using @code{BC} as a base register, with an optional offset.
3144@item Wca
3145A memory reference using @code{AX}, @code{BC}, @code{DE}, or @code{HL} for the address, for calls.
3146@item Wcv
3147A memory reference using any 16-bit register pair for the address, for calls.
3148@item Wd2
3149A memory reference using @code{DE} as a base register, with an optional offset.
3150@item Wde
3151A memory reference using @code{DE} as a base register, without any offset.
3152@item Wfr
3153Any memory reference to an address in the far address space.
3154@item Wh1
3155A memory reference using @code{HL} as a base register, with an optional one-byte offset.
3156@item Whb
3157A memory reference using @code{HL} as a base register, with @code{B} or @code{C} as the index register.
3158@item Whl
3159A memory reference using @code{HL} as a base register, without any offset.
3160@item Ws1
3161A memory reference using @code{SP} as a base register, with an optional one-byte offset.
3162@item Y
3163Any memory reference to an address in the near address space.
3164@item A
3165The @code{AX} register.
3166@item B
3167The @code{BC} register.
3168@item D
3169The @code{DE} register.
3170@item R
3171@code{A} through @code{L} registers.
3172@item S
3173The @code{SP} register.
3174@item T
3175The @code{HL} register.
3176@item Z08W
3177The 16-bit @code{R8} register.
3178@item Z10W
3179The 16-bit @code{R10} register.
3180@item Zint
3181The registers reserved for interrupts (@code{R24} to @code{R31}).
3182@item a
3183The @code{A} register.
3184@item b
3185The @code{B} register.
3186@item c
3187The @code{C} register.
3188@item d
3189The @code{D} register.
3190@item e
3191The @code{E} register.
3192@item h
3193The @code{H} register.
3194@item l
3195The @code{L} register.
3196@item v
3197The virtual registers.
3198@item w
3199The @code{PSW} register.
3200@item x
3201The @code{X} register.
3202
3203@end table
3204
65a324b4
NC
3205@item RX---@file{config/rx/constraints.md}
3206@table @code
3207@item Q
3208An address which does not involve register indirect addressing or
3209pre/post increment/decrement addressing.
3210
3211@item Symbol
3212A symbol reference.
3213
3214@item Int08
3215A constant in the range @minus{}256 to 255, inclusive.
3216
3217@item Sint08
3218A constant in the range @minus{}128 to 127, inclusive.
3219
3220@item Sint16
3221A constant in the range @minus{}32768 to 32767, inclusive.
3222
3223@item Sint24
3224A constant in the range @minus{}8388608 to 8388607, inclusive.
3225
3226@item Uint04
3227A constant in the range 0 to 15, inclusive.
3228
3229@end table
3230
03dda8e3 3231@need 1000
74fe790b 3232@item SPARC---@file{config/sparc/sparc.h}
03dda8e3
RK
3233@table @code
3234@item f
53e5f173
EB
3235Floating-point register on the SPARC-V8 architecture and
3236lower floating-point register on the SPARC-V9 architecture.
03dda8e3
RK
3237
3238@item e
8a36672b 3239Floating-point register. It is equivalent to @samp{f} on the
53e5f173
EB
3240SPARC-V8 architecture and contains both lower and upper
3241floating-point registers on the SPARC-V9 architecture.
03dda8e3 3242
8a69f99f
EB
3243@item c
3244Floating-point condition code register.
3245
3246@item d
8a36672b 3247Lower floating-point register. It is only valid on the SPARC-V9
53e5f173 3248architecture when the Visual Instruction Set is available.
8a69f99f
EB
3249
3250@item b
8a36672b 3251Floating-point register. It is only valid on the SPARC-V9 architecture
53e5f173 3252when the Visual Instruction Set is available.
8a69f99f
EB
3253
3254@item h
325564-bit global or out register for the SPARC-V8+ architecture.
3256
923f9ded
DM
3257@item C
3258The constant all-ones, for floating-point.
3259
8b98b5fd
DM
3260@item A
3261Signed 5-bit constant
3262
66e62b49
KH
3263@item D
3264A vector constant
3265
03dda8e3 3266@item I
1e5f973d 3267Signed 13-bit constant
03dda8e3
RK
3268
3269@item J
3270Zero
3271
3272@item K
1e5f973d 327332-bit constant with the low 12 bits clear (a constant that can be
03dda8e3
RK
3274loaded with the @code{sethi} instruction)
3275
7d6040e8 3276@item L
923f9ded
DM
3277A constant in the range supported by @code{movcc} instructions (11-bit
3278signed immediate)
7d6040e8
AO
3279
3280@item M
923f9ded
DM
3281A constant in the range supported by @code{movrcc} instructions (10-bit
3282signed immediate)
7d6040e8
AO
3283
3284@item N
3285Same as @samp{K}, except that it verifies that bits that are not in the
57694e40 3286lower 32-bit range are all zero. Must be used instead of @samp{K} for
7d6040e8
AO
3287modes wider than @code{SImode}
3288
ef0139b1
EB
3289@item O
3290The constant 4096
3291
03dda8e3
RK
3292@item G
3293Floating-point zero
3294
3295@item H
1e5f973d 3296Signed 13-bit constant, sign-extended to 32 or 64 bits
03dda8e3 3297
923f9ded
DM
3298@item P
3299The constant -1
3300
03dda8e3 3301@item Q
62190128
DM
3302Floating-point constant whose integral representation can
3303be moved into an integer register using a single sethi
3304instruction
3305
3306@item R
3307Floating-point constant whose integral representation can
3308be moved into an integer register using a single mov
3309instruction
03dda8e3
RK
3310
3311@item S
62190128
DM
3312Floating-point constant whose integral representation can
3313be moved into an integer register using a high/lo_sum
3314instruction sequence
03dda8e3
RK
3315
3316@item T
3317Memory address aligned to an 8-byte boundary
3318
aaa050aa
DM
3319@item U
3320Even register
3321
7a31a340 3322@item W
c75d6010
JM
3323Memory address for @samp{e} constraint registers
3324
923f9ded
DM
3325@item w
3326Memory address with only a base register
3327
c75d6010
JM
3328@item Y
3329Vector zero
7a31a340 3330
6ca30df6
MH
3331@end table
3332
85d9c13c
TS
3333@item SPU---@file{config/spu/spu.h}
3334@table @code
3335@item a
ff2ce160 3336An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is treated as a 64 bit value.
85d9c13c
TS
3337
3338@item c
ff2ce160 3339An immediate for and/xor/or instructions. const_int is treated as a 64 bit value.
85d9c13c
TS
3340
3341@item d
ff2ce160 3342An immediate for the @code{iohl} instruction. const_int is treated as a 64 bit value.
85d9c13c
TS
3343
3344@item f
ff2ce160 3345An immediate which can be loaded with @code{fsmbi}.
85d9c13c
TS
3346
3347@item A
ff2ce160 3348An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is treated as a 32 bit value.
85d9c13c
TS
3349
3350@item B
ff2ce160 3351An immediate for most arithmetic instructions. const_int is treated as a 32 bit value.
85d9c13c
TS
3352
3353@item C
ff2ce160 3354An immediate for and/xor/or instructions. const_int is treated as a 32 bit value.
85d9c13c
TS
3355
3356@item D
ff2ce160 3357An immediate for the @code{iohl} instruction. const_int is treated as a 32 bit value.
85d9c13c
TS
3358
3359@item I
ff2ce160 3360A constant in the range [@minus{}64, 63] for shift/rotate instructions.
85d9c13c
TS
3361
3362@item J
ff2ce160 3363An unsigned 7-bit constant for conversion/nop/channel instructions.
85d9c13c
TS
3364
3365@item K
ff2ce160 3366A signed 10-bit constant for most arithmetic instructions.
85d9c13c
TS
3367
3368@item M
ff2ce160 3369A signed 16 bit immediate for @code{stop}.
85d9c13c
TS
3370
3371@item N
ff2ce160 3372An unsigned 16-bit constant for @code{iohl} and @code{fsmbi}.
85d9c13c
TS
3373
3374@item O
ff2ce160 3375An unsigned 7-bit constant whose 3 least significant bits are 0.
85d9c13c
TS
3376
3377@item P
ff2ce160 3378An unsigned 3-bit constant for 16-byte rotates and shifts
85d9c13c
TS
3379
3380@item R
ff2ce160 3381Call operand, reg, for indirect calls
85d9c13c
TS
3382
3383@item S
ff2ce160 3384Call operand, symbol, for relative calls.
85d9c13c
TS
3385
3386@item T
ff2ce160 3387Call operand, const_int, for absolute calls.
85d9c13c
TS
3388
3389@item U
ff2ce160 3390An immediate which can be loaded with the il/ila/ilh/ilhu instructions. const_int is sign extended to 128 bit.
85d9c13c
TS
3391
3392@item W
ff2ce160 3393An immediate for shift and rotate instructions. const_int is treated as a 32 bit value.
85d9c13c
TS
3394
3395@item Y
ff2ce160 3396An immediate for and/xor/or instructions. const_int is sign extended as a 128 bit.
85d9c13c
TS
3397
3398@item Z
ff2ce160 3399An immediate for the @code{iohl} instruction. const_int is sign extended to 128 bit.
85d9c13c
TS
3400
3401@end table
3402
74fe790b 3403@item S/390 and zSeries---@file{config/s390/s390.h}
91abf72d
HP
3404@table @code
3405@item a
3406Address register (general purpose register except r0)
3407
9dc62c00
AK
3408@item c
3409Condition code register
3410
91abf72d
HP
3411@item d
3412Data register (arbitrary general purpose register)
3413
3414@item f
3415Floating-point register
3416
3417@item I
3418Unsigned 8-bit constant (0--255)
3419
3420@item J
3421Unsigned 12-bit constant (0--4095)
3422
3423@item K
3424Signed 16-bit constant (@minus{}32768--32767)
3425
3426@item L
f19a9af7
AK
3427Value appropriate as displacement.
3428@table @code
6ccde948
RW
3429@item (0..4095)
3430for short displacement
8ad1dde7 3431@item (@minus{}524288..524287)
6ccde948 3432for long displacement
f19a9af7
AK
3433@end table
3434
3435@item M
3436Constant integer with a value of 0x7fffffff.
3437
3438@item N
3439Multiple letter constraint followed by 4 parameter letters.
3440@table @code
6ccde948
RW
3441@item 0..9:
3442number of the part counting from most to least significant
3443@item H,Q:
3444mode of the part
3445@item D,S,H:
3446mode of the containing operand
3447@item 0,F:
3448value of the other parts (F---all bits set)
f19a9af7
AK
3449@end table
3450The constraint matches if the specified part of a constant
dc9a511d 3451has a value different from its other parts.
91abf72d
HP
3452
3453@item Q
f19a9af7
AK
3454Memory reference without index register and with short displacement.
3455
3456@item R
3457Memory reference with index register and short displacement.
91abf72d
HP
3458
3459@item S
f19a9af7
AK
3460Memory reference without index register but with long displacement.
3461
3462@item T
3463Memory reference with index register and long displacement.
3464
3465@item U
3466Pointer with short displacement.
3467
3468@item W
3469Pointer with long displacement.
3470
3471@item Y
3472Shift count operand.
91abf72d
HP
3473
3474@end table
3475
93ef7c1f
CL
3476@item Score family---@file{config/score/score.h}
3477@table @code
3478@item d
3479Registers from r0 to r32.
3480
3481@item e
3482Registers from r0 to r16.
3483
3484@item t
3485r8---r11 or r22---r27 registers.
3486
3487@item h
3488hi register.
3489
3490@item l
3491lo register.
3492
3493@item x
3494hi + lo register.
3495
3496@item q
3497cnt register.
3498
3499@item y
3500lcb register.
3501
3502@item z
3503scb register.
3504
3505@item a
3506cnt + lcb + scb register.
3507
3508@item c
3509cr0---cr15 register.
3510
3511@item b
3512cp1 registers.
3513
3514@item f
3515cp2 registers.
3516
3517@item i
3518cp3 registers.
3519
3520@item j
3521cp1 + cp2 + cp3 registers.
3522
3523@item I
c6681463 3524High 16-bit constant (32-bit constant with 16 LSBs zero).
93ef7c1f
CL
3525
3526@item J
3527Unsigned 5 bit integer (in the range 0 to 31).
3528
3529@item K
3530Unsigned 16 bit integer (in the range 0 to 65535).
3531
3532@item L
3533Signed 16 bit integer (in the range @minus{}32768 to 32767).
3534
3535@item M
3536Unsigned 14 bit integer (in the range 0 to 16383).
3537
3538@item N
3539Signed 14 bit integer (in the range @minus{}8192 to 8191).
3540
93ef7c1f
CL
3541@item Z
3542Any SYMBOL_REF.
3543@end table
3544
74fe790b 3545@item Xstormy16---@file{config/stormy16/stormy16.h}
9f339dde
GK
3546@table @code
3547@item a
3548Register r0.
3549
3550@item b
3551Register r1.
3552
3553@item c
3554Register r2.
3555
3556@item d
3557Register r8.
3558
3559@item e
3560Registers r0 through r7.
3561
3562@item t
3563Registers r0 and r1.
3564
3565@item y
3566The carry register.
3567
3568@item z
3569Registers r8 and r9.
3570
3571@item I
3572A constant between 0 and 3 inclusive.
3573
3574@item J
3575A constant that has exactly one bit set.
3576
3577@item K
3578A constant that has exactly one bit clear.
3579
3580@item L
3581A constant between 0 and 255 inclusive.
3582
3583@item M
69a0611f 3584A constant between @minus{}255 and 0 inclusive.
9f339dde
GK
3585
3586@item N
69a0611f 3587A constant between @minus{}3 and 0 inclusive.
9f339dde
GK
3588
3589@item O
3590A constant between 1 and 4 inclusive.
3591
3592@item P
69a0611f 3593A constant between @minus{}4 and @minus{}1 inclusive.
9f339dde
GK
3594
3595@item Q
3596A memory reference that is a stack push.
3597
3598@item R
3599A memory reference that is a stack pop.
3600
3601@item S
63519d23 3602A memory reference that refers to a constant address of known value.
9f339dde
GK
3603
3604@item T
3605The register indicated by Rx (not implemented yet).
3606
3607@item U
3608A constant that is not between 2 and 15 inclusive.
3609
e2ce66a9
DD
3610@item Z
3611The constant 0.
3612
9f339dde
GK
3613@end table
3614
bcead286
BS
3615@item TI C6X family---@file{config/c6x/constraints.md}
3616@table @code
3617@item a
3618Register file A (A0--A31).
3619
3620@item b
3621Register file B (B0--B31).
3622
3623@item A
3624Predicate registers in register file A (A0--A2 on C64X and
3625higher, A1 and A2 otherwise).
3626
3627@item B
3628Predicate registers in register file B (B0--B2).
3629
3630@item C
3631A call-used register in register file B (B0--B9, B16--B31).
3632
3633@item Da
3634Register file A, excluding predicate registers (A3--A31,
3635plus A0 if not C64X or higher).
3636
3637@item Db
3638Register file B, excluding predicate registers (B3--B31).
3639
3640@item Iu4
3641Integer constant in the range 0 @dots{} 15.
3642
3643@item Iu5
3644Integer constant in the range 0 @dots{} 31.
3645
3646@item In5
3647Integer constant in the range @minus{}31 @dots{} 0.
3648
3649@item Is5
3650Integer constant in the range @minus{}16 @dots{} 15.
3651
3652@item I5x
3653Integer constant that can be the operand of an ADDA or a SUBA insn.
3654
3655@item IuB
3656Integer constant in the range 0 @dots{} 65535.
3657
3658@item IsB
3659Integer constant in the range @minus{}32768 @dots{} 32767.
3660
3661@item IsC
3662Integer constant in the range @math{-2^{20}} @dots{} @math{2^{20} - 1}.
3663
3664@item Jc
3665Integer constant that is a valid mask for the clr instruction.
3666
3667@item Js
3668Integer constant that is a valid mask for the set instruction.
3669
3670@item Q
3671Memory location with A base register.
3672
3673@item R
3674Memory location with B base register.
3675
3676@ifset INTERNALS
3677@item S0
3678On C64x+ targets, a GP-relative small data reference.
3679
3680@item S1
3681Any kind of @code{SYMBOL_REF}, for use in a call address.
3682
3683@item Si
3684Any kind of immediate operand, unless it matches the S0 constraint.
3685
3686@item T
3687Memory location with B base register, but not using a long offset.
3688
3689@item W
3690A memory operand with an address that can't be used in an unaligned access.
3691
3692@end ifset
3693@item Z
3694Register B14 (aka DP).
3695
3696@end table
3697
dd552284
WL
3698@item TILE-Gx---@file{config/tilegx/constraints.md}
3699@table @code
3700@item R00
3701@itemx R01
3702@itemx R02
3703@itemx R03
3704@itemx R04
3705@itemx R05
3706@itemx R06
3707@itemx R07
3708@itemx R08
3709@itemx R09
655c5444 3710@itemx R10
dd552284
WL
3711Each of these represents a register constraint for an individual
3712register, from r0 to r10.
3713
3714@item I
3715Signed 8-bit integer constant.
3716
3717@item J
3718Signed 16-bit integer constant.
3719
3720@item K
3721Unsigned 16-bit integer constant.
3722
3723@item L
3724Integer constant that fits in one signed byte when incremented by one
3725(@minus{}129 @dots{} 126).
3726
3727@item m
3728Memory operand. If used together with @samp{<} or @samp{>}, the
3729operand can have postincrement which requires printing with @samp{%In}
3730and @samp{%in} on TILE-Gx. For example:
3731
3732@smallexample
3733asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
3734@end smallexample
3735
3736@item M
3737A bit mask suitable for the BFINS instruction.
3738
3739@item N
3740Integer constant that is a byte tiled out eight times.
3741
3742@item O
3743The integer zero constant.
3744
3745@item P
3746Integer constant that is a sign-extended byte tiled out as four shorts.
3747
3748@item Q
3749Integer constant that fits in one signed byte when incremented
3750(@minus{}129 @dots{} 126), but excluding -1.
3751
3752@item S
3753Integer constant that has all 1 bits consecutive and starting at bit 0.
3754
3755@item T
3756A 16-bit fragment of a got, tls, or pc-relative reference.
3757
3758@item U
3759Memory operand except postincrement. This is roughly the same as
3760@samp{m} when not used together with @samp{<} or @samp{>}.
3761
3762@item W
3763An 8-element vector constant with identical elements.
3764
3765@item Y
3766A 4-element vector constant with identical elements.
3767
3768@item Z0
3769The integer constant 0xffffffff.
3770
3771@item Z1
3772The integer constant 0xffffffff00000000.
3773
3774@end table
3775
3776@item TILEPro---@file{config/tilepro/constraints.md}
3777@table @code
3778@item R00
3779@itemx R01
3780@itemx R02
3781@itemx R03
3782@itemx R04
3783@itemx R05
3784@itemx R06
3785@itemx R07
3786@itemx R08
3787@itemx R09
655c5444 3788@itemx R10
dd552284
WL
3789Each of these represents a register constraint for an individual
3790register, from r0 to r10.
3791
3792@item I
3793Signed 8-bit integer constant.
3794
3795@item J
3796Signed 16-bit integer constant.
3797
3798@item K
3799Nonzero integer constant with low 16 bits zero.
3800
3801@item L
3802Integer constant that fits in one signed byte when incremented by one
3803(@minus{}129 @dots{} 126).
3804
3805@item m
3806Memory operand. If used together with @samp{<} or @samp{>}, the
3807operand can have postincrement which requires printing with @samp{%In}
3808and @samp{%in} on TILEPro. For example:
3809
3810@smallexample
3811asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
3812@end smallexample
3813
3814@item M
3815A bit mask suitable for the MM instruction.
3816
3817@item N
3818Integer constant that is a byte tiled out four times.
3819
3820@item O
3821The integer zero constant.
3822
3823@item P
3824Integer constant that is a sign-extended byte tiled out as two shorts.
3825
3826@item Q
3827Integer constant that fits in one signed byte when incremented
3828(@minus{}129 @dots{} 126), but excluding -1.
3829
3830@item T
3831A symbolic operand, or a 16-bit fragment of a got, tls, or pc-relative
3832reference.
3833
3834@item U
3835Memory operand except postincrement. This is roughly the same as
3836@samp{m} when not used together with @samp{<} or @samp{>}.
3837
3838@item W
3839A 4-element vector constant with identical elements.
3840
3841@item Y
3842A 2-element vector constant with identical elements.
3843
3844@end table
3845
887af464 3846@item Xtensa---@file{config/xtensa/constraints.md}
03984308
BW
3847@table @code
3848@item a
3849General-purpose 32-bit register
3850
3851@item b
3852One-bit boolean register
3853
3854@item A
3855MAC16 40-bit accumulator register
3856
3857@item I
3858Signed 12-bit integer constant, for use in MOVI instructions
3859
3860@item J
3861Signed 8-bit integer constant, for use in ADDI instructions
3862
3863@item K
3864Integer constant valid for BccI instructions
3865
3866@item L
3867Unsigned constant valid for BccUI instructions
3868
3869@end table
3870
03dda8e3
RK
3871@end table
3872
7ac28727
AK
3873@ifset INTERNALS
3874@node Disable Insn Alternatives
3875@subsection Disable insn alternatives using the @code{enabled} attribute
3876@cindex enabled
3877
3878The @code{enabled} insn attribute may be used to disable certain insn
3879alternatives for machine-specific reasons. This is useful when adding
3880new instructions to an existing pattern which are only available for
3881certain cpu architecture levels as specified with the @code{-march=}
3882option.
3883
3884If an insn alternative is disabled, then it will never be used. The
3885compiler treats the constraints for the disabled alternative as
3886unsatisfiable.
3887
3888In order to make use of the @code{enabled} attribute a back end has to add
3889in the machine description files:
3890
3891@enumerate
3892@item
3893A definition of the @code{enabled} insn attribute. The attribute is
3894defined as usual using the @code{define_attr} command. This
3895definition should be based on other insn attributes and/or target flags.
3896The @code{enabled} attribute is a numeric attribute and should evaluate to
3897@code{(const_int 1)} for an enabled alternative and to
3898@code{(const_int 0)} otherwise.
3899@item
3900A definition of another insn attribute used to describe for what
3901reason an insn alternative might be available or
3902not. E.g. @code{cpu_facility} as in the example below.
3903@item
a640c13b 3904An assignment for the second attribute to each insn definition
7ac28727
AK
3905combining instructions which are not all available under the same
3906circumstances. (Note: It obviously only makes sense for definitions
3907with more than one alternative. Otherwise the insn pattern should be
3908disabled or enabled using the insn condition.)
3909@end enumerate
3910
3911E.g. the following two patterns could easily be merged using the @code{enabled}
3912attribute:
3913
3914@smallexample
3915
3916(define_insn "*movdi_old"
3917 [(set (match_operand:DI 0 "register_operand" "=d")
3918 (match_operand:DI 1 "register_operand" " d"))]
3919 "!TARGET_NEW"
3920 "lgr %0,%1")
3921
3922(define_insn "*movdi_new"
3923 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
3924 (match_operand:DI 1 "register_operand" " d,d,f"))]
3925 "TARGET_NEW"
3926 "@@
3927 lgr %0,%1
3928 ldgr %0,%1
3929 lgdr %0,%1")
3930
3931@end smallexample
3932
3933to:
3934
3935@smallexample
3936
3937(define_insn "*movdi_combined"
3938 [(set (match_operand:DI 0 "register_operand" "=d,f,d")
3939 (match_operand:DI 1 "register_operand" " d,d,f"))]
3940 ""
3941 "@@
3942 lgr %0,%1
3943 ldgr %0,%1
3944 lgdr %0,%1"
3945 [(set_attr "cpu_facility" "*,new,new")])
3946
3947@end smallexample
3948
3949with the @code{enabled} attribute defined like this:
3950
3951@smallexample
3952
3953(define_attr "cpu_facility" "standard,new" (const_string "standard"))
3954
3955(define_attr "enabled" ""
3956 (cond [(eq_attr "cpu_facility" "standard") (const_int 1)
3957 (and (eq_attr "cpu_facility" "new")
3958 (ne (symbol_ref "TARGET_NEW") (const_int 0)))
3959 (const_int 1)]
3960 (const_int 0)))
3961
3962@end smallexample
3963
3964@end ifset
3965
03dda8e3 3966@ifset INTERNALS
f38840db
ZW
3967@node Define Constraints
3968@subsection Defining Machine-Specific Constraints
3969@cindex defining constraints
3970@cindex constraints, defining
3971
3972Machine-specific constraints fall into two categories: register and
3973non-register constraints. Within the latter category, constraints
3974which allow subsets of all possible memory or address operands should
3975be specially marked, to give @code{reload} more information.
3976
3977Machine-specific constraints can be given names of arbitrary length,
3978but they must be entirely composed of letters, digits, underscores
3979(@samp{_}), and angle brackets (@samp{< >}). Like C identifiers, they
ff2ce160 3980must begin with a letter or underscore.
f38840db
ZW
3981
3982In order to avoid ambiguity in operand constraint strings, no
3983constraint can have a name that begins with any other constraint's
3984name. For example, if @code{x} is defined as a constraint name,
3985@code{xy} may not be, and vice versa. As a consequence of this rule,
3986no constraint may begin with one of the generic constraint letters:
3987@samp{E F V X g i m n o p r s}.
3988
3989Register constraints correspond directly to register classes.
3990@xref{Register Classes}. There is thus not much flexibility in their
3991definitions.
3992
3993@deffn {MD Expression} define_register_constraint name regclass docstring
3994All three arguments are string constants.
3995@var{name} is the name of the constraint, as it will appear in
5be527d0
RG
3996@code{match_operand} expressions. If @var{name} is a multi-letter
3997constraint its length shall be the same for all constraints starting
3998with the same letter. @var{regclass} can be either the
f38840db
ZW
3999name of the corresponding register class (@pxref{Register Classes}),
4000or a C expression which evaluates to the appropriate register class.
4001If it is an expression, it must have no side effects, and it cannot
4002look at the operand. The usual use of expressions is to map some
4003register constraints to @code{NO_REGS} when the register class
4004is not available on a given subarchitecture.
4005
4006@var{docstring} is a sentence documenting the meaning of the
4007constraint. Docstrings are explained further below.
4008@end deffn
4009
4010Non-register constraints are more like predicates: the constraint
4011definition gives a Boolean expression which indicates whether the
4012constraint matches.
4013
4014@deffn {MD Expression} define_constraint name docstring exp
4015The @var{name} and @var{docstring} arguments are the same as for
4016@code{define_register_constraint}, but note that the docstring comes
4017immediately after the name for these expressions. @var{exp} is an RTL
4018expression, obeying the same rules as the RTL expressions in predicate
4019definitions. @xref{Defining Predicates}, for details. If it
4020evaluates true, the constraint matches; if it evaluates false, it
4021doesn't. Constraint expressions should indicate which RTL codes they
4022might match, just like predicate expressions.
4023
4024@code{match_test} C expressions have access to the
4025following variables:
4026
4027@table @var
4028@item op
4029The RTL object defining the operand.
4030@item mode
4031The machine mode of @var{op}.
4032@item ival
4033@samp{INTVAL (@var{op})}, if @var{op} is a @code{const_int}.
4034@item hval
4035@samp{CONST_DOUBLE_HIGH (@var{op})}, if @var{op} is an integer
4036@code{const_double}.
4037@item lval
4038@samp{CONST_DOUBLE_LOW (@var{op})}, if @var{op} is an integer
4039@code{const_double}.
4040@item rval
4041@samp{CONST_DOUBLE_REAL_VALUE (@var{op})}, if @var{op} is a floating-point
3fa1b0e5 4042@code{const_double}.
f38840db
ZW
4043@end table
4044
4045The @var{*val} variables should only be used once another piece of the
4046expression has verified that @var{op} is the appropriate kind of RTL
4047object.
4048@end deffn
4049
4050Most non-register constraints should be defined with
4051@code{define_constraint}. The remaining two definition expressions
4052are only appropriate for constraints that should be handled specially
4053by @code{reload} if they fail to match.
4054
4055@deffn {MD Expression} define_memory_constraint name docstring exp
4056Use this expression for constraints that match a subset of all memory
4057operands: that is, @code{reload} can make them match by converting the
4058operand to the form @samp{@w{(mem (reg @var{X}))}}, where @var{X} is a
4059base register (from the register class specified by
4060@code{BASE_REG_CLASS}, @pxref{Register Classes}).
4061
4062For example, on the S/390, some instructions do not accept arbitrary
4063memory references, but only those that do not make use of an index
4064register. The constraint letter @samp{Q} is defined to represent a
4065memory address of this type. If @samp{Q} is defined with
4066@code{define_memory_constraint}, a @samp{Q} constraint can handle any
4067memory operand, because @code{reload} knows it can simply copy the
4068memory address into a base register if required. This is analogous to
e4ae5e77 4069the way an @samp{o} constraint can handle any memory operand.
f38840db
ZW
4070
4071The syntax and semantics are otherwise identical to
4072@code{define_constraint}.
4073@end deffn
4074
4075@deffn {MD Expression} define_address_constraint name docstring exp
4076Use this expression for constraints that match a subset of all address
4077operands: that is, @code{reload} can make the constraint match by
4078converting the operand to the form @samp{@w{(reg @var{X})}}, again
4079with @var{X} a base register.
4080
4081Constraints defined with @code{define_address_constraint} can only be
4082used with the @code{address_operand} predicate, or machine-specific
4083predicates that work the same way. They are treated analogously to
4084the generic @samp{p} constraint.
4085
4086The syntax and semantics are otherwise identical to
4087@code{define_constraint}.
4088@end deffn
4089
4090For historical reasons, names beginning with the letters @samp{G H}
4091are reserved for constraints that match only @code{const_double}s, and
4092names beginning with the letters @samp{I J K L M N O P} are reserved
4093for constraints that match only @code{const_int}s. This may change in
4094the future. For the time being, constraints with these names must be
4095written in a stylized form, so that @code{genpreds} can tell you did
4096it correctly:
4097
4098@smallexample
4099@group
4100(define_constraint "[@var{GHIJKLMNOP}]@dots{}"
4101 "@var{doc}@dots{}"
4102 (and (match_code "const_int") ; @r{@code{const_double} for G/H}
4103 @var{condition}@dots{})) ; @r{usually a @code{match_test}}
4104@end group
4105@end smallexample
4106@c the semicolons line up in the formatted manual
4107
4108It is fine to use names beginning with other letters for constraints
4109that match @code{const_double}s or @code{const_int}s.
4110
4111Each docstring in a constraint definition should be one or more complete
4112sentences, marked up in Texinfo format. @emph{They are currently unused.}
4113In the future they will be copied into the GCC manual, in @ref{Machine
4114Constraints}, replacing the hand-maintained tables currently found in
4115that section. Also, in the future the compiler may use this to give
4116more helpful diagnostics when poor choice of @code{asm} constraints
4117causes a reload failure.
4118
4119If you put the pseudo-Texinfo directive @samp{@@internal} at the
4120beginning of a docstring, then (in the future) it will appear only in
4121the internals manual's version of the machine-specific constraint tables.
4122Use this for constraints that should not appear in @code{asm} statements.
4123
4124@node C Constraint Interface
4125@subsection Testing constraints from C
4126@cindex testing constraints
4127@cindex constraints, testing
4128
4129It is occasionally useful to test a constraint from C code rather than
4130implicitly via the constraint string in a @code{match_operand}. The
4131generated file @file{tm_p.h} declares a few interfaces for working
4132with machine-specific constraints. None of these interfaces work with
4133the generic constraints described in @ref{Simple Constraints}. This
4134may change in the future.
4135
4136@strong{Warning:} @file{tm_p.h} may declare other functions that
4137operate on constraints, besides the ones documented here. Do not use
4138those functions from machine-dependent code. They exist to implement
4139the old constraint interface that machine-independent components of
4140the compiler still expect. They will change or disappear in the
4141future.
4142
4143Some valid constraint names are not valid C identifiers, so there is a
4144mangling scheme for referring to them from C@. Constraint names that
4145do not contain angle brackets or underscores are left unchanged.
4146Underscores are doubled, each @samp{<} is replaced with @samp{_l}, and
4147each @samp{>} with @samp{_g}. Here are some examples:
4148
4149@c the @c's prevent double blank lines in the printed manual.
4150@example
4151@multitable {Original} {Mangled}
cccb0908 4152@item @strong{Original} @tab @strong{Mangled} @c
f38840db
ZW
4153@item @code{x} @tab @code{x} @c
4154@item @code{P42x} @tab @code{P42x} @c
4155@item @code{P4_x} @tab @code{P4__x} @c
4156@item @code{P4>x} @tab @code{P4_gx} @c
4157@item @code{P4>>} @tab @code{P4_g_g} @c
4158@item @code{P4_g>} @tab @code{P4__g_g} @c
4159@end multitable
4160@end example
4161
4162Throughout this section, the variable @var{c} is either a constraint
4163in the abstract sense, or a constant from @code{enum constraint_num};
4164the variable @var{m} is a mangled constraint name (usually as part of
4165a larger identifier).
4166
4167@deftp Enum constraint_num
4168For each machine-specific constraint, there is a corresponding
4169enumeration constant: @samp{CONSTRAINT_} plus the mangled name of the
4170constraint. Functions that take an @code{enum constraint_num} as an
4171argument expect one of these constants.
4172
4173Machine-independent constraints do not have associated constants.
4174This may change in the future.
4175@end deftp
4176
4177@deftypefun {inline bool} satisfies_constraint_@var{m} (rtx @var{exp})
4178For each machine-specific, non-register constraint @var{m}, there is
4179one of these functions; it returns @code{true} if @var{exp} satisfies the
4180constraint. These functions are only visible if @file{rtl.h} was included
4181before @file{tm_p.h}.
4182@end deftypefun
4183
4184@deftypefun bool constraint_satisfied_p (rtx @var{exp}, enum constraint_num @var{c})
4185Like the @code{satisfies_constraint_@var{m}} functions, but the
4186constraint to test is given as an argument, @var{c}. If @var{c}
4187specifies a register constraint, this function will always return
4188@code{false}.
4189@end deftypefun
4190
4191@deftypefun {enum reg_class} regclass_for_constraint (enum constraint_num @var{c})
4192Returns the register class associated with @var{c}. If @var{c} is not
4193a register constraint, or those registers are not available for the
4194currently selected subtarget, returns @code{NO_REGS}.
4195@end deftypefun
4196
4197Here is an example use of @code{satisfies_constraint_@var{m}}. In
4198peephole optimizations (@pxref{Peephole Definitions}), operand
4199constraint strings are ignored, so if there are relevant constraints,
4200they must be tested in the C condition. In the example, the
4201optimization is applied if operand 2 does @emph{not} satisfy the
4202@samp{K} constraint. (This is a simplified version of a peephole
4203definition from the i386 machine description.)
4204
4205@smallexample
4206(define_peephole2
4207 [(match_scratch:SI 3 "r")
4208 (set (match_operand:SI 0 "register_operand" "")
6ccde948
RW
4209 (mult:SI (match_operand:SI 1 "memory_operand" "")
4210 (match_operand:SI 2 "immediate_operand" "")))]
f38840db
ZW
4211
4212 "!satisfies_constraint_K (operands[2])"
4213
4214 [(set (match_dup 3) (match_dup 1))
4215 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]
4216
4217 "")
4218@end smallexample
4219
03dda8e3
RK
4220@node Standard Names
4221@section Standard Pattern Names For Generation
4222@cindex standard pattern names
4223@cindex pattern names
4224@cindex names, pattern
4225
4226Here is a table of the instruction names that are meaningful in the RTL
4227generation pass of the compiler. Giving one of these names to an
4228instruction pattern tells the RTL generation pass that it can use the
556e0f21 4229pattern to accomplish a certain task.
03dda8e3
RK
4230
4231@table @asis
4232@cindex @code{mov@var{m}} instruction pattern
4233@item @samp{mov@var{m}}
4bd0bee9 4234Here @var{m} stands for a two-letter machine mode name, in lowercase.
03dda8e3
RK
4235This instruction pattern moves data with that machine mode from operand
42361 to operand 0. For example, @samp{movsi} moves full-word data.
4237
4238If operand 0 is a @code{subreg} with mode @var{m} of a register whose
4239own mode is wider than @var{m}, the effect of this instruction is
4240to store the specified value in the part of the register that corresponds
8feb4e28
JL
4241to mode @var{m}. Bits outside of @var{m}, but which are within the
4242same target word as the @code{subreg} are undefined. Bits which are
4243outside the target word are left unchanged.
03dda8e3
RK
4244
4245This class of patterns is special in several ways. First of all, each
65945ec1
HPN
4246of these names up to and including full word size @emph{must} be defined,
4247because there is no other way to copy a datum from one place to another.
4248If there are patterns accepting operands in larger modes,
4249@samp{mov@var{m}} must be defined for integer modes of those sizes.
03dda8e3
RK
4250
4251Second, these patterns are not used solely in the RTL generation pass.
4252Even the reload pass can generate move insns to copy values from stack
4253slots into temporary registers. When it does so, one of the operands is
4254a hard register and the other is an operand that can need to be reloaded
4255into a register.
4256
4257@findex force_reg
4258Therefore, when given such a pair of operands, the pattern must generate
4259RTL which needs no reloading and needs no temporary registers---no
4260registers other than the operands. For example, if you support the
4261pattern with a @code{define_expand}, then in such a case the
4262@code{define_expand} mustn't call @code{force_reg} or any other such
4263function which might generate new pseudo registers.
4264
4265This requirement exists even for subword modes on a RISC machine where
4266fetching those modes from memory normally requires several insns and
39ed8974 4267some temporary registers.
03dda8e3
RK
4268
4269@findex change_address
4270During reload a memory reference with an invalid address may be passed
4271as an operand. Such an address will be replaced with a valid address
4272later in the reload pass. In this case, nothing may be done with the
4273address except to use it as it stands. If it is copied, it will not be
4274replaced with a valid address. No attempt should be made to make such
4275an address into a valid address and no routine (such as
4276@code{change_address}) that will do so may be called. Note that
4277@code{general_operand} will fail when applied to such an address.
4278
4279@findex reload_in_progress
4280The global variable @code{reload_in_progress} (which must be explicitly
4281declared if required) can be used to determine whether such special
4282handling is required.
4283
4284The variety of operands that have reloads depends on the rest of the
4285machine description, but typically on a RISC machine these can only be
4286pseudo registers that did not get hard registers, while on other
4287machines explicit memory references will get optional reloads.
4288
4289If a scratch register is required to move an object to or from memory,
f1db3576
JL
4290it can be allocated using @code{gen_reg_rtx} prior to life analysis.
4291
9c34dbbf 4292If there are cases which need scratch registers during or after reload,
8a99f6f9 4293you must provide an appropriate secondary_reload target hook.
03dda8e3 4294
ef4375b2
KZ
4295@findex can_create_pseudo_p
4296The macro @code{can_create_pseudo_p} can be used to determine if it
f1db3576
JL
4297is unsafe to create new pseudo registers. If this variable is nonzero, then
4298it is unsafe to call @code{gen_reg_rtx} to allocate a new pseudo.
4299
956d6950 4300The constraints on a @samp{mov@var{m}} must permit moving any hard
03dda8e3
RK
4301register to any other hard register provided that
4302@code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
de8f4b07
AS
4303@code{TARGET_REGISTER_MOVE_COST} applied to their classes returns a value
4304of 2.
03dda8e3 4305
956d6950 4306It is obligatory to support floating point @samp{mov@var{m}}
03dda8e3
RK
4307instructions into and out of any registers that can hold fixed point
4308values, because unions and structures (which have modes @code{SImode} or
4309@code{DImode}) can be in those registers and they may have floating
4310point members.
4311
956d6950 4312There may also be a need to support fixed point @samp{mov@var{m}}
03dda8e3
RK
4313instructions in and out of floating point registers. Unfortunately, I
4314have forgotten why this was so, and I don't know whether it is still
4315true. If @code{HARD_REGNO_MODE_OK} rejects fixed point values in
4316floating point registers, then the constraints of the fixed point
956d6950 4317@samp{mov@var{m}} instructions must be designed to avoid ever trying to
03dda8e3
RK
4318reload into a floating point register.
4319
4320@cindex @code{reload_in} instruction pattern
4321@cindex @code{reload_out} instruction pattern
4322@item @samp{reload_in@var{m}}
4323@itemx @samp{reload_out@var{m}}
8a99f6f9
R
4324These named patterns have been obsoleted by the target hook
4325@code{secondary_reload}.
4326
03dda8e3
RK
4327Like @samp{mov@var{m}}, but used when a scratch register is required to
4328move between operand 0 and operand 1. Operand 2 describes the scratch
4329register. See the discussion of the @code{SECONDARY_RELOAD_CLASS}
4330macro in @pxref{Register Classes}.
4331
d989f648 4332There are special restrictions on the form of the @code{match_operand}s
f282ffb3 4333used in these patterns. First, only the predicate for the reload
560dbedd
RH
4334operand is examined, i.e., @code{reload_in} examines operand 1, but not
4335the predicates for operand 0 or 2. Second, there may be only one
d989f648
RH
4336alternative in the constraints. Third, only a single register class
4337letter may be used for the constraint; subsequent constraint letters
4338are ignored. As a special exception, an empty constraint string
4339matches the @code{ALL_REGS} register class. This may relieve ports
4340of the burden of defining an @code{ALL_REGS} constraint letter just
4341for these patterns.
4342
03dda8e3
RK
4343@cindex @code{movstrict@var{m}} instruction pattern
4344@item @samp{movstrict@var{m}}
4345Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg}
4346with mode @var{m} of a register whose natural mode is wider,
4347the @samp{movstrict@var{m}} instruction is guaranteed not to alter
4348any of the register except the part which belongs to mode @var{m}.
4349
1e0598e2
RH
4350@cindex @code{movmisalign@var{m}} instruction pattern
4351@item @samp{movmisalign@var{m}}
4352This variant of a move pattern is designed to load or store a value
4353from a memory address that is not naturally aligned for its mode.
4354For a store, the memory will be in operand 0; for a load, the memory
4355will be in operand 1. The other operand is guaranteed not to be a
4356memory, so that it's easy to tell whether this is a load or store.
4357
4358This pattern is used by the autovectorizer, and when expanding a
4359@code{MISALIGNED_INDIRECT_REF} expression.
4360
03dda8e3
RK
4361@cindex @code{load_multiple} instruction pattern
4362@item @samp{load_multiple}
4363Load several consecutive memory locations into consecutive registers.
4364Operand 0 is the first of the consecutive registers, operand 1
4365is the first memory location, and operand 2 is a constant: the
4366number of consecutive registers.
4367
4368Define this only if the target machine really has such an instruction;
4369do not define this if the most efficient way of loading consecutive
4370registers from memory is to do them one at a time.
4371
4372On some machines, there are restrictions as to which consecutive
4373registers can be stored into memory, such as particular starting or
4374ending register numbers or only a range of valid counts. For those
4375machines, use a @code{define_expand} (@pxref{Expander Definitions})
4376and make the pattern fail if the restrictions are not met.
4377
4378Write the generated insn as a @code{parallel} with elements being a
4379@code{set} of one register from the appropriate memory location (you may
4380also need @code{use} or @code{clobber} elements). Use a
4381@code{match_parallel} (@pxref{RTL Template}) to recognize the insn. See
c9693e96 4382@file{rs6000.md} for examples of the use of this insn pattern.
03dda8e3
RK
4383
4384@cindex @samp{store_multiple} instruction pattern
4385@item @samp{store_multiple}
4386Similar to @samp{load_multiple}, but store several consecutive registers
4387into consecutive memory locations. Operand 0 is the first of the
4388consecutive memory locations, operand 1 is the first register, and
4389operand 2 is a constant: the number of consecutive registers.
4390
272c6793
RS
4391@cindex @code{vec_load_lanes@var{m}@var{n}} instruction pattern
4392@item @samp{vec_load_lanes@var{m}@var{n}}
4393Perform an interleaved load of several vectors from memory operand 1
4394into register operand 0. Both operands have mode @var{m}. The register
4395operand is viewed as holding consecutive vectors of mode @var{n},
4396while the memory operand is a flat array that contains the same number
4397of elements. The operation is equivalent to:
4398
4399@smallexample
4400int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4401for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4402 for (i = 0; i < c; i++)
4403 operand0[i][j] = operand1[j * c + i];
4404@end smallexample
4405
4406For example, @samp{vec_load_lanestiv4hi} loads 8 16-bit values
4407from memory into a register of mode @samp{TI}@. The register
4408contains two consecutive vectors of mode @samp{V4HI}@.
4409
4410This pattern can only be used if:
4411@smallexample
4412TARGET_ARRAY_MODE_SUPPORTED_P (@var{n}, @var{c})
4413@end smallexample
4414is true. GCC assumes that, if a target supports this kind of
4415instruction for some mode @var{n}, it also supports unaligned
4416loads for vectors of mode @var{n}.
4417
4418@cindex @code{vec_store_lanes@var{m}@var{n}} instruction pattern
4419@item @samp{vec_store_lanes@var{m}@var{n}}
4420Equivalent to @samp{vec_load_lanes@var{m}@var{n}}, with the memory
4421and register operands reversed. That is, the instruction is
4422equivalent to:
4423
4424@smallexample
4425int c = GET_MODE_SIZE (@var{m}) / GET_MODE_SIZE (@var{n});
4426for (j = 0; j < GET_MODE_NUNITS (@var{n}); j++)
4427 for (i = 0; i < c; i++)
4428 operand0[j * c + i] = operand1[i][j];
4429@end smallexample
4430
4431for a memory operand 0 and register operand 1.
4432
ef1140a9
JH
4433@cindex @code{vec_set@var{m}} instruction pattern
4434@item @samp{vec_set@var{m}}
4435Set given field in the vector value. Operand 0 is the vector to modify,
4436operand 1 is new value of field and operand 2 specify the field index.
4437
4438@cindex @code{vec_extract@var{m}} instruction pattern
4439@item @samp{vec_extract@var{m}}
4440Extract given field from the vector value. Operand 1 is the vector, operand 2
4441specify field index and operand 0 place to store value into.
4442
4443@cindex @code{vec_init@var{m}} instruction pattern
4444@item @samp{vec_init@var{m}}
425a2bde 4445Initialize the vector to given values. Operand 0 is the vector to initialize
ef1140a9
JH
4446and operand 1 is parallel containing values for individual fields.
4447
e9e1d143
RG
4448@cindex @code{vcond@var{m}@var{n}} instruction pattern
4449@item @samp{vcond@var{m}@var{n}}
4450Output a conditional vector move. Operand 0 is the destination to
4451receive a combination of operand 1 and operand 2, which are of mode @var{m},
4452dependent on the outcome of the predicate in operand 3 which is a
4453vector comparison with operands of mode @var{n} in operands 4 and 5. The
4454modes @var{m} and @var{n} should have the same size. Operand 0
4455will be set to the value @var{op1} & @var{msk} | @var{op2} & ~@var{msk}
4456where @var{msk} is computed by element-wise evaluation of the vector
4457comparison with a truth value of all-ones and a false value of all-zeros.
4458
2205ed25
RH
4459@cindex @code{vec_perm@var{m}} instruction pattern
4460@item @samp{vec_perm@var{m}}
4461Output a (variable) vector permutation. Operand 0 is the destination
4462to receive elements from operand 1 and operand 2, which are of mode
4463@var{m}. Operand 3 is the @dfn{selector}. It is an integral mode
4464vector of the same width and number of elements as mode @var{m}.
4465
4466The input elements are numbered from 0 in operand 1 through
4467@math{2*@var{N}-1} in operand 2. The elements of the selector must
4468be computed modulo @math{2*@var{N}}. Note that if
4469@code{rtx_equal_p(operand1, operand2)}, this can be implemented
4470with just operand 1 and selector elements modulo @var{N}.
4471
d7943c8b
RH
4472In order to make things easy for a number of targets, if there is no
4473@samp{vec_perm} pattern for mode @var{m}, but there is for mode @var{q}
4474where @var{q} is a vector of @code{QImode} of the same width as @var{m},
4475the middle-end will lower the mode @var{m} @code{VEC_PERM_EXPR} to
4476mode @var{q}.
4477
82675d94 4478@cindex @code{vec_perm_const@var{m}} instruction pattern
2205ed25
RH
4479@item @samp{vec_perm_const@var{m}}
4480Like @samp{vec_perm} except that the permutation is a compile-time
4481constant. That is, operand 3, the @dfn{selector}, is a @code{CONST_VECTOR}.
4482
4483Some targets cannot perform a permutation with a variable selector,
4484but can efficiently perform a constant permutation. Further, the
4485target hook @code{vec_perm_ok} is queried to determine if the
4486specific constant permutation is available efficiently; the named
4487pattern is never expanded without @code{vec_perm_ok} returning true.
4488
4489There is no need for a target to supply both @samp{vec_perm@var{m}}
4490and @samp{vec_perm_const@var{m}} if the former can trivially implement
4491the operation with, say, the vector constant loaded into a register.
4492
759915ca
EC
4493@cindex @code{push@var{m}1} instruction pattern
4494@item @samp{push@var{m}1}
299c5111 4495Output a push instruction. Operand 0 is value to push. Used only when
38f4324c
JH
4496@code{PUSH_ROUNDING} is defined. For historical reason, this pattern may be
4497missing and in such case an @code{mov} expander is used instead, with a
6e9aac46 4498@code{MEM} expression forming the push operation. The @code{mov} expander
38f4324c
JH
4499method is deprecated.
4500
03dda8e3
RK
4501@cindex @code{add@var{m}3} instruction pattern
4502@item @samp{add@var{m}3}
4503Add operand 2 and operand 1, storing the result in operand 0. All operands
4504must have mode @var{m}. This can be used even on two-address machines, by
4505means of constraints requiring operands 1 and 0 to be the same location.
4506
0f996086
CF
4507@cindex @code{ssadd@var{m}3} instruction pattern
4508@cindex @code{usadd@var{m}3} instruction pattern
03dda8e3 4509@cindex @code{sub@var{m}3} instruction pattern
0f996086
CF
4510@cindex @code{sssub@var{m}3} instruction pattern
4511@cindex @code{ussub@var{m}3} instruction pattern
03dda8e3 4512@cindex @code{mul@var{m}3} instruction pattern
0f996086
CF
4513@cindex @code{ssmul@var{m}3} instruction pattern
4514@cindex @code{usmul@var{m}3} instruction pattern
03dda8e3 4515@cindex @code{div@var{m}3} instruction pattern
0f996086 4516@cindex @code{ssdiv@var{m}3} instruction pattern
03dda8e3 4517@cindex @code{udiv@var{m}3} instruction pattern
0f996086 4518@cindex @code{usdiv@var{m}3} instruction pattern
03dda8e3
RK
4519@cindex @code{mod@var{m}3} instruction pattern
4520@cindex @code{umod@var{m}3} instruction pattern
03dda8e3
RK
4521@cindex @code{umin@var{m}3} instruction pattern
4522@cindex @code{umax@var{m}3} instruction pattern
4523@cindex @code{and@var{m}3} instruction pattern
4524@cindex @code{ior@var{m}3} instruction pattern
4525@cindex @code{xor@var{m}3} instruction pattern
0f996086 4526@item @samp{ssadd@var{m}3}, @samp{usadd@var{m}3}
f457c50c
AS
4527@itemx @samp{sub@var{m}3}, @samp{sssub@var{m}3}, @samp{ussub@var{m}3}
4528@itemx @samp{mul@var{m}3}, @samp{ssmul@var{m}3}, @samp{usmul@var{m}3}
0f996086
CF
4529@itemx @samp{div@var{m}3}, @samp{ssdiv@var{m}3}
4530@itemx @samp{udiv@var{m}3}, @samp{usdiv@var{m}3}
7ae4d8d4
RH
4531@itemx @samp{mod@var{m}3}, @samp{umod@var{m}3}
4532@itemx @samp{umin@var{m}3}, @samp{umax@var{m}3}
03dda8e3
RK
4533@itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3}
4534Similar, for other arithmetic operations.
7ae4d8d4 4535
1b1562a5
MM
4536@cindex @code{fma@var{m}4} instruction pattern
4537@item @samp{fma@var{m}4}
4538Multiply operand 2 and operand 1, then add operand 3, storing the
d6373302
KZ
4539result in operand 0 without doing an intermediate rounding step. All
4540operands must have mode @var{m}. This pattern is used to implement
4541the @code{fma}, @code{fmaf}, and @code{fmal} builtin functions from
4542the ISO C99 standard.
1b1562a5 4543
16949072
RG
4544@cindex @code{fms@var{m}4} instruction pattern
4545@item @samp{fms@var{m}4}
4546Like @code{fma@var{m}4}, except operand 3 subtracted from the
4547product instead of added to the product. This is represented
4548in the rtl as
4549
4550@smallexample
4551(fma:@var{m} @var{op1} @var{op2} (neg:@var{m} @var{op3}))
4552@end smallexample
4553
4554@cindex @code{fnma@var{m}4} instruction pattern
4555@item @samp{fnma@var{m}4}
4556Like @code{fma@var{m}4} except that the intermediate product
4557is negated before being added to operand 3. This is represented
4558in the rtl as
4559
4560@smallexample
4561(fma:@var{m} (neg:@var{m} @var{op1}) @var{op2} @var{op3})
4562@end smallexample
4563
4564@cindex @code{fnms@var{m}4} instruction pattern
4565@item @samp{fnms@var{m}4}
4566Like @code{fms@var{m}4} except that the intermediate product
4567is negated before subtracting operand 3. This is represented
4568in the rtl as
4569
4570@smallexample
4571(fma:@var{m} (neg:@var{m} @var{op1}) @var{op2} (neg:@var{m} @var{op3}))
4572@end smallexample
4573
b71b019a
JH
4574@cindex @code{min@var{m}3} instruction pattern
4575@cindex @code{max@var{m}3} instruction pattern
7ae4d8d4
RH
4576@item @samp{smin@var{m}3}, @samp{smax@var{m}3}
4577Signed minimum and maximum operations. When used with floating point,
4578if both operands are zeros, or if either operand is @code{NaN}, then
4579it is unspecified which of the two operands is returned as the result.
03dda8e3 4580
61abee65
DN
4581@cindex @code{reduc_smin_@var{m}} instruction pattern
4582@cindex @code{reduc_smax_@var{m}} instruction pattern
4583@item @samp{reduc_smin_@var{m}}, @samp{reduc_smax_@var{m}}
4584Find the signed minimum/maximum of the elements of a vector. The vector is
759915ca
EC
4585operand 1, and the scalar result is stored in the least significant bits of
4586operand 0 (also a vector). The output and input vector should have the same
61abee65
DN
4587modes.
4588
4589@cindex @code{reduc_umin_@var{m}} instruction pattern
4590@cindex @code{reduc_umax_@var{m}} instruction pattern
4591@item @samp{reduc_umin_@var{m}}, @samp{reduc_umax_@var{m}}
4592Find the unsigned minimum/maximum of the elements of a vector. The vector is
759915ca
EC
4593operand 1, and the scalar result is stored in the least significant bits of
4594operand 0 (also a vector). The output and input vector should have the same
61abee65
DN
4595modes.
4596
4597@cindex @code{reduc_splus_@var{m}} instruction pattern
4598@item @samp{reduc_splus_@var{m}}
759915ca
EC
4599Compute the sum of the signed elements of a vector. The vector is operand 1,
4600and the scalar result is stored in the least significant bits of operand 0
61abee65
DN
4601(also a vector). The output and input vector should have the same modes.
4602
4603@cindex @code{reduc_uplus_@var{m}} instruction pattern
4604@item @samp{reduc_uplus_@var{m}}
759915ca
EC
4605Compute the sum of the unsigned elements of a vector. The vector is operand 1,
4606and the scalar result is stored in the least significant bits of operand 0
61abee65
DN
4607(also a vector). The output and input vector should have the same modes.
4608
20f06221
DN
4609@cindex @code{sdot_prod@var{m}} instruction pattern
4610@item @samp{sdot_prod@var{m}}
4611@cindex @code{udot_prod@var{m}} instruction pattern
4612@item @samp{udot_prod@var{m}}
ff2ce160
MS
4613Compute the sum of the products of two signed/unsigned elements.
4614Operand 1 and operand 2 are of the same mode. Their product, which is of a
4615wider mode, is computed and added to operand 3. Operand 3 is of a mode equal or
20f06221 4616wider than the mode of the product. The result is placed in operand 0, which
ff2ce160 4617is of the same mode as operand 3.
20f06221
DN
4618
4619@cindex @code{ssum_widen@var{m3}} instruction pattern
4620@item @samp{ssum_widen@var{m3}}
4621@cindex @code{usum_widen@var{m3}} instruction pattern
4622@item @samp{usum_widen@var{m3}}
ff2ce160 4623Operands 0 and 2 are of the same mode, which is wider than the mode of
20f06221
DN
4624operand 1. Add operand 1 to operand 2 and place the widened result in
4625operand 0. (This is used express accumulation of elements into an accumulator
4626of a wider mode.)
4627
61abee65
DN
4628@cindex @code{vec_shl_@var{m}} instruction pattern
4629@cindex @code{vec_shr_@var{m}} instruction pattern
4630@item @samp{vec_shl_@var{m}}, @samp{vec_shr_@var{m}}
4631Whole vector left/right shift in bits.
4632Operand 1 is a vector to be shifted.
759915ca 4633Operand 2 is an integer shift amount in bits.
61abee65
DN
4634Operand 0 is where the resulting shifted vector is stored.
4635The output and input vectors should have the same modes.
4636
8115817b
UB
4637@cindex @code{vec_pack_trunc_@var{m}} instruction pattern
4638@item @samp{vec_pack_trunc_@var{m}}
4639Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
4640are vectors of the same mode having N integral or floating point elements
0ee2ea09 4641of size S@. Operand 0 is the resulting vector in which 2*N elements of
8115817b
UB
4642size N/2 are concatenated after narrowing them down using truncation.
4643
89d67cca
DN
4644@cindex @code{vec_pack_ssat_@var{m}} instruction pattern
4645@cindex @code{vec_pack_usat_@var{m}} instruction pattern
8115817b
UB
4646@item @samp{vec_pack_ssat_@var{m}}, @samp{vec_pack_usat_@var{m}}
4647Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
4648are vectors of the same mode having N integral elements of size S.
89d67cca 4649Operand 0 is the resulting vector in which the elements of the two input
8115817b
UB
4650vectors are concatenated after narrowing them down using signed/unsigned
4651saturating arithmetic.
89d67cca 4652
d9987fb4
UB
4653@cindex @code{vec_pack_sfix_trunc_@var{m}} instruction pattern
4654@cindex @code{vec_pack_ufix_trunc_@var{m}} instruction pattern
4655@item @samp{vec_pack_sfix_trunc_@var{m}}, @samp{vec_pack_ufix_trunc_@var{m}}
4656Narrow, convert to signed/unsigned integral type and merge the elements
4657of two vectors. Operands 1 and 2 are vectors of the same mode having N
0ee2ea09 4658floating point elements of size S@. Operand 0 is the resulting vector
d9987fb4
UB
4659in which 2*N elements of size N/2 are concatenated.
4660
89d67cca
DN
4661@cindex @code{vec_unpacks_hi_@var{m}} instruction pattern
4662@cindex @code{vec_unpacks_lo_@var{m}} instruction pattern
8115817b
UB
4663@item @samp{vec_unpacks_hi_@var{m}}, @samp{vec_unpacks_lo_@var{m}}
4664Extract and widen (promote) the high/low part of a vector of signed
4665integral or floating point elements. The input vector (operand 1) has N
0ee2ea09 4666elements of size S@. Widen (promote) the high/low elements of the vector
8115817b
UB
4667using signed or floating point extension and place the resulting N/2
4668values of size 2*S in the output vector (operand 0).
4669
89d67cca
DN
4670@cindex @code{vec_unpacku_hi_@var{m}} instruction pattern
4671@cindex @code{vec_unpacku_lo_@var{m}} instruction pattern
8115817b
UB
4672@item @samp{vec_unpacku_hi_@var{m}}, @samp{vec_unpacku_lo_@var{m}}
4673Extract and widen (promote) the high/low part of a vector of unsigned
4674integral elements. The input vector (operand 1) has N elements of size S.
4675Widen (promote) the high/low elements of the vector using zero extension and
4676place the resulting N/2 values of size 2*S in the output vector (operand 0).
89d67cca 4677
d9987fb4
UB
4678@cindex @code{vec_unpacks_float_hi_@var{m}} instruction pattern
4679@cindex @code{vec_unpacks_float_lo_@var{m}} instruction pattern
4680@cindex @code{vec_unpacku_float_hi_@var{m}} instruction pattern
4681@cindex @code{vec_unpacku_float_lo_@var{m}} instruction pattern
4682@item @samp{vec_unpacks_float_hi_@var{m}}, @samp{vec_unpacks_float_lo_@var{m}}
4683@itemx @samp{vec_unpacku_float_hi_@var{m}}, @samp{vec_unpacku_float_lo_@var{m}}
4684Extract, convert to floating point type and widen the high/low part of a
4685vector of signed/unsigned integral elements. The input vector (operand 1)
0ee2ea09 4686has N elements of size S@. Convert the high/low elements of the vector using
d9987fb4
UB
4687floating point conversion and place the resulting N/2 values of size 2*S in
4688the output vector (operand 0).
4689
89d67cca 4690@cindex @code{vec_widen_umult_hi_@var{m}} instruction pattern
3f30a9a6 4691@cindex @code{vec_widen_umult_lo_@var{m}} instruction pattern
89d67cca
DN
4692@cindex @code{vec_widen_smult_hi_@var{m}} instruction pattern
4693@cindex @code{vec_widen_smult_lo_@var{m}} instruction pattern
3f30a9a6
RH
4694@cindex @code{vec_widen_umult_even_@var{m}} instruction pattern
4695@cindex @code{vec_widen_umult_odd_@var{m}} instruction pattern
4696@cindex @code{vec_widen_smult_even_@var{m}} instruction pattern
4697@cindex @code{vec_widen_smult_odd_@var{m}} instruction pattern
d9987fb4
UB
4698@item @samp{vec_widen_umult_hi_@var{m}}, @samp{vec_widen_umult_lo_@var{m}}
4699@itemx @samp{vec_widen_smult_hi_@var{m}}, @samp{vec_widen_smult_lo_@var{m}}
3f30a9a6
RH
4700@itemx @samp{vec_widen_umult_even_@var{m}}, @samp{vec_widen_umult_odd_@var{m}}
4701@itemx @samp{vec_widen_smult_even_@var{m}}, @samp{vec_widen_smult_odd_@var{m}}
8115817b 4702Signed/Unsigned widening multiplication. The two inputs (operands 1 and 2)
0ee2ea09 4703are vectors with N signed/unsigned elements of size S@. Multiply the high/low
3f30a9a6
RH
4704or even/odd elements of the two vectors, and put the N/2 products of size 2*S
4705in the output vector (operand 0).
89d67cca 4706
36ba4aae
IR
4707@cindex @code{vec_widen_ushiftl_hi_@var{m}} instruction pattern
4708@cindex @code{vec_widen_ushiftl_lo_@var{m}} instruction pattern
4709@cindex @code{vec_widen_sshiftl_hi_@var{m}} instruction pattern
4710@cindex @code{vec_widen_sshiftl_lo_@var{m}} instruction pattern
4711@item @samp{vec_widen_ushiftl_hi_@var{m}}, @samp{vec_widen_ushiftl_lo_@var{m}}
4712@itemx @samp{vec_widen_sshiftl_hi_@var{m}}, @samp{vec_widen_sshiftl_lo_@var{m}}
4713Signed/Unsigned widening shift left. The first input (operand 1) is a vector
4714with N signed/unsigned elements of size S@. Operand 2 is a constant. Shift
4715the high/low elements of operand 1, and put the N/2 results of size 2*S in the
4716output vector (operand 0).
4717
03dda8e3
RK
4718@cindex @code{mulhisi3} instruction pattern
4719@item @samp{mulhisi3}
4720Multiply operands 1 and 2, which have mode @code{HImode}, and store
4721a @code{SImode} product in operand 0.
4722
4723@cindex @code{mulqihi3} instruction pattern
4724@cindex @code{mulsidi3} instruction pattern
4725@item @samp{mulqihi3}, @samp{mulsidi3}
4726Similar widening-multiplication instructions of other widths.
4727
4728@cindex @code{umulqihi3} instruction pattern
4729@cindex @code{umulhisi3} instruction pattern
4730@cindex @code{umulsidi3} instruction pattern
4731@item @samp{umulqihi3}, @samp{umulhisi3}, @samp{umulsidi3}
4732Similar widening-multiplication instructions that do unsigned
4733multiplication.
4734
8b44057d
BS
4735@cindex @code{usmulqihi3} instruction pattern
4736@cindex @code{usmulhisi3} instruction pattern
4737@cindex @code{usmulsidi3} instruction pattern
4738@item @samp{usmulqihi3}, @samp{usmulhisi3}, @samp{usmulsidi3}
4739Similar widening-multiplication instructions that interpret the first
4740operand as unsigned and the second operand as signed, then do a signed
4741multiplication.
4742
03dda8e3 4743@cindex @code{smul@var{m}3_highpart} instruction pattern
759c58af 4744@item @samp{smul@var{m}3_highpart}
03dda8e3
RK
4745Perform a signed multiplication of operands 1 and 2, which have mode
4746@var{m}, and store the most significant half of the product in operand 0.
4747The least significant half of the product is discarded.
4748
4749@cindex @code{umul@var{m}3_highpart} instruction pattern
4750@item @samp{umul@var{m}3_highpart}
4751Similar, but the multiplication is unsigned.
4752
7f9844ca
RS
4753@cindex @code{madd@var{m}@var{n}4} instruction pattern
4754@item @samp{madd@var{m}@var{n}4}
4755Multiply operands 1 and 2, sign-extend them to mode @var{n}, add
4756operand 3, and store the result in operand 0. Operands 1 and 2
4757have mode @var{m} and operands 0 and 3 have mode @var{n}.
0f996086 4758Both modes must be integer or fixed-point modes and @var{n} must be twice
7f9844ca
RS
4759the size of @var{m}.
4760
4761In other words, @code{madd@var{m}@var{n}4} is like
4762@code{mul@var{m}@var{n}3} except that it also adds operand 3.
4763
4764These instructions are not allowed to @code{FAIL}.
4765
4766@cindex @code{umadd@var{m}@var{n}4} instruction pattern
4767@item @samp{umadd@var{m}@var{n}4}
4768Like @code{madd@var{m}@var{n}4}, but zero-extend the multiplication
4769operands instead of sign-extending them.
4770
0f996086
CF
4771@cindex @code{ssmadd@var{m}@var{n}4} instruction pattern
4772@item @samp{ssmadd@var{m}@var{n}4}
4773Like @code{madd@var{m}@var{n}4}, but all involved operations must be
4774signed-saturating.
4775
4776@cindex @code{usmadd@var{m}@var{n}4} instruction pattern
4777@item @samp{usmadd@var{m}@var{n}4}
4778Like @code{umadd@var{m}@var{n}4}, but all involved operations must be
4779unsigned-saturating.
4780
14661f36
CF
4781@cindex @code{msub@var{m}@var{n}4} instruction pattern
4782@item @samp{msub@var{m}@var{n}4}
4783Multiply operands 1 and 2, sign-extend them to mode @var{n}, subtract the
4784result from operand 3, and store the result in operand 0. Operands 1 and 2
4785have mode @var{m} and operands 0 and 3 have mode @var{n}.
0f996086 4786Both modes must be integer or fixed-point modes and @var{n} must be twice
14661f36
CF
4787the size of @var{m}.
4788
4789In other words, @code{msub@var{m}@var{n}4} is like
4790@code{mul@var{m}@var{n}3} except that it also subtracts the result
4791from operand 3.
4792
4793These instructions are not allowed to @code{FAIL}.
4794
4795@cindex @code{umsub@var{m}@var{n}4} instruction pattern
4796@item @samp{umsub@var{m}@var{n}4}
4797Like @code{msub@var{m}@var{n}4}, but zero-extend the multiplication
4798operands instead of sign-extending them.
4799
0f996086
CF
4800@cindex @code{ssmsub@var{m}@var{n}4} instruction pattern
4801@item @samp{ssmsub@var{m}@var{n}4}
4802Like @code{msub@var{m}@var{n}4}, but all involved operations must be
4803signed-saturating.
4804
4805@cindex @code{usmsub@var{m}@var{n}4} instruction pattern
4806@item @samp{usmsub@var{m}@var{n}4}
4807Like @code{umsub@var{m}@var{n}4}, but all involved operations must be
4808unsigned-saturating.
4809
03dda8e3
RK
4810@cindex @code{divmod@var{m}4} instruction pattern
4811@item @samp{divmod@var{m}4}
4812Signed division that produces both a quotient and a remainder.
4813Operand 1 is divided by operand 2 to produce a quotient stored
4814in operand 0 and a remainder stored in operand 3.
4815
4816For machines with an instruction that produces both a quotient and a
4817remainder, provide a pattern for @samp{divmod@var{m}4} but do not
4818provide patterns for @samp{div@var{m}3} and @samp{mod@var{m}3}. This
4819allows optimization in the relatively common case when both the quotient
4820and remainder are computed.
4821
4822If an instruction that just produces a quotient or just a remainder
4823exists and is more efficient than the instruction that produces both,
4824write the output routine of @samp{divmod@var{m}4} to call
4825@code{find_reg_note} and look for a @code{REG_UNUSED} note on the
4826quotient or remainder and generate the appropriate instruction.
4827
4828@cindex @code{udivmod@var{m}4} instruction pattern
4829@item @samp{udivmod@var{m}4}
4830Similar, but does unsigned division.
4831
273a2526 4832@anchor{shift patterns}
03dda8e3 4833@cindex @code{ashl@var{m}3} instruction pattern
0f996086
CF
4834@cindex @code{ssashl@var{m}3} instruction pattern
4835@cindex @code{usashl@var{m}3} instruction pattern
4836@item @samp{ashl@var{m}3}, @samp{ssashl@var{m}3}, @samp{usashl@var{m}3}
03dda8e3
RK
4837Arithmetic-shift operand 1 left by a number of bits specified by operand
48382, and store the result in operand 0. Here @var{m} is the mode of
4839operand 0 and operand 1; operand 2's mode is specified by the
4840instruction pattern, and the compiler will convert the operand to that
273a2526
RS
4841mode before generating the instruction. The meaning of out-of-range shift
4842counts can optionally be specified by @code{TARGET_SHIFT_TRUNCATION_MASK}.
71d46ca5 4843@xref{TARGET_SHIFT_TRUNCATION_MASK}. Operand 2 is always a scalar type.
03dda8e3
RK
4844
4845@cindex @code{ashr@var{m}3} instruction pattern
4846@cindex @code{lshr@var{m}3} instruction pattern
4847@cindex @code{rotl@var{m}3} instruction pattern
4848@cindex @code{rotr@var{m}3} instruction pattern
4849@item @samp{ashr@var{m}3}, @samp{lshr@var{m}3}, @samp{rotl@var{m}3}, @samp{rotr@var{m}3}
4850Other shift and rotate instructions, analogous to the
71d46ca5
MM
4851@code{ashl@var{m}3} instructions. Operand 2 is always a scalar type.
4852
4853@cindex @code{vashl@var{m}3} instruction pattern
4854@cindex @code{vashr@var{m}3} instruction pattern
4855@cindex @code{vlshr@var{m}3} instruction pattern
4856@cindex @code{vrotl@var{m}3} instruction pattern
4857@cindex @code{vrotr@var{m}3} instruction pattern
4858@item @samp{vashl@var{m}3}, @samp{vashr@var{m}3}, @samp{vlshr@var{m}3}, @samp{vrotl@var{m}3}, @samp{vrotr@var{m}3}
4859Vector shift and rotate instructions that take vectors as operand 2
4860instead of a scalar type.
03dda8e3 4861
ac868f29
EB
4862@cindex @code{bswap@var{m}2} instruction pattern
4863@item @samp{bswap@var{m}2}
4864Reverse the order of bytes of operand 1 and store the result in operand 0.
4865
03dda8e3 4866@cindex @code{neg@var{m}2} instruction pattern
0f996086
CF
4867@cindex @code{ssneg@var{m}2} instruction pattern
4868@cindex @code{usneg@var{m}2} instruction pattern
4869@item @samp{neg@var{m}2}, @samp{ssneg@var{m}2}, @samp{usneg@var{m}2}
03dda8e3
RK
4870Negate operand 1 and store the result in operand 0.
4871
4872@cindex @code{abs@var{m}2} instruction pattern
4873@item @samp{abs@var{m}2}
4874Store the absolute value of operand 1 into operand 0.
4875
4876@cindex @code{sqrt@var{m}2} instruction pattern
4877@item @samp{sqrt@var{m}2}
4878Store the square root of operand 1 into operand 0.
4879
4880The @code{sqrt} built-in function of C always uses the mode which
e7b489c8
RS
4881corresponds to the C data type @code{double} and the @code{sqrtf}
4882built-in function uses the mode which corresponds to the C data
4883type @code{float}.
4884
17b98269
UB
4885@cindex @code{fmod@var{m}3} instruction pattern
4886@item @samp{fmod@var{m}3}
4887Store the remainder of dividing operand 1 by operand 2 into
4888operand 0, rounded towards zero to an integer.
4889
4890The @code{fmod} built-in function of C always uses the mode which
4891corresponds to the C data type @code{double} and the @code{fmodf}
4892built-in function uses the mode which corresponds to the C data
4893type @code{float}.
4894
4895@cindex @code{remainder@var{m}3} instruction pattern
4896@item @samp{remainder@var{m}3}
4897Store the remainder of dividing operand 1 by operand 2 into
4898operand 0, rounded to the nearest integer.
4899
4900The @code{remainder} built-in function of C always uses the mode
4901which corresponds to the C data type @code{double} and the
4902@code{remainderf} built-in function uses the mode which corresponds
4903to the C data type @code{float}.
4904
e7b489c8
RS
4905@cindex @code{cos@var{m}2} instruction pattern
4906@item @samp{cos@var{m}2}
4907Store the cosine of operand 1 into operand 0.
4908
4909The @code{cos} built-in function of C always uses the mode which
4910corresponds to the C data type @code{double} and the @code{cosf}
4911built-in function uses the mode which corresponds to the C data
4912type @code{float}.
4913
4914@cindex @code{sin@var{m}2} instruction pattern
4915@item @samp{sin@var{m}2}
4916Store the sine of operand 1 into operand 0.
4917
4918The @code{sin} built-in function of C always uses the mode which
4919corresponds to the C data type @code{double} and the @code{sinf}
4920built-in function uses the mode which corresponds to the C data
4921type @code{float}.
4922
6d1f6aff
OE
4923@cindex @code{sincos@var{m}3} instruction pattern
4924@item @samp{sincos@var{m}3}
6ba9e401 4925Store the cosine of operand 2 into operand 0 and the sine of
6d1f6aff
OE
4926operand 2 into operand 1.
4927
4928The @code{sin} and @code{cos} built-in functions of C always use the
4929mode which corresponds to the C data type @code{double} and the
4930@code{sinf} and @code{cosf} built-in function use the mode which
4931corresponds to the C data type @code{float}.
4932Targets that can calculate the sine and cosine simultaneously can
4933implement this pattern as opposed to implementing individual
4934@code{sin@var{m}2} and @code{cos@var{m}2} patterns. The @code{sin}
4935and @code{cos} built-in functions will then be expanded to the
4936@code{sincos@var{m}3} pattern, with one of the output values
4937left unused.
4938
e7b489c8
RS
4939@cindex @code{exp@var{m}2} instruction pattern
4940@item @samp{exp@var{m}2}
4941Store the exponential of operand 1 into operand 0.
4942
4943The @code{exp} built-in function of C always uses the mode which
4944corresponds to the C data type @code{double} and the @code{expf}
4945built-in function uses the mode which corresponds to the C data
4946type @code{float}.
4947
4948@cindex @code{log@var{m}2} instruction pattern
4949@item @samp{log@var{m}2}
4950Store the natural logarithm of operand 1 into operand 0.
4951
4952The @code{log} built-in function of C always uses the mode which
4953corresponds to the C data type @code{double} and the @code{logf}
4954built-in function uses the mode which corresponds to the C data
4955type @code{float}.
03dda8e3 4956
b5e01d4b
RS
4957@cindex @code{pow@var{m}3} instruction pattern
4958@item @samp{pow@var{m}3}
4959Store the value of operand 1 raised to the exponent operand 2
4960into operand 0.
4961
4962The @code{pow} built-in function of C always uses the mode which
4963corresponds to the C data type @code{double} and the @code{powf}
4964built-in function uses the mode which corresponds to the C data
4965type @code{float}.
4966
4967@cindex @code{atan2@var{m}3} instruction pattern
4968@item @samp{atan2@var{m}3}
4969Store the arc tangent (inverse tangent) of operand 1 divided by
4970operand 2 into operand 0, using the signs of both arguments to
4971determine the quadrant of the result.
4972
4973The @code{atan2} built-in function of C always uses the mode which
4974corresponds to the C data type @code{double} and the @code{atan2f}
4975built-in function uses the mode which corresponds to the C data
4976type @code{float}.
4977
4977bab6
ZW
4978@cindex @code{floor@var{m}2} instruction pattern
4979@item @samp{floor@var{m}2}
4980Store the largest integral value not greater than argument.
4981
4982The @code{floor} built-in function of C always uses the mode which
4983corresponds to the C data type @code{double} and the @code{floorf}
4984built-in function uses the mode which corresponds to the C data
4985type @code{float}.
4986
10553f10
UB
4987@cindex @code{btrunc@var{m}2} instruction pattern
4988@item @samp{btrunc@var{m}2}
4977bab6
ZW
4989Store the argument rounded to integer towards zero.
4990
4991The @code{trunc} built-in function of C always uses the mode which
4992corresponds to the C data type @code{double} and the @code{truncf}
4993built-in function uses the mode which corresponds to the C data
4994type @code{float}.
4995
4996@cindex @code{round@var{m}2} instruction pattern
4997@item @samp{round@var{m}2}
4998Store the argument rounded to integer away from zero.
4999
5000The @code{round} built-in function of C always uses the mode which
5001corresponds to the C data type @code{double} and the @code{roundf}
5002built-in function uses the mode which corresponds to the C data
5003type @code{float}.
5004
5005@cindex @code{ceil@var{m}2} instruction pattern
5006@item @samp{ceil@var{m}2}
5007Store the argument rounded to integer away from zero.
5008
5009The @code{ceil} built-in function of C always uses the mode which
5010corresponds to the C data type @code{double} and the @code{ceilf}
5011built-in function uses the mode which corresponds to the C data
5012type @code{float}.
5013
5014@cindex @code{nearbyint@var{m}2} instruction pattern
5015@item @samp{nearbyint@var{m}2}
5016Store the argument rounded according to the default rounding mode
5017
5018The @code{nearbyint} built-in function of C always uses the mode which
5019corresponds to the C data type @code{double} and the @code{nearbyintf}
5020built-in function uses the mode which corresponds to the C data
5021type @code{float}.
5022
10553f10
UB
5023@cindex @code{rint@var{m}2} instruction pattern
5024@item @samp{rint@var{m}2}
5025Store the argument rounded according to the default rounding mode and
5026raise the inexact exception when the result differs in value from
5027the argument
5028
5029The @code{rint} built-in function of C always uses the mode which
5030corresponds to the C data type @code{double} and the @code{rintf}
5031built-in function uses the mode which corresponds to the C data
5032type @code{float}.
5033
bb7f0423
RG
5034@cindex @code{lrint@var{m}@var{n}2}
5035@item @samp{lrint@var{m}@var{n}2}
5036Convert operand 1 (valid for floating point mode @var{m}) to fixed
5037point mode @var{n} as a signed number according to the current
5038rounding mode and store in operand 0 (which has mode @var{n}).
5039
4d81bf84 5040@cindex @code{lround@var{m}@var{n}2}
e0d4c0b3 5041@item @samp{lround@var{m}@var{n}2}
4d81bf84
RG
5042Convert operand 1 (valid for floating point mode @var{m}) to fixed
5043point mode @var{n} as a signed number rounding to nearest and away
5044from zero and store in operand 0 (which has mode @var{n}).
5045
c3a4177f 5046@cindex @code{lfloor@var{m}@var{n}2}
e0d4c0b3 5047@item @samp{lfloor@var{m}@var{n}2}
c3a4177f
RG
5048Convert operand 1 (valid for floating point mode @var{m}) to fixed
5049point mode @var{n} as a signed number rounding down and store in
5050operand 0 (which has mode @var{n}).
5051
5052@cindex @code{lceil@var{m}@var{n}2}
e0d4c0b3 5053@item @samp{lceil@var{m}@var{n}2}
c3a4177f
RG
5054Convert operand 1 (valid for floating point mode @var{m}) to fixed
5055point mode @var{n} as a signed number rounding up and store in
5056operand 0 (which has mode @var{n}).
5057
d35a40fc
DE
5058@cindex @code{copysign@var{m}3} instruction pattern
5059@item @samp{copysign@var{m}3}
5060Store a value with the magnitude of operand 1 and the sign of operand
50612 into operand 0.
5062
5063The @code{copysign} built-in function of C always uses the mode which
5064corresponds to the C data type @code{double} and the @code{copysignf}
5065built-in function uses the mode which corresponds to the C data
5066type @code{float}.
5067
03dda8e3
RK
5068@cindex @code{ffs@var{m}2} instruction pattern
5069@item @samp{ffs@var{m}2}
5070Store into operand 0 one plus the index of the least significant 1-bit
5071of operand 1. If operand 1 is zero, store zero. @var{m} is the mode
5072of operand 0; operand 1's mode is specified by the instruction
5073pattern, and the compiler will convert the operand to that mode before
5074generating the instruction.
5075
5076The @code{ffs} built-in function of C always uses the mode which
5077corresponds to the C data type @code{int}.
5078
2928cd7a
RH
5079@cindex @code{clz@var{m}2} instruction pattern
5080@item @samp{clz@var{m}2}
5081Store into operand 0 the number of leading 0-bits in @var{x}, starting
2a6627c2
JN
5082at the most significant bit position. If @var{x} is 0, the
5083@code{CLZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
5084the result is undefined or has a useful value.
5085@var{m} is the mode of operand 0; operand 1's mode is
2928cd7a
RH
5086specified by the instruction pattern, and the compiler will convert the
5087operand to that mode before generating the instruction.
5088
5089@cindex @code{ctz@var{m}2} instruction pattern
5090@item @samp{ctz@var{m}2}
5091Store into operand 0 the number of trailing 0-bits in @var{x}, starting
2a6627c2
JN
5092at the least significant bit position. If @var{x} is 0, the
5093@code{CTZ_DEFINED_VALUE_AT_ZERO} (@pxref{Misc}) macro defines if
5094the result is undefined or has a useful value.
5095@var{m} is the mode of operand 0; operand 1's mode is
2928cd7a
RH
5096specified by the instruction pattern, and the compiler will convert the
5097operand to that mode before generating the instruction.
5098
5099@cindex @code{popcount@var{m}2} instruction pattern
5100@item @samp{popcount@var{m}2}
5101Store into operand 0 the number of 1-bits in @var{x}. @var{m} is the
5102mode of operand 0; operand 1's mode is specified by the instruction
5103pattern, and the compiler will convert the operand to that mode before
5104generating the instruction.
5105
5106@cindex @code{parity@var{m}2} instruction pattern
5107@item @samp{parity@var{m}2}
8a36672b 5108Store into operand 0 the parity of @var{x}, i.e.@: the number of 1-bits
2928cd7a
RH
5109in @var{x} modulo 2. @var{m} is the mode of operand 0; operand 1's mode
5110is specified by the instruction pattern, and the compiler will convert
5111the operand to that mode before generating the instruction.
5112
03dda8e3
RK
5113@cindex @code{one_cmpl@var{m}2} instruction pattern
5114@item @samp{one_cmpl@var{m}2}
5115Store the bitwise-complement of operand 1 into operand 0.
5116
70128ad9
AO
5117@cindex @code{movmem@var{m}} instruction pattern
5118@item @samp{movmem@var{m}}
beed8fc0
AO
5119Block move instruction. The destination and source blocks of memory
5120are the first two operands, and both are @code{mem:BLK}s with an
5121address in mode @code{Pmode}.
e5e809f4 5122
03dda8e3 5123The number of bytes to move is the third operand, in mode @var{m}.
e5e809f4
JL
5124Usually, you specify @code{word_mode} for @var{m}. However, if you can
5125generate better code knowing the range of valid lengths is smaller than
5126those representable in a full word, you should provide a pattern with a
5127mode corresponding to the range of values you can handle efficiently
5128(e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
5129that appear negative) and also a pattern with @code{word_mode}.
03dda8e3
RK
5130
5131The fourth operand is the known shared alignment of the source and
5132destination, in the form of a @code{const_int} rtx. Thus, if the
5133compiler knows that both source and destination are word-aligned,
5134it may provide the value 4 for this operand.
5135
079a182e
JH
5136Optional operands 5 and 6 specify expected alignment and size of block
5137respectively. The expected alignment differs from alignment in operand 4
5138in a way that the blocks are not required to be aligned according to it in
9946ca2d
RA
5139all cases. This expected alignment is also in bytes, just like operand 4.
5140Expected size, when unknown, is set to @code{(const_int -1)}.
079a182e 5141
70128ad9 5142Descriptions of multiple @code{movmem@var{m}} patterns can only be
4693911f 5143beneficial if the patterns for smaller modes have fewer restrictions
8c01d9b6 5144on their first, second and fourth operands. Note that the mode @var{m}
70128ad9 5145in @code{movmem@var{m}} does not impose any restriction on the mode of
8c01d9b6
JL
5146individually moved data units in the block.
5147
03dda8e3
RK
5148These patterns need not give special consideration to the possibility
5149that the source and destination strings might overlap.
5150
beed8fc0
AO
5151@cindex @code{movstr} instruction pattern
5152@item @samp{movstr}
5153String copy instruction, with @code{stpcpy} semantics. Operand 0 is
5154an output operand in mode @code{Pmode}. The addresses of the
5155destination and source strings are operands 1 and 2, and both are
5156@code{mem:BLK}s with addresses in mode @code{Pmode}. The execution of
5157the expansion of this pattern should store in operand 0 the address in
5158which the @code{NUL} terminator was stored in the destination string.
5159
57e84f18
AS
5160@cindex @code{setmem@var{m}} instruction pattern
5161@item @samp{setmem@var{m}}
5162Block set instruction. The destination string is the first operand,
beed8fc0 5163given as a @code{mem:BLK} whose address is in mode @code{Pmode}. The
57e84f18
AS
5164number of bytes to set is the second operand, in mode @var{m}. The value to
5165initialize the memory with is the third operand. Targets that only support the
5166clearing of memory should reject any value that is not the constant 0. See
beed8fc0 5167@samp{movmem@var{m}} for a discussion of the choice of mode.
03dda8e3 5168
57e84f18 5169The fourth operand is the known alignment of the destination, in the form
03dda8e3
RK
5170of a @code{const_int} rtx. Thus, if the compiler knows that the
5171destination is word-aligned, it may provide the value 4 for this
5172operand.
5173
079a182e
JH
5174Optional operands 5 and 6 specify expected alignment and size of block
5175respectively. The expected alignment differs from alignment in operand 4
5176in a way that the blocks are not required to be aligned according to it in
9946ca2d
RA
5177all cases. This expected alignment is also in bytes, just like operand 4.
5178Expected size, when unknown, is set to @code{(const_int -1)}.
079a182e 5179
57e84f18 5180The use for multiple @code{setmem@var{m}} is as for @code{movmem@var{m}}.
8c01d9b6 5181
40c1d5f8
AS
5182@cindex @code{cmpstrn@var{m}} instruction pattern
5183@item @samp{cmpstrn@var{m}}
358b8f01 5184String compare instruction, with five operands. Operand 0 is the output;
03dda8e3 5185it has mode @var{m}. The remaining four operands are like the operands
70128ad9 5186of @samp{movmem@var{m}}. The two memory blocks specified are compared
5cc2f4f3
KG
5187byte by byte in lexicographic order starting at the beginning of each
5188string. The instruction is not allowed to prefetch more than one byte
5189at a time since either string may end in the first byte and reading past
5190that may access an invalid page or segment and cause a fault. The
9b0f6f5e
NC
5191comparison terminates early if the fetched bytes are different or if
5192they are equal to zero. The effect of the instruction is to store a
5193value in operand 0 whose sign indicates the result of the comparison.
03dda8e3 5194
40c1d5f8
AS
5195@cindex @code{cmpstr@var{m}} instruction pattern
5196@item @samp{cmpstr@var{m}}
5197String compare instruction, without known maximum length. Operand 0 is the
5198output; it has mode @var{m}. The second and third operand are the blocks of
5199memory to be compared; both are @code{mem:BLK} with an address in mode
5200@code{Pmode}.
5201
5202The fourth operand is the known shared alignment of the source and
5203destination, in the form of a @code{const_int} rtx. Thus, if the
5204compiler knows that both source and destination are word-aligned,
5205it may provide the value 4 for this operand.
5206
5207The two memory blocks specified are compared byte by byte in lexicographic
5208order starting at the beginning of each string. The instruction is not allowed
5209to prefetch more than one byte at a time since either string may end in the
5210first byte and reading past that may access an invalid page or segment and
9b0f6f5e
NC
5211cause a fault. The comparison will terminate when the fetched bytes
5212are different or if they are equal to zero. The effect of the
5213instruction is to store a value in operand 0 whose sign indicates the
5214result of the comparison.
40c1d5f8 5215
358b8f01
JJ
5216@cindex @code{cmpmem@var{m}} instruction pattern
5217@item @samp{cmpmem@var{m}}
5218Block compare instruction, with five operands like the operands
5219of @samp{cmpstr@var{m}}. The two memory blocks specified are compared
5220byte by byte in lexicographic order starting at the beginning of each
5221block. Unlike @samp{cmpstr@var{m}} the instruction can prefetch
9b0f6f5e
NC
5222any bytes in the two memory blocks. Also unlike @samp{cmpstr@var{m}}
5223the comparison will not stop if both bytes are zero. The effect of
5224the instruction is to store a value in operand 0 whose sign indicates
5225the result of the comparison.
358b8f01 5226
03dda8e3
RK
5227@cindex @code{strlen@var{m}} instruction pattern
5228@item @samp{strlen@var{m}}
5229Compute the length of a string, with three operands.
5230Operand 0 is the result (of mode @var{m}), operand 1 is
5231a @code{mem} referring to the first character of the string,
5232operand 2 is the character to search for (normally zero),
5233and operand 3 is a constant describing the known alignment
5234of the beginning of the string.
5235
e0d4c0b3 5236@cindex @code{float@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5237@item @samp{float@var{m}@var{n}2}
5238Convert signed integer operand 1 (valid for fixed point mode @var{m}) to
5239floating point mode @var{n} and store in operand 0 (which has mode
5240@var{n}).
5241
e0d4c0b3 5242@cindex @code{floatuns@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5243@item @samp{floatuns@var{m}@var{n}2}
5244Convert unsigned integer operand 1 (valid for fixed point mode @var{m})
5245to floating point mode @var{n} and store in operand 0 (which has mode
5246@var{n}).
5247
e0d4c0b3 5248@cindex @code{fix@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5249@item @samp{fix@var{m}@var{n}2}
5250Convert operand 1 (valid for floating point mode @var{m}) to fixed
5251point mode @var{n} as a signed number and store in operand 0 (which
5252has mode @var{n}). This instruction's result is defined only when
5253the value of operand 1 is an integer.
5254
0e1d7f32
AH
5255If the machine description defines this pattern, it also needs to
5256define the @code{ftrunc} pattern.
5257
e0d4c0b3 5258@cindex @code{fixuns@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5259@item @samp{fixuns@var{m}@var{n}2}
5260Convert operand 1 (valid for floating point mode @var{m}) to fixed
5261point mode @var{n} as an unsigned number and store in operand 0 (which
5262has mode @var{n}). This instruction's result is defined only when the
5263value of operand 1 is an integer.
5264
5265@cindex @code{ftrunc@var{m}2} instruction pattern
5266@item @samp{ftrunc@var{m}2}
5267Convert operand 1 (valid for floating point mode @var{m}) to an
5268integer value, still represented in floating point mode @var{m}, and
5269store it in operand 0 (valid for floating point mode @var{m}).
5270
e0d4c0b3 5271@cindex @code{fix_trunc@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5272@item @samp{fix_trunc@var{m}@var{n}2}
5273Like @samp{fix@var{m}@var{n}2} but works for any floating point value
5274of mode @var{m} by converting the value to an integer.
5275
e0d4c0b3 5276@cindex @code{fixuns_trunc@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5277@item @samp{fixuns_trunc@var{m}@var{n}2}
5278Like @samp{fixuns@var{m}@var{n}2} but works for any floating point
5279value of mode @var{m} by converting the value to an integer.
5280
e0d4c0b3 5281@cindex @code{trunc@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5282@item @samp{trunc@var{m}@var{n}2}
5283Truncate operand 1 (valid for mode @var{m}) to mode @var{n} and
5284store in operand 0 (which has mode @var{n}). Both modes must be fixed
5285point or both floating point.
5286
e0d4c0b3 5287@cindex @code{extend@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5288@item @samp{extend@var{m}@var{n}2}
5289Sign-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
5290store in operand 0 (which has mode @var{n}). Both modes must be fixed
5291point or both floating point.
5292
e0d4c0b3 5293@cindex @code{zero_extend@var{m}@var{n}2} instruction pattern
03dda8e3
RK
5294@item @samp{zero_extend@var{m}@var{n}2}
5295Zero-extend operand 1 (valid for mode @var{m}) to mode @var{n} and
5296store in operand 0 (which has mode @var{n}). Both modes must be fixed
5297point.
5298
e0d4c0b3 5299@cindex @code{fract@var{m}@var{n}2} instruction pattern
0f996086
CF
5300@item @samp{fract@var{m}@var{n}2}
5301Convert operand 1 of mode @var{m} to mode @var{n} and store in
5302operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
5303could be fixed-point to fixed-point, signed integer to fixed-point,
5304fixed-point to signed integer, floating-point to fixed-point,
5305or fixed-point to floating-point.
5306When overflows or underflows happen, the results are undefined.
5307
e0d4c0b3 5308@cindex @code{satfract@var{m}@var{n}2} instruction pattern
0f996086
CF
5309@item @samp{satfract@var{m}@var{n}2}
5310Convert operand 1 of mode @var{m} to mode @var{n} and store in
5311operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
5312could be fixed-point to fixed-point, signed integer to fixed-point,
5313or floating-point to fixed-point.
5314When overflows or underflows happen, the instruction saturates the
5315results to the maximum or the minimum.
5316
e0d4c0b3 5317@cindex @code{fractuns@var{m}@var{n}2} instruction pattern
0f996086
CF
5318@item @samp{fractuns@var{m}@var{n}2}
5319Convert operand 1 of mode @var{m} to mode @var{n} and store in
5320operand 0 (which has mode @var{n}). Mode @var{m} and mode @var{n}
5321could be unsigned integer to fixed-point, or
5322fixed-point to unsigned integer.
5323When overflows or underflows happen, the results are undefined.
5324
e0d4c0b3 5325@cindex @code{satfractuns@var{m}@var{n}2} instruction pattern
0f996086
CF
5326@item @samp{satfractuns@var{m}@var{n}2}
5327Convert unsigned integer operand 1 of mode @var{m} to fixed-point mode
5328@var{n} and store in operand 0 (which has mode @var{n}).
5329When overflows or underflows happen, the instruction saturates the
5330results to the maximum or the minimum.
5331
d2eeb2d1
RS
5332@cindex @code{extv@var{m}} instruction pattern
5333@item @samp{extv@var{m}}
5334Extract a bit-field from register operand 1, sign-extend it, and store
5335it in operand 0. Operand 2 specifies the width of the field in bits
5336and operand 3 the starting bit, which counts from the most significant
5337bit if @samp{BITS_BIG_ENDIAN} is true and from the least significant bit
5338otherwise.
5339
5340Operands 0 and 1 both have mode @var{m}. Operands 2 and 3 have a
5341target-specific mode.
5342
5343@cindex @code{extvmisalign@var{m}} instruction pattern
5344@item @samp{extvmisalign@var{m}}
5345Extract a bit-field from memory operand 1, sign extend it, and store
5346it in operand 0. Operand 2 specifies the width in bits and operand 3
5347the starting bit. The starting bit is always somewhere in the first byte of
5348operand 1; it counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
5349is true and from the least significant bit otherwise.
5350
5351Operand 0 has mode @var{m} while operand 1 has @code{BLK} mode.
5352Operands 2 and 3 have a target-specific mode.
5353
5354The instruction must not read beyond the last byte of the bit-field.
5355
5356@cindex @code{extzv@var{m}} instruction pattern
5357@item @samp{extzv@var{m}}
5358Like @samp{extv@var{m}} except that the bit-field value is zero-extended.
5359
5360@cindex @code{extzvmisalign@var{m}} instruction pattern
5361@item @samp{extzvmisalign@var{m}}
5362Like @samp{extvmisalign@var{m}} except that the bit-field value is
5363zero-extended.
5364
5365@cindex @code{insv@var{m}} instruction pattern
5366@item @samp{insv@var{m}}
5367Insert operand 3 into a bit-field of register operand 0. Operand 1
5368specifies the width of the field in bits and operand 2 the starting bit,
5369which counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
5370is true and from the least significant bit otherwise.
5371
5372Operands 0 and 3 both have mode @var{m}. Operands 1 and 2 have a
5373target-specific mode.
5374
5375@cindex @code{insvmisalign@var{m}} instruction pattern
5376@item @samp{insvmisalign@var{m}}
5377Insert operand 3 into a bit-field of memory operand 0. Operand 1
5378specifies the width of the field in bits and operand 2 the starting bit.
5379The starting bit is always somewhere in the first byte of operand 0;
5380it counts from the most significant bit if @samp{BITS_BIG_ENDIAN}
5381is true and from the least significant bit otherwise.
5382
5383Operand 3 has mode @var{m} while operand 0 has @code{BLK} mode.
5384Operands 1 and 2 have a target-specific mode.
5385
5386The instruction must not read or write beyond the last byte of the bit-field.
5387
03dda8e3
RK
5388@cindex @code{extv} instruction pattern
5389@item @samp{extv}
c771326b 5390Extract a bit-field from operand 1 (a register or memory operand), where
03dda8e3
RK
5391operand 2 specifies the width in bits and operand 3 the starting bit,
5392and store it in operand 0. Operand 0 must have mode @code{word_mode}.
5393Operand 1 may have mode @code{byte_mode} or @code{word_mode}; often
5394@code{word_mode} is allowed only for registers. Operands 2 and 3 must
5395be valid for @code{word_mode}.
5396
5397The RTL generation pass generates this instruction only with constants
3ab997e8 5398for operands 2 and 3 and the constant is never zero for operand 2.
03dda8e3
RK
5399
5400The bit-field value is sign-extended to a full word integer
5401before it is stored in operand 0.
5402
d2eeb2d1
RS
5403This pattern is deprecated; please use @samp{extv@var{m}} and
5404@code{extvmisalign@var{m}} instead.
5405
03dda8e3
RK
5406@cindex @code{extzv} instruction pattern
5407@item @samp{extzv}
5408Like @samp{extv} except that the bit-field value is zero-extended.
5409
d2eeb2d1
RS
5410This pattern is deprecated; please use @samp{extzv@var{m}} and
5411@code{extzvmisalign@var{m}} instead.
5412
03dda8e3
RK
5413@cindex @code{insv} instruction pattern
5414@item @samp{insv}
c771326b
JM
5415Store operand 3 (which must be valid for @code{word_mode}) into a
5416bit-field in operand 0, where operand 1 specifies the width in bits and
03dda8e3
RK
5417operand 2 the starting bit. Operand 0 may have mode @code{byte_mode} or
5418@code{word_mode}; often @code{word_mode} is allowed only for registers.
5419Operands 1 and 2 must be valid for @code{word_mode}.
5420
5421The RTL generation pass generates this instruction only with constants
3ab997e8 5422for operands 1 and 2 and the constant is never zero for operand 1.
03dda8e3 5423
d2eeb2d1
RS
5424This pattern is deprecated; please use @samp{insv@var{m}} and
5425@code{insvmisalign@var{m}} instead.
5426
03dda8e3
RK
5427@cindex @code{mov@var{mode}cc} instruction pattern
5428@item @samp{mov@var{mode}cc}
5429Conditionally move operand 2 or operand 3 into operand 0 according to the
5430comparison in operand 1. If the comparison is true, operand 2 is moved
5431into operand 0, otherwise operand 3 is moved.
5432
5433The mode of the operands being compared need not be the same as the operands
5434being moved. Some machines, sparc64 for example, have instructions that
5435conditionally move an integer value based on the floating point condition
5436codes and vice versa.
5437
5438If the machine does not have conditional move instructions, do not
5439define these patterns.
5440
068f5dea 5441@cindex @code{add@var{mode}cc} instruction pattern
4b5cc2b3 5442@item @samp{add@var{mode}cc}
068f5dea
JH
5443Similar to @samp{mov@var{mode}cc} but for conditional addition. Conditionally
5444move operand 2 or (operands 2 + operand 3) into operand 0 according to the
5285c21c 5445comparison in operand 1. If the comparison is false, operand 2 is moved into
4b5cc2b3 5446operand 0, otherwise (operand 2 + operand 3) is moved.
068f5dea 5447
f90b7a5a
PB
5448@cindex @code{cstore@var{mode}4} instruction pattern
5449@item @samp{cstore@var{mode}4}
5450Store zero or nonzero in operand 0 according to whether a comparison
5451is true. Operand 1 is a comparison operator. Operand 2 and operand 3
5452are the first and second operand of the comparison, respectively.
5453You specify the mode that operand 0 must have when you write the
5454@code{match_operand} expression. The compiler automatically sees which
5455mode you have used and supplies an operand of that mode.
03dda8e3
RK
5456
5457The value stored for a true condition must have 1 as its low bit, or
5458else must be negative. Otherwise the instruction is not suitable and
5459you should omit it from the machine description. You describe to the
5460compiler exactly which value is stored by defining the macro
5461@code{STORE_FLAG_VALUE} (@pxref{Misc}). If a description cannot be
ac5eda13
PB
5462found that can be used for all the possible comparison operators, you
5463should pick one and use a @code{define_expand} to map all results
5464onto the one you chose.
5465
5466These operations may @code{FAIL}, but should do so only in relatively
5467uncommon cases; if they would @code{FAIL} for common cases involving
5468integer comparisons, it is best to restrict the predicates to not
5469allow these operands. Likewise if a given comparison operator will
5470always fail, independent of the operands (for floating-point modes, the
5471@code{ordered_comparison_operator} predicate is often useful in this case).
5472
5473If this pattern is omitted, the compiler will generate a conditional
5474branch---for example, it may copy a constant one to the target and branching
5475around an assignment of zero to the target---or a libcall. If the predicate
5476for operand 1 only rejects some operators, it will also try reordering the
5477operands and/or inverting the result value (e.g.@: by an exclusive OR).
5478These possibilities could be cheaper or equivalent to the instructions
5479used for the @samp{cstore@var{mode}4} pattern followed by those required
5480to convert a positive result from @code{STORE_FLAG_VALUE} to 1; in this
5481case, you can and should make operand 1's predicate reject some operators
5482in the @samp{cstore@var{mode}4} pattern, or remove the pattern altogether
5483from the machine description.
03dda8e3 5484
66c87bae
KH
5485@cindex @code{cbranch@var{mode}4} instruction pattern
5486@item @samp{cbranch@var{mode}4}
5487Conditional branch instruction combined with a compare instruction.
5488Operand 0 is a comparison operator. Operand 1 and operand 2 are the
5489first and second operands of the comparison, respectively. Operand 3
5490is a @code{label_ref} that refers to the label to jump to.
5491
d26eedb6
HPN
5492@cindex @code{jump} instruction pattern
5493@item @samp{jump}
5494A jump inside a function; an unconditional branch. Operand 0 is the
5495@code{label_ref} of the label to jump to. This pattern name is mandatory
5496on all machines.
5497
03dda8e3
RK
5498@cindex @code{call} instruction pattern
5499@item @samp{call}
5500Subroutine call instruction returning no value. Operand 0 is the
5501function to call; operand 1 is the number of bytes of arguments pushed
f5963e61
JL
5502as a @code{const_int}; operand 2 is the number of registers used as
5503operands.
03dda8e3
RK
5504
5505On most machines, operand 2 is not actually stored into the RTL
5506pattern. It is supplied for the sake of some RISC machines which need
5507to put this information into the assembler code; they can put it in
5508the RTL instead of operand 1.
5509
5510Operand 0 should be a @code{mem} RTX whose address is the address of the
5511function. Note, however, that this address can be a @code{symbol_ref}
5512expression even if it would not be a legitimate memory address on the
5513target machine. If it is also not a valid argument for a call
5514instruction, the pattern for this operation should be a
5515@code{define_expand} (@pxref{Expander Definitions}) that places the
5516address into a register and uses that register in the call instruction.
5517
5518@cindex @code{call_value} instruction pattern
5519@item @samp{call_value}
5520Subroutine call instruction returning a value. Operand 0 is the hard
5521register in which the value is returned. There are three more
5522operands, the same as the three operands of the @samp{call}
5523instruction (but with numbers increased by one).
5524
5525Subroutines that return @code{BLKmode} objects use the @samp{call}
5526insn.
5527
5528@cindex @code{call_pop} instruction pattern
5529@cindex @code{call_value_pop} instruction pattern
5530@item @samp{call_pop}, @samp{call_value_pop}
5531Similar to @samp{call} and @samp{call_value}, except used if defined and
df2a54e9 5532if @code{RETURN_POPS_ARGS} is nonzero. They should emit a @code{parallel}
03dda8e3
RK
5533that contains both the function call and a @code{set} to indicate the
5534adjustment made to the frame pointer.
5535
df2a54e9 5536For machines where @code{RETURN_POPS_ARGS} can be nonzero, the use of these
03dda8e3
RK
5537patterns increases the number of functions for which the frame pointer
5538can be eliminated, if desired.
5539
5540@cindex @code{untyped_call} instruction pattern
5541@item @samp{untyped_call}
5542Subroutine call instruction returning a value of any type. Operand 0 is
5543the function to call; operand 1 is a memory location where the result of
5544calling the function is to be stored; operand 2 is a @code{parallel}
5545expression where each element is a @code{set} expression that indicates
5546the saving of a function return value into the result block.
5547
5548This instruction pattern should be defined to support
5549@code{__builtin_apply} on machines where special instructions are needed
5550to call a subroutine with arbitrary arguments or to save the value
5551returned. This instruction pattern is required on machines that have
e979f9e8
JM
5552multiple registers that can hold a return value
5553(i.e.@: @code{FUNCTION_VALUE_REGNO_P} is true for more than one register).
03dda8e3
RK
5554
5555@cindex @code{return} instruction pattern
5556@item @samp{return}
5557Subroutine return instruction. This instruction pattern name should be
5558defined only if a single instruction can do all the work of returning
5559from a function.
5560
5561Like the @samp{mov@var{m}} patterns, this pattern is also used after the
5562RTL generation phase. In this case it is to support machines where
5563multiple instructions are usually needed to return from a function, but
5564some class of functions only requires one instruction to implement a
5565return. Normally, the applicable functions are those which do not need
5566to save any registers or allocate stack space.
5567
26898771
BS
5568It is valid for this pattern to expand to an instruction using
5569@code{simple_return} if no epilogue is required.
5570
5571@cindex @code{simple_return} instruction pattern
5572@item @samp{simple_return}
5573Subroutine return instruction. This instruction pattern name should be
5574defined only if a single instruction can do all the work of returning
5575from a function on a path where no epilogue is required. This pattern
5576is very similar to the @code{return} instruction pattern, but it is emitted
5577only by the shrink-wrapping optimization on paths where the function
5578prologue has not been executed, and a function return should occur without
5579any of the effects of the epilogue. Additional uses may be introduced on
5580paths where both the prologue and the epilogue have executed.
5581
03dda8e3
RK
5582@findex reload_completed
5583@findex leaf_function_p
5584For such machines, the condition specified in this pattern should only
df2a54e9 5585be true when @code{reload_completed} is nonzero and the function's
03dda8e3
RK
5586epilogue would only be a single instruction. For machines with register
5587windows, the routine @code{leaf_function_p} may be used to determine if
5588a register window push is required.
5589
5590Machines that have conditional return instructions should define patterns
5591such as
5592
5593@smallexample
5594(define_insn ""
5595 [(set (pc)
5596 (if_then_else (match_operator
5597 0 "comparison_operator"
5598 [(cc0) (const_int 0)])
5599 (return)
5600 (pc)))]
5601 "@var{condition}"
5602 "@dots{}")
5603@end smallexample
5604
5605where @var{condition} would normally be the same condition specified on the
5606named @samp{return} pattern.
5607
5608@cindex @code{untyped_return} instruction pattern
5609@item @samp{untyped_return}
5610Untyped subroutine return instruction. This instruction pattern should
5611be defined to support @code{__builtin_return} on machines where special
5612instructions are needed to return a value of any type.
5613
5614Operand 0 is a memory location where the result of calling a function
5615with @code{__builtin_apply} is stored; operand 1 is a @code{parallel}
5616expression where each element is a @code{set} expression that indicates
5617the restoring of a function return value from the result block.
5618
5619@cindex @code{nop} instruction pattern
5620@item @samp{nop}
5621No-op instruction. This instruction pattern name should always be defined
5622to output a no-op in assembler code. @code{(const_int 0)} will do as an
5623RTL pattern.
5624
5625@cindex @code{indirect_jump} instruction pattern
5626@item @samp{indirect_jump}
5627An instruction to jump to an address which is operand zero.
5628This pattern name is mandatory on all machines.
5629
5630@cindex @code{casesi} instruction pattern
5631@item @samp{casesi}
5632Instruction to jump through a dispatch table, including bounds checking.
5633This instruction takes five operands:
5634
5635@enumerate
5636@item
5637The index to dispatch on, which has mode @code{SImode}.
5638
5639@item
5640The lower bound for indices in the table, an integer constant.
5641
5642@item
5643The total range of indices in the table---the largest index
5644minus the smallest one (both inclusive).
5645
5646@item
5647A label that precedes the table itself.
5648
5649@item
5650A label to jump to if the index has a value outside the bounds.
03dda8e3
RK
5651@end enumerate
5652
e4ae5e77 5653The table is an @code{addr_vec} or @code{addr_diff_vec} inside of a
da5c6bde 5654@code{jump_table_data}. The number of elements in the table is one plus the
03dda8e3
RK
5655difference between the upper bound and the lower bound.
5656
5657@cindex @code{tablejump} instruction pattern
5658@item @samp{tablejump}
5659Instruction to jump to a variable address. This is a low-level
5660capability which can be used to implement a dispatch table when there
5661is no @samp{casesi} pattern.
5662
5663This pattern requires two operands: the address or offset, and a label
5664which should immediately precede the jump table. If the macro
f1f5f142
JL
5665@code{CASE_VECTOR_PC_RELATIVE} evaluates to a nonzero value then the first
5666operand is an offset which counts from the address of the table; otherwise,
5667it is an absolute address to jump to. In either case, the first operand has
03dda8e3
RK
5668mode @code{Pmode}.
5669
5670The @samp{tablejump} insn is always the last insn before the jump
5671table it uses. Its assembler code normally has no need to use the
5672second operand, but you should incorporate it in the RTL pattern so
5673that the jump optimizer will not delete the table as unreachable code.
5674
6e4fcc95
MH
5675
5676@cindex @code{decrement_and_branch_until_zero} instruction pattern
5677@item @samp{decrement_and_branch_until_zero}
5678Conditional branch instruction that decrements a register and
df2a54e9 5679jumps if the register is nonzero. Operand 0 is the register to
6e4fcc95 5680decrement and test; operand 1 is the label to jump to if the
df2a54e9 5681register is nonzero. @xref{Looping Patterns}.
6e4fcc95
MH
5682
5683This optional instruction pattern is only used by the combiner,
5684typically for loops reversed by the loop optimizer when strength
5685reduction is enabled.
5686
5687@cindex @code{doloop_end} instruction pattern
5688@item @samp{doloop_end}
5689Conditional branch instruction that decrements a register and jumps if
df2a54e9 5690the register is nonzero. This instruction takes five operands: Operand
6e4fcc95
MH
56910 is the register to decrement and test; operand 1 is the number of loop
5692iterations as a @code{const_int} or @code{const0_rtx} if this cannot be
5693determined until run-time; operand 2 is the actual or estimated maximum
5694number of iterations as a @code{const_int}; operand 3 is the number of
5695enclosed loops as a @code{const_int} (an innermost loop has a value of
2407343c
JR
56961); operand 4 is the label to jump to if the register is nonzero;
5697operand 5 is const1_rtx if the loop in entered at its top, const0_rtx
5698otherwise.
5c25e11d 5699@xref{Looping Patterns}.
6e4fcc95
MH
5700
5701This optional instruction pattern should be defined for machines with
5702low-overhead looping instructions as the loop optimizer will try to
5703modify suitable loops to utilize it. If nested low-overhead looping is
5704not supported, use a @code{define_expand} (@pxref{Expander Definitions})
5705and make the pattern fail if operand 3 is not @code{const1_rtx}.
5706Similarly, if the actual or estimated maximum number of iterations is
5707too large for this instruction, make it fail.
5708
5709@cindex @code{doloop_begin} instruction pattern
5710@item @samp{doloop_begin}
5711Companion instruction to @code{doloop_end} required for machines that
c21cd8b1
JM
5712need to perform some initialization, such as loading special registers
5713used by a low-overhead looping instruction. If initialization insns do
6e4fcc95
MH
5714not always need to be emitted, use a @code{define_expand}
5715(@pxref{Expander Definitions}) and make it fail.
5716
5717
03dda8e3
RK
5718@cindex @code{canonicalize_funcptr_for_compare} instruction pattern
5719@item @samp{canonicalize_funcptr_for_compare}
5720Canonicalize the function pointer in operand 1 and store the result
5721into operand 0.
5722
5723Operand 0 is always a @code{reg} and has mode @code{Pmode}; operand 1
5724may be a @code{reg}, @code{mem}, @code{symbol_ref}, @code{const_int}, etc
5725and also has mode @code{Pmode}.
5726
5727Canonicalization of a function pointer usually involves computing
5728the address of the function which would be called if the function
5729pointer were used in an indirect call.
5730
5731Only define this pattern if function pointers on the target machine
5732can have different values but still call the same function when
5733used in an indirect call.
5734
5735@cindex @code{save_stack_block} instruction pattern
5736@cindex @code{save_stack_function} instruction pattern
5737@cindex @code{save_stack_nonlocal} instruction pattern
5738@cindex @code{restore_stack_block} instruction pattern
5739@cindex @code{restore_stack_function} instruction pattern
5740@cindex @code{restore_stack_nonlocal} instruction pattern
5741@item @samp{save_stack_block}
5742@itemx @samp{save_stack_function}
5743@itemx @samp{save_stack_nonlocal}
5744@itemx @samp{restore_stack_block}
5745@itemx @samp{restore_stack_function}
5746@itemx @samp{restore_stack_nonlocal}
5747Most machines save and restore the stack pointer by copying it to or
5748from an object of mode @code{Pmode}. Do not define these patterns on
5749such machines.
5750
5751Some machines require special handling for stack pointer saves and
5752restores. On those machines, define the patterns corresponding to the
5753non-standard cases by using a @code{define_expand} (@pxref{Expander
5754Definitions}) that produces the required insns. The three types of
5755saves and restores are:
5756
5757@enumerate
5758@item
5759@samp{save_stack_block} saves the stack pointer at the start of a block
5760that allocates a variable-sized object, and @samp{restore_stack_block}
5761restores the stack pointer when the block is exited.
5762
5763@item
5764@samp{save_stack_function} and @samp{restore_stack_function} do a
5765similar job for the outermost block of a function and are used when the
5766function allocates variable-sized objects or calls @code{alloca}. Only
5767the epilogue uses the restored stack pointer, allowing a simpler save or
5768restore sequence on some machines.
5769
5770@item
5771@samp{save_stack_nonlocal} is used in functions that contain labels
5772branched to by nested functions. It saves the stack pointer in such a
5773way that the inner function can use @samp{restore_stack_nonlocal} to
5774restore the stack pointer. The compiler generates code to restore the
5775frame and argument pointer registers, but some machines require saving
5776and restoring additional data such as register window information or
5777stack backchains. Place insns in these patterns to save and restore any
5778such required data.
5779@end enumerate
5780
5781When saving the stack pointer, operand 0 is the save area and operand 1
73c8090f
DE
5782is the stack pointer. The mode used to allocate the save area defaults
5783to @code{Pmode} but you can override that choice by defining the
7e390c9d 5784@code{STACK_SAVEAREA_MODE} macro (@pxref{Storage Layout}). You must
73c8090f
DE
5785specify an integral mode, or @code{VOIDmode} if no save area is needed
5786for a particular type of save (either because no save is needed or
5787because a machine-specific save area can be used). Operand 0 is the
5788stack pointer and operand 1 is the save area for restore operations. If
5789@samp{save_stack_block} is defined, operand 0 must not be
5790@code{VOIDmode} since these saves can be arbitrarily nested.
03dda8e3
RK
5791
5792A save area is a @code{mem} that is at a constant offset from
5793@code{virtual_stack_vars_rtx} when the stack pointer is saved for use by
5794nonlocal gotos and a @code{reg} in the other two cases.
5795
5796@cindex @code{allocate_stack} instruction pattern
5797@item @samp{allocate_stack}
72938a4c 5798Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 1 from
03dda8e3
RK
5799the stack pointer to create space for dynamically allocated data.
5800
72938a4c
MM
5801Store the resultant pointer to this space into operand 0. If you
5802are allocating space from the main stack, do this by emitting a
5803move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0.
5804If you are allocating the space elsewhere, generate code to copy the
5805location of the space to operand 0. In the latter case, you must
956d6950 5806ensure this space gets freed when the corresponding space on the main
72938a4c
MM
5807stack is free.
5808
03dda8e3
RK
5809Do not define this pattern if all that must be done is the subtraction.
5810Some machines require other operations such as stack probes or
5811maintaining the back chain. Define this pattern to emit those
5812operations in addition to updating the stack pointer.
5813
861bb6c1
JL
5814@cindex @code{check_stack} instruction pattern
5815@item @samp{check_stack}
507d0069
EB
5816If stack checking (@pxref{Stack Checking}) cannot be done on your system by
5817probing the stack, define this pattern to perform the needed check and signal
5818an error if the stack has overflowed. The single operand is the address in
5819the stack farthest from the current stack pointer that you need to validate.
5820Normally, on platforms where this pattern is needed, you would obtain the
5821stack limit from a global or thread-specific variable or register.
d809253a 5822
7b84aac0
EB
5823@cindex @code{probe_stack_address} instruction pattern
5824@item @samp{probe_stack_address}
5825If stack checking (@pxref{Stack Checking}) can be done on your system by
5826probing the stack but without the need to actually access it, define this
5827pattern and signal an error if the stack has overflowed. The single operand
5828is the memory address in the stack that needs to be probed.
5829
d809253a
EB
5830@cindex @code{probe_stack} instruction pattern
5831@item @samp{probe_stack}
507d0069
EB
5832If stack checking (@pxref{Stack Checking}) can be done on your system by
5833probing the stack but doing it with a ``store zero'' instruction is not valid
5834or optimal, define this pattern to do the probing differently and signal an
5835error if the stack has overflowed. The single operand is the memory reference
5836in the stack that needs to be probed.
861bb6c1 5837
03dda8e3
RK
5838@cindex @code{nonlocal_goto} instruction pattern
5839@item @samp{nonlocal_goto}
5840Emit code to generate a non-local goto, e.g., a jump from one function
5841to a label in an outer function. This pattern has four arguments,
5842each representing a value to be used in the jump. The first
45bb86fd 5843argument is to be loaded into the frame pointer, the second is
03dda8e3
RK
5844the address to branch to (code to dispatch to the actual label),
5845the third is the address of a location where the stack is saved,
5846and the last is the address of the label, to be placed in the
5847location for the incoming static chain.
5848
f0523f02 5849On most machines you need not define this pattern, since GCC will
03dda8e3
RK
5850already generate the correct code, which is to load the frame pointer
5851and static chain, restore the stack (using the
5852@samp{restore_stack_nonlocal} pattern, if defined), and jump indirectly
5853to the dispatcher. You need only define this pattern if this code will
5854not work on your machine.
5855
5856@cindex @code{nonlocal_goto_receiver} instruction pattern
5857@item @samp{nonlocal_goto_receiver}
5858This pattern, if defined, contains code needed at the target of a
161d7b59 5859nonlocal goto after the code already generated by GCC@. You will not
03dda8e3
RK
5860normally need to define this pattern. A typical reason why you might
5861need this pattern is if some value, such as a pointer to a global table,
c30ddbc9 5862must be restored when the frame pointer is restored. Note that a nonlocal
89bcce1b 5863goto only occurs within a unit-of-translation, so a global table pointer
c30ddbc9
RH
5864that is shared by all functions of a given module need not be restored.
5865There are no arguments.
861bb6c1
JL
5866
5867@cindex @code{exception_receiver} instruction pattern
5868@item @samp{exception_receiver}
5869This pattern, if defined, contains code needed at the site of an
5870exception handler that isn't needed at the site of a nonlocal goto. You
5871will not normally need to define this pattern. A typical reason why you
5872might need this pattern is if some value, such as a pointer to a global
5873table, must be restored after control flow is branched to the handler of
5874an exception. There are no arguments.
c85f7c16 5875
c30ddbc9
RH
5876@cindex @code{builtin_setjmp_setup} instruction pattern
5877@item @samp{builtin_setjmp_setup}
5878This pattern, if defined, contains additional code needed to initialize
5879the @code{jmp_buf}. You will not normally need to define this pattern.
5880A typical reason why you might need this pattern is if some value, such
5881as a pointer to a global table, must be restored. Though it is
5882preferred that the pointer value be recalculated if possible (given the
5883address of a label for instance). The single argument is a pointer to
5884the @code{jmp_buf}. Note that the buffer is five words long and that
5885the first three are normally used by the generic mechanism.
5886
c85f7c16
JL
5887@cindex @code{builtin_setjmp_receiver} instruction pattern
5888@item @samp{builtin_setjmp_receiver}
e4ae5e77 5889This pattern, if defined, contains code needed at the site of a
c771326b 5890built-in setjmp that isn't needed at the site of a nonlocal goto. You
c85f7c16
JL
5891will not normally need to define this pattern. A typical reason why you
5892might need this pattern is if some value, such as a pointer to a global
c30ddbc9 5893table, must be restored. It takes one argument, which is the label
073a8998 5894to which builtin_longjmp transferred control; this pattern may be emitted
c30ddbc9
RH
5895at a small offset from that label.
5896
5897@cindex @code{builtin_longjmp} instruction pattern
5898@item @samp{builtin_longjmp}
5899This pattern, if defined, performs the entire action of the longjmp.
5900You will not normally need to define this pattern unless you also define
5901@code{builtin_setjmp_setup}. The single argument is a pointer to the
5902@code{jmp_buf}.
f69864aa 5903
52a11cbf
RH
5904@cindex @code{eh_return} instruction pattern
5905@item @samp{eh_return}
f69864aa 5906This pattern, if defined, affects the way @code{__builtin_eh_return},
52a11cbf
RH
5907and thence the call frame exception handling library routines, are
5908built. It is intended to handle non-trivial actions needed along
5909the abnormal return path.
5910
34dc173c 5911The address of the exception handler to which the function should return
daf2f129 5912is passed as operand to this pattern. It will normally need to copied by
34dc173c
UW
5913the pattern to some special register or memory location.
5914If the pattern needs to determine the location of the target call
5915frame in order to do so, it may use @code{EH_RETURN_STACKADJ_RTX},
5916if defined; it will have already been assigned.
5917
5918If this pattern is not defined, the default action will be to simply
5919copy the return address to @code{EH_RETURN_HANDLER_RTX}. Either
5920that macro or this pattern needs to be defined if call frame exception
5921handling is to be used.
0b433de6
JL
5922
5923@cindex @code{prologue} instruction pattern
17b53c33 5924@anchor{prologue instruction pattern}
0b433de6
JL
5925@item @samp{prologue}
5926This pattern, if defined, emits RTL for entry to a function. The function
b192711e 5927entry is responsible for setting up the stack frame, initializing the frame
0b433de6
JL
5928pointer register, saving callee saved registers, etc.
5929
5930Using a prologue pattern is generally preferred over defining
17b53c33 5931@code{TARGET_ASM_FUNCTION_PROLOGUE} to emit assembly code for the prologue.
0b433de6
JL
5932
5933The @code{prologue} pattern is particularly useful for targets which perform
5934instruction scheduling.
5935
12c5ffe5
EB
5936@cindex @code{window_save} instruction pattern
5937@anchor{window_save instruction pattern}
5938@item @samp{window_save}
5939This pattern, if defined, emits RTL for a register window save. It should
5940be defined if the target machine has register windows but the window events
5941are decoupled from calls to subroutines. The canonical example is the SPARC
5942architecture.
5943
0b433de6 5944@cindex @code{epilogue} instruction pattern
17b53c33 5945@anchor{epilogue instruction pattern}
0b433de6 5946@item @samp{epilogue}
396ad517 5947This pattern emits RTL for exit from a function. The function
b192711e 5948exit is responsible for deallocating the stack frame, restoring callee saved
0b433de6
JL
5949registers and emitting the return instruction.
5950
5951Using an epilogue pattern is generally preferred over defining
17b53c33 5952@code{TARGET_ASM_FUNCTION_EPILOGUE} to emit assembly code for the epilogue.
0b433de6
JL
5953
5954The @code{epilogue} pattern is particularly useful for targets which perform
5955instruction scheduling or which have delay slots for their return instruction.
5956
5957@cindex @code{sibcall_epilogue} instruction pattern
5958@item @samp{sibcall_epilogue}
5959This pattern, if defined, emits RTL for exit from a function without the final
5960branch back to the calling function. This pattern will be emitted before any
5961sibling call (aka tail call) sites.
5962
5963The @code{sibcall_epilogue} pattern must not clobber any arguments used for
5964parameter passing or any stack slots for arguments passed to the current
ebb48a4d 5965function.
a157febd
GK
5966
5967@cindex @code{trap} instruction pattern
5968@item @samp{trap}
5969This pattern, if defined, signals an error, typically by causing some
5970kind of signal to be raised. Among other places, it is used by the Java
c771326b 5971front end to signal `invalid array index' exceptions.
a157febd 5972
f90b7a5a
PB
5973@cindex @code{ctrap@var{MM}4} instruction pattern
5974@item @samp{ctrap@var{MM}4}
a157febd 5975Conditional trap instruction. Operand 0 is a piece of RTL which
f90b7a5a
PB
5976performs a comparison, and operands 1 and 2 are the arms of the
5977comparison. Operand 3 is the trap code, an integer.
a157febd 5978
f90b7a5a 5979A typical @code{ctrap} pattern looks like
a157febd
GK
5980
5981@smallexample
f90b7a5a 5982(define_insn "ctrapsi4"
ebb48a4d 5983 [(trap_if (match_operator 0 "trap_operator"
f90b7a5a 5984 [(match_operand 1 "register_operand")
73b8bfe1 5985 (match_operand 2 "immediate_operand")])
f90b7a5a 5986 (match_operand 3 "const_int_operand" "i"))]
a157febd
GK
5987 ""
5988 "@dots{}")
5989@end smallexample
5990
e83d297b
JJ
5991@cindex @code{prefetch} instruction pattern
5992@item @samp{prefetch}
5993
5994This pattern, if defined, emits code for a non-faulting data prefetch
5995instruction. Operand 0 is the address of the memory to prefetch. Operand 1
5996is a constant 1 if the prefetch is preparing for a write to the memory
5997address, or a constant 0 otherwise. Operand 2 is the expected degree of
5998temporal locality of the data and is a value between 0 and 3, inclusive; 0
5999means that the data has no temporal locality, so it need not be left in the
6000cache after the access; 3 means that the data has a high degree of temporal
6001locality and should be left in all levels of cache possible; 1 and 2 mean,
6002respectively, a low or moderate degree of temporal locality.
6003
6004Targets that do not support write prefetches or locality hints can ignore
6005the values of operands 1 and 2.
6006
b6bd3371
DE
6007@cindex @code{blockage} instruction pattern
6008@item @samp{blockage}
6009
6010This pattern defines a pseudo insn that prevents the instruction
adddc347
HPN
6011scheduler and other passes from moving instructions and using register
6012equivalences across the boundary defined by the blockage insn.
6013This needs to be an UNSPEC_VOLATILE pattern or a volatile ASM.
b6bd3371 6014
48ae6c13
RH
6015@cindex @code{memory_barrier} instruction pattern
6016@item @samp{memory_barrier}
6017
6018If the target memory model is not fully synchronous, then this pattern
6019should be defined to an instruction that orders both loads and stores
6020before the instruction with respect to loads and stores after the instruction.
6021This pattern has no operands.
6022
6023@cindex @code{sync_compare_and_swap@var{mode}} instruction pattern
6024@item @samp{sync_compare_and_swap@var{mode}}
6025
6026This pattern, if defined, emits code for an atomic compare-and-swap
6027operation. Operand 1 is the memory on which the atomic operation is
6028performed. Operand 2 is the ``old'' value to be compared against the
6029current contents of the memory location. Operand 3 is the ``new'' value
6030to store in the memory if the compare succeeds. Operand 0 is the result
915167f5
GK
6031of the operation; it should contain the contents of the memory
6032before the operation. If the compare succeeds, this should obviously be
6033a copy of operand 2.
48ae6c13
RH
6034
6035This pattern must show that both operand 0 and operand 1 are modified.
6036
915167f5
GK
6037This pattern must issue any memory barrier instructions such that all
6038memory operations before the atomic operation occur before the atomic
6039operation and all memory operations after the atomic operation occur
6040after the atomic operation.
48ae6c13 6041
4a77c72b 6042For targets where the success or failure of the compare-and-swap
f90b7a5a
PB
6043operation is available via the status flags, it is possible to
6044avoid a separate compare operation and issue the subsequent
6045branch or store-flag operation immediately after the compare-and-swap.
6046To this end, GCC will look for a @code{MODE_CC} set in the
6047output of @code{sync_compare_and_swap@var{mode}}; if the machine
6048description includes such a set, the target should also define special
6049@code{cbranchcc4} and/or @code{cstorecc4} instructions. GCC will then
6050be able to take the destination of the @code{MODE_CC} set and pass it
6051to the @code{cbranchcc4} or @code{cstorecc4} pattern as the first
6052operand of the comparison (the second will be @code{(const_int 0)}).
48ae6c13 6053
cedb4a1a
RH
6054For targets where the operating system may provide support for this
6055operation via library calls, the @code{sync_compare_and_swap_optab}
6056may be initialized to a function with the same interface as the
6057@code{__sync_val_compare_and_swap_@var{n}} built-in. If the entire
6058set of @var{__sync} builtins are supported via library calls, the
6059target can initialize all of the optabs at once with
6060@code{init_sync_libfuncs}.
6061For the purposes of C++11 @code{std::atomic::is_lock_free}, it is
6062assumed that these library calls do @emph{not} use any kind of
6063interruptable locking.
6064
48ae6c13
RH
6065@cindex @code{sync_add@var{mode}} instruction pattern
6066@cindex @code{sync_sub@var{mode}} instruction pattern
6067@cindex @code{sync_ior@var{mode}} instruction pattern
6068@cindex @code{sync_and@var{mode}} instruction pattern
6069@cindex @code{sync_xor@var{mode}} instruction pattern
6070@cindex @code{sync_nand@var{mode}} instruction pattern
6071@item @samp{sync_add@var{mode}}, @samp{sync_sub@var{mode}}
6072@itemx @samp{sync_ior@var{mode}}, @samp{sync_and@var{mode}}
6073@itemx @samp{sync_xor@var{mode}}, @samp{sync_nand@var{mode}}
6074
6075These patterns emit code for an atomic operation on memory.
6076Operand 0 is the memory on which the atomic operation is performed.
6077Operand 1 is the second operand to the binary operator.
6078
915167f5
GK
6079This pattern must issue any memory barrier instructions such that all
6080memory operations before the atomic operation occur before the atomic
6081operation and all memory operations after the atomic operation occur
6082after the atomic operation.
48ae6c13
RH
6083
6084If these patterns are not defined, the operation will be constructed
6085from a compare-and-swap operation, if defined.
6086
6087@cindex @code{sync_old_add@var{mode}} instruction pattern
6088@cindex @code{sync_old_sub@var{mode}} instruction pattern
6089@cindex @code{sync_old_ior@var{mode}} instruction pattern
6090@cindex @code{sync_old_and@var{mode}} instruction pattern
6091@cindex @code{sync_old_xor@var{mode}} instruction pattern
6092@cindex @code{sync_old_nand@var{mode}} instruction pattern
6093@item @samp{sync_old_add@var{mode}}, @samp{sync_old_sub@var{mode}}
6094@itemx @samp{sync_old_ior@var{mode}}, @samp{sync_old_and@var{mode}}
6095@itemx @samp{sync_old_xor@var{mode}}, @samp{sync_old_nand@var{mode}}
6096
c29c1030 6097These patterns emit code for an atomic operation on memory,
48ae6c13
RH
6098and return the value that the memory contained before the operation.
6099Operand 0 is the result value, operand 1 is the memory on which the
6100atomic operation is performed, and operand 2 is the second operand
6101to the binary operator.
6102
915167f5
GK
6103This pattern must issue any memory barrier instructions such that all
6104memory operations before the atomic operation occur before the atomic
6105operation and all memory operations after the atomic operation occur
6106after the atomic operation.
48ae6c13
RH
6107
6108If these patterns are not defined, the operation will be constructed
6109from a compare-and-swap operation, if defined.
6110
6111@cindex @code{sync_new_add@var{mode}} instruction pattern
6112@cindex @code{sync_new_sub@var{mode}} instruction pattern
6113@cindex @code{sync_new_ior@var{mode}} instruction pattern
6114@cindex @code{sync_new_and@var{mode}} instruction pattern
6115@cindex @code{sync_new_xor@var{mode}} instruction pattern
6116@cindex @code{sync_new_nand@var{mode}} instruction pattern
6117@item @samp{sync_new_add@var{mode}}, @samp{sync_new_sub@var{mode}}
6118@itemx @samp{sync_new_ior@var{mode}}, @samp{sync_new_and@var{mode}}
6119@itemx @samp{sync_new_xor@var{mode}}, @samp{sync_new_nand@var{mode}}
6120
6121These patterns are like their @code{sync_old_@var{op}} counterparts,
6122except that they return the value that exists in the memory location
6123after the operation, rather than before the operation.
6124
6125@cindex @code{sync_lock_test_and_set@var{mode}} instruction pattern
6126@item @samp{sync_lock_test_and_set@var{mode}}
6127
6128This pattern takes two forms, based on the capabilities of the target.
6129In either case, operand 0 is the result of the operand, operand 1 is
6130the memory on which the atomic operation is performed, and operand 2
6131is the value to set in the lock.
6132
6133In the ideal case, this operation is an atomic exchange operation, in
6134which the previous value in memory operand is copied into the result
6135operand, and the value operand is stored in the memory operand.
6136
6137For less capable targets, any value operand that is not the constant 1
6138should be rejected with @code{FAIL}. In this case the target may use
6139an atomic test-and-set bit operation. The result operand should contain
61401 if the bit was previously set and 0 if the bit was previously clear.
6141The true contents of the memory operand are implementation defined.
6142
6143This pattern must issue any memory barrier instructions such that the
915167f5
GK
6144pattern as a whole acts as an acquire barrier, that is all memory
6145operations after the pattern do not occur until the lock is acquired.
48ae6c13
RH
6146
6147If this pattern is not defined, the operation will be constructed from
6148a compare-and-swap operation, if defined.
6149
6150@cindex @code{sync_lock_release@var{mode}} instruction pattern
6151@item @samp{sync_lock_release@var{mode}}
6152
6153This pattern, if defined, releases a lock set by
6154@code{sync_lock_test_and_set@var{mode}}. Operand 0 is the memory
8635a919
GK
6155that contains the lock; operand 1 is the value to store in the lock.
6156
6157If the target doesn't implement full semantics for
6158@code{sync_lock_test_and_set@var{mode}}, any value operand which is not
6159the constant 0 should be rejected with @code{FAIL}, and the true contents
6160of the memory operand are implementation defined.
48ae6c13
RH
6161
6162This pattern must issue any memory barrier instructions such that the
915167f5
GK
6163pattern as a whole acts as a release barrier, that is the lock is
6164released only after all previous memory operations have completed.
48ae6c13
RH
6165
6166If this pattern is not defined, then a @code{memory_barrier} pattern
8635a919 6167will be emitted, followed by a store of the value to the memory operand.
48ae6c13 6168
86951993
AM
6169@cindex @code{atomic_compare_and_swap@var{mode}} instruction pattern
6170@item @samp{atomic_compare_and_swap@var{mode}}
6171This pattern, if defined, emits code for an atomic compare-and-swap
6172operation with memory model semantics. Operand 2 is the memory on which
6173the atomic operation is performed. Operand 0 is an output operand which
6174is set to true or false based on whether the operation succeeded. Operand
61751 is an output operand which is set to the contents of the memory before
6176the operation was attempted. Operand 3 is the value that is expected to
6177be in memory. Operand 4 is the value to put in memory if the expected
6178value is found there. Operand 5 is set to 1 if this compare and swap is to
6179be treated as a weak operation. Operand 6 is the memory model to be used
6180if the operation is a success. Operand 7 is the memory model to be used
6181if the operation fails.
6182
6183If memory referred to in operand 2 contains the value in operand 3, then
6184operand 4 is stored in memory pointed to by operand 2 and fencing based on
6185the memory model in operand 6 is issued.
6186
6187If memory referred to in operand 2 does not contain the value in operand 3,
6188then fencing based on the memory model in operand 7 is issued.
6189
6190If a target does not support weak compare-and-swap operations, or the port
6191elects not to implement weak operations, the argument in operand 5 can be
6192ignored. Note a strong implementation must be provided.
6193
6194If this pattern is not provided, the @code{__atomic_compare_exchange}
6195built-in functions will utilize the legacy @code{sync_compare_and_swap}
6196pattern with an @code{__ATOMIC_SEQ_CST} memory model.
6197
6198@cindex @code{atomic_load@var{mode}} instruction pattern
6199@item @samp{atomic_load@var{mode}}
6200This pattern implements an atomic load operation with memory model
6201semantics. Operand 1 is the memory address being loaded from. Operand 0
6202is the result of the load. Operand 2 is the memory model to be used for
6203the load operation.
6204
6205If not present, the @code{__atomic_load} built-in function will either
6206resort to a normal load with memory barriers, or a compare-and-swap
6207operation if a normal load would not be atomic.
6208
6209@cindex @code{atomic_store@var{mode}} instruction pattern
6210@item @samp{atomic_store@var{mode}}
6211This pattern implements an atomic store operation with memory model
6212semantics. Operand 0 is the memory address being stored to. Operand 1
6213is the value to be written. Operand 2 is the memory model to be used for
6214the operation.
6215
6216If not present, the @code{__atomic_store} built-in function will attempt to
6217perform a normal store and surround it with any required memory fences. If
6218the store would not be atomic, then an @code{__atomic_exchange} is
6219attempted with the result being ignored.
6220
6221@cindex @code{atomic_exchange@var{mode}} instruction pattern
6222@item @samp{atomic_exchange@var{mode}}
6223This pattern implements an atomic exchange operation with memory model
6224semantics. Operand 1 is the memory location the operation is performed on.
6225Operand 0 is an output operand which is set to the original value contained
6226in the memory pointed to by operand 1. Operand 2 is the value to be
6227stored. Operand 3 is the memory model to be used.
6228
6229If this pattern is not present, the built-in function
6230@code{__atomic_exchange} will attempt to preform the operation with a
6231compare and swap loop.
6232
6233@cindex @code{atomic_add@var{mode}} instruction pattern
6234@cindex @code{atomic_sub@var{mode}} instruction pattern
6235@cindex @code{atomic_or@var{mode}} instruction pattern
6236@cindex @code{atomic_and@var{mode}} instruction pattern
6237@cindex @code{atomic_xor@var{mode}} instruction pattern
6238@cindex @code{atomic_nand@var{mode}} instruction pattern
6239@item @samp{atomic_add@var{mode}}, @samp{atomic_sub@var{mode}}
6240@itemx @samp{atomic_or@var{mode}}, @samp{atomic_and@var{mode}}
6241@itemx @samp{atomic_xor@var{mode}}, @samp{atomic_nand@var{mode}}
6242
6243These patterns emit code for an atomic operation on memory with memory
6244model semantics. Operand 0 is the memory on which the atomic operation is
6245performed. Operand 1 is the second operand to the binary operator.
6246Operand 2 is the memory model to be used by the operation.
6247
6248If these patterns are not defined, attempts will be made to use legacy
c29c1030 6249@code{sync} patterns, or equivalent patterns which return a result. If
86951993
AM
6250none of these are available a compare-and-swap loop will be used.
6251
6252@cindex @code{atomic_fetch_add@var{mode}} instruction pattern
6253@cindex @code{atomic_fetch_sub@var{mode}} instruction pattern
6254@cindex @code{atomic_fetch_or@var{mode}} instruction pattern
6255@cindex @code{atomic_fetch_and@var{mode}} instruction pattern
6256@cindex @code{atomic_fetch_xor@var{mode}} instruction pattern
6257@cindex @code{atomic_fetch_nand@var{mode}} instruction pattern
6258@item @samp{atomic_fetch_add@var{mode}}, @samp{atomic_fetch_sub@var{mode}}
6259@itemx @samp{atomic_fetch_or@var{mode}}, @samp{atomic_fetch_and@var{mode}}
6260@itemx @samp{atomic_fetch_xor@var{mode}}, @samp{atomic_fetch_nand@var{mode}}
6261
6262These patterns emit code for an atomic operation on memory with memory
6263model semantics, and return the original value. Operand 0 is an output
6264operand which contains the value of the memory location before the
6265operation was performed. Operand 1 is the memory on which the atomic
6266operation is performed. Operand 2 is the second operand to the binary
6267operator. Operand 3 is the memory model to be used by the operation.
6268
6269If these patterns are not defined, attempts will be made to use legacy
6270@code{sync} patterns. If none of these are available a compare-and-swap
6271loop will be used.
6272
6273@cindex @code{atomic_add_fetch@var{mode}} instruction pattern
6274@cindex @code{atomic_sub_fetch@var{mode}} instruction pattern
6275@cindex @code{atomic_or_fetch@var{mode}} instruction pattern
6276@cindex @code{atomic_and_fetch@var{mode}} instruction pattern
6277@cindex @code{atomic_xor_fetch@var{mode}} instruction pattern
6278@cindex @code{atomic_nand_fetch@var{mode}} instruction pattern
6279@item @samp{atomic_add_fetch@var{mode}}, @samp{atomic_sub_fetch@var{mode}}
6280@itemx @samp{atomic_or_fetch@var{mode}}, @samp{atomic_and_fetch@var{mode}}
6281@itemx @samp{atomic_xor_fetch@var{mode}}, @samp{atomic_nand_fetch@var{mode}}
6282
6283These patterns emit code for an atomic operation on memory with memory
6284model semantics and return the result after the operation is performed.
6285Operand 0 is an output operand which contains the value after the
6286operation. Operand 1 is the memory on which the atomic operation is
6287performed. Operand 2 is the second operand to the binary operator.
6288Operand 3 is the memory model to be used by the operation.
6289
6290If these patterns are not defined, attempts will be made to use legacy
c29c1030 6291@code{sync} patterns, or equivalent patterns which return the result before
86951993
AM
6292the operation followed by the arithmetic operation required to produce the
6293result. If none of these are available a compare-and-swap loop will be
6294used.
6295
f8a27aa6
RH
6296@cindex @code{atomic_test_and_set} instruction pattern
6297@item @samp{atomic_test_and_set}
6298
6299This pattern emits code for @code{__builtin_atomic_test_and_set}.
6300Operand 0 is an output operand which is set to true if the previous
6301previous contents of the byte was "set", and false otherwise. Operand 1
6302is the @code{QImode} memory to be modified. Operand 2 is the memory
6303model to be used.
6304
6305The specific value that defines "set" is implementation defined, and
6306is normally based on what is performed by the native atomic test and set
6307instruction.
6308
86951993
AM
6309@cindex @code{mem_thread_fence@var{mode}} instruction pattern
6310@item @samp{mem_thread_fence@var{mode}}
6311This pattern emits code required to implement a thread fence with
6312memory model semantics. Operand 0 is the memory model to be used.
6313
6314If this pattern is not specified, all memory models except
6315@code{__ATOMIC_RELAXED} will result in issuing a @code{sync_synchronize}
6316barrier pattern.
6317
6318@cindex @code{mem_signal_fence@var{mode}} instruction pattern
6319@item @samp{mem_signal_fence@var{mode}}
6320This pattern emits code required to implement a signal fence with
6321memory model semantics. Operand 0 is the memory model to be used.
6322
6323This pattern should impact the compiler optimizers the same way that
6324mem_signal_fence does, but it does not need to issue any barrier
6325instructions.
6326
6327If this pattern is not specified, all memory models except
6328@code{__ATOMIC_RELAXED} will result in issuing a @code{sync_synchronize}
6329barrier pattern.
6330
f959607b
CLT
6331@cindex @code{get_thread_pointer@var{mode}} instruction pattern
6332@cindex @code{set_thread_pointer@var{mode}} instruction pattern
6333@item @samp{get_thread_pointer@var{mode}}
6334@itemx @samp{set_thread_pointer@var{mode}}
6335These patterns emit code that reads/sets the TLS thread pointer. Currently,
6336these are only needed if the target needs to support the
6337@code{__builtin_thread_pointer} and @code{__builtin_set_thread_pointer}
6338builtins.
6339
6340The get/set patterns have a single output/input operand respectively,
6341with @var{mode} intended to be @code{Pmode}.
6342
7d69de61
RH
6343@cindex @code{stack_protect_set} instruction pattern
6344@item @samp{stack_protect_set}
6345
643e867f 6346This pattern, if defined, moves a @code{ptr_mode} value from the memory
7d69de61
RH
6347in operand 1 to the memory in operand 0 without leaving the value in
6348a register afterward. This is to avoid leaking the value some place
759915ca 6349that an attacker might use to rewrite the stack guard slot after
7d69de61
RH
6350having clobbered it.
6351
6352If this pattern is not defined, then a plain move pattern is generated.
6353
6354@cindex @code{stack_protect_test} instruction pattern
6355@item @samp{stack_protect_test}
6356
643e867f 6357This pattern, if defined, compares a @code{ptr_mode} value from the
7d69de61 6358memory in operand 1 with the memory in operand 0 without leaving the
3aebbe5f 6359value in a register afterward and branches to operand 2 if the values
e9d3ef3b 6360were equal.
7d69de61 6361
3aebbe5f
JJ
6362If this pattern is not defined, then a plain compare pattern and
6363conditional branch pattern is used.
7d69de61 6364
677feb77
DD
6365@cindex @code{clear_cache} instruction pattern
6366@item @samp{clear_cache}
6367
6368This pattern, if defined, flushes the instruction cache for a region of
6369memory. The region is bounded to by the Pmode pointers in operand 0
6370inclusive and operand 1 exclusive.
6371
6372If this pattern is not defined, a call to the library function
6373@code{__clear_cache} is used.
6374
03dda8e3
RK
6375@end table
6376
a5249a21
HPN
6377@end ifset
6378@c Each of the following nodes are wrapped in separate
6379@c "@ifset INTERNALS" to work around memory limits for the default
6380@c configuration in older tetex distributions. Known to not work:
6381@c tetex-1.0.7, known to work: tetex-2.0.2.
6382@ifset INTERNALS
03dda8e3
RK
6383@node Pattern Ordering
6384@section When the Order of Patterns Matters
6385@cindex Pattern Ordering
6386@cindex Ordering of Patterns
6387
6388Sometimes an insn can match more than one instruction pattern. Then the
6389pattern that appears first in the machine description is the one used.
6390Therefore, more specific patterns (patterns that will match fewer things)
6391and faster instructions (those that will produce better code when they
6392do match) should usually go first in the description.
6393
6394In some cases the effect of ordering the patterns can be used to hide
6395a pattern when it is not valid. For example, the 68000 has an
6396instruction for converting a fullword to floating point and another
6397for converting a byte to floating point. An instruction converting
6398an integer to floating point could match either one. We put the
6399pattern to convert the fullword first to make sure that one will
6400be used rather than the other. (Otherwise a large integer might
6401be generated as a single-byte immediate quantity, which would not work.)
6402Instead of using this pattern ordering it would be possible to make the
6403pattern for convert-a-byte smart enough to deal properly with any
6404constant value.
6405
a5249a21
HPN
6406@end ifset
6407@ifset INTERNALS
03dda8e3
RK
6408@node Dependent Patterns
6409@section Interdependence of Patterns
6410@cindex Dependent Patterns
6411@cindex Interdependence of Patterns
6412
03dda8e3
RK
6413In some cases machines support instructions identical except for the
6414machine mode of one or more operands. For example, there may be
6415``sign-extend halfword'' and ``sign-extend byte'' instructions whose
6416patterns are
6417
3ab51846 6418@smallexample
03dda8e3
RK
6419(set (match_operand:SI 0 @dots{})
6420 (extend:SI (match_operand:HI 1 @dots{})))
6421
6422(set (match_operand:SI 0 @dots{})
6423 (extend:SI (match_operand:QI 1 @dots{})))
3ab51846 6424@end smallexample
03dda8e3
RK
6425
6426@noindent
6427Constant integers do not specify a machine mode, so an instruction to
6428extend a constant value could match either pattern. The pattern it
6429actually will match is the one that appears first in the file. For correct
6430results, this must be the one for the widest possible mode (@code{HImode},
6431here). If the pattern matches the @code{QImode} instruction, the results
6432will be incorrect if the constant value does not actually fit that mode.
6433
6434Such instructions to extend constants are rarely generated because they are
6435optimized away, but they do occasionally happen in nonoptimized
6436compilations.
6437
6438If a constraint in a pattern allows a constant, the reload pass may
6439replace a register with a constant permitted by the constraint in some
6440cases. Similarly for memory references. Because of this substitution,
6441you should not provide separate patterns for increment and decrement
6442instructions. Instead, they should be generated from the same pattern
6443that supports register-register add insns by examining the operands and
6444generating the appropriate machine instruction.
6445
a5249a21
HPN
6446@end ifset
6447@ifset INTERNALS
03dda8e3
RK
6448@node Jump Patterns
6449@section Defining Jump Instruction Patterns
6450@cindex jump instruction patterns
6451@cindex defining jump instruction patterns
6452
f90b7a5a
PB
6453GCC does not assume anything about how the machine realizes jumps.
6454The machine description should define a single pattern, usually
6455a @code{define_expand}, which expands to all the required insns.
6456
6457Usually, this would be a comparison insn to set the condition code
6458and a separate branch insn testing the condition code and branching
6459or not according to its value. For many machines, however,
6460separating compares and branches is limiting, which is why the
6461more flexible approach with one @code{define_expand} is used in GCC.
6462The machine description becomes clearer for architectures that
6463have compare-and-branch instructions but no condition code. It also
6464works better when different sets of comparison operators are supported
6465by different kinds of conditional branches (e.g. integer vs. floating-point),
6466or by conditional branches with respect to conditional stores.
6467
6468Two separate insns are always used if the machine description represents
6469a condition code register using the legacy RTL expression @code{(cc0)},
6470and on most machines that use a separate condition code register
6471(@pxref{Condition Code}). For machines that use @code{(cc0)}, in
6472fact, the set and use of the condition code must be separate and
6473adjacent@footnote{@code{note} insns can separate them, though.}, thus
6474allowing flags in @code{cc_status} to be used (@pxref{Condition Code}) and
6475so that the comparison and branch insns could be located from each other
6476by using the functions @code{prev_cc0_setter} and @code{next_cc0_user}.
6477
6478Even in this case having a single entry point for conditional branches
6479is advantageous, because it handles equally well the case where a single
6480comparison instruction records the results of both signed and unsigned
6481comparison of the given operands (with the branch insns coming in distinct
6482signed and unsigned flavors) as in the x86 or SPARC, and the case where
6483there are distinct signed and unsigned compare instructions and only
6484one set of conditional branch instructions as in the PowerPC.
03dda8e3 6485
a5249a21
HPN
6486@end ifset
6487@ifset INTERNALS
6e4fcc95
MH
6488@node Looping Patterns
6489@section Defining Looping Instruction Patterns
6490@cindex looping instruction patterns
6491@cindex defining looping instruction patterns
6492
05713b80 6493Some machines have special jump instructions that can be utilized to
6e4fcc95
MH
6494make loops more efficient. A common example is the 68000 @samp{dbra}
6495instruction which performs a decrement of a register and a branch if the
6496result was greater than zero. Other machines, in particular digital
6497signal processors (DSPs), have special block repeat instructions to
6498provide low-overhead loop support. For example, the TI TMS320C3x/C4x
6499DSPs have a block repeat instruction that loads special registers to
6500mark the top and end of a loop and to count the number of loop
6501iterations. This avoids the need for fetching and executing a
c771326b 6502@samp{dbra}-like instruction and avoids pipeline stalls associated with
6e4fcc95
MH
6503the jump.
6504
9c34dbbf
ZW
6505GCC has three special named patterns to support low overhead looping.
6506They are @samp{decrement_and_branch_until_zero}, @samp{doloop_begin},
6507and @samp{doloop_end}. The first pattern,
6e4fcc95
MH
6508@samp{decrement_and_branch_until_zero}, is not emitted during RTL
6509generation but may be emitted during the instruction combination phase.
6510This requires the assistance of the loop optimizer, using information
6511collected during strength reduction, to reverse a loop to count down to
6512zero. Some targets also require the loop optimizer to add a
6513@code{REG_NONNEG} note to indicate that the iteration count is always
6514positive. This is needed if the target performs a signed loop
6515termination test. For example, the 68000 uses a pattern similar to the
6516following for its @code{dbra} instruction:
6517
6518@smallexample
6519@group
6520(define_insn "decrement_and_branch_until_zero"
6521 [(set (pc)
6ccde948
RW
6522 (if_then_else
6523 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am")
6524 (const_int -1))
6525 (const_int 0))
6526 (label_ref (match_operand 1 "" ""))
6527 (pc)))
6e4fcc95 6528 (set (match_dup 0)
6ccde948
RW
6529 (plus:SI (match_dup 0)
6530 (const_int -1)))]
6e4fcc95 6531 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 6532 "@dots{}")
6e4fcc95
MH
6533@end group
6534@end smallexample
6535
6536Note that since the insn is both a jump insn and has an output, it must
6537deal with its own reloads, hence the `m' constraints. Also note that
6538since this insn is generated by the instruction combination phase
6539combining two sequential insns together into an implicit parallel insn,
6540the iteration counter needs to be biased by the same amount as the
630d3d5a 6541decrement operation, in this case @minus{}1. Note that the following similar
6e4fcc95
MH
6542pattern will not be matched by the combiner.
6543
6544@smallexample
6545@group
6546(define_insn "decrement_and_branch_until_zero"
6547 [(set (pc)
6ccde948
RW
6548 (if_then_else
6549 (ge (match_operand:SI 0 "general_operand" "+d*am")
6550 (const_int 1))
6551 (label_ref (match_operand 1 "" ""))
6552 (pc)))
6e4fcc95 6553 (set (match_dup 0)
6ccde948
RW
6554 (plus:SI (match_dup 0)
6555 (const_int -1)))]
6e4fcc95 6556 "find_reg_note (insn, REG_NONNEG, 0)"
630d3d5a 6557 "@dots{}")
6e4fcc95
MH
6558@end group
6559@end smallexample
6560
6561The other two special looping patterns, @samp{doloop_begin} and
c21cd8b1 6562@samp{doloop_end}, are emitted by the loop optimizer for certain
6e4fcc95 6563well-behaved loops with a finite number of loop iterations using
ebb48a4d 6564information collected during strength reduction.
6e4fcc95
MH
6565
6566The @samp{doloop_end} pattern describes the actual looping instruction
6567(or the implicit looping operation) and the @samp{doloop_begin} pattern
c21cd8b1 6568is an optional companion pattern that can be used for initialization
6e4fcc95
MH
6569needed for some low-overhead looping instructions.
6570
6571Note that some machines require the actual looping instruction to be
6572emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting
6573the true RTL for a looping instruction at the top of the loop can cause
6574problems with flow analysis. So instead, a dummy @code{doloop} insn is
6575emitted at the end of the loop. The machine dependent reorg pass checks
6576for the presence of this @code{doloop} insn and then searches back to
6577the top of the loop, where it inserts the true looping insn (provided
6578there are no instructions in the loop which would cause problems). Any
6579additional labels can be emitted at this point. In addition, if the
6580desired special iteration counter register was not allocated, this
6581machine dependent reorg pass could emit a traditional compare and jump
6582instruction pair.
6583
6584The essential difference between the
6585@samp{decrement_and_branch_until_zero} and the @samp{doloop_end}
6586patterns is that the loop optimizer allocates an additional pseudo
6587register for the latter as an iteration counter. This pseudo register
6588cannot be used within the loop (i.e., general induction variables cannot
6589be derived from it), however, in many cases the loop induction variable
6590may become redundant and removed by the flow pass.
6591
6592
a5249a21
HPN
6593@end ifset
6594@ifset INTERNALS
03dda8e3
RK
6595@node Insn Canonicalizations
6596@section Canonicalization of Instructions
6597@cindex canonicalization of instructions
6598@cindex insn canonicalization
6599
6600There are often cases where multiple RTL expressions could represent an
6601operation performed by a single machine instruction. This situation is
6602most commonly encountered with logical, branch, and multiply-accumulate
6603instructions. In such cases, the compiler attempts to convert these
6604multiple RTL expressions into a single canonical form to reduce the
6605number of insn patterns required.
6606
6607In addition to algebraic simplifications, following canonicalizations
6608are performed:
6609
6610@itemize @bullet
6611@item
6612For commutative and comparison operators, a constant is always made the
6613second operand. If a machine only supports a constant as the second
6614operand, only patterns that match a constant in the second operand need
6615be supplied.
6616
e3d6e740
GK
6617@item
6618For associative operators, a sequence of operators will always chain
6619to the left; for instance, only the left operand of an integer @code{plus}
6620can itself be a @code{plus}. @code{and}, @code{ior}, @code{xor},
6621@code{plus}, @code{mult}, @code{smin}, @code{smax}, @code{umin}, and
6622@code{umax} are associative when applied to integers, and sometimes to
6623floating-point.
6624
6625@item
03dda8e3
RK
6626@cindex @code{neg}, canonicalization of
6627@cindex @code{not}, canonicalization of
6628@cindex @code{mult}, canonicalization of
6629@cindex @code{plus}, canonicalization of
6630@cindex @code{minus}, canonicalization of
6631For these operators, if only one operand is a @code{neg}, @code{not},
6632@code{mult}, @code{plus}, or @code{minus} expression, it will be the
6633first operand.
6634
16823694
GK
6635@item
6636In combinations of @code{neg}, @code{mult}, @code{plus}, and
6637@code{minus}, the @code{neg} operations (if any) will be moved inside
daf2f129 6638the operations as far as possible. For instance,
16823694 6639@code{(neg (mult A B))} is canonicalized as @code{(mult (neg A) B)}, but
9302a061 6640@code{(plus (mult (neg B) C) A)} is canonicalized as
16823694
GK
6641@code{(minus A (mult B C))}.
6642
03dda8e3
RK
6643@cindex @code{compare}, canonicalization of
6644@item
6645For the @code{compare} operator, a constant is always the second operand
f90b7a5a 6646if the first argument is a condition code register or @code{(cc0)}.
03dda8e3 6647
f90b7a5a 6648@item
03dda8e3
RK
6649An operand of @code{neg}, @code{not}, @code{mult}, @code{plus}, or
6650@code{minus} is made the first operand under the same conditions as
6651above.
6652
921c4418
RIL
6653@item
6654@code{(ltu (plus @var{a} @var{b}) @var{b})} is converted to
6655@code{(ltu (plus @var{a} @var{b}) @var{a})}. Likewise with @code{geu} instead
6656of @code{ltu}.
6657
03dda8e3
RK
6658@item
6659@code{(minus @var{x} (const_int @var{n}))} is converted to
6660@code{(plus @var{x} (const_int @var{-n}))}.
6661
6662@item
6663Within address computations (i.e., inside @code{mem}), a left shift is
6664converted into the appropriate multiplication by a power of two.
6665
6666@cindex @code{ior}, canonicalization of
6667@cindex @code{and}, canonicalization of
6668@cindex De Morgan's law
72938a4c 6669@item
090359d6 6670De Morgan's Law is used to move bitwise negation inside a bitwise
03dda8e3
RK
6671logical-and or logical-or operation. If this results in only one
6672operand being a @code{not} expression, it will be the first one.
6673
6674A machine that has an instruction that performs a bitwise logical-and of one
6675operand with the bitwise negation of the other should specify the pattern
6676for that instruction as
6677
3ab51846 6678@smallexample
03dda8e3
RK
6679(define_insn ""
6680 [(set (match_operand:@var{m} 0 @dots{})
6681 (and:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
6682 (match_operand:@var{m} 2 @dots{})))]
6683 "@dots{}"
6684 "@dots{}")
3ab51846 6685@end smallexample
03dda8e3
RK
6686
6687@noindent
6688Similarly, a pattern for a ``NAND'' instruction should be written
6689
3ab51846 6690@smallexample
03dda8e3
RK
6691(define_insn ""
6692 [(set (match_operand:@var{m} 0 @dots{})
6693 (ior:@var{m} (not:@var{m} (match_operand:@var{m} 1 @dots{}))
6694 (not:@var{m} (match_operand:@var{m} 2 @dots{}))))]
6695 "@dots{}"
6696 "@dots{}")
3ab51846 6697@end smallexample
03dda8e3
RK
6698
6699In both cases, it is not necessary to include patterns for the many
6700logically equivalent RTL expressions.
6701
6702@cindex @code{xor}, canonicalization of
6703@item
6704The only possible RTL expressions involving both bitwise exclusive-or
6705and bitwise negation are @code{(xor:@var{m} @var{x} @var{y})}
bd819a4a 6706and @code{(not:@var{m} (xor:@var{m} @var{x} @var{y}))}.
03dda8e3
RK
6707
6708@item
6709The sum of three items, one of which is a constant, will only appear in
6710the form
6711
3ab51846 6712@smallexample
03dda8e3 6713(plus:@var{m} (plus:@var{m} @var{x} @var{y}) @var{constant})
3ab51846 6714@end smallexample
03dda8e3 6715
03dda8e3
RK
6716@cindex @code{zero_extract}, canonicalization of
6717@cindex @code{sign_extract}, canonicalization of
6718@item
6719Equality comparisons of a group of bits (usually a single bit) with zero
6720will be written using @code{zero_extract} rather than the equivalent
6721@code{and} or @code{sign_extract} operations.
6722
c536876e
AS
6723@cindex @code{mult}, canonicalization of
6724@item
6725@code{(sign_extend:@var{m1} (mult:@var{m2} (sign_extend:@var{m2} @var{x})
6726(sign_extend:@var{m2} @var{y})))} is converted to @code{(mult:@var{m1}
6727(sign_extend:@var{m1} @var{x}) (sign_extend:@var{m1} @var{y}))}, and likewise
6728for @code{zero_extend}.
6729
6730@item
6731@code{(sign_extend:@var{m1} (mult:@var{m2} (ashiftrt:@var{m2}
6732@var{x} @var{s}) (sign_extend:@var{m2} @var{y})))} is converted
6733to @code{(mult:@var{m1} (sign_extend:@var{m1} (ashiftrt:@var{m2}
6734@var{x} @var{s})) (sign_extend:@var{m1} @var{y}))}, and likewise for
6735patterns using @code{zero_extend} and @code{lshiftrt}. If the second
6736operand of @code{mult} is also a shift, then that is extended also.
6737This transformation is only applied when it can be proven that the
6738original operation had sufficient precision to prevent overflow.
6739
03dda8e3
RK
6740@end itemize
6741
cd16503a
HPN
6742Further canonicalization rules are defined in the function
6743@code{commutative_operand_precedence} in @file{gcc/rtlanal.c}.
6744
a5249a21
HPN
6745@end ifset
6746@ifset INTERNALS
03dda8e3
RK
6747@node Expander Definitions
6748@section Defining RTL Sequences for Code Generation
6749@cindex expander definitions
6750@cindex code generation RTL sequences
6751@cindex defining RTL sequences for code generation
6752
6753On some target machines, some standard pattern names for RTL generation
6754cannot be handled with single insn, but a sequence of RTL insns can
6755represent them. For these target machines, you can write a
161d7b59 6756@code{define_expand} to specify how to generate the sequence of RTL@.
03dda8e3
RK
6757
6758@findex define_expand
6759A @code{define_expand} is an RTL expression that looks almost like a
6760@code{define_insn}; but, unlike the latter, a @code{define_expand} is used
6761only for RTL generation and it can produce more than one RTL insn.
6762
6763A @code{define_expand} RTX has four operands:
6764
6765@itemize @bullet
6766@item
6767The name. Each @code{define_expand} must have a name, since the only
6768use for it is to refer to it by name.
6769
03dda8e3 6770@item
f3a3d0d3
RH
6771The RTL template. This is a vector of RTL expressions representing
6772a sequence of separate instructions. Unlike @code{define_insn}, there
6773is no implicit surrounding @code{PARALLEL}.
03dda8e3
RK
6774
6775@item
6776The condition, a string containing a C expression. This expression is
6777used to express how the availability of this pattern depends on
f0523f02
JM
6778subclasses of target machine, selected by command-line options when GCC
6779is run. This is just like the condition of a @code{define_insn} that
03dda8e3
RK
6780has a standard name. Therefore, the condition (if present) may not
6781depend on the data in the insn being matched, but only the
6782target-machine-type flags. The compiler needs to test these conditions
6783during initialization in order to learn exactly which named instructions
6784are available in a particular run.
6785
6786@item
6787The preparation statements, a string containing zero or more C
6788statements which are to be executed before RTL code is generated from
6789the RTL template.
6790
6791Usually these statements prepare temporary registers for use as
6792internal operands in the RTL template, but they can also generate RTL
6793insns directly by calling routines such as @code{emit_insn}, etc.
6794Any such insns precede the ones that come from the RTL template.
477c104e
MK
6795
6796@item
6797Optionally, a vector containing the values of attributes. @xref{Insn
6798Attributes}.
03dda8e3
RK
6799@end itemize
6800
6801Every RTL insn emitted by a @code{define_expand} must match some
6802@code{define_insn} in the machine description. Otherwise, the compiler
6803will crash when trying to generate code for the insn or trying to optimize
6804it.
6805
6806The RTL template, in addition to controlling generation of RTL insns,
6807also describes the operands that need to be specified when this pattern
6808is used. In particular, it gives a predicate for each operand.
6809
6810A true operand, which needs to be specified in order to generate RTL from
6811the pattern, should be described with a @code{match_operand} in its first
6812occurrence in the RTL template. This enters information on the operand's
f0523f02 6813predicate into the tables that record such things. GCC uses the
03dda8e3
RK
6814information to preload the operand into a register if that is required for
6815valid RTL code. If the operand is referred to more than once, subsequent
6816references should use @code{match_dup}.
6817
6818The RTL template may also refer to internal ``operands'' which are
6819temporary registers or labels used only within the sequence made by the
6820@code{define_expand}. Internal operands are substituted into the RTL
6821template with @code{match_dup}, never with @code{match_operand}. The
6822values of the internal operands are not passed in as arguments by the
6823compiler when it requests use of this pattern. Instead, they are computed
6824within the pattern, in the preparation statements. These statements
6825compute the values and store them into the appropriate elements of
6826@code{operands} so that @code{match_dup} can find them.
6827
6828There are two special macros defined for use in the preparation statements:
6829@code{DONE} and @code{FAIL}. Use them with a following semicolon,
6830as a statement.
6831
6832@table @code
6833
6834@findex DONE
6835@item DONE
6836Use the @code{DONE} macro to end RTL generation for the pattern. The
6837only RTL insns resulting from the pattern on this occasion will be
6838those already emitted by explicit calls to @code{emit_insn} within the
6839preparation statements; the RTL template will not be generated.
6840
6841@findex FAIL
6842@item FAIL
6843Make the pattern fail on this occasion. When a pattern fails, it means
6844that the pattern was not truly available. The calling routines in the
6845compiler will try other strategies for code generation using other patterns.
6846
6847Failure is currently supported only for binary (addition, multiplication,
c771326b 6848shifting, etc.) and bit-field (@code{extv}, @code{extzv}, and @code{insv})
03dda8e3
RK
6849operations.
6850@end table
6851
55e4756f
DD
6852If the preparation falls through (invokes neither @code{DONE} nor
6853@code{FAIL}), then the @code{define_expand} acts like a
6854@code{define_insn} in that the RTL template is used to generate the
6855insn.
6856
6857The RTL template is not used for matching, only for generating the
6858initial insn list. If the preparation statement always invokes
6859@code{DONE} or @code{FAIL}, the RTL template may be reduced to a simple
6860list of operands, such as this example:
6861
6862@smallexample
6863@group
6864(define_expand "addsi3"
6865 [(match_operand:SI 0 "register_operand" "")
6866 (match_operand:SI 1 "register_operand" "")
6867 (match_operand:SI 2 "register_operand" "")]
6868@end group
6869@group
6870 ""
6871 "
58097133 6872@{
55e4756f
DD
6873 handle_add (operands[0], operands[1], operands[2]);
6874 DONE;
58097133 6875@}")
55e4756f
DD
6876@end group
6877@end smallexample
6878
03dda8e3
RK
6879Here is an example, the definition of left-shift for the SPUR chip:
6880
6881@smallexample
6882@group
6883(define_expand "ashlsi3"
6884 [(set (match_operand:SI 0 "register_operand" "")
6885 (ashift:SI
6886@end group
6887@group
6888 (match_operand:SI 1 "register_operand" "")
6889 (match_operand:SI 2 "nonmemory_operand" "")))]
6890 ""
6891 "
6892@end group
6893@end smallexample
6894
6895@smallexample
6896@group
6897@{
6898 if (GET_CODE (operands[2]) != CONST_INT
6899 || (unsigned) INTVAL (operands[2]) > 3)
6900 FAIL;
6901@}")
6902@end group
6903@end smallexample
6904
6905@noindent
6906This example uses @code{define_expand} so that it can generate an RTL insn
6907for shifting when the shift-count is in the supported range of 0 to 3 but
6908fail in other cases where machine insns aren't available. When it fails,
6909the compiler tries another strategy using different patterns (such as, a
6910library call).
6911
6912If the compiler were able to handle nontrivial condition-strings in
6913patterns with names, then it would be possible to use a
6914@code{define_insn} in that case. Here is another case (zero-extension
6915on the 68000) which makes more use of the power of @code{define_expand}:
6916
6917@smallexample
6918(define_expand "zero_extendhisi2"
6919 [(set (match_operand:SI 0 "general_operand" "")
6920 (const_int 0))
6921 (set (strict_low_part
6922 (subreg:HI
6923 (match_dup 0)
6924 0))
6925 (match_operand:HI 1 "general_operand" ""))]
6926 ""
6927 "operands[1] = make_safe_from (operands[1], operands[0]);")
6928@end smallexample
6929
6930@noindent
6931@findex make_safe_from
6932Here two RTL insns are generated, one to clear the entire output operand
6933and the other to copy the input operand into its low half. This sequence
6934is incorrect if the input operand refers to [the old value of] the output
6935operand, so the preparation statement makes sure this isn't so. The
6936function @code{make_safe_from} copies the @code{operands[1]} into a
6937temporary register if it refers to @code{operands[0]}. It does this
6938by emitting another RTL insn.
6939
6940Finally, a third example shows the use of an internal operand.
6941Zero-extension on the SPUR chip is done by @code{and}-ing the result
6942against a halfword mask. But this mask cannot be represented by a
6943@code{const_int} because the constant value is too large to be legitimate
6944on this machine. So it must be copied into a register with
6945@code{force_reg} and then the register used in the @code{and}.
6946
6947@smallexample
6948(define_expand "zero_extendhisi2"
6949 [(set (match_operand:SI 0 "register_operand" "")
6950 (and:SI (subreg:SI
6951 (match_operand:HI 1 "register_operand" "")
6952 0)
6953 (match_dup 2)))]
6954 ""
6955 "operands[2]
3a598fbe 6956 = force_reg (SImode, GEN_INT (65535)); ")
03dda8e3
RK
6957@end smallexample
6958
f4559287 6959@emph{Note:} If the @code{define_expand} is used to serve a
c771326b 6960standard binary or unary arithmetic operation or a bit-field operation,
03dda8e3
RK
6961then the last insn it generates must not be a @code{code_label},
6962@code{barrier} or @code{note}. It must be an @code{insn},
6963@code{jump_insn} or @code{call_insn}. If you don't need a real insn
6964at the end, emit an insn to copy the result of the operation into
6965itself. Such an insn will generate no code, but it can avoid problems
bd819a4a 6966in the compiler.
03dda8e3 6967
a5249a21
HPN
6968@end ifset
6969@ifset INTERNALS
03dda8e3
RK
6970@node Insn Splitting
6971@section Defining How to Split Instructions
6972@cindex insn splitting
6973@cindex instruction splitting
6974@cindex splitting instructions
6975
fae15c93
VM
6976There are two cases where you should specify how to split a pattern
6977into multiple insns. On machines that have instructions requiring
6978delay slots (@pxref{Delay Slots}) or that have instructions whose
6979output is not available for multiple cycles (@pxref{Processor pipeline
6980description}), the compiler phases that optimize these cases need to
6981be able to move insns into one-instruction delay slots. However, some
6982insns may generate more than one machine instruction. These insns
6983cannot be placed into a delay slot.
03dda8e3
RK
6984
6985Often you can rewrite the single insn as a list of individual insns,
6986each corresponding to one machine instruction. The disadvantage of
6987doing so is that it will cause the compilation to be slower and require
6988more space. If the resulting insns are too complex, it may also
6989suppress some optimizations. The compiler splits the insn if there is a
6990reason to believe that it might improve instruction or delay slot
6991scheduling.
6992
6993The insn combiner phase also splits putative insns. If three insns are
6994merged into one insn with a complex expression that cannot be matched by
6995some @code{define_insn} pattern, the combiner phase attempts to split
6996the complex pattern into two insns that are recognized. Usually it can
6997break the complex pattern into two patterns by splitting out some
6998subexpression. However, in some other cases, such as performing an
6999addition of a large constant in two insns on a RISC machine, the way to
7000split the addition into two insns is machine-dependent.
7001
f3a3d0d3 7002@findex define_split
03dda8e3
RK
7003The @code{define_split} definition tells the compiler how to split a
7004complex insn into several simpler insns. It looks like this:
7005
7006@smallexample
7007(define_split
7008 [@var{insn-pattern}]
7009 "@var{condition}"
7010 [@var{new-insn-pattern-1}
7011 @var{new-insn-pattern-2}
7012 @dots{}]
630d3d5a 7013 "@var{preparation-statements}")
03dda8e3
RK
7014@end smallexample
7015
7016@var{insn-pattern} is a pattern that needs to be split and
7017@var{condition} is the final condition to be tested, as in a
7018@code{define_insn}. When an insn matching @var{insn-pattern} and
7019satisfying @var{condition} is found, it is replaced in the insn list
7020with the insns given by @var{new-insn-pattern-1},
7021@var{new-insn-pattern-2}, etc.
7022
630d3d5a 7023The @var{preparation-statements} are similar to those statements that
03dda8e3
RK
7024are specified for @code{define_expand} (@pxref{Expander Definitions})
7025and are executed before the new RTL is generated to prepare for the
7026generated code or emit some insns whose pattern is not fixed. Unlike
7027those in @code{define_expand}, however, these statements must not
7028generate any new pseudo-registers. Once reload has completed, they also
7029must not allocate any space in the stack frame.
7030
7031Patterns are matched against @var{insn-pattern} in two different
7032circumstances. If an insn needs to be split for delay slot scheduling
7033or insn scheduling, the insn is already known to be valid, which means
7034that it must have been matched by some @code{define_insn} and, if
df2a54e9 7035@code{reload_completed} is nonzero, is known to satisfy the constraints
03dda8e3
RK
7036of that @code{define_insn}. In that case, the new insn patterns must
7037also be insns that are matched by some @code{define_insn} and, if
df2a54e9 7038@code{reload_completed} is nonzero, must also satisfy the constraints
03dda8e3
RK
7039of those definitions.
7040
7041As an example of this usage of @code{define_split}, consider the following
7042example from @file{a29k.md}, which splits a @code{sign_extend} from
7043@code{HImode} to @code{SImode} into a pair of shift insns:
7044
7045@smallexample
7046(define_split
7047 [(set (match_operand:SI 0 "gen_reg_operand" "")
7048 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
7049 ""
7050 [(set (match_dup 0)
7051 (ashift:SI (match_dup 1)
7052 (const_int 16)))
7053 (set (match_dup 0)
7054 (ashiftrt:SI (match_dup 0)
7055 (const_int 16)))]
7056 "
7057@{ operands[1] = gen_lowpart (SImode, operands[1]); @}")
7058@end smallexample
7059
7060When the combiner phase tries to split an insn pattern, it is always the
7061case that the pattern is @emph{not} matched by any @code{define_insn}.
7062The combiner pass first tries to split a single @code{set} expression
7063and then the same @code{set} expression inside a @code{parallel}, but
7064followed by a @code{clobber} of a pseudo-reg to use as a scratch
7065register. In these cases, the combiner expects exactly two new insn
7066patterns to be generated. It will verify that these patterns match some
7067@code{define_insn} definitions, so you need not do this test in the
7068@code{define_split} (of course, there is no point in writing a
7069@code{define_split} that will never produce insns that match).
7070
7071Here is an example of this use of @code{define_split}, taken from
7072@file{rs6000.md}:
7073
7074@smallexample
7075(define_split
7076 [(set (match_operand:SI 0 "gen_reg_operand" "")
7077 (plus:SI (match_operand:SI 1 "gen_reg_operand" "")
7078 (match_operand:SI 2 "non_add_cint_operand" "")))]
7079 ""
7080 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
7081 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
7082"
7083@{
7084 int low = INTVAL (operands[2]) & 0xffff;
7085 int high = (unsigned) INTVAL (operands[2]) >> 16;
7086
7087 if (low & 0x8000)
7088 high++, low |= 0xffff0000;
7089
3a598fbe
JL
7090 operands[3] = GEN_INT (high << 16);
7091 operands[4] = GEN_INT (low);
03dda8e3
RK
7092@}")
7093@end smallexample
7094
7095Here the predicate @code{non_add_cint_operand} matches any
7096@code{const_int} that is @emph{not} a valid operand of a single add
7097insn. The add with the smaller displacement is written so that it
7098can be substituted into the address of a subsequent operation.
7099
7100An example that uses a scratch register, from the same file, generates
7101an equality comparison of a register and a large constant:
7102
7103@smallexample
7104(define_split
7105 [(set (match_operand:CC 0 "cc_reg_operand" "")
7106 (compare:CC (match_operand:SI 1 "gen_reg_operand" "")
7107 (match_operand:SI 2 "non_short_cint_operand" "")))
7108 (clobber (match_operand:SI 3 "gen_reg_operand" ""))]
7109 "find_single_use (operands[0], insn, 0)
7110 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
7111 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)"
7112 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
7113 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
7114 "
7115@{
12bcfaa1 7116 /* @r{Get the constant we are comparing against, C, and see what it
03dda8e3 7117 looks like sign-extended to 16 bits. Then see what constant
12bcfaa1 7118 could be XOR'ed with C to get the sign-extended value.} */
03dda8e3
RK
7119
7120 int c = INTVAL (operands[2]);
7121 int sextc = (c << 16) >> 16;
7122 int xorv = c ^ sextc;
7123
3a598fbe
JL
7124 operands[4] = GEN_INT (xorv);
7125 operands[5] = GEN_INT (sextc);
03dda8e3
RK
7126@}")
7127@end smallexample
7128
7129To avoid confusion, don't write a single @code{define_split} that
7130accepts some insns that match some @code{define_insn} as well as some
7131insns that don't. Instead, write two separate @code{define_split}
7132definitions, one for the insns that are valid and one for the insns that
7133are not valid.
7134
6b24c259
JH
7135The splitter is allowed to split jump instructions into sequence of
7136jumps or create new jumps in while splitting non-jump instructions. As
7137the central flowgraph and branch prediction information needs to be updated,
f282ffb3 7138several restriction apply.
6b24c259
JH
7139
7140Splitting of jump instruction into sequence that over by another jump
c21cd8b1 7141instruction is always valid, as compiler expect identical behavior of new
6b24c259
JH
7142jump. When new sequence contains multiple jump instructions or new labels,
7143more assistance is needed. Splitter is required to create only unconditional
7144jumps, or simple conditional jump instructions. Additionally it must attach a
63519d23 7145@code{REG_BR_PROB} note to each conditional jump. A global variable
addd6f64 7146@code{split_branch_probability} holds the probability of the original branch in case
e4ae5e77 7147it was a simple conditional jump, @minus{}1 otherwise. To simplify
addd6f64 7148recomputing of edge frequencies, the new sequence is required to have only
6b24c259
JH
7149forward jumps to the newly created labels.
7150
fae81b38 7151@findex define_insn_and_split
c88c0d42
CP
7152For the common case where the pattern of a define_split exactly matches the
7153pattern of a define_insn, use @code{define_insn_and_split}. It looks like
7154this:
7155
7156@smallexample
7157(define_insn_and_split
7158 [@var{insn-pattern}]
7159 "@var{condition}"
7160 "@var{output-template}"
7161 "@var{split-condition}"
7162 [@var{new-insn-pattern-1}
7163 @var{new-insn-pattern-2}
7164 @dots{}]
630d3d5a 7165 "@var{preparation-statements}"
c88c0d42
CP
7166 [@var{insn-attributes}])
7167
7168@end smallexample
7169
7170@var{insn-pattern}, @var{condition}, @var{output-template}, and
7171@var{insn-attributes} are used as in @code{define_insn}. The
7172@var{new-insn-pattern} vector and the @var{preparation-statements} are used as
7173in a @code{define_split}. The @var{split-condition} is also used as in
7174@code{define_split}, with the additional behavior that if the condition starts
7175with @samp{&&}, the condition used for the split will be the constructed as a
d7d9c429 7176logical ``and'' of the split condition with the insn condition. For example,
c88c0d42
CP
7177from i386.md:
7178
7179@smallexample
7180(define_insn_and_split "zero_extendhisi2_and"
7181 [(set (match_operand:SI 0 "register_operand" "=r")
7182 (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))
7183 (clobber (reg:CC 17))]
7184 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size"
7185 "#"
7186 "&& reload_completed"
f282ffb3 7187 [(parallel [(set (match_dup 0)
9c34dbbf 7188 (and:SI (match_dup 0) (const_int 65535)))
6ccde948 7189 (clobber (reg:CC 17))])]
c88c0d42
CP
7190 ""
7191 [(set_attr "type" "alu1")])
7192
7193@end smallexample
7194
ebb48a4d 7195In this case, the actual split condition will be
aee96fe9 7196@samp{TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed}.
c88c0d42
CP
7197
7198The @code{define_insn_and_split} construction provides exactly the same
7199functionality as two separate @code{define_insn} and @code{define_split}
7200patterns. It exists for compactness, and as a maintenance tool to prevent
7201having to ensure the two patterns' templates match.
7202
a5249a21
HPN
7203@end ifset
7204@ifset INTERNALS
04d8aa70
AM
7205@node Including Patterns
7206@section Including Patterns in Machine Descriptions.
7207@cindex insn includes
7208
7209@findex include
7210The @code{include} pattern tells the compiler tools where to
7211look for patterns that are in files other than in the file
8a36672b 7212@file{.md}. This is used only at build time and there is no preprocessing allowed.
04d8aa70
AM
7213
7214It looks like:
7215
7216@smallexample
7217
7218(include
7219 @var{pathname})
7220@end smallexample
7221
7222For example:
7223
7224@smallexample
7225
f282ffb3 7226(include "filestuff")
04d8aa70
AM
7227
7228@end smallexample
7229
27d30956 7230Where @var{pathname} is a string that specifies the location of the file,
8a36672b 7231specifies the include file to be in @file{gcc/config/target/filestuff}. The
04d8aa70
AM
7232directory @file{gcc/config/target} is regarded as the default directory.
7233
7234
f282ffb3
JM
7235Machine descriptions may be split up into smaller more manageable subsections
7236and placed into subdirectories.
04d8aa70
AM
7237
7238By specifying:
7239
7240@smallexample
7241
f282ffb3 7242(include "BOGUS/filestuff")
04d8aa70
AM
7243
7244@end smallexample
7245
7246the include file is specified to be in @file{gcc/config/@var{target}/BOGUS/filestuff}.
7247
7248Specifying an absolute path for the include file such as;
7249@smallexample
7250
f282ffb3 7251(include "/u2/BOGUS/filestuff")
04d8aa70
AM
7252
7253@end smallexample
f282ffb3 7254is permitted but is not encouraged.
04d8aa70
AM
7255
7256@subsection RTL Generation Tool Options for Directory Search
7257@cindex directory options .md
7258@cindex options, directory search
7259@cindex search options
7260
7261The @option{-I@var{dir}} option specifies directories to search for machine descriptions.
7262For example:
7263
7264@smallexample
7265
7266genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md
7267
7268@end smallexample
7269
7270
7271Add the directory @var{dir} to the head of the list of directories to be
7272searched for header files. This can be used to override a system machine definition
7273file, substituting your own version, since these directories are
7274searched before the default machine description file directories. If you use more than
7275one @option{-I} option, the directories are scanned in left-to-right
7276order; the standard default directory come after.
7277
7278
a5249a21
HPN
7279@end ifset
7280@ifset INTERNALS
f3a3d0d3
RH
7281@node Peephole Definitions
7282@section Machine-Specific Peephole Optimizers
7283@cindex peephole optimizer definitions
7284@cindex defining peephole optimizers
7285
7286In addition to instruction patterns the @file{md} file may contain
7287definitions of machine-specific peephole optimizations.
7288
7289The combiner does not notice certain peephole optimizations when the data
7290flow in the program does not suggest that it should try them. For example,
7291sometimes two consecutive insns related in purpose can be combined even
7292though the second one does not appear to use a register computed in the
7293first one. A machine-specific peephole optimizer can detect such
7294opportunities.
7295
7296There are two forms of peephole definitions that may be used. The
7297original @code{define_peephole} is run at assembly output time to
7298match insns and substitute assembly text. Use of @code{define_peephole}
7299is deprecated.
7300
7301A newer @code{define_peephole2} matches insns and substitutes new
7302insns. The @code{peephole2} pass is run after register allocation
ebb48a4d 7303but before scheduling, which may result in much better code for
f3a3d0d3
RH
7304targets that do scheduling.
7305
7306@menu
7307* define_peephole:: RTL to Text Peephole Optimizers
7308* define_peephole2:: RTL to RTL Peephole Optimizers
7309@end menu
7310
a5249a21
HPN
7311@end ifset
7312@ifset INTERNALS
f3a3d0d3
RH
7313@node define_peephole
7314@subsection RTL to Text Peephole Optimizers
7315@findex define_peephole
7316
7317@need 1000
7318A definition looks like this:
7319
7320@smallexample
7321(define_peephole
7322 [@var{insn-pattern-1}
7323 @var{insn-pattern-2}
7324 @dots{}]
7325 "@var{condition}"
7326 "@var{template}"
630d3d5a 7327 "@var{optional-insn-attributes}")
f3a3d0d3
RH
7328@end smallexample
7329
7330@noindent
7331The last string operand may be omitted if you are not using any
7332machine-specific information in this machine description. If present,
7333it must obey the same rules as in a @code{define_insn}.
7334
7335In this skeleton, @var{insn-pattern-1} and so on are patterns to match
7336consecutive insns. The optimization applies to a sequence of insns when
7337@var{insn-pattern-1} matches the first one, @var{insn-pattern-2} matches
bd819a4a 7338the next, and so on.
f3a3d0d3
RH
7339
7340Each of the insns matched by a peephole must also match a
7341@code{define_insn}. Peepholes are checked only at the last stage just
7342before code generation, and only optionally. Therefore, any insn which
7343would match a peephole but no @code{define_insn} will cause a crash in code
7344generation in an unoptimized compilation, or at various optimization
7345stages.
7346
7347The operands of the insns are matched with @code{match_operands},
7348@code{match_operator}, and @code{match_dup}, as usual. What is not
7349usual is that the operand numbers apply to all the insn patterns in the
7350definition. So, you can check for identical operands in two insns by
7351using @code{match_operand} in one insn and @code{match_dup} in the
7352other.
7353
7354The operand constraints used in @code{match_operand} patterns do not have
7355any direct effect on the applicability of the peephole, but they will
7356be validated afterward, so make sure your constraints are general enough
7357to apply whenever the peephole matches. If the peephole matches
7358but the constraints are not satisfied, the compiler will crash.
7359
7360It is safe to omit constraints in all the operands of the peephole; or
7361you can write constraints which serve as a double-check on the criteria
7362previously tested.
7363
7364Once a sequence of insns matches the patterns, the @var{condition} is
7365checked. This is a C expression which makes the final decision whether to
7366perform the optimization (we do so if the expression is nonzero). If
7367@var{condition} is omitted (in other words, the string is empty) then the
7368optimization is applied to every sequence of insns that matches the
7369patterns.
7370
7371The defined peephole optimizations are applied after register allocation
7372is complete. Therefore, the peephole definition can check which
7373operands have ended up in which kinds of registers, just by looking at
7374the operands.
7375
7376@findex prev_active_insn
7377The way to refer to the operands in @var{condition} is to write
7378@code{operands[@var{i}]} for operand number @var{i} (as matched by
7379@code{(match_operand @var{i} @dots{})}). Use the variable @code{insn}
7380to refer to the last of the insns being matched; use
7381@code{prev_active_insn} to find the preceding insns.
7382
7383@findex dead_or_set_p
7384When optimizing computations with intermediate results, you can use
7385@var{condition} to match only when the intermediate results are not used
7386elsewhere. Use the C expression @code{dead_or_set_p (@var{insn},
7387@var{op})}, where @var{insn} is the insn in which you expect the value
7388to be used for the last time (from the value of @code{insn}, together
7389with use of @code{prev_nonnote_insn}), and @var{op} is the intermediate
bd819a4a 7390value (from @code{operands[@var{i}]}).
f3a3d0d3
RH
7391
7392Applying the optimization means replacing the sequence of insns with one
7393new insn. The @var{template} controls ultimate output of assembler code
7394for this combined insn. It works exactly like the template of a
7395@code{define_insn}. Operand numbers in this template are the same ones
7396used in matching the original sequence of insns.
7397
7398The result of a defined peephole optimizer does not need to match any of
7399the insn patterns in the machine description; it does not even have an
7400opportunity to match them. The peephole optimizer definition itself serves
7401as the insn pattern to control how the insn is output.
7402
7403Defined peephole optimizers are run as assembler code is being output,
7404so the insns they produce are never combined or rearranged in any way.
7405
7406Here is an example, taken from the 68000 machine description:
7407
7408@smallexample
7409(define_peephole
7410 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
7411 (set (match_operand:DF 0 "register_operand" "=f")
7412 (match_operand:DF 1 "register_operand" "ad"))]
7413 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
f3a3d0d3
RH
7414@{
7415 rtx xoperands[2];
a2a8cc44 7416 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
f3a3d0d3 7417#ifdef MOTOROLA
0f40f9f7
ZW
7418 output_asm_insn ("move.l %1,(sp)", xoperands);
7419 output_asm_insn ("move.l %1,-(sp)", operands);
7420 return "fmove.d (sp)+,%0";
f3a3d0d3 7421#else
0f40f9f7
ZW
7422 output_asm_insn ("movel %1,sp@@", xoperands);
7423 output_asm_insn ("movel %1,sp@@-", operands);
7424 return "fmoved sp@@+,%0";
f3a3d0d3 7425#endif
0f40f9f7 7426@})
f3a3d0d3
RH
7427@end smallexample
7428
7429@need 1000
7430The effect of this optimization is to change
7431
7432@smallexample
7433@group
7434jbsr _foobar
7435addql #4,sp
7436movel d1,sp@@-
7437movel d0,sp@@-
7438fmoved sp@@+,fp0
7439@end group
7440@end smallexample
7441
7442@noindent
7443into
7444
7445@smallexample
7446@group
7447jbsr _foobar
7448movel d1,sp@@
7449movel d0,sp@@-
7450fmoved sp@@+,fp0
7451@end group
7452@end smallexample
7453
7454@ignore
7455@findex CC_REVERSED
7456If a peephole matches a sequence including one or more jump insns, you must
7457take account of the flags such as @code{CC_REVERSED} which specify that the
7458condition codes are represented in an unusual manner. The compiler
7459automatically alters any ordinary conditional jumps which occur in such
7460situations, but the compiler cannot alter jumps which have been replaced by
7461peephole optimizations. So it is up to you to alter the assembler code
7462that the peephole produces. Supply C code to write the assembler output,
7463and in this C code check the condition code status flags and change the
7464assembler code as appropriate.
7465@end ignore
7466
7467@var{insn-pattern-1} and so on look @emph{almost} like the second
7468operand of @code{define_insn}. There is one important difference: the
7469second operand of @code{define_insn} consists of one or more RTX's
7470enclosed in square brackets. Usually, there is only one: then the same
7471action can be written as an element of a @code{define_peephole}. But
7472when there are multiple actions in a @code{define_insn}, they are
7473implicitly enclosed in a @code{parallel}. Then you must explicitly
7474write the @code{parallel}, and the square brackets within it, in the
7475@code{define_peephole}. Thus, if an insn pattern looks like this,
7476
7477@smallexample
7478(define_insn "divmodsi4"
7479 [(set (match_operand:SI 0 "general_operand" "=d")
7480 (div:SI (match_operand:SI 1 "general_operand" "0")
7481 (match_operand:SI 2 "general_operand" "dmsK")))
7482 (set (match_operand:SI 3 "general_operand" "=d")
7483 (mod:SI (match_dup 1) (match_dup 2)))]
7484 "TARGET_68020"
7485 "divsl%.l %2,%3:%0")
7486@end smallexample
7487
7488@noindent
7489then the way to mention this insn in a peephole is as follows:
7490
7491@smallexample
7492(define_peephole
7493 [@dots{}
7494 (parallel
7495 [(set (match_operand:SI 0 "general_operand" "=d")
7496 (div:SI (match_operand:SI 1 "general_operand" "0")
7497 (match_operand:SI 2 "general_operand" "dmsK")))
7498 (set (match_operand:SI 3 "general_operand" "=d")
7499 (mod:SI (match_dup 1) (match_dup 2)))])
7500 @dots{}]
7501 @dots{})
7502@end smallexample
7503
a5249a21
HPN
7504@end ifset
7505@ifset INTERNALS
f3a3d0d3
RH
7506@node define_peephole2
7507@subsection RTL to RTL Peephole Optimizers
7508@findex define_peephole2
7509
7510The @code{define_peephole2} definition tells the compiler how to
ebb48a4d 7511substitute one sequence of instructions for another sequence,
f3a3d0d3
RH
7512what additional scratch registers may be needed and what their
7513lifetimes must be.
7514
7515@smallexample
7516(define_peephole2
7517 [@var{insn-pattern-1}
7518 @var{insn-pattern-2}
7519 @dots{}]
7520 "@var{condition}"
7521 [@var{new-insn-pattern-1}
7522 @var{new-insn-pattern-2}
7523 @dots{}]
630d3d5a 7524 "@var{preparation-statements}")
f3a3d0d3
RH
7525@end smallexample
7526
7527The definition is almost identical to @code{define_split}
7528(@pxref{Insn Splitting}) except that the pattern to match is not a
7529single instruction, but a sequence of instructions.
7530
7531It is possible to request additional scratch registers for use in the
7532output template. If appropriate registers are not free, the pattern
7533will simply not match.
7534
7535@findex match_scratch
7536@findex match_dup
7537Scratch registers are requested with a @code{match_scratch} pattern at
7538the top level of the input pattern. The allocated register (initially) will
7539be dead at the point requested within the original sequence. If the scratch
7540is used at more than a single point, a @code{match_dup} pattern at the
7541top level of the input pattern marks the last position in the input sequence
7542at which the register must be available.
7543
7544Here is an example from the IA-32 machine description:
7545
7546@smallexample
7547(define_peephole2
7548 [(match_scratch:SI 2 "r")
7549 (parallel [(set (match_operand:SI 0 "register_operand" "")
7550 (match_operator:SI 3 "arith_or_logical_operator"
7551 [(match_dup 0)
7552 (match_operand:SI 1 "memory_operand" "")]))
7553 (clobber (reg:CC 17))])]
7554 "! optimize_size && ! TARGET_READ_MODIFY"
7555 [(set (match_dup 2) (match_dup 1))
7556 (parallel [(set (match_dup 0)
7557 (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
7558 (clobber (reg:CC 17))])]
7559 "")
7560@end smallexample
7561
7562@noindent
7563This pattern tries to split a load from its use in the hopes that we'll be
7564able to schedule around the memory load latency. It allocates a single
7565@code{SImode} register of class @code{GENERAL_REGS} (@code{"r"}) that needs
7566to be live only at the point just before the arithmetic.
7567
b192711e 7568A real example requiring extended scratch lifetimes is harder to come by,
f3a3d0d3
RH
7569so here's a silly made-up example:
7570
7571@smallexample
7572(define_peephole2
7573 [(match_scratch:SI 4 "r")
7574 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" ""))
7575 (set (match_operand:SI 2 "" "") (match_dup 1))
7576 (match_dup 4)
7577 (set (match_operand:SI 3 "" "") (match_dup 1))]
630d3d5a 7578 "/* @r{determine 1 does not overlap 0 and 2} */"
f3a3d0d3
RH
7579 [(set (match_dup 4) (match_dup 1))
7580 (set (match_dup 0) (match_dup 4))
7581 (set (match_dup 2) (match_dup 4))]
7582 (set (match_dup 3) (match_dup 4))]
7583 "")
7584@end smallexample
7585
7586@noindent
a628d195
RH
7587If we had not added the @code{(match_dup 4)} in the middle of the input
7588sequence, it might have been the case that the register we chose at the
7589beginning of the sequence is killed by the first or second @code{set}.
f3a3d0d3 7590
a5249a21
HPN
7591@end ifset
7592@ifset INTERNALS
03dda8e3
RK
7593@node Insn Attributes
7594@section Instruction Attributes
7595@cindex insn attributes
7596@cindex instruction attributes
7597
7598In addition to describing the instruction supported by the target machine,
7599the @file{md} file also defines a group of @dfn{attributes} and a set of
7600values for each. Every generated insn is assigned a value for each attribute.
7601One possible attribute would be the effect that the insn has on the machine's
7602condition code. This attribute can then be used by @code{NOTICE_UPDATE_CC}
7603to track the condition codes.
7604
7605@menu
7606* Defining Attributes:: Specifying attributes and their values.
7607* Expressions:: Valid expressions for attribute values.
7608* Tagging Insns:: Assigning attribute values to insns.
7609* Attr Example:: An example of assigning attributes.
7610* Insn Lengths:: Computing the length of insns.
7611* Constant Attributes:: Defining attributes that are constant.
7612* Delay Slots:: Defining delay slots required for a machine.
fae15c93 7613* Processor pipeline description:: Specifying information for insn scheduling.
03dda8e3
RK
7614@end menu
7615
a5249a21
HPN
7616@end ifset
7617@ifset INTERNALS
03dda8e3
RK
7618@node Defining Attributes
7619@subsection Defining Attributes and their Values
7620@cindex defining attributes and their values
7621@cindex attributes, defining
7622
7623@findex define_attr
7624The @code{define_attr} expression is used to define each attribute required
7625by the target machine. It looks like:
7626
7627@smallexample
7628(define_attr @var{name} @var{list-of-values} @var{default})
7629@end smallexample
7630
7631@var{name} is a string specifying the name of the attribute being defined.
0bddee8e
BS
7632Some attributes are used in a special way by the rest of the compiler. The
7633@code{enabled} attribute can be used to conditionally enable or disable
7634insn alternatives (@pxref{Disable Insn Alternatives}). The @code{predicable}
7635attribute, together with a suitable @code{define_cond_exec}
7636(@pxref{Conditional Execution}), can be used to automatically generate
7637conditional variants of instruction patterns. The compiler internally uses
7638the names @code{ce_enabled} and @code{nonce_enabled}, so they should not be
7639used elsewhere as alternative names.
03dda8e3
RK
7640
7641@var{list-of-values} is either a string that specifies a comma-separated
7642list of values that can be assigned to the attribute, or a null string to
7643indicate that the attribute takes numeric values.
7644
7645@var{default} is an attribute expression that gives the value of this
7646attribute for insns that match patterns whose definition does not include
7647an explicit value for this attribute. @xref{Attr Example}, for more
7648information on the handling of defaults. @xref{Constant Attributes},
7649for information on attributes that do not depend on any particular insn.
7650
7651@findex insn-attr.h
7652For each defined attribute, a number of definitions are written to the
7653@file{insn-attr.h} file. For cases where an explicit set of values is
7654specified for an attribute, the following are defined:
7655
7656@itemize @bullet
7657@item
7658A @samp{#define} is written for the symbol @samp{HAVE_ATTR_@var{name}}.
7659
7660@item
2eac577f 7661An enumerated class is defined for @samp{attr_@var{name}} with
03dda8e3 7662elements of the form @samp{@var{upper-name}_@var{upper-value}} where
4bd0bee9 7663the attribute name and value are first converted to uppercase.
03dda8e3
RK
7664
7665@item
7666A function @samp{get_attr_@var{name}} is defined that is passed an insn and
7667returns the attribute value for that insn.
7668@end itemize
7669
7670For example, if the following is present in the @file{md} file:
7671
7672@smallexample
7673(define_attr "type" "branch,fp,load,store,arith" @dots{})
7674@end smallexample
7675
7676@noindent
7677the following lines will be written to the file @file{insn-attr.h}.
7678
7679@smallexample
d327457f 7680#define HAVE_ATTR_type 1
03dda8e3
RK
7681enum attr_type @{TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
7682 TYPE_STORE, TYPE_ARITH@};
7683extern enum attr_type get_attr_type ();
7684@end smallexample
7685
7686If the attribute takes numeric values, no @code{enum} type will be
7687defined and the function to obtain the attribute's value will return
7688@code{int}.
7689
7ac28727
AK
7690There are attributes which are tied to a specific meaning. These
7691attributes are not free to use for other purposes:
7692
7693@table @code
7694@item length
7695The @code{length} attribute is used to calculate the length of emitted
7696code chunks. This is especially important when verifying branch
7697distances. @xref{Insn Lengths}.
7698
7699@item enabled
7700The @code{enabled} attribute can be defined to prevent certain
7701alternatives of an insn definition from being used during code
7702generation. @xref{Disable Insn Alternatives}.
7ac28727
AK
7703@end table
7704
d327457f
JR
7705For each of these special attributes, the corresponding
7706@samp{HAVE_ATTR_@var{name}} @samp{#define} is also written when the
7707attribute is not defined; in that case, it is defined as @samp{0}.
7708
8f4fe86c
RS
7709@findex define_enum_attr
7710@anchor{define_enum_attr}
7711Another way of defining an attribute is to use:
7712
7713@smallexample
7714(define_enum_attr "@var{attr}" "@var{enum}" @var{default})
7715@end smallexample
7716
7717This works in just the same way as @code{define_attr}, except that
7718the list of values is taken from a separate enumeration called
7719@var{enum} (@pxref{define_enum}). This form allows you to use
7720the same list of values for several attributes without having to
7721repeat the list each time. For example:
7722
7723@smallexample
7724(define_enum "processor" [
7725 model_a
7726 model_b
7727 @dots{}
7728])
7729(define_enum_attr "arch" "processor"
7730 (const (symbol_ref "target_arch")))
7731(define_enum_attr "tune" "processor"
7732 (const (symbol_ref "target_tune")))
7733@end smallexample
7734
7735defines the same attributes as:
7736
7737@smallexample
7738(define_attr "arch" "model_a,model_b,@dots{}"
7739 (const (symbol_ref "target_arch")))
7740(define_attr "tune" "model_a,model_b,@dots{}"
7741 (const (symbol_ref "target_tune")))
7742@end smallexample
7743
7744but without duplicating the processor list. The second example defines two
7745separate C enums (@code{attr_arch} and @code{attr_tune}) whereas the first
7746defines a single C enum (@code{processor}).
a5249a21
HPN
7747@end ifset
7748@ifset INTERNALS
03dda8e3
RK
7749@node Expressions
7750@subsection Attribute Expressions
7751@cindex attribute expressions
7752
7753RTL expressions used to define attributes use the codes described above
7754plus a few specific to attribute definitions, to be discussed below.
7755Attribute value expressions must have one of the following forms:
7756
7757@table @code
7758@cindex @code{const_int} and attributes
7759@item (const_int @var{i})
7760The integer @var{i} specifies the value of a numeric attribute. @var{i}
7761must be non-negative.
7762
7763The value of a numeric attribute can be specified either with a
00bc45c1
RH
7764@code{const_int}, or as an integer represented as a string in
7765@code{const_string}, @code{eq_attr} (see below), @code{attr},
7766@code{symbol_ref}, simple arithmetic expressions, and @code{set_attr}
7767overrides on specific instructions (@pxref{Tagging Insns}).
03dda8e3
RK
7768
7769@cindex @code{const_string} and attributes
7770@item (const_string @var{value})
7771The string @var{value} specifies a constant attribute value.
7772If @var{value} is specified as @samp{"*"}, it means that the default value of
7773the attribute is to be used for the insn containing this expression.
7774@samp{"*"} obviously cannot be used in the @var{default} expression
bd819a4a 7775of a @code{define_attr}.
03dda8e3
RK
7776
7777If the attribute whose value is being specified is numeric, @var{value}
7778must be a string containing a non-negative integer (normally
7779@code{const_int} would be used in this case). Otherwise, it must
7780contain one of the valid values for the attribute.
7781
7782@cindex @code{if_then_else} and attributes
7783@item (if_then_else @var{test} @var{true-value} @var{false-value})
7784@var{test} specifies an attribute test, whose format is defined below.
7785The value of this expression is @var{true-value} if @var{test} is true,
7786otherwise it is @var{false-value}.
7787
7788@cindex @code{cond} and attributes
7789@item (cond [@var{test1} @var{value1} @dots{}] @var{default})
7790The first operand of this expression is a vector containing an even
7791number of expressions and consisting of pairs of @var{test} and @var{value}
7792expressions. The value of the @code{cond} expression is that of the
7793@var{value} corresponding to the first true @var{test} expression. If
7794none of the @var{test} expressions are true, the value of the @code{cond}
7795expression is that of the @var{default} expression.
7796@end table
7797
7798@var{test} expressions can have one of the following forms:
7799
7800@table @code
7801@cindex @code{const_int} and attribute tests
7802@item (const_int @var{i})
df2a54e9 7803This test is true if @var{i} is nonzero and false otherwise.
03dda8e3
RK
7804
7805@cindex @code{not} and attributes
7806@cindex @code{ior} and attributes
7807@cindex @code{and} and attributes
7808@item (not @var{test})
7809@itemx (ior @var{test1} @var{test2})
7810@itemx (and @var{test1} @var{test2})
7811These tests are true if the indicated logical function is true.
7812
7813@cindex @code{match_operand} and attributes
7814@item (match_operand:@var{m} @var{n} @var{pred} @var{constraints})
7815This test is true if operand @var{n} of the insn whose attribute value
7816is being determined has mode @var{m} (this part of the test is ignored
7817if @var{m} is @code{VOIDmode}) and the function specified by the string
df2a54e9 7818@var{pred} returns a nonzero value when passed operand @var{n} and mode
03dda8e3
RK
7819@var{m} (this part of the test is ignored if @var{pred} is the null
7820string).
7821
7822The @var{constraints} operand is ignored and should be the null string.
7823
0c0d3957
RS
7824@cindex @code{match_test} and attributes
7825@item (match_test @var{c-expr})
7826The test is true if C expression @var{c-expr} is true. In non-constant
7827attributes, @var{c-expr} has access to the following variables:
7828
7829@table @var
7830@item insn
7831The rtl instruction under test.
7832@item which_alternative
7833The @code{define_insn} alternative that @var{insn} matches.
7834@xref{Output Statement}.
7835@item operands
7836An array of @var{insn}'s rtl operands.
7837@end table
7838
7839@var{c-expr} behaves like the condition in a C @code{if} statement,
7840so there is no need to explicitly convert the expression into a boolean
78410 or 1 value. For example, the following two tests are equivalent:
7842
7843@smallexample
7844(match_test "x & 2")
7845(match_test "(x & 2) != 0")
7846@end smallexample
7847
03dda8e3
RK
7848@cindex @code{le} and attributes
7849@cindex @code{leu} and attributes
7850@cindex @code{lt} and attributes
7851@cindex @code{gt} and attributes
7852@cindex @code{gtu} and attributes
7853@cindex @code{ge} and attributes
7854@cindex @code{geu} and attributes
7855@cindex @code{ne} and attributes
7856@cindex @code{eq} and attributes
7857@cindex @code{plus} and attributes
7858@cindex @code{minus} and attributes
7859@cindex @code{mult} and attributes
7860@cindex @code{div} and attributes
7861@cindex @code{mod} and attributes
7862@cindex @code{abs} and attributes
7863@cindex @code{neg} and attributes
7864@cindex @code{ashift} and attributes
7865@cindex @code{lshiftrt} and attributes
7866@cindex @code{ashiftrt} and attributes
7867@item (le @var{arith1} @var{arith2})
7868@itemx (leu @var{arith1} @var{arith2})
7869@itemx (lt @var{arith1} @var{arith2})
7870@itemx (ltu @var{arith1} @var{arith2})
7871@itemx (gt @var{arith1} @var{arith2})
7872@itemx (gtu @var{arith1} @var{arith2})
7873@itemx (ge @var{arith1} @var{arith2})
7874@itemx (geu @var{arith1} @var{arith2})
7875@itemx (ne @var{arith1} @var{arith2})
7876@itemx (eq @var{arith1} @var{arith2})
7877These tests are true if the indicated comparison of the two arithmetic
7878expressions is true. Arithmetic expressions are formed with
7879@code{plus}, @code{minus}, @code{mult}, @code{div}, @code{mod},
7880@code{abs}, @code{neg}, @code{and}, @code{ior}, @code{xor}, @code{not},
bd819a4a 7881@code{ashift}, @code{lshiftrt}, and @code{ashiftrt} expressions.
03dda8e3
RK
7882
7883@findex get_attr
7884@code{const_int} and @code{symbol_ref} are always valid terms (@pxref{Insn
7885Lengths},for additional forms). @code{symbol_ref} is a string
7886denoting a C expression that yields an @code{int} when evaluated by the
7887@samp{get_attr_@dots{}} routine. It should normally be a global
bd819a4a 7888variable.
03dda8e3
RK
7889
7890@findex eq_attr
7891@item (eq_attr @var{name} @var{value})
7892@var{name} is a string specifying the name of an attribute.
7893
7894@var{value} is a string that is either a valid value for attribute
7895@var{name}, a comma-separated list of values, or @samp{!} followed by a
7896value or list. If @var{value} does not begin with a @samp{!}, this
7897test is true if the value of the @var{name} attribute of the current
7898insn is in the list specified by @var{value}. If @var{value} begins
7899with a @samp{!}, this test is true if the attribute's value is
7900@emph{not} in the specified list.
7901
7902For example,
7903
7904@smallexample
7905(eq_attr "type" "load,store")
7906@end smallexample
7907
7908@noindent
7909is equivalent to
7910
7911@smallexample
7912(ior (eq_attr "type" "load") (eq_attr "type" "store"))
7913@end smallexample
7914
7915If @var{name} specifies an attribute of @samp{alternative}, it refers to the
7916value of the compiler variable @code{which_alternative}
7917(@pxref{Output Statement}) and the values must be small integers. For
bd819a4a 7918example,
03dda8e3
RK
7919
7920@smallexample
7921(eq_attr "alternative" "2,3")
7922@end smallexample
7923
7924@noindent
7925is equivalent to
7926
7927@smallexample
7928(ior (eq (symbol_ref "which_alternative") (const_int 2))
7929 (eq (symbol_ref "which_alternative") (const_int 3)))
7930@end smallexample
7931
7932Note that, for most attributes, an @code{eq_attr} test is simplified in cases
7933where the value of the attribute being tested is known for all insns matching
bd819a4a 7934a particular pattern. This is by far the most common case.
03dda8e3
RK
7935
7936@findex attr_flag
7937@item (attr_flag @var{name})
7938The value of an @code{attr_flag} expression is true if the flag
7939specified by @var{name} is true for the @code{insn} currently being
7940scheduled.
7941
7942@var{name} is a string specifying one of a fixed set of flags to test.
7943Test the flags @code{forward} and @code{backward} to determine the
81e7aa8e 7944direction of a conditional branch.
03dda8e3
RK
7945
7946This example describes a conditional branch delay slot which
7947can be nullified for forward branches that are taken (annul-true) or
7948for backward branches which are not taken (annul-false).
7949
7950@smallexample
7951(define_delay (eq_attr "type" "cbranch")
7952 [(eq_attr "in_branch_delay" "true")
7953 (and (eq_attr "in_branch_delay" "true")
7954 (attr_flag "forward"))
7955 (and (eq_attr "in_branch_delay" "true")
7956 (attr_flag "backward"))])
7957@end smallexample
7958
7959The @code{forward} and @code{backward} flags are false if the current
7960@code{insn} being scheduled is not a conditional branch.
7961
03dda8e3
RK
7962@code{attr_flag} is only used during delay slot scheduling and has no
7963meaning to other passes of the compiler.
00bc45c1
RH
7964
7965@findex attr
7966@item (attr @var{name})
7967The value of another attribute is returned. This is most useful
7968for numeric attributes, as @code{eq_attr} and @code{attr_flag}
7969produce more efficient code for non-numeric attributes.
03dda8e3
RK
7970@end table
7971
a5249a21
HPN
7972@end ifset
7973@ifset INTERNALS
03dda8e3
RK
7974@node Tagging Insns
7975@subsection Assigning Attribute Values to Insns
7976@cindex tagging insns
7977@cindex assigning attribute values to insns
7978
7979The value assigned to an attribute of an insn is primarily determined by
7980which pattern is matched by that insn (or which @code{define_peephole}
7981generated it). Every @code{define_insn} and @code{define_peephole} can
7982have an optional last argument to specify the values of attributes for
7983matching insns. The value of any attribute not specified in a particular
7984insn is set to the default value for that attribute, as specified in its
7985@code{define_attr}. Extensive use of default values for attributes
7986permits the specification of the values for only one or two attributes
7987in the definition of most insn patterns, as seen in the example in the
bd819a4a 7988next section.
03dda8e3
RK
7989
7990The optional last argument of @code{define_insn} and
7991@code{define_peephole} is a vector of expressions, each of which defines
7992the value for a single attribute. The most general way of assigning an
7993attribute's value is to use a @code{set} expression whose first operand is an
7994@code{attr} expression giving the name of the attribute being set. The
7995second operand of the @code{set} is an attribute expression
bd819a4a 7996(@pxref{Expressions}) giving the value of the attribute.
03dda8e3
RK
7997
7998When the attribute value depends on the @samp{alternative} attribute
7999(i.e., which is the applicable alternative in the constraint of the
8000insn), the @code{set_attr_alternative} expression can be used. It
8001allows the specification of a vector of attribute expressions, one for
8002each alternative.
8003
8004@findex set_attr
8005When the generality of arbitrary attribute expressions is not required,
8006the simpler @code{set_attr} expression can be used, which allows
8007specifying a string giving either a single attribute value or a list
8008of attribute values, one for each alternative.
8009
8010The form of each of the above specifications is shown below. In each case,
8011@var{name} is a string specifying the attribute to be set.
8012
8013@table @code
8014@item (set_attr @var{name} @var{value-string})
8015@var{value-string} is either a string giving the desired attribute value,
8016or a string containing a comma-separated list giving the values for
8017succeeding alternatives. The number of elements must match the number
8018of alternatives in the constraint of the insn pattern.
8019
8020Note that it may be useful to specify @samp{*} for some alternative, in
8021which case the attribute will assume its default value for insns matching
8022that alternative.
8023
8024@findex set_attr_alternative
8025@item (set_attr_alternative @var{name} [@var{value1} @var{value2} @dots{}])
8026Depending on the alternative of the insn, the value will be one of the
8027specified values. This is a shorthand for using a @code{cond} with
8028tests on the @samp{alternative} attribute.
8029
8030@findex attr
8031@item (set (attr @var{name}) @var{value})
8032The first operand of this @code{set} must be the special RTL expression
8033@code{attr}, whose sole operand is a string giving the name of the
8034attribute being set. @var{value} is the value of the attribute.
8035@end table
8036
8037The following shows three different ways of representing the same
8038attribute value specification:
8039
8040@smallexample
8041(set_attr "type" "load,store,arith")
8042
8043(set_attr_alternative "type"
8044 [(const_string "load") (const_string "store")
8045 (const_string "arith")])
8046
8047(set (attr "type")
8048 (cond [(eq_attr "alternative" "1") (const_string "load")
8049 (eq_attr "alternative" "2") (const_string "store")]
8050 (const_string "arith")))
8051@end smallexample
8052
8053@need 1000
8054@findex define_asm_attributes
8055The @code{define_asm_attributes} expression provides a mechanism to
8056specify the attributes assigned to insns produced from an @code{asm}
8057statement. It has the form:
8058
8059@smallexample
8060(define_asm_attributes [@var{attr-sets}])
8061@end smallexample
8062
8063@noindent
8064where @var{attr-sets} is specified the same as for both the
8065@code{define_insn} and the @code{define_peephole} expressions.
8066
8067These values will typically be the ``worst case'' attribute values. For
8068example, they might indicate that the condition code will be clobbered.
8069
8070A specification for a @code{length} attribute is handled specially. The
8071way to compute the length of an @code{asm} insn is to multiply the
8072length specified in the expression @code{define_asm_attributes} by the
8073number of machine instructions specified in the @code{asm} statement,
8074determined by counting the number of semicolons and newlines in the
8075string. Therefore, the value of the @code{length} attribute specified
8076in a @code{define_asm_attributes} should be the maximum possible length
8077of a single machine instruction.
8078
a5249a21
HPN
8079@end ifset
8080@ifset INTERNALS
03dda8e3
RK
8081@node Attr Example
8082@subsection Example of Attribute Specifications
8083@cindex attribute specifications example
8084@cindex attribute specifications
8085
8086The judicious use of defaulting is important in the efficient use of
8087insn attributes. Typically, insns are divided into @dfn{types} and an
8088attribute, customarily called @code{type}, is used to represent this
8089value. This attribute is normally used only to define the default value
8090for other attributes. An example will clarify this usage.
8091
8092Assume we have a RISC machine with a condition code and in which only
8093full-word operations are performed in registers. Let us assume that we
8094can divide all insns into loads, stores, (integer) arithmetic
8095operations, floating point operations, and branches.
8096
8097Here we will concern ourselves with determining the effect of an insn on
8098the condition code and will limit ourselves to the following possible
8099effects: The condition code can be set unpredictably (clobbered), not
8100be changed, be set to agree with the results of the operation, or only
8101changed if the item previously set into the condition code has been
8102modified.
8103
8104Here is part of a sample @file{md} file for such a machine:
8105
8106@smallexample
8107(define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
8108
8109(define_attr "cc" "clobber,unchanged,set,change0"
8110 (cond [(eq_attr "type" "load")
8111 (const_string "change0")
8112 (eq_attr "type" "store,branch")
8113 (const_string "unchanged")
8114 (eq_attr "type" "arith")
8115 (if_then_else (match_operand:SI 0 "" "")
8116 (const_string "set")
8117 (const_string "clobber"))]
8118 (const_string "clobber")))
8119
8120(define_insn ""
8121 [(set (match_operand:SI 0 "general_operand" "=r,r,m")
8122 (match_operand:SI 1 "general_operand" "r,m,r"))]
8123 ""
8124 "@@
8125 move %0,%1
8126 load %0,%1
8127 store %0,%1"
8128 [(set_attr "type" "arith,load,store")])
8129@end smallexample
8130
8131Note that we assume in the above example that arithmetic operations
8132performed on quantities smaller than a machine word clobber the condition
8133code since they will set the condition code to a value corresponding to the
8134full-word result.
8135
a5249a21
HPN
8136@end ifset
8137@ifset INTERNALS
03dda8e3
RK
8138@node Insn Lengths
8139@subsection Computing the Length of an Insn
8140@cindex insn lengths, computing
8141@cindex computing the length of an insn
8142
8143For many machines, multiple types of branch instructions are provided, each
8144for different length branch displacements. In most cases, the assembler
8145will choose the correct instruction to use. However, when the assembler
b49900cc 8146cannot do so, GCC can when a special attribute, the @code{length}
03dda8e3
RK
8147attribute, is defined. This attribute must be defined to have numeric
8148values by specifying a null string in its @code{define_attr}.
8149
b49900cc 8150In the case of the @code{length} attribute, two additional forms of
03dda8e3
RK
8151arithmetic terms are allowed in test expressions:
8152
8153@table @code
8154@cindex @code{match_dup} and attributes
8155@item (match_dup @var{n})
8156This refers to the address of operand @var{n} of the current insn, which
8157must be a @code{label_ref}.
8158
8159@cindex @code{pc} and attributes
8160@item (pc)
8161This refers to the address of the @emph{current} insn. It might have
8162been more consistent with other usage to make this the address of the
8163@emph{next} insn but this would be confusing because the length of the
8164current insn is to be computed.
8165@end table
8166
8167@cindex @code{addr_vec}, length of
8168@cindex @code{addr_diff_vec}, length of
8169For normal insns, the length will be determined by value of the
b49900cc 8170@code{length} attribute. In the case of @code{addr_vec} and
03dda8e3
RK
8171@code{addr_diff_vec} insn patterns, the length is computed as
8172the number of vectors multiplied by the size of each vector.
8173
8174Lengths are measured in addressable storage units (bytes).
8175
8176The following macros can be used to refine the length computation:
8177
8178@table @code
03dda8e3
RK
8179@findex ADJUST_INSN_LENGTH
8180@item ADJUST_INSN_LENGTH (@var{insn}, @var{length})
8181If defined, modifies the length assigned to instruction @var{insn} as a
8182function of the context in which it is used. @var{length} is an lvalue
8183that contains the initially computed length of the insn and should be
a8aa4e0b 8184updated with the correct length of the insn.
03dda8e3
RK
8185
8186This macro will normally not be required. A case in which it is
161d7b59 8187required is the ROMP@. On this machine, the size of an @code{addr_vec}
03dda8e3
RK
8188insn must be increased by two to compensate for the fact that alignment
8189may be required.
8190@end table
8191
8192@findex get_attr_length
8193The routine that returns @code{get_attr_length} (the value of the
8194@code{length} attribute) can be used by the output routine to
8195determine the form of the branch instruction to be written, as the
8196example below illustrates.
8197
8198As an example of the specification of variable-length branches, consider
8199the IBM 360. If we adopt the convention that a register will be set to
8200the starting address of a function, we can jump to labels within 4k of
8201the start using a four-byte instruction. Otherwise, we need a six-byte
8202sequence to load the address from memory and then branch to it.
8203
8204On such a machine, a pattern for a branch instruction might be specified
8205as follows:
8206
8207@smallexample
8208(define_insn "jump"
8209 [(set (pc)
8210 (label_ref (match_operand 0 "" "")))]
8211 ""
03dda8e3
RK
8212@{
8213 return (get_attr_length (insn) == 4
0f40f9f7
ZW
8214 ? "b %l0" : "l r15,=a(%l0); br r15");
8215@}
9c34dbbf
ZW
8216 [(set (attr "length")
8217 (if_then_else (lt (match_dup 0) (const_int 4096))
8218 (const_int 4)
8219 (const_int 6)))])
03dda8e3
RK
8220@end smallexample
8221
a5249a21
HPN
8222@end ifset
8223@ifset INTERNALS
03dda8e3
RK
8224@node Constant Attributes
8225@subsection Constant Attributes
8226@cindex constant attributes
8227
8228A special form of @code{define_attr}, where the expression for the
8229default value is a @code{const} expression, indicates an attribute that
8230is constant for a given run of the compiler. Constant attributes may be
8231used to specify which variety of processor is used. For example,
8232
8233@smallexample
8234(define_attr "cpu" "m88100,m88110,m88000"
8235 (const
8236 (cond [(symbol_ref "TARGET_88100") (const_string "m88100")
8237 (symbol_ref "TARGET_88110") (const_string "m88110")]
8238 (const_string "m88000"))))
8239
8240(define_attr "memory" "fast,slow"
8241 (const
8242 (if_then_else (symbol_ref "TARGET_FAST_MEM")
8243 (const_string "fast")
8244 (const_string "slow"))))
8245@end smallexample
8246
8247The routine generated for constant attributes has no parameters as it
8248does not depend on any particular insn. RTL expressions used to define
8249the value of a constant attribute may use the @code{symbol_ref} form,
8250but may not use either the @code{match_operand} form or @code{eq_attr}
8251forms involving insn attributes.
8252
a5249a21
HPN
8253@end ifset
8254@ifset INTERNALS
03dda8e3
RK
8255@node Delay Slots
8256@subsection Delay Slot Scheduling
8257@cindex delay slots, defining
8258
8259The insn attribute mechanism can be used to specify the requirements for
8260delay slots, if any, on a target machine. An instruction is said to
8261require a @dfn{delay slot} if some instructions that are physically
8262after the instruction are executed as if they were located before it.
8263Classic examples are branch and call instructions, which often execute
8264the following instruction before the branch or call is performed.
8265
8266On some machines, conditional branch instructions can optionally
8267@dfn{annul} instructions in the delay slot. This means that the
8268instruction will not be executed for certain branch outcomes. Both
8269instructions that annul if the branch is true and instructions that
8270annul if the branch is false are supported.
8271
8272Delay slot scheduling differs from instruction scheduling in that
8273determining whether an instruction needs a delay slot is dependent only
8274on the type of instruction being generated, not on data flow between the
8275instructions. See the next section for a discussion of data-dependent
8276instruction scheduling.
8277
8278@findex define_delay
8279The requirement of an insn needing one or more delay slots is indicated
8280via the @code{define_delay} expression. It has the following form:
8281
8282@smallexample
8283(define_delay @var{test}
8284 [@var{delay-1} @var{annul-true-1} @var{annul-false-1}
8285 @var{delay-2} @var{annul-true-2} @var{annul-false-2}
8286 @dots{}])
8287@end smallexample
8288
8289@var{test} is an attribute test that indicates whether this
8290@code{define_delay} applies to a particular insn. If so, the number of
8291required delay slots is determined by the length of the vector specified
8292as the second argument. An insn placed in delay slot @var{n} must
8293satisfy attribute test @var{delay-n}. @var{annul-true-n} is an
8294attribute test that specifies which insns may be annulled if the branch
8295is true. Similarly, @var{annul-false-n} specifies which insns in the
8296delay slot may be annulled if the branch is false. If annulling is not
bd819a4a 8297supported for that delay slot, @code{(nil)} should be coded.
03dda8e3
RK
8298
8299For example, in the common case where branch and call insns require
8300a single delay slot, which may contain any insn other than a branch or
8301call, the following would be placed in the @file{md} file:
8302
8303@smallexample
8304(define_delay (eq_attr "type" "branch,call")
8305 [(eq_attr "type" "!branch,call") (nil) (nil)])
8306@end smallexample
8307
8308Multiple @code{define_delay} expressions may be specified. In this
8309case, each such expression specifies different delay slot requirements
8310and there must be no insn for which tests in two @code{define_delay}
8311expressions are both true.
8312
8313For example, if we have a machine that requires one delay slot for branches
8314but two for calls, no delay slot can contain a branch or call insn,
8315and any valid insn in the delay slot for the branch can be annulled if the
8316branch is true, we might represent this as follows:
8317
8318@smallexample
8319(define_delay (eq_attr "type" "branch")
8320 [(eq_attr "type" "!branch,call")
8321 (eq_attr "type" "!branch,call")
8322 (nil)])
8323
8324(define_delay (eq_attr "type" "call")
8325 [(eq_attr "type" "!branch,call") (nil) (nil)
8326 (eq_attr "type" "!branch,call") (nil) (nil)])
8327@end smallexample
8328@c the above is *still* too long. --mew 4feb93
8329
a5249a21
HPN
8330@end ifset
8331@ifset INTERNALS
fae15c93
VM
8332@node Processor pipeline description
8333@subsection Specifying processor pipeline description
8334@cindex processor pipeline description
8335@cindex processor functional units
8336@cindex instruction latency time
8337@cindex interlock delays
8338@cindex data dependence delays
8339@cindex reservation delays
8340@cindex pipeline hazard recognizer
8341@cindex automaton based pipeline description
8342@cindex regular expressions
8343@cindex deterministic finite state automaton
8344@cindex automaton based scheduler
8345@cindex RISC
8346@cindex VLIW
8347
ef261fee 8348To achieve better performance, most modern processors
fae15c93
VM
8349(super-pipelined, superscalar @acronym{RISC}, and @acronym{VLIW}
8350processors) have many @dfn{functional units} on which several
8351instructions can be executed simultaneously. An instruction starts
8352execution if its issue conditions are satisfied. If not, the
ef261fee 8353instruction is stalled until its conditions are satisfied. Such
fae15c93 8354@dfn{interlock (pipeline) delay} causes interruption of the fetching
431ae0bf 8355of successor instructions (or demands nop instructions, e.g.@: for some
fae15c93
VM
8356MIPS processors).
8357
8358There are two major kinds of interlock delays in modern processors.
8359The first one is a data dependence delay determining @dfn{instruction
8360latency time}. The instruction execution is not started until all
8361source data have been evaluated by prior instructions (there are more
8362complex cases when the instruction execution starts even when the data
c0478a66 8363are not available but will be ready in given time after the
fae15c93
VM
8364instruction execution start). Taking the data dependence delays into
8365account is simple. The data dependence (true, output, and
8366anti-dependence) delay between two instructions is given by a
8367constant. In most cases this approach is adequate. The second kind
8368of interlock delays is a reservation delay. The reservation delay
8369means that two instructions under execution will be in need of shared
431ae0bf 8370processors resources, i.e.@: buses, internal registers, and/or
fae15c93
VM
8371functional units, which are reserved for some time. Taking this kind
8372of delay into account is complex especially for modern @acronym{RISC}
8373processors.
8374
8375The task of exploiting more processor parallelism is solved by an
ef261fee 8376instruction scheduler. For a better solution to this problem, the
fae15c93 8377instruction scheduler has to have an adequate description of the
fa0aee89
PB
8378processor parallelism (or @dfn{pipeline description}). GCC
8379machine descriptions describe processor parallelism and functional
8380unit reservations for groups of instructions with the aid of
8381@dfn{regular expressions}.
ef261fee
R
8382
8383The GCC instruction scheduler uses a @dfn{pipeline hazard recognizer} to
fae15c93 8384figure out the possibility of the instruction issue by the processor
ef261fee
R
8385on a given simulated processor cycle. The pipeline hazard recognizer is
8386automatically generated from the processor pipeline description. The
fa0aee89
PB
8387pipeline hazard recognizer generated from the machine description
8388is based on a deterministic finite state automaton (@acronym{DFA}):
8389the instruction issue is possible if there is a transition from one
8390automaton state to another one. This algorithm is very fast, and
8391furthermore, its speed is not dependent on processor
8392complexity@footnote{However, the size of the automaton depends on
6ccde948
RW
8393processor complexity. To limit this effect, machine descriptions
8394can split orthogonal parts of the machine description among several
8395automata: but then, since each of these must be stepped independently,
8396this does cause a small decrease in the algorithm's performance.}.
fae15c93 8397
fae15c93 8398@cindex automaton based pipeline description
fa0aee89
PB
8399The rest of this section describes the directives that constitute
8400an automaton-based processor pipeline description. The order of
8401these constructions within the machine description file is not
8402important.
fae15c93
VM
8403
8404@findex define_automaton
8405@cindex pipeline hazard recognizer
8406The following optional construction describes names of automata
8407generated and used for the pipeline hazards recognition. Sometimes
8408the generated finite state automaton used by the pipeline hazard
ef261fee 8409recognizer is large. If we use more than one automaton and bind functional
daf2f129 8410units to the automata, the total size of the automata is usually
fae15c93
VM
8411less than the size of the single automaton. If there is no one such
8412construction, only one finite state automaton is generated.
8413
8414@smallexample
8415(define_automaton @var{automata-names})
8416@end smallexample
8417
8418@var{automata-names} is a string giving names of the automata. The
8419names are separated by commas. All the automata should have unique names.
c62347f0 8420The automaton name is used in the constructions @code{define_cpu_unit} and
fae15c93
VM
8421@code{define_query_cpu_unit}.
8422
8423@findex define_cpu_unit
8424@cindex processor functional units
c62347f0 8425Each processor functional unit used in the description of instruction
fae15c93
VM
8426reservations should be described by the following construction.
8427
8428@smallexample
8429(define_cpu_unit @var{unit-names} [@var{automaton-name}])
8430@end smallexample
8431
8432@var{unit-names} is a string giving the names of the functional units
8433separated by commas. Don't use name @samp{nothing}, it is reserved
8434for other goals.
8435
ef261fee 8436@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
8437which the unit is bound. The automaton should be described in
8438construction @code{define_automaton}. You should give
8439@dfn{automaton-name}, if there is a defined automaton.
8440
30028c85
VM
8441The assignment of units to automata are constrained by the uses of the
8442units in insn reservations. The most important constraint is: if a
8443unit reservation is present on a particular cycle of an alternative
8444for an insn reservation, then some unit from the same automaton must
8445be present on the same cycle for the other alternatives of the insn
8446reservation. The rest of the constraints are mentioned in the
8447description of the subsequent constructions.
8448
fae15c93
VM
8449@findex define_query_cpu_unit
8450@cindex querying function unit reservations
8451The following construction describes CPU functional units analogously
30028c85
VM
8452to @code{define_cpu_unit}. The reservation of such units can be
8453queried for an automaton state. The instruction scheduler never
8454queries reservation of functional units for given automaton state. So
8455as a rule, you don't need this construction. This construction could
431ae0bf 8456be used for future code generation goals (e.g.@: to generate
30028c85 8457@acronym{VLIW} insn templates).
fae15c93
VM
8458
8459@smallexample
8460(define_query_cpu_unit @var{unit-names} [@var{automaton-name}])
8461@end smallexample
8462
8463@var{unit-names} is a string giving names of the functional units
8464separated by commas.
8465
ef261fee 8466@var{automaton-name} is a string giving the name of the automaton with
fae15c93
VM
8467which the unit is bound.
8468
8469@findex define_insn_reservation
8470@cindex instruction latency time
8471@cindex regular expressions
8472@cindex data bypass
ef261fee 8473The following construction is the major one to describe pipeline
fae15c93
VM
8474characteristics of an instruction.
8475
8476@smallexample
8477(define_insn_reservation @var{insn-name} @var{default_latency}
8478 @var{condition} @var{regexp})
8479@end smallexample
8480
8481@var{default_latency} is a number giving latency time of the
8482instruction. There is an important difference between the old
8483description and the automaton based pipeline description. The latency
8484time is used for all dependencies when we use the old description. In
ef261fee
R
8485the automaton based pipeline description, the given latency time is only
8486used for true dependencies. The cost of anti-dependencies is always
fae15c93
VM
8487zero and the cost of output dependencies is the difference between
8488latency times of the producing and consuming insns (if the difference
ef261fee
R
8489is negative, the cost is considered to be zero). You can always
8490change the default costs for any description by using the target hook
fae15c93
VM
8491@code{TARGET_SCHED_ADJUST_COST} (@pxref{Scheduling}).
8492
cc6a602b 8493@var{insn-name} is a string giving the internal name of the insn. The
fae15c93
VM
8494internal names are used in constructions @code{define_bypass} and in
8495the automaton description file generated for debugging. The internal
ef261fee 8496name has nothing in common with the names in @code{define_insn}. It is a
fae15c93
VM
8497good practice to use insn classes described in the processor manual.
8498
8499@var{condition} defines what RTL insns are described by this
8500construction. You should remember that you will be in trouble if
8501@var{condition} for two or more different
8502@code{define_insn_reservation} constructions is TRUE for an insn. In
8503this case what reservation will be used for the insn is not defined.
8504Such cases are not checked during generation of the pipeline hazards
8505recognizer because in general recognizing that two conditions may have
8506the same value is quite difficult (especially if the conditions
8507contain @code{symbol_ref}). It is also not checked during the
8508pipeline hazard recognizer work because it would slow down the
8509recognizer considerably.
8510
ef261fee 8511@var{regexp} is a string describing the reservation of the cpu's functional
fae15c93
VM
8512units by the instruction. The reservations are described by a regular
8513expression according to the following syntax:
8514
8515@smallexample
8516 regexp = regexp "," oneof
8517 | oneof
8518
8519 oneof = oneof "|" allof
8520 | allof
8521
8522 allof = allof "+" repeat
8523 | repeat
daf2f129 8524
fae15c93
VM
8525 repeat = element "*" number
8526 | element
8527
8528 element = cpu_function_unit_name
8529 | reservation_name
8530 | result_name
8531 | "nothing"
8532 | "(" regexp ")"
8533@end smallexample
8534
8535@itemize @bullet
8536@item
8537@samp{,} is used for describing the start of the next cycle in
8538the reservation.
8539
8540@item
8541@samp{|} is used for describing a reservation described by the first
8542regular expression @strong{or} a reservation described by the second
8543regular expression @strong{or} etc.
8544
8545@item
8546@samp{+} is used for describing a reservation described by the first
8547regular expression @strong{and} a reservation described by the
8548second regular expression @strong{and} etc.
8549
8550@item
8551@samp{*} is used for convenience and simply means a sequence in which
8552the regular expression are repeated @var{number} times with cycle
8553advancing (see @samp{,}).
8554
8555@item
8556@samp{cpu_function_unit_name} denotes reservation of the named
8557functional unit.
8558
8559@item
8560@samp{reservation_name} --- see description of construction
8561@samp{define_reservation}.
8562
8563@item
8564@samp{nothing} denotes no unit reservations.
8565@end itemize
8566
8567@findex define_reservation
8568Sometimes unit reservations for different insns contain common parts.
8569In such case, you can simplify the pipeline description by describing
8570the common part by the following construction
8571
8572@smallexample
8573(define_reservation @var{reservation-name} @var{regexp})
8574@end smallexample
8575
8576@var{reservation-name} is a string giving name of @var{regexp}.
8577Functional unit names and reservation names are in the same name
8578space. So the reservation names should be different from the
cc6a602b 8579functional unit names and can not be the reserved name @samp{nothing}.
fae15c93
VM
8580
8581@findex define_bypass
8582@cindex instruction latency time
8583@cindex data bypass
8584The following construction is used to describe exceptions in the
8585latency time for given instruction pair. This is so called bypasses.
8586
8587@smallexample
8588(define_bypass @var{number} @var{out_insn_names} @var{in_insn_names}
8589 [@var{guard}])
8590@end smallexample
8591
8592@var{number} defines when the result generated by the instructions
8593given in string @var{out_insn_names} will be ready for the
f9bf5a8e
RS
8594instructions given in string @var{in_insn_names}. Each of these
8595strings is a comma-separated list of filename-style globs and
8596they refer to the names of @code{define_insn_reservation}s.
8597For example:
8598@smallexample
8599(define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*")
8600@end smallexample
8601defines a bypass between instructions that start with
8602@samp{cpu1_load_} or @samp{cpu1_store_} and those that start with
8603@samp{cpu1_load_}.
fae15c93 8604
ef261fee 8605@var{guard} is an optional string giving the name of a C function which
fae15c93
VM
8606defines an additional guard for the bypass. The function will get the
8607two insns as parameters. If the function returns zero the bypass will
8608be ignored for this case. The additional guard is necessary to
431ae0bf 8609recognize complicated bypasses, e.g.@: when the consumer is only an address
fae15c93
VM
8610of insn @samp{store} (not a stored value).
8611
20a07f44
VM
8612If there are more one bypass with the same output and input insns, the
8613chosen bypass is the first bypass with a guard in description whose
8614guard function returns nonzero. If there is no such bypass, then
8615bypass without the guard function is chosen.
8616
fae15c93
VM
8617@findex exclusion_set
8618@findex presence_set
30028c85 8619@findex final_presence_set
fae15c93 8620@findex absence_set
30028c85 8621@findex final_absence_set
fae15c93
VM
8622@cindex VLIW
8623@cindex RISC
cc6a602b
BE
8624The following five constructions are usually used to describe
8625@acronym{VLIW} processors, or more precisely, to describe a placement
8626of small instructions into @acronym{VLIW} instruction slots. They
8627can be used for @acronym{RISC} processors, too.
fae15c93
VM
8628
8629@smallexample
8630(exclusion_set @var{unit-names} @var{unit-names})
30028c85
VM
8631(presence_set @var{unit-names} @var{patterns})
8632(final_presence_set @var{unit-names} @var{patterns})
8633(absence_set @var{unit-names} @var{patterns})
8634(final_absence_set @var{unit-names} @var{patterns})
fae15c93
VM
8635@end smallexample
8636
8637@var{unit-names} is a string giving names of functional units
8638separated by commas.
8639
30028c85 8640@var{patterns} is a string giving patterns of functional units
0bdcd332 8641separated by comma. Currently pattern is one unit or units
30028c85
VM
8642separated by white-spaces.
8643
fae15c93
VM
8644The first construction (@samp{exclusion_set}) means that each
8645functional unit in the first string can not be reserved simultaneously
8646with a unit whose name is in the second string and vice versa. For
8647example, the construction is useful for describing processors
431ae0bf 8648(e.g.@: some SPARC processors) with a fully pipelined floating point
fae15c93
VM
8649functional unit which can execute simultaneously only single floating
8650point insns or only double floating point insns.
8651
8652The second construction (@samp{presence_set}) means that each
8653functional unit in the first string can not be reserved unless at
30028c85
VM
8654least one of pattern of units whose names are in the second string is
8655reserved. This is an asymmetric relation. For example, it is useful
8656for description that @acronym{VLIW} @samp{slot1} is reserved after
8657@samp{slot0} reservation. We could describe it by the following
8658construction
8659
8660@smallexample
8661(presence_set "slot1" "slot0")
8662@end smallexample
8663
8664Or @samp{slot1} is reserved only after @samp{slot0} and unit @samp{b0}
8665reservation. In this case we could write
8666
8667@smallexample
8668(presence_set "slot1" "slot0 b0")
8669@end smallexample
8670
8671The third construction (@samp{final_presence_set}) is analogous to
8672@samp{presence_set}. The difference between them is when checking is
8673done. When an instruction is issued in given automaton state
8674reflecting all current and planned unit reservations, the automaton
8675state is changed. The first state is a source state, the second one
8676is a result state. Checking for @samp{presence_set} is done on the
8677source state reservation, checking for @samp{final_presence_set} is
8678done on the result reservation. This construction is useful to
8679describe a reservation which is actually two subsequent reservations.
8680For example, if we use
8681
8682@smallexample
8683(presence_set "slot1" "slot0")
8684@end smallexample
8685
8686the following insn will be never issued (because @samp{slot1} requires
8687@samp{slot0} which is absent in the source state).
8688
8689@smallexample
8690(define_reservation "insn_and_nop" "slot0 + slot1")
8691@end smallexample
8692
8693but it can be issued if we use analogous @samp{final_presence_set}.
8694
8695The forth construction (@samp{absence_set}) means that each functional
8696unit in the first string can be reserved only if each pattern of units
8697whose names are in the second string is not reserved. This is an
8698asymmetric relation (actually @samp{exclusion_set} is analogous to
ff2ce160 8699this one but it is symmetric). For example it might be useful in a
a71b1c58
NC
8700@acronym{VLIW} description to say that @samp{slot0} cannot be reserved
8701after either @samp{slot1} or @samp{slot2} have been reserved. This
8702can be described as:
30028c85
VM
8703
8704@smallexample
a71b1c58 8705(absence_set "slot0" "slot1, slot2")
30028c85
VM
8706@end smallexample
8707
8708Or @samp{slot2} can not be reserved if @samp{slot0} and unit @samp{b0}
8709are reserved or @samp{slot1} and unit @samp{b1} are reserved. In
8710this case we could write
8711
8712@smallexample
8713(absence_set "slot2" "slot0 b0, slot1 b1")
8714@end smallexample
fae15c93 8715
ef261fee 8716All functional units mentioned in a set should belong to the same
fae15c93
VM
8717automaton.
8718
30028c85
VM
8719The last construction (@samp{final_absence_set}) is analogous to
8720@samp{absence_set} but checking is done on the result (state)
8721reservation. See comments for @samp{final_presence_set}.
8722
fae15c93
VM
8723@findex automata_option
8724@cindex deterministic finite state automaton
8725@cindex nondeterministic finite state automaton
8726@cindex finite state automaton minimization
8727You can control the generator of the pipeline hazard recognizer with
8728the following construction.
8729
8730@smallexample
8731(automata_option @var{options})
8732@end smallexample
8733
8734@var{options} is a string giving options which affect the generated
8735code. Currently there are the following options:
8736
8737@itemize @bullet
8738@item
8739@dfn{no-minimization} makes no minimization of the automaton. This is
30028c85
VM
8740only worth to do when we are debugging the description and need to
8741look more accurately at reservations of states.
fae15c93
VM
8742
8743@item
df1133a6
BE
8744@dfn{time} means printing time statistics about the generation of
8745automata.
8746
8747@item
8748@dfn{stats} means printing statistics about the generated automata
8749such as the number of DFA states, NDFA states and arcs.
e3c8eb86
VM
8750
8751@item
8752@dfn{v} means a generation of the file describing the result automata.
8753The file has suffix @samp{.dfa} and can be used for the description
8754verification and debugging.
8755
8756@item
8757@dfn{w} means a generation of warning instead of error for
8758non-critical errors.
fae15c93 8759
e12da141
BS
8760@item
8761@dfn{no-comb-vect} prevents the automaton generator from generating
8762two data structures and comparing them for space efficiency. Using
8763a comb vector to represent transitions may be better, but it can be
8764very expensive to construct. This option is useful if the build
8765process spends an unacceptably long time in genautomata.
8766
fae15c93
VM
8767@item
8768@dfn{ndfa} makes nondeterministic finite state automata. This affects
8769the treatment of operator @samp{|} in the regular expressions. The
8770usual treatment of the operator is to try the first alternative and,
8771if the reservation is not possible, the second alternative. The
8772nondeterministic treatment means trying all alternatives, some of them
96ddf8ef 8773may be rejected by reservations in the subsequent insns.
dfa849f3 8774
1e6a9047
BS
8775@item
8776@dfn{collapse-ndfa} modifies the behaviour of the generator when
8777producing an automaton. An additional state transition to collapse a
8778nondeterministic @acronym{NDFA} state to a deterministic @acronym{DFA}
8779state is generated. It can be triggered by passing @code{const0_rtx} to
8780state_transition. In such an automaton, cycle advance transitions are
8781available only for these collapsed states. This option is useful for
8782ports that want to use the @code{ndfa} option, but also want to use
8783@code{define_query_cpu_unit} to assign units to insns issued in a cycle.
8784
dfa849f3
VM
8785@item
8786@dfn{progress} means output of a progress bar showing how many states
8787were generated so far for automaton being processed. This is useful
8788during debugging a @acronym{DFA} description. If you see too many
8789generated states, you could interrupt the generator of the pipeline
8790hazard recognizer and try to figure out a reason for generation of the
8791huge automaton.
fae15c93
VM
8792@end itemize
8793
8794As an example, consider a superscalar @acronym{RISC} machine which can
8795issue three insns (two integer insns and one floating point insn) on
8796the cycle but can finish only two insns. To describe this, we define
8797the following functional units.
8798
8799@smallexample
8800(define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline")
ef261fee 8801(define_cpu_unit "port0, port1")
fae15c93
VM
8802@end smallexample
8803
8804All simple integer insns can be executed in any integer pipeline and
8805their result is ready in two cycles. The simple integer insns are
8806issued into the first pipeline unless it is reserved, otherwise they
8807are issued into the second pipeline. Integer division and
8808multiplication insns can be executed only in the second integer
8809pipeline and their results are ready correspondingly in 8 and 4
431ae0bf 8810cycles. The integer division is not pipelined, i.e.@: the subsequent
fae15c93
VM
8811integer division insn can not be issued until the current division
8812insn finished. Floating point insns are fully pipelined and their
ef261fee
R
8813results are ready in 3 cycles. Where the result of a floating point
8814insn is used by an integer insn, an additional delay of one cycle is
8815incurred. To describe all of this we could specify
fae15c93
VM
8816
8817@smallexample
8818(define_cpu_unit "div")
8819
68e4d4c5 8820(define_insn_reservation "simple" 2 (eq_attr "type" "int")
ef261fee 8821 "(i0_pipeline | i1_pipeline), (port0 | port1)")
fae15c93 8822
68e4d4c5 8823(define_insn_reservation "mult" 4 (eq_attr "type" "mult")
ef261fee 8824 "i1_pipeline, nothing*2, (port0 | port1)")
fae15c93 8825
68e4d4c5 8826(define_insn_reservation "div" 8 (eq_attr "type" "div")
ef261fee 8827 "i1_pipeline, div*7, div + (port0 | port1)")
fae15c93 8828
68e4d4c5 8829(define_insn_reservation "float" 3 (eq_attr "type" "float")
ef261fee 8830 "f_pipeline, nothing, (port0 | port1))
fae15c93 8831
ef261fee 8832(define_bypass 4 "float" "simple,mult,div")
fae15c93
VM
8833@end smallexample
8834
8835To simplify the description we could describe the following reservation
8836
8837@smallexample
8838(define_reservation "finish" "port0|port1")
8839@end smallexample
8840
8841and use it in all @code{define_insn_reservation} as in the following
8842construction
8843
8844@smallexample
68e4d4c5 8845(define_insn_reservation "simple" 2 (eq_attr "type" "int")
fae15c93
VM
8846 "(i0_pipeline | i1_pipeline), finish")
8847@end smallexample
8848
8849
a5249a21
HPN
8850@end ifset
8851@ifset INTERNALS
3262c1f5
RH
8852@node Conditional Execution
8853@section Conditional Execution
8854@cindex conditional execution
8855@cindex predication
8856
8857A number of architectures provide for some form of conditional
8858execution, or predication. The hallmark of this feature is the
8859ability to nullify most of the instructions in the instruction set.
8860When the instruction set is large and not entirely symmetric, it
8861can be quite tedious to describe these forms directly in the
8862@file{.md} file. An alternative is the @code{define_cond_exec} template.
8863
8864@findex define_cond_exec
8865@smallexample
8866(define_cond_exec
8867 [@var{predicate-pattern}]
8868 "@var{condition}"
aadaf24e
KT
8869 "@var{output-template}"
8870 "@var{optional-insn-attribues}")
3262c1f5
RH
8871@end smallexample
8872
8873@var{predicate-pattern} is the condition that must be true for the
8874insn to be executed at runtime and should match a relational operator.
8875One can use @code{match_operator} to match several relational operators
8876at once. Any @code{match_operand} operands must have no more than one
8877alternative.
8878
8879@var{condition} is a C expression that must be true for the generated
8880pattern to match.
8881
8882@findex current_insn_predicate
630d3d5a 8883@var{output-template} is a string similar to the @code{define_insn}
3262c1f5
RH
8884output template (@pxref{Output Template}), except that the @samp{*}
8885and @samp{@@} special cases do not apply. This is only useful if the
8886assembly text for the predicate is a simple prefix to the main insn.
8887In order to handle the general case, there is a global variable
8888@code{current_insn_predicate} that will contain the entire predicate
8889if the current insn is predicated, and will otherwise be @code{NULL}.
8890
aadaf24e
KT
8891@var{optional-insn-attributes} is an optional vector of attributes that gets
8892appended to the insn attributes of the produced cond_exec rtx. It can
8893be used to add some distinguishing attribute to cond_exec rtxs produced
8894that way. An example usage would be to use this attribute in conjunction
8895with attributes on the main pattern to disable particular alternatives under
8896certain conditions.
8897
ebb48a4d
JM
8898When @code{define_cond_exec} is used, an implicit reference to
8899the @code{predicable} instruction attribute is made.
0bddee8e
BS
8900@xref{Insn Attributes}. This attribute must be a boolean (i.e.@: have
8901exactly two elements in its @var{list-of-values}), with the possible
8902values being @code{no} and @code{yes}. The default and all uses in
8903the insns must be a simple constant, not a complex expressions. It
8904may, however, depend on the alternative, by using a comma-separated
8905list of values. If that is the case, the port should also define an
8906@code{enabled} attribute (@pxref{Disable Insn Alternatives}), which
8907should also allow only @code{no} and @code{yes} as its values.
3262c1f5 8908
ebb48a4d 8909For each @code{define_insn} for which the @code{predicable}
3262c1f5
RH
8910attribute is true, a new @code{define_insn} pattern will be
8911generated that matches a predicated version of the instruction.
8912For example,
8913
8914@smallexample
8915(define_insn "addsi"
8916 [(set (match_operand:SI 0 "register_operand" "r")
8917 (plus:SI (match_operand:SI 1 "register_operand" "r")
8918 (match_operand:SI 2 "register_operand" "r")))]
8919 "@var{test1}"
8920 "add %2,%1,%0")
8921
8922(define_cond_exec
8923 [(ne (match_operand:CC 0 "register_operand" "c")
8924 (const_int 0))]
8925 "@var{test2}"
8926 "(%0)")
8927@end smallexample
8928
8929@noindent
8930generates a new pattern
8931
8932@smallexample
8933(define_insn ""
8934 [(cond_exec
8935 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0))
8936 (set (match_operand:SI 0 "register_operand" "r")
8937 (plus:SI (match_operand:SI 1 "register_operand" "r")
8938 (match_operand:SI 2 "register_operand" "r"))))]
8939 "(@var{test2}) && (@var{test1})"
8940 "(%3) add %2,%1,%0")
8941@end smallexample
c25c12b8 8942
a5249a21 8943@end ifset
477c104e
MK
8944@ifset INTERNALS
8945@node Define Subst
8946@section RTL Templates Transformations
8947@cindex define_subst
8948
8949For some hardware architectures there are common cases when the RTL
8950templates for the instructions can be derived from the other RTL
8951templates using simple transformations. E.g., @file{i386.md} contains
8952an RTL template for the ordinary @code{sub} instruction---
8953@code{*subsi_1}, and for the @code{sub} instruction with subsequent
8954zero-extension---@code{*subsi_1_zext}. Such cases can be easily
8955implemented by a single meta-template capable of generating a modified
8956case based on the initial one:
8957
8958@findex define_subst
8959@smallexample
8960(define_subst "@var{name}"
8961 [@var{input-template}]
8962 "@var{condition}"
8963 [@var{output-template}])
8964@end smallexample
8965@var{input-template} is a pattern describing the source RTL template,
8966which will be transformed.
8967
8968@var{condition} is a C expression that is conjunct with the condition
8969from the input-template to generate a condition to be used in the
8970output-template.
8971
8972@var{output-template} is a pattern that will be used in the resulting
8973template.
8974
8975@code{define_subst} mechanism is tightly coupled with the notion of the
bdb6985c 8976subst attribute (@pxref{Subst Iterators}). The use of
477c104e
MK
8977@code{define_subst} is triggered by a reference to a subst attribute in
8978the transforming RTL template. This reference initiates duplication of
8979the source RTL template and substitution of the attributes with their
8980values. The source RTL template is left unchanged, while the copy is
8981transformed by @code{define_subst}. This transformation can fail in the
8982case when the source RTL template is not matched against the
8983input-template of the @code{define_subst}. In such case the copy is
8984deleted.
8985
8986@code{define_subst} can be used only in @code{define_insn} and
8987@code{define_expand}, it cannot be used in other expressions (e.g. in
8988@code{define_insn_and_split}).
8989
8990@menu
8991* Define Subst Example:: Example of @code{define_subst} work.
8992* Define Subst Pattern Matching:: Process of template comparison.
8993* Define Subst Output Template:: Generation of output template.
8994@end menu
8995
8996@node Define Subst Example
8997@subsection @code{define_subst} Example
8998@cindex define_subst
8999
9000To illustrate how @code{define_subst} works, let us examine a simple
9001template transformation.
9002
9003Suppose there are two kinds of instructions: one that touches flags and
9004the other that does not. The instructions of the second type could be
9005generated with the following @code{define_subst}:
9006
9007@smallexample
9008(define_subst "add_clobber_subst"
9009 [(set (match_operand:SI 0 "" "")
9010 (match_operand:SI 1 "" ""))]
9011 ""
9012 [(set (match_dup 0)
9013 (match_dup 1))
9014 (clobber (reg:CC FLAGS_REG))]
9015@end smallexample
9016
9017This @code{define_subst} can be applied to any RTL pattern containing
9018@code{set} of mode SI and generates a copy with clobber when it is
9019applied.
9020
9021Assume there is an RTL template for a @code{max} instruction to be used
9022in @code{define_subst} mentioned above:
9023
9024@smallexample
9025(define_insn "maxsi"
9026 [(set (match_operand:SI 0 "register_operand" "=r")
9027 (max:SI
9028 (match_operand:SI 1 "register_operand" "r")
9029 (match_operand:SI 2 "register_operand" "r")))]
9030 ""
9031 "max\t@{%2, %1, %0|%0, %1, %2@}"
9032 [@dots{}])
9033@end smallexample
9034
9035To mark the RTL template for @code{define_subst} application,
9036subst-attributes are used. They should be declared in advance:
9037
9038@smallexample
9039(define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber")
9040@end smallexample
9041
9042Here @samp{add_clobber_name} is the attribute name,
9043@samp{add_clobber_subst} is the name of the corresponding
9044@code{define_subst}, the third argument (@samp{_noclobber}) is the
9045attribute value that would be substituted into the unchanged version of
9046the source RTL template, and the last argument (@samp{_clobber}) is the
9047value that would be substituted into the second, transformed,
9048version of the RTL template.
9049
9050Once the subst-attribute has been defined, it should be used in RTL
9051templates which need to be processed by the @code{define_subst}. So,
9052the original RTL template should be changed:
9053
9054@smallexample
9055(define_insn "maxsi<add_clobber_name>"
9056 [(set (match_operand:SI 0 "register_operand" "=r")
9057 (max:SI
9058 (match_operand:SI 1 "register_operand" "r")
9059 (match_operand:SI 2 "register_operand" "r")))]
9060 ""
9061 "max\t@{%2, %1, %0|%0, %1, %2@}"
9062 [@dots{}])
9063@end smallexample
9064
9065The result of the @code{define_subst} usage would look like the following:
9066
9067@smallexample
9068(define_insn "maxsi_noclobber"
9069 [(set (match_operand:SI 0 "register_operand" "=r")
9070 (max:SI
9071 (match_operand:SI 1 "register_operand" "r")
9072 (match_operand:SI 2 "register_operand" "r")))]
9073 ""
9074 "max\t@{%2, %1, %0|%0, %1, %2@}"
9075 [@dots{}])
9076(define_insn "maxsi_clobber"
9077 [(set (match_operand:SI 0 "register_operand" "=r")
9078 (max:SI
9079 (match_operand:SI 1 "register_operand" "r")
9080 (match_operand:SI 2 "register_operand" "r")))
9081 (clobber (reg:CC FLAGS_REG))]
9082 ""
9083 "max\t@{%2, %1, %0|%0, %1, %2@}"
9084 [@dots{}])
9085@end smallexample
9086
9087@node Define Subst Pattern Matching
9088@subsection Pattern Matching in @code{define_subst}
9089@cindex define_subst
9090
9091All expressions, allowed in @code{define_insn} or @code{define_expand},
9092are allowed in the input-template of @code{define_subst}, except
9093@code{match_par_dup}, @code{match_scratch}, @code{match_parallel}. The
9094meanings of expressions in the input-template were changed:
9095
9096@code{match_operand} matches any expression (possibly, a subtree in
9097RTL-template), if modes of the @code{match_operand} and this expression
9098are the same, or mode of the @code{match_operand} is @code{VOIDmode}, or
9099this expression is @code{match_dup}, @code{match_op_dup}. If the
9100expression is @code{match_operand} too, and predicate of
9101@code{match_operand} from the input pattern is not empty, then the
9102predicates are compared. That can be used for more accurate filtering
9103of accepted RTL-templates.
9104
9105@code{match_operator} matches common operators (like @code{plus},
9106@code{minus}), @code{unspec}, @code{unspec_volatile} operators and
9107@code{match_operator}s from the original pattern if the modes match and
9108@code{match_operator} from the input pattern has the same number of
9109operands as the operator from the original pattern.
9110
9111@node Define Subst Output Template
9112@subsection Generation of output template in @code{define_subst}
9113@cindex define_subst
9114
9115If all necessary checks for @code{define_subst} application pass, a new
9116RTL-pattern, based on the output-template, is created to replace the old
9117template. Like in input-patterns, meanings of some RTL expressions are
9118changed when they are used in output-patterns of a @code{define_subst}.
9119Thus, @code{match_dup} is used for copying the whole expression from the
9120original pattern, which matched corresponding @code{match_operand} from
9121the input pattern.
9122
9123@code{match_dup N} is used in the output template to be replaced with
9124the expression from the original pattern, which matched
9125@code{match_operand N} from the input pattern. As a consequence,
9126@code{match_dup} cannot be used to point to @code{match_operand}s from
9127the output pattern, it should always refer to a @code{match_operand}
9128from the input pattern.
9129
9130In the output template one can refer to the expressions from the
9131original pattern and create new ones. For instance, some operands could
9132be added by means of standard @code{match_operand}.
9133
9134After replacing @code{match_dup} with some RTL-subtree from the original
9135pattern, it could happen that several @code{match_operand}s in the
9136output pattern have the same indexes. It is unknown, how many and what
9137indexes would be used in the expression which would replace
9138@code{match_dup}, so such conflicts in indexes are inevitable. To
9139overcome this issue, @code{match_operands} and @code{match_operators},
9140which were introduced into the output pattern, are renumerated when all
9141@code{match_dup}s are replaced.
9142
9143Number of alternatives in @code{match_operand}s introduced into the
9144output template @code{M} could differ from the number of alternatives in
9145the original pattern @code{N}, so in the resultant pattern there would
9146be @code{N*M} alternatives. Thus, constraints from the original pattern
9147would be duplicated @code{N} times, constraints from the output pattern
9148would be duplicated @code{M} times, producing all possible combinations.
9149@end ifset
9150
a5249a21 9151@ifset INTERNALS
c25c12b8
R
9152@node Constant Definitions
9153@section Constant Definitions
9154@cindex constant definitions
9155@findex define_constants
9156
9157Using literal constants inside instruction patterns reduces legibility and
9158can be a maintenance problem.
9159
9160To overcome this problem, you may use the @code{define_constants}
9161expression. It contains a vector of name-value pairs. From that
9162point on, wherever any of the names appears in the MD file, it is as
9163if the corresponding value had been written instead. You may use
9164@code{define_constants} multiple times; each appearance adds more
9165constants to the table. It is an error to redefine a constant with
9166a different value.
9167
9168To come back to the a29k load multiple example, instead of
9169
9170@smallexample
9171(define_insn ""
9172 [(match_parallel 0 "load_multiple_operation"
9173 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
9174 (match_operand:SI 2 "memory_operand" "m"))
9175 (use (reg:SI 179))
9176 (clobber (reg:SI 179))])]
9177 ""
9178 "loadm 0,0,%1,%2")
9179@end smallexample
9180
9181You could write:
9182
9183@smallexample
9184(define_constants [
9185 (R_BP 177)
9186 (R_FC 178)
9187 (R_CR 179)
9188 (R_Q 180)
9189])
9190
9191(define_insn ""
9192 [(match_parallel 0 "load_multiple_operation"
9193 [(set (match_operand:SI 1 "gpc_reg_operand" "=r")
9194 (match_operand:SI 2 "memory_operand" "m"))
9195 (use (reg:SI R_CR))
9196 (clobber (reg:SI R_CR))])]
9197 ""
9198 "loadm 0,0,%1,%2")
9199@end smallexample
9200
9201The constants that are defined with a define_constant are also output
9202in the insn-codes.h header file as #defines.
24609606
RS
9203
9204@cindex enumerations
9205@findex define_c_enum
9206You can also use the machine description file to define enumerations.
9207Like the constants defined by @code{define_constant}, these enumerations
9208are visible to both the machine description file and the main C code.
9209
9210The syntax is as follows:
9211
9212@smallexample
9213(define_c_enum "@var{name}" [
9214 @var{value0}
9215 @var{value1}
9216 @dots{}
9217 @var{valuen}
9218])
9219@end smallexample
9220
9221This definition causes the equivalent of the following C code to appear
9222in @file{insn-constants.h}:
9223
9224@smallexample
9225enum @var{name} @{
9226 @var{value0} = 0,
9227 @var{value1} = 1,
9228 @dots{}
9229 @var{valuen} = @var{n}
9230@};
9231#define NUM_@var{cname}_VALUES (@var{n} + 1)
9232@end smallexample
9233
9234where @var{cname} is the capitalized form of @var{name}.
9235It also makes each @var{valuei} available in the machine description
9236file, just as if it had been declared with:
9237
9238@smallexample
9239(define_constants [(@var{valuei} @var{i})])
9240@end smallexample
9241
9242Each @var{valuei} is usually an upper-case identifier and usually
9243begins with @var{cname}.
9244
9245You can split the enumeration definition into as many statements as
9246you like. The above example is directly equivalent to:
9247
9248@smallexample
9249(define_c_enum "@var{name}" [@var{value0}])
9250(define_c_enum "@var{name}" [@var{value1}])
9251@dots{}
9252(define_c_enum "@var{name}" [@var{valuen}])
9253@end smallexample
9254
9255Splitting the enumeration helps to improve the modularity of each
9256individual @code{.md} file. For example, if a port defines its
9257synchronization instructions in a separate @file{sync.md} file,
9258it is convenient to define all synchronization-specific enumeration
9259values in @file{sync.md} rather than in the main @file{.md} file.
9260
0fe60a1b
RS
9261Some enumeration names have special significance to GCC:
9262
9263@table @code
9264@item unspecv
9265@findex unspec_volatile
9266If an enumeration called @code{unspecv} is defined, GCC will use it
9267when printing out @code{unspec_volatile} expressions. For example:
9268
9269@smallexample
9270(define_c_enum "unspecv" [
9271 UNSPECV_BLOCKAGE
9272])
9273@end smallexample
9274
9275causes GCC to print @samp{(unspec_volatile @dots{} 0)} as:
9276
9277@smallexample
9278(unspec_volatile ... UNSPECV_BLOCKAGE)
9279@end smallexample
9280
9281@item unspec
9282@findex unspec
9283If an enumeration called @code{unspec} is defined, GCC will use
9284it when printing out @code{unspec} expressions. GCC will also use
9285it when printing out @code{unspec_volatile} expressions unless an
9286@code{unspecv} enumeration is also defined. You can therefore
9287decide whether to keep separate enumerations for volatile and
9288non-volatile expressions or whether to use the same enumeration
9289for both.
9290@end table
9291
24609606 9292@findex define_enum
8f4fe86c 9293@anchor{define_enum}
24609606
RS
9294Another way of defining an enumeration is to use @code{define_enum}:
9295
9296@smallexample
9297(define_enum "@var{name}" [
9298 @var{value0}
9299 @var{value1}
9300 @dots{}
9301 @var{valuen}
9302])
9303@end smallexample
9304
9305This directive implies:
9306
9307@smallexample
9308(define_c_enum "@var{name}" [
9309 @var{cname}_@var{cvalue0}
9310 @var{cname}_@var{cvalue1}
9311 @dots{}
9312 @var{cname}_@var{cvaluen}
9313])
9314@end smallexample
9315
8f4fe86c 9316@findex define_enum_attr
24609606 9317where @var{cvaluei} is the capitalized form of @var{valuei}.
8f4fe86c
RS
9318However, unlike @code{define_c_enum}, the enumerations defined
9319by @code{define_enum} can be used in attribute specifications
9320(@pxref{define_enum_attr}).
b11cc610 9321@end ifset
032e8348 9322@ifset INTERNALS
3abcb3a7
HPN
9323@node Iterators
9324@section Iterators
9325@cindex iterators in @file{.md} files
032e8348
RS
9326
9327Ports often need to define similar patterns for more than one machine
3abcb3a7 9328mode or for more than one rtx code. GCC provides some simple iterator
032e8348
RS
9329facilities to make this process easier.
9330
9331@menu
3abcb3a7
HPN
9332* Mode Iterators:: Generating variations of patterns for different modes.
9333* Code Iterators:: Doing the same for codes.
57a4717b 9334* Int Iterators:: Doing the same for integers.
477c104e 9335* Subst Iterators:: Generating variations of patterns for define_subst.
032e8348
RS
9336@end menu
9337
3abcb3a7
HPN
9338@node Mode Iterators
9339@subsection Mode Iterators
9340@cindex mode iterators in @file{.md} files
032e8348
RS
9341
9342Ports often need to define similar patterns for two or more different modes.
9343For example:
9344
9345@itemize @bullet
9346@item
9347If a processor has hardware support for both single and double
9348floating-point arithmetic, the @code{SFmode} patterns tend to be
9349very similar to the @code{DFmode} ones.
9350
9351@item
9352If a port uses @code{SImode} pointers in one configuration and
9353@code{DImode} pointers in another, it will usually have very similar
9354@code{SImode} and @code{DImode} patterns for manipulating pointers.
9355@end itemize
9356
3abcb3a7 9357Mode iterators allow several patterns to be instantiated from one
032e8348
RS
9358@file{.md} file template. They can be used with any type of
9359rtx-based construct, such as a @code{define_insn},
9360@code{define_split}, or @code{define_peephole2}.
9361
9362@menu
3abcb3a7 9363* Defining Mode Iterators:: Defining a new mode iterator.
6ccde948
RW
9364* Substitutions:: Combining mode iterators with substitutions
9365* Examples:: Examples
032e8348
RS
9366@end menu
9367
3abcb3a7
HPN
9368@node Defining Mode Iterators
9369@subsubsection Defining Mode Iterators
9370@findex define_mode_iterator
032e8348 9371
3abcb3a7 9372The syntax for defining a mode iterator is:
032e8348
RS
9373
9374@smallexample
923158be 9375(define_mode_iterator @var{name} [(@var{mode1} "@var{cond1}") @dots{} (@var{moden} "@var{condn}")])
032e8348
RS
9376@end smallexample
9377
9378This allows subsequent @file{.md} file constructs to use the mode suffix
9379@code{:@var{name}}. Every construct that does so will be expanded
9380@var{n} times, once with every use of @code{:@var{name}} replaced by
9381@code{:@var{mode1}}, once with every use replaced by @code{:@var{mode2}},
9382and so on. In the expansion for a particular @var{modei}, every
9383C condition will also require that @var{condi} be true.
9384
9385For example:
9386
9387@smallexample
3abcb3a7 9388(define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
032e8348
RS
9389@end smallexample
9390
9391defines a new mode suffix @code{:P}. Every construct that uses
9392@code{:P} will be expanded twice, once with every @code{:P} replaced
9393by @code{:SI} and once with every @code{:P} replaced by @code{:DI}.
9394The @code{:SI} version will only apply if @code{Pmode == SImode} and
9395the @code{:DI} version will only apply if @code{Pmode == DImode}.
9396
9397As with other @file{.md} conditions, an empty string is treated
9398as ``always true''. @code{(@var{mode} "")} can also be abbreviated
9399to @code{@var{mode}}. For example:
9400
9401@smallexample
3abcb3a7 9402(define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
032e8348
RS
9403@end smallexample
9404
9405means that the @code{:DI} expansion only applies if @code{TARGET_64BIT}
9406but that the @code{:SI} expansion has no such constraint.
9407
3abcb3a7
HPN
9408Iterators are applied in the order they are defined. This can be
9409significant if two iterators are used in a construct that requires
f30990b2 9410substitutions. @xref{Substitutions}.
032e8348 9411
f30990b2 9412@node Substitutions
3abcb3a7 9413@subsubsection Substitution in Mode Iterators
032e8348
RS
9414@findex define_mode_attr
9415
3abcb3a7 9416If an @file{.md} file construct uses mode iterators, each version of the
f30990b2
ILT
9417construct will often need slightly different strings or modes. For
9418example:
032e8348
RS
9419
9420@itemize @bullet
9421@item
9422When a @code{define_expand} defines several @code{add@var{m}3} patterns
9423(@pxref{Standard Names}), each expander will need to use the
9424appropriate mode name for @var{m}.
9425
9426@item
9427When a @code{define_insn} defines several instruction patterns,
9428each instruction will often use a different assembler mnemonic.
f30990b2
ILT
9429
9430@item
9431When a @code{define_insn} requires operands with different modes,
3abcb3a7 9432using an iterator for one of the operand modes usually requires a specific
f30990b2 9433mode for the other operand(s).
032e8348
RS
9434@end itemize
9435
9436GCC supports such variations through a system of ``mode attributes''.
9437There are two standard attributes: @code{mode}, which is the name of
9438the mode in lower case, and @code{MODE}, which is the same thing in
9439upper case. You can define other attributes using:
9440
9441@smallexample
923158be 9442(define_mode_attr @var{name} [(@var{mode1} "@var{value1}") @dots{} (@var{moden} "@var{valuen}")])
032e8348
RS
9443@end smallexample
9444
9445where @var{name} is the name of the attribute and @var{valuei}
9446is the value associated with @var{modei}.
9447
3abcb3a7 9448When GCC replaces some @var{:iterator} with @var{:mode}, it will scan
f30990b2 9449each string and mode in the pattern for sequences of the form
3abcb3a7 9450@code{<@var{iterator}:@var{attr}>}, where @var{attr} is the name of a
f30990b2 9451mode attribute. If the attribute is defined for @var{mode}, the whole
923158be 9452@code{<@dots{}>} sequence will be replaced by the appropriate attribute
f30990b2 9453value.
032e8348
RS
9454
9455For example, suppose an @file{.md} file has:
9456
9457@smallexample
3abcb3a7 9458(define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
032e8348
RS
9459(define_mode_attr load [(SI "lw") (DI "ld")])
9460@end smallexample
9461
9462If one of the patterns that uses @code{:P} contains the string
9463@code{"<P:load>\t%0,%1"}, the @code{SI} version of that pattern
9464will use @code{"lw\t%0,%1"} and the @code{DI} version will use
9465@code{"ld\t%0,%1"}.
9466
f30990b2
ILT
9467Here is an example of using an attribute for a mode:
9468
9469@smallexample
3abcb3a7 9470(define_mode_iterator LONG [SI DI])
f30990b2 9471(define_mode_attr SHORT [(SI "HI") (DI "SI")])
923158be
RW
9472(define_insn @dots{}
9473 (sign_extend:LONG (match_operand:<LONG:SHORT> @dots{})) @dots{})
f30990b2
ILT
9474@end smallexample
9475
3abcb3a7
HPN
9476The @code{@var{iterator}:} prefix may be omitted, in which case the
9477substitution will be attempted for every iterator expansion.
032e8348
RS
9478
9479@node Examples
3abcb3a7 9480@subsubsection Mode Iterator Examples
032e8348
RS
9481
9482Here is an example from the MIPS port. It defines the following
9483modes and attributes (among others):
9484
9485@smallexample
3abcb3a7 9486(define_mode_iterator GPR [SI (DI "TARGET_64BIT")])
032e8348
RS
9487(define_mode_attr d [(SI "") (DI "d")])
9488@end smallexample
9489
9490and uses the following template to define both @code{subsi3}
9491and @code{subdi3}:
9492
9493@smallexample
9494(define_insn "sub<mode>3"
9495 [(set (match_operand:GPR 0 "register_operand" "=d")
9496 (minus:GPR (match_operand:GPR 1 "register_operand" "d")
9497 (match_operand:GPR 2 "register_operand" "d")))]
9498 ""
9499 "<d>subu\t%0,%1,%2"
9500 [(set_attr "type" "arith")
9501 (set_attr "mode" "<MODE>")])
9502@end smallexample
9503
9504This is exactly equivalent to:
9505
9506@smallexample
9507(define_insn "subsi3"
9508 [(set (match_operand:SI 0 "register_operand" "=d")
9509 (minus:SI (match_operand:SI 1 "register_operand" "d")
9510 (match_operand:SI 2 "register_operand" "d")))]
9511 ""
9512 "subu\t%0,%1,%2"
9513 [(set_attr "type" "arith")
9514 (set_attr "mode" "SI")])
9515
9516(define_insn "subdi3"
9517 [(set (match_operand:DI 0 "register_operand" "=d")
9518 (minus:DI (match_operand:DI 1 "register_operand" "d")
9519 (match_operand:DI 2 "register_operand" "d")))]
9520 ""
9521 "dsubu\t%0,%1,%2"
9522 [(set_attr "type" "arith")
9523 (set_attr "mode" "DI")])
9524@end smallexample
9525
3abcb3a7
HPN
9526@node Code Iterators
9527@subsection Code Iterators
9528@cindex code iterators in @file{.md} files
9529@findex define_code_iterator
032e8348
RS
9530@findex define_code_attr
9531
3abcb3a7 9532Code iterators operate in a similar way to mode iterators. @xref{Mode Iterators}.
032e8348
RS
9533
9534The construct:
9535
9536@smallexample
923158be 9537(define_code_iterator @var{name} [(@var{code1} "@var{cond1}") @dots{} (@var{coden} "@var{condn}")])
032e8348
RS
9538@end smallexample
9539
9540defines a pseudo rtx code @var{name} that can be instantiated as
9541@var{codei} if condition @var{condi} is true. Each @var{codei}
9542must have the same rtx format. @xref{RTL Classes}.
9543
3abcb3a7 9544As with mode iterators, each pattern that uses @var{name} will be
032e8348
RS
9545expanded @var{n} times, once with all uses of @var{name} replaced by
9546@var{code1}, once with all uses replaced by @var{code2}, and so on.
3abcb3a7 9547@xref{Defining Mode Iterators}.
032e8348
RS
9548
9549It is possible to define attributes for codes as well as for modes.
9550There are two standard code attributes: @code{code}, the name of the
9551code in lower case, and @code{CODE}, the name of the code in upper case.
9552Other attributes are defined using:
9553
9554@smallexample
923158be 9555(define_code_attr @var{name} [(@var{code1} "@var{value1}") @dots{} (@var{coden} "@var{valuen}")])
032e8348
RS
9556@end smallexample
9557
3abcb3a7 9558Here's an example of code iterators in action, taken from the MIPS port:
032e8348
RS
9559
9560@smallexample
3abcb3a7
HPN
9561(define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
9562 eq ne gt ge lt le gtu geu ltu leu])
032e8348
RS
9563
9564(define_expand "b<code>"
9565 [(set (pc)
9566 (if_then_else (any_cond:CC (cc0)
9567 (const_int 0))
9568 (label_ref (match_operand 0 ""))
9569 (pc)))]
9570 ""
9571@{
9572 gen_conditional_branch (operands, <CODE>);
9573 DONE;
9574@})
9575@end smallexample
9576
9577This is equivalent to:
9578
9579@smallexample
9580(define_expand "bunordered"
9581 [(set (pc)
9582 (if_then_else (unordered:CC (cc0)
9583 (const_int 0))
9584 (label_ref (match_operand 0 ""))
9585 (pc)))]
9586 ""
9587@{
9588 gen_conditional_branch (operands, UNORDERED);
9589 DONE;
9590@})
9591
9592(define_expand "bordered"
9593 [(set (pc)
9594 (if_then_else (ordered:CC (cc0)
9595 (const_int 0))
9596 (label_ref (match_operand 0 ""))
9597 (pc)))]
9598 ""
9599@{
9600 gen_conditional_branch (operands, ORDERED);
9601 DONE;
9602@})
9603
923158be 9604@dots{}
032e8348
RS
9605@end smallexample
9606
57a4717b
TB
9607@node Int Iterators
9608@subsection Int Iterators
9609@cindex int iterators in @file{.md} files
9610@findex define_int_iterator
9611@findex define_int_attr
9612
9613Int iterators operate in a similar way to code iterators. @xref{Code Iterators}.
9614
9615The construct:
9616
9617@smallexample
9618(define_int_iterator @var{name} [(@var{int1} "@var{cond1}") @dots{} (@var{intn} "@var{condn}")])
9619@end smallexample
9620
9621defines a pseudo integer constant @var{name} that can be instantiated as
9622@var{inti} if condition @var{condi} is true. Each @var{int}
9623must have the same rtx format. @xref{RTL Classes}. Int iterators can appear
9624in only those rtx fields that have 'i' as the specifier. This means that
9625each @var{int} has to be a constant defined using define_constant or
9626define_c_enum.
9627
9628As with mode and code iterators, each pattern that uses @var{name} will be
9629expanded @var{n} times, once with all uses of @var{name} replaced by
9630@var{int1}, once with all uses replaced by @var{int2}, and so on.
9631@xref{Defining Mode Iterators}.
9632
9633It is possible to define attributes for ints as well as for codes and modes.
9634Attributes are defined using:
9635
9636@smallexample
9637(define_int_attr @var{name} [(@var{int1} "@var{value1}") @dots{} (@var{intn} "@var{valuen}")])
9638@end smallexample
9639
9640Here's an example of int iterators in action, taken from the ARM port:
9641
9642@smallexample
9643(define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])
9644
9645(define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")])
9646
9647(define_insn "neon_vq<absneg><mode>"
9648 [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
9649 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
9650 (match_operand:SI 2 "immediate_operand" "i")]
9651 QABSNEG))]
9652 "TARGET_NEON"
9653 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
9654 [(set_attr "neon_type" "neon_vqneg_vqabs")]
9655)
9656
9657@end smallexample
9658
9659This is equivalent to:
9660
9661@smallexample
9662(define_insn "neon_vqabs<mode>"
9663 [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
9664 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
9665 (match_operand:SI 2 "immediate_operand" "i")]
9666 UNSPEC_VQABS))]
9667 "TARGET_NEON"
9668 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
9669 [(set_attr "neon_type" "neon_vqneg_vqabs")]
9670)
9671
9672(define_insn "neon_vqneg<mode>"
9673 [(set (match_operand:VDQIW 0 "s_register_operand" "=w")
9674 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w")
9675 (match_operand:SI 2 "immediate_operand" "i")]
9676 UNSPEC_VQNEG))]
9677 "TARGET_NEON"
9678 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1"
9679 [(set_attr "neon_type" "neon_vqneg_vqabs")]
9680)
9681
9682@end smallexample
9683
477c104e
MK
9684@node Subst Iterators
9685@subsection Subst Iterators
9686@cindex subst iterators in @file{.md} files
9687@findex define_subst
9688@findex define_subst_attr
9689
9690Subst iterators are special type of iterators with the following
9691restrictions: they could not be declared explicitly, they always have
9692only two values, and they do not have explicit dedicated name.
9693Subst-iterators are triggered only when corresponding subst-attribute is
9694used in RTL-pattern.
9695
9696Subst iterators transform templates in the following way: the templates
9697are duplicated, the subst-attributes in these templates are replaced
9698with the corresponding values, and a new attribute is implicitly added
9699to the given @code{define_insn}/@code{define_expand}. The name of the
9700added attribute matches the name of @code{define_subst}. Such
9701attributes are declared implicitly, and it is not allowed to have a
9702@code{define_attr} named as a @code{define_subst}.
9703
9704Each subst iterator is linked to a @code{define_subst}. It is declared
9705implicitly by the first appearance of the corresponding
9706@code{define_subst_attr}, and it is not allowed to define it explicitly.
9707
9708Declarations of subst-attributes have the following syntax:
9709
9710@findex define_subst_attr
9711@smallexample
9712(define_subst_attr "@var{name}"
9713 "@var{subst-name}"
9714 "@var{no-subst-value}"
9715 "@var{subst-applied-value}")
9716@end smallexample
9717
9718@var{name} is a string with which the given subst-attribute could be
9719referred to.
9720
9721@var{subst-name} shows which @code{define_subst} should be applied to an
9722RTL-template if the given subst-attribute is present in the
9723RTL-template.
9724
9725@var{no-subst-value} is a value with which subst-attribute would be
9726replaced in the first copy of the original RTL-template.
9727
9728@var{subst-applied-value} is a value with which subst-attribute would be
9729replaced in the second copy of the original RTL-template.
9730
032e8348 9731@end ifset